Локализация
Вступление
Функции локализации Laravel обеспечивают удобный способ получения строк на различных языках, позволяя легко поддерживать несколько языков в приложении. Языковые строки хранятся в файлах в каталоге resources/lang. Внутри этого каталога должен быть подкаталог для каждого языка, поддерживаемого приложением:
/resources
/lang
/en
messages.php
/es
messages.phpВсе языковые файлы возвращают массив ключевых строк. Например:
<?php
return [
'welcome' => 'Welcome to our application',
];Для языков, различающихся по территории, следует называть языковые каталоги в соответствии с 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