Java は、I18N と L10N をサポートするようにデザインされており、アプリケーションのローカライズには次のクラスが役立ちます。
java.util.Locale
java.text.DateFormat
java.text.NumberFormat
java.util.ResourceBundle
java.io.InputStreamReader
と java.io.OutputStreamWriter
さらに、サーブレット API には、リクエストとレスポンスのオブジェクトをローカライズに対応させるメソッドがあります。JSP 標準タグライブラリ (JSTL) には、ローカライズされた JSP の開発を容易にするカスタムタグがあります。
このセクションでは、Local オブジェクトと、それが使用する言語コードと国コードの基本を説明します。J2EE でのローカリゼーションサポートの詳細については、 「リソース」 を参照してください。
java.util.Locale
クラスのインスタンスは直接使用されませんが、他のクラスによって使用され、地域情報と言語設定を提供します。次の例に示すように、ロケール情報を使用するクラスの 1 つには DateFormat クラスがあります。
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, new Locale("ja",”JP"));
String date = df.format(new Date());
Local オブジェクトをインスタンス化するときは、次の例のように、言語コードを表わす小文字 2 つと国コードを表わす大文字 2 つを組み合わせて指定します。
java.util.Locale locale = new Locale("ja",”JP");
この例で、ja は言語コードで、JP は国コードです。言語コードと国コードを指定する理由は、一部の国々では複数の公用語が使用されているからです。たとえば、スイスには公用語が 4 つあります。
Java には、次のように、ロケール関連の情報を取得するメソッドが数多くあります。
Locale.getAvailableLocales
Locale.getLanguage
Locale.getCountry
DateFormat.getDateTimeInstance
NumberFormat.getNumberInstance
NumberFormat.getCurrencyInstance
次のコード例は、JVM を実行中のシステムで使用できるロケール情報をリストします。
<%@ page import="java.util.*, java.text.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
...
<% Locale[] availableLocales = Locale.getAvailableLocales(); %> <TABLE> <% for(int i=0; i < availableLocales.length; i++) {%> <tr> <td><%= availableLocales[i].getLanguage() %></td> <td><%= availableLocales[i].getCountry() %></td> <td><% DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, availableLocales[i]); %> <%= df.format(new Date()) %> </td> <td> <% NumberFormat nf = NumberFormat.getNumberInstance(availableLocales[i]); %> <%= nf.format(123456.78) %></td> <td><% nf = NumberFormat.getCurrencyInstance(availableLocales[i]); %><%= nf.format(1234567.89) %></td> </tr> <% } // for() ループの終わり %> </TABLE> ...
言語コードは 2 つの小文字で言語を表し、ISO 639 標準で定義されています。
言語コードのリストについては、http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt をご覧ください。
国コードは 2 つの大文字で国を表し、ISO 3166 標準で定義されています。
国コードのリストについては、http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html をご覧ください。