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

时间:2009-03-17 12:34:27

标签: java eclipse eclipse-rcp

在Eclipse源代码中,我发现在这样的评论中有一些'$ NON-NLS-1 $':

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

这是什么意思?

6 个答案:

答案 0 :(得分:359)

他们在遇到字符串文字(并且已经配置为抱怨)时会发出Eclipse发出的警告。

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

答案 1 :(得分:53)

字符串不可翻译。它告诉Eclipse编辑器不要将字符串标记为unresourced。这对多语言应用程序非常重要。

答案 2 :(得分:20)

NON-NLS表示 - N ational L anguage S upport
Wikipedia还建议 - N L anguage S upport (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$

这本书EMF: Eclipse Modeling Framework at page 250说:

  

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

有关详情,请参阅The Generator GUIHow to Internationalize your Eclipse Plug-In页面。

您可以启用/禁用此功能。在Eclipse Neon上转到
Project > Properties > Java Compiler > Errors/Warnings
并选择字段
Non-externalized strings (missing/unused $NON-NLS$ tag)

Window of the Project Properties on Eclipse

答案 3 :(得分:14)

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

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

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

答案 4 :(得分:9)

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

答案 5 :(得分:5)

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