Локализация
11.x
.
Почему это важно?
Введение
Класс Lang
даёт возможность удобного получения языковых строк, позволяя вашему приложению поддерживать несколько языков интерфейса.
Языковые файлы
Языковые строки хранятся в папке app/lang
Внутри неё должны располагаться подпапки – языки, поддерживаемые приложением:
/app
/lang
/en
messages.php
/es
messages.php
Пример языкового файла
Языковые файлы (скрипты) просто возвращают массив пар ключ/значение.
<?php
return array(
'welcome' => 'Добро пожаловать на мой сайт!'
);
Изменение языка по умолчанию "на лету"
Язык по умолчанию указан в файле настроек app/config/app.php
. Вы можете изменить текущий язык во время работы вашего приложения методом App::setLocale
:
App::setLocale('es');
Резервный язык локализации
Вы также можете установить резервный язык локализации – в случае, если для основного языка нет вариантов перевода, будет браться строка из резервного файла локализации. Обычно это английский язык, но вы можете это поменять. Настройка находится в файле app/config/app.php
:
'fallback_locale' => 'en',
Основы использования
Получение строк из языкового файла
echo Lang::get('messages.welcome');
Первый компонент, передаваемый методу get
– имя языкового файла, а затем указывается имя строки, которую нужно получить.
Примечание: если строка не найдена, то метод
get
вернёт её путь (ключ).
Вы также можете использовать функцию trans
– короткий способ вызова метода Lang::get
:
echo trans('messages.welcome');
Замена параметров внутри строк
Сперва определите параметр в языковой строке:
'welcome' => 'Welcome, :name',
Затем передайте массив вторым аргументом методу Lang::get
:
echo Lang::get('messages.welcome', array('name' => 'Dayle'));
Проверка существования языковой строки
if (Lang::has('messages.welcome'))
{
//
}
Формы множественного числа
Формы множественного числа – проблема для многих языков, так как все они имеют разные сложные правила для их получения. Однако вы можете легко справиться с ней в ваших языковых файлах используя символ “|” для разделения форм единственного и мнжественного чисел.
'apples' => 'There is one apple|There are many apples',
Для получения такой строки используется метод Lang::choice
:
echo Lang::choice('messages.apples', 10);
Вы можете указать не два, а несколько вариантов выражения множественного числа:
echo Lang::choice('товар|товара|товаров', $count, array(), 'ru');
Благодаря тому, что Laravel использует компонент Symfony Translation cвы можете легко создать более точные правила для проверки числа:
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
Сообщения валидации
О том, как использовать файлы локализации для сообщений валидации, смотрите соответствующий раздел документации.
Перекрытие файлов локализации из пакетов
Многие пакеты идут со своими файлами локализации. Вы можете “перекрыть” их, располагая файлы в папках app/lang/packages/{locale}/{package}
. Например, если вам надо перекрыть файл messages.php
пакета skyrim/hearthfire
, путь до вашего файла локализации должен выглядеть так: app/lang/packages/en/hearthfire/messages.php
. Нет нужды дублировать файл целиком, можно указать только те ключи, которые должны быть перекрыты.