composer 本身不支持多语言切换,所谓中文支持实为第三方包硬替换;其不读取 locale 配置、不加载 .mo 文件,config --global locale zh_cn 无效,繁体提示多来自 csineneo/lang-traditional-chinese 等劫持式包。

Composer 本身不支持多语言环境切换,所谓“中文支持更多语言”是常见误解——它没有运行时语言选择器、不读取 locale 配置项做全局翻译、也不加载 .mo 文件。你看到的中文(尤其是繁体),几乎全是第三方包硬替换的结果,不是 Composer 自身能力。
为什么 composer config --global locale zh_CN 没反应
这个命令会写入 ~/.config/composer/config.json,但 Composer 主程序根本不读这个字段来控制输出语言。它只在极少数帮助文案中尝试读取,且前提是:vendor/composer/lang/zh_CN/ 下有完整翻译文件(目前官方 2.7.x 版本里该目录下多数 .php 文件为空)。即使配置存在,只要缺一个字符串映射,对应提示就回退英文。更关键的是:LC_ALL 或 LANG 环境变量优先级更高,如果终端当前是 en_US.UTF-8,这个配置直接被忽略。
哪些“中文”其实是第三方包在冒充
如果你执行 composer install 看到「安裝依賴」或「無法解析需求」这类繁体字,基本可以确定装了 csineneo/lang-traditional-chinese。它不是插件,而是靠 ob_start() + 正则替换实现的字符串劫持,稳定性差、易和新版冲突、不处理动态错误(比如 Git 克隆失败时仍显示英文)。验证方式很简单:
- 运行
composer show csineneo/lang-traditional-chinese,有输出就说明已安装 - 同理检查
csineneo/lang-simplified-chinese,如有也一并composer remove - 执行
composer clear-cache清掉可能残留的替换缓存
做完这三步,输出回归纯英文——这才是 Composer 的本来面目。
真要让部分提示变中文,必须满足三个硬条件
想让极少量硬编码文案(如 composer --help 中的选项说明)显示为中文,不是改个配置就能成,得同时满足:
- 系统已生成
zh_CN.UTF-8locale:运行sudo locale-gen zh_CN.UTF-8 && sudo update-locale,再用locale -a | grep zh_CN确认存在 - Shell 环境变量设对:
export LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8,建议写进~/.bashrc或~/.zshrc - Composer 版本 ≥ 2.5.0 且手动补全翻译文件:从 GitHub
composer/composer的dev-main分支复制src/Lang/zh_CN.php到本地vendor/composer/lang/zh_CN/目录下
缺一不可。否则你调 composer diagnose 看到的仍是英文,这不是配置漏了,是 Composer 原生就不打算认真做国际化。
别把 Composer 当翻译平台,它只是依赖搬运工
很多人搜“Composer 多语言支持”,实际想要的是 Laravel 项目切换中/英文、或生成带双语字幕的说明书视频。这些需求和 Composer 完全无关:laravel-lang 是静态资源包,装完还得手动复制到 resources/lang/zh_CN/;而多语字幕动画得靠外部工具(如 FFmpeg 加轨道)或前端 JS 控制显隐。Composer 只负责把 vendor 里的代码拉下来,不参与任何文案渲染、语音调度或界面切换逻辑。最容易被忽略的一点是:它的所有错误信息(比如 Your requirements could not be resolved)都是调试线索,翻译反而会模糊关键术语(如 locked 对应 composer.lock 文件),增加排查成本。











