Laravel

【Laravel】Bladeテンプレートの __(”) って何?

Laravel

はじめに

Laravel 絶賛勉強中です(スローペース🐢)

ユーザ登録のテンプレート resources\views\auth\register.blade.php を見てたら、 {{ __(‘Register’) }} なるものを発見👀

なんぞや?となって調べたので、ブログに残しておきます。

__(”)とは

「言語ファイルから翻訳文字列の取得を取得するヘルパ関数」とのこと。

言語ファイルとは resources\lang 配下のファイルのことです。
デフォで en が入っていますが、ja を追加することもできます。

その言語ファイルから、値を取得するための関数ということのようです。
参照する言語ファイルは config\app.php の locale の設定で決まります

■config\app.php の locale の設定について
‘locale’ => ‘en’

‘locale’ => ‘ja’,

をすると ja 配下の言語ファイルを参照します。

■jaファイルは以下のコマンドで一括で追加できます

php -r “copy(‘https://readouble.com/laravel/6.x/ja/install-ja-lang-files.php’, ‘install-ja-lang.php’);”
php -f install-ja-lang.php
php -r “unlink(‘install-ja-lang.php’);”

参考:Laravel 6.x validation.php言語ファイル

修正例

今回はユーザ登録画面のテンプレート resources\views\auth\register.blade.php のボタンの文字を「Register」から「ユーザ登録」に変更したいと思います。

これを↓

こうしたい↓

修正手順

確認した所 {{ __(‘Register’) }} となっている箇所が3カ所あり、表示内容的に共通で問題ないため、すべて修正を行います。

  1. resources\lang\ja に form.php を追加※任意のファイル名でOK
    <?php
    
    return [
    
        /*
        |--------------------------------------------------------------------------
        | 入力フォームに表示する日本語行
        |--------------------------------------------------------------------------
        |
        */
        
        'register'=>[
            'name' => 'ユーザ登録',
        ]   
    ];​
  2. resources\views\auth\register.blade.php で2カ所を以下のように修正。
    ※formは 1 でつけたファイル名
    ※registerは 1 でつけた1個目のキー
    ※nameは 1 でつけた2個目のキー
    ※ . でつないで参照できます

    {{ __(‘Register’) }}

    {{ __(‘form.register.name’) }}

  3. 共通テンプレート resources\views\layouts\app.blade.php 1カ所を以下のように修正

    {{ __(‘Register’) }}

    {{ __(‘form.register.name’) }}

  4. 以上で言語ファイルから参照した値での表示に変更することにできました。

直接テンプレート上で文字で記載してもよいですが、設定ファイルとしてまとめれたり、言語ごとに共通で修正できるので、その点がメリットですね。

■エラー「htmlspecialchars() expects parameter 1 to be string, array given helpers.php」について

例えば{{ __(‘Register’) }}と記載があり、resources\lang\ja 配下に Register.php がある場合にエラーが出ます。

Laravelの翻訳ページを見た感じ、翻訳文字列が存在しない場合はキーをそのまま返しますとのことなので、エラーにならずに Register が返ってくると思いきや違うようなので注意です。

たか
たか

修正箇所をまとめて、改修、保守しやすくしておくのは大事ですね。

あと @lang はちゃんと使え。と書いてあるので基本的に __” を使うで良いとは思いました。