Laravel本地化在404页面

时间:2016-07-12 16:55:31

标签: php laravel localization

您好我的laravel本地化问题

我已经制作了语言切换器,当前选择的语言在404页面上不起作用(如果我在控制器中手动返回abort(404)),它总是在config / app.php中定义的默认语言环境中显示内容/ p>

我的中间件代码

<?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;
        }
    }
}

任何想法我怎样才能使这个工作?所有自动显示的404页面都以当前选定的语言显示内容?

2 个答案:

答案 0 :(得分:2)

如果您有默认错误处理,请查找此文件:

应用\例外\ Handler.php

将渲染方法更改为以下内容:

    /**
 * 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);
}

答案 1 :(得分:2)

在@ArthurSamarcos

的帮助下修复了它

应用程序/异常/ 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);
}