Composer 不处理国际化文件,因其仅为依赖管理器;翻译资源应作为源码纳入版本控制,而非依赖 Composer 安装或生成,推荐用 Makefile 或自定义脚本替代不可靠的 composer.json scripts。

Composer 本身不处理国际化(i18n)文件,它只是依赖管理器;你不能用 composer install 自动下载或编译 .po、.mo 或 messages.php 这类语言资源。
为什么 composer.json 的 scripts 无法可靠生成翻译文件
有人尝试在 composer.json 的 scripts 中调用 php bin/console translation:extract(Symfony)或 xgettext,但这存在明显问题:
- 命令依赖项目已安装的框架/工具,而
composer install阶段这些可能还没就绪(尤其是--no-dev时) - 提取逻辑通常需扫描源码路径、识别翻译函数(如
__('hello')或$translator->trans('key')),但 Composer 不理解 PHP 语法或框架约定 - 不同项目用不同 i18n 方案(Symfony Translation, Laravel Lang, gettext, PHP arrays),没有统一钩子
推荐做法:把 i18n 文件当作“源码”而非“依赖”来管理
将翻译资源纳入版本控制,而非试图让 Composer 下载或生成它们。具体操作取决于你的方案:
- 使用 Symfony?把
translations/目录提交进 Git,运行bin/console translation:extract --force en fr手动更新,再git add translations/ - 使用 gettext?提交
locale/en_US/LC_MESSAGES/messages.po和编译后的.mo,用msgfmt -o messages.mo messages.po构建,不靠 Composer - 使用纯 PHP 数组(如
lang/en.php)?直接提交该文件,确保include路径正确,无需额外工具链
如果真要自动化,用 Makefile 或自定义脚本替代 Composer scripts
比起在 composer.json 里塞一堆不可靠的 post-install-cmd,更可控的方式是写一个 Makefile 或 scripts/i18n-sync.sh:
艺帆网络工作室网站源码,是国庆后新一批新概念的网站源码,采用流行的Html5和JS组合流畅顺滑,界面清晰明朗,适合科技类企业和公司建站使用。如果你是想成为一家独特的设计公司,拥有独特的文化,追求品质,而非数量与规模。 这种坚持一直贯穿于项目运作之中,从品牌建立、形象推广设计到品牌形象管理。那可以考虑使用这款艺帆网络工作室网站源码。 这款源码中服务项目和团队程序需要在_template文件夹下的in
立即学习“PHP免费学习笔记(深入)”;
#!/bin/bash # scripts/i18n-sync.sh set -e if [ ! -f "vendor/autoload.php" ]; then echo "Run 'composer install' first" exit 1 fi bin/console translation:extract --force --output-format=xliff --domain=messages en fr msgmerge -U locale/fr_FR/LC_MESSAGES/messages.po locale/en_FR/LC_MESSAGES/messages.po msgfmt -o locale/fr_FR/LC_MESSAGES/messages.mo locale/fr_FR/LC_MESSAGES/messages.po
然后执行 bash scripts/i18n-sync.sh —— 这样时机、依赖、错误处理都由你自己掌控,不会被 Composer 生命周期干扰。
真正容易被忽略的是:i18n 文件的变更往往需要重新部署+重启(比如某些缓存机制下修改 .mo 不生效),而这点无论用什么工具触发,都得手动验证。别指望 Composer 能绕过这个环节。










