はじめに
多言語切り替えのアプリケーションの実装にあたり、
こちらを参考にしましたが、既に読み込んでいる言語ファイルについては適用されなかったのと、bootstrap.php
に書いちゃうのがなんともあれだなと思ったので少し改良してみました。
参考記事ではbootstrap.php
のFuel::init('config.php')
の直後に追記していましたが、Coreを読んでみたところFuel::init()
の最後の方でapp_created
イベントを発火させているので、タイミング的にはほぼ同じだと思います。
実装
概要
- アプリケーション初期化後のイベントで言語を切り替える
- Configの設定だけでなく、既に読み込んだ言語ファイルも上書きする
ソース
fuel/app/config/event.php
<?php
return array(
'fuelphp' => array(
'app_created' => function()
{
//change language
if( 1 ){
Config::set('language','en');
Config::set('locale','en_US');
$array = \Config::get('always_load', array());
if (isset($array['language']))
{
foreach ($array['language'] as $lang => $lang_group)
{
\Lang::load((is_int($lang) ? $lang_group : $lang), (is_int($lang) ? true : $lang_group), 'en', true, true);
}
}
}
}
),
);
おわり
この状態で、Configのlanguageにja
が指定されていても強制的にen
に切り替わります。
あとは、切り替えた言語をクッキーにセットするなり、それを判断するなりして切り替えてもらえればいいと思います。