GUI フォームの国際化
次のチュートリアルで、NetBeans IDE での国際化の基本的な手順の一部を紹介します。フォームの 1 つに国際化を設定し、あとでそのフォームをデザインします。そのあと、いくつかの異なるパッケージにさまざまなフォームを含んでいるプロジェクト全体を国際化します。アプリケーションは、自動国際化を指定するか、特別なウィザードを使用して国際化できます。
予想される所要時間: 30 分
目次
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
国際化の原則
国際化では、技術的な変更や再コンパイルなしにさまざまな言語および地域にアプリケーションを対応させることができます。プログラムを国際化することによって、プログラム内でハードコーディングすることなく、状態メッセージや GUI コンポーネントラベルなどのテキスト要素をソースコードの外部に保存し、動的に読み出すことができます。
一般的に、国際化した文字列は、キーと値のペアの形式でプロパティーファイルに保存します。キーはプログラムがテキストを読み出すために使用する識別子で、値は実際のテキストです。プログラムを変換する各ロケール (または言語) に対して、プロパティーファイルを 1 つ作成します。キーは各ロケールで同じです。文字列のみが異なります。
IDE には、次の各操作を行うためのツールが用意されています。
- GUI フォームまたは Java プログラムの作成時に国際化文字列を挿入する
- 個別ファイルまたはファイルのグループで、ハードコードされたすべての文字列を国際化された文字列で置換する
デザイン時の GUI フォームの国際化
この課題では、GUI ビルダーを使用して作成された、良く知られている検索ダイアログを含む、デモの Java アプリケーションプロジェクトを開きます。次に、フォーム FindDialog.java の自動国際化をオンに切り替えます。国際化された GUI フォームをテストするために、プロパティーファイルに新しいロケールを追加し、デフォルト以外のロケールでフォームを実行します。
サンプルプロジェクトを開く
- コンピュータ上の任意の場所に、InternationalizeDemo.zip プロジェクトをダウンロードして展開します。
- 「ファイル」>「プロジェクトを開く」 (Ctrl-Shift-O) を選択し、前の手順で展開した InternationalizeDemo プロジェクトに移動して、「開く」をクリックします。プロジェクトフォルダは、InternationalizeDemo という名前の含まれるフォルダ内にある場合もあります。
- 「ソースパッケージ」>「demo」を展開し、FindDialog.java をダブルクリックします。サンプルフォームが GUI ビルダーで開きます。
この GUI フォームの作成方法のデモを表示するには、デモを表示をクリックしてください。
自動国際化をオンに切り替え
- 「インスペクタ」ウィンドウで、ルートノードを選択します (フォーム FindDialog という名前)。

- 「プロパティー」ウィンドウで、「自動国際化」プロパティーのチェックボックスを選択します。

- 「GUI フォーム形式のアップグレード」ダイアログボックスで「アップグレード」をクリックします。
チェックボックスが選択されると、「プロパティーバンドルファイル」プロパティーで設定されているとおりに、IDE が demo パッケージ内に Bundle.properties ファイルを作成します。このファイルを別の場所に置く必要がある場合は、省略符号ボタン (...) をクリックして場所を選択するか、プロパティーのテキストフィールドにパスを直接入力できます。

- 「プロジェクト」ウィンドウで、「プロジェクト」ウィンドウの「Bundle.properties」ノードをダブルクリックするか、またはノードを右クリックして「編集」を選択します。
プロパティーファイルがソースエディタに表示されます。見てわかるように、フォーム FindDialog.java に適切なキーと値がすべて生成されます。各キーの名前は、フォームのファイル名とコンポーネントの変数名から派生されます。たとえば、キー FindDialog.jLabel1.text は、フォームファイル FindDialog に配置された jLabel1 という変数名を持つコンポーネント用に生成されます。値 jLabel1 は、この例ではコンポーネントの「text」プロパティーを表しています。
- Bundle.properties ファイルを閉じます。
個別の GUI コンポーネントの国際化
GUI ビルダーを使用して、フォームの JLabels および JButtons の国際化文字列を入力します。
- デザイン領域で、適切な GUI コンポーネント (例 : jLabel1) を選択します。
- 「プロパティー」ウィンドウで、「text」プロパティーの省略符号ボタン (...) をクリックします。
注: Mnemonic、Accessible Name、Accessible Descriptor、ToolTip などの、文字列値を持つその他のプロパティーも国際化できます。
- プロパティーエディタがリソースバンドルモードに切り替わります。「バンドル名」フィールドが demo.Bundle に設定され、「キー」フィールドに文字列 FindDialog.jLabel1.text が含まれていることを確認します。
- 「値」フィールドに「Find What:」と入力します。
- 「了解」をクリックします。
すべてのコンポーネントで前述の手順を繰り返すと、フォームは次の図のようになります。

注: 手順 1 から 5 はより単純で、すばやい方法で実行できます。単にデザインビューで「jLabel1」をダブルクリックし、テキストを「jLabel1」から「Find What:」に変更して、Enter キーを押します。結果は前述の手順と同じです。
jLabel1 の国際化のデモを表示するには、デモを表示をクリックしてください。
コンポーネントを同じ幅にするには、次の手順を実行します。
- フォーム内の 8 つの jCheckBox をすべて Ctrl キーを押しながらクリックして選択します。
- jCheckBox が選択された状態で、いずれか 1 つを右クリックし、ポップアップメニューから「同じサイズを設定」>「同じ幅」を選択します。
- 3 つの jButton に対して手順 1 から 2 を適用します。
新規ロケールの追加
- 「インスペクタ」ウィンドウでルートノードを選択します (「フォーム FindDialog」ノード)。
- 「プロパティー」ウィンドウで、「デザインロケール」プロパティーの省略符号ボタン (...) をクリックします。
- 「事前定義ロケール:」コンボボックスから「es_ES」を選択します。
- 「了解」をクリックします。
次に示すように、「Bundle.properties」ノードの下に新しいロケールが表示されます。

- 「プロジェクト」ウィンドウで、Bundle.properties を右クリックして「開く」を選択します。
- 次に示すように、表の対応する列の個々のメッセージを、新しい言語 (スペイン語など) に変換します。

- Ctrl-S キーを押して編集を保存します。
- 「FindDialog.java」タブを選択して、国際化しているフォームを表示します。
- 「インスペクタ」ウィンドウのルートノードを右クリックし、「フォームの再読み込み」を選択します (または Ctrl-R を押す)。
- 表示される「質問」ダイアログボックスで「保存」をクリックします。
フォームがふたたび開き、次に示すように、スペイン語ロケールがデザインに読み込まれます。

デフォルト以外のロケールのテスト
- 「プロジェクト」ウィンドウで、「InternationalizeDemo」プロジェクトを右クリックし、「プロパティー」を選択します。
- 「カテゴリ」区画で、「実行」ノードを選択します。
- 「VM オプション」フィールドに「-Duser.language=es -Duser.country=ES」と入力します。

- 「了解」をクリックします。
- 「InternationalizeDemo」プロジェクトを右クリックし、「実行」を選択します。
次に示すように、IDE によって「FindDialog」ダイアログボックスがスペイン語ロケールで実行されます。

プロジェクト全体の国際化
通常、デフォルトロケールには複数のファイルがあり、ほかの言語に変換するためにそれらを適用するように求められます。国際化ウィザードは、このタスクに対する完璧なツールで、一度に複数のファイルを国際化できます。この機能は、GUI フォームのサンプルプロジェクトで説明します。これには、Swing GUI のデザインのチュートリアルで作成したフォームが含まれています。
サンプルプロジェクトの作成
- 「ファイル」>「新規プロジェクト」を選択するか、IDE ツールバーで「新規プロジェクト」アイコンをクリックします。
- 「カテゴリ」区画で、「サンプル」>「Java」ノードを選択します。「プロジェクト」区画で、「GUI フォームの例」を選択します。「次へ」をクリックします。
- 「プロジェクト名」フィールドに「GUIFormExamples」と入力し、プロジェクトの場所を指定します (例 : /space/projects)。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。
- 「完了」をクリックします。

プロパティーファイルの準備
- 「ファイル」>「新規ファイル」を選択するか、IDE のツールバーで「新規ファイル」アイコンを選択します。
- 「カテゴリ」区画で、「ファイルの種類」区画に「その他」ノードを選択し、「プロパティーファイル」を選択します。「次へ」をクリックします。
- 「ファイル名」フィールドに「ContactEditor」と入力します。
- 「参照」をクリックし、「フォルダを参照」ダイアログボックスでファイルの場所として GUIFormExamples/src/examples フォルダを指定します。
- 「フォルダを選択」をクリックします。
- 「完了」をクリックします。
IDE によって ContactEditor.properties ファイルが作成され、ソースエディタに表示されます。
前の手順を繰り返し、別の Antenna.properties ファイルを作成します。
国際化ウィザードの呼び出し
- メインメニューで、「ツール」>「国際化」>「国際化ウィザード」を選択します。
- ウィザードの最初のページで、「ソースを追加」をクリックします。
- 「ソースを選択」ダイアログボックスで、「ソースパッケージ」>「examples」ノードを展開し、Ctrl キーを押しながら Antenna.java、ContactEditor.java、および Find.java ファイルをクリックして選択します。
- 「了解」をクリックします。
次に示すように、ソースファイルがウィザードの最初のページに表示されます。

- デモの目的で、「examples.Find」を選択し、「ソースを削除」ボタンをクリックします。
- 「次へ」をクリックします。
- 国際化ウィザードが正しいプロパティーファイル examples.Antenna と examples.ContactEditor を提示するかどうかを確認します。提示しない場合、「リソースを選択」ボタンを使用して正しいプロパティーファイルを選択します。

- 「次へ」をクリックします。
- フィールドを作成する予定はないため、ウィザードの 3 ページ目をスキップし、追加の値を変更して「次へ」をクリックします。
- ハードコードされた文字列は、国際化ウィザードの最後の手順ですべて表示されます。それらのうちどれがプロパティーファイルからのものかを判断できます (チェックボックスを使用)。文字列の省略符号ボタン (...) をクリックして、個々のキー、値、コメント、および置換した文字列の書式をさらにカスタマイズできます。

- 「完了」をクリックします。
これで、ソースコードの国際化は終了です。前に示したとおり、ほかのロケールも追加したりテストしたりできます。
単一フォームの国際化
GUI フォームを国際化するには、自動国際化機能を使用するのがもっとも簡単な方法です。ただし、更新パックをインストールしていない場合、またはフォームエディタによって生成されていないコードも国際化する場合は、国際化ウィンドウを使用することをお勧めします。この機能は、フォームエディタを使用して作成されたファイルだけでなく、任意の .java ファイルで機能します。次の例では、NetBeans IDE のデフォルトインストールに含まれている国際化ウィンドウを使用します。
この最後の課題では、GUI フォームのサンプルプロジェクトを再利用して、前の課題で除外した Find.java フォームを国際化します。「国際化」ダイアログを呼び出して、このファイル内のハードコードされた文字列をすべて置換します。最後に、プログラムの記述時にソースコードに国際化文字列を挿入する方法の簡単なデモを示します。
「国際化」ダイアログの使用
- 「プロジェクト」ウィンドウで、「Find.java」を右クリックし、メインメニューから「ツール」>「国際化」>「国際化」を選択します。
IDE は、「国際化」ダイアログと、事前入力済みの Find.java ソースコードから最初にハードコードされた文字列を表示します。
- 「選択」をクリックして特定のプロパティーファイルを選択するか、または新しいプロパティーファイルを作成します。
- 「ファイル名」テキストフィールドに「Find.properties」と入力し、「新規作成」、「了解」の順にクリックします。
- 必要に応じて、置換された文字列、キー、値、またはコメントの書式を変更できます。デフォルトの値はそのままにします。
- 「置換」をクリックして変更を確認し、フォーカスを次のハードコードされた文字列に移動します。
ハードコードされた文字列を置換する必要がない場合は、「スキップ」ボタンをクリックします。

単一国際化文字列の挿入
- 「プロジェクト」ウィンドウで、Find.java を右クリックして「編集」を選択します。
IDE は、ソースエディタで Find.java ファイルを開きます。
- ソースコードをスクロールし、main メソッドを探します。
- main メソッドに、次のボールドの行を挿入します。
public static void main(String args[]) {
System.out.println();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
- Ctrl-Shift-J キーを押して「国際化文字列を挿入」ダイアログボックスを起動します (または、メインメニューから「ツール」
>「国際化」>「国際化文字列を挿入」を選択できます)。
- 「バンドル名」で、「選択」ボタンをクリックし、「ソースパッケージ」>「examples」フォルダを選択して、「ファイル名」テキストフィールドにバンドル名として「Find」と入力します。「了解」をクリックします。「バンドル名」フィールドに examples.Find と表示されます。
- 「キー」ドロップダウンボックスに「Start」と入力し、「値」フィールドに「Start Find Dialog」と入力します。「了解」をクリックします。

- 次のように、IDE が国際化文字列を挿入します。
public static void main(String args[]) {
System.out.println(java.util.ResourceBundle.getBundle("examples/Find").getString("Start"));
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
関連項目
詳細については、次のリンクを参照してください。