我是i18n主题的新手,我尝试设置一个i18n网络应用程序。 通过不同的文档和示例阅读,看起来,所有提供的可能性几乎相同,这意味着:
在视图方面,我有一个源语言文本:
echo Yii:t('contact','This is a log text about contact informations.');
在翻译文件(包含CPhpMessageSource或GNU gettext的格式)或翻译表中,我必须重复此源文本作为锚点,就像在我的by-DE文件中一样CPhpMessageSource:
return array(
'This is a log text about contact informations.'
=> 'Des is a langa Text üba Kontakt Infoamadiona.',
);
这意味着,我必须保持源文本的冗余(查看和非常单一的翻译文件),这对于维护内容不是最佳的。
原因我可以设置ID /锚而不是源文本,例如:
echo Yii:t('contact','ContactInfo');
返回数组( '的ContactInfo' => 'Des is a langaTextübaKontaktInfoamadiona。 );
但在这种情况下,我无法将动态元素/变量注入文本中。
我的问题:
(sourceLanguage和targetLanguage只有一次)
return array(
'ContactInfo' => array(
'en-US' => 'This is a log text about contact informations.',
'by-DE' => 'Des is a langa Text üba Kontakt Infoamadiona.'
)
);
答案 0 :(得分:1)
[Yii 2]需要在翻译中重复源文本的原因是为此文本提供标识符。
您可以使用某种标签,但是当不需要翻译时(目标语言与源语言相同),您无法获得默认文本(非标签)除非< / strong>你强迫它配置:
'components' => [
'i18n' => [
'translations' => [
'category' => [
// ...
'forceTranslation' => true,
],
],
],
],
现在您可以使用\Yii::t('category', 'Label1')
并在消息文件中添加:
return [
'Label1' => 'This is expanded text behind the Label1.',
];
对于这里的变量,你可以毫无问题地使用它们,即:
\Yii::t('category', 'Label1', ['aaa' => 1, 'bbb' => 2])
并在消息文件中:
return [
'Label1' => 'Label1 with variables: aaa is {aaa} and bbb is {bbb}.',
];
关于问题#3 - 如果没有一些特别的准备,这是不可能的。