PHPフレームワーク【CodeIgniter3】とテンプレートエンジン【Twig】でサイトを多言語化する方法を考えてみます。
日本語版と英語版を作るとして、サイトのURLは一番上のパスで「ja」「en」というふうに分ける
http://foo.bar/ja/class/method/arg1/
http://foo.bar/en/class/method/arg1/
といった構成にしてみます。
application/config/routes.php
内に以下のように記述
$route['([a-z]{2,3})/(.+)/(.+)/(.+)'] = "$2/$3/$4/$1";
(正規表現が使えます。便宜上 .+ としていますが、使用するクラス,メソッド名の命名法則にそって狭めた([a-z]+ など)ほうがいいと思います。)
こうすることで
/ja/myclass/mymethod/aaa
↓
/myclass/mymethod/aaa/ja // 【myclass】クラスの【mymethod】メソッドに引数【('aaa’, 'ja')】でアクセス
に変更されます。
英語の言語ファイル `
application/language/english/mycode_lang.php`
を以下のように作成する
<?php
$lang['helo'] = "Hello ! World !!!";
日本語の言語ファイル `
application/language/japanese/mycode_lang.php`
を以下のように作成する
<?php
$lang['helo'] = "ようこそ! 世界 !!!";
コントローラーのメッソッドの第2引数に「ja」または「en」が渡ってきますのでそこで処理します。
public function mymethod($arg, $lang_flag='ja'){
// 言語データを受け取る
$lang = $this->_set_lang($lang_flag);
print $data['helo'];
}
private function _set_lang($lang_flag='ja'){
if ( strcmp($lang_flag, 'ja')==0 ){
$lang = $this->lang->load('mycode', 'japanese', TRUE);
}
elseif ( strcmp($lang_flag, 'en')==0 ){
$lang = $this->lang->load('mycode', 'english', TRUE);
}
else{
die("_set_lang error : unknown language -> {$lang_flag}");
}
return $lang;
}
これで 「ja」のときは「ようこそ! 世界 !!!」 「en」のときは「Hello ! World !!!」 と表示されるようになります。
参考 : http://goo.gl/ly9JhY