如何解决使用占位符的Symfony翻译不起作用
我正在尝试使用Symfony翻译(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 。
有人知道为什么使用变量时翻译文件不起作用?
解决方法
如果您使用的是ICU message format,则占位符必须为{}
。如文档所述:
在以前的翻译格式中,通常将占位符包装在 %(例如%name%)。此%字符在ICU中不再有效 MessageFormat语法,因此如果您是 从以前的格式升级。
您必须将翻译文件更改为:
<target>Hello {name}</target>
从您的树枝助手呼叫中删除%
{% trans with {'name': 'World'} from 'app' %}Hello %name%{% endtrans %}
如果不需要ICU提供的复数规则,则可以继续使用旧格式,可以重命名翻译文件以删除后缀+intl-icu
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。