在Laravel 5.4中如何在Route :: group()...中设置语言(语言环境)? [英] How to set language (locale) inside a Route::group()... in Laravel 5.4?
问题描述
内部刀片-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::group
和Route::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屋!