symfony 4 修改默认语言需配置 default_locale、启用翻译组件并指定 translations 路径,确保 messages.zh_cn.xlf 等文件存在且命名正确,twig 模板中可用 |trans 过滤器,可选配置路由前缀支持 locale 切换。

在 Symfony 4 中修改默认语言(locale),核心是配置 default_locale 并确保翻译系统能正确加载对应资源。这不是改一个参数就完事,而是一组相互配合的设置。
设置全局默认 locale
打开 config/packages/framework.yaml,确认包含以下配置:
framework:
default_locale: 'zh_CN' # 改为你需要的 locale,如 'fr'、'de'、'ja'
secret: '%env(APP_SECRET)%'
# ... 其他配置保持不变
这个值会作为整个应用的 fallback 和初始 locale。注意:Symfony 4 不再从环境变量自动推导 default_locale,必须显式声明。
确保翻译组件启用并指向正确路径
检查 config/packages/translation.yaml 是否存在且内容如下:
framework:
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks: ['zh_CN'] # 与 default_locale 一致,或按回退顺序写多个,如 ['zh_CN', 'en']
若该文件不存在,请手动创建。关键点:
-
default_path 必须显式指定,Symfony 4 不再默认扫描
translations/目录 - 目录
translations/必须真实存在(运行mkdir translations) - 文件命名需严格匹配:如
translations/messages.zh_CN.xlf或messages.zh_CN.yaml
验证 Twig 模板能否使用 trans 过滤器
默认情况下,Symfony 4 的 Twig 已集成翻译支持,但需确认:
- 已安装
symfony/translation组件(composer require symfony/translation) - 模板中写
{{ 'app.welcome'|trans }}能正常输出中文,说明翻译文件被加载 - 如果报错 “Variable "translator" does not exist”,需在
config/packages/twig.yaml中添加:
twig:
globals:
translator: '@translator'
让路由支持动态 locale 切换(可选但推荐)
若希望 URL 如 /zh_CN/about 自动切换语言,需配置路由前缀:
# config/routes.yaml
controllers:
resource: ../src/Controller/
type: annotation
prefix: '/{_locale}'
defaults: { _locale: '%kernel.default_locale%' }
同时,在控制器方法中用 $request->getLocale() 可获取当前请求的语言代码。注意:此功能依赖 session 启用,请确认 framework.session 在 framework.yaml 中已开启。











