软件开发中经常有字符串不想硬编码,解决方案因语言和框架而异,但往往都含有“异曲同工之妙”。Eclipse插件(RCP)的解决方案:NLS 。
NLS
NLS 是Eclipse 3.1 开始提供的一个类,由IBM提供,其信息如下
package org.eclipse.osgi.util;
import ……
public abstract class NLS {
private static final Object[] EMPTY_ARGS = new Object[0];
private static final String EXTENSION = ".properties";
private static String[] nlSuffixes;
private static final String PROP_WARNINGS = "osgi.nls.warnings";
private static final String IGNORE = "ignore";
private static final boolean ignoreWarnings = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return IGNORE.equals(System.getProperty(PROP_WARNINGS));
}
});
private static FrameworkLog frameworkLog;
static final int SEVERITY_ERROR = 0x04;
static final int SEVERITY_WARNING = 0x02;
static final Object ASSIGNED = new Object();
protected NLS() {
super();
}
……
}
使用
- 创建
XXX.properties 配置文件,用于定义那些不想硬编码的字符串,类propertis 文件。
User_name=张三
- 创建
XXX.java java 类,用于将XXX.properties 中配置的属性映射到java 类,方便编码时使用。
public class UserConfig extends NLS{
public static final String BUNDLE_NAME = "com.abc.def.XXX";
public static String User_name;
}
注意:该类必须继承NLS ,且在里边指定要解析的.properties 文件的位置,其固定语法为public static final String BUNDLE_NAME = "com.abc.def.XXX"; 。可以看出,类名和配置文件名可以不一样。
示例
这里展示一下官方在CNF(Common Navigator Framework)源码中的一个使用案例。 使用时直接 WorkbenchNavigatorMessages.PortingActionProvider_ImportResourcesMenu_label 即可。
|