Was bedeutet $ NON-NLS-1 $?

320

Im Eclipse-Quellcode habe ich in solchen Kommentaren einige '$ NON-NLS-1 $' gefunden:

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

Was bedeutet das ?

Paulgreg
quelle

Antworten:

370

Sie bringen eine Warnung zum Schweigen, die Eclipse ausgibt, wenn es auf String-Literale stößt (und so konfiguriert wurde, dass sie sich beschwert).

Die Idee ist, dass UI-Nachrichten nicht als String-Literale 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 externalisierte UI-Zeichenfolgen im Code belassen. Es gibt jedoch Zeichenfolgen, die nicht externalisiert werden sollten (z. B. reguläre Ausdrücke). // $ NON-NLS-1 $ bietet Ihnen daher die Möglichkeit, diese Tatsache dem Compiler mitzuteilen.

Aaron Maenpaa
quelle
10
Wofür steht NLS?
MatrixFrog
39
@MatrixFrog es scheint "National Language Support" zu sein, zumindest ist es das, worauf es hier Bezug nimmt: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison
23
Zur Bewertung denke ich, dass solche IDE-spezifischen Marker nicht verwendet werden sollten, wenn der Code in verschiedenen Umgebungen geändert wird. Während der Marker keinen Schaden anrichtet, überfrachtet er den Code und erschwert die Wartung etwas.
Migu
4
Wie konfigurieren Sie Eclipse so, dass Zeichenfolgenliterale erkannt werden, sodass fehlende // $ NON-NLS-1 $ eine Warnung oder eine SMS auslösen?
rpr
3
NetBeans Platform verwendet // NOI18N Kommentar Schlüsselwort für den gleichen Zweck
Libor Jelinek
57

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

McDowell
quelle
8
Gute Erklärung, warum die Flagge NON NLS (No National Language Support) heißt. Vielen Dank.
Kaadzia
28

NON-NLSMittel Non - N ational L anguage S upport .
Wikipedia schlägt auch nicht - N tive L anguage S upport (NLS) , aber das letzte ist nicht sehr verwendet.

Bei NLS geht es darum, Ihre Bewerbung zu internationalisieren. Eclipse hilft dabei, fest codierte Zeichenfolgen in Ihrem Code zu finden. Um anzuzeigen, dass eine Zeichenfolge nicht Teil der Internationalisierung ist, fügen Sie den Kommentar hinzu, //$NON-NLS-x$wobei x die Position der Zeichenfolge ist. Im folgenden Beispiel handelt es sich bei beiden "!"um fest codierte Zeichenfolgen, die nicht Teil der Internationalisierung sind:

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

Anmerkungen:

  • Die Führung //ist jedes Mal notwendig
  • Kein Global $NON-NLS$für mehrere Zeichenfolgen innerhalb derselben Zeile
    (z. B. wenn Ihre Zeile sechs Zeichenfolgen enthält, müssen Sie sechs Mal schreiben //$NON-NLS-x$).

Das Buch EMF: Eclipse Modeling Framework auf Seite 250 lautet:

Nicht-NLS-Marker - Der Java-Compiler von Eclipse kann nicht externalisierte Zeichenfolgen als Warnung oder Fehler kennzeichnen , um die Aktivierung der National Language Support (NLS) zu erleichtern. EMF-generierter Code verwendet keine fest codierten Zeichenfolgen für Nachrichten, die der Benutzer sehen wird. Zeichenfolgenliterale werden jedoch häufig als Schlüssel für die Suche nach externen Zeichenfolgen in einer Eigenschaftendatei angezeigt. 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-Benutzeroberfläche und Informationen zur Internationalisierung Ihres Eclipse-Plug-Ins .

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

Fenster der Projekteigenschaften in Eclipse

olibre
quelle
14

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 R.string zu lesen. Durch Hinzufügen des Tags // $ NON-NLS- $ sind Sie Beachten Sie, dass die Zeichenfolge von Benutzern nicht gesehen wird.

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

Wenn Sie planen, 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 der Schnellkorrektur das Tag & NON-NLS $ hinzu, wenn Sie mit der rechten Maustaste auf die Warnung oder den Fehler klicken.

fishjd
quelle
9

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.

Kees de Kooter
quelle
Einige Zeichenfolgen funktionieren nicht richtig, wenn sie übersetzt werden. Wenn eine Zeichenfolge einen Zeichensatz, ein HTML / XML-Tag, einen regulären Ausdruck usw. darstellt, können sie das Verhalten des Programms ändern.
Yingted
5

Es weist den Compiler an, sich nicht über eine nicht externalisierte Zeichenfolge zu beschweren, und dass keine Lokalisierung erforderlich ist.

Björn
quelle
4
Ich denke nicht, dass es der Compiler ist, ich denke, dass es Eclipse ist, der sich beschwert.
Paul Tomblin
6
Eclipse hat einen eigenen Compiler als Teil von JDT, den es für solche Dinge verwendet. Also ja, es ist der Compiler (Eclipse's Compiler sowieso).
Aaron Maenpaa