Локализация
Вступление
Функции локализации 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
Was this helpful?