LoginSignup
0

More than 5 years have passed since last update.

FuelPHPで、Lang::loadを同一ファイルや同一行に対して複数実行した時の挙動について

Posted at

Fuelphp1.7で動作確認。
公式ドキュメントにも記載がなく、変なところで詰まったので備忘録として。

対象となるモジュール

Lang - クラス - FuelPHP ドキュメント

複数回の読み込み

読み込み用の言語ファイルを作成。configで言語をjaに設定済みであると仮定し、言語ファイルを用意。

app/lang/ja/hoge.php
return array(
            'text1' => 'テキスト1',
            'text2' => 'テキスト2',
            'text3' => 'テキスト3'
       );

このファイルを複数回読み込む。
controllerでなくとも、任意の場所で実行可能。

app/classes/controller/index.php
    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つ用意する。

app/lang/ja/hoge1.php
return array(
            'text1' => 'テキスト1',
            'text2' => 'テキスト2',
            'text3' => 'テキスト3'
       );
app/lang/ja/hoge2.php
return array(
            'text1' => 'テキスト4',
            'text2' => 'テキスト5',
            'text3' => 'テキスト6'
       );

これらを交互に読み込み、上書き処理がどうなるか確認してみる。

app/classes/controller/index.php
    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"
    }

初回の言語ファイル読み込みの時には、同一行がセット済みでも上書きが実行される。
しかし読み込み済みの場合再度は読み込まれないため、上書きが実行されない。

同じ行(キー)の上書きをすると挙動が分かりにくくなるため、
最初から上書きが発生しないような設計にするのが最善っぽい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0