【问题标题】:Laravel localization in 404 page404页面中的Laravel本地化
【发布时间】:2016-11-15 01:12:52
【问题描述】:

您好,我有一个关于 laravel 本地化的问题

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

我的中间件代码

<?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 页面都以当前选择的语言显示内容?

【问题讨论】:

    标签: php laravel localization


    【解决方案1】:

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

    app\Exceptions\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);
    }
    

    【讨论】:

    • 我已经尝试过了,但它对我不起作用,我不知道为什么编辑:通过使用解密()到 cookie 来修复它
    【解决方案2】:

    在@ArthurSamarcos 的帮助下修复了它

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

    【讨论】:

    • 请注意,在尝试解密之前,您应该检查 cookie 长度(例如我的解密时是 2 个字符),因为有时它会返回已经解密的 cookie。
    猜你喜欢
    • 2020-05-17
    • 2020-09-22
    • 2022-11-17
    • 2017-11-22
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多