Попробуйте воспроизвести, возможно это баг:
условия такие:
1. в коде сообщения на русском (\Yii::t('app', 'русский текст')).
2. сайт включен на русский язык ('language' => 'ru').
Конфигурация:
Код: Выделить всё
...
'language' => 'ru',
...
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
'sourceLanguage' => 'ru',
'fileMap' => array(
'app'=>'app.php',
'app/common'=>'common.php',
'app/login'=>'login.php'
)
],
],
],
Код: Выделить всё
<?php
return [
'Тест' => 'Test',
];
Код: Выделить всё
echo \Yii::t('app', 'Тест');
Он пытается загрузить файл из директории 'ru', хотя ее нет из-за того, что сообщения в коде на русском и она не нужна.The message file for category 'app' does not exist: .../messages/ru/app.php
Если указать sourceLanguage для проекта, все встает вроде на места и исключения нет.
Еще важный момент, все это происходит если расширять app, то есть указать свой конфиг как 'app*' и пытаться загрузить сообщения из категории app (файла app.php)
Если просто переписать (на зачем?) конфигурацию для 'app', то тогда не получается настроить fileMap. Но это вроде логично. Так как указываем echo \Yii::t('app/login', 'Тест'), а это уже не просто app.
Проблема в I18N в init().
Когда мы в конфиге пишем 'app*', это не отменяет инициализацию
Код: Выделить всё
if (!isset($this->translations['app'])) {
$this->translations['app'] = [
'class' => 'yii\i18n\PhpMessageSource',
'sourceLanguage' => Yii::$app->sourceLanguage,
'basePath' => '@app/messages',
];
}
Ошибка это или нет, я не решаюсь сказать, может надо как-то иначе настраивать i18n, но я все по документации делал.
Возможно стоит обязательно указывать для проекта sourceLanguage, если он отличен от английского. В общем решайте.