これらのプロパティファイルをプログラムで利用すると、以下のようになります。
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からアプリケーションをロケール指定で実行するには、下記の手順を踏みます。
- [実行(R)]→[構成および実行(N)]メニューを選ぶ
- [引数]タブの[VM引数]にJavaコマンドのオプションを指定
図12 ロケール指定によるアプリケーション起動 (クリックすると画像が拡大します)
ここで、前述のEclipseのロケール指定を行った起動方法と同様の内容を指定すると、ロケール指定を切り替えられます。
次に、強制的に英語ロケールのプロパティファイルを読み込む例を示します。先ほどのソースコード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.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());
}
} |
|
OS上でタイムゾーンが日本として設定されていると、上記のように日本のタイムゾーンになっていることが確認できます。
通貨も国や地域によって異なるものの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());
}
} |
|
米国の通貨を取得するには、(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());
}
} |
|
同じように、フランスの通貨を取得しましょう。(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());
}
} |
|
なお、このCurrencyクラスはほとんどのJavaプログラマーは利用したことがないと思います。
次回は、「文字」についての常識を取り上げます。java.lang.Stringクラス、java.lang.Characterクラスで学ぶ文字列の概念や操作、パッケージjava.util.regexのクラスで学ぶ正規表現、今回の「国際化プログラミング」にも関係がある、パッケージjava.nio.charsetのクラスで学ぶ文字コードの基礎知識、Javaで使える文字エンコードの種類などについて学んでいきましょう。