web-dev-qa-db-de.com

Was bedeutet $ NON-NLS-1 $?

Im Eclipse-Quellcode habe ich einige '$ NON-NLS-1 $' in Kommentaren gefunden, die so verwendet wurden:

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

Was bedeutet das ?

310
paulgreg

Sie unterdrücken eine Warnung, die Eclipse ausgibt, wenn Zeichenfolgenliterale gefunden werden (und die so konfiguriert wurde, dass sie sich beschwert).

Die Idee ist, dass UI-Nachrichten nicht als Zeichenfolgenliterale eingebettet werden sollten, sondern aus einer Ressourcendatei stammen (damit sie übersetzt, geprüft usw. werden können). Folglich kann Eclipse so konfiguriert werden, dass Zeichenfolgenliterale erkannt werden, sodass Sie nicht versehentlich nicht externe Zeichenfolgen für die Benutzeroberfläche im Code belassen. Es gibt jedoch Zeichenfolgen, die nicht ausgelagert werden sollten (z. B. reguläre Ausdrücke). Mit // $ NON-NLS-1 $ können Sie dem Compiler diese Tatsache mitteilen.

364
Aaron Maenpaa

Die Zeichenfolge ist nicht übersetzbar. Der Eclipse-Editor wird angewiesen, die Zeichenfolge nicht als nicht verfügbar zu kennzeichnen. Dies ist wichtig für mehrsprachige Anwendungen.

53
McDowell

NON-NLS Bedeutet Non [ ~ # ~] n [~ # ~] ationale [~ # ~] l [~ # ~] Sprache [~ # ~] s [~ # ~] uppport.
Wikipedia schlägt auch Non [~ # ~] n [~ # ~] ative [~ # ~] l [~ # ~] Sprache [~ # ~] s [~ # ~] upport (NLS) aber dieses letzte wird nicht sehr benutzt.

In [~ # ~] nls [~ # ~] geht es um die Internationalisierung Ihrer Anwendung. Eclipse-Hilfe zum Auffinden von fest codierten Zeichenfolgen in Ihrem Code. Um anzuzeigen, dass ein String nicht Teil der Internationalisierung ist, fügen Sie den Kommentar //$NON-NLS-x$ Hinzu, wobei x die Position des Strings ist. Im folgenden Beispiel sind beide "!" Fest codierte Zeichenfolgen, die nicht Teil der Internationalisierung sind:

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

Anmerkungen:

  • der führende // ist jedes Mal erforderlich
  • kein globales $NON-NLS$ für mehrere Zeichenfolgen in derselben Zeile
    (Wenn Ihre Zeile beispielsweise sechs Zeichenfolgen enthält, müssen Sie sechs Mal //$NON-NLS-x$ schreiben.)

Das Buch EMF: Eclipse Modeling Framework auf Seite 25 sagt:

Nicht-NLS-Marker - Der Eclipse-Compiler Java) kann nicht ausgelagerte Zeichenfolgen als Warnung oder Fehler kennzeichnen. EMF-generierter Code verwendet keine fest codierten Zeichenfolgen für Nachrichten, die vom Benutzer angezeigt werden, jedoch werden Zeichenfolgenliterale häufig angezeigt, beispielsweise als Schlüssel zum Nachschlagen von externen Zeichenfolgen in Eine Eigenschaftendatei: Diese Eigenschaft steuert, ob Kommentare eingefügt werden sollen, die diese Literale als nicht übersetzbar markieren, damit der Compiler sie nicht kennzeichnet.

Weitere Informationen finden Sie auch auf den Seiten Die Generator-GUI und So internationalisieren Sie Ihr Eclipse-Plug-In .

Sie können diese Funktion aktivieren/deaktivieren. Auf Eclipse Neon gehen Sie zu
Project > Properties > Java Compiler > Errors/Warnings
und wählen Sie das Feld aus
Non-externalized strings (missing/unused $NON-NLS$ tag)

Window of the Project Properties on Eclipse

24
olibre

Wenn Sie ein Android Entwickler sind. Alle Zeichenfolgen, die der Benutzer möglicherweise sieht, sollten sich in der Ressourcendatei /res/values/strings.xml befinden, um die Datei strings.xml in dem von Ihnen verwendeten Code zu lesen. R.string .. Indem Sie das Tag // $ NON-NLS- $ hinzufügen, stellen Sie fest, dass der String für Benutzer nicht sichtbar ist.

Die Warnung in Eclipse Helios kann bei Window -> preferences -> Java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag) aktiviert werden.

Wenn Sie vorhaben, Ihre Aktivität mehrsprachig zu programmieren, wird empfohlen, diese Option zu aktivieren. Fügen Sie dann das & NON-NLS $ -Tag zu Zeichenfolgen hinzu, die für Ihre Aktivität intern sind. Eclipse fügt & NON-NLS $ -Tag in die Schnellkorrektur ein, wenn Sie mit der rechten Maustaste auf die Warnung oder den Fehler klicken.

14
fishjd

Es wird von Eclipse verwendet, um anzuzeigen, dass eine Zeichenfolge nicht übersetzt werden muss, wahrscheinlich, weil sie von den Benutzern der Anwendung nicht gesehen wird.

9
Kees de Kooter

Er weist den Compiler an, sich nicht über einen nicht ausgelagerten String zu beschweren, und dass keine Lokalisierung erforderlich ist.

5
Björn