symfony 4 无内置 import/export 命令,导入靠手动复制翻译文件(如 messages.zh_cn.xlf)并确保格式与加载器匹配,导出靠 translation:extract 提取代码中翻译键,再用 debug:translation 验证生效。

Symfony 4 的本地化翻译资源本身不通过“导入导出命令”直接操作,而是靠手动管理翻译文件(如 messages.fr.yaml)+ 命令行工具辅助提取和验证。没有内置的 translation:import 或 translation:export 命令,但可通过组合命令高效完成资源同步与维护。
翻译资源怎么“导入”到项目中
所谓“导入”,实际是把外部翻译内容(比如设计师给的 Excel、翻译公司返回的 XLIFF)转成 Symfony 支持的格式,并加载进项目:
- 手动复制翻译文件到
translations/目录(如translations/messages.zh_CN.xlf),确保文件名符合domain.locale.format规则 - 若源文件是 CSV 或 Excel:先用脚本或在线工具转为 XLIFF 或 YAML;推荐用 XLIFF(行业标准,支持上下文、复数、评审状态)
- 确认已注册对应加载器——YAML 默认启用,XLIFF 需确保
Symfony\Component\Translation\Loader\XliffFileLoader已加载(Bundle 默认包含) - 运行
php bin/console debug:translation fr messages检查法语翻译是否被识别并有无缺失键
如何从代码中“导出”待翻译字符串
真正可自动化的环节是“提取”——扫描 PHP、Twig 中所有 $translator->trans()、t()、{% trans %} 等调用,生成原始翻译模板:
- 确保已安装
symfony/translation(通常默认存在) - 执行提取命令:
php bin/console translation:extract fr --config=app --output-format=xlf(生成messages.fr.xlf) - 加
--dump-messages可预览将被提取的键列表,避免漏提 - 常用选项:
--whitelist限定目录、--enable-extractor启用 AST 提取器(更准)、--force覆盖已有文件
批量更新多语言文件的实用技巧
当新增了 20 个英文键,要同步到法语、中文等文件,不建议逐个手填:
- 先用
translation:extract en --output-format=yaml生成最新messages.en.yaml - 用脚本或 VS Code 多光标,把英文键复制到其他语言 YAML 文件中,值留空或填占位符(如
'contact.title': '') - 运行
php bin/console debug:translation zh_CN messages --only-missing快速列出所有未翻译项 - 配合
translation:update命令(需自定义或使用社区包如php-translation/symfony-bundle)可自动补全空值为 key 本身,便于后续人工校对
验证与调试翻译是否生效
上线前务必验证,避免“写了却没显示”:
-
php bin/console debug:translation fr messages:列出全部键,标注“missing”“unused”“identical”状态 -
php bin/console debug:translation fr messages --only-missing:只看缺译项 -
php bin/console debug:translation fr messages contact.title:查单个键在各层级(fallback、domain)的最终值 - 清除缓存:
php bin/console cache:clear,否则修改 YAML 后可能不生效(尤其开发环境未开 debug 模式时)











