Как правильно организовать мультиязычность в Yii2?

Прочитав документацию и пару статей понял следующее:

1. Необходимо назначить основной язык (который используется в исходном коде файлов-словарей в виде ключа массива) и целевой язык (на который будет произведен перевод, указан в виде значения массива). Например:

Файл web.php
<?php
return [
    'sourceLanguage' => 'ru-RU',
    'language' => 'en-US'
];


2. Необходимо создать файл-словарь, в котором будет перевод с исходного языка на целевой:

Файл messages/en-US/app.php
<?php 
return [
    'Текст' => 'Text'
];


3. Все тексты сайта (в моделях и вьюхах) указываем через:

\Yii::t('app', 'Текст');

4. В произвольной точке приложения меняем язык (\Yii::$app->language) с исходного на целевой и получаем страницы, переведенные с русского на английский.

Эта схема работает. Но, предположим, что целевых языков стало 10 шт. и тут, внезапно, появилась необходимость немного изменить текст исходного языка. Тогда выходит, что нужно менять текст и во вьюхах самого приложения и во всех словарях, а это 10 файлов.

Так и должно быть или я что-то делаю не так? Как правильно?
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
В нашем велосипеде мы используем алиасы, чтобы во первых не писать что то типа:
\Yii::t('app', 'Разлюбезная моя Елизавета Петровна! С этим письмом прилагаю свою любовь бла бла');
// instead use alias
\Yii::t('app', 'suhov_mail');

и для каждого языка свой файл. Включая основной.
Ответ написан
@dady_KK
PM
Расскажу как работает на одном из наших проектов. Есть несколько языковых файлов из пункта 2, в шаблонах все прописано как в пункте 3, изначально по заголовкам определяется язык, если в списке поддерживаемых языков пользовательского нет, показываем языковую версию по умолчанию. Если нужно изменить тексты - просто правим языковые файлы из пункта 2 в нужных местах.
Ответ написан
ppokrovsky
@ppokrovsky
Правильно создать абстракцию от языка, которая не будет изменяться. Английский исходник как вариант.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы