В этой статье мы расскажем всё, что вам нужно знать о том, как сделать локализацию в Laravel.
- Настройка локали.
- Типы файлов перевода.
- Расположение файлов перевода.
- Функции, хелперы и директивы.
- Как получить строку с переводом.
- Плейсхолдеры.
- Плюрализация.
- Как перевести языковые файлы установленных пакетов.
1. Настройка локали
Дефолтный язык вашего приложения хранится в конфигурационном файле config/app.php (‘locale’ => ‘en’,) .
Вы можете настроить резервный язык, который будет использоваться, если активный язык не содержит заданную строку перевода (‘fallback_locale’ => ‘en’,) .
Вы также можете изменить активный язык во время выполнения, используя App::setLocale().
2. Типы файлов перевода
Существует два типа файлов перевода:
- Файлы, которые возвращают массив ключевых строк.
- Файлы перевода JSON в виде ключей.
# массив ключевых строк return [ 'welcome' => 'Welcome to our application' ]; # json перевод { "I love programming.": "Me encanta programar." }
3. Расположение файлов перевода
Переводы хранятся в файлах каталога resources/lang.
Для массива ключевых строк каждый язык, поддерживаемый приложением, должен находиться в своём подкаталоге.
Для json перевода, если ваше приложение переведено на русский язык, вы должны создать файл resources/lang/ru.json.
/resources /lang ru.json /en messages.php /ru messages.php
4. Функции, хелперы и директивы.
Используйте App::getLocale() и App::isLocale(), чтобы определить текущую локаль и проверить, является ли локаль заданным значением.
Все функции, хелперы и директивы описаны в этой статье.
App::setLocale()
App::getLocale()
App::isLocale()
@lang()
__()
trans()
trans_choice()
5. Как получить строку с переводом
# перевод приветственной строки из resources/lang/messages.php # используя массив ключевых строк echo __('messages.welcome'); # using json перевод echo __('I love programming.'); # в Blade, используя {{ }} или директиву @lang {{ __('messages.welcome') }} @lang('messages.welcome')
Если указанная строка перевода не существует, то __() вернет ключ строки перевода, в данном примере будет возвращено messages.welcome.
6. Плейсхолдеры (Placeholders)
Вы можете определить плейсхолдер в ваших переводах через префикс : (только для массива ключевых строк). Чтобы заполнить плейсхолдер при извлечении перевода, передайте массив для замены в качестве второго аргумента в функцию __().
return [ 'welcome' => 'Welcome to our application', 'welcome' => 'Welcome, :name', // Welcome, dayle 'welcome' => 'Welcome, :NAME', // Welcome, DAYLE 'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle ]; # используем плейсхолдер echo __('messages.welcome', ['name' => 'dayle']);
7. Плюрализация
Используйте символ | для разделения единственного и множественного числа. Вы можете даже создать более сложные правила множественного числа для нескольких числовых диапазонов.
Используйте trans_choice() для получения строки с опциями плюрализации.
Вы также можете определять плейсхолдеры. Их можно заменить, передав массив в качестве третьего аргумента функции trans_choice().
# единственное число | множественное число 'apples' => 'Одно яблоко|Много яблок', trans_choice('pluralization.apples', 1) // Одно яблоко trans_choice('pluralization.apples', 2) // Много яблок # несколько числовых диапозонов 'amount' => '{0} Ни одного|[1,19] Несколько|[20,*] Много', trans_choice('pluralization.amount', 0) // Ни одного trans_choice('pluralization.amount', 12) // Несколько trans_choice('pluralization.amount', 22) // Много # с плейсхолдером :count 'amount count' => '{0} Здесь нет ни одного|{1} Здесь один|[2,*] Здесь :count', trans_choice('pluralization.amount count', 0) // Здесь нет ни одного trans_choice('pluralization.amount count', 1) // Здесь один trans_choice('pluralization.amount count', 2) // Здесь 2 # с плейсхолдерами 'minutes_ago' => '{1} :value минуту назад|[2,*] :value минут назад' trans_choice('pluralization.minutes_ago', 5, ['value' => 5]) // 5 минут назад
8. Как перевести языковые файлы установленных пакетов
Некоторые пакеты могут поставляться со своими языковыми файлами. Вместо того, чтобы изменять основные файлы пакета, вы можете переопределить их, поместив файлы в каталог resources/lang/vendor/{package}/{locale}.
Например, если вам нужно перевести с английского языка на русский строки в messages.php для пакета с названием skyrim/hearthfire, вы должны поместить языковой файл по адресу resources/lang/vendor/hearthfire/ru/messages.php.
Автор: Flavio Rosselli
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.