新项目应优先选用xliff(.xlf),因其是symfony 4+官方默认且唯一自动加载的格式,支持专业翻译协作、cat工具对接及source/target分离;yaml需手动启用加载器,仅适合无协作需求的小规模快速验证。

推荐新项目优先用 XLIFF(.xlf),YAML(.yml)仅适合小规模快速验证或团队无翻译协作需求的场景。
为什么XLIFF是Symfony 4+官方首选
XLIFF 是国际化工业标准,Symfony 4 起默认只自动加载 .xlf 文件,无需额外配置加载器。YAML 文件即使放在正确路径下,也会被忽略——除非你手动注册 YamlFileLoader 并启用 YAML 支持。
- 文件名必须严格匹配
messages.en.xlf、admin.zh_CN.xlf等格式(domain.locale.xlf) - 支持
<source></source>与<target></target>分离,便于专业翻译工具识别和复用 - 自带
id和状态标记(如state="translated"),方便协作与审核 - Twig 中调用
{{ 'welcome.message'|trans }}可直接命中,无需指定 domain 或 locale
YAML 文件在 Symfony 4 中要“能用”得加配置
若坚持用 .yml,需两步补救:
- 在
config/packages/translation.yaml中显式启用 YAML 加载器:framework:translator:default_path: '%kernel.project_dir%/translations'fallbacks: ['en']php_errors:log: true - 安装并注册
symfony/yaml组件(通常已含),并在服务中手动添加加载器(不推荐,易遗漏) - 文件命名仍须合规:如
messages.fr.yml,内容结构为键值对,不支持注释或元数据
实际选型建议
看团队工作流:
- 有翻译外包、多语言上线节奏、需要 CAT 工具(如 Poedit、Crowdin)对接 → 必选 XLIFF
- 纯内部小项目,只有中英文,开发者自己维护,且不愿写 XML → 可临时用 YAML,但记得后续迁移到 XLIFF 避免升级踩坑
- 已有大量 YAML 翻译存量?可用
bin/console translation:extract导出为 XLIFF,再逐步替换
不复杂但容易忽略:Symfony 4 默认只认 XLIFF,不是“支持 YAML”,而是“支持但不默认启用”。选错格式,trans() 返回原文,不是翻译没写对,是文件根本没加载。











