[FuelPHP] メッセージを可変にする方法

メッセージの可変値を指定文字列に置き換える方法


基本的にFuelPHPではLangクラスを使ってメッセージを表示する。

#使用方法

色々と方法はあるけれど、app/lang/ja/message.phpsearch_result_numを読み込みたいときは、

// 言語ファイルの読み込み
Lang::load('message', true);
// 出力
echo Lang::get('message.search_result_num');

みたいな感じでやる。

ただ、単純にこの方法で読み込んだ時はそのまま文字列を引っ張ってくるので柔軟なメッセージを返すことはできない。
message.php (例)

<?php
return array (
  'search_result_num' => '検索結果は●件です',
);

#やりたいこと

「検索結果は●件です」の件数部分を可変にしたい。

#可変値を置き換える

Lang::getするとStringが返ってくるから、それに対して置換する方法もある。
ただ、Lang::getにはそういうものも用意されているので、それを使う。

#方法

まず、言語ファイルの方には以下のように可変値を書く。

<?php
return array (
  'search_result_num' => '検索結果は :num 件です',
);

いつも通り読み込む

Lang::load('message', true);

出力する

echo Lang::get('message.search_result_num', array('num' => '1,200'));
// ⇒ 検索結果は 1,200 件です

Lang::getの第2引数に、対象の可変値と渡す値を配列で指定してやる。

自前でreplaceするより可読性は高いと思う。


一応、ドキュメントのLangクラスのページにも書いてあるけれど、パラメータが渡せることしか書いてなくて分かりづらい。