Cosa significa $ NON-NLS-1 $?


320

Nel codice sorgente di Eclipse, ho trovato alcuni '$ NON-NLS-1 $' nei commenti usati in questo modo:

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

Cosa significa ?

Risposte:


370

Silenziano un avvertimento che Eclipse emette quando incontra letterali di stringa (ed è stato configurato per lamentarsi).

L'idea è che i messaggi dell'interfaccia utente non devono essere incorporati come valori letterali di stringa, ma piuttosto provenienti da un file di risorse (in modo che possano essere tradotti, verificati, ecc.). Di conseguenza, Eclipse può essere configurato per rilevare valori letterali di stringa, in modo da non avere accidentalmente lasciato stringhe UI non esternalizzate nel codice; tuttavia, ci sono stringhe che non dovrebbero essere esternalizzate (come regexps) e quindi // $ NON-NLS-1 $ ti dà un modo per comunicare questo fatto al compilatore.


10
Cosa significa NLS?
MatrixFrog,

39
@MatrixFrog sembra essere "Supporto per la lingua nazionale", almeno questo è ciò a cui si fa riferimento qui: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison,

23
Per essere valutativi, penso che tali marcatori specifici IDE non dovrebbero essere usati se il codice viene modificato in ambienti diversi. Mentre il marker non danneggia, ingombra il codice e ne rende leggermente più difficile la manutenzione.
migu,

4
Quindi, come si configura Eclipse per rilevare i valori letterali delle stringhe, in modo tale che // $ NON-NLS-1 $ mancante genererebbe un avviso o smt?
rpr

3
La piattaforma NetBeans utilizza la parola chiave di commento // NOI18N per lo stesso scopo
Matt,

57

La stringa non è traducibile. Indica all'editor Eclipse di non contrassegnare la stringa come non fornita. Questo è importante per le applicazioni multilingue.


8
Buona spiegazione del perché la bandiera si chiama NON NLS (nessun supporto linguistico nazionale). Grazie.
Kaadzia,

28

NON-NLSmezzi non - N azionale L anguage S upporto .
Wikipedia propone anche non - N ative L anguage S upport (NLS), ma quest'ultimo non è molto usato.

NLS riguarda l'internazionalizzazione della tua applicazione. Eclipse aiuta a individuare stringhe codificate nel codice. Per indicare che una stringa non fa parte dell'internazionalizzazione, aggiungi il commento in //$NON-NLS-x$cui x è la posizione della stringa. Nell'esempio seguente entrambe "!"sono stringhe codificate che non fanno parte dell'internazionalizzazione:

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

Appunti:

  • il comando //è necessario ogni volta
  • nessun globale $NON-NLS$per più stringhe all'interno della stessa riga
    (ad es. se la tua riga ha sei stringhe, devi scrivere sei volte //$NON-NLS-x$)

Il libro EMF: Eclipse Modeling Framework a pagina 250 dice:

Marker non NLS: il compilatore Java di Eclipse ha la capacità di contrassegnare le stringhe non esternalizzate come avvertenza o errore, al fine di facilitare l'abilitazione del supporto linguistico nazionale (NLS). Il codice generato da EMF non utilizza stringhe codificate per i messaggi che l'utente vedrà; tuttavia, i letterali stringa appaiono frequentemente, ad esempio, come chiavi per la ricerca di stringhe esternalizzate in un file di proprietà. Questa proprietà controlla se includere commenti che contrassegnano tali valori letterali come non traducibili, in modo che il compilatore non li contrassegni.

Per ulteriori dettagli, consultare anche le pagine La GUI di Generator e Come internazionalizzare il plug-in Eclipse .

È possibile abilitare / disabilitare questa funzione. Su Eclipse Neon vai a
Project > Properties > Java Compiler > Errors/Warnings
e seleziona il campo
Non-externalized strings (missing/unused $NON-NLS$ tag)

Finestra delle proprietà del progetto su Eclipse


14

Se sei uno sviluppatore Android. Tutte le stringhe che l'utente può vedere dovrebbero essere nel file di risorse /res/values/strings.xml per leggere il file strings.xml nel codice che usi R.string .. Aggiungendo il tag // $ NON-NLS- $ sei notando che la stringa non sarà vista dagli utenti.

L'avviso in Eclipse Helios può essere attivato alle Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Se stai pianificando di programmare la tua attività in più lingue, ti consigliamo di attivarla. E quindi aggiungendo il tag & NON-NLS $ alle stringhe interne alla tua attività. Eclipse aggiungerà il tag & NON-NLS $ nella correzione rapida se si fa clic con il tasto destro del mouse sull'avviso o sull'errore.


9

Viene utilizzato da Eclipse per indicare che una stringa non deve essere tradotta, probabilmente perché non verrà visualizzata dagli utenti dell'applicazione.


Alcune stringhe non funzionano correttamente quando vengono tradotte. Se una stringa rappresenta un set di caratteri, tag HTML / XML, regex, ecc., Potrebbe modificare il comportamento del programma.
gridò il

5

Indica al compilatore di non lamentarsi di una stringa non esternalizzata e che non richiede localizzazione.


4
Non credo sia il compilatore, penso che sia Eclipse a lamentarsi.
Paul Tomblin,

6
Eclipse ha il proprio compilatore come parte di JDT che utilizza per questo tipo di cose. Quindi sì, è il compilatore (il compilatore di Eclipse comunque).
Aaron Maenpaa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.