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

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

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

那是什么意思 ?

他们沉默了Eclipse遇到string文字(并被configuration为投诉)时发出的警告。

这个想法是,UI消息不应该被embedded为string文字,而是来自资源文件(以便他们可以被翻译,校对等)。 因此,Eclipse可以configuration为检测string文字,这样您就不会在代码中意外地留下非表面化的UIstring; 然而,有些string不应该被外化(比如正则expression式),所以,// $ NON-NLS-1 $给了你一个将这个事实传达给编译器的方法。

string不可翻译。 它告诉Eclipse编辑器不要将该string标记为无资源。 这对多语言应用程序很重要。

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

Eclipse Helios中的警告可能会在Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag)打开。

如果您打算将您的活动编程为多语言,则build议将其打开。 然后将&NON-NLS $标记添加到您活动内部的string中。 如果右键单击警告或错误,Eclipse将在快速修复中添加&NON-NLS $标记。

NON-NLS意味着语言的支持。
维基百科也提出了 N语言支持(NLS),但最后一个不是很常用。

NLS是关于你的应用程序的国际化。 Eclipse有助于在代码中查找硬编码的string。 要表示一个string不是国际化的一部分,请附加注释//$NON-NLS-x$ ,其中x是string的位置。 在下面的例子中, "!" 是硬编码string不属于国际化的一部分:

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

笔记:

  • 每次都需要领先的//
  • 没有全球$NON-NLS$在同一行内的多个string
    (例如,如果你的行有六个string,你必须写六次//$NON-NLS-x$

本书的EMF:Eclipsebuild模框架第250页说:

非NLS标记 – Eclipse的Java编译器能够将非外部string标记为警告或错误,以便于启用国家语言支持(NLS)。 EMF生成的代码不会使用用户将看到的消息的硬编码string; 然而,string文字经常出现,例如,作为查找属性文件中外部化string的键。 该属性控制是否包含将这些文字标记为不可翻译的注释,以便编译器不会标记它们。

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

您可以启用/禁用此function。 Eclipse上的霓虹灯去
Project > Properties > Java Compiler > Errors/Warnings
并select该字段
Non-externalized strings (missing/unused $NON-NLS$ tag)

Eclipse上项目属性的窗口

它被Eclipse用来表示一个string不需要被翻译,可能是因为它不会被应用程序的用户看到。

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