在Laravel 5.4中如何在Route :: group()...中设置语言(语言环境)? [英] How to set language (locale) inside a Route::group()... in Laravel 5.4?

查看:145
本文介绍了在Laravel 5.4中如何在Route :: group()...中设置语言(语言环境)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

内部刀片-welcome.blade.php.

 <div class="links">
      <a href="https://laravel.com/docs">{{ __('passwords.reset') }}</a>
 </div>

web.php内部.

如果我运行:

Route::get('/', function () {
    return view('welcome');
});

我获得了带有正确翻译的正确欢迎刀片页面.

I get the correct welcome blade page with the correct translation.

另一条路线:

Route::get('welcome/{lang}', function ($lang) {
//    echo $lang;
//    dd(Lang::getLocale());
    App::setLocale($lang);
    //dd(Lang::getLocale());
    return view('welcome');    
    //
});

如果运行dd(Lang::getLocale());,则可以看到URL http://testapp/welcome/en发送的正确语言.在这种情况下,'en'.如果在评论中加入dd(),我可以在Laravel欢迎页面中看到正确的翻译.

If I run dd(Lang::getLocale()); I can see the correct language sent by the URL http://testapp/welcome/en. In this case 'en'. If I put dd() in comment I can see the correct translation in Laravel Welcome page.

但是当我运行这段代码时:

But when I run this code:

Route::group(['prefix'=>'welcome'], function (){    
    Route::group(['prefix'=>'{lang}'], function ($lang){
        //echo $lang;
        //dd(Lang::getLocale());
        App::setLocale($lang);
        //dd(Lang::getLocale());
        return view('welcome');            
    });
});

这就是我所拥有的:

echo $ lang; 给了我ErrorException in web.php line 30: Object of class Illuminate\Routing\Router could not be converted to string

dd(Lang :: getLocale()); 给了我'en'.

App :: setLocale($ lang); 给我404未找到

App :: setLocale($ lang); 返回视图('welcome'); 给我404未找到

返回视图(欢迎"); 给我404未找到

当我跑步

App::setLocale($lang);
dd(Lang::getLocale());
return view('welcome');

我得到一个对象:

Router {#21 ▼
  #events: Dispatcher {#23 ▶}
  #container: Application {#3 ▶}
  #routes: RouteCollection {#25 ▶}
  #current: null
  #currentRequest: null
  #middleware: array:6 [▶]
  #middlewareGroups: array:2 [▶]
  +middlewarePriority: array:6 [▶]
  #binders: []
  #patterns: []
  #groupStack: array:3 [▶]
}

所以,我的猜测是Route::group(['prefix'=>'{lang}'...返回的不是字符串对象.这就是它导致进程崩溃的原因.

So, my guess is that Route::group(['prefix'=>'{lang}'... is returning a object not a string. This is why it crashes the process.

如何使用Route::group()解决此问题?

推荐答案

问题是Route::group只是用于组织和分组其他路线的包装器.它不是一个已定义的URL. Route::groupRoute::post/get的工作原理不同,因此不能在Route::group调用中放入逻辑.

The problem is that Route::group is just a wrapper to organize and group other routes. It is not a defined url. Route::group and Route::post/get don't work that same, so you cannot put logic inside a Route::group call.

您可以做的是以下

Route::group(['prefix'=>'welcome'], function (){    
    Route::group(['prefix'=>'{lang}'], function (){
        Route::get('/', function ($lang) {
            App::setLocale($lang);
            return view('welcome');
        });            
     });
});

这篇关于在Laravel 5.4中如何在Route :: group()...中设置语言(语言环境)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆