Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.
Ищете работу? Мы поможем!
Ищете работу? Мы поможем!

Локализация

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 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. Внутри этого файла вам следует указать только те строки, которые вы хотели бы переопределить. Все строки перевода, которые вы не переопределите, будут загружены из оригинальных языковых файлов пакета.