cypher256's blog

Pleiades とか作った

ソースのストリングの外部化

Eclipse にはソースにハード・コーディングされた文字列をプロパティー・ファイルとして外部化する機能があります。プロジェクトを選択し、メニュー > ソース > ストリングの外部化 で以下のようなウィザードが起動します。

プラグイン・プロジェクトの場合は「Eclipse のストリング外部化機能を使用する」が表示され、チェックの有無により生成されるソースに以下の違いがあります。

チェックなしの場合 (デフォルト)


import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class Messages {
	private static final String BUNDLE_NAME = "sampleviewplugin.messages";
	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
	private Messages() {
	}
	public static String getString(String key) {
		try {
			return RESOURCE_BUNDLE.getString(key);
		} catch (MissingResourceException e) {
			return '!' + key + '!';
		}
	}
}
[messages.properties]
Hoge.0=文字列1
Hoge.1=文字列2
Hoge.2=文字列3

Java 標準 API のみで構成されるため、プラグイン・プロジェクト以外でも使用することができますが、キーを文字列で指定する必要があります。

チェックありの場合

import org.eclipse.osgi.util.NLS;

public class Messages extends NLS {
	private static final String BUNDLE_NAME = "sampleviewplugin.messages";
	public static String Hoge_0;
	public static String Hoge_1;
	public static String Hoge_2;
	static {
		// initialize resource bundle
		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
	}
	private Messages() {
	}
}
[messages.properties]
Hoge_0=文字列1
Hoge_1=文字列2
Hoge_2=文字列3

Eclipse の NLS クラスを継承したクラスが生成されます。初回フィールド・アクセス時にスタティック・イニシャライザーでプロパティーがロードされ、定数フィールド (不変ではありませんが) に文字列がセットされます。キーを文字列で指定する必要がないため安全です。デフォルトでは「Eclipse のストリング外部化機能を使用する」にチェックが入っていませんが、プラグインの場合、必ずチェックするようにしたほうが良いと思います。

関連リンク:Eclipse/プラグイン開発のTIPS集
文字列を外部化する