PHPプログラムに関する各種メモ書き

フレームワークCodeIgniter + Twigでサイトを多言語化する

PHPフレームワーク【CodeIgniter3】とテンプレートエンジン【Twig】でサイトを多言語化する方法を考えてみます。

1. URL設計

日本語版と英語版を作るとして、サイトのURLは一番上のパスで「ja」「en」というふうに分ける

http://foo.bar/ja/class/method/arg1/
http://foo.bar/en/class/method/arg1/

といった構成にしてみます。

2. CodeIgniterのルーティングの設定( routes.php )

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')】でアクセス

に変更されます。

3. 言語ファイル(英語・日本語)の作成

英語の言語ファイル application/language/english/mycode_lang.php を以下のように作成する

<?php
$lang['helo'] = "Hello ! World !!!";

日本語の言語ファイル application/language/japanese/mycode_lang.php を以下のように作成する

<?php
$lang['helo'] = "ようこそ! 世界 !!!";

4. 言語ファイルの読み込みと表示

コントローラーのメッソッドの第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


関連エントリー

No.956
07/06 19:46

edit

CodeIgniter