2013-05-31 61 views
1

在Laravel 3中,我根据请求URL的第一部分检测到了区域设置。Laravel 4中基于URL的区域设置检测

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删除此功能。

我可以得到这种行为吗?

我试图手动实现它,但因为我希望它在每个请求上,所以我不想在每个路由中指定语言变量(上面的Route应该与我的实现一起工作)。这里是我的解决方案:

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,因为连接未指定/ foo是使用。

我可以改变什么来使这个工作?

+0

您是否总是想在检测并设置区域设置后从URL中删除语言? – MarkL

+0

我只是试图从URL的语言中去掉'Route's,但是Mikes答案解决了我的问题,谢谢 – Felix

回答

2

看到这个论坛的帖子:http://forums.laravel.io/viewtopic.php?id=7458

在这里,我们简单地拿起URI的前缀,然后将其应用于Routegroup小号检测的语言。

然后,要为您的视图编译这些URL,您只需使用命名路由。

对我来说,现在是最好的方法。

+0

Group Routes现在会这样做,这就阻止了我在每个路由中编写语言支持。谢谢! – Felix