Локализация в Laravel

В Laravel предусмотрено использование нескольких языков в проектах. Для хранения переводов сайтов служат php файлы, которые находятся в каталоге "resources/lang" и подкаталогах по названиям языков:
/resources
  /lang
    /en
      messages.php
    /ru
      messages.php
Язык сайта по умолчанию прописывается в файле "config/app.php", в ключе "locale":
'locale' => 'ru',
Все языковые файлы возвращают массив из ключей и значений. Значения - это переведённые тексты. К примеру, в файле "resources/lang/ru/messages.php" можно прописать:
<?php
return [
  'welcome' => 'Добро пожаловать на мой сайт!'
];
Для получения переводов в других файлах проекта необходимо сделать обращение по ключу через метод trans. Если учитывать пример выше, то для вызова строки перевода необходимо написать так:
<?php
echo trans('messages.welcome');
При использовании шаблонизатора Blade этот код будет выглядеть так:
{{ trans('messages.welcome') }}
Либо так:
@lang('messages.welcome')
Если строка не будет найдена по ключу, то будет возвращён сам ключ.

Разные языки для разных папок

Если требуется изменить язык сайта в зависимости от папки, то можно прописать его в URI. И устанавливать значение динамически:
Route::get('folder/{locale}', function ($locale) {
   App::setLocale($locale);
});
обратите внимание, что если перевода для соответствующего ключа нет, то можно определеить в файле "config/app.php" значение "fallback_locale", которое указывает на называние языка, который нужно использовать вторым:
'fallback_locale' => 'en',

Определение языка

С помощью методов "getLocale" и "isLocale" можно определить название текущего языка и сравнить его с заданным:
$locale = App::getLocale();

if (App::isLocale('en')) {
   // код тут выполняется только если язык английский
}

Замена в строках

Если во втором параметре к функции "trans" указать массив, то при вызове языковой строки она обрабатывается для замены всех значений, которые начинаются на двоеточие (:). Заменяются все значения, которые совпадают с ключами массива, на его элементы. К примеру, если нужно вставить имя пользователя в строку, то в языковом ффайле нужно указать:
'welcome' => 'Привет, :name !',
А в PHP коде сайта при вызове "trans" нужно использовать массив с ключом "name":
echo trans('messages.welcome', ['name' => 'Мышь']);
В результате выполнения этого кода пользователь получит сообщение Привет, мышь!.
Обратите внимание на регистр букв в ключе замены. Если написать ":NAME", то получится "МЫШЬ". Если ":Name", то "Мышь". Если ":name", то "мышь".

Употребление множественного числа

Вторым параметром в функцию "trans" можно передавать не только массив, но и целое число. Этот механизм служит для указания множественного числа, от которого зависит выбор строки. При этом в строке перевода надо записать сразу несколько вариантов через вертикальную черту "|". Первый для единственного числа, а второй для множественного. К примеру:
'mouse' => 'Это одна мышь|Это несколько мышек',
echo trans('messages.mouse'); // Это одна мышь
echo trans('messages.mouse', 1); // Это одна мышь
echo trans('messages.mouse', 5); // Это несколько мышек
Для создания более точных правил перевода, можно использовать числовые промежутки. К примеру:
'mouse' => '{0} Никого нет!|[1,5] Это несколько|[6,Inf] Это много',
В фигурных скобках указывается точное число. В квадратных - диапазон через запятую (первое значение включается, последнее не включается). Для указания бесконечности используется "Inf".
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб