Версія фреймворка: 8.x

Локалізація

Вступ

Функції локалізації 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фасад:

Route::get('welcome/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'es', 'fr'])) {
        abort(400);
    }

    App::setLocale($locale);

    //
});

Ви можете налаштувати "запасну мову", яка використовуватиметься, коли активна мова не містить заданого рядка перекладу. Як і мова за замовчуванням, резервна мова також налаштована вconfig/app.phpфайл конфігурації:

'fallback_locale' => 'en',

Визначення поточного місця

Ви можете використовуватиgetLocaleіisLocale methods on the 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',
];

Використання рядків перекладу як ключів

Для додатків із суворими вимогами до перекладу визначення кожного рядка за допомогою "короткого ключа" може стати заплутаним при посиланні на ключі у ваших Viewх. З цієї причини Laravel також надає підтримку для визначення рядків перекладу, використовуючи "типовий" переклад рядка як ключа.

Файли перекладу, які використовують рядки перекладу як ключі, зберігаються як файли JSON уresources/lang directory. For example, if your application has a Spanish translation, you should create a resources/lang/es.jsonфайл:

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

Ключові / файлові конфлікти

Не слід визначати ключі рядка перекладу, що суперечать іншим іменам файлів перекладу. Наприклад, переклад__('Action')для мови "NL", поки anl/action.phpфайл існує, але файлnl.jsonФайл не існує, перекладач поверне вмістnl/action.php.

Отримання рядків перекладу

Ви можете отримувати рядки з мовних файлів за допомогою__допоміжна функція.__метод приймає файл і ключ рядка перекладу як перший аргумент. Наприклад, давайте отримаємо файлwelcomeрядок перекладу зresources/lang/messages.php language file:

echo __('messages.welcome');

echo __('I love programming.');

Якщо ви використовуєтеДвигун шаблону Blade, ви можете використовувати{{ }}синтаксис, щоб повторити рядок перекладу або використовувати@langдиректива:

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

@lang('messages.welcome')

Якщо вказаний рядок перекладу не існує, файл__функція поверне ключ перекладу рядка. Отже, використовуючи приклад вище, файл__функція повернетьсяmessages.welcomeякщо рядок перекладу не існує.

@langдиректива не уникне жодного результату. Ти єповністю відповідальний for escaping your own output when using this directive.

Заміна параметрів у рядках перекладу

За бажанням ви можете визначити заповнювачі у рядках перекладу. Усі заповнювачі мають префікс a:. Наприклад, ви можете визначити привітальне повідомлення з ім'ям заповнювача:

'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. У цьому файлі слід лише визначити рядки перекладу, які ви хочете замінити. Усі рядки перекладу, які ви не заміните, все одно будуть завантажені з оригінальних мовних файлів пакета.