Symfony2 翻译器:override/replace 所有消息中的一个词
Symfony2 Translator: override/replace a single word in all messages
考虑以下代码片段:
$translator->setLocale('nl');
$translator->trans('You have ordered one cup of coffee');
许多语言都有所谓的 T–V distinction 来使文本更礼貌或更熟悉:"you" 在荷兰语中变成大写的 "U" 或非大写的 "je", "Vous" 或 "tu" 法语等
我们要使用哪一个取决于目标受众(在我们的例子中主要基于域),我们的一个向老年人销售奢侈品的网站应该使用礼貌的信息,而针对学生的网站需要使用更多熟悉的表格。
替换翻译器中特定消息的最佳方法是什么?创建一个全新的语言环境 ('nl, nl_polite') 似乎有点矫枉过正,要求我们为每个语言环境将每条消息翻译两次,并带有 T-V 区别。
理想情况下,我想在已经处理 subdomain/domain/customer 设置的现有 onKernelRequest 侦听器中做这样的事情:
if ($translator->getLocale() == 'nl' && $customer->getLanguagePolite() == true)
$translator->replaceWord('you','U');
$translator->replaceWord('your','Uw');
}
我想在翻译时替换消息中出现的所有单词(可能使用 preg_replace?),而不是替换消息。单词的语法位置终究没有改变。
我可以通过覆盖 symfony 翻译器来做到这一点吗?
对会发生变化的部分使用占位符。
见http://symfony.com/doc/current/components/translation/usage.html#component-translation-placeholders
例如
if ($customer->getLanguagePolite()) {
$placeholders = [
'%YOU%' => 'U',
'%YOUR%' => 'Uw',
etc
]
} else {
$placeholders = [
...
]
}
$yourMessage = '%YOU% blah blah %YOUR% etc';
$translator->trans($yourMessage, $placeholders);
考虑以下代码片段:
$translator->setLocale('nl');
$translator->trans('You have ordered one cup of coffee');
许多语言都有所谓的 T–V distinction 来使文本更礼貌或更熟悉:"you" 在荷兰语中变成大写的 "U" 或非大写的 "je", "Vous" 或 "tu" 法语等
我们要使用哪一个取决于目标受众(在我们的例子中主要基于域),我们的一个向老年人销售奢侈品的网站应该使用礼貌的信息,而针对学生的网站需要使用更多熟悉的表格。
替换翻译器中特定消息的最佳方法是什么?创建一个全新的语言环境 ('nl, nl_polite') 似乎有点矫枉过正,要求我们为每个语言环境将每条消息翻译两次,并带有 T-V 区别。
理想情况下,我想在已经处理 subdomain/domain/customer 设置的现有 onKernelRequest 侦听器中做这样的事情:
if ($translator->getLocale() == 'nl' && $customer->getLanguagePolite() == true)
$translator->replaceWord('you','U');
$translator->replaceWord('your','Uw');
}
我想在翻译时替换消息中出现的所有单词(可能使用 preg_replace?),而不是替换消息。单词的语法位置终究没有改变。
我可以通过覆盖 symfony 翻译器来做到这一点吗?
对会发生变化的部分使用占位符。
见http://symfony.com/doc/current/components/translation/usage.html#component-translation-placeholders
例如
if ($customer->getLanguagePolite()) {
$placeholders = [
'%YOU%' => 'U',
'%YOUR%' => 'Uw',
etc
]
} else {
$placeholders = [
...
]
}
$yourMessage = '%YOU% blah blah %YOUR% etc';
$translator->trans($yourMessage, $placeholders);