様々なクラス⑦:ロケールと数値・通貨クラス
ソフトウェアの国際化
ロケールとは
言語や国が異なれば、数値の記法・通貨記号・日付の表示形式なども異なります。このような国や言語ごとの表記規則をまとめたものをロケールと言います。JavaではLocaleクラス(java.utilパッケージ)でロケールを扱います。
Localeクラスはプログラムを実行している環境のロケールを識別し、言語や国に応じた表示に切り替えることができます。
Localeクラス
サンプルプログラム
SampleClass01.java
package class7;
import java.util.*;
public class SampleClass01 {
public static void main(String[] args) {
Locale jp = new Locale("ja","JP");
Locale us = new Locale("en","US");
Locale ch = new Locale("zh","CN");
System.out.println("日本のロケール 言語 : "
+ jp.getDisplayLanguage() + " 国名 : " + jp.getDisplayCountry());
System.out.println("アメリカのロケール 言語 : "
+ us.getDisplayLanguage() + " 国名 :" + us.getDisplayCountry());
System.out.println("中国のロケール 言語 : "
+ ch.getDisplayLanguage() + " 国名 : " + ch.getDisplayCountry());
}
}
日本のロケール 言語 : 日本語 国名 : 日本
アメリカのロケール 言語 : 英語 国名 :アメリカ合衆国
中国のロケール 言語 : 中国語 国名 : 中華人民共和国
アメリカのロケール 言語 : 英語 国名 :アメリカ合衆国
中国のロケール 言語 : 中国語 国名 : 中華人民共和国
Localeのコンストラクタには言語コードと国コードを指定します。主な言語コード・国コードは以下のとおりです。
| コード | 言語 |
|---|---|
| ja | 日本語 |
| en | 英語 |
| zh | 中国語 |
| de | ドイツ語 |
| fr | フランス語 |
| コード | 国名 |
|---|---|
| JP | 日本 |
| US | アメリカ合衆国 |
| GB | イギリス |
| CN | 中国 |
| DE | ドイツ |
数値と通貨の表示
NumberFormatクラス
NumberFormatクラス(java.textパッケージ)を使うと、ロケールに応じた数値・通貨の表示形式を取得できます。getInstance()で数値フォーマット、getCurrencyInstance()で通貨フォーマットのインスタンスが得られます。
SampleClass02.java
package class7;
import java.util.*;
import java.text.*;
public class SampleClass02 {
public static void main(String[] args) {
int number = 12300;
Locale jp = new Locale("ja","JP");
Locale us = new Locale("en","US");
Locale de = new Locale("de","DE");
NumberFormat nfJapan1 = NumberFormat.getInstance(jp);
NumberFormat nfJapan2 = NumberFormat.getCurrencyInstance(jp);
NumberFormat nfUsa1 = NumberFormat.getInstance(us);
NumberFormat nfUsa2 = NumberFormat.getCurrencyInstance(us);
NumberFormat nfFrance1 = NumberFormat.getInstance(de);
NumberFormat nfFrance2 = NumberFormat.getCurrencyInstance(de);
System.out.println(jp.getDisplayCountry());
System.out.println("数値 : " + nfJapan1.format(number));
System.out.println("通貨 : " + nfJapan2.format(number));
System.out.println();
System.out.println(us.getDisplayCountry());
System.out.println("数値 : " + nfUsa1.format(number));
System.out.println("通貨 : " + nfUsa2.format(number));
System.out.println();
System.out.println(de.getDisplayCountry());
System.out.println("数値 : " + nfFrance1.format(number));
System.out.println("通貨 : " + nfFrance2.format(number));
}
}
日本
数値 : 12,300
通貨 : ¥12,300
アメリカ合衆国
数値 : 12,300
通貨 : $12,300.00
ドイツ
数値 : 12.300
通貨 : 12.300,00 €
数値 : 12,300
通貨 : ¥12,300
アメリカ合衆国
数値 : 12,300
通貨 : $12,300.00
ドイツ
数値 : 12.300
通貨 : 12.300,00 €
同じ数値でも、日本(カンマ区切り・円記号)、アメリカ(カンマ区切り・ドル記号)、ドイツ(ピリオド区切り・ユーロ記号)と、ロケールによって表示形式が異なることがわかります。format()メソッドで数値をロケールに合わせた文字列に変換しています。
なお、Localeクラスはこの他にも、カレンダーを表すCalendarクラスや日付を表すDateFormatクラスと組み合わせて、地域に応じた日付表示にも活用できます。