国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
2023/12/28
翻訳機能「__()」を使って定数に変数を埋め込む方法
定数は変更できないからこその「定数」なわけですが、CakePHP4でその定数に変数を埋め込むみ、翻訳機能「__()」を使って変数を処理する方法を紹介します。
(CakePHP4と CakePHP3とでは定数の設定方法が少し異なりますが、CakePHP3でも同じような方法で処理をすることができます。)
「国際化と地域化」の翻訳機能である「__()」を使って定数を変換
「国際化と地域化」の翻訳機能である「__()」を利用して、定数の中の変数を埋め込み、それを処理させる方法です。
1 2 3 4 5 |
// 定数の設定 define("TITLE_LIST", "{0}の一覧ページ"); // 翻訳処理 echo __(TITLE_LIST,"東京都"); |
出力は「東京都の一覧ページ」となります。
ちなみに、翻訳機能を使わずに単純に「echo TITLE_LIST;
」とすると、定数に指定されたままの「{0}の一覧ページ」が出力されます。
また、「__()」は翻訳機能ですので、「default.po」などの翻訳ファイルを設置している場合は、翻訳させることもできます。
翻訳機能「__()」で変数を複数処理したい場合
また、複数の変数を処理したい場合は「{0}」「{1}」「{2}」のように数値を増やして記載することで対応が可能です。
1 2 3 4 5 |
// 定数の設定 define("TITLE_LIST", "{0}・{1}の一覧ページ"); // 翻訳処理 echo __(TITLE_LIST,"東京都","千代田区"); |
出力は「東京都・千代田区の一覧ページ」となります。
CakePHP4の翻訳機能、定数の定義方法についての関連記事
CakePHP4で定数についての記事、および、翻訳に関する記事はそれぞれ下記を参照してください。
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
翻訳機能「__()」を使って定数を変換する処理の使いどころ
どういうときに使うか、私の例を参考に紹介します。
例えば、ページタイトルを定数で指定したいとします。
ページタイトルは SEOの対応で重要な要素ですので、定期的に見直しも必要です。
そのため、可能であれば一つの設定ファイルにまとまっている方がメンテナンスの効率がいいため、定数ファイル内に定数として設定したい、と考えたわけです。
そして、ページ構成の中に「都道府県」ごとの一覧画面があるとします。
都道府県ごとに定数を設定する場合
この場合、下記のように都道府県ごとに定数を指定します。
1 2 3 4 5 |
// 定数の設定 define("TITLE_LIST_SAITAMA", "埼玉県の一覧ページ"); define("TITLE_LIST_CHIBA", "千葉県の一覧ページ"); define("TITLE_LIST_TOKYO", "東京都の一覧ページ"); define("TITLE_LIST_KANAGAWA", "神奈川県の一覧ページ"); |
そして、都道府県コードを元にしてタイトルを振り分ける処理になるかと思います。
1 2 3 4 5 6 7 8 9 10 |
// titleへのアサイン if ($prefecture == 11){ $this->assign("title", TITLE_LIST_SAITAMA); } elseif ($prefecture == 12){ $this->assign("title", TITLE_LIST_CHIBA); } elseif ($prefecture == 13){ $this->assign("title", TITLE_LIST_TOKYO); } elseif ($prefecture == 14){ $this->assign("title", TITLE_LIST_KANAGAWA); } |
ただ、これでは、47県分の定数を設定し、47に分岐する if文(もしくは switch文)を記述する必要があり、まったく効率的ではありません。
翻訳機能を使う場合の定数の設定
そこで、翻訳機能である「__()
」を使用します。
これを下記のように翻訳処理を利用することで処理を簡潔にすることができるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 都道府県の配列 $prefectureArray = [ 11 => "埼玉県", 12 => "千葉県", 13 => "東京都", 14 => "神奈川県", ]; // 定数の指定 define("TITLE_LIST", "{0}の一覧ページ"); // 翻訳処理、および、titleへのアサイン $this->assign("title", __( TITLE_LIST, $prefectureArray[13] )); |
「定数の指定」は、定数ファイルに記述します。
「翻訳処理、および、titleへのアサイン」は、各 templateファイルに記述します。
また、「titleへのアサイン」の処理で、「= $this->fetch('title') ?>
」が記述されている箇所に出力されます。
「= $this->fetch('title') ?>
」は、デフォルトでは「/templates/layout/default.php」に記載されています。
CakePHP3のタイトルタグ編集、fetch、asignについての関連記事
主に CakePHP3用の記事ですが、基本的な処理は CakePHP4でも同じですので、titleタグをアサインする方法や、metaタグなどを編集する方法については下記の記事を参照してください。
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP4の関連記事
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法
CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。
-
-
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
PHPでサーバ情報、環境情報を取得する際は「
$_SERVER
」を利用するが、似たような情報をCakePHPの関数で取得する際は「getUri()
」を使用する。取得出来る値は一致するものもあるが、違うものもあり便利な使い方もある。
-
-
getParam('action')
で取得するアクション名は別関数に移動しても不変CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。
-
-
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。
-
-
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。
-
-
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
CakePHP4で開発環境と本番環境とで違う設定ファイルを読み込ませて環境ごとに定数を切り替える方法を解説。Apacheのhttpd.confに環境変数を設定しそれを読み込み判別する。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。
-
-
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
cakephp3 カスタムバリデーションを簡易的に実装する方法
CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。