Введение
Возможности для локализации в Laravel предоставляют удобный способ получения языковых строк, позволяя вашему приложению поддерживать несколько языков интерфейса. Языковые строки хранятся в папке resources/lang. Внутри неё должны располагаться подпапки для всех языков, поддерживаемых приложением:
/resources /lang /en messages.php /es messages.php
Все языковые файлы (скрипты) просто возвращают массив пар ключ/значение. Например:
<?php
return [
'welcome' => 'Добро пожаловать на мой сайт!'
];
Настройка языка
Язык по умолчанию указан в файле настроек config/app.php. Само собой, вы можете изменить это значение для вашего приложения при необходимости. Вы также можете изменить текущий язык во время работы вашего приложения методом PHPsetLocale()
фасада App:
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
Вы можете настроить «запасной язык», который будет использоваться, когда в файле текущего языка нет соответствующей строки. Как и язык по умолчанию, запасной язык также настраивается в файле config/app.php:
'fallback_locale' => 'en',
Вы можете использовать методы PHPgetLocale()
и PHPisLocale()
фасада App для определения текущего языка и для проверки на совпадение текущего языка с переданным значением:
$locale = App::getLocale();
if (App::isLocale('en')) {
//
}
Получение языковых строк
Вы можете получить строки из языкового файла с помощью функции PHPtrans()
. Метод PHPtrans()
принимает файл и ключ языковой строки первым аргументом. Например, давайте получим языковую строку welcome из файла resources/lang/messages.php:
echo trans('messages.welcome');
Конечно, если вы используете шаблонизатор Blade, то для получения языковой строки можете использовать синтаксис {{ }} или директиву PHP@lang
(для версии 5.2 и выше):
{{ trans('messages.welcome') }}
@lang('messages.welcome')
Если строка не найдена, то метод PHPtrans()
вернёт её имя (ключ). В нашем примере это будет messages.welcome.
добавлено в 5.0 ()
Замена частей в строках
Если хотите, задайте место для замены в языковой строке. Все места для замены начинаются с двоеточия (:). Например, вы можете задать сообщение приветствия с использованием замены для имени:
'welcome' => 'Welcome, :name',
Для подстановки значения при получении языковой строки передайте массив замен вторым аргументом метода PHPtrans()
:
echo trans('messages.welcome', ['name' => 'dayle']);
добавлено в 5.2 ()
добавлено в 5.0 ()
Множественное число
Формы множественного числа — проблема для многих языков, так как все они имеют разные сложные правила формирования множественного числа. Однако вы можете легко справиться с ней в ваших языковых файлах используя символ | для разделения форм единственного и множественного числа:
'apples' => 'Это одно яблоко|Это много яблок',
После определения языковой строки с вариантами для разных чисел, вы можете использовать функцию PHPtrans_choice()
для получения строки в нужном числе. В данном примере возвратится вариант во множественном числе, так как указано число большее 1:
echo trans_choice('messages.apples', 10);
добавлено в 5.0 ()
Благодаря тому, что Laravel использует компонент Symfony Translation вы можете легко создать более точные правила, которые будут указывать языковые строки для нескольких числовых промежутков:
'apples' => '{0} Это нисколько|[1,19] Это несколько|[20,Inf] Это много',
Перекрытие языковых файлов пакета
Многие пакеты поставляются с собственными языковыми файлами. Вместо того, чтобы вскрывать файлы внутри пакета, чтобы настроить строки в них, вы можете перекрыть их, разместив файлы в каталоге resources/lang/vendor/{package}/{locale} (для версии Laravel 5.0 — resources/lang/packages/{locale}/{package}).
Например, если вам необходимо изменить строки английского языка в messages.php для пакета skyrim/hearthfire, вам надо поместить языковой файл в resources/lang/vendor/hearthfire/en/messages.php. В этом файле вам надо задать только те строки, которые вы хотите перекрыть. Все остальные строки, которые вам не надо перекрывать, будут загружаться из языковых файлов самого пакета.
Комментарии (7)
Есть ли готовые русские файлы для validation.php? Понимаю, что это можно сделать самому, но зачем делать то, что возможно уже есть
Конечно есть: https://github.com/caouecs/Laravel-lang
И не слово про переключения языков и выборки контента из БД ((((((((((
для переключения необходимо в
config/app.php
изменить'locale' => 'ru'
и'fallback_locale' => 'ru'
на необходимый язык, скачать с https://github.com/caouecs/Laravel-lang языки и закинуть папку с нужным языком вresurses/lang/
для бд можно заюзать dimsav/laravel-translatable
Вот хороший пакет для локализации: https://github.com/klisl/laravel-locale
а вот статья: http://klisl.com/multilanguage_laravel.html
Для вывода сообщения «NN яблок», c изменением окончания слова в зависимости от количества, можно использовать конструкцию
trans_choice(«main.apples_number», $number)
где $number — число, а строка 'main.apples_number' определена в файле локализации main.php как
'apples_number' ⇒ ':count яблоко|:count яблока|:count яблок'