在 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 没有指定。
我可以改变什么来让它工作?