sourceLanguage中的翻译在Yii2应用程序中不起作用

时间:2015-04-07 09:22:51

标签: translation yii2

我在Yii2应用程序中使用基于关键字的翻译(我知道,这不是最佳选择,但我没有其他选项)。我已使用关键字准备了@app/messages/pl/app.php@app/messages/en/app.php个带翻译字符串的文件,而不是使用功能齐全的句子或单词:

<?php
    return [
        'name_english'=>'Name in English',
        'keywords_english'=>'Keywords in English'
    ];
?>

我已将我的应用程序设置为默认使用 Polish 语言:

'language' => 'pl',
'sourceLanguage' => 'en',

我正在调用翻译:

Yii::t('app', 'keywords_english');

当语言实际设置为基础时,一切正常,波兰语pl):

enter image description here

但是,当我将其更改为 English en;通过在运行时设置Yii::$app->language或更改应用程序配置时),不执行翻译,我是得到keywords_english

enter image description here

我已将die()放在@app/messages/pl/app.php@app/messages/en/app.php文件的开头,我可以清楚地看到,当语言设置为英语时,第二个文件Yii2没有包含(应用程序运行如下),而当语言波兰语时,包含第一个文件,应用程序流中断die()

我错过了什么?如果语言设置为英语@app/messages/en/app.php),为什么Yii2不使用en文件的翻译?

编辑:默认情况下,我没有在我的应用程序配置中更改默认的i18n组件配置,因为我发现没有必要。翻译文件存储在默认位置(@app/messages/<language>/),并使用默认类(yii\i18n\PhpMessageSource)。这适用于除sourceLanguage之外的所有语言。在某些时候,我试图改变配置:

'i18n' => [
    'translations' => [
        '*' => [
            'class' => 'yii\i18n\PhpMessageSource',
            'sourceLanguage' => 'en',
            'basePath' => '@app/messages'
        ],
    ],
],

但是,它没有带来任何变化(为什么它应该 - 它仍然使用默认设置)。

2 个答案:

答案 0 :(得分:7)

根据samdark at Yii Forum,这是设计的。如果language = sourceLangage,则不会执行翻译。

要解决此问题并在此情况下强制翻译,必须将forceTranslation设置为true

因此,必须以与此类似的方式在应用程序配置的i18n部分中添加/修改components组件:

'i18n' => [
    'translations' => [
        'app' => [
            'class' => 'yii\i18n\PhpMessageSource',
            'forceTranslation' => true
        ],
    ],
],

答案 1 :(得分:1)

解决方案:

'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@app/messages',
                'sourceLanguage' => 'en_US',
                'fileMap' => [
                    'app' => 'app.php',
                ],
            ],

您的评论的答案:

1)'sourceLanguage' => 'en_US' - 您必须使用完整的语言环境。因为英语区域设置可能是en_USen_UK和e.t.c.来自The format for the language/locale is ll-CC where ll is a two- or three-letter lowercase code for a language according to ISO-639 and CC is the country code according to ISO-3166.

[doc][1]

2)在关键使用类别中。和Yii::t('category'...)

中设置的类别