Вступление

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

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

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

<?php

return [
    'welcome' => 'Welcome to our application'
];

 

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

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

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 также обеспечивает поддержку определения строк перевода, используя в качестве ключа перевод строки по умолчанию.

Файлы перевода, которые используют строки перевода в качестве ключей, хранятся в каталоге как файлы JSON . Например, если ваше приложение имеет перевод на испанский язык, вы должны создать файл:resources/langresources/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Директива не выходит никаких выходных данных . Вы несете полную ответственность за выход из собственного вывода при использовании этой директивы.

 

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

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

'welcome' => 'Welcome, :name',

Чтобы заменить заполнители при извлечении строки перевода, передайте массив замен в качестве второго аргумента __функции:

echo __('messages.welcome', ['name' => 'dayle']);

Если ваш заполнитель содержит все заглавные буквы или только первая буква имеет заглавную букву, переведенное значение будет заглавно соответственно:

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

 

Плюрализация

Плюрализация - сложная проблема, поскольку разные языки имеют множество сложных правил для плюрализации. Используя символ "pipe", вы можете различать формы строки в единственном и множественном числе:

'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.phpskyrim/hearthfireresources/lang/vendor/hearthfire/en/messages.php