1

在 Laravel 3 中,我曾经根据请求 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 移除了这个特性。

我可以恢复这种行为吗?

我尝试手动实现它,但由于我希望在每个请求上都使用它,我不想在每个路由中指定语言变量(上面的路由应该与我的实现一起使用)。这是我的解决方案:

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 没有指定。

我可以改变什么来让它工作?

4

1 回答 1

2

请参阅此论坛帖子:http ://forums.laravel.io/viewtopic.php?id=7458

在这里,我们只是通过提取 URI 前缀来检测语言,然后将其应用于 a groupof Routes。

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

对我来说,这是目前最好的方法。

于 2013-06-01T07:12:09.557 回答