Здравствуйте,
Подскажите как прикрутить локализацию через Gettext к шаблонам Twig в Yii2?
Установил через composer yiisoft/yii2-app-basic, добавил yiisoft/yii2-twig. Добавил в конфиг:
'view' => [
'renderers' => [
'twig' => [
'class' => 'yii\twig\ViewRenderer',
'extensions' => [
'Twig_Extensions_Extension_I18n'
],
],
],
],
Шаблонизатор работает, можно рендерить через $this->render('someaction.twig');
Так же поправил MessageSource в конфиге, что бы Yii::t использовал PO файлы для хранения переводов.
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\GettextMessageSource',
'basePath' => '@app/messages',
'sourceLanguage' => 'en-US',
],
],
],
Как теперь прикрутить Gettext именно к Twig, что бы можно было пользоваться {{'some text'| trans}} в шаблонах? Доку по твигу читал
twig.sensiolabs.org/doc/extensions/i18n.html, но не смог реализовать.
В silex это как-то так было:
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale_fallbacks' => array('ru'),
));
$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
$translator->addLoader('po', new PoFileLoader());
$translator->addResource('po', __DIR__.'/../po/messages.en.po', 'en');
return $translator;
}));
$app['twig']->addExtension(new Symfony\Bridge\Twig\Extension\TranslationExtension($app['translator']));
$app->before(function () use ($app) {
$app['locale'] = 'ru';
});
//upd
Добавил в зависимости "twig/extensions": "~1.1" и поправил конфиг для загрузки расширения Twig_Extensions_Extension_I18n. {{'translate me' | trans}} выводит пустоту теперь, но функция известна.
Еще вопрос, как заставить его грузить переводы из заданного *.po файла?