Java i18n – Java における国際化

Javaの国際化、またはJava i18nは非常に重要な機能です。Javaはリソースバンドルを通じて国際化(i18n)のサポートを提供しています。

Javaの国際化

アプリケーションをさまざまなロケールに対応させるために、ロケール固有のプロパティファイルを作成する必要があります。ファイル名はバンドル名に言語コードと国コードを付けたパターンに従います。例えば、ApplicationMessages_en_US.propertiesです。特定のロケール用のプロパティファイルが準備できたら、正しいロケールでリソースバンドルを初期化するだけです。Javaはこの目的のためにjava.util.ResourceBundlejava.util.Localeという2つのクラスを提供しています。ResourceBundleはロケール固有のプロパティファイルを読み込み、任意のキーに対するロケール固有の値を取得することができます。これはWebアプリケーションのテキストをロケールに応じて指定するのに非常に役立ちます。HTTPリクエストからロケール情報を取得し、そのロケールのリソースバンドルファイルで動的なページを生成することができます。ユーザーにロケールを選択するオプションを提供し、ラベルを動的に更新することもできます。

Java i18nの例

Javaのi18nの例として、以下の画像のようなプロジェクトの構造を作成しました。以下はJavaInternationalizationExampleクラスのJavaコードです。

package com.journaldev.i18n;

import java.util.Locale;
import java.util.ResourceBundle;

public class JavaInternationalizationExample {

    public static void main(String[] args) {
        //デフォルトのロケール
        ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
        //既に定義されているロケールを使用してResourceBundleを取得
        ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
        //ロケールを作成する必要がある場合のResourceBundleの取得
        ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
        
        //メッセージを出力してみましょう
        printMessages(bundle);
        printMessages(bundleFR);
        printMessages(bundleSWE);
        
    }

    private static void printMessages(ResourceBundle bundle) {
        System.out.println(bundle.getString("CountryName"));
        System.out.println(bundle.getString("CurrencyCode"));
    }

}

ここではバンドル名はApplicationMessagesで、ロケール固有のリソースバンドルが2つとデフォルトのリソースバンドルが1つあります。ApplicationMessages.properties

CountryName=USA
CurrencyCode=USD

ApplicationMessages_fr_FR.properties

CountryName=France
CurrencyCode=Euro

ApplicationMessages_sv_SE.properties

CountryName=Sweden
CurrencyCode=Kr

Localeクラスの使用に注意してください。いくつかのロケールは既に定義されていますが、言語コードと国コードをコンストラクタに渡すことで常に新しいロケールを作成することができます。上記のプログラムを実行すると、以下の出力が得られます。

USA
USD
France
Euro
Sweden
Kr

これで、Javaのi18nの例の説明は終わりです。Javaでの国際化は、ウェブアプリケーションでロケール固有の言語でページを提供するために非常に便利です。

Source:
https://www.digitalocean.com/community/tutorials/java-i18n-internationalization-in-java