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を参照してください。