我尝试本地化我的应用,但似乎我错过了一些东西。我之前没有任何相关知识,因此很难开始。这是我的routes.php
Route::get('/lang/{lang}', 'LangController@index');
这是我的LangController.php
public function index($lang)
{
$langs =['en', 'de'];
if(in_array($lang, $langs)){
Session:set('lang', $lang);
return Redirect::back();
}
}
我设置中间件:(Lang.php)
public function handle($request, Closure $next)
{
if($lang = Session::get('lang')){
\Lang::setLocale($lang);
}
return $next($request);
}
在Http \ Kernel.php中启用它:
protected $middleware = [
\App\Http\Middleware\Lang::class,
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
在我的blade.php中
{{ Lang::get('home.hello')}}
CURRENT: {{ Lang::getLocale() }} <br /> <br />
<a href="{{ url('lang/de') }}">Germany</a> | <a href="{{ url('lang/en') }}">English</a>
请帮忙。我看不到我错过的...... 在CURRENT领域,当按德国时它应该是'de',当按英语时它应该是'en'但是当按下德国时它仍然保持'en'...(默认是'en'config / app.php - &gt;' locale'=&gt;'en',)
答案 0 :(得分:1)
由于您在中间件中使用会话,因此在$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
中间件设置会话之前,您所需的值将无法使用。
所以你应该在那之后的某个地方添加你的中间件,如下所示:
StartSession
除此之外,您的控制器代码中也存在一个小的语法错误。在将值分配给protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class, // Init session
\App\Http\Middleware\Lang::class, // Set locale
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
控制器方法中的会话时,您忘记为范围解析运算符添加第二个冒号(:
)。所以这个:
index
应该是这样的:
Session:set('lang', $lang);