我不知道这是我的错误还是错误,但基本上我按照 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 下。