国際化プログラミングの常識プログラマーの常識をJavaで身につける(5)(3/3 ページ)

» 2007年05月02日 00時00分 公開
[伊賀敏樹NTTデータ ビジネスブレインズ]
前のページへ 1|2|3       

ResourceBundleクラスの利用例

 これらのプロパティファイルをプログラムで利用すると、以下のようになります。

KotowazaSample.java
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class KotowazaSample {
    public static void main(final String[] args) {
        ResourceBundle bundle = null;
        try {
            bundle
                = ResourceBundle.getBundle("kotowaza"); //(1)

        } catch (MissingResourceException ex) {
            System.out.println("基底名[kotowaza]のリソース"
                + "バンドルの取得を試みましたが失敗しました。:"
                + ex.toString());
            return;
        }

        try {
            final String message
                = bundle.getString("MESSAGE1"); //(2)

            System.out.println("MESSAGE1: " + message);
        } catch (MissingResourceException ex) {
            System.out.println("キー[MESSAGE1]の定義が"
                + "取得できませんでした。:"
                + ex.toString());
        }

        try {
            final String message
                 = bundle.getString("MESSAGE2"); // (3)

            System.out.println("MESSAGE2: " + message);
        } catch (MissingResourceException ex) {
            System.out.println("キー[MESSAGE2]の定義が"
                + "取得できませんでした。:"
                + ex.toString());
        }

        try {
            final String message
                 = bundle.getString("MESSAGE3"); // (4)

            System.out.println("MESSAGE3: " + message);
        } catch (MissingResourceException ex) {
            System.out.println("キー[MESSAGE3]の定義が"
                + "取得できませんでした。:"
                + ex.toString());
        }
    }
}

 (1)の個所で(日本語環境で実行している場合には)kotowaza_ja.propertiesファイルから設定値を読み込みます。そして、(2)、(3)、(4)の個所でキーに対応する文字列を取得します。

実行結果

MESSAGE1: 急がば回れ。

MESSAGE2: 時は金なり。

MESSAGE3: 郷に入いっては郷に従え。


 プロパティファイル化された文字列を利用してプログラムが動作していることが確認できます。

すでに英語も対応しているので、試してみよう!

 さて実は、このプログラムはすでに英語化対応が実現できています。Eclipseからアプリケーションをロケール指定で実行するには、下記の手順を踏みます。

  1. [実行(R)]→[構成および実行(N)]メニューを選ぶ
  2. [引数]タブの[VM引数]にJavaコマンドのオプションを指定
図12 ロケール指定によるアプリケーション起動 図12 ロケール指定によるアプリケーション起動 (クリックすると画像が拡大します)

 ここで、前述のEclipseのロケール指定を行った起動方法と同様の内容を指定すると、ロケール指定を切り替えられます。

ロケールを指定する[java.util.Locale]を使うと……

 次に、強制的に英語ロケールのプロパティファイルを読み込む例を示します。先ほどのソースコードKotowazaSample.javaを以下の桃色太字のように書き換えて実行してください。

KotowazaSample.javaの一部
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class KotowazaSample {
    public static void main(final String[] args) {
        ResourceBundle bundle = null;
        try {
            bundle = ResourceBundle.getBundle("kotowaza"
                , Locale.ENGLISH); // (5)
        } catch (MissingResourceException ex) {
            System.out.println("基底名[kotowaza]のリソース"
                + "バンドルの取得を試みましたが失敗しました。:"
                + ex.toString());
            return;
        }
    }
}

実行結果

MESSAGE1: Slow and steady wins the race.

MESSAGE2: Time is money.

MESSAGE3: When in rome, do as the romans do.


 (5)の個所をご覧ください。Localeクラスを利用して、ロケールを明示的に英語として指定しています。ただし、強制的にロケールを指定することは、通常のプログラムでは、あまり必要がないと考えます。

地域の時差を表す[java.util.TimeZone]

 java.util.Calendarと連動して動作する、時差を表すクラスとしてjava.util.TimeZoneクラスがあります(Calendarについては、前回の記事を参照ください。タイムゾーンに関する記載もあります)。

 いま使っているOSのタイムゾーンを取得するプログラムでTimeZoneクラスの動作を見てみましょう。

TimeZoneSample.java
import java.util.TimeZone;

public class TimeZoneSample {
    public static void main(final String[] args) {
        final TimeZone current = TimeZone.getDefault();
        System.out.println(current.getID());
        System.out.println(current.getDisplayName());
    }
}

実行結果

Asia/Tokyo

日本標準時


 OS上でタイムゾーンが日本として設定されていると、上記のように日本のタイムゾーンになっていることが確認できます。

お金の情報が詰まっている[java.util.Currency]

 通貨も国や地域によって異なるものの1つです。Java APIには、通貨を表すクラスとしてjava.util.Currencyクラスがあります。このクラスを使って、通貨に関する情報を取得できます。

日本の通貨の情報を見てみよう

 日本の通貨の情報を取得するには、(6)のように Localeクラスを併用して記述します。

CurrencySample.java(日本)
import java.util.Currency;
import java.util.Locale;

public class CurrencySample {
    public static void main(final String[] args) {
        final Currency current
            = Currency.getInstance(Locale.JAPAN); // (6)

        System.out.println(current.getSymbol());
        System.out.println("デフォルトの小数点けた数:" +             current.getDefaultFractionDigits());
    }
}

実行結果

\

デフォルトの小数点けた数:0


なんと、米国の通貨には小数点が!

 米国の通貨を取得するには、(7)のように記述します。米国内では、小数点けた数が2けたと取得されることが確認できます。私たち日本の通貨においては、小数点以下は日常生活では利用しないので、あまり見慣れませんね。

CurrencySample.java(米国)
import java.util.Currency;
import java.util.Locale;

public class CurrencySample {
    public static void main(final String[] args) {
        final Currency current
             = Currency.getInstance(Locale.US); // (7)
        System.out.println(current.getSymbol());
        System.out.println("デフォルトの小数点けた数:" +             current.getDefaultFractionDigits());
    }
}

実行結果

USD

デフォルトの小数点けた数:2


フランスの通貨はちゃんとユーロになっている

 同じように、フランスの通貨を取得しましょう。(8)のように記述します。フランスでは、ユーロが利用されているのですね。

CurrencySample.java(フランス)
import java.util.Currency;
import java.util.Locale;

public class CurrencySample {
    public static void main(final String[] args) {
        final Currency current
             = Currency.getInstance(Locale.FRANCE); // (8)
        System.out.println(current.getSymbol());
        System.out.println("デフォルトの小数点けた数:" +             current.getDefaultFractionDigits());
    }
}

実行結果

EUR

デフォルトの小数点けた数:2


 なお、このCurrencyクラスはほとんどのJavaプログラマーは利用したことがないと思います。

次回は、「文字」の常識について

 次回は、「文字」についての常識を取り上げます。java.lang.Stringクラス、java.lang.Characterクラスで学ぶ文字列の概念や操作、パッケージjava.util.regexのクラスで学ぶ正規表現、今回の「国際化プログラミング」にも関係がある、パッケージjava.nio.charsetのクラスで学ぶ文字コードの基礎知識、Javaで使える文字エンコードの種類などについて学んでいきましょう。

筆者紹介

blanco Framework(コミッタ)

伊賀 敏樹(いが としき)
ハンドル:いがぴょん

1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。

ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)

主な著書
やさしく学ぶ基礎からのJDBC
Javaプログラミング[アプリケーション編]ステップアップラーニング



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。