在Laravel 3中,我曾经根据请求网址的第一段检测到区域设置。
application/config/application.php
:
/*
|--------------------------------------------------------------------------
| Supported Languages
|--------------------------------------------------------------------------
|
| These languages may also be supported by your application. If a request
| enters your application with a URI beginning with one of these values
| the default language will automatically be set to that language.
|
*/
'languages' => array(
'en',
'de',
'fr',
),
所以我可以定义一条路线
Route::get('foo', function() {
echo 'Foo';
});
并通过以下方式访问:
GET /en/foo
GET /de/foo
GET /fr/foo
Laravel 4删除了此功能。
我可以恢复这种行为吗?
我试图手动实现它,但由于我想在每个请求中使用它,我不想在每个路由中指定语言变量(上面的路由应该与我的实现一起使用)。这是我的解决方案:
App::before(function($request)
{
$language = Request::segment(1);
if(in_array($language, Config::get('cms.available_languages')))
{
App::setLocale($language);
}
// Since locale is already set,
// I want to remove the language from the request URL (/en/foo => /foo)
// So I can route via Route::get('foo', ...)
$request->removeSegment(1);
}
但是我不知道从请求URL中删除语言,所以我得到404,因为没有指定en / foo。
我可以改变什么才能让它发挥作用?
答案 0 :(得分:2)
请参阅此论坛帖子:http://forums.laravel.io/viewtopic.php?id=7458
在这里,我们只是通过选择URI前缀,然后将其应用于group
Route
来检测语言。
然后,要为您的视图编译这些URL,您只需使用命名路由。
对我而言,这是目前最好的解决方法。