URLベースで言語の切り替え
1.2系の多言語機能を使って、URLベースで言語の切り替えをするサンプルを書いてみた。
サンプルでは日本語と英語に対応するアプリを作る場合を想定。
app\config\routes.phpに以下の2行を追加。
Router::connect('/ja/:controller/:action/*', array()); Router::connect('/en/:controller/:action/*', array());
AppController(app\controllers\app_controller.php)のbeforeFilterにURLから言語を抜き出してConfigureに書き込む処理を追加。
<?php class AppController extends Controller { function beforeFilter(){ // URLから言語を抜き出す if( !empty($this->params['url']['url']) ){ $urlString = $this->params['url']['url']; // ja,enではじまるかどうか if ( preg_match('/^(?:ja\/|en\/)/i', $urlString, $matches ) ){ $language = rtrim($matches[0], '/'); Configure::write('Config.language', $language); } else { // デフォルトは日本語 Configure::write('Config.language', 'ja'); } } } } ?>
上記で、例えばURLが/ja/posts/indexにアクセスしたら日本語の設定、/en/posts/index/で英語の設定になります。
当然ながら、それぞれの言語の翻訳ファイルも用意する必要があります。
その辺りの話は過去記事http://d.hatena.ne.jp/ngtn/20080228/1204127172を参照してください。