$NON-NLS-1$是什么意思?

在Eclipse源代码中,我在注释中发现了一些“$NON-NLS-1$”:

private String toolTip = ""; //$NON-NLS-1$

这是什么意思?

80052 次浏览

字符串是不可翻译的。它告诉Eclipse编辑器不要将字符串标记为未使用资源。这对于多语言应用程序很重要。

它告诉编译器不要抱怨一个非外部化的字符串,并且它不需要本地化。

Eclipse使用它来表示字符串不需要翻译,可能是因为应用程序的用户不会看到它。

它们屏蔽了Eclipse在遇到字符串字面值时发出的警告(并且已配置为抱怨)。

其思想是UI消息不应该作为字符串文字嵌入,而是来自资源文件(这样它们就可以被翻译、校对等)。因此,Eclipse可以配置为检测字符串字面量,这样您就不会意外地在代码中留下未外部化的UI字符串;但是,有些字符串不应该外部化(比如regexp),因此,//$NON-NLS-1$提供了一种与编译器沟通事实的方法。

如果你是Android开发者。用户可能看到的所有字符串都应该在资源文件/res/values/strings.xml中读取使用R.string的代码中的strings.xml文件。通过添加标签//$NON-NLS-$,你注意到字符串将不会被用户看到。

日食太阳神中的警告可以在Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag)打开。

如果你打算将你的活动编程为多语言,建议打开这个选项。然后将NON-NLS$标记添加到活动内部的字符串中。如果您右键单击警告或错误,Eclipse将在快速修复中添加NON-NLS$标记。

NON-NLS表示< em >非-National __abc3language 年代upport.
维基百科还提出了< em >非-Native __abc3language 年代upport (NLS),但最后一个不太使用

NLS是关于国际化你的应用程序。Eclipse帮助您定位代码中的硬编码字符串。要指出字符串不是国际化的一部分,添加注释//$NON-NLS-x$,其中x是字符串的位置。在下面的例子中,两个"!"都是硬编码的字符串,不是国际化的一部分:

 public String foo(String key) {
return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
}

注:

  • 每次都需要前导//
  • no global $NON-NLS$ for同一行内的多个字符串
    . 0 (例如,如果你的行有六个字符串,你必须写六次//$NON-NLS-x$)

这本书第250页的Eclipse建模框架说:

Non-NLS标记, Eclipse的Java编译器具有将非外部化字符串标记为警告或错误的能力,以方便启用国家语言支持(NLS)。emf生成的代码不会对用户将看到的消息使用硬编码字符串;但是,字符串字面值确实经常出现,例如,在属性文件中作为查找外部化字符串的键。此属性控制是否包含将这些字面量标记为不可翻译的注释,以便编译器不会标记它们。

有关更多详细信息,请参见生成器GUI如何国际化您的Eclipse插件页。

可以启用/禁用该特性。在Eclipse Neon上转到
Project > Properties > Java Compiler > Errors/Warnings < br > 并选择字段
Non-externalized strings (missing/unused $NON-NLS$ tag) < / p >

Window of the Project Properties on Eclipse .