1
0

More than 3 years have passed since last update.

Laravel で HTTPエラー時のメッセージを日本語化する

Posted at

前提

Laravel 6.6で確認しています。

やりたいこと

  • べつに独自のエラーページは作らなくてもいいけど、日本語にしたい。
  • エラーページにちょこっと手を加えたい。
  • FormRequestのauthorizeやGateでの403エラーを日本語にしたい。

手順

1.翻訳ファイルの作成

/resources/lang/の直下に(enjaに入れない)
ja.jsonという名前でjsonファイルを作成します。

2.日本語化

あとは下記のように、日本語のメッセージを書いていきます。

/resources/lang/ja.json
{
    "Unauthorized": "未認証",
    "Forbidden": "許可されていません。",
    "Not Found": "ページが見つかりません。",
    "Page Expired": "有効期限が切れています。",
    "Too Many Requests": "リクエストが頻繁です。",
    "Server Error": "エラーが発生しました。",
    "Service Unavailable": "現在サービスはご利用頂けません。",
}

ただしこれでは、Formrequestauthorizeメソッドがfalseの時や、Gateなどで認可状態でないときに

403 | This action is unauthorized

と出てしまいます。

これは、vendor\laravel\framework\src\Illuminate\Auth\Access\AuthorizationException.php内でエラーが出たときに、メッセージがなかったらこのメッセージにするとべた書きで決まっているためです。

vendor\laravel\framework\src\Illuminate\Auth\Access\AuthorizationException.php
    /**
     * Create a new authorization exception instance.
     *
     * @param  string|null  $message
     * @param  mixed  $code
     * @param  \Exception|null  $previous
     * @return void
     */
    public function __construct($message = null, $code = null, Exception $previous = null)
    {
        parent::__construct($message ?? 'This action is unauthorized.', 0, $previous);

        $this->code = $code ?: 0;
    }

なので、Handlerクラスを修正し、下記のようにエラーが出たら
インスタンスを判別し、403と独自のメッセージを返すようにします。

app\Exceptions\Handler.php
    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($exception instanceof \Illuminate\Auth\Access\AuthorizationException) {
            return abort(403, __('Unauthorized Action'));
        }
        return parent::render($request, $exception);
    }

そして、ja.jsonに追記します。

/resources/lang/ja.json
{
~省略~
    "Unauthorized Action": "許可されていない操作です。"
}

これで日本語化できたと思います。
もし、漏れていても同様にすれば日本語化できるはずです。

エラーページにちょこっと手を加えたい

php artisan vendor:publish --tag=laravel-errors

上記コマンドで、views配下にerrorsが作成され、そこにデフォルトのエラーページも入っているので、よしなに編集します。

ちなみに、https://github.com/caouecs/Laravel-lang で様々な国の翻訳ファイルが公開されています。
今回日本語化したもの以外にも、デフォルトのviewで使用されているものも翻訳されています。

バリデーションエラーや、独自ページ作る系の記事が多いのでそんなに需要ない感じなんですかね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0