【问题标题】:Symfony translation with placeholder doesn't work带有占位符的 Symfony 翻译不起作用
【发布时间】:2021-02-08 04:41:34
【问题描述】:

我正在尝试使用 Symfony translate (5.1.*) 翻译我的应用程序。我使用 Symfony 5.1。 基本翻译工作正常,但我在树枝中的变量有问题。

当我这样做时 {% trans with {'%name%': 'World'} from 'app' %}Hello %name%{% endtrans %}

它工作正常,结果是 Hello World 正如预期的那样。但是如果我这样做了

php bin/console translation:update --force en
php bin/console cache:clear

生成翻译文件,结果是Hello %name%

如果在翻译文件中,我删除这个引用:

<trans-unit id="yhpYN0i" resname="Hello %name%">
    <source>Hello %name%</source>
    <target>Hello %name%</target>
</trans-unit>

结果又是 Hello World

有人知道为什么翻译文件在使用变量时不起作用吗?

【问题讨论】:

    标签: php symfony internationalization twig translate


    【解决方案1】:

    如果您使用的是ICU message format,则占位符必须是{}。正如文档所述:

    在以前的翻译格式中,占位符通常被包裹在 %(例如 %name%)。这个 % 字符不再对 ICU 有效 MessageFormat 语法,因此您必须重命名参数 从以前的格式升级。

    您必须将翻译文件更改为:

    <target>Hello {name}</target>
    

    并从您的 twig 助手调用中删除 %

    {% trans with {'name': 'World'} from 'app' %}Hello %name%{% endtrans %}
    

    如果您不需要 ICU 提供的复数规则,要继续使用旧格式,您可以重命名翻译文件以删除 +intl-icu 后缀。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 2017-04-06
      • 2013-10-09
      • 2014-06-17
      • 2017-10-30
      • 2012-01-12
      • 2014-05-02
      • 1970-01-01
      相关资源
      最近更新 更多