MinEMemO

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

📝 更新日:2021-02-14 / 📄 作成日:2021-02-14
Hero Image
目次

はじめに

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

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

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

__(”)とは

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

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

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

■config\app.php の locale の設定について

php
'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」から「ユーザ登録」に変更したいと思います。

これを↓
langset before

こうしたい↓
langset after 1

修正手順

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

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

※formは 1 でつけたファイル名
※registerは 1 でつけた1個目のキー
※nameは 1 でつけた2個目のキー
※ . でつないで参照できます

php
  {{ __(‘Register’) }}{{ __(‘form.register.name’) }}
  1. 共通テンプレート resources\views\layouts\app.blade.php 1カ所を以下のように修正
php
  {{ __(‘Register’) }}{{ __(‘form.register.name’) }}
  1. 以上で言語ファイルから参照した値での表示に変更することにできました。

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

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

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

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

修正箇所をまとめて、改修、保守しやすくしておくのは大事ですね。
あと @lang はちゃんと使え。と書いてあるので基本的に __"を使うで良いとは思いました。
profile_icon
taka
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。