Я создаю свой первый многоязычный веб-сайт Laravel.
Для переводов я использую этот пакет: Laravel-локализация.
В моей базе данных у меня есть столбцы, настроенные так:
Я прочитал Laravel документация на локализации и настроить мои сообщения об ошибках таким образом. Но теперь я запутался в том, как правильно показывать разные языки для моих взглядов.
Должен ли я сделать что-то вроде этого:
@if( LaravelLocalization::getCurrentLocale() == 'nl')
<p>{{$post->title_nl}}</p>
@elseif(LaravelLocalization::getCurrentLocale() == 'fr' )
<p>{{$post->title_fr}}</p>
@else
<p>{{$post->title}}</p>
@endif
Это кажется очень грязным и не правильным способом справиться с этим, потому что расширение этого было бы кошмаром.
Или мне нужно использовать встроенные функции локализации для этого следующим образом:
{{ trans('post.title') }}
Или это разрушает цель пакета, который я использую?
Использование пары ключ-значение многомерных массивов
Добавлять переводы в БД и получать нагрузку в массиве при необходимости
$language['word_key']="word";
сохраняйте ключ слова в своем коде, так как он просто загружает переводы в массив на основе языка
в БД создайте 2 таблицы 1 для ключевых слов, которые являются первичной таблицей, и другие для переводов, которые имеют внешний ключ таблицы ключевых слов.
Напишите языковой класс, который может предоставить вам массив пар ключ => значение для использования в коде
пример на простом php
echo $language['kw_hi'];
если вы работаете с английским языком, он выводит «Привет» на французском языке.
{!! Form::label($dictionary['apo_add_subject'], $dictionary['apo_add_subject']) !!}
Над словарем есть ключевое слово apo_add_subject. Я создал таблицу с ключевыми словами id, имя-ключевого слова и идентификаторы перевода второй таблицы, kw_id, language, translation, затем основанный на языке и модуле. Я загружаю его в массив с использованием middle и затем передаю, чтобы посмотреть, где будет использоваться код, написанный выше.
Просто загрузите разные значения в массив, сохраняя одинаковые ключевые слова.
Других решений пока нет …