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

Java $NON-NLS-1$是什么意思?,java,eclipse,eclipse-rcp,Java,Eclipse,Eclipse Rcp,在Eclipse源代码中,我发现在注释中使用了一些“$NON-NLS-1$”,如下所示: private String toolTip = ""; //$NON-NLS-1$ 这是什么意思?字符串不可翻译。它告诉Eclipse编辑器不要将字符串标记为未来源。这对于多语言应用程序很重要。它告诉编译器不要抱怨非外部化字符串,并且它不需要本地化。Eclipse使用它来指示字符串不需要翻译,可能是因为应用程序的用户看不到它 当Eclipse遇到字符串文本时(并且已配置为投诉),它们会使Eclipse发

在Eclipse源代码中,我发现在注释中使用了一些“$NON-NLS-1$”,如下所示:

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

这是什么意思?

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

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

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

当Eclipse遇到字符串文本时(并且已配置为投诉),它们会使Eclipse发出的警告静音


其思想是UI消息不应该作为字符串文本嵌入,而应该来源于资源文件(以便可以翻译、校对等)。因此,可以将Eclipse配置为检测字符串文本,这样您就不会意外地在代码中留下未国际化的UI字符串;但是,有些字符串不应该外部化(例如regexps),因此,//$NON-NLS-1$提供了一种将该事实传达给编译器的方法。

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

EclipseHelios中的警告可以在
Window->preferences->java->Compiler->code style->“非外部化字符串(缺少/未使用&非NLS$tag)
处打开


如果您计划将活动编程为多语言,建议您启用此功能。然后将&NON-NLS$标记添加到活动内部的字符串中。如果右键单击警告或错误,Eclipse将在快速修复中添加&NON-NLS$标记。

非NLS
表示-NNationalL语言S支持。
还建议-NativeL语言S支持(NLS),但最后一个不是很常用

NLS是关于应用程序国际化的。Eclipse有助于在代码中定位硬编码字符串。若要指示字符串不是国际化的一部分,请附加注释
/$NON-NLS-x$
,其中x是字符串的位置。在以下示例中,
“!“
是不属于国际化的硬编码字符串:

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

  • 每次都需要开头的
    /
  • 同一行中的多个字符串没有全局
    $NON-NLS$

    (例如,如果您的行有六个字符串,则必须写入六次
    /$NON-NLS-x$
书上说:

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

有关更多详细信息,请参见第页和

您可以启用/禁用此功能。在Eclipse上,转到
Project>Properties>Java编译器>错误/警告

然后选择字段
非外部化字符串(缺少/未使用的$Non-NLS$标记)


我不认为是编译器的问题,我认为是Eclipse的问题。Eclipse有自己的编译器作为JDT的一部分,用于这类事情。所以是的,它是编译器(反正是Eclipse的编译器)。那么,NLS代表什么呢?@matrixprog它似乎是“国家语言支持”“,至少这里是这么说的:为了便于评估,我认为如果代码在不同的环境中被修改,就不应该使用这种特定于IDE的标记。虽然标记不会造成任何伤害,但它会使代码变得混乱,并使维护变得稍微困难。那么,如何配置Eclipse来检测字符串文字,以便丢失//$NON-NLS-1$会引发警告或smt?NetBeans平台出于同样的目的使用//NOI18N comment关键字某些字符串在翻译时无法正常工作。如果字符串表示字符集、HTML/XML标记、正则表达式等,它们可能会改变程序的行为。很好地解释了为什么该标志被称为非NLS(无国家语言支持)。谢谢