diaryこの広告は、90日以上更新していないブログに表示しています。2013-01-10Accept-Languageを見て言語別に分けるApacheの多言語化をやってみたのでメモindex.html.jaとかindex.html.enとかでApacheだけで多言語化出来る事は一応知ってたけど、phpとか使わないサイトだけど多言語化はするなんて、今までやった事無かった。使えそうな機会があったので、やってみました。headerを見て、言語別に振り分けるんですが、複数の言語を優先度付きで設定できたりen-USといったロケールのサブセットも指定できるので、ちょっと予想しにくい動きをします。この辺も、色々設定してcurlで確認してみたので書いておきます。いうか、こっちを書きたい。ディレクティブを使った多言語化いまいち、この方法の名前みたいなのが分からないけど、mod_negotiationが主となる方法っぽい。他のmod_mimeやディレクティブは無くてもやる方法もあるみたい*1だけど、今回は全部セットで使います。今回は、基本的に日本語のロケールが指定してあれば日本語を、それ以外は英語になる様に設定しました。2.2この機能については、Apacheドキュメントではこのページが詳しい様子。すると、コンテンツネゴシエーションが、この方法の名前ってことになるのかな?なんかしっくりこないけど。Options=MultiViews今回は.htaccessに設定を出したので、httpd.confのAllowOverrideに設定します。Optionsディレクティブを使う為に。AllだとMultiViewsは上書き可能にならないらしい。+MultiViewsAddLanguageの3行は無くても、大抵はhttpd.confに基本的な設定があるので振り分けはされるけど、あった方が多分意図した振り分けになると思う。本当はen-USやen-GBとかも書いておいた方が良いのかもしれないけど、あまり深追いしたくなかったので、今回は無しにしました。用意したファイルindex.html.jaindex.html.enindex.htmlは置いてません。確認してないけどindex.htmlも置いてあると、多言語化よりもindex.htmlが優先されているようでした。http://example.com基本的にcurlコマンドを使って挙動を確認しました。Accept-Languageに複数のロケールがあり、優先度が不明な場合、LanguagePriorityによって決まる。enもっと下に、httpd.confのこれに関連する部分を抜粋してあります。そのhttpd.confと前述の.htaccessが設定してある状態で考えます。jaとenが指定されているけど優先度が不明。LanguagePriorityではenが最優先なので、index.html.enが出力される。ja-JPとは合致しないとても不便ですが、ロケール*2のサブセットはサブセット無しのものには合致しないようです。書いても、かなり分かりにくいと思うので具体例を書きます。en;q=0.8この例では、AddLanguageがこの2つだけの場合で考えます。.jpという設定が無いので、優先度が0.8のenが選択されて、index.html.enが出力されます。前述のやり方でja-JPやja-JP-macを設定してるのは、この為です。ja-JPこの例でも、AddLanguageがこの2つだけの場合で考えます。.jpという設定が無くLanguagePriorityではenが最優先なのでenが選択されると思いきや、jaが選択されます。ja-Barこんな、あり得ないロケールであっても、ロケールがja系のみしか指定されてないなら、LanguagePriorityに関わらずjaが選択されるみたい。FallbackこれはPreferとFallbackの、2つの場合でLanguagePriorityを使うかどうかを設定します。Fallbackの場合は、どちらの場合でもLanguagePriorityを使います。Prefer優先度の同じロケールが指定されている場合にLanguagePriorityを見て、優先されるロケールを選択する様になる。Choicesが返されます。Fallbackサーバー側で用意してないロケールを指定した場合にLanguagePriorityを見て、優先されるロケールを選択する様になる。Acceptableが返されます。2.2かなり難しい表現だけど、どういうアルゴリズムでロケール*3が選択されるか、解説してあります。Fallbackhttpd.confはこんな感じで、たぶんCentOSでyumで入れたApacheのままになっていると思います。今気がついたけどDefaultLanguageがコメントアウトされたままで、これをちゃんと設定したら、また挙動変わるのかも。Templateを読んで何やってるのかを調べてみた。Templateのソースを眺...2011-01-25CakePHPのl10nとphpのsetlocale()がかみ合わない件setlocale()でロケールを設定する必要が出たので、CakePHPのl10...2011-01-21CakePHPのバグ報告ってどういう手順を踏めばいいんだろう?l10n::get()について。月別アーカイブはてなブログをはじめよう!kanonjiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。