带占位符的 Symfony 翻译不起作用
Symfony translation with placeholder doesn't work
我正在尝试使用 Symfony translate (5.1.*) 翻译我的应用程序。我使用 Symfony 5.1。
基本翻译工作正常,但我对 twig 中的变量有疑问。
当我做的时候
{% 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.
有人知道为什么在使用变量时翻译文件不起作用吗?
如果您使用 ICU message format,占位符必须是 {}
。正如文档所述:
In the previous translation format, placeholders were often wrapped in
% (e.g. %name%). This % character is no longer valid with the ICU
MessageFormat syntax, so you must rename your parameters if you are
upgrading from the previous format.
您必须将翻译文件更改为:
<target>Hello {name}</target>
并从你的 Twig 助手调用中删除 %
{% trans with {'name': 'World'} from 'app' %}Hello %name%{% endtrans %}
如果您不需要 ICU 提供的复数规则,要继续使用旧格式,您可以重命名翻译文件以删除 +intl-icu
后缀。
我正在尝试使用 Symfony translate (5.1.*) 翻译我的应用程序。我使用 Symfony 5.1。 基本翻译工作正常,但我对 twig 中的变量有疑问。
当我做的时候
{% 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.
有人知道为什么在使用变量时翻译文件不起作用吗?
如果您使用 ICU message format,占位符必须是 {}
。正如文档所述:
In the previous translation format, placeholders were often wrapped in % (e.g. %name%). This % character is no longer valid with the ICU MessageFormat syntax, so you must rename your parameters if you are upgrading from the previous format.
您必须将翻译文件更改为:
<target>Hello {name}</target>
并从你的 Twig 助手调用中删除 %
{% trans with {'name': 'World'} from 'app' %}Hello %name%{% endtrans %}
如果您不需要 ICU 提供的复数规则,要继续使用旧格式,您可以重命名翻译文件以删除 +intl-icu
后缀。