在 Symfony 4 中,需同时配置 services.yaml(定义 locale 参数)和 translation.yaml(设 default_locale: '%locale%' 及 fallbacks),并创建对应命名的 translations/messages.{locale}.xlf 或 .yaml 文件,否则 trans() 将返回原文。

在 Symfony 4 中,设置本地化默认语言(locale)需通过 services.yaml 和 translation.yaml 两个关键配置文件协同完成,不能只改一处。默认语言决定用户未指定语言时的回退行为和初始翻译上下文。
在 services.yaml 中定义 locale 参数
这是最基础的一步:Symfony 的翻译组件依赖一个名为 %locale% 的参数作为默认语言标识。必须显式声明,不能靠猜测或环境变量隐式提供。
- 打开
config/services.yaml - 在
parameters:下添加一行:locale: 'zh_CN'(如需中文)或locale: 'fr'(如需法语) - 该值将被
translation.yaml引用,也用于 Twig、表单等组件的默认行为
在 translation.yaml 中启用并配置翻译器
Symfony 4 默认启用 Translation 组件,但需确保配置完整,否则 trans() 可能返回原文而非翻译。
- 确认
config/packages/translation.yaml存在且内容包含:
framework:
default_locale: '%locale%'
translator:
fallbacks: ['%locale%']
-
default_locale必须设为'%locale%'(引用参数),不能直接写死,否则无法与 services.yaml 同步 -
fallbacks建议至少包含一个备用语言,例如['zh_CN', 'en'],避免翻译缺失时显示空或 key - 若项目根目录下有
translations/文件夹,可加default_path: '%kernel.project_dir%/translations'显式指定路径(Symfony 4 虽默认扫描,但显式声明更稳妥)
准备 translations 目录与文件
翻译资源必须放在正确位置、使用标准命名,Symfony 才能自动加载。
- 创建目录:
translations/(位于项目根目录,与src/同级) - 添加文件,例如:
translations/messages.zh_CN.xlf(推荐 XLIFF 格式)
或translations/messages.zh_CN.yaml(若已启用 YAML 加载器) - 文件内按标准格式写入键值对,如:
app.title: "欢迎来到网站"(YAML)或对应 XLIFF 结构 - 注意:文件名中的 locale 必须与
services.yaml中设置的完全一致(如zh_CN不等于zh)
验证默认语言是否生效
配置完成后,可通过简单方式快速验证:
- 在控制器中注入
TranslatorInterface,调用$translator->getLocale(),应返回zh_CN等设定值 - 在 Twig 模板中写
{{ 'app.title'|trans }},查看是否输出中文而非 key 或英文 - 若仍显示原文,请检查:
–translations/目录是否存在且可读
– 文件扩展名是否匹配当前加载器(XLIFF 是 Symfony 4 默认支持的)
– 是否清除了缓存:php bin/console cache:clear


















