Задать вопрос

Как правильно реализовать локализацию БД в laravel?

Есть сайт, на Laravel 5.2. На сайте публикуются стати. Статьи беруться из базы. Вот и хочется, чтобы для каждого языка (русский, английский, немецкий) подтягивались поля с нужным текстом. Как это лучше реализовать? Может есть какие-нибудь библиотеки?
  • Вопрос задан
  • 6473 просмотра
Подписаться 8 Оценить Комментировать
Решения вопроса 1
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
На мой взгляд использование пакетов для этой цели нецелесообразно.
Обычная полиморфическая связь подойдет.

И так, давайте представим что основной контент статьи на русском языке.
Во первых, создадим модель нашей локализации:
php artisan make:model Localization

Укажем что это полиморфическая связь:
protected $table = 'localization';

public function lozalizable()
  {
      return $this->morphTo();
  }


В нашей модели статей привяжем свежесозданную модель в качестве связи:
public function lozalization(){
	    return $this->morphOne('App\Localization', 'lozalizable');
	}


И создадим миграцию для модели Lozalizable:
Schema::create('localization', function (Blueprint $table) {
        $table->increments('id');
        $table->string('field');
        $table->string('language');
        $table->string('value');
        $table->string('lozalizable_type');
        $table->integer('lozalizable_id');
        $table->timestamps();
      });


Теперь, для создания локализации статьи с языком en выполним следующий код:
$article = Article::create($Atricle);

$localization = new Localization;
$localization->language = 'en';
$localization->field = 'content';
$localization->value = 'Znachenye na english yazike';
$article->localization()->save($localization); //привязываем к свежесозданному объекту Article новую локализацию


С помощью scope функций в модели можно без особых проблем реализовать более удобное выдергивание нужного значения и языка:
public function scopeGetLocalize($language, $field){
     return $this->localization()->where(['language' => $language, 'field' => $field])-> firstOrFail()->value;
}


В таком случае, скажем, поле title для локализации en можно выдергивать так:
$article->getLocalize('en', 'title')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sawa4
Как использовать стандартные методы для переключения языка и выборки данных из БД соответствующего языка?
Ответ написан
Ваш ответ на вопрос

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

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