私は現在、より大きな Java デスクトップ アプリケーションに取り組んでおり、翻訳を追加したいところです。l18n システムで気になるのは、コンパイル時のチェックがまったくないことです。
HashMap
Java のシステムでは、ローカライズされたすべての文字列に「キー」があり、翻訳された文字列が「値」である のようなものがあります。これは次のようになります (チュートリアルの例から抜粋):
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale(language, country);
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("greetings"));
これは、単純な/小さなアプリケーションの場合にうまく機能します。しかし、何千もの翻訳された文字列を持つ大規模なアプリケーションでは、「キー」にタイプミスがあり、その結果、空の文字列または間違った文字列が取得されることがあります。
少し運が良ければ、アプリケーションはRuntimeException
それについて通知するためにスローしますが、それでも、特定の状況下で表示されない可能性があるダイアログで間違った「キー」が使用されているため、この時点に到達しない可能性があります(エラーダイアログだとしましょう)。
これを防ぐには、使用された「キー」のコンパイル時チェックを提供するシステムを使用することをお勧めします。これは、たとえば Android で使用されます。XML ファイルでリソースを指定すると、インデックスが作成され、クラスにマップされます (使用する「キー」を含む)。このようにして、次のようなものが得られます ( Android Docsから):
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
その「キー」にタイプミスがあると、コンパイル時にエラーが発生します (IDE からの「オートコンプリート」もあります)。
さて、このような作業を行うには、索引付けの部分を実行し、Resource-class ( R.java
) を生成する小さなツール/スクリプトが必要です。Android では、Eclipse プラグイン (または一般的には IDE) がそれを行います。
私の質問は次のとおりです。Java で通常のデスクトップ アプリケーションに使用できるシステムは既にありますか? それとも、私が言っていることはひどく間違っていますか?