Symfony执行translation:update后Twig翻译变量替换失效问题
问题原因
你遇到的问题是Symfony 5.x版本开始,translation:update命令默认生成带+intl-icu后缀的ICU消息格式翻译文件,这类文件的占位符规则和你用的传统%变量名%格式不兼容:
- 无
intl-icu标识的传统翻译文件,识别%占位符%作为变量标记,和你Twig模板里的写法匹配,所以没有翻译文件时输出正常 - ICU格式翻译文件仅识别
{占位符}(无百分号)作为变量标记,%name%会被判定为普通文本直接输出,因此变量不会被替换。
解决方案
有两种可行方案,可按需选择:
方案一:适配ICU格式(Symfony默认推荐规范)
无需修改Twig模板代码,只需要调整自动生成的xliff翻译文件中<target>标签的占位符格式,把百分号包裹的变量改为大括号包裹即可:
<!-- 修改前 --> <target>__Hello %name%</target> <!-- 修改后 --> <target>__Hello {name}</target>
所有翻译项调整完成后,执行php bin/console cache:clear清空缓存即可正常输出。
方案二:生成传统格式翻译文件
如果不想调整现有语法,执行导出命令时添加--no-intl-icu参数,强制生成传统格式的翻译文件即可,命令如下:
php bin/console translation:update --force --no-intl-icu en
用该命令生成的翻译文件会兼容原有%变量名%的占位符写法,无需额外修改翻译文件内容。
内容的提问来源于stack exchange,提问作者madflow
相关产品推荐
相关产品推荐

