¿Qué significa $ NON-NLS-1 $?

320

En el código fuente de Eclipse, he encontrado algunos '$ NON-NLS-1 $' en comentarios que se usan así:

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

Qué significa eso ?

paulgreg
fuente

Respuestas:

370

Silencian una advertencia que Eclipse emite cuando encuentra literales de cadena (y se ha configurado para quejarse).

La idea es que los mensajes de la interfaz de usuario no se deben incrustar como literales de cadena, sino que se deben obtener de un archivo de recursos (para que puedan traducirse, revisarse, etc.). En consecuencia, Eclipse se puede configurar para detectar literales de cadena, de modo que no deje accidentalmente cadenas de IU no externalizadas en el código; sin embargo, hay cadenas que no deben externalizarse (como expresiones regulares) y, por lo tanto, // $ NON-NLS-1 $ le ofrece una forma de comunicar ese hecho al compilador.

Aaron Maenpaa
fuente
10
Entonces, ¿qué significa NLS?
MatrixFrog
39
@MatrixFrog parece ser "Soporte de idioma nacional", al menos a eso se refiere aquí: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison
23
Para ser evaluativo, creo que dichos marcadores específicos de IDE no deberían usarse si el código se altera en diferentes entornos. Si bien el marcador no hace daño, satura el código y lo hace un poco más difícil de mantener.
migu
44
Entonces, ¿cómo configura Eclipse para detectar literales de cadena, de modo que falte // $ NON-NLS-1 $ generaría una advertencia o smt?
rpr
3
La plataforma NetBeans utiliza la palabra clave de comentario // NOI18N para el mismo propósito
Matt
57

La cadena no es traducible. Le dice al editor de Eclipse que no marque la cadena como sin recursos. Esto es importante para aplicaciones multilingües.

McDowell
fuente
8
Buena explicación de por qué la bandera se llama NON NLS (No National Language Support). Gracias.
Kaadzia
28

NON-NLSmedios para no - N ational L anguage S upport .
Wikipedia propone también no - N ativa L anguage S poyo (NLS), pero esto último no es muy utilizado.

NLS se trata de internacionalizar su aplicación. Ayuda de Eclipse para localizar cadenas codificadas en su código. Para indicar que una cadena no es parte de la internacionalización, agregue el comentario //$NON-NLS-x$donde x es la posición de la cadena. En el siguiente ejemplo, ambas "!"son cadenas codificadas que no forman parte de la internacionalización:

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

Notas:

  • el liderazgo //es necesario cada vez
  • no global $NON-NLS$para múltiples cadenas dentro de la misma línea
    (por ejemplo, si su línea tiene seis cadenas, debe escribir seis veces //$NON-NLS-x$)

El libro EMF: Eclipse Modeling Framework en la página 250 dice:

Marcadores que no son NLS: el compilador Java de Eclipse tiene la capacidad de marcar cadenas no externalizadas como advertencia o error, a fin de facilitar la habilitación del Soporte de idioma nacional (NLS). El código generado por EMF no utiliza cadenas codificadas para los mensajes que verá el usuario; sin embargo, los literales de cadena aparecen con frecuencia, por ejemplo, como claves para la búsqueda de cadenas externalizadas en un archivo de propiedades. Esta propiedad controla si incluir comentarios que marcan esos literales como no traducibles, de modo que el compilador no los marque.

Para obtener más detalles, consulte también las páginas La GUI del generador y Cómo internacionalizar su complemento Eclipse .

Puede habilitar / deshabilitar esta función. En Eclipse Neon, vaya
Project > Properties > Java Compiler > Errors/Warnings
y seleccione el campo
Non-externalized strings (missing/unused $NON-NLS$ tag)

Ventana de las propiedades del proyecto en Eclipse

olibre
fuente
14

Si eres un desarrollador de Android. Todas las cadenas que el usuario pueda ver deben estar en el archivo de recursos /res/values/strings.xml para leer el archivo strings.xml en el código que usa R.string. Al agregar la etiqueta // $ NON-NLS- $ usted es observando que la cadena no será vista por los usuarios.

La advertencia en Eclipse Helios puede activarse en Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Si planea programar su actividad para que sea en varios idiomas, se recomienda activar esto. Y luego agregue la etiqueta $ NON-NLS a las cadenas que son internas de su actividad. Eclipse agregará la etiqueta $ NON-NLS en la solución rápida si hace clic derecho en la advertencia o error.

fishjd
fuente
9

Eclipse lo utiliza para indicar que una cadena no necesita ser traducida, probablemente porque los usuarios de la aplicación no la verán.

Kees de Kooter
fuente
Algunas cadenas no funcionan correctamente cuando se traducen. Si una cadena representa un conjunto de caracteres, una etiqueta HTML / XML, una expresión regular, etc., podrían cambiar el comportamiento del programa.
gritó
5

Le dice al compilador que no se queje de una cadena no externalizada, y que no requiere localización.

Björn
fuente
44
No creo que sea el compilador, creo que es Eclipse el que se queja.
Paul Tomblin
66
Eclipse tiene su propio compilador como parte de JDT que utiliza para este tipo de cosas. Entonces sí, es el compilador (el compilador de Eclipse de todos modos).
Aaron Maenpaa