Локализация

Вступление

Функции локализации Laravel обеспечивают удобный способ получения строк на различных языках, позволяя легко поддерживать несколько языков в приложении. Языковые строки хранятся в файлах в каталоге resources/lang. Внутри этого каталога должен быть подкаталог для каждого языка, поддерживаемого приложением:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

Все языковые файлы возвращают массив ключевых строк. Например:

<?php

return [
    'welcome' => 'Welcome to our application',
];
circle-exclamation

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

Язык по умолчанию для приложения хранится в конфигурационном файле 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, если строка перевода не существует.

circle-exclamation

Замена параметров в строках перевода

При желании, вы можете определить плейсхолдеры в строках перевода. Все плейсхолдеры имеют префикс :. Например, Вы можете определить приветственное сообщение с плейсхолдером 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