Laravel 5多语言不起作用

时间:2016-02-05 11:53:30

标签: laravel localization

我尝试本地化我的应用,但似乎我错过了一些东西。我之前没有任何相关知识,因此很难开始。这是我的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',)

1 个答案:

答案 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);