我正在尝试实现一个支持两种语言的laravel网站(pt和en已经实现了pt fallback)。所需的网址应为www.ugample.com/pt/list(葡萄牙语)和www.example.com/en/list(英语)。如果未插入任何语言,则应使用pt作为默认值。 我有以下代码: [routes.php文件]
Route::filter('localization', function() {
App::setLocale(Route::input('lang'));
});
Route::group(['prefix' => '{lang?}', 'before' => 'localization'], function() {
Route::get('/', 'HomeController@index');
Route::get('/list','ListController@index');
});
当定义语言时,一切运行良好,但即使没有此URL的路由器,它也将始终重定向到主页。 我该如何避免这种行为?是否可以对群组进行正则表达式?猜猜Jason Lewis' Enhanced Router仅适用于Laravel 4
编辑1: 我可以使用htaccess中的重定向来修复它(如果没有语言前缀,那么使用/ pt / prefix重定向,但我必须有另一种方式)
编辑2: 可以使用以下代码修复它,但它也涉及使用重定向,我想它可以被阻止,并且url将始终具有语言参数
Route::filter('localization', function() {
$accepted_language = array("pt","en");
$first_segment = Route::input("lang");
if(in_array($first_segment,$accepted_language))
{
/*ALL GOOD, Language in URL*/
App::setLocale(Route::input('lang'));
}
else
{
/*REDIRECT WITH LANGUAGE*/
$segments = Request::segments();
$imploded = implode("/",$segments);
$url = "/pt/".$imploded;
return Redirect::to($url, 301);
}
});
答案 0 :(得分:0)
在我最近的项目中,我遇到了同样的问题。你可以这样做:
$languages = array('en', 'pt');
$locale = Request::segment(1);
if (in_array($locale, $languages))
{
App::setLocale($locale);
}
else
{
redirect('pt')->send();
}
Route::group(['prefix' => $locale], function()
{
Route::get('/', 'HomeController@index');
Route::get('list','ListController@index');
});
或者将区域设置检查到单独的中间件。