在Eclipse源代码中,我在这样的注释中找到了一些'$ NON-NLS-1 $':
private String toolTip =""; //$NON-NLS-1$
这意味着什么 ?
它们使Eclipse在遇到字符串文字时发出警告(并且已配置为抱怨),从而使警告消失。
这个想法是UI消息不应作为字符串文字嵌入,而应从资源文件中获取(以便可以进行翻译,校对等)。因此,可以将Eclipse配置为检测字符串文字,这样您就不会在代码中无意中留下未外部化的UI字符串。但是,有些字符串不应该被外部化(例如正则表达式),因此// $ NON-NLS-1 $提供了一种将事实传达给编译器的方法。
好吧,那么,它只在日食上吗? IntelliJ Idea或Netbeans呢?
据我所知,它是Eclipse的东西,尽管其他IDE可能也选择了它。
那么,NLS代表什么呢?
@MatrixFrog似乎是"国家语言支持",至少在这里指的是:msdn.microsoft.com/en-us/library/ms906482.aspx
为了进行评估,我认为如果在不同环境中更改代码,则不应使用此类特定于IDE的标记。虽然标记没有害处,但会使代码混乱,并使维护起来稍难。
因此,如何配置Eclipse以检测字符串文字,以便缺少// $$ NON-NLS-1 $会发出警告或smt?
NetBeans平台出于//相同目的使用// NOI18N注释关键字
@rpr要将Eclipse配置为警告您/// $ NON-NLS-1 $,请在Window-> Java-> Compiler-> Errors / Warnings下查看。在"代码样式"下拉列表下方。
我假设$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$仅使一行中的3个字符串静音。您是否可以将$NON-NLS$放在一行中使所有字符串文字静默?
该字符串不可翻译。它告诉Eclipse编辑器不要将字符串标记为非资源。这对于多语言应用程序很重要。
很好地解释了为什么将该标志称为NON NLS(无本国语言支持)。谢谢。
NON-NLS表示非本国语言支持。
维基百科还提出了非本国语言支持(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$)
第250页的《 EMF:Eclipse建模框架》一书说:
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插件"页面。
您可以启用/禁用此功能。在Eclipse Neon上,转到
Project > Properties > Java Compiler > Errors/Warnings
然后选择字段
Non-externalized strings (missing/unused $NON-NLS$ tag)
如果您是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 $标签。
Eclipse使用它来指示不需要翻译字符串,这可能是因为应用程序的用户不会看到它。
某些字符串在翻译后无法正常工作。如果字符串表示字符集,HTML / XML标记,正则表达式等,则它们可能会更改程序的行为。
它告诉编译器不要抱怨未外部化的字符串,并且不需要本地化。
我不认为它是编译器,我认为它抱怨的Eclipse。
Eclipse作为JDT的一部分有自己的编译器,它用于这种事情。是的,它是编译器(仍然是Eclipses编译器)。