プロジェクト

全般

プロフィール

JavaFXと国際化(リソース)

JavaFXは、Java SEが従来から提供している国際化リソースの仕組みをそのまま使用し、文字列リソースを国際化対応したうえで外部ファイル等に定義し使用することができます。

FXMLと国際化(リソースバンドル)

FXMLを使用した場合の文字列リソースの国際化(リソースバンドル)の使用方法を簡単に紹介します。

FXMLLoaderにリソースバンドルを渡します。

ResourceBundle resource = ResourceBundle.getBundle("com.torutk.myfxapp.MyApp");
root = FXMLLoader.load(getClass().getResource("MyView.fxml"), resource);

FXMLLoaderクラスのloadメソッドのオーバーロードの1つに、引数でResourceBundleを渡すメソッドがあります。
ResourceBundleは、通常はプロパティ形式のテキストファイルを使用します(Javaのクラスを使用することも可能)。
getBundleメソッドでは、リソースを定義したファイルのクラスパス上の場所をピリオド区切りで指定します。ファイル名は、基底名で指定します。

FXMLファイルにおいて、リソースに記述された文字列を参照するには、%キー文字列で記述します。

実行時に、指定したリソースバンドルが取得できないと、実行時例外が発生します。

Scene Builderでリソースを使用

Scene Builder上でリソースバンドルの文字列を表示させるには、[Preview]メニュー > [Internationalization] > [Set Resources...] を指定し、プロパティファイルを設定します。

リソースファイル名の命名

とりあえずの指針です。

通常は、FXMLファイルと同じディレクトリに置きます。
ファイル名は、アプリケーション名を基底名とするかFXMLファイル名から拡張子を除いたものを基底名とするのがよさそうです。
複数の画面(FXML)を扱うアプリケーションで、画面毎にリソースファイルを定義するなら、FMXLファイル名と対応するファイル名とします。
アプリケーション全体のリソースを1つのファイルで定義するなら、アプリケーション名と対応するファイル名とします。

Tips

文字列の前後に空白文字を指定したい

文字列の前後にある空白は無視されてしまいます。これを文字列の一部として認識させたい場合は、空白文字をユニコードエスケープ(\u0020)で記述します。あるいは、エスケープ文字を使って\ のように記述してもよいようです。

参考情報

Java SEのリソースバンドル