Laravel6.0:Bladeの基本・ロケール・多言語対応/Windows102019-10-17はじめてLaravel6.0:Bladeの基本・ロケール・多言語対応/Windows10Web:はじめてLaravel6.0(PHP)Bladeテンプレート構文の基本的な使い方・ロケール設定・項目名やメッセージなどの日本語化あたりを整理していきます。題材に、Laravel6.0のコマンドで生成した認証機能の各画面のソースを使います。はじめに機能を動かしながらソースを読みこんでいくのが、Laravel6.0フレームワークの基本を理解する手っ取り速い方法です。前回生成した「認証機能」は格好のサンプルなので、このソースを見ていきます。arakan-pgm-ai.hatenablog.com今回は特に以下に重点をおいてみていきます。多言語化の方法それで、最終的に英語メッセージを日本語化したり、共通テンプレートの背景色とかをちょっと変更してみるとか、やってみます。ユーザインタフェース部分Bladeテンプレートを使っています。その記述のポイントを見ていきます。共通レイアウトテンプレートの継承bladeテンプレートは拡張子「.blade.php」のファイルです。「resources\views\auth」の下にある「.blade.php」ファイルを見ていきます。実際のソースを見ると、resources\views\authフォルダの下の各ソースコードは、同じ構造になってます。@extends('layouts.app')@section('content')※ここにHTMLなどが書かれている@endsectionみたいな感じでディレクティブに囲まれています。@extends('layouts.app')の「layouts.app」で、共通レイアウトである「views\layouts\app.blade.php」ファイルを読み込んでます。class="py-4">@yield('content')</main>という部分があります。・・「'content'」という名前で個別ファイルで定義された「@section~@endsection」の部分が、この@yieldの部分に挿入されるわけなんですね。続けて「resources\views\auth」の下にある「.blade.php」ファイルを見ていきます。bladeテンプレートの構文は、こちらに詳しく書かれてますので、そこから関係あるところを拾い読み的にやっていきます。}}」で囲まれた記述です。Bladeビューに渡されたデータを表示する記法」です。セキュリティも考慮されてます。}}文はXSS攻撃を防ぐために、PHPのhtmlspecialchars関数を自動的に通されます。見ていくと、認証機能の「.blade.php」ファイルには同じ{{}}構文でも、5通りくらいのパターンがありました。}}」は多言語対応構文です。'Login'に対応する日本語辞書を用意すれば、「ログイン」などと日本語表示できる書き方です。}}」が一番シンプルな「変数の内容」を表示するものです。三番目の書き方は、<inputタグの中とかで、バリデーションにはじかれた場合に、直前の入力の内容を復元するold関数を使った構文です。四番目は「config」フォルダのファイルから値をとってくる構文です。上記だと「config\app.php」内の「name」の値を表示し、なければ初期値の「Laravel」を表示する・・という意味です。五番目の「asset」というのは、publicフォルダのパスを返します。}}のように取得すれば良いというわけです。テンプレートの@xxディレクティブ今度は「@」ではじまる構文です。@endguestです。これらは、Bladeの制御構文です。@endif・・は、まあ見たらわかりますね。@enderrorは、これに囲まれている部分が「バリデーションエラーがあった場合」のみ実行されます。@csrfは「隠しCSRFトークンフィールドを生成する」ディレクティブです。これを置くと、CSRF保護ミドルウェアがリクエストを検査できるようになります。@endguestは、「ユーザが認証されていない」場合に囲まれている部分を実行します。制御構文はたくさんあって、今回のソースコードに登場していないものなども、こちらのガイドの「制御構文」のところを見ればすべて書いてあります。エラーメッセージを出力できることはわかった。「$message」という変数はどこでセットされているのか?答えはこちらに書いてありました。関係しそうな部分を抜粋していきます。readouble.comコントローラクラスの中でルールを指定する方法で、バリデーションします。@enderror」ディレクティブで拾うことができて、その内部で「$message」にセットされたエラーメッセージを表示できる・・と書いてあります。$messageの内容は、Laravelのバリデーション機構で、暗黙的にセットされいると考えるとスッキリします。バリデーションルールの指定方法app\Http\Controllers\Authフォルダにコントローラクラスがあります。いくつかファイルがありますが、例としてユーザ登録画面「RegisterController.php」を見てみます。この中に画面の各項目に対応するバリデーションルールが設定されています。やって、対応する項目にルールを紐づけるだけでいいんですね。それだけで、そのルール名に紐づいたバリデーションロジックが動いて、エラーがあれば$messageにメッセージがセットされる。実にスッキリしています。指定可能なバリデーションルールも標準で沢山用意されていますし、今回はしませんけど、オリジナルバリデーションも作れます。以下のページの最後の方に「指定可能なバリデーションルール」が書いてあります。'confirmed'],」のところを見ると。required':必須入力チェック'string':文字列であるかチェック'min:8':8文字以上であるかチェック'confirmed:フィールドがそのフィールド名+_confirmationフィールドと同じ値であるかチェックとあります。confirmedとか、2つのフィールドの比較まで、ルールでできるのはスマートですね。ロケールのデフォルトは英語圏のままなので変更しておくartisanコマンドで生成しただけだと、英語で項目名もメッセージも表示されます。ロケールはどうなっているのかな?そう思い「config\app.php」を見ていると、やはり英語圏のままでした。timezoneは「UTC」だし、localeは「en」だし・・。日本語表示とか日付・時刻処理に影響があるので、app.phpの該当箇所を以下のように変更しときます。'ja_JP',保存したら、configの変更を反映させるため以下のコマンドを実行します。config:cacheこれでロケールの変更が反映します。日本語用の辞書を用意するロケールを変更しただけだと、やっぱり表示は英語です。そりゃあ、そうですね。多言語化対応のためには日本語の辞書が必要です。多言語化のやり方はこちらに書いてあります。readouble.comやり方はおおまかに2通りです。}}等の翻訳文字列をキーとする翻訳ファイルは、resources/langフォルダ下にJSONファイルとして保存します。ファイル名はロケールに対応した名前です。'ja',」と設定しているので、ファイル名は「ja.json」です。「resources/lang/ja.json」ファイルに翻訳文を書きます。バリデーションのエラーメッセージ等の翻訳ファイル初期状態だと、「resources\lang\」フォルダに「en」フォルダがあります。その下にあるphpファイルの中に、キーとメッセージが定義されてます。required.',つまり。これを日本語辞書とするには・・。'これは必須入力です。',みたいに、キーに対応する日本語を書いたファイルを作ればいいわけです。その置き場所はロケールに対応した「ja」フォルダにします。「resources\lang\en」フォルダ毎ファイルをコピーして、フォルダ名を「ja」にリネームします。以下の各ファイルの右側のメッセージ部分を日本語に翻訳すれば良いのですが、翻訳は手間です。日本語化したファイルを既に作ってくださっている方がいました。github.com今回は、有難く使わせていただきます。上記サイトから、ファイルをダウンロードして解凍し、「resources\lang」にコピーさせてもらうことにします。最後にちょっとだけ背景色の変更ここまでで確認は終わって、ちょっとおまけで背景色変更をしてみます。背景色が白一色というのが、どうも見づらいので、共通ヘダーだけでは色をつけておきたいと思ったからです。「resources\views\layouts」フォルダの「app.blade.php」(共通レイアウト)の24行目あたりの<navbar>を以下のようにします。bg-primary」を設定しただけですけどね。実行してみます今回、ここまで変更したことが、正しく反映するかを実行して確認します。実行には、ビルトインサーバーを使います。日本語化とヘダーの背景色変更はできてます。エラーメッセージはどうかな?いけてますね。今回はこんなところで。検索スポンサーリンク最近のアクセスTOP5ブクマ数TOP3IT的なTIPS・ノウハウイベントログから抽出したログオン・オフ時刻を見やすいように整形するEXCELのVBAマクロなど。Google検索は利用するけど、アクティビティを保存させたくない時もある文字コードで悩まされるなんて久しぶり/JIS7(ISO-2022-JP)とJIS8の話もっと見る作業時によく参照する「まとめ」djangoテンプレート内でforループで回す時の整理とデフォルト辞書利用時の注意など。djangoテンプレート内ので条件分岐(IF文)で注意することなどをまとめておくdjangoテンプレート/変数の値の参照の仕方が、Pythonと違う所があるので整理しておく。service」とサーバーレスコンピューティング関係をまとめてみる。PWA・SPA・・など「最近のWEBアプリケーションの種類」をざっくりまとめる。文系的まとめディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。Consoleもっと見るディープラーニングのデモをやってみるWord2Vecで「単語の足し算・引き算の結果(単語)を取得する」デモをやってみる。API」で入力文の疑わしい部分をAIが指摘するデモを作る。classで事前学習済のVGG16モデルを使った画像識別クラス/tensorflow2.0(tf.keras)ランダムフォレストで回帰してみる/気象情報と電力データその2もっと見るPythonでWebアプリやってみるviews.py(python)からデータを渡して、Chart.jsでRaderチャートを描く/Chart.js+djangoWEBブラウザ上にドラッグ&ドロップした画像ファイルをBase64に変換して表示するWEBブラウザで手描きしたイメージをJPEG・PNG変換後Base64エンコードするもっと見るPythonで自動化やってみるWebアプリケーションで自動的に値を参照、スクロール他Tips/Selenium&pythonWebアプリケーションで自動的に何かをクリックするTips/Selenium&pythonWebアプリケーションへの自動入力・選択のTipsあれこれ/Selenium&pythonもっと見るPythonで数学・グラフィックスやってみるモンティ・ホール問題で、ちょっと暇つぶし。最近、台風が怖すぎる!!!生産性向上しろと言いながら、片方で足をひっぱるなんて・・と呆れてます。/軽減税率のニュースを見てもっと見るBOKU62歳の文系SE”BOKU”です。<arakan_no_boku@yahoo.co.jp>興味の向いたものを、つまみ食い的に勉強してます。自分が消化した内容を、頭の整理と備忘を兼ねてブログに書いてます。IT系・・特に機械学習・プログラムネタが中心ですが、IT以外のネタになる時もあります。(43)スポンサーリンクはてなブログをはじめよう!arakan_no_bokuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。