ローカライズ
java.util.Locale
言語や国ごとに異なるものの表記規則を示す。
# 例:単位・記号・日付・通貨など
アプリケーションを使用した国毎に、表示を変えたい場合などにロケールを利用する。
(アプリを使用する国によって文字を日本語・英語と分けたり等)
インスタンス生成方法は主に以下3種類ある。
- new
- Localクラスの定数
- getDefault()メソッド
- IETF言語タグを使用
■ 主なコンストラクタ・メソッド
コンストラクタ | 内容 |
---|---|
Local(String language, String country) | 引数の言語/国コードからオブジェクトを生成 |
// newによるインスタンス生成
// ja・en:言語名コード | JP・US:国名コード
Locale localeJp = new Locale("ja","JP"); // 日本のロケール
Locale localeUs = new Locale("en","US"); // アメリカのロケール
// Localeクラスの定数によるインスタンス生成
Locale localeJp = Locale.JAPAN;
Locale localeUs = Locale.US;
// getDefault()メソッドによるインスタンス生成
// 日本で実行すると日本のLocaleインスタンスが生成される
Locale localeJp = Locale.getDefault();
// IETF言語タグを使用
Locale locale = Locale.forLanguageTag("en-US-x-lvariant-POSIX");
メソッド | 内容 |
---|---|
static getDefault() | デフォルトロケールの現在の値を取得 |
final String getDisplayCountry() | ロケールの国名を返却 |
final String getDisplayLanguage() | ロケールの言語名を返却 |
String getCountry() | ロケールの国名コードを返却 |
String getLanguage() | ロケールの言語名コードを返却 |
// ja_JP が格納される(OSが日本の場合)
Locale locale = Locale.getDefault();
// 日本 が格納される
String country = locale.getDisplayCountry();
// 日本語 が格納される
String language = locale.getDisplayLanguage();
// JP が格納される
String country_code = locale.getCountry();
// ja が格納される
String language_code = locale.getLanguage();
// 備考:他のインスタンス生成方法
Locale locale = new Locale.Builder().setLanguage("ja")
.setRegion("JP")
.setScript("Jpan")
.build();
// setScript():引数はISO 15924 alpha-4スクリプトコード(Javadoc参照)
// build():Locale.Builderのメソッドで、Localオブジェクトを生成
プロパティファイルに記述するキーと値の表記
「キー=値」、「キー:値」
setDefault(Locale newLocale)
Localeのカテゴリを指定して、Localの参照を受け取る。
Locale.setDefault(Locale.JAPANESE);
setDefault(Locale.Category category, Locale newLocale)
Localeのカテゴリを指定して、Localの参照を受け取る。
Locale.setDefault(Locale.Category.FORMAT, Locale.JAPANESE);
Propertiesクラス
listメソッド
引数にjava.io.PrintStream型やjava.io.PrintWriter型の引数を受け取りプロパティファイルの中身を一覧表示する。
// プロパティファイルの値を一覧表示
public class Sample {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.load(new FileReader("db_settings.properties"));
prop.list(System.out);
}
}
値の一覧を表示するコード
// 値の一覧を表示する
Properties prop = new Properties();
prop.load(new FileReader("sample.properties"));
prop.list(System.out);
// 値の一覧を表示する
Set keys = prop.keySet();
for(Object key: keys) {
System.out.println(prop.get(key));
}
// 値の一覧を表示する
prop.forEach((k, v) -> System.out.println(v));
キーを取り出す
public class Sample {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.load(new FileReader("sample.properties"));
String value = prop.getProperty("key");
System.out.println(value);
}
}
native2ascii input.properties output.properties
ISO-8859-1
UTF-8
デフォルトのロケール情報が「ja_jp」の環境でプロパティファイルが「sample.properties」、「sample_ja_jp.properties」が存在する場合は、「sample_ja_jp.properties」に記述したキー「test」の値が表示される
public class Sample {
public static void main(String[] args) throws Exception {
// パッケージ名.ファイル名を指定
ResourceBundle resource
= ResourceBundle.getBundle("sample");
System.out.println(resource.getString("test"));
}
}
ロケール情報に対応するプロパティファイルが存在しなかった場合に発生する例外
MissingResourceException
デフォルトのロケールが日本という環境で、英語で内容を記述した「sample_en_US.properties」というプロパティファイルを読み込む方法。
ResourceBundleクラスのgetBundleメソッドの第2引数にロケール情報を渡す。
Propertiesクラスのlistメソッドに、PrintWriter型のオブジェクトへの参照を渡す。
通貨を表す数値のフォーマットを実行するにはNumberFormatクラスのgetCurrencyInstanceメソッドを使用
java.time.format.FormatStyle
列挙子 | 書式 |
---|---|
FULL | Thursday, April 1, 2021 |
LONG | April 1, 2021 |
MEDIUM | Apr 1, 2021 |
SHORT | 4/1/21 |
java.time.format.DateTimeFormatter
定数 | 意味 | 使用例 |
---|---|---|
BASIC_ISO_DATE | 基本的なISO日付書式 | 20111203 |
ISO_LOCAL_DATE | ローカルのISO日付書式 | 2011-12-03 |
ISO_LOCAL_TIME | ローカルのISO時刻書式 | 10:15:30 |
ISO_ORDINAL_DATE | 年および年の日付の書式 | 2012-337 |
DateTimeFormatter ofPattern(String pattern)
日付の書式を表すパターンを文字列として、受け取る。
LocalDate date = LocalDate.of(2021, 4, 1);
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy'年' MMMM d'日' eeee");
System.out.println(formatter.format(date));
2021年 4月 1日 木曜日