Javaのリソースデータ (4)
今回は、リソースバンドルに関連して、ロケールついて書きます。
前回: id:simply-k:20100721:1279748122
次回: id:simply-k:20100728:1280297651
目次: id:simply-k:20100728:1280299110
ロケールの概要
Localeクラス
Localeクラスのオブジェクトは、次の3つの項目を保持する。
- 言語コード
ISO-639で定義される、2桁の小文字 (ja、enなど) - 国コード
ISO-3166で定義される、2桁の大文字 (JP、USなど) - バリアント
ベンダーまたはブラウザに固有のコード (WIN、MAC、POSIXなど) *1
Localeクラスでは、一部の言語や国に対して、次のような定数が定義されている。
- 言語を表す定数 (JAPANESE、ENGLISH、FRENCHなど)
言語コードのみが設定されたLocaleオブジェクト - 国を表す定数 (JAPAN、US、UKなど)
国コードと国に対するデフォルトの言語コードが設定されたLocaleオブジェクト - ルートロケール表す定数 (ROOT)
言語コード、国コード、バリアントが、全てブランクに設定されたLocaleオブジェクト
Locale#toString()は、言語コード、国コード、バリアントをアンダースコア(_)でつないだ文字列を返す。
デフォルトロケールの取得と設定に関するサンプルコード
サンプルコード
import java.util.Properties; import java.util.Locale; public class Main { public static void main(String[] args) { printSystemPropsLocale("System#getProperties() [1]"); printDefaultLocale("Locale#getDefault() [1]"); Locale.setDefault(Locale.US); //デフォルトロケールの変更 printSystemPropsLocale("System#getProperties() [2]"); printDefaultLocale("Locale#getDefault() [2]"); } //システムプロパティから取得した言語コード、国コード、バリアントを出力する。 public static void printSystemPropsLocale(String testName) { final Properties props = System.getProperties(); System.out.println(testName); System.out.println("language: " + props.getProperty("user.language")); System.out.println("country: " + props.getProperty("user.country")); System.out.println("variant: " + props.getProperty("user.variant")); System.out.println(); } //デフォルトロケールから取得した言語コード、国コード、バリアントを出力する。 public static void printDefaultLocale(String testName) { final Locale locale = Locale.getDefault(); System.out.println(testName); System.out.println("language: " + locale.getLanguage()); System.out.println("country: " + locale.getCountry()); System.out.println("variant: " + locale.getVariant()); System.out.println(); } }
実行結果 (日本語環境で実行した場合)
System#getProperties() [1] language: ja country: JP variant: Locale#getDefault() [1] language: ja country: JP variant: System#getProperties() [2] language: ja country: JP variant: Locale#getDefault() [2] language: en country: US variant:
次の事が確認できた。
- Locale#setDefault()により、Locale#getDefault()が返すデフォルトロケールが変更された。
- Locale#setDefault()を使っても、System#getProperties()が返す値は変更されない。
前回: id:simply-k:20100721:1279748122
次回: id:simply-k:20100728:1280297651
目次: id:simply-k:20100728:1280299110