要在twig模板中正确显示多语言文本,必须启用symfony translation组件并配置translation.yaml启用翻译器、设置default_locale;在translations/目录下按locale创建messages.en.yaml和messages.zh.yaml等翻译文件;模板中用{{ 'app.welcome'|trans }}调用翻译,支持域指定和占位符传参;通过session存储locale并配合路由与链接实现动态语言切换。

要在Twig模板中正确显示不同语言的文本,必须让Symfony的翻译组件与Twig协同工作,而不是在模板里硬编码多语种内容或调用外部API实时翻译。
安装并启用Symfony Translation组件
执行命令安装翻译组件:composer require symfony/translation。
确保config/packages/translation.yaml存在且内容包含framework.translator: { enabled: true };若该文件不存在,手动创建并写入此配置。
【必须设置default_locale参数,否则trans()函数无法识别当前语言环境】
准备翻译资源文件
在项目根目录下创建translations/子目录。
新建translations/messages.en.yaml,写入英文键值对,例如:app.welcome: "Welcome to our site"。
新建translations/messages.zh.yaml,对应写入中文:app.welcome: "欢迎访问我们的网站"。
文件名中的messages是默认域(domain),en和zh是locale标识符,扩展名.yaml表示loader类型——Twig会自动识别并加载这些文件。
在Twig模板中使用翻译函数
直接在模板中调用{{ 'app.welcome'|trans }}即可输出当前locale对应的翻译文本。
若需指定非默认域,例如使用admin域,则写成{{ 'admin.title'|trans(domain='admin') }}。
传参翻译支持占位符:定义messages.en.yaml中为user.greeting: "Hello %name%!",模板中写{{ 'user.greeting'|trans({ '%name%': 'Alice' }) }},结果为Hello Alice!。
注意:占位符必须严格匹配,包括空格和标点;%NAME%或% name %均不会被替换。
动态切换语言环境
第一步:在config/packages/framework.yaml中确认已启用session和translator。
第二步:添加路由接收语言代码,例如/locale/{locale},控制器中执行$request->getSession()->set('_locale', $locale)。
第三步:在Twig模板顶部加入语言切换链接:@#@#@#@#@#@#@#@#@#@0 | @#@#@#@#@#@#@#@#@#@1。
第四步:确保framework.yaml中default_locale设为'%locale%',并在config/services.yaml中定义locale: 'en'作为兜底值。
这一步操作起来很简单,直接把文件拖进去就行。











