Skip to content

Instantly share code, notes, and snippets.

@alexaandrov
Created March 29, 2016 15:15
Show Gist options
  • Save alexaandrov/ed18a20f7c76265a758e to your computer and use it in GitHub Desktop.
Save alexaandrov/ed18a20f7c76265a758e to your computer and use it in GitHub Desktop.
Реализация мультиязычности
Сомневался в добавлении этого в статью. Добавлю комментом. Обычно делаем через таблицу связей. Типичный пример для блога и постов.
Таблица post(модель Post) — храним метаинформацию, которая не имеет отношения к контенту.
То есть такие поля: id, owner_id, date_create, date_update.
Таблица post_lang(модель PostLang) — связь контента по языкам. Поля: id, post_id, lang_id, name, description.
Соответственно поля post_id — это id из таблицы post, lang_id — это id из таблицы lang. name и
description — контент на соответствующем языке.
В модель Post добавляем отношение:
public function getContent($lang_id=null)
{
$lang_id = ($lang_id === null)? Lang::getCurrent()->id: $lang_id;
return $this->hasOne(PostLang::className(), ['post_id' => 'id'])->where('lang_id = :lang_id', [':lang_id' => $lang_id]);
}
Тогда в отображении, для текущего языка, контент можно получить так: $post->content->name; — заголовок поста, $post->content->description; — сам пост.
Или для контента на определенном языке, задав идентификатор языка($lang_id): $post->getContent($lang_id)->name; $post->getContent($lang_id)->description;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment