Сам себе отвечу, вдруг кому еще понадобится…
- Нужно настроить Yii для работы через gettext. Для этого в раздел компонентов нужно добавить
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\GettextMessageSource',
'basePath' => '@app/messages',
],
],
],
- Нужно создать расширение для Twig, проксирующие запросы на первод к системному Yii::t
namespace app\components;
use Twig_Extension;
use Twig_Extensions_TokenParser_Trans;
use Twig_SimpleFilter;
class Twig_I18n_Extension extends Twig_Extension {
/**
* Translation message context
* @var string
*/
public $category = 'app';
/**
* Returns the token parser instances to add to the existing list.
*
* @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances
*/
public function getTokenParsers()
{
return array(new Twig_Extensions_TokenParser_Trans());
}
/**
* {@inheritdoc}
*/
public function getFilters()
{
return array(
new \Twig_SimpleFilter('trans', array($this, 'trans')),
);
}
/**
* @param string $category the message category.
* @param string $message the message to be translated.
* @param array $arguments
* @param string $language the language code (e.g. `en-US`, `en`). If this is null, the current
* [[\yii\base\Application::language|application language]] will be used.
* @return string
*/
public function trans($message, array $arguments = [], $category = null, $language = null)
{
if (!$category) {
$category = $this->category;
}
return \Yii::t($category, $message, $arguments, $language);
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'i18n';
}
}
- Подгрузить его в настроки Twig. Для этого в настройках рендера в конфиге прописать созданное расширение:
'view' => [
'renderers' => [
'twig' => [
'class' => 'yii\twig\ViewRenderer',
'extensions' => [
'app\components\Twig_I18n_Extension'
],
],
],
],
- Создать каталог messages в корне и создать в нем конфиг для выдирания строк для перевода из кода:
<?php
// messages/config.php
return [
'sourcePath' => __DIR__ . '/..',
'messagePath' => __DIR__,
'languages' => ['ru'],
'translator' => 'Yii::t',
'sort' => false,
'overwrite' => true,
'removeUnused' => false,
'except' => [
'.svn',
'.git',
'.gitignore',
'.gitkeep',
'.hgignore',
'.hgkeep',
'/messages',
'/vendor',
'/tests',
],
'only' => ['*.php'],
'format' => 'po',
];
- Дальше строки можно выдергивать командой
./yii message/extract messages/config.php
Ну и все дальнейшее по руководству (poedit и т.д.)