@DimkaI
Системный адинистратор, разработчик ПО

Как использовать интернационализацию в config Yii2?

Собственно суть. во всех местах проекта Yii::t('app', 'Original text') работает, но возникла необходимость глобальной настройки в $config. И там сталкиваюсь с проблемой. На момент инициализации, настройки интернационализации ещё не работают, потому указанный метод возвращает всегда "Original text". Как или в каком методе можно переопределить глобальную настройку, чтобы произошла локализация текста?
Пример кода:
$config = [
    ...
    'language' => 'ru-RU',
    'components' => [
        'i18n' => [
            'translations' => [
                '*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'sourceLanguage' => 'en-US',            // Исходный текст на английском
                    'basePath' => '@app/messages',
                    'fileMap' => [
                        'app'       => 'app.php',           // Для приложения
                    ],
                ],
            ],
        ],
    ],
    'container' => [
        'definitions' => [
            'yii\widgets\LinkPager' => [
                // Здесь нужна локализация, но так не работает.
                'firstPageLabel' => Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-backward', 'title' => Yii::t('app', 'First page'), ]),
                'prevPageLabel' => Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-backward', 'title' => Yii::t('app', 'Previous page'), ]),
                'nextPageLabel' => Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-forward', 'title' => Yii::t('app', 'Next page'), ]),
                'lastPageLabel' => Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-forward', 'title' => Yii::t('app', 'Last page'), ]),
            ],
        ],
    ],
    ...
];
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@DimkaI Автор вопроса
Системный адинистратор, разработчик ПО
Благодаря предложению Дмитрий сделал следующее:
в корне проекта в каталоге /widgets создал файл ILinkPager.php:
<?php
namespace app\widgets;

use Yii;
use Yii\helpers\Html;
use Yii\widgets\LinkPager;

class ILinkPager extends yii\widgets\LinkPager
{
    public function __construct() {
        $this->firstPageLabel = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-backward', 'title' => Yii::t('app', 'First page'), ]);
        $this->prevPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-backward', 'title' => Yii::t('app', 'Previous page'), ]);
        $this->nextPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-forward', 'title' => Yii::t('app', 'Next page'), ]);
        $this->lastPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-forward', 'title' => Yii::t('app', 'Last page'), ]);
    }
}


в файле конфигурации /config/web.php переопределил контейнер:
$config = [
    ...
    'container' => [
        'definitions' => [
            'yii\grid\GridView' => [
                'pager' => [
                    'class' => 'app\widgets\ILinkPager',
                ],
            ],
        ],
    ],
   ...
];


В результате на всех страницах у пагинатора стала корректно работать интернационализация.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы