16:10:44JavaScriptはブラウザによって実行されるクライアント向けスクリプト言語ですが、その国際化の標準的な仕様はありません。ここでは、一般的なポイント、および主要なライブラリを使った国際化について説明します。※jQueyを使わないJSONを使った国際化については、こちらを参照してください。ロケール、書式、タイムゾーンJavaScriptの一般的なプログラミングでの国際化のポイントを以下に挙げます。AjaxライブラリやjQuery、その他固有のライブラリの情報については各情報リソースを参照ください。ユーザーロケール(言語と地域)の判定ユーザーの使用する言語や住んでいる地域によって、書式やメッセージを切り替えたい場合、そのユーザーのロケール(言語と地域の情報)を取得する必要があります。JavaやPHPといった通常のプログラミング言語には、これらの情報を取得する関数がありますが、JavaScriptにはこれらと等価のものはありません。一般的なJavaScriptのプログラミングでは、ユーザーの使用するブラウザの言語情報から言語を取得します。ユーザーの使っているFirefoxが日本版か英語版かということです。この情報は、殆どのブラウザにおいて、設定画面で変えられる言語設定の情報ではないことに注意が必要です。以下は、ブラウザの言語情報から言語コードを切り出す簡単なコードです。(navigator.userLanguage||navigator.browserLanguage||navigator.language).substr(0,2);}このコードは、日本語版ブラウザを使っているユーザーの言語は日本語ということを意味します。OSの言語設定や、サーバーにアクセスする時のHTTPリクエストに入れられる言語情報などは、反映されないことに注意が必要です。地域については、上記のコードの2文字目以降にセットされている場合もありますが、保障はありません。後述のUTCとの時差によって代表的なものを取得することはできますが、これも正確な判定ではありません。*ブラウザの言語設定を反映させたい場合には、jQuery-Browser-Languageという、リモートホストにアクセスし、HTTPリクエストの言語を抽出する(ブラウザの言語設定を認識する)jQueryライブラリがあります。以下はそのライブラリを使ったサンプルコードです。“ja”...といったブラウザ言語設定と同じ値を返します。});日付、通貨などの書式JavaやPHPといった主要なプログラミング言語には、ロケールに沿った書式変換をする関数、クラスがありますが、JavaScriptにはそういった関数はありません。ユーザーの言語情報などによって書式を切り替えたい場合は、そういった処理を作りこむ必要があります。AjaxやjQueryなどのライブラリにはそういった汎用ライブラリが用意されています。(※jQueryには、日付、通貨などの多言語用ライブラリとしてGlobがあります。)例えば、日付や通貨を書式変換して表示している個所は、固定の書式が使われていないか確認し、切り替えの必要がある場合は、上記のようなライブラリを使うことをお勧めします。書式については、文字列の書式や文化固有の表現も参照してください。ユーザーのタイムゾーンを取得するJavaScriptには、タイムゾーンを取得する関数はありませんが、UTC(世界標準時間)とクライアントPCの時計の時差を求める関数があります。これにより、サーバーの共通時間を各クライアントPCの時間に変換するといった処理ができます。UTCとの時差から、代表的なユーザーの地域を特定することができます。以下は、UTC(世界標準時間)とクライアントPCの時計の時差を時間単位で求めるコードです。24;}この情報に、下記のような時差と地域の対応表を合わせることで、javaScriptからユーザーの代表的な地域を予想することができます。0=GB1=IT2=FI3=RU4=AE5=PK6=BD7=ID8=PH9=JP10=AU11=NC12=NZ13=TO14=TO15=US16=US17=US18=US19=US20=CL21=BR22=BR23=GL(上記の国コードをタイムゾーンのIDに変えれば、サーバー側でユーザーの代表的なタイムゾーンも予測できます)*同じ時差に対応する地域がいくつもあることに注意が必要です。実際には、ユーザーが自分の地域を後で設定できるようにする必要があります。jQueryを使った国際化jQieuryのライブラリjquery.i18n.propertiesを使った、Javaプロパティファイル形式でのリソース管理について記述します。リソースファイル(プロパティファイル)の作成JSファイルに埋めこまれている文字列をプロパティファイル(.properties)に記述(外部化)します。メッセージをご参照ください。jQueryライブラリを読み込む必要なJSファイル(jquery.min.js、jquery.i18n.properties.js)を読み込みます。以下の二つの方法があります。呼出し元のHTML全てに埋めこむ必要あり。各JSから動的に読み込む。必要なJSファイルを同期通信(*1)で読み込み、実行しています。(JSのコード)(*1)非同期通信の場合、読み込みが完了する前にコードが実行されるのでうまく処理されません。各JSファイルのコード量が増えますが、呼出し元のHTMLを修正する必要がありません。wwnaviでは自動化を実現するため、デフォルトではこの方法をとっています。上記の読み込みの直後に、プロパティファイルの場所や名前、対象言語などを設定する処理を記述します。jQuery.i18n.properties({name:”wwnaviBundle(*1)”,path:”wwnaviRs(*2)/”,mode:”both”,language:wwnaviGetLang()(*3),callback:function(){}});(*1)プロパティファイルの名前(基底名)です。(*2)プロパティファイルのパスです。(*3)対象の言語コード(“en”や”ja”など)です。この場合、以下のようなブラウザの言語情報を取得する関数を作成して指定しています。(navigator.userLanguage||navigator.browserLanguage||navigator.language).substr(0,2);}*ブラウザ設定の値を使いたい場合は、jQuery-Browser-Languageが使えます。これはリモートホストにアクセスすることで、HTTPリクエストヘッダーを読むことができます。以下はこのライブラリを使った初期化コード(ブラウザの設定を認識可)です。l.substring(0,2);jQuery.i18n.properties({name:”wwnaviBundle”,path:”wwnaviRs/”,mode:”both”,language:l,callback:function(){}});});※ブラウザの言語情報の取得については、ロケール、書式、タイムゾーンをご参照ください。メッセージ読み込み処理を記述する。メッセージ読み込みのコードを文字列の位置に埋めこみます。jQuery.i18n.prop(“sample1_1(*1)”);(*1)1.で作成したプロパティファイルの対応するキーです。.propertiesファイルを配置する。.propertiesファイルを初期化コードで指定したパスに配置します。ファイル名は以下の規則に従います。言語名(例:”ja”)基底名だけのファイルはデフォルトのリソースとなり、対応する言語のものがある場合は、そちらが読み込まれます。以下のように言語分のリソースを追加するだけで、言語を切り替えができるようになります。Navi付属のJavaScriptの文字列の外部化サンプルで確認できます。gettextを使った国際化JavaScriptのgettext、サンプルなどはこちらから入手できます。よるメッセージ処理をご参照ください。Ajaxライブラリについてはをご参照ください。