Введение
Возможности для локализации в 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. В этом файле вам надо задать только те строки, которые вы хотите перекрыть. Все остальные строки, которые вам не надо перекрывать, будут загружаться из языковых файлов самого пакета.
Laravel по-русски
Комментарии (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 яблок'