@matios
Technical Team Lead

Как создать мультиязычный модуль в Yii2?

Всем привет. В последнее время стал придерживаться модульного построения приложения и возникла необходимость делать их мультиязычными. Про различные Yii:t() я знаю, но это не совсем то, что мне нужно. Объясню на реальном примере. Есть модуль "Блог" и я хочу, чтобы в админе была возможность писать статьи на Русском, Английском и Китайском языках. На данный момент в голове крутятся 3 варианта реализации, но все обладают существенными недостатками. Хотел бы узнать как вы решали подобные задачи.

Условно таблица с статьей имеет поля (которые надо переводить):
title | description | text | seo_title | seo_description | seo_keywords

Мои теории сводятся к следующим:

1. Добавлять дубли колонок в ту же саму таблицу с префиксами языков (title_eng, title_zh, ...)
Этот мне не нравится по причине того, что это какой-то ГК и нет возможности гибко добавлять какой-то новый язык. Придется добавлять новые колонки для новых языков

2. Сделать нечто похожее на плагин WP, где в каждую колонку добавляются соответствующие данные, разделенные языковой меткой <:ru> <:en> <:zh> потом это все распарсивается и подставляется в нужные формы. Сложность реализации, возня с парсерами, да и в каждой колонке будет откровенно говоря каша.

3. Сделать дополнительную таблицу blog_article_lang в которой будут все нужные колонки + колонка 'lang' с обозначением языка. По сути получается связь has_many. Мне кажется, что это более менее приемлемый вариант, но опять же возникает усложнение кодовой базы за счет того, что если активировано 3 языка и есть обязательные поля, то статья не добавится пока во всех 3 формах не будут заполнены обязательные поля.

Кто что думает по этому поводу? Как вы решали подобные задачи? Буду рад любому дельному совету
  • Вопрос задан
  • 634 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Вот ссылки, первые рассчитаны на yii1, но я переделывал под yii2 и всё работало отлично.
Обходился одной таблицей, где, например, для заголовка были два варианта, английский и русский, title_en and title_ru.
Последняя ссылка - расширение для yii2
раз
два
три
Расширением не пользовался, ничего не могу сказать. А по первым двум - адаптировал под свои нужды.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LAV45
Когда-то тоже искал подобное решение, но все что-то не то было.
В итоге написал собственное расширение https://github.com/LAV45/yii2-translated-behavior
На данный момент используется в 5 проектах в prodakshen
Расширение регулярно дорабатывается под различные варианты использования.
Есть демо https://yii2-translated-behavior.herokuapp.com
с открытым исходным кодом https://github.com/LAV45/yii2-translated-behavior-demo
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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