$NON-NLS-1$ とはどういう意味ですか?
-
19-08-2019 - |
質問
Eclipse ソース コードで、コメント内に次のように使用されている '$NON-NLS-1$' を見つけました。
private String toolTip = ""; //$NON-NLS-1$
それはどういう意味ですか ?
解決
Eclipseが文字列リテラルに遭遇すると警告を発します(文句を言うように設定されています)。
アイデアは、UIメッセージを文字列リテラルとして埋め込むのではなく、リソースファイルから取得する必要があるということです(そのため、翻訳、校正などを行うことができます)。そのため、Eclipseは文字列リテラルを検出するように構成できるため、コードに誤って外部化されていないUI文字列が残されることはありません。ただし、外部化すべきではない文字列(正規表現など)があるため、// $ NON-NLS-1 $を使用すると、その事実をコンパイラに伝えることができます。
他のヒント
文字列は翻訳できません。これは、Eclipseエディターに、ストリングをリソースなしとしてフラグ付けしないように指示します。これは多言語アプリケーションにとって重要です。
NON-NLS
は、 非 - N 国民 L 言語 S サポート。
ウィキペディアは、 なし < em>- N ネイティブ L 言語 S サポート(NLS)ですが、この最後のものはあまり使用されていません。
NLS は、アプリケーションの国際化に関するものです。 Eclipseは、コード内のハードコーディングされた文字列を見つけるのに役立ちます。文字列が国際化の一部ではないことを示すには、コメント//$NON-NLS-x$
を追加します。xは文字列の位置です。次の例では、両方の"!"
は国際化の一部ではないハードコーディングされた文字列です。
public String foo(String key) {
return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
}
注:
- 先頭の
//
は毎回必要です - 同じ行内の複数の文字列に対してグローバル
$NON-NLS$
はありません
(たとえば、行に6つの文字列がある場合、Project > Properties > Java Compiler > Errors/Warnings
を6回記述する必要があります)
書籍 EMF:Eclipse Modeling Frameworkページ250 のコメント:
NLS以外のマーカー<!>#8212; EclipseのJavaコンパイラには、各国語サポート(NLS)の有効化を促進するために、外部化されていない文字列に警告またはエラーとしてフラグを立てる機能があります。 EMFで生成されたコードは、ユーザーに表示されるメッセージにハードコードされた文字列を使用しません。ただし、たとえば、プロパティファイル内の外部化された文字列を検索するためのキーとして、文字列リテラルは頻繁に表示されます。このプロパティは、これらのリテラルを翻訳不可としてマークするコメントを含めるかどうかを制御します。これにより、コンパイラはフラグを付けません。
詳細については、ジェネレータGUI および Eclipseプラグインを国際化する方法。
この機能を有効/無効にすることができます。 Eclipse Neonで
に移動します
Non-externalized strings (missing/unused $NON-NLS$ tag)
フィールドを選択します
<=>
あなたが 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$ タグを追加します。
文字列を翻訳する必要がないことを示すためにEclipseによって使用されます。おそらく、アプリケーションのユーザーには表示されないためです。
外部化されていない文字列について文句を言わないようにコンパイラに伝え、ローカライズを必要としないこと。