GUIフォームの国際化
This tutorial needs a review. You can open a JIRA issue, or edit it in GitHub following these contribution guidelines. |
次のチュートリアルで、NetBeans IDEでの国際化の基本的な手順の一部を紹介します。フォームの1つに国際化を設定し、後でそのフォームをデザインします。その後、いくつかの異なるパッケージに様々なフォームを含んでいるプロジェクト全体を国際化します。アプリケーションは、自動国際化を指定するか、特別なウィザードを使用して国際化できます。
予想される所要時間: 30分

このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
ソフトウェアまたはリソース | 必須バージョン |
---|---|
バージョン7.0以降 |
|
バージョン6、7または8 |
国際化の原則
国際化によって、技術的な変更や再コンパイルを行わずに、様々な言語や地域にアプリケーションを対応させることができます。プログラムを国際化することによって、プログラム内でハードコーディングすることなく、ステータス・メッセージやGUIコンポーネント・ラベルなどのテキスト要素をソース・コードの外部に保存し、動的に読み出すことができます。
一般的に、国際化した文字列は、キーと値のペアの形式でプロパティ・ファイルに保存します。キーはプログラムがテキストを読み出すために使用する識別子で、値は実際のテキストです。プログラムを変換する各ロケール(または言語)に対して、プロパティ・ファイルを1つ作成します。キーは各ロケールで同じで、文字列のみが異なります。
IDEには、次の各操作を行うためのツールが用意されています。
-
GUIフォームまたはJavaプログラムの作成時に国際化文字列を挿入する
-
個別ファイルまたはファイルのグループで、ハードコードされたすべての文字列を国際化された文字列で置換する
デザイン時のGUIフォームの国際化
この課題では、GUIビルダーを使用して作成された、よく知られている検索ダイアログを含む、デモのJavaアプリケーション・プロジェクトを開きます。次に、フォームFindDialog.javaの自動国際化をオンに切り替えます。国際化されたGUIフォームをテストするために、プロパティ・ファイルに新しいロケールを追加し、デフォルト以外のロケールでフォームを実行します。
サンプル・プロジェクトを開く
-
コンピュータ上の任意の場所に、InternationalizeDemo.zipプロジェクトをダウンロードして解凍します。
-
「ファイル」>「プロジェクトを開く」を選択し、前のステップで抽出した
InternationalizeDemo
プロジェクトに移動して「開く」をクリックします。プロジェクト・フォルダは、InternationalizeDemo
という名前の含まれるフォルダ内にある場合もあります。 -
「ソース・パッケージ」>「demo」を展開し、
FindDialog.java
をダブルクリックします。サンプル・フォームがGUIビルダーで開きます。

自動国際化をオンに切替え
-
「ナビゲータ」ウィンドウでルート・ノード(
Form FindDialog
)を選択します。

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

-
「GUIフォーム形式のアップグレード」ダイアログ・ボックスで「アップグレード」をクリックします。
チェックボックスが選択されると、「 プロパティ・バンドル・ファイル
」プロパティで設定されているとおりに、IDEが demo
パッケージ内に Bundle.properties
ファイルを作成します。

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

-
「プロジェクト」ウィンドウで、
Bundle.properties
を右クリックして「開く」を選択します。 -
次に示すように、表の対応する列の個々のメッセージを、新しい言語(スペイン語など)に変換します。
-
[Ctrl]-[S]を押して編集を保存します。
-
「
FindDialog.java
」タブを選択して、国際化しているフォームを表示します。 -
「ナビゲータ」ウィンドウのルート・ノードを右クリックし、「フォームの再ロード」を選択します(または[Ctrl]+[R]を押します)。
-
表示される「質問」ダイアログ・ボックスで「保存」をクリックします。 フォームが再度開き、次に示すように、スペイン語ロケールがデザインにロードされます。
プロジェクト全体の国際化
通常、デフォルト・ロケールには複数のファイルがあり、他の言語に変換するためにそれらを適用するように求められます。国際化ウィザードは、このタスクに対する完璧なツールで、一度に複数のファイルを国際化できます。この機能について、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
ファイルをクリックして選択します。 -
「OK」をクリックします。
次に示すように、ソース・ファイルがウィザードの最初のページに表示されます。
-
デモの目的で、「
examples.Find
」を選択し、「ソースを除去」ボタンをクリックします。 -
「次」をクリックします。
-
国際化ウィザードが正しいプロパティ・ファイル
examples.Antenna
とexamples.ContactEditor
を提示するかどうかを確認します。提示しない場合、「リソースを選択」ボタンを使用して正しいプロパティ・ファイルを選択します。
-
「次」をクリックします。
-
フィールドを作成する予定はないため、ウィザードの3ページ目をスキップし、追加の値を変更して「次」をクリックします。
-
ハードコードされた文字列は、国際化ウィザードの最後のステップですべて表示されます。それらのうちどれがプロパティ・ファイルからのものかを判断できます(チェックボックスを使用)。文字列の省略符号ボタン(…)をクリックして、個々のキー、値、コメント、および置換した文字列の書式をさらにカスタマイズできます。
-
「終了」をクリックします。
単一フォームの国際化
GUIフォームを国際化するには、自動国際化機能を使用するのが最も簡単な方法です。ただし、更新パックをインストールしていない場合、またはフォーム・エディタによって生成されていないコードも国際化する場合は、国際化ウィンドウを使用することをお薦めします。(この機能は、フォーム・エディタを使用して作成されたファイルのみでなく、任意の .java
ファイルでも機能します)。次の例では、NetBeans IDEのデフォルト・インストールに含まれている国際化ウィンドウを使用します。
この最後の課題では、GUIフォームのサンプル・プロジェクトを再利用して、前の課題で除外したFind.javaフォームを国際化します。「国際化」ダイアログ・ボックスを呼び出して、このファイル内のハードコードされた文字列をすべて置換します。最後に、プログラムの記述時にソース・コードに国際化文字列を挿入する方法の簡単なデモを示します。
「国際化」ダイアログ・ボックスの使用
-
「プロジェクト」ウィンドウで、「
Find.java
」を選択し、メイン・メニューから「ツール」>「国際化」>「国際化」を選択します。
IDEは、「国際化」ダイアログ・ボックスと、事前入力済の Find.java
ソース・コードから最初にハードコードされた文字列を表示します。
-
「選択」をクリックして特定のプロパティ・ファイルを選択するか、または新しいプロパティ・ファイルを作成します。
-
「リソース・バンドルを選択」ダイアログ・ボックスで、「ファイル名」テキスト・フィールドに「
Find.properties
」と入力し、「新規作成」をクリックしてから「OK」をクリックします。 -
必要に応じて、置換された文字列、キー、値、またはコメントの書式を変更できます。デフォルトの値はそのままにします。
-
「置換」をクリックして変更を確認し、フォーカスを次のハードコードされた文字列に移動します。
ハードコードされた文字列を置換する必要がない場合は、「スキップ」ボタンをクリックします。
単一国際化文字列の挿入
-
「プロジェクト」ウィンドウで、
Find.java
を右クリックして「編集」を選択します。
IDEは、ソース・エディタで Find.java
ファイルを開きます。
-
ソース・コードをスクロールし、mainメソッドを探します。
-
mainメソッドに、次の太字の行を挿入します。
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels();
for (int idx=0; idx<installedLookAndFeels.length; idx++)
if ("Nimbus".equals(installedLookAndFeels[idx].getName())) {
javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName());
break;
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
*System.out.println();*
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
-
System.out.println();
の括弧内にカーソルを移動して、国際化文字列をパラメータとして挿入できるようにします。 -
[Ctrl]-[Shift]-[J]を押して「国際化文字列を挿入」ダイアログ・ボックスを起動します(または、メイン・メニューから「ツール」>「国際化」>「国際化文字列を挿入」を選択できます)。
-
「バンドル名」で、「選択」ボタンをクリックし、
「ソース・パッケージ」>「examples」
フォルダを選択して、「ファイル名」テキスト・フィールドにバンドル名として「Find
」と入力します。「OK」をクリックします。 「国際化文字列を挿入」ダイアログ・ボックスの「バンドル名」フィールドに、「examples.Find
」と表示されます。 -
「キー」ドロップダウン・ボックスに「
Start
」と入力し、「値」フィールドに「Start Find Dialog
」と入力します。「OK」をクリックします。

-
次のように、IDEが国際化文字列を挿入します。
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels();
for (int idx=0; idx<installedLookAndFeels.length; idx++)
if ("Nimbus".equals(installedLookAndFeels[idx].getName())) {
javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName());
break;
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
* System.out.println(java.util.ResourceBundle.getBundle("examples/Find").getString("Start"));*
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
関連項目
詳細は、次のリンクを参照してください。
-
_NetBeans IDEによるアプリケーションの開発_のJava GUIの実装