web-dev-qa-db-ja.com

$ NON-NLS-1 $はどういう意味ですか?

Eclipseのソースコードでは、そのように使用されるコメントに「$ NON-NLS-1 $」が見つかりました。

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

どういう意味ですか ?

310
paulgreg

彼らは、文字列リテラルに遭遇したときに文句を言うようにEclipseが出す警告を黙らせます。

考えは、UIメッセージを文字列リテラルとして埋め込むのではなく、リソースファイルから取得する必要があるということです(そのため、メッセージは翻訳、校正などが可能です)。そのため、Eclipseは文字列リテラルを検出するように構成できるため、コードに誤って外部化されていないUI文字列が残されることはありません。ただし、外部化されるべきではない文字列(正規表現など)があるため、// $ NON-NLS-1 $はその事実をコンパイラに伝える方法を提供します。

364
Aaron Maenpaa

文字列は翻訳できません。これは、Eclipseエディターに、ストリングをリソースなしとしてフラグ付けしないように指示します。これは多言語アプリケーションにとって重要です。

53
McDowell

NON-NLSは、Non-NationalLanguageSupport
Wikipedia も提案しますNon-NativeLanguageSupport(NLS)この最後のものはあまり使用されません。

NLSは、アプリケーションの国際化に関するものです。 Eclipseは、コード内のハードコーディングされた文字列を見つけるのに役立ちます。文字列が国際化の一部ではないことを示すには、コメント//$NON-NLS-x$を追加します。xは文字列の位置です。次の例では、両方の"!"は国際化の一部ではないハードコードされた文字列です。

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

ノート:

  • 先頭に//が必要です
  • 同じ行内の複数の文字列に対してグローバル$NON-NLS$はありません
    (たとえば、行に6つの文字列がある場合、//$NON-NLS-x$を6回記述する必要があります)

書籍 EMF:250ページのEclipse Modeling Framework のコメント:

NLS以外のマーカー—EclipseのJavaコンパイラには、外部化されていない文字列に警告またはエラーとしてフラグを立てて、各国語サポート(NLS)の有効化を促進します。 EMFで生成されたコードは、ユーザーに表示されるメッセージにハードコードされた文字列を使用しません。ただし、たとえば、プロパティファイル内の外部化された文字列を検索するためのキーとして、文字列リテラルは頻繁に表示されます。このプロパティは、これらのリテラルを翻訳不可としてマークするコメントを含めるかどうかを制御し、コンパイラがフラグを付けないようにします。

詳細については、ページ ジェネレータGUI および Eclipseプラグインの国際化方法 も参照してください。

この機能を有効/無効にすることができます。 Eclipse Neonで
Project > Properties > Java Compiler > Errors/Warnings
フィールドを選択します
Non-externalized strings (missing/unused $NON-NLS$ tag)

Window of the Project Properties on Eclipse

24
olibre

あなたがAndroid開発者である場合。 R.stringを使用するコードでstrings.xmlファイルを読み取るには、ユーザーに表示されるすべての文字列がリソースファイル/res/values/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 $タグを追加します。

14
fishjd

これは、おそらくアプリケーションのユーザーには表示されないため、文字列を翻訳する必要がないことを示すためにEclipseによって使用されます。

9
Kees de Kooter

外部化されていない文字列について文句を言わないように、またローカライズを必要としないことをコンパイラに伝えます。

5
Björn