Laravel默认语言环境不在url中

Laravel默认语言环境不在url中,laravel,routes,localization,locale,Laravel,Routes,Localization,Locale,假设我在站点上有3种(或更多语言)。英语、意大利语、法语。默认为英语 我希望主页url为: mysite.com/-英语版 mysite.com/it-意大利语 mysite.com/fr-法语版 我现在的路线是 Route::get('/{locale}', 'HomeController@index')->name('home'); 这适用于法语、意大利语,但显然不适用于英语/ 我不想要另一条像这样的路线 Route::get('/', 'HomeController@index

假设我在站点上有3种(或更多语言)。英语、意大利语、法语。默认为英语

我希望主页url为:

  • mysite.com/-英语版
  • mysite.com/it-意大利语
  • mysite.com/fr-法语版
我现在的路线是

Route::get('/{locale}', 'HomeController@index')->name('home');
这适用于法语、意大利语,但显然不适用于英语/

我不想要另一条像这样的路线

Route::get('/', 'HomeController@index')
因为那样的话,我就不能用任何语言简单地打电话回家了

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

最佳解决方案是什么?

Laravel允许在路线定义中使用可选参数,因此您可以将
local
路线参数设置为您使用时的可选参数:

Route::get('/{locale?}', 'HomeController@index')->name('home');
在您的家庭控制器中,检查参数以了解是否存在区域设置

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

  ...
}

希望对您有所帮助:)

Laravel允许在路由定义中使用可选参数,因此您可以根据自己的使用情况将
local
route参数设置为可选参数:

Route::get('/{locale?}', 'HomeController@index')->name('home');
在您的家庭控制器中,检查参数以了解是否存在区域设置

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

  ...
}

希望它能帮助您:)

这是我以前的解决方案之一,但仍然可以工作: 在routes.php的开头

$locale = Request::segment(1);

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

    $locale = '';
}
然后

重要提示:在这种情况下,您应该始终使用命名路由。生成的URL将用于当前区域设置:


route('demo')
将在应用程序区域设置为英语时返回
/demo
,在应用程序区域设置为意大利语时返回
/it/demo

这是我以前的解决方案之一,但仍然有效: 在routes.php的开头

$locale = Request::segment(1);

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

    $locale = '';
}
然后

重要提示:在这种情况下,您应该始终使用命名路由。生成的URL将用于当前区域设置:


route('demo')
将在应用程序区域设置为英语时返回
/demo
,在应用程序区域设置为意大利语时返回
/it/demo

写一个
if
语句来检查'routes and redirect to your home route'中的
$locale
?写一个
if
语句来检查'routes and redirect to your home route'中的
$locale
?这是一个很好的解决方案。你会为其他页面做什么。我想您不能执行如下操作:Route::get('/{locale?}/my page','HomeController@my-page')->名称('my-page');不需要。可选参数需要转到路由的末尾,否则路由器将不知道如何将URL与路由匹配这是一个非常好的解决方案。你会为其他页面做什么。我想您不能执行如下操作:Route::get('/{locale?}/my page','HomeController@my-page')->名称('my-page');不需要。可选参数需要转到路由的末尾,否则路由器将不知道如何将URL与路由匹配