i18n和模块从Yii2中的错误路径中检索

时间:2014-12-15 09:27:21

标签: php internationalization yii2

我不知道这是不是我的错误或错误,但基本上我遵循Yii2文档来设置模块的i18n翻译。以下代码段直接从Yii2指南中复制粘贴。

public function init()
{
    parent::init();

    $this->registerTranslations();
}

public function registerTranslations()
{
    Yii::$app->i18n->translations['modules/users/*'] = [
        'class' => 'yii\i18n\PhpMessageSource',
        'sourceLanguage' => 'en',
        'basePath' => '@app/modules/users/messages',
    ];
}

public static function t($category, $message, $params = [], $language = null)
{
    return Yii::t('modules/users/' . $category, $message, $params, $language);
}

根据指南,我应该这样称呼:

Module::t('validation', 'your custom validation message')

但是,Yii2尝试从错误的位置加载'validation.php'。这是调试器的输出:

The message file for category 'modules/users/validation' does not exist: /Applications/MAMP/htdocs/.../domains/localhost/public_html/.../backend/modules/users/messages/en/modules/users/validation.php

根据我的理解,它应该代替modules/users/message/<lang>/validation.php,这比现在正在寻找的更有意义。

我做错了什么?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

您只需添加filemap参数,例如:

public function registerTranslations()
{
    Yii::$app->i18n->translations['modules/users/*'] = [
        'class' => 'yii\i18n\PhpMessageSource',
        'sourceLanguage' => 'en',
        'basePath' => '@app/modules/users/messages',
        'fileMap' => [
            'modules/users/validation' => 'validation.php',
        ],
    ];
}

了解详情:http://www.yiiframework.com/doc-2.0/guide-tutorial-i18n.html#translating-module-messages

编辑:如Yii2指南中所述,如果您要删除filemap,则您的validation.php文件应位于 modules / users / messages / [lang]中] /modules/users/validation.php

  

您可以依赖于使用类别名称作为文件名的约定,而不是配置fileMap(例如,类别app / error将导致basePath下的文件名app / error.php。