2016-07-12 10 views
2

私は(404を中止返す場合(これは、コントローラてmanualyで)働くこんにちは私は言語スイッチャー作ったと、現在選択されている言語は404ページ上では動作しませんLaravelローカライズ404ページで

laravelのローカライズに問題があります)、それは常に

<?php 
namespace App\Http\Middleware; 

use Closure; 

class SetLanguageCookie 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if($request->hasCookie('language')) { 
      $cookie = $request->cookie('language'); 
      app()->setLocale($cookie); 

      return $next($request); 
     } else { 
      $response = $next($request); 
      $response->withCookie(cookie()->forever('language', 'en')); 
      return $response; 
     } 
    } 
} 

任意のアイデアはどのように私はこの作業を行うことができます

私のミドルウェア・コードapp.php/configの中で定義されたデフォルトのロケールのコンテンツを示して?したがって、404ページの自動表示されたすべてのコンテンツは現在選択されている言語で表示されますか? Handler.php

\

アプリの\例外

変更するには、このような何かをレンダリングする方法:あなたがデフォルトのエラー処理を持っている場合は

答えて

1

でそれを修正@ArthurSamarcosのヘルプ

app /例外/ Handler.php

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

/** 
* Render an exception into an HTTP response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Exception $e 
* @return \Illuminate\Http\Response 
*/ 
public function render($request, Exception $e) 
{ 
    if($request->hasCookie('language')) { 
     // Get cookie 
     $cookie = $request->cookie('language'); 
     // Check if cookie is already decrypted if not decrypt 
     $cookie = strlen($cookie) > 2 ? decrypt($cookie) : $cookie; 
     // Set locale 
     app()->setLocale($cookie); 
    } 

    if($e instanceof NotFoundHttpException) { 
     return response()->view('errors.404', [], 404); 
    } 

    return parent::render($request, $e); 
} 
+0

共有していただきありがとうございます。 –

+0

解読しようとする前に、解読されたクッキーを返すことがあるので、クッキーの長さを確認する必要があります(例:mineは2文字です)。 – allyfai

1

、このファイルを探し

/** 
* Render an exception into an HTTP response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Exception $e 
* @return \Illuminate\Http\Response 
*/ 
public function render($request, Exception $e) 
{ 

    if($e instanceof NotFoundHttpException) 
    { 
     if(\Request::hasCookie('language')) { 
      $cookie = \Request::cookie('language'); 
      app()->setLocale($cookie); 
      //.... etc 
     } 
    } 

    return parent::render($request, $e); 
} 
+0

Iveはこれを試してみましたが、私のためにはうまくいかず、理由はわかりません EDIT:cookieにdecrypt()を使って修正することができました – allyfai