JavaScript国際化プログラミング
ロケール、書式、タイムゾーン

JavaScriptの一般的なプログラミングでの国際化のポイントを以下に挙げます。
.NET AjaxライブラリやjQuery、その他固有のライブラリの情報については各情報リソースを参照ください。
  1. ユーザーロケール(言語と地域)の判定

    ユーザーの使用する言語や住んでいる地域によって、書式やメッセージを切り替えたい場合、そのユーザーのロケール(言語と地域の情報)を取得する必要があります。
    JavaやPHPといった通常のプログラミング言語には、これらの情報を取得する関数がありますが、JavaScriptにはこれらと等価のものはありません
    一般的なJavaScriptのプログラミングでは、ユーザーの使用するブラウザの言語情報から言語を取得します。
    例えば、ユーザーの使っているFirefoxが日本版か英語版かということです。
    この情報は、殆どのブラウザにおいて、設定画面で変えられる言語設定の情報ではないことに注意が必要です。
    以下は、ブラウザの言語情報から言語コードを切り出す簡単なコードです。

    function wwnaviGetLang(){
        return (navigator.userLanguage||navigator.browserLanguage||navigator.language).substr(0,2);
    }
    
    このコードは、日本語版ブラウザを使っているユーザーの言語は日本語ということを意味します。
    OSの言語設定や、サーバーにアクセスする時のHTTPリクエストに入れられる言語情報などは、反映されないことに注意が必要です。

    地域については、上記のコードの2文字目以降にセットされている場合もありますが、保障はありません。
    なお、後述のUTCとの時差によって代表的なものを取得することはできますが、これも正確な判定ではありません。


    *ブラウザの言語設定を反映させたい場合にはjQuery-Browser-Languageという、リモートホストにアクセスし、HTTPリクエストの言語を抽出する(ブラウザの言語設定を認識する)jQueryライブラリがあります。

    以下はそのライブラリを使ったサンプルコードです。
    $.browserLanguage(function( language , acceptHeader ){
        var l  = acceptHeader; l = l.substring(0,2);
        alert(l); // これはHTTPリクエストヘッダーを解析し、
                  // 'en', 'ja'...といったブラウザ言語設定と同じ値を返します。
    });
    
    *jQueryライブラリを使わずに上記の手順を行いたい場合はJSONによる国際化を参照してください。

  2. 日付、通貨などの書式

    JavaやPHPといった主要なプログラミング言語には、ロケールに沿った書式変換をする関数、クラスがありますが、JavaScriptにはそういった関数はありません。
    もし、ユーザーの言語情報などによって書式を切り替えたい場合は、そういった処理を作りこむ必要があります。
    これらを全言語分作成するのは大変ですが、.NET AjaxやjQueryなどのライブラリにはそういった汎用ライブラリが用意されています

    (※jQueryには、日付、通貨などの多言語用ライブラリとしてGlobがあります。)

    例えば、日付や通貨を書式変換して表示している個所は、固定の書式が使われていないか確認し、切り替えの必要がある場合は、上記のようなライブラリを使うことをお勧めします。

    書式については、文字列の書式文化固有の表現も参照してください。


  3. ユーザーのタイムゾーンを取得する

    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に変えれば、
    サーバー側でユーザーの代表的なタイムゾーンも予測できます)
    
    *同じ時差に対応する地域がいくつもあることに注意が必要です。
    実際には、ユーザーが自分の地域を後で設定できるようにする必要があります。



国際化プログラミングトップへ


Copyright (C) 2012 Kokusaika JP, Inc.
本ドキュメントを無断で転載および引用することを禁じます。