シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP]言語切り替え用のルーティングを設定する

最近多言語対応のシステムを作ることが多いのでメモ。

サブドメインで言語を切り替える

http://ja.example.comのようにサブドメイン部分を言語コードとして利用する場合は、AppControllerのbeforeFilterなどで

// AppController::beforeFilter
$httpHost = env('HTTP_HOST');
preg_match('/([a-z]{2}\.)?.*/', FULL_BASE_URL, $match);
Configure::write('Config.language', $match[1]);

サブディレクトリで言語を切り替える

http://example.com/jaのようにサブディレクトリの1階層目を言語コードとして利用する場合は、Config/routes.phpで

// Config/routes.php
// localeというnameパラメータを定義する(リバースルーティングを効かせるため)
Router::connectNamed(array('locale'), array(
	'default' => true,
));
Router::connect('/', array('locale' => 'en', 'controller' => 'contents', 'action' => 'top'));
Router::connect('/:locale', array('controller' => 'contents', 'action' => 'top'));
Router::connect('/:locale/:controller/:action', array(
	'locale' => 'en',
	'action' => 'index',
));
Router::connect('/:locale/:controller/:action/*', array(
	'locale' => 'en',
	'action' => 'index',
));

そして、AppControllerのbeforeFilterで

	 Configure::write('Config.language', $this->request->params['locale'];);

routes.phpの書き方をいまいち理解してなくてこれが最適か自信がないけど意図したとおりには動いてくれています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする