[CakePHP]URLベースで言語の切り替え

1.2系の多言語機能を使って、URLベースで言語の切り替えをするサンプルを書いてみた。
サンプルではJapaneseと英語に対応するアプリを作る場合を想定。
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 {
// デフォルトはJapanese
Configure::write('Config.language', 'ja');
}
}

}

}
?>

上記で、例えばURLが/ja/posts/indexにアクセスしたらJapaneseの設定、/en/posts/index/で英語の設定になります。
当然ながら、それぞれの言語の翻訳ファイルも用意する必要があります。
その辺りの話は過去記事1.2系の多言語対応メモ(1) - Writing Some Codeを参照してください。