不工作在Yii2中翻译环境

时间:2014-04-23 14:39:50

标签: php yii yii2

我已设置3 environments

我的应用需要加载不同的翻译集,因为每个环境都不同。

我有ROHUDE种语言。

我正在尝试设置翻译,但它不起作用。

在frontend / config main.php中我有:

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

frontend/web/index.php我有:

defined('YII_ENV') or define('YII_ENV', 'dev_ro');

另外,我正在合并配置数组:

(file_exists(__DIR__ . '/../../environments/' . YII_ENV . '/common/config/main-local.php') ? require(__DIR__ . '/../../environments/' . YII_ENV . '/common/config/main-local.php') : [])

现在,在environments/dev_ro/common/config/components我有:

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

Companie模型中我有:

'nume' => Yii::t('companie', 'Name'),

这是电影,我的东西:

movie

2 个答案:

答案 0 :(得分:2)

问题出现在app *中,因为它不是应用*类别,这有效:

    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'fileMap' => [
                    'companie' => 'companie.php',
                ],
            ],
        ],
    ],

或者如果你想写'companie*' =>

如果仍然无效,则确实设置了错误的翻译文件路径。默认情况下,它必须是BasePath/messages/LanguageID/CategoryName.php

如果你想在后端和前端使用一个文件,你应该在common config(高级yii应用程序)中创建例如公共别名,并在i18n config中设置这个别名。这是完整的例子:

通用配置:

Yii::setAlias('@common', dirname(__DIR__));
return [
    'language' => 'ru',
    'sourceLanguage' => 'ru',
    'components' => [
    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@common/messages',
                'fileMap' => [
                    'companie' => 'companie.php',
                ],
  ....

在traslate文件/common/messages/en-US/companie.php

<?php
return [
    'string in russian' => 'string in english'
];

使用以下代码检查翻译:

\Yii::$app->language = 'en-US';
echo \Yii::t('companie', 'string in russian');

答案 1 :(得分:0)

您还可以尝试在语言代码和文件夹名称中用短划线替换短划线:

en-US >> en_US

适合我。