Tweet
|
ユーザーの使用する言語や住んでいる地域によって、書式やメッセージを切り替えたい場合、そのユーザーのロケール(言語と地域の情報)を取得する必要があります。
JavaやPHPといった通常のプログラミング言語には、これらの情報を取得する関数がありますが、JavaScriptにはこれらと等価のものはありません。
一般的なJavaScriptのプログラミングでは、ユーザーの使用するブラウザの言語情報から言語を取得します。
例えば、ユーザーの使っているFirefoxが日本版か英語版かということです。
この情報は、殆どのブラウザにおいて、設定画面で変えられる言語設定の情報ではないことに注意が必要です。
以下は、ブラウザの言語情報から言語コードを切り出す簡単なコードです。
function wwnaviGetLang(){ return (navigator.userLanguage||navigator.browserLanguage||navigator.language).substr(0,2); }このコードは、日本語版ブラウザを使っているユーザーの言語は日本語ということを意味します。
$.browserLanguage(function( language , acceptHeader ){
var l = acceptHeader; l = l.substring(0,2);
alert(l); // これはHTTPリクエストヘッダーを解析し、
// 'en', 'ja'...といったブラウザ言語設定と同じ値を返します。
});
*jQueryライブラリを使わずに上記の手順を行いたい場合は、JSONによる国際化を参照してください。
JavaやPHPといった主要なプログラミング言語には、ロケールに沿った書式変換をする関数、クラスがありますが、JavaScriptにはそういった関数はありません。
もし、ユーザーの言語情報などによって書式を切り替えたい場合は、そういった処理を作りこむ必要があります。
これらを全言語分作成するのは大変ですが、.NET AjaxやjQueryなどのライブラリにはそういった汎用ライブラリが用意されています。
(※jQueryには、日付、通貨などの多言語用ライブラリとしてGlobがあります。)
例えば、日付や通貨を書式変換して表示している個所は、固定の書式が使われていないか確認し、切り替えの必要がある場合は、上記のようなライブラリを使うことをお勧めします。
書式については、文字列の書式や文化固有の表現も参照してください。
JavaScriptには、タイムゾーンを取得する関数はありませんが、UTC(世界標準時間)とクライアントPCの時計の時差を求める関数があります。
これにより、サーバーの共通時間を各クライアントPCの時間に変換するといった処理ができます。
また、UTCとの時差から、代表的なユーザーの地域を特定することができます。
以下は、UTC(世界標準時間)とクライアントPCの時計の時差を時間単位で求めるコードです。
function getTzOff() { var date = new Date(); return tzoff = ( date.getHours() - date.getUTCHours() + 24 ) % 24; }この情報に、下記のような時差と地域の対応表を合わせることで、javaScriptからユーザーの代表的な地域を予想することができます。
0=GB 1=IT 2=FI 3=RU 4=AE 5=PK 6=BD 7=ID 8=PH 9=JP 10=AU 11=NC 12=NZ 13=TO 14=TO 15=US 16=US 17=US 18=US 19=US 20=CL 21=BR 22=BR 23=GL (上記の国コードをタイムゾーンのIDに変えれば、 サーバー側でユーザーの代表的なタイムゾーンも予測できます)*同じ時差に対応する地域がいくつもあることに注意が必要です。