Twig框架中如何直接翻译字符串与变量的拼接内容?
直接翻译拼接内容的Twig解决方案
嘿,这个问题其实是Twig的运算符优先级在搞鬼!你之前的写法{{ 'string' ~ variable|trans }}里,过滤器|的优先级比字符串拼接~高,所以Twig会先把variable单独翻译,再和原字符串'string'拼在一起,自然只有变量部分被翻译了。
无需中间变量的直接写法
解决方法很简单,把整个拼接表达式用括号括起来,让trans过滤器作用在完整的拼接结果上就行:
{{ ('string' ~ variable)|trans }}
这样Twig会先完成字符串与变量的拼接,再对整个结果应用翻译过滤器,就能得到你想要的完整翻译内容了。
关于{% trans %}块的正确打开方式
你之前用{% trans %} {{'string' ~ variable }} {% endtrans %}无效,是因为在trans块内部,Twig对表达式的解析规则不一样——直接写'string' ~ variable会被当作普通文本处理,而不是计算表达式。其实更推荐用trans块的占位符语法,这也是国际化的最佳实践:
{% trans %} string {{ variable }} {% endtrans %}
这种写法不仅不用手动拼接,还能让翻译文件里的条目更清晰(比如对应翻译键可以用%variable%作为占位符),后续维护起来也更方便。
额外小技巧
如果你的拼接逻辑更复杂(比如涉及多个变量或条件判断),除了括号包裹的方式,也可以结合format过滤器来实现:
{{ ('string %s'|format(variable))|trans }}
不过这种写法和括号拼接的效果类似,选哪种全看你觉得哪种代码更易读~
内容的提问来源于stack exchange,提问作者Ricard Espinàs Llovet
相关产品推荐
相关产品推荐

