2016-02-05 173 views
2

我试图本地化我的应用程序,但似乎我错过了一些东西。我以前没有任何关于这方面的知识,因此很难开始。这里是我的routes.php文件Laravel 5多语言不起作用

Route::get('/lang/{lang}', '[email protected]'); 

这里是我的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 \内核中启用它.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, 

    ]; 

In my 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> 

请help.I看不出有什么我失踪... 在励磁电流时,按德国也建议立即进行删除是“德”,当按下英语是建议立即进行删除是“恩”,但是当按德国仍留'en'...(默认是'en'config/app.php - >'locale'=>'en',)

回答

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

我试过,但它仍然没有工作.... – pape

+0

什么Laravel版本您使用的? 5.0,5.1或5.2? – Bogdan

+0

我使用laravel 5.1 – pape