composer audit 不依赖中文本地化缓存,所有输出均为硬编码英文,不读取系统 locale、不调用翻译扩展;其安全数据库缓存为纯 json 文件,无语言字段,刷新靠 --force 参数或环境变量 composer_audit_advisories_path。

composer audit 不需要中文本地化缓存,它根本不做语言适配,也不依赖本地翻译库。 它只比对 composer.lock 中的包名和版本号与 FriendsOfPHP/security-advisories 数据库中的原始英文条目,所有输出字段(如 advisory ID、title)都是直接透传的 JSON 值,没有翻译层参与。
为什么“中文环境”对 composer audit 完全无影响
这个命令从不读取系统 locale、不加载任何语言包、不调用 gettext 或 Intl 扩展。所谓“中文环境”只是终端显示字体或 shell 提示符的语言设置,composer audit 的输出内容(包括表格列名、严重等级 critical/high、CVE 编号)全是硬编码英文字符串,不会因 LANG=zh_CN.UTF-8 改变。
-
composer audit --format=json输出的"severity": "critical"永远是英文,不是"严重" -
--format=full里附带的link指向 NVD 或 FriendsOfPHP 页面,也是英文原文 - 错误信息如
Could not fetch security advisories同样固定为英文,无法被本地化
真正需要关心的是缓存位置和刷新时机
composer audit 默认使用本地缓存的 FriendsOfPHP 安全数据库快照(通常随 Composer 更新同步),不是实时联网拉取。这个缓存本身是纯 JSON 文件,无语言字段,也无所谓“中文版”。
- 缓存路径:Linux/macOS 在
~/.composer/cache/advisories/,Windows 在%APPDATA%\Composer\Cache\advisories\ - 首次运行会自动下载,后续复用;但若超过 7 天未更新,
audit可能静默跳过网络检查(取决于 Composer 内部策略) - 强制刷新缓存:加
--force参数,例如composer audit --force --no-dev,它会绕过本地快照,直连https://security.sensiolabs.org(实际是 FriendsOfPHP 镜像) - CI 环境中建议始终加
--timeout=30 --no-interaction,防止 DNS 不稳或防火墙拦截导致卡住
中文用户最容易踩的坑:误以为要配语言或镜像
不存在 composer config --global audit.language zh 这种配置项,也没有官方提供的“中文安全公告镜像源”。试图修改 repositories 或添加第三方中文 advisory 插件,反而会让 audit 失效——因为它只认 FriendsOfPHP 的原始数据结构。
- 不要改
~/.composer/auth.json加 language 字段,experimental.audit是布尔开关,不是语言配置 - 不要用
composer config --global repo.packagist.org指向国内镜像来加速 audit——这无效,audit不走 packagist 请求流 - 若公司内网无法访问 FriendsOfPHP 数据库,唯一合规做法是定期手动下载
advisories.json并通过COMPOSER_AUDIT_ADVISORIES_PATH环境变量指向本地文件(需自行维护更新)
真正关键的不是语言,而是你锁文件里的版本是否精确、缓存是否新鲜、CI 是否用了 --severity=critical 这类过滤参数。中文终端里看到的英文输出不是缺陷,是设计使然——安全数据本就该以原始、可验证的方式呈现。











