Локализация
Вступление
Функции локализации Laravel обеспечивают удобный способ получения строк на различных языках, позволяя легко поддерживать несколько языков в приложении. Языковые строки хранятся в файлах в каталоге resources/lang
. Внутри этого каталога должен быть подкаталог для каждого языка, поддерживаемого приложением:
Все языковые файлы возвращают массив ключевых строк. Например:
Для языков, различающихся по территории, следует называть языковые каталоги в соответствии с ISO 15897. Например, для британского английского языка следует использовать "en_GB", а не "en-gb".
Настройка локали
Язык по умолчанию для приложения хранится в конфигурационном файле config/app.php
. Вы можете изменить это значение в соответствии со своими потребностями. Вы также можете изменить активный язык во время выполнения, используя метод setLocale
фасада App
:
Вы можете настроить "запасной язык (fallback language)", который будет использоваться, когда активный язык не содержит заданной строки перевода. Как и язык по умолчанию, запасной язык также настроен в конфигурационном файле config/app.php
:
Определение текущей локали
Вы можете использовать методы getLocale
и isLocale
фасада App
, чтобы определить текущую локаль или проверить, является ли локаль заданным значением:
Определение строк перевода
Использование коротких ключей
Обычно строки перевода хранятся в файлах в каталоге resources/lang
. Внутри этого каталога должен быть подкаталог для каждого языка, поддерживаемого приложением:
Все языковые файлы возвращают массив ключевых строк. Например:
Использование перевода строк в качестве ключей
В приложениях с большим количеством переводимых строк можно быстро запутаться при обращении к ним по коротким ключам. По этой причине Laravel также предоставляет поддержку для определения строк перевода, используя "по умолчанию" перевод строки в качестве ключа.
Файлы перевода, в которых в качестве ключей используются строки перевода, хранятся в виде JSON-файлов в каталоге resources/lang
. Например, если ваше приложение имеет испанский перевод, вы должны создать файл resources/lang/es.json
:
Получение перевода строк
Вы можете получить строки из языковых файлов с помощью функции-помощника __
. Метод __
принимает в качестве первого аргумента файл и ключ строки перевода. Например, давайте получим перевод строки welcome
из языкового файла resources/lang/messages.php
:
Если вы используете шаблонизатор Blade, то можете использовать синтаксис {{ }}
для вывода перевода строки или использовать директиву @lang
:
Если указанной строки перевода не существует, функция __
вернет ключ строки перевода. Таким образом, используя приведенный выше пример, функция __
вернет messages.welcome
, если строка перевода не существует.
Директива @lang не экранирует вывод. При использовании этой директивы вы несете полную ответственность за экранирование собственных выходных данных.
Замена параметров в строках перевода
При желании, вы можете определить плейсхолдеры в строках перевода. Все плейсхолдеры имеют префикс :
. Например, Вы можете определить приветственное сообщение с плейсхолдером name
:
Для замены плейсхолдеров при получении строки перевода передайте массив замен в качестве второго аргумента в функцию __
:
Если плейсхолдер содержит все заглавные буквы или только первую букву, переведенное значение будет выведено заглавными буквами соответственно:
Плюрализация
Плюрализация — это сложная проблема, так как разные языки имеют множество сложных правил для множественного числа. Используя символ "|", можно различать единственную и множественную формы строк:
Можно создавать более сложные правила множественного числа, которые задают строки перевода для множества числовых диапазонов:
После определения строки перевода, которая имеет опции множественного числа, вы можете использовать функцию trans_choice
для получения строки для заданного "числового значения". В этом примере, так как счетчик больше единицы, возвращается строка перевода во множественном числе:
Вы также можете определить плейсхолдеры в строках множественного числа. Эти плейсхолдеры могут быть заменены передачей массива в качестве третьего аргумента в функцию trans_choice
:
Если Вы хотите отобразить целое значение, которое было передано в функцию trans_choice
, то Вы можете использовать плейсхолдер :count
:
Переопределение языковых файлов пакета
Некоторые пакеты могут поставляться с собственными языковыми файлами. Вместо того, чтобы изменять основные файлы пакета, чтобы подкорректировать эти строки, вы можете переопределить их, поместив файлы в каталог resources/lang/vendor/{package}/{locale}
.
Так, например, если вам нужно переопределить строки английского перевода в messages.php
для пакета с именем skyrim/hearthfire
, вы должны поместить языковой файл в resources/lang/vendor/hearthfire/en/messages.php
. В этом файле вы должны определить только те строки перевода, которые вы хотите переопределить. Любые строки перевода, которые вы не переопределите, будут загружены из оригинальных языковых файлов пакета.
Last updated