Добрый день. Так как все таки правильно работать с переводами на YII?
Висит у меня какой-нибудь виджет в шапке (en | ру | de ), пользователь кликает и мы меняем 'language' на ru_RU, например. Срабатывает i18n - по переходу на разные страницы отрабатывается message, переводится все, что в Yii::t() - с этим все понятно.
Что делать со статьями (если хранить перевод в базе)? Как-то дать понять модулям/контроллерам, что сейчас надо брать контент из этого поля базы (content_ru) , а не из этого (content_en)?
локаль выбранная вам доступна, а как вы построите архитектуру базы решать вам.
По поводу разделения на базы данных по языковому признаку - это не очень удобный вариант. Как минимум будут проблемы с миграцией данных и деплоем. Да и просто это как-то не кошерно.
Ну я имею в виду проверять в каждом контроллере "если ru, то content_ru"? Наверное, есть более цивилизованные способы? (ну, как понимаю, можно, конечно и Controller предопределить сам, чтобы в каждом не писать)
Такие вещи не нужно проверять в контроллере, просто валидировать перед обработкой каждого запроса (onBeforeRequest если мне память не изменяет), в итоге у вас всегда будет передана выбранная локаль. А скорее всего это умеет yii из коробки (если нет - то печалька).
А затем запрашиваете у какого-то сервиса/компонента такой-то контент для такой-то локали. А как это хранится у вас в базе - пусть об этом знает только этот сервис/компонент. Контроллерам не должно быть до этого дела.
Все-таки вернусь к вопросу. Имеем два варианта:
1) Хранить `content_ru`,`content_en`, в моделе получать Yii::$app->language и как-то получать
get->'name_'.Yii::$app->language (Кстати, это возможно сделать?)
2) Хранить `id`, и хранить отдельно таблицу `id`,`ru`,`en`, ну это как-то как в Yii:t только с базой