軽量高速なPHPフレームワーク。動作条件がCodeIgniter3ならPHP5.6、CodeIgniter4ならPHP7.3なので少し前のサーバ環境でも問題なく動作します。

フレームワーク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