Язык по умолчанию Laravel отсутствует в URL - PullRequest
0 голосов
/ 25 апреля 2018

Предположим, у меня есть 3 (или более языков) на сайте.Английский, итальянский, французский.По умолчанию используется английский.

Я хочу, чтобы URL домашней страницы был:

  • mysite.com / - для английского
  • mysite.com / it - для итальянского
  • mysite.com / fr - для французского

Мой маршрут в настоящее время

Route::get('/{locale}', 'HomeController@index')->name('home');

Это работает для французского, итальянского, но, очевидно, не для английского, являющегося просто mysite.com /

Мне не нужен другой маршрут, такой как

Route::get('/', 'HomeController@index')

Потому что тогда я не смог бы просто позвонить домой на любом языке как

{{ route('home', $locale) }}

Какое лучшее решение

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Одно из моих старых решений, но оно все еще должно работать: в начале route.php

$locale = Request::segment(1);

if(in_array($locale, ['en','fr','it'])){
    app()->setLocale($locale);
}else{
    app()->setLocale('en');

    $locale = '';
}

Затем

Route::group([
  'prefix' => $locale
], function(){ ... })

Важно: Вы должны всегдаиспользуйте именованные маршруты в этом сценарии.

0 голосов
/ 25 апреля 2018

Laravel разрешает необязательные параметры в определении маршрута, поэтому вы можете установить local параметр маршрута как необязательный для вашего использования:

Route::get('/{locale?}', 'HomeController@index')->name('home');

А в вашем HomeController проверьте параметр назнать, если локаль присутствует

public function index(Request $request, $locale = null) {
  if (empty($locale)) {
    $locale = 'en'; // english by default
  }

  ...
}

Надеюсь, это поможет вам:)

...