2016-01-02 14 views
7

Używam laravel 5.1, próbuję zaktualizować ustawienia regionalne w pliku app tak: W Locale Middleware pliku:laravel: App :: setlocale nie działa

... 
public function handle($request, Closure $next) 
    {  
     if(Session::has('locale')) 
     { 
      $lang = Session::get('locale');    
      App::setLocale($lang);   
     } 

     return $next($request); 
    } 

Każdy pomysł na ten temat ??

+1

Masz tutaj problem rekursji, co kryje się w parametrze '$ next'? – ViRuSTriNiTy

+0

jakie są objawy "nie działa"? czy jesteś pewien, że ustawienia regionalne są ustawione w sesji? –

+0

Tak Widzę jego wartość za pomocą: Session :: get ("locale"):/ – BKF

Odpowiedz

6

Oooof w końcu po dwóch godzinach> < '!! To miejsce linii klasy locale w oprogramowaniu middleware -.- '!!! ustawić go w ostatnim wierszu tak:

... 
    ... 
    \App\Http\Middleware\VerifyCsrfToken::class, 
     \App\Http\Middleware\Locale::class,   
    ]; 

i wszystko jest w porządku i działa! dzięki dla was wszystkich :))))

+0

Mam ten sam problem. Miejsce na linii było dla mnie jednym z pierwszych przedmiotów, ale to jeszcze nie działa! – ivahidmontazer

2

Jedynym rozwiązaniem, które znalazłem został ustawiony locale w metodzie konstruktora oprogramowanie pośredniczące, tak:

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Foundation\Application; 
use Illuminate\Http\Request; 

class Localization 
{ 

    protected $app; 

    public function __construct(Application $app, Request $request) 
    { 
     if($locale = $request->header('Content-Language')){ 
      if(in_array($locale, ['en', 'fa'])){ 
       $app->setLocale($locale); 
      } 
     } 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     return $next($request); 
    } 
} 

Z ♥♥♥ i ponad 2 godziny próbują!

0

Dzięki,

:) Miałem ten sam problem i roztwór middleware umieścić w pliku App \ HTTP \ Kernel.php w sekcji protected $ middleware = []

\App\Http\Middleware\VerifyCsrfToken::class, 
    \App\Http\Middleware\myNewMiddleware::class,   
]; 
+1

... jak odpowiedział rok temu. Nie duplikuj odpowiedzi tutaj. –

Powiązane problemy