Мультиязычность в Laravel

335
28 февраля 2017, 18:44

Как правильно сделать мультиязычность в Laravel, что бы язык был в роуте, типа pl/team/1 ?

Answer 1

Использовать prefix с middleware - примерно такой код будет в routes.php

Route::get('/signout', ['as' => 'auth.signout', 'uses' => 'Auth\AuthController@signout']);
Route::get('/login', ['as' => 'auth.login', 'uses' => 'Auth\AuthController@login']);
Route::post('/create', ['as' => 'auth.create', 'uses' => 'Auth\AuthController@create']);
Route::post('/signin', ['as' => 'auth.signin', 'uses' => 'Auth\AuthController@signin']);
Route::get('/', function(){
    return Redirect::to('/ro');
});
Route::group(['middleware' => 'isAdmin:admin', 'namespace' => 'Admin'], function(){
    //...
});
Route::group(['middleware' => 'Localization'], function() {
    Route::get('/{lang}/offers/view/{offer_id}', ['as' => 'offers.view', 'uses' => 'OffersController@view']);
    Route::get('/{lang}/news/view/{offer_id}', ['as' => 'news.view', 'uses' => 'NewsController@view']);
});
Route::group(['prefix' => '{lang}', 'middleware' => 'Localization'], function() {
    Route::get('/', ['as' => 'site.index', 'uses' => 'SiteController@index']);
    Route::get('/contacts', ['as' => 'site.contacts', 'uses' => 'SiteController@contacts']);
    Route::get('/offers', ['as' => 'offers.index', 'uses' => 'OffersController@index']);
    Route::get('/news', ['as' => 'news.index', 'uses' => 'NewsController@index']);
    Route::get('/info', ['as' => 'site.info', 'uses' => 'SiteController@info']);
    Route::get('/info2', ['as' => 'site.info2', 'uses' => 'SiteController@info2']);
    Route::get('/info3', ['as' => 'site.info3', 'uses' => 'SiteController@info3']);
    Route::get('/info4', ['as' => 'site.info4', 'uses' => 'SiteController@info4']);
    Route::get('/payments', ['as' => 'site.payments', 'uses' => 'SiteController@payments']);
});
Answer 2

Самый простой способ - воспользоваться специальным middleware: laravel-localization

Нужно обернуть группу роутов, которые вы хотите префиксовать в функцию:

// app/Http/routes.php
// тут обрабатываются URL с префиксами.
Route::group(['prefix' => LaravelLocalization::setLocale()], function()
{
    /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
    Route::get('/', function()
    {
        return View::make('hello');
    });
    Route::get('test',function(){
        return View::make('test');
    });
});
/** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/

Дополнительные сведения читайте в документации.

READ ALSO
Непонятная работа AJAX

Непонятная работа AJAX

Не работает простейший ajax запросПри нажатии на кнопку должно отправляться письмо

254
отличие class от function php

отличие class от function php

здравствуйте, программирую на php без нескольких месяцев год, и пока что не могу точно понят в чём преимущество классов по сравнению с функциями,...

276
Возвращает строку вместо json-объекта

Возвращает строку вместо json-объекта

Есть файл, в котором обрабатываются данные и есть прокси, который написан для для кросс-доменных запросовФайл, в котором обрабатываются данные,...

305
Как прибавить к времени до ровного значения?

Как прибавить к времени до ровного значения?

У меня в системе есть автоматические задачи при изменении статуса клиента, автоматически ставится задача у которой есть значение "выполнить...

192