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


i18n and modules retrieves from wrong path in 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 试图从错误的位置加载"验证.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,这比它现在正在寻找的更有意义。

我做错了什么?

提前谢谢你。

你应该简单地添加一个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文件应该在模块/用户/消息/[lang]/模块/用户/验证.php中。

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