検索エンジン(まぁGoogleなんだけど)って、ひとつのURIに対してひとつの言語にしか対応してないんですね。
そんなわけで、単純に内部で言語を切り替えただけではクロールされる言語がひとつになってしまい、問題になってきます。
そこで、多言語に対応したサイトの作り方をメモとして書いておく。
有名なウェブサイトはどうなっている?
多言語化に対応しているウェブサイトなんて沢山あるわけなんだけど、どうやって対応させるかを調査。
Googleの場合、ドメイン自体が
www.google.com
www.google.co.jp
と2つあり、www.google.com/intl/ja/ と www.google.co.jp がほとんど同じような内容で日本語対応コンテンツとなっている。
つまり、 /intl/ja/ の部分が多言語化に対応させた部分。
Skype
Skypeの場合はドメインは www.skype.com のみ。
そして、日本語対応コンテンツは www.skype.com/intl/ja/welcomeback/ 。welcomebackを削ってもリダイレクトされるので、Googleと同じく
/intl/ja/ の部分が多言語化に対応させた部分。
2つの事例しか見てないけど、/intl/ja/ のように階層を切って多言語化させるのがよさそう(何より、Googleがやってるんだから、間違いないでしょ!)。
どうでもいい話
intl って今までイニシャライズ(initialize:初期化)の略で、スタートページだから初期化なんだよって勘違いしてた ><
これって、インターナショナライゼーション(internatinalization:国際化)の略なんですね。
CodeIgniterでの実装例
内部での言語切り替えが済んでる人は飛ばしてください。
僕のやり方なので、多分はずれたやり方だと思うw
前提:内部の国際化対応
// 国際化 if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ereg('ja', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $config['language'] = 'japanese'; $config['language_min'] = 'ja'; }else{ $config['language'] = 'english'; $config['language_min'] = 'en'; }
こんな形で設定ファイル内でブラウザの HTTP_ACCEPT_LANGUAGE を読み取って、言語を設定。
$this->lang->load('index', $this->config->item('language'));
コントローラー内で言語ファイルの読み込み。
<img src="hogehoge_<?=$this->config->item('language_min')?>.gif" alt="<?=$this->lang->line('index_hogehoge')?>" />
ビューでは、前で設定した言語略称(language_min)を利用したファイル名の切り分けや言語ファイルでのテキスト行の読み込みを行います。
言語ファイルは、 /application/language/【言語名】/【言語ファイル名】_lang.php みたいな形で言語の数だけ作成します。
これだけだと、URIはひとつなので、次にroutes.phpを使った切り替え。
routes.phpを使った言語の切り替え
$route['intl/([a-z]{2})'] = "【class】/【function】/$1";
毎度便利なroutes.php。こんだけでok。
functionはデフォルトコントローラーを使って、
function index($language = "") { // 設定 switch ($language){ case 'ja': $this->config->set_item('language', 'japanese'); $this->config->set_item('language_min', 'ja'); break; case 'en': $this->config->set_item('language', 'english'); $this->config->set_item('language_min', 'en'); break; } $this->lang->load('index', $this->config->item('language'));
みたいに、設定をコントローラーで強制的に上書きしちゃえばいいんじゃないかな。
最後に、
手動でも言語を切り替えできるようなリンクをビューに用意してあげて、あとは検索エンジンにうまくクロールされるのを待つだけ。
でも、ソーシャルブックマークのリンクの固定リンクをどこに設定するとか、ルートURLの言語は何にするとかは悩むところですね。