Laravel默认语言环境不在url中

时间:2018-04-25 13:21:17

标签: laravel routes localization locale

假设我在网站上有3个(或更多语言)。英语,意大利语,法语。英语是默认的。

我希望主页网址为:

  • mysite.com/ - for english
  • mysite.com/it - 意大利语
  • mysite.com/fr - for french

我的路线目前正在

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

这适用于法语,意大利语,但显然不是英语只是mysite.com /

我不想要像

这样的其他路线
Route::get('/', 'HomeController@index')

因为那样我就不能用任何语言简单地回家了

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

什么是最好的解决方案?

2 个答案:

答案 0 :(得分:3)

我的旧解决方案之一,但仍应该工作: 在routes.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(){ ... })

重要提示:在这种情况下,您应始终使用命名路由。

答案 1 :(得分:1)

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
  }

  ...
}

希望它对你有帮助:)。