Локализация
11.x
.
Почему это важно?
Введение
Возможности локализации Laravel предоставляют удобный способ получения строк на нескольких языках, что позволяет легко организовать поддержку мультиязычности вашим приложением. Языковые строки хранятся в файлах, располагающихся внутри директории resources/lang
. В ней должны находиться подпапки для каждого языка, поддерживаемого вашим приложением:
/resources
/lang
/en
messages.php
/es
messages.php
Все языковые файлы возвращают простой массив ключей и строк. Например:
<?php
return [
'welcome' => 'Welcome to our application'
];
Настройка локали
Стандартный язык вашего приложения указан в конфиге config/app.php
. Конечно же, вы можете изменить это значение на основе потребностей вашего приложения. Вы также можете изменить активный язык в процессе работы приложения с помощью метода setLocale
фасада App
:
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
Вы можете настроить “запасной язык”, который будет использоваться в случаях, когда активный язык не содержит заданной строки перевода. Как и стандартный язык, запасной язык также настраивается в конфигурационном файле config/app.php
:
'fallback_locale' => 'en',
Определение текущей локали
Вы можете использовать методы getLocale
и isLocale
фасада App
для определения текущей локали или проверки совпадения локали с заданным значением:
$locale = App::getLocale();
if (App::isLocale('en')) {
//
}
Определение строк перевода
Использование кратких ключей
Обычно строки перевода хранятся в файлах, располагающихся внутри директории resources/lang
. В ней должны находиться подпапки для каждого языка, поддерживаемого вашим приложением:
/resources
/lang
/en
messages.php
/es
messages.php
Все языковые файлы возвращают простой массив ключей и строк. Например:
<?php
// resources/lang/en/messages.php
return [
'welcome' => 'Welcome to our application'
];
Использование строк перевода как ключей
Определение каждой строки с помощью “краткого ключа” для приложений с большими требованиями к переводу может привести к путанице при обращении к ним из ваших шаблонов. По этой причине, Laravel также предоставляет поддержку определения строк перевода с использованием стандартного перевода в качестве ключа.
Файлы переводов, которые используют строки перевода в качестве ключей, хранятся в JSON-файлах в директории resources/lang
. Например, если приложение имеет поддержку испанского языка, то вы должны создать файл resources/lang/es.json
:
{
"I love programming.": "Me encanta la programación."
}
Получение строк перевода
Вы можете получать строки из языковых файлов с помощью функции __
. Она принимает файл и ключ строки перевода в качестве первого параметра. Например, давайте получим строку перевода welcome
из языкового файла resources/lang/messages.php
:
echo __('messages.welcome');
echo __('I love programming.');
Конечно, если вы используете шаблонизатор Blade, то вы можете использовать синтаксис {{ }}
для отображения строки перевода, или использовать директиву @lang
:
{{ __('messages.welcome') }}
@lang('messages.welcome')
Если запрошенной строки перевода не существует, то функция __
вернёт ключ строки перевода. Таким образом, при использовании примера выше, функция __
вернула бы messages.welcome
при отсутствии строки перевода.
Подстановка параметров в строках перевода
При желании, вы можете указывать плейсхолдеры в ваших строках перевода. Все плейсхолдеры начинаются с символа :
. Например, вы можете создать приветственное сообщение с плейсхолдером для имени:
'welcome' => 'Welcome, :name',
Для замены плейсхолдеров, при получении строки перевода, передайте массив с необходимыми заменами в качестве второго параметра функции __
:
echo __('messages.welcome', ['name' => 'dayle']);
Если ваш плейсхолдер содержит только прописные буквы, или только первая его буква является прописной, то переведённое значение будет преобразовано соответствующим образом:
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
Плюрализация
Плюрализация является комплексной проблемой, так как в разных языках существуют различные сложные правила плюрализации. С помощью символа “вертикальной черты” вы можете разграничить одиночную и множественную форму строки:
'apples' => 'There is one apple|There are many apples',
Вы даже можете создать сложные правила плюрализации, которые определят строки перевода для нескольких диапазонов чисел:
'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',
После определения строки перевода с вариантами плюрализации, вы можете использовать функцию trans_choice
для получения строки для заданного “числа”. В данном примере, так как число больше нуля и единицы, была возвращена форма множественного числа этой строки:
echo trans_choice('messages.apples', 10);
Переопределение языковых файлов пакета
Некоторые пакеты могут поставляться со своими собственными языковыми файлами. Вместо изменения корневых файлов пакета для внесения изменений в языковые строки, вы можете переопределить их, поместив файлы в директорию resources/lang/vendor/{package}/{locale}
.
Таким образом, например, если вам необходимо переопределить перевод английских строк в файле messages.php
пакета с названием skyrim/hearthfire
, вам необходимо разместить языковой файл в: resources/lang/vendor/hearthfire/en/messages.php
. Внутри этого файла вам следует указать только те строки, которые вы хотели бы переопределить. Все строки перевода, которые вы не переопределите, будут загружены из оригинальных языковых файлов пакета.