vsamovarov/laravel-localizer is a Laravel package for very easy localization for laravel.
It currently has 0 GitHub stars and 12 downloads on Packagist.
Install it with composer require vsamovarov/laravel-localizer.
Discover more Laravel packages by vsamovarov
or browse all Laravel packages to compare alternatives.
Last updated
Простая локализация Laravel. Значение локали извлекается из URL.
Установка с помощью Composer:
composer require vsamovarov/laravel-localizer
... опции
php artisan vendor:publish --provider="VSamovarov\LaravelLocalizer\LocalizerServiceProvider"
Laravel Localizator создает группы для маршрутов для каждой локали, с предопределенными параметрами 'prefix' и 'as'.
Используется макрос, который делает синтаксис похожим на объявление группы роутеров.
Например:
routes/web.php
Route::localizedGroup([],
function () {
Route::get('/','Controller@metod')->name('home');
Route::get('article/about','Controller@metod')->name('about');
}
);
Создаст маршруты для предопределенных языков en, ru, uk
| Method | URI | Name | | -------- | ---------------- | ------------------ | | GET/HEAD | / | localiser-en.home | | GET/HEAD | ru | localiser-ru.home | | GET/HEAD | uk | localiser-uk.home | | GET/HEAD | article/about | localiser-en.about | | GET/HEAD | ru/article/about | localiser-ru.about | | GET/HEAD | uk/article/about | localiser-uk.about |
Префикс языка в url по умолчанию скрывается.
Изменить поведение можно с помощью опции hideDefaultLocaleInURL в файле конфигурации.
Тогда создаются такие маршруты
| Method | URI | Name | | -------- | ---------------- | ------------------ | | GET/HEAD | en | localiser-en.home | | GET/HEAD | ru | localiser-ru.home | | GET/HEAD | uk | localiser-uk.home | | GET/HEAD | en/article/about | localiser-en.about | | GET/HEAD | ru/article/about | localiser-ru.about | | GET/HEAD | uk/article/about | localiser-uk.about | | GET/HEAD | / | |
Дополнительный маршрут на главную станицу, дублирует страницу с локалью по умолчанию
Вы можете перевести ваши маршруты. Например...
http://example.com/en/article/about, http://example.com/ru/statya/o-nas (на русском)
...будут перенаправлены на тот же контроллер/представление.
Для надо создать файл переводов для соответствущих локалей, по умолчанию - routes.php, в котором задать перевод для каждого сегмента URL.
Если совпадение не будет найдено, то сегмент останется прежним.
Например
// resources/lang/ru/routes.php
return [
"article" => "statya",
"about" => "o-nas" ,
];
// routes/web.php
Route::localizedGroup([],
function () {
Route::get('article/about','Controller@metod')->name('about');
}
);
Создаст маршруты для предопределенных языков en, ru
| Method | URI | Name | | -------- | ---------------- | ------------------ | | GET/HEAD | en/article/about | localiser-ru.about | | GET/HEAD | ru/statya/o-nas | localiser-ru.about |
Обратите внимание - ни какого дополнительного кода для перевода маршрута не требуется.
Именованные маршруты удобно получать с помощью хелпера:
$url = t_route('about');
$url = t_route('article', ['id'=>'24']); //с параметрами
$url = t_route('article', [],'ru'); //с указаной локалью
Это сокращает конструкцию, в которой необходимо указывать сложный префикс
// $url = t_route('article', ['id'=>'24']);
$url = route(app('localizer')->getNamePrefix() . app()->getLocale() . '.' .'article', ['id'=>'24']);
Настройки библиотеки находятся в файле конфигурации 'config/laravel-localizer.php'
Локали определяются в секции 'supportedLocales' с помощью массива. Например:
'supportedLocales' => [
'uk' => ['name' => 'Ukrainian', 'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'],
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
'ru' => ['name' => 'Russian', 'script' => 'Cyrl', 'native' => 'русский', 'regional' => 'ru_RU'],
],
Язык по умолчанию будет первый в массиве.
Локаль приложения определяется с помощью мидлвара 'LocalizerMiddleware', по url.
Сам мидлвар устанавливается автоматически в группу 'web'а
Ни каких дополнительных манипуляций с кодом не требуется.
The MIT License (MIT). Please see License File for more information.