2016-02-05 3 views
2

J'ai essayé de localiser mon application, mais il semble que je manque quelque chose. Je n'ai aucune connaissance préalable à ce sujet et donc c'est assez difficile de commencer. Voici mon routes.phpLaravel 5 multi-langue ne fonctionne pas

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

Et voici mon LangController.php

public function index($lang) 

{ 
    $langs =['en', 'de']; 
    if(in_array($lang, $langs)){ 
     Session:set('lang', $lang); 
     return Redirect::back(); 
    } 
} 

Je réglerai middleware: (lang.php)

public function handle($request, Closure $next) 

{ 

    if($lang = Session::get('lang')){ 
     \Lang::setLocale($lang); 
    } 

    return $next($request); 
} 

activer dans Http \ noyau .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, 

    ]; 

Dans mon 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> 

S'il vous plaît help.I ne vois pas ce que je manque ... Dans le champ courant lorsque la presse Allemagne, il shoul être « de » et quand la presse anglaise, il shoul être « en » mais quand il presse l'Allemagne reste encore 'en' ... (par défaut est 'en' config/app.php -> 'locale' => 'en',)

Répondre

1

Parce que vous utilisez la session dans votre middleware, les valeurs dont vous avez besoin ne seront pas disponible jusqu'à ce que le middleware StartSession configure la session.

Vous devez donc ajouter votre middleware quelque part après cela, comme ceci:

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, 
]; 

En dehors de cela, vous avez également une petite erreur de syntaxe dans votre code de contrôleur. Vous avez oublié d'ajouter le deuxième deux-points (:) pour l'opérateur de résolution d'étendue, lors de l'affectation de la valeur à la session dans votre méthode de contrôleur index. Donc ceci:

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

Devrait être ceci:

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

J'ai essayé, mais il ne fonctionne toujours pas .... – pape

+0

Quelle version Laravel utilisez-vous? 5,0, 5,1 ou 5,2? – Bogdan

+0

J'utilise laravel 5.1 – pape