Php Yii2 i18n翻译和冗余源语言文本

Php Yii2 i18n翻译和冗余源语言文本,php,yii,internationalization,yii2,translation,Php,Yii,Internationalization,Yii2,Translation,我对i18n这个话题还不熟悉,我试图建立一个i18nweb应用程序。 通过阅读不同的文档和示例,看起来所有提供的可能性都几乎相同,这意味着: 在视图侧,我有一个源语言文本: echo Yii:t('contact','这是关于联系人信息的日志文本') 在翻译文件(CPhpMessageSource或GNU gettext格式)或翻译表中,我必须再次重复此源文本作为锚定,就像在我的CPhpMessageSource的by DE文件中一样: return array( 'This is a

我对i18n这个话题还不熟悉,我试图建立一个i18nweb应用程序。 通过阅读不同的文档和示例,看起来所有提供的可能性都几乎相同,这意味着:

在视图侧,我有一个源语言文本:

echo Yii:t('contact','这是关于联系人信息的日志文本')

在翻译文件(CPhpMessageSource或GNU gettext格式)或翻译表中,我必须再次重复此源文本作为锚定,就像在我的CPhpMessageSource的by DE文件中一样:

return array(
    'This is a log text about contact informations.' 
         => 'Des is a langa Text üba Kontakt Infoamadiona.',
);
这意味着,我必须保持源文本冗余(视图和非常单一的翻译文件),这不是维护内容的最佳方式

当然,我可以设置一个ID/锚定,而不是源文本,如:

echo Yii:t('contact','ContactInfo')

返回数组( “联系人信息” =>“Des是一种语言文字,是一种信息载体。” );

但在这种情况下,我无法将动态元素/变量注入文本

我的问题:

  • 这是一个ID/锚定概念(案例2)对Yii2 sourceLanguage机制有效吗
  • 那么,我是否理解了i18n Yii应用程序设计的概念
  • 有可能这样做吗
  • (sourceLanguage和targetLanguage仅一次)


    [Yii 2]需要在翻译中重复源文本的原因是为该文本提供标识符。
    可以使用某种标签,但如果不需要翻译(目标语言与源语言相同),则无法获取默认文本(非标签)除非在配置中强制使用:

    '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-如果没有一些特殊的准备,这是不可能的。

    参考我的答案,这意味着:在翻译文本中使用变量,而不是标签/源语言将起作用!?我不确定我是否遵循。。。区别是什么?我想,我必须从存在翻译标签的视图传递参数placeholder,直到消息文件。(如:“这是参数为{aaa}的al标签文本”)。但在您的示例中,我仅在消息文件中看到参数placeholder。很高兴知道这一点。
    return [
        'Label1' => 'Label1 with variables: aaa is {aaa} and bbb is {bbb}.',
    ];