百度百科解释:
这实际与eclipse中支持i18n的一种方式,eclipse的标准结构,将所有string常量定义到·properties中,例如下面程序段中的TestRef.hello实际上是·properties中的一个key TestRef.hello=Hello
eclipse时,经常在官方的例子中看到一些奇怪的注释,例如: shell.setText(Messages.getString("TestRef.hello")); //$NON-NLS-1$
这$NON-NLS-1$到底代表什么呢?当时在一阵浅尝辄止之后,也就忽略了这个问题,如下图:
现在大家也许对注释$NON-NLS-1$的含义就能够猜到个大概了,我个人猜测他也许就是non need localize string 1的缩写。
rcp的文档里是这样表述的The string $NON-NLS-1$ is a hint for both the compiler and the Externalization(客观性,外表性,外部化) wizard that the first character string on this line is a tag or keyword of some sort and should not be localized.
也就是说$NON-NLS-1$表明本行的第一个string型变量是一个标签或者关键字,不需要被本地化.
TestRef.java文件
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
//TestRef.java文件
public class TestRef {
public static void main(String[] args) {
TestRef window = new TestRef();
window.open();
}
public void open() {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setText(Messages.getString("TestRef.hello")); shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Messages.java
import java.util.MissingResourceException;
import java.util.ResourceBundle; //Messages.java文件
public class Messages {
private static final String BUNDLE_NAME = "test";//$NON-NLS-1$
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 + '!';
} }
}
test.properties
TestRef.hello=Hellokxh
//TestRef.hello5=Hellokxh
运行结果:
如果在test.properties中没有这个对应的key就是文件中注释的部分的话
但是注意着几个文件之间的位置
test.properties文件是在src资源文件夹下.不能更换位置.