vsamovarov / laravel-localizer
Very easy localization for Laravel
Requires
- php: ^7.2
- laravel/framework: ^6.0||^7.0||^8.0
Requires (Dev)
- orchestra/testbench: ^4.0
- orchestra/testbench-browser-kit: ^4.0
- phpunit/phpunit: ^8.0
Suggests
- ext-intl: *
This package is auto-updated.
Last update: 2025-07-04 20:00:22 UTC
README
Простая локализация Laravel. Значение локали извлекается из URL.
- Переводимые маршруты
- Возможность скрыть локаль по умолчанию в URL
- Поддерживает кеширование
- Поддержка именованных маршрутов
Installation
Установка с помощью Composer:
composer require vsamovarov/laravel-localizer
... опции
php artisan vendor:publish --provider="VSamovarov\LaravelLocalizer\LocalizerServiceProvider"
Usage
Группы для маршрутов
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'], ],
Язык по умолчанию будет первый в массиве.
Middleware
Локаль приложения определяется с помощью мидлвара 'LocalizerMiddleware', по url.
Сам мидлвар устанавливается автоматически в группу 'web'а
Ни каких дополнительных манипуляций с кодом не требуется.
License
The MIT License (MIT). Please see License File for more information.