Fuelphp1.7で動作確認。
公式ドキュメントにも記載がなく、変なところで詰まったので備忘録として。
#対象となるモジュール
#複数回の読み込み
読み込み用の言語ファイルを作成。configで言語をjaに設定済みであると仮定し、言語ファイルを用意。
return array(
'text1' => 'テキスト1',
'text2' => 'テキスト2',
'text3' => 'テキスト3'
);
このファイルを複数回読み込む。
controllerでなくとも、任意の場所で実行可能。
public function action_index(){
$langs = Lang::load('hoge');
var_dump($langs); // array(3) { ["text1"]=> string(13) "テキスト1" ["text2"]=> string(13) "テキスト2" ["text3"]=> string(13) "テキスト3" }
$langs = Lang::load('hoge');
var_dump($langs); // bool(false)
var_dump(Lang::get('text1')); // string(13) "テキスト1"
}
Lang::loadにより言語ファイルの読み込みができるが、
その返り値が初回は読み込んだ配列、2回目以降はfalseとなる。
そのため、返り値で言語テキストデータを取得しようとすると、
別の処理で読み込み済みの場合falseとなる。
Lang::get('text1')
のように、Langクラスから取得する本来の手順が良いと思われる。
#同一行への上書き
では、読み込み済みの言語ファイルに対してLang::loadを行うとfalseとなるのならば、
同一の行(キー)に対する上書き処理はどうなるのか気になり、確認してみる事にする。
言語ファイルを2つ用意する。
return array(
'text1' => 'テキスト1',
'text2' => 'テキスト2',
'text3' => 'テキスト3'
);
return array(
'text1' => 'テキスト4',
'text2' => 'テキスト5',
'text3' => 'テキスト6'
);
これらを交互に読み込み、上書き処理がどうなるか確認してみる。
public function action_index(){
Lang::load('hoge1');
var_dump(Lang::get('text1')); // string(13) "テキスト1"
Lang::load('hoge2');
var_dump(Lang::get('text1')); // string(13) "テキスト4"
Lang::load('hoge1');
var_dump(Lang::get('text1')); // string(13) "テキスト4"
}
初回の言語ファイル読み込みの時には、同一行がセット済みでも上書きが実行される。
しかし読み込み済みの場合再度は読み込まれないため、上書きが実行されない。
同じ行(キー)の上書きをすると挙動が分かりにくくなるため、
最初から上書きが発生しないような設計にするのが最善っぽい。