Локализация в Ларавел

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

В этой статье мы расскажем всё, что вам нужно знать о  том, как сделать локализацию в Laravel.

  1. Настройка локали.
  2. Типы файлов перевода.
  3. Расположение файлов перевода.
  4. Функции, хелперы и директивы.
  5. Как получить строку с переводом.
  6. Плейсхолдеры.
  7. Плюрализация.
  8. Как перевести языковые файлы установленных пакетов.

1. Настройка локали

Дефолтный язык вашего приложения хранится в конфигурационном файле config/app.php (‘locale’ => ‘en’,) .
Вы можете настроить резервный язык, который будет использоваться, если активный язык не содержит заданную строку перевода (‘fallback_locale’ => ‘en’,) .
Вы также можете изменить активный язык во время выполнения, используя App::setLocale().

2. Типы файлов перевода

Существует два типа файлов перевода:

  1. Файлы, которые возвращают массив ключевых строк.
  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.