Laravel 5 多语言不起作用

Laravel 5 multi language not working

提问人:pape 提问时间:2/5/2016 最后编辑:Vevepape 更新时间:1/13/2017 访问量:2110

问:

我试图本地化我的应用程序,但似乎我遗漏了一些东西。我以前对此没有任何了解,因此很难开始。这是我的路线.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,

    ];

在我的刀刃上.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 -> 'locale' => 'en',)

Laravel 本地化

评论


答:

1赞 Bogdan 2/5/2016 #1

由于您在中间件中使用会话,因此在中间件设置会话之前,所需的值将不可用。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);

应该是这样的:

Session::set('lang', $lang);

评论

0赞 Bogdan 2/5/2016
你用的是什么Laravel版本?5.0、5.1 还是 5.2?
0赞 Bogdan 2/5/2016
我已经更新了我的答案,以包括我在您的代码中注意到的第二个问题。