Проблема с переводом

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Проблема с переводом

Сообщение TranceSmile »

Exception (Invalid Configuration) 'yii\base\InvalidConfigException' with message 'Unable to locate message source for category
Делаю модуль для себя. Код немного подсматриваю у других :roll: в целях изучения.
В файле Module сделал статический метод t

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

public static function t($category, $message, $params = [], $language=null)
    {
        return \Yii::t('trancesmile/' . $category, $message, $params, $language);
    }
В директории messages создал config.php

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

return [
    'sourcePath' => dirname(__DIR__),
    'messagePath' => __DIR__,
    'languages' => ['ru', 'uk'],
    'translator' => 'Module::t',
    'sort' => false,
    'removeUnused' => false,
    'only' => ['*.php'],
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
    ],
    'format' => 'php',
    'overwrite' => true,
];
Ошибка когда использую Yii::t, а если использую Module::t то все норм
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с переводом

Сообщение zelenin »

когда ты используешь Module::t у тебя категория 'trancesmile/' . $category. А в Yii::t ты наверняка используешь просто $category.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с переводом

Сообщение zelenin »

Используй лучше для модуля

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

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

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

Module::t('Test message'); 
Иначе теряется смысл делать вообще t-функцию у модуля.
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Проблема с переводом

Сообщение TranceSmile »

А как же config.php translator
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с переводом

Сообщение zelenin »

TranceSmile писал(а):А как же config.php translator
видимо имеется в виду message/extract?
он не будет работать в моем случае, в вашем случае будет, но некорректно, т.к. найдет категорию $category, а не 'trancesmile/' . $category, что в принципе тоже не то, что нужно.
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Проблема с переводом

Сообщение TranceSmile »

Спасибо за совет.
Изображение
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Проблема с переводом

Сообщение lynicidn »

я так юзаю

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

public static function t($message, $params = [], $category = null, $language=null)
    {
 $category = $category ? $category . '/vendorId/moduleID' : 'vendorId/moduleID'
        return \Yii::t('trancesmile/' . $category, $message, $params, $language);
    }
как то так, message/extract надо конечно переписать, а лучше расширить и ввести туда свойство
template => 'Module::t({message},{params},{category},{language})'
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с переводом

Сообщение zelenin »

lynicidn писал(а):я так юзаю

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

public static function t($message, $params = [], $category = null, $language=null)
    {
 $category = $category ? $category . '/vendorId/moduleID' : 'vendorId/moduleID'
        return \Yii::t('trancesmile/' . $category, $message, $params, $language);
    } 
имхо совсем некрасиво, т.к. меняется порядок аргументов в сравнении с родительской функцией
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Проблема с переводом

Сообщение lynicidn »

зато удобно и коротко в коде
Module::t('Attribute')
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Проблема с переводом

Сообщение lynicidn »

ну я юзаю static::t в каждой сущности практически своя, которая на модуль завязывается
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с переводом

Сообщение zelenin »

lynicidn писал(а):зато удобно и коротко в коде
Module::t('Attribute')
я не о том. Я ведь такой же вариант предложил, но без включения category. А ТС предложил с включением. А в твоем варианте есть категория, но порядок аргументов изменен, что не есть хорошо.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Проблема с переводом

Сообщение lynicidn »

да изменен и еще у меня категори может быть массивом
['vendorId', 'ModuleId', 'subCategory']
превратиться в vendorId/ModuleId/subCategory
сделано это чтобы управлять сепаратором
geniy
Сообщения: 62
Зарегистрирован: 2014.03.17, 17:02
Контактная информация:

Re: Проблема с переводом

Сообщение geniy »

мучился над этой темой только что... есть Интуитивный вариант вот такой:

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

public static function t($str='',$params=array(),$category='cats',$language=null) {        
            return Yii::t($category, $str, $params, $language);
    } 
и теперь в классе I18N добавляю

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

public function init()
    {
if (!isset($this->translations['cats']) && !isset($this->translations['cats*'])) {
            $this->translations['cats'] = [
                'class' => 'yii\i18n\PhpMessageSource',
                'sourceLanguage' => Yii::$app->sourceLanguage,
                'basePath' => '@app/modules/cats/messages',
            ];
        } 
буду благодарен за ваши замечания
Ответить