laravel的翻译路线在全站工作

时间:2015-10-11 23:27:25

标签: php laravel routes laravel-5 laravel-5.1

我的laravel Web应用程序以两种不同的语言运行,我正在使用一种设置它的路径,如下所示:

Route::get('/br', function (Illuminate\Http\Request $request) {
    return Redirect::to('/')->withCookie(cookie()->forever('locale', "pt-br"));
});

这很有效,但不适用于网站上的所有页面,仅适用于路线本身(myapp.com/br)

我想发送用户的语言链接,使用url字符串定义,然后将用户重定向到页面本身,可以是任何页面,例如:

http://www.myapp.com/pt/pricing

这会将语言设置为葡萄牙语,然后将其重定向到网站上具有/ pt的网站上的定价或任何其他页面。

基本上我需要通配符检查“/ pt”是否在URL中,最好是通过路由。

我知道我可以使用url字符串执行此操作,如下所示:

http://www.myapp.com/pricing?lang=pt

但似乎有点偏离我的发展模式。

所以,我需要这样的东西:

Route::get('/br/%anything', function (Illuminate\Http\Request $request) {
    return Redirect::to('/%anything')->withCookie(cookie()->forever('locale', "pt-br"));
});

有没有办法用laravel中的路线来做?

1 个答案:

答案 0 :(得分:1)

首先尝试注册您的语言:

Route::bind('lang', function($lang){
    $langs = [
        'br' => 'pt-br',
        'pt' => 'pt-pt',
    ];

    return $langs[$lang];
});

然后为您网页的标识符添加模式:

Route::pattern('page', '[a-z]+');

现在,根据lang/page url:

进行重定向
Route::get('{lang}/{page}', function($lang, $page){
    return redirect()
           ->route($page)
           ->withCookie(cookie()->forever('locale', $lang));
});

结果:

  • myapp.com/pt/pricing - > myapp.com/pricing(cookie上有pt
  • myapp.com/br/pricing - > myapp.com/pricing(cookie上有br
  • myapp.com/auth/login - >
  • 将不会重定向