symfony 4 默认集成 translation 组件,配置多语言只需三步:设置支持语言与默认区域(config/packages/translation.yaml)、准备xliff格式翻译文件(如messages+intl-icu.zh_cn.xlf)、按优先级动态解析语言(url路径>accept-language>session>cookie>默认),模板中用{{ 'key'|trans({'name': '张三'}) }}调用。

Symfony 4 默认集成 Translation 组件,配置多语言本地化环境不需额外安装扩展,关键在于三步:设置支持的语言列表、准备翻译资源、在运行时正确解析语言偏好。
配置支持的语言与默认区域
在 config/packages/translation.yaml 中明确声明可用语言:
framework:default_locale: 'zh_CN'
translator:
fallbacks: ['en']
logging: '%kernel.debug%'
default_path: '%kernel.project_dir%/translations'
providers: []
同时,在 .env 文件中可设初始语言(供开发调试):
APP_LOCALE=zh_CN准备翻译文件(推荐 XLIFF 格式)
在 translations/ 目录下按语言码创建文件,例如:
- messages+intl-icu.zh_CN.xlf(中文)
- messages+intl-icu.en_US.xlf(英文)
内容结构清晰,使用 ICU 格式支持复数、占位符等:
动态识别并切换当前语言
语言来源优先级建议为:URL 路径 > Accept-Language 请求头 > Session > Cookie > 默认。可在控制器或事件监听器中统一处理:
- 在路由中加入 locale 占位符:
path: /{locale}/about,并在defaults: { _locale: 'zh_CN' }设兜底 - 用
$request->setLocale($locale)主动设置,再调用$translator->setLocale($locale) - 将语言存入 session 或 cookie,后续请求自动读取(避免每次解析 Accept-Language)
模板中直接使用:{{ 'welcome_msg'|trans({'name': '张三'}) }}
验证与调试技巧
执行命令快速检查翻译是否加载成功:
-
php bin/console debug:translation zh_CN—— 列出所有中文翻译项及状态(missing/unused) -
php bin/console translation:extract zh_CN --config=app—— 自动扫描 Twig/PHP 中的trans()调用并更新 XLIFF - 启用 debug 模式后,在 Web Profiler 的 “Translation” 面板中可实时查看命中情况











