Eclipseプラグイン実践テクニック(1)
Eclipseプラグインを国際化しよう



Javaソースコードの国際化

 次にJavaソースコード中に含まれる文字列の外部化を行いましょう。XMLエディタプラグインのソースコード中で外部化が必要なのはプリファレンスページのユーザーインターフェイスに表示される文字列(赤字になっている部分)です。

package jp.sf.amateras.xmleditor.preferences;
import jp.sf.amateras.xmleditor.XMLEditorPlugin;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
public class XMLEditorPreferencePage extends FieldEditorPreferencePage
        implements IWorkbenchPreferencePage {

  public XMLEditorPreferencePage() {
    super(GRID);
    setPreferenceStore(XMLEditorPlugin.getDefault().
        getPreferenceStore());
  }

  protected void createFieldEditors() {
    addField(new ColorFieldEditor(
      PreferenceConstants.COLOR_TAG,"タグの色"
      ,getFieldEditorParent()));
    addField(new ColorFieldEditor(
      PreferenceConstants.COLOR_COMMENT,"コメントの色"
      ,getFieldEditorParent()));
    addField(new ColorFieldEditor(
      PreferenceConstants.COLOR_STRING,"文字列の色"
      ,getFieldEditorParent()));
    addField(new ColorFieldEditor(
      PreferenceConstants.COLOR_PROC,"XML宣言の色"
      ,getFieldEditorParent()));
    addField(new ColorFieldEditor(
      PreferenceConstants.COLOR_DEFAULT,"デフォルトの色"
      ,getFieldEditorParent()));
  }
  public void init(IWorkbench workbench) {
  }
}

 これらの文字列をプロパティファイルに外部化していくわけですが、EclipseにはJavaソースコード中の文字列を外部化するための機能が用意されています。今回のように少量の文字列であれば手動で外部化を行っても大した手間ではありませんが、大量のソースコードに対してハードコードされた文字列を外部化する必要がある場合はこの機能を利用すると便利です。

 文字列の外部化機能を使用するには外部化を行いたいファイルを選択し、メニューから[ソース]→[ストリングの外部化]を選択します。すると以下のようなウィザードが起動します。

図5 ストリングの外部化ウィザード

 ソースコード中で使用されている文字列が一覧表示されていますので、この中から外部化を行いたいもの、そうでないものを選択します。左端のアイコンの意味は以下のとおりです。また、キーはデフォルトでは0からの連番が振られていますが、後で分かりやすいように変更しておくとよいでしょう。

アイコン 名称 説明
外部化 外部化を行います
無視 外部化を行わないというマークを付与します
内部化 何も行いません。すでに外部化されている場合は元に戻します

 デフォルトでは外部化を行うファイルと同一パッケージにmessages.propertiesというプロパティファイルとそれを読み込むためのMessagesというクラスが作成され、Messages#getString()メソッドを用いて文字列を取得するようJavaソースコードの置換が行われます。このままでもよいのですが、Eclipseプラグインではプラグインクラスでプラグイン内のリソースを一括管理するのが慣習となっていますので、右下の[構成]ボタンをクリックして外部化の設定を以下のように変更します。

図6 アクセサー・クラスの構成

 文字列の外部化を実行すると、以下のような内容のmessages.propertiesが生成されます。

XMLEditorPreferencePage.ColorTag=タグの色
XMLEditorPreferencePage.ColorComment=コメントの色
XMLEditorPreferencePage.ColorString=文字列の色
XMLEditorPreferencePage.ColorXMLDecl=XML宣言の色
XMLEditorPreferencePage.ColorDefault=デフォルトの色

 また、XMLEditorPreferencePageのソースコードが以下のように修正されているはずです(赤字部分が文字列の外部化ウィザードによって変更・追加された部分です)。

protected void createFieldEditors() {
  addField(new ColorFieldEditor(
    PreferenceConstants.COLOR_TAG,
    XMLEditorPlugin.getString("XMLEditorPreferencePage.ColorTag")
    ,getFieldEditorParent())); //$NON-NLS-1$
    addField(new ColorFieldEditor(
    PreferenceConstants.COLOR_COMMENT,
    XMLEditorPlugin.getString("XMLEditorPreferencePage.ColorComment")
    ,getFieldEditorParent())); //$NON-NLS-1$
    addField(new ColorFieldEditor(
    PreferenceConstants.COLOR_STRING,
    XMLEditorPlugin.getString("XMLEditorPreferencePage.ColorString")
    
,getFieldEditorParent())); //$NON-NLS-1$
    addField(new ColorFieldEditor(
    PreferenceConstants.COLOR_PROC,
    XMLEditorPlugin.getString("XMLEditorPreferencePage.ColorXMLDecl")
    ,getFieldEditorParent())); //$NON-NLS-1$
    addField(new ColorFieldEditor(
    PreferenceConstants.COLOR_DEFAULT,
    XMLEditorPlugin.getString("XMLEditorPreferencePage.ColorDefault")
    ,getFieldEditorParent())); //$NON-NLS-1$
}

 この状態ではXMLEditorPluginクラスにgetString()メソッドが存在しないため、コンパイルエラーになっていることと思います。XMLEditorPluginクラスにgetString()メソッドを実装してみましょう。以下の赤字部分を追加します。

public class XMLEditorPlugin extends AbstractUIPlugin {
  ...
  private static final ResourceBundle RESOURCE_BUNDLE
    = ResourceBundle.getBundle("message");
  public static String getString(String key){
    return RESOURCE_BUNDLE.getString(key);
  }

}

 以上で文字列の外部化は完了ですが、message.propertiesに日本語の文字列が記述された状態になってしまっています。やはり国際化をする以上、デフォルトでは最もユーザー数の多いと思われる英語で表示するようにすべきです。message.propertiesをmessage_ja.propertiesにリネームし、新たにmessage.propertiesを作成して英語の文字列を記述しておきましょう。

XMLEditorPreferencePage.ColorTag=Tag Color
XMLEditorPreferencePage.ColorComment=Comment Color
XMLEditorPreferencePage.ColorString=String COlor
XMLEditorPreferencePage.ColorXMLDecl=XML Decl Color
XMLEditorPreferencePage.ColorDefault=Default Color

 以上でマニフェストファイル同様、プリファレンスページのユーザーインターフェイスもロケールに応じて表示が切り替わるようになります。

 
図7 プリファレンスページのUIがロケールに応じて切り替わるようになった

 なお、ロケールによってきちんと表示が切り替わるかどうかを確認したい場合、ランタイム・ワークベンチを起動する際にプログラム引数に-nl en_USなどとしておくと指定したロケールでランタイム・ワークベンチを起動することができます。

図8 ランタイムワークベンチのロケールを指定


2/3

 INDEX

第1回 Eclipseプラグイン実践テクニック

  Page1
プラグインの国際化
  Page2
Javaソースコードの国際化
  Page3
フラグメントによる国際化


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間