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

Symfony Twig翻译无法填充占位符问题排查

Symfony Twig翻译占位符无法同时填充问题解决办法

核心问题

当父字符串在XLF翻译文件中有对应翻译时,使用trans过滤器无法同时完成父字符串翻译和占位符替换;移除父字符串翻译后,占位符能正常填充。

解决步骤

  • 检查翻译文件占位符格式
    确保XLF文件中父字符串的翻译版本保留了和原字符串一致的占位符格式。比如原字符串是this is my test: %test%,翻译后的字符串必须包含%test%,不能改成其他格式(比如{{ test }}或者漏掉百分号)。示例正确的XLF条目:

    <trans-unit id="parent_string">
      <source>this is my test: %test%</source>
      <target>这是我的测试:%test%</target>
    </trans-unit>
    

    要是翻译后的占位符格式不对,Twig根本识别不出要替换的内容。

  • 调整trans嵌套顺序
    别在trans的参数里直接嵌套trans过滤器,先把占位符的翻译结果存成变量,再传给父字符串的trans。示例:

    {% set translated_test = 'test!'|trans %}
    {{ 'this is my test: %test%'|trans({'%test%': translated_test}) }}
    

    嵌套写法可能让Twig解析顺序出错,外层trans执行时内层还没完成,占位符自然替换失败。

  • 确认模板包含的上下文一致性
    模板被包含时,要保证翻译域(domain)一致。如果父模板或被包含模板指定了不同的domain,会导致父字符串和占位符的翻译不在同一个上下文里。可以显式指定domain:

    {% set translated_test = 'test!'|trans({}, 'messages') %}
    {{ 'this is my test: %test%'|trans({'%test%': translated_test}, 'messages') }}
    

    另外检查include模板时有没有传递同名变量,干扰占位符的替换逻辑。

  • 彻底清除缓存
    确保清除对应环境的缓存,比如生产环境执行:

    php bin/console cache:clear --env=prod
    

    缓存残留会导致旧的翻译逻辑生效,占位符替换不触发。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:55:29