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


320

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

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

どういう意味ですか ?

回答:


370

それらは、文字列リテラルに遭遇したときにEclipseが発する警告を沈黙させます(そして文句を言うように設定されています)。

UIメッセージは文字列リテラルとして埋め込まれるのではなく、リソースファイルからソースされる(つまり、翻訳、校正などができる)べきです。その結果、文字列リテラルを検出するようにEclipseを設定できるため、誤って外部化されていないUI文字列をコード内に残すことはありません。ただし、外部化すべきではない文字列(正規表現など)があるため、// $ NON-NLS-1 $を使用すると、その事実をコンパイラーに伝えることができます。


10
では、NLSは何の略ですか?
MatrixFrog 2010

39
@MatrixFrog "National Language Support"のようです。少なくともここでは、それを参照します:msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison

23
評価するために、コードが異なる環境で変更されている場合、そのようなIDE固有のマーカーは使用しないでください。マーカーは害を及ぼすことはありませんが、コードを散らかし、保守を少し難しくします。
migu

4
では、文字列リテラルを検出するようにEclipseをどのように構成して、// $ NON-NLS-1 $がないと警告またはsmtが発生するのでしょうか。
2012年

3
NetBeansプラットフォームは同じ目的で// NOI18Nコメントキーワードを使用します
Matt

57

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


8
フラグがNON NLS(各国語サポートなし)と呼ばれる理由を説明します。ありがとう。
Kaadzia 2013

28

NON-NLS手段の非 - N ational L anguage S upportコマンド
ウィキペディアはまた、提案している - N ative 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$同じ行内の複数の文字列にはグローバルはありません
    (たとえば、行に6つの文字列がある場合、6回記述する必要があります//$NON-NLS-x$

250ページのEMF: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)

Eclipseのプロジェクトプロパティのウィンドウ


14

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 $タグをクイックフィックスに追加します。


9

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


一部の文字列は、翻訳されたときに正しく機能しません。文字列が文字セット、HTML / XMLタグ、正規表現などを表す場合、それらはプログラムの動作を変更する可能性があります。
2012年

5

外部化されていない文字列について文句を言わないようにコンパイラーに指示し、ローカライズは必要ありません。


4
私はそれがコンパイラだとは思わない、私は文句を言うのはEclipseだと思う。
ポールトンブリン

6
Eclipseには、JDTの一部として独自のコンパイラーがあり、この種のものに使用されます。だからはい、それはコンパイラです(とにかくEclipseのコンパイラ)。
アーロンメンパー09年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.