Как правильно организовать мультиязычность в 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 файлов.

Так и должно быть или я что-то делаю не так? Как правильно?
  • Вопрос задан
  • 409 просмотров
Пригласить эксперта
Ответы на вопрос 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
Правильно создать абстракцию от языка, которая не будет изменяться. Английский исходник как вариант.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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