You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:45:05