WHAT'S NEW?
Loading...
ラベル L10n の投稿を表示しています。 すべての投稿を表示
ラベル L10n の投稿を表示しています。 すべての投稿を表示
言語切替ボタンを付けてみようじゃないか。

最終的にはフリーな国旗アイコンなどをゲットして、好きなレイアウトにすれば良い話なので、とりあえず全部テキストでやっていく予定。

完全にどのページからでもいつでも言語を切り替えられるのかと言われれば、「正解です」といえる様な処理なんだけど、ページネータなどのnamedパラメータが絡むテストはしていないので予めご了承していただきたい。
何事もそうだけど、「この処理は完全に全ページで正しく動くのか?」とか「1箇所でも挙動が怪しい場合は実装するな!」とか、そんな予測コストなんかはっきりいって犬が喰えば良い

なんかあった時のことを考えつつも、「こうなる可能性もあるが、ここはひとまずこう実装しておく」という、対応コストで作っておかないと、あなたは何時まで経っても自宅に帰れなくなる

そして「そんな事いってもそういう仕組で仕事が進んでいるんだからしょうがないじゃないか」と言う人がいるかも知れないが、それはそういう星の下に生まれたことを己が悔やむしかない。そしてもっと良い会社に転職できることを(俺は本当に)切に願う。

大企業のクソフローなんか無視してなンぼ。
というわけでひとまず、新規でCakePHPを構築してみることにする。
  1. CakePHPのダウンロードと設置後、最低限の設定
  2. Dashboardsコントローラ
  3. POファイル作成
  4. 言語を変更
  5. 言語切替処理
  6. リファラを使う
だいたいこういった内容と流れになる予定だ。

当然だがXAMPPなどのLinux詐欺な環境での動作確認は一切してないので、こちらもあわせてご了承いただきたい。あくまで純粋なLAMP環境を前提としている。

もしLinux詐欺をやめて、正しいLinuxを使いたくなった場合、VMwareを使うと良い。
詳しくはこちらを参照されたし。

さて早速取り掛かろう。

■CakePHPのダウンロードと設置後、最低限の設定

今回は会えて1.2を使う。というのも、1.3は1.2と比べると変更点が多く、まだ俺自身調査しきれていないからだ。

世の中には便利な本もある。『Pocket詳解 CakePHP辞典』だ。
俺はまだこの本は手に入れて無い。しかしこの本は正直欲しい。そのうち買う。

マロはどうしても1.3じゃなきゃイヤじゃ!的なわがままちゃんは、こういった優れた書籍をゲットし、己で修行していただければと思う。

さて、CakePHPの1.2.8をダウンロードしたとして、Apacheの設定も終え、早速初期設定といこうじゃないか。

まずは余計なファイルの削除と、最低限の設定。

日本人は日本人の為だけに日本語のみを用意するのが好きであるし、それ自体が文化でもある。
俺はこういった日本の文化を、最高にくだらない低レベルなクソ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-USq=0.8
enq=0.6

さらに分かりやすく、テーブルヘッダを入れてみるとこうなる。

言語名品質値
ja
en-USq=0.8
enq=0.6

そしてさらに表示された順序も加えると、

順序言語名品質値
1ja
2en-USq=0.8
3enq=0.6

となる。

これが何を意味するのかというと、実はただ単純にブラウザに対して表示させる言語の優先度を順位を元にして設定しているというだけのこと。

jaの場合は品質値がないが、これは自動的に1という数値が割り当てられているようだ。

品質値の浮動小数点は、実はこれも優先順位をあわらしている。

試しにChromeの設定を変更し、
  1. 日本語
  2. 英語(アメリカ合衆国)
  3. 英語
の英語部分を入れ替えてみて
  1. 日本語
  2. 英語
  3. 英語(アメリカ合衆国)
にした場合、先程のスクリプトの実行結果は
ja,en-US;q=0.8,en;q=0.6
から
ja,en;q=0.8,en-US;q=0.6
に変わる。

大体ご理解いただけただろうか。

昨日CakePHP1.3の挙動を調べていたんだけど、何がやりたいかというと、実は英語、中国語、韓国語、日本語のSNSを作る事になっているので、完全に国際化をさせないといけない。

今まではCakePHP1.2を長い間使っていたけど、バーチャルフィールドに惹かれてCakePHP1.3を使うことにした。

CakePHP1.3ではapp/libsというディレクトリが増えていて、知人が言うには「何でもいれると良いよ!(MASA-Pさん)」とのことなので、何でもいいからいれてみることにした。

何を入れるかというと、まずはマスタ系の文字列を格納しておきたい。
というのも、1年ほど前、データベースでi18n対応したとき、あまりの面倒くささと手際の悪さで、__()関数使ったほうがメンテナンシビリティ高いアルよ!と独断している状態を続けている。

というわけなんだけど、さすがにすべてのリテラル文字列を配列に入れて宣言するのは、いくらなんでもメモリ使いすぎなので、カテゴリ別に関数にしておくことにした。