yii2-languages-dispatcher - устанавливает язык веб-приложения

Выкладываем свои наработки
Ответить
cetver
Сообщения: 8
Зарегистрирован: 2017.05.23, 22:52

yii2-languages-dispatcher - устанавливает язык веб-приложения

Сообщение cetver »

Установка

Предпочтительным способом установки этого расширения является composer

Либо выполните

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

composer require --prefer-dist cetver/yii2-languages-dispatcher
или добавьте

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

"cetver/yii2-languages-dispatcher": "^1.0"
в раздел require вашего файла composer.json.

Использование

Обновите файл конфигурации веб-приложения

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

return [
    'bootstrap' => ['languagesDispatcher'],
    'components' => [
        'languagesDispatcher' => [
            'class' => 'cetver\LanguagesDispatcher\Component',
            'languages' => ['en', 'ru'],
            /*
            или
            'languages' => function () {
                return \app\models\Language::find()->select('code')->column();
            },
            */
            // Порядок важен
            'handlers' => [
                [
                    // Обнаруживает язык из параметра запроса.
                    'class' => 'cetver\LanguagesDispatcher\handlers\QueryParamHandler',
                    'request' => 'request', // необязателен, ID компонента Request.
                    'queryParam' => 'language' // необязателен, имя параметра запроса, которое содержит язык.
                ],
                [
                    // Обнаруживает язык в сессии (сеансе).
                    // Записывает язык в сессию, независимо от того, какой обработчик обнаружил его.
                    'class' => 'cetver\LanguagesDispatcher\handlers\SessionHandler',
                    'session' => 'session', // необязателен, ID компонента Session.
                    'key' => 'language' // необязателен, Ключ сессии, содержащий язык.
                ],
                [
                    // Обнаруживает язык в cookie.
                    // Записывает язык в cookie, независимо от того, какой обработчик обнаружил его.
                    'class' => 'cetver\LanguagesDispatcher\handlers\CookieHandler',
                    'request' => 'request', // необязателен, ID компонента Request.
                    'response' => 'response', // необязателен, ID компонента Response.
                    'cookieConfig' => [ // необязателен, Конфигурация для компонента Cookie.
                        'class' => 'yii\web\Cookie',
                        'name' => 'language',
                        'domain' => '',
                        'expire' => strtotime('+1 year'),
                        'path' => '/',
                        'secure' => true | false, // зависит от Request::$isSecureConnection
                        'httpOnly' => true,
                    ]
                ],
                [
                    // Обнаруживает язык у аутентифицированного пользователя.
                    // Сохраняет язык аутентифицированному пользователю, независимо от того, какой обработчик обнаружил его.
                    // Примечание: свойство "identityClass" компонента "User" должно быть экземпляром класса "\yii\db\ActiveRecord"
                    'class' => 'cetver\LanguagesDispatcher\handlers\UserHandler',
                    'user' => 'user',  // необязателен, ID компонента User.
                    'languageAttribute' => 'language_code' // необязателен, атрибут, содержащий язык.
                ],
                [
                    // Обнаруживает язык из заголовка «Accept-Language».
                    'class' => 'cetver\LanguagesDispatcher\handlers\AcceptLanguageHeaderHandler',
                    'request' => 'request', // необязателен, ID компонента Request.
                ],
                [
                    // Обнаруживает язык из свойства "language".
                    'class' => 'cetver\LanguagesDispatcher\handlers\DefaultLanguageHandler',
                    'language' => 'en' // язык по умолчанию.
                    /*
                    или
                    'language' => function () {
                        return \app\models\Language::find()
                            ->select('code')
                            ->where(['is_default' => true])
                            ->createCommand()
                            ->queryScalar();
                    },
                    */
                ]

            ],
        ],
    ],
];
Тесты

Выполните следующие команды

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

composer create-project --prefer-source cetver/yii2-languages-dispatcher
cd yii2-languages-dispatcher
vendor/bin/codecept run unit
Для поддержки интернационализации (I18N), ознакомьтесь с
Ответить