Yii2 - многоязычный

Я пытаюсь настроить внешний перевод веб-сайта с помощью i18l. Вот мой файл i18l.php, размещенный в интерфейсе/конфигурации

    <?php
return [
    'sourcePath' => 'frontend',
    'languages' => ['en-US', 'pt-BR'] , //Add languages to the array for the language files to be generated.
    'translator' => 'Yii::t',
    'sort' => false,
    'removeUnused' => false,
    'only' => ['*.php'],
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
        '/vendor',
    ],
    'format' => 'php',
    'messagePath' => 'frontend' . DIRECTORY_SEPARATOR . 'translations',
    'overwrite' => true,
];

а вот мой main.php тоже во внешнем интерфейсе

(...)
'language' => 'en-US',
'components' => [
        'i18n' => [
          'translations' => [
            'app*' => [
              'class' => 'yii\i18n\PhpMessageSource',
              'basePath' => 'frontend/translations',

              'fileMap' => [
                  'app' => 'app.php',
                  'app/error' => 'error.php',
              ],
          ],
        ],
]

Я использую <?= Yii::t('app', 'some string') ?> на сайтах и ​​макетах, и когда я запускаю команду ./yii message/extract @frontend/config/i18n.php, она создает для меня папку с именем «translations», содержащую две другие папки «en-US». и «pt-BR» оба с app.php, который я уже заполнил некоторыми переводами. Но все же, когда я меняю язык на main.php, перевода не происходит (я так думаю). Я был бы признателен, если бы кто-нибудь мог помочь мне в этом.

Спасибо.


person Alessandro Resta    schedule 07.05.2015    source источник
comment
Отличный пост. Я просто хотел отметить одну вещь. <?= может быть рискованно. Не во всех настройках включены короткие теги. может показаться глупым, но это может вывести из строя всю вашу систему при переходе на новый сервер. Почему бы не использовать <?php echo вместо этого? :)   -  person Gogol    schedule 18.05.2015
comment
Не уверен, что это так, но я обнаружил, что если целевое и исходное назначения совпадают, вам нужно принудительно перевести переводы, чтобы он учитывал файл, а не ввод параметра из Yii::t. yiiframework.com/doc-2.0/   -  person M Sost    schedule 18.05.2015


Ответы (1)


Отличный пост, со всеми необходимыми подробностями.

Я боролся с теми же вещами, но вы справились довольно хорошо.

Итак, если вы можете запустить команду и она создаст файл, то sourcePath будет правильным. Если он не отображает сообщения о переводе во время выполнения, несмотря на изменения ваших настроек, я предполагаю, что проблема может быть связана с вашим basePath:

Попробуйте использовать в конфигурации basePath следующее:

'basePath' => '@frontend/translations',
person MEM    schedule 18.05.2015