0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JavaGold】ローカライズ

Last updated at Posted at 2025-01-11

ローカライズ

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);
    }
}
Unicode表記に変換したプロパティファイルを出力するためのコマンド
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

FormatStyleの列挙子による日付の書式(2021年4月1日の例)
列挙子 書式
FULL Thursday, April 1, 2021
LONG April 1, 2021
MEDIUM Apr 1, 2021
SHORT 4/1/21

java.time.format.DateTimeFormatter

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日 木曜日
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?