Возможно баг i18n

Уже исправленные репорты или принятые предложения
Ответить
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Возможно баг i18n

Сообщение ShNURoK »

Так как никто не ответил в моей теме, создаю здесь новую.

Попробуйте воспроизвести, возможно это баг:
условия такие:
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'
                    )
                ],
            ],
        ],
  
Содержание $basePath/messages/en/app.php

Код: Выделить всё

<?php
return [
    'Тест' => 'Test',
];
  
Где-нибудь в коде проекта

Код: Выделить всё

echo \Yii::t('app', 'Тест'); 
У меня с такими настройками вылезает исключение
The message file for category 'app' does not exist: .../messages/ru/app.php
Он пытается загрузить файл из директории 'ru', хотя ее нет из-за того, что сообщения в коде на русском и она не нужна.
Если указать 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',
            ];
        }  
И соответственно 'sourceLanguage' => Yii::$app->sourceLanguage, выдает нам тот злополучный en. Который потом при загрузке файла категории, обращается к ru директории, которой нет.
Ошибка это или нет, я не решаюсь сказать, может надо как-то иначе настраивать i18n, но я все по документации делал.
Возможно стоит обязательно указывать для проекта sourceLanguage, если он отличен от английского. В общем решайте.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Возможно баг i18n

Сообщение zelenin »

по умолчанию sourceLanguage (язык источника) - английский. То есть в Yii::t( ... ) должны быть английские фразы. А в папке messages должен быть перевод, указанный в language (например ru).
Это рекомендуемое поведение и вам советую также поступать.

Если же вы указываете фразу на русском, то нужно это указать в sourceLanguage. И соответсвенно должен быть в messages перевод для language (en).
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Возможно баг i18n

Сообщение ShNURoK »

Что по умолчанию я понял. Вы ничего нового не добавили. Эта переменная как раз для этого и нужна, чтобы указать отличный от английского язык в коде. Если все так рекомендуют, то не делали бы возможности :)

Проблема не в этом, а в том, что указание sourceLanguage в 'i18n' -> 'translations' ничего не дает, если не указан общий sourceLanguage. Именно в данном контексте, когда используется app* и отличный от анг. язык.
Это неочевидное по моему мнению поведение.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Возможно баг i18n

Сообщение samdark »

Я ту тему добавил в закладки, проверю. Времени пока не нашёл :(
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Возможно баг i18n

Сообщение ShNURoK »

Спасибо.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Возможно баг i18n

Сообщение samdark »

ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Возможно баг i18n

Сообщение ShNURoK »

Спасибо.
temirbek
Сообщения: 9
Зарегистрирован: 2012.05.05, 07:41

Re: Возможно баг i18n

Сообщение temirbek »

Делаю сайт на кыргызском, выходит такая ошибка на дебаггере:

The message file for category 'yii' does not exist: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg-KG/yii.php Fallback file does not exist as well: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg/yii.php
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Возможно баг i18n

Сообщение zelenin »

temirbek писал(а):Делаю сайт на кыргызском, выходит такая ошибка на дебаггере:

The message file for category 'yii' does not exist: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg-KG/yii.php Fallback file does not exist as well: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg/yii.php
ну, все ясно. перевода сообщений фреймворка на киргизском языке нет. Переведите, сделайте пулл-реквест - это просто.
https://github.com/yiisoft/yii2/tree/ma ... k/messages
temirbek
Сообщения: 9
Зарегистрирован: 2012.05.05, 07:41

Re: Возможно баг i18n

Сообщение temirbek »

zelenin писал(а):
temirbek писал(а):Делаю сайт на кыргызском, выходит такая ошибка на дебаггере:

The message file for category 'yii' does not exist: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg-KG/yii.php Fallback file does not exist as well: C:\path-to-my-server\vendor\yiisoft\yii2/messages/kg/yii.php
ну, все ясно. перевода сообщений фреймворка на киргизском языке нет. Переведите, сделайте пулл-реквест - это просто.
https://github.com/yiisoft/yii2/tree/ma ... k/messages
спасибо, так и сделаем )
Ответить