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

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

这是什么意思?


当前回答

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

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

其他回答

NON-NLS意为非国家语言支持。 维基百科还提出了非母语语言支持(NLS),但最后一项并不常用。

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

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

注:

每次都必须使用前导// 对于同一行中的多个字符串,没有全局$NON-NLS$ (例如,如果你的行有6个字符串,你必须写6次//$NON-NLS-x$)

《EMF: Eclipse建模框架》一书第250页说:

Non-NLS Markers— Eclipse's Java compiler has the ability to flag non-externalized strings as a warning or error, in order to facilitate enablement of National Language Support (NLS). EMF-generated code does not use hard coded strings for messages that the user will see; however, string literals do appear frequently, for example, as keys for lookup of externalized strings in a property file. This property controls whether to include comments that mark those literals as non-translatable, so that the compiler will not flag them.

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

您可以启用/禁用此特性。关于日食霓虹灯转到 项目>属性> Java编译器>错误/警告 然后选择字段 非外部化字符串(缺少/未使用$NON-NLS$标签)

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

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

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

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

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