TsTranslation. Расширение для многоязычности (multilingual)

Выкладываем свои наработки
Ответить
TaronSaribekyan
Сообщения: 2
Зарегистрирован: 2014.09.09, 07:52

TsTranslation. Расширение для многоязычности (multilingual)

Сообщение TaronSaribekyan »

TsTranslation является расширением для Yii 1.1 для создания многоязычных сайтов и приложений.
Скачать последнюю версию можно с GitHub.
Можете попробовать Live Demo и читать документацию прямо сейчас.
  • Добавление и удаление языков
  • Управление добавленными языками (изменить порядок, установить язык по умолчанию, активировать или отключить язык для посетителей / пользователей)
  • Перевести статические сообщения (этикетки, меню, описания ...) с виджета
  • Перевести сообщения через Google Translate
  • Перевести и сохранить все сообщения в категории одним кликом
  • Создание и обновление динамического контента на разных языках
  • Показать селектор языка в разных типах и форматах
  • Показать или скрыть код языка в URL
  • Получить перевод атрибута методом Yii::t()

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

    Yii::t($model, 'attribute')
Taron Saribekyan <saribekyantaron@gmail.com>
yuracher
Сообщения: 1
Зарегистрирован: 2015.11.25, 16:08

Re: TsTranslation. Расширение для многоязычности (multilingual)

Сообщение yuracher »

Доброго времени суток!

Решил попробовать это расширение и столкнулся с некоторыми проблемами:

1. При использовании модульной структуры URL в модулях не всегда формируется правильно, например в модуле yii-user ссылка на просмотр данных пользователя выглядит так /user/admin/view/id/{id}/_ lang /{lang}, а ссылка на страницу управления пользователями так /{lang}/user/admin. В настройках 'showLangInUrl'=> true, и 'prependLangRules' => true. Как настроить TsTranslation, чтобы ссылки в модулях формировались так /{lang}/{module}/*?

2. В этом же модуле (yii-user) уже переведены messages. Как настроить TsTranslation, чтобы переводы этого модуля брались из файлов application.modules.user.messages.{Lang}.*.php а не из таблицы tsy_translated_messages в базе данных?

3. Я использую расширение Yiistrap, соответственно файлы bootstrap у меня уже подключены. Если в виджетах TsLanguageWidget и TsTranslationWidget использовать 'includeBootstrap' => false, то некоторые функции не работают и в консоли браузера появляются ошибки. Если установить 'includeBootstrap'=> true, то все работает, но файл bootstrap.js подключаеться дважды. Как настроить TsTranslation, чтобы для этих виджетов использовался bootstrap.js из Yiistrap?

Буду признателен за помощь в решении описанных выше проблем. В любом случае искренне благодарен за прекрасное расширение!
TaronSaribekyan
Сообщения: 2
Зарегистрирован: 2014.09.09, 07:52

Re: TsTranslation. Расширение для многоязычности (multilingual)

Сообщение TaronSaribekyan »

yuracher писал(а):Решил попробовать это расширение и столкнулся с некоторыми проблемами
Hello,

Sorry for late response and for english answer, I hope it not problem for you.

1. As you can see in TsUrlManager class, (https://github.com/TaronSaribekyan/TsTr ... er.php#L15) extension only prepends <_lang:\w{2}> for each rule.
F.e. if your rule is:

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

'<module(user)>/<controller:(admin)>/<action(action:\w+)>/<id:\d+>' => '<module>/<controller>/<action>',
it became:

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

 '<_lang:\w{2}>/<module(user)>/<controller:(admin)>/<action(action:\w+)>/<id:\d+>' => '<module>/<controller>/<action>'
If you use complicated URL rules, it's recomended to disable prependLangRules (prependLangRules => false) and add language rules manually (in position which you want).
Also be sure that you create URLs with right way:

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

Yii::app()->createUrl('MODULE_NAME / CONTROLLER_NAME / ACTION_NAME', array('id' => ID))
2. If you want to use any component in module, you must init it (or override already existing component). In this case you must override component messages in user module. It can be look something like this:

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

    class UserModule extends CWebModule {
        
        public function init() {
            parent::init();

            $this->setImport(array(
                'user.models.*',
                'user.components.*',
            ));
            
            Yii::app()->setComponents(array(
                'messages' => array(
                    NEW PARAMS FOR COMPONENT
                ), 
            ), false);            
        }        
    } 
Be sure that second parameter of method setComponents set to false, otherwise component new parameters will be merged with old one (instead of overriding).

3. As I see, Yiistrap load script files (such as jQuery and bootstrap) in end of body: CClientScript::POS_END (https://github.com/crisu83/yiistrap/blo ... i.php#L132).
So on TsTranslationWidget and TsLanguageWidget set parameter scriptPosition => CClientScript::POS_END (as set CClientScript::POS_HEAD). Be sure that attribute scriptPosition set as "public" (formerly I set it "private": https://github.com/TaronSaribekyan/TsTr ... 3d299b9a14).
For final result in generated HTML bootstrap.js must be loaded before bootstrap-editable.js and tstranslation.js


Let me know If other questions. Thanks a lot !
Taron Saribekyan <saribekyantaron@gmail.com>
Ответить