様々なクラス⑦:ロケールと数値・通貨クラス

国際化対応の基礎を紹介します。LocaleクラスとNumberFormatクラスの使い方を確認します。

クラス 1 2 3 4 5 6 7

様々なクラス⑦:ロケールと数値・通貨クラス

ソフトウェアの国際化

ロケールとは

言語や国が異なれば、数値の記法・通貨記号・日付の表示形式なども異なります。このような国や言語ごとの表記規則をまとめたものをロケールと言います。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のコンストラクタには言語コードと国コードを指定します。主な言語コード・国コードは以下のとおりです。

表7-1:主な言語コード
コード言語
ja日本語
en英語
zh中国語
deドイツ語
frフランス語
表7-2:主な国コード
コード国名
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 €

同じ数値でも、日本(カンマ区切り・円記号)、アメリカ(カンマ区切り・ドル記号)、ドイツ(ピリオド区切り・ユーロ記号)と、ロケールによって表示形式が異なることがわかります。format()メソッドで数値をロケールに合わせた文字列に変換しています。

なお、Localeクラスはこの他にも、カレンダーを表すCalendarクラスや日付を表すDateFormatクラスと組み合わせて、地域に応じた日付表示にも活用できます。