我有一个 Symfony2
项目,我正在使用 Translation
组件来翻译文本。我在 yml
文件中有所有的翻译,就像这样
translation-identifier: Translated text here
从 Twig
翻译文本看起来像这样
'translation-identifier'|trans({}, 'domain')
问题是,在某些情况下,我希望同一翻译有两个不同的文本(不是为了复数)。这是我希望它的工作方式:
在
yml
文件中为需要不同文本的翻译定义两个文本。每个都有自己独特的后缀translation-identifier-suffix1 translation-identifier-suffix2
定义一个全局规则来定义应该选择哪个后缀。下面的伪代码:
public function getSuffix() { return rand(0, 10) < 5 ? '-suffix1' : '-suffix2'; }
Twig(和 PHP)看起来是一样的——我仍然会只指定没有后缀的标识符。翻译器然后将后缀附加到标识符并尝试找到匹配项。如果没有匹配项,它将尝试再次找到没有后缀的匹配项。
最佳答案
据我所知,翻译器组件不支持它。
但如果您想要相同类型的行为,您可以通过覆盖翻译服务来实现。
1) 覆盖服务
# app/config/config.yml
parameters:
translator.class: Acme\HelloBundle\Translation\Translator
首先,您可以通过在 app/config/config.yml
中设置将保存服务类名的参数设置为您自己的类。
仅供引用:https://github.com/symfony/FrameworkBundle/blob/master/Resources/config/translation.xml
2) 扩展提供的翻译器类symfony framework bundle
。
仅供引用:https://github.com/symfony/FrameworkBundle/blob/master/Translation/Translator.php
3) 覆盖由翻译器组件
提供的trans
函数。
https://github.com/symfony/Translation/blob/master/Translator.php
希望这对您有所帮助!
关于php - Symfony2 中翻译的高级定制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550002/