Symfony翻译提取与导出通过命令行自动完成:提取用translation:extract扫描代码中trans()等调用并生成MessageCatalogue,导出则依配置(如xlf/yml/json)自动写入translations/目录,命名规则为domain.locale.format,支持lint校验与--remove清理。

Symfony翻译提取和导出是国际化开发中的两个关键环节:提取负责从代码中自动抓取待翻译的字符串,导出则把整理好的翻译内容写入指定格式的文件。整个过程无需手动复制粘贴,靠命令行工具和配置就能完成。
提取翻译字符串
使用内置命令扫描 PHP 文件,识别 trans()、transChoice()、TranslatableMessage 等调用:
- 确保已安装 symfony/translation 和 nikic/php-parser(dev 依赖)
- 运行命令提取英文源语言(默认域 messages):
php bin/console translation:extract en --dir=src --output-dir=translations - 支持指定域名:
--domain=validators,适用于验证器消息 - 可跳过已存在键:
--keep;强制覆盖:--force
导出翻译内容到文件
提取后生成的是内存中的 MessageCatalogue,导出动作会将其序列化为实际文件:
- 默认导出为 XLIFF(推荐),也会生成 YAML 或 JSON,取决于项目配置
- 若要导出为 YAML 格式,需在
config/packages/translation.yaml中确认 loader 支持:framework.translator.formats: ['xlf', 'yml', 'json'] - 导出命令本身不单独存在,它内嵌在 extract 命令中——只要目标目录
translations/存在且有写入权限,提取即自动导出 - 如需仅导出已有 catalogue(比如合并后),可用自定义脚本调用 FileDumper 类,例如
YamlFileDumper
常见格式与对应文件名规则
Symfony 按照 domain.locale.format 命名翻译文件,例如:
-
messages.en.xlf:英文主消息域,XLIFF 格式 -
validators.fr.yaml:法语验证器消息,YAML 格式 -
admin.zh_CN.json:中文简体后台域,JSON 格式
文件应放在 translations/ 目录下,这是默认加载路径。
验证与清理
提取完成后建议立即检查结果是否合理:
- 运行
php bin/console translation:lint en检查语法错误和缺失占位符 - 用
--display参数预览提取结果而不写入文件:php bin/console translation:extract en --display - 删除无用键可配合
--remove选项,但建议先备份原文件


















