エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法

      2023/12/28

翻訳機能「__()」を使って定数に変数を埋め込む方法

 
定数は変更できないからこその「定数」なわけですが、CakePHP4でその定数に変数を埋め込むみ、翻訳機能「__()」を使って変数を処理する方法を紹介します。
(CakePHP4と CakePHP3とでは定数の設定方法が少し異なりますが、CakePHP3でも同じような方法で処理をすることができます。)
 
 

「国際化と地域化」の翻訳機能である「__()」を使って定数を変換

 
「国際化と地域化」の翻訳機能である「__()」を利用して、定数の中の変数を埋め込み、それを処理させる方法です。
 

// 定数の設定
define("TITLE_LIST", "{0}の一覧ページ");

// 翻訳処理
echo __(TITLE_LIST,"東京都");

 
出力は「東京都の一覧ページ」となります。
 
 
ちなみに、翻訳機能を使わずに単純に「echo TITLE_LIST;」とすると、定数に指定されたままの「{0}の一覧ページ」が出力されます。
 
また、「__()」は翻訳機能ですので、「default.po」などの翻訳ファイルを設置している場合は、翻訳させることもできます。
 
 

翻訳機能「__()」で変数を複数処理したい場合

 
また、複数の変数を処理したい場合は「{0}」「{1}」「{2}」のように数値を増やして記載することで対応が可能です。
 

// 定数の設定
define("TITLE_LIST", "{0}・{1}の一覧ページ");

// 翻訳処理
echo __(TITLE_LIST,"東京都","千代田区");

 
出力は「東京都・千代田区の一覧ページ」となります。
 
 

CakePHP4の翻訳機能、定数の定義方法についての関連記事

 
CakePHP4で定数についての記事、および、翻訳に関する記事はそれぞれ下記を参照してください。
 
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
 
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
 
 

翻訳機能「__()」を使って定数を変換する処理の使いどころ

 
どういうときに使うか、私の例を参考に紹介します。
 
例えば、ページタイトルを定数で指定したいとします。
 
ページタイトルは SEOの対応で重要な要素ですので、定期的に見直しも必要です。
そのため、可能であれば一つの設定ファイルにまとまっている方がメンテナンスの効率がいいため、定数ファイル内に定数として設定したい、と考えたわけです。
 
そして、ページ構成の中に「都道府県」ごとの一覧画面があるとします。
 
 

都道府県ごとに定数を設定する場合

 
この場合、下記のように都道府県ごとに定数を指定します。
 

// 定数の設定
define("TITLE_LIST_SAITAMA",  "埼玉県の一覧ページ");
define("TITLE_LIST_CHIBA",    "千葉県の一覧ページ");
define("TITLE_LIST_TOKYO",    "東京都の一覧ページ");
define("TITLE_LIST_KANAGAWA", "神奈川県の一覧ページ");

 
そして、都道府県コードを元にしてタイトルを振り分ける処理になるかと思います。
 

// 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文)を記述する必要があり、まったく効率的ではありません。
 
 

翻訳機能を使う場合の定数の設定

 
そこで、翻訳機能である「__()」を使用します。
 
これを下記のように翻訳処理を利用することで処理を簡潔にすることができるようになります。
 

// 都道府県の配列
$prefectureArray = [
  11 => "埼玉県",
  12 => "千葉県",
  13 => "東京都",
  14 => "神奈川県",
];

// 定数の指定
define("TITLE_LIST", "{0}の一覧ページ");

// 翻訳処理、および、titleへのアサイン
$this->assign("title", __( TITLE_LIST, $prefectureArray[13] ));

 
「定数の指定」は、定数ファイルに記述します。
「翻訳処理、および、titleへのアサイン」は、各 templateファイルに記述します。
 
また、「titleへのアサイン」の処理で、「fetch('title') ?>」が記述されている箇所に出力されます。
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の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2
CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2

ファイルのアップロード機能の自作サンプルコードとその解説のその2。アップロード機能に関連するファイルの更新や削除の処理や画像、フォルダのパスの指定方法などを含めて解説。

CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法

CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!

CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法

CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。

CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。

CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法

CakePHP4、CakePHP5でクリエビルダーを利用してテーブルからレコードを取得する際、asを使用してカラムの別名で値を取得したい場合の対応方法を解説。また、別名にはハイフンやアスタリスクなど使用できない文字がある点も解説。