/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".