【发布时间】:2015-09-13 07:55:45
【问题描述】:
我正在尝试实现一个支持两种语言的 laravel 网站(pt 和 en 已经实现了 pt 后备)。所需的网址应该是葡萄牙语的 www.example.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/ 前缀进行重定向,但我猜肯定有另一种方式)
编辑 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);
}
});
【问题讨论】:
标签: php laravel laravel-5 laravel-routing