Локализация

Содержание:


Введение

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

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

All language files return an array of keyed strings. For example:

<?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 также предоставляет поддержку для определения перевода строк используя базовый перевод выражения как ключ. For applications with heavy translation requirements, defining every string with a "short key" can become quickly confusing when referencing them in your views. For this reason, Laravel also provides support for defining translation strings using the "default" translation of the string as the key.

Файлы перевода, которые используют выражения как ключи перевода, хранятся как JSON файлы в папке resources/lang. Например, если у вашего приложения есть перевод на Испанский язык, вы должны создать файл resources/lang/es.json:

{
    "I love programming.": "Me encanta programar."
}

Получение выражений перевода

Вы можете получить строки из файла перевода используя функцию помощник __. Метод __ принимает файл и ключ перевода выражения как первый аргумент. Например, давайте получим перевод выражения welcome из языкового файла resources/lang/messages.php:

echo __('messages.welcome');

echo __('I love programming.');

Если вы используете шаблонизатор Blade, вы можете использовать синтаксис {{ }}, чтобы вывести выражение перевода или использовать директиву @lang:

{{ __('messages.welcome') }}

                @lang('messages.welcome')

Если указанные выражения перевода не существуют, функция __ вернёт ключ перевода. Поэтому, в верхнем примере, функция __ вернёт messages.welcome, если выражения перевода не существует.

Директива @lang не экранирует никаких выходных данных. Вы несёте полную ответственнойсть при использовании этой директивы.

Перемещение параметров в выражениях перевода

Вы можете определить заменитель в ваших выражениях перевода. Все заменители начинаются с :. Например, вы можете определить сообщение приветствия с заменителем name:

'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);

Вы также можете опрделить атрибуты заменителя в словоформах. На место заменителя встанет значение из массива, передаваемого в качестве третьего аргумента в функцию trans_choice:

'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago',

echo trans_choice('time.minutes_ago', 5, ['value' => 5]);

Если вы хотите отобразить число, которое было передано в функцию trans_choice, вы можете использовать заменитель :count:

'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',

Переопределение файлов перевода

Некоторые компоненты могут поставляться с внутренними файлами перевода. Вместо того чтобы изменить ядро компонента с целью задействовать эти строки, вы можете переопределить их, разместив в папке resources/lang/vendor/{package}/{locale}.

Поэтому, например, если вам необходимо переопределить выражения на английский язык в messages.php для компонента названного skyrim/hearthfire, вам необходимо разместить файлы перевода: resources/lang/vendor/hearthfire/en/messages.php. Внутри этого файла необходимо лишь выражения перевода, которые нужно переопределить. Все строки перевода, которые вы не переопределили, все равно будут загружаться из исходных языковых файлов пакета.