2009-03-17 10 views
285

Nel codice sorgente Eclipse, ho trovato un po '$ NON NLS-1 $' nei commenti usato così:

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

Che cosa vuol dire?

risposta

337

Silenziano un avviso che Eclipse emette quando incontra stringhe letterali (ed è stato configurato per lamentarsi).

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

+1

Ok, quindi è solo su eclissi? Che ne pensi di IntelliJ Idea o Netbeans? – paulgreg

+0

Per quanto ne so, si tratta di una cosa di Eclipse, anche se altri IDE potrebbero averlo rilevato. –

+6

Quindi, cosa significa NLS? – MatrixFrog

49

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

+5

buona spiegazione sul motivo per cui la bandiera è chiamata NON NLS (No National Language Support). Grazie. – Kaadzia

5

Indica al compilatore di non lamentarsi di una stringa non esternalizzata e di non richiedere la localizzazione.

+3

Non penso che sia il compilatore, penso che sia Eclipse a lamentarsi. –

+6

Eclipse ha il proprio compilatore come parte di JDT che usa per questo genere di cose. Quindi sì, è il compilatore (il compilatore di Eclipse comunque). –

9

E 'utilizzato da Eclipse per indicare che una stringa non ha bisogno di essere tradotta, probabilmente perché non verrà vista dagli utenti dell'applicazione.

+0

Alcune stringhe non funzionano correttamente quando sono tradotte. Se una stringa rappresenta un set di caratteri, un tag HTML/XML, un'espressione regolare, ecc., Potrebbero cambiare il comportamento del programma. – yingted

14

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

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

Se si prevede di programmare la propria attività in multi lingua, è consigliabile attivarla. E quindi aggiungendo il tag & NON-NLS $ alle stringhe interne all'attività dell'utente. Eclipse aggiungerà il tag & NON-NLS $ nella soluzione rapida se si fa clic con il pulsante destro del mouse sull'avviso o errore.

15

NON-NLS significa non - N azionale L anguage S upport.
Wikipedia propone anche non - N ativo L anguage S upport (NLS), ma quest'ultima non è molto usato.

NLS significa internazionalizzare la vostra applicazione. Eclipse aiuta a individuare le stringhe codificate nel codice. Per indicare che una stringa non fa parte dell'internazionalizzazione, aggiungi il commento //$NON-NLS-x$ dove x è la posizione della stringa.Sul seguente esempio sia "!" sono stringhe hard-coded non fa parte del processo di internazionalizzazione:

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

Note:

  • leader // è necessario ogni volta
  • no global $NON-NLS$ per più stringhe all'interno del stessa riga
    (ad esempio se la tua linea ha sei stringhe, devi scrivere sei volte //$NON-NLS-x$)

Il libro EMF: Eclipse Modeling Framework at page 250 dice:

non NLS compilatore Java di Markers- Eclipse ha la capacità di bandiera stringhe non esternalizzate come un avvertimento o un errore, al fine di facilitare l'abilitazione del National Language Support (NLS). Il codice generato da EMF non utilizza stringhe codificate per i messaggi che l'utente vedrà; tuttavia, i valori letterali di stringa vengono visualizzati frequentemente, ad esempio come chiavi per la ricerca di stringhe esterne in un file di proprietà. Questa proprietà controlla se includere commenti che contrassegnano quei valori letterali come non traducibili, in modo che il compilatore non li segnali.

Per ulteriori dettagli, vedere anche le pagine The Generator GUI e How to Internationalize your Eclipse Plug-In.

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

Window of the Project Properties on Eclipse