CakePHPで多言語対応をする 【1/3】
日本人は日本人の為だけに日本語のみを用意するのが好きであるし、それ自体が文化でもある。俺はこういった日本の文化を、最高にくだらない低レベルなクソFuckでSuckな文化(略してガラパゴス)だと思っているんだけど、それに気づいたときには時すでに遅し。
なにしろ俺自身、どっぷりそんな日本の完全プロプライエタリ文化に染まりきっていた。
要するに俺もそこらの役所のおえらいさんとかと同じ、クソFuckでSuckなヘタレということである。こりゃたまらんぜ。
というわけで、俺自身が俺に向けて、そんな“実は俺が一番SUCKだった”説から脱却せよと言ってみたい気持ちをそのままストレートに表現するために、そして、仕事で多言語が要求されているのもあわせて、CakePHPで多言語対応をしてみようと思う。
その前にまずは、ブラウザで言語はどのような扱いになっているのかを知っておく必要がある。
まずこんなスクリプトを用意し、ブラウザで実行してみる。
print_r($_SERVER['HTTP_ACCEPT_LANGUAGE']);俺の環境では以下のような結果になった。
Google Chrome 7.0
ja,en-US;q=0.8,en;q=0.6
FireFox 3.6
ja,en-us;q=0.7,en;q=0.3
IE8
ja
Opera 10
ja-JP,ja;q=0.9,en;q=0.8
さて、なんじゃこりゃ、というのが正直な結果だが、よく見ると国名らしき単語と数値が表示されているのがわかる。
実はこれ、カンマで改行し、セミコロンで区切ると分かりやすい。
Chromeを例にとると、このようになる。
ja | |
en-US | q=0.8 |
en | q=0.6 |
さらに分かりやすく、テーブルヘッダを入れてみるとこうなる。
言語名 | 品質値 |
---|---|
ja | |
en-US | q=0.8 |
en | q=0.6 |
そしてさらに表示された順序も加えると、
順序 | 言語名 | 品質値 |
---|---|---|
1 | ja | |
2 | en-US | q=0.8 |
3 | en | q=0.6 |
となる。
これが何を意味するのかというと、実はただ単純にブラウザに対して表示させる言語の優先度を順位を元にして設定しているというだけのこと。
jaの場合は品質値がないが、これは自動的に1という数値が割り当てられているようだ。
品質値の浮動小数点は、実はこれも優先順位をあわらしている。
試しにChromeの設定を変更し、
- 日本語
- 英語(アメリカ合衆国)
- 英語
- 日本語
- 英語
- 英語(アメリカ合衆国)
ja,en-US;q=0.8,en;q=0.6
から
ja,en;q=0.8,en-US;q=0.6
に変わる。
大体ご理解いただけただろうか。