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

4 minutos de lectura

En el código fuente de Eclipse, encontré algo de ‘$NON-NLS-1$’ en comentarios usados ​​así:

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

Qué significa eso ?

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 incrusten como cadenas literales, sino que se obtengan de un archivo de recursos (para que se puedan traducir, revisar, etc.). En consecuencia, Eclipse se puede configurar para detectar literales de cadena, de modo que no tenga que dejar accidentalmente cadenas de interfaz de usuario 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 brinda una forma de comunicar ese hecho al compilador.

  • Entonces, ¿qué significa NLS?

    – Tyler

    15 de julio de 2010 a las 20:07

  • @MatrixFrog parece ser “Soporte de idioma nacional”, al menos a eso se refiere aquí: msdn.microsoft.com/en-us/library/ms906482.aspx

    –Daniel Dickison

    12 de agosto de 2010 a las 17:54

  • Para ser evaluativo, creo que dichos marcadores específicos de IDE no deben usarse si el código se modifica en diferentes entornos. Si bien el marcador no daña, desordena el código y lo hace un poco más difícil de mantener.

    – migu

    10 de noviembre de 2011 a las 13:32


  • Entonces, ¿cómo se configura Eclipse para detectar cadenas literales, de modo que la falta de //$NON-NLS-1$ genere una advertencia o smt?

    – rpr

    8 mayo 2012 a las 14:34

  • NetBeans Platform utiliza la palabra clave de comentario //NOI18N para el mismo propósito

    – Mate

    18 mayo 2012 a las 14:17

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

  • Buena explicación de por qué la bandera se llama NON NLS (sin compatibilidad con el idioma nacional). Gracias.

    – Kaadzia

    27 de septiembre de 2013 a las 9:16

avatar de usuario
oHo

NON-NLS medio Nonortenacional Lidioma Sapoyo
Wikipedia propone también Nonortenativo Lidioma Support (NLS) pero este último no es muy usado.

NLS se trata de internacionalizar su aplicación. Eclipse ayuda a localizar cadenas codificadas de forma rígida 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 cuerda. En el siguiente ejemplo, ambos "!" 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 líder // es necesario cada vez
  • no mundial $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: marco de modelado de Eclipse en la página 250 dice:

Marcadores que no son NLS: El compilador de Java de Eclipse tiene la capacidad de marcar las cadenas no externalizadas como una advertencia o un error, para facilitar la habilitación de la compatibilidad con idiomas nacionales (NLS). El código generado por EMF no utiliza cadenas codificadas de forma rígida 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 marquen esos literales como no traducibles, para que el compilador no los marque.

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

Puede habilitar/deshabilitar esta característica. En Eclipse Neon, vaya a
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

avatar de usuario
pescadojd

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-$, está teniendo en cuenta que los usuarios no verán la cadena.

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

Si planea programar su actividad para que sea multilingüe, se recomienda activar esta opción. Y luego agregar la etiqueta &NON-NLS$ a las cadenas que son internas para su actividad. Eclipse agregará la etiqueta &NON-NLS$ en el arreglo rápido si hace clic con el botón derecho en la advertencia o el error.

Eclipse lo utiliza para indicar que no es necesario traducir una cadena, probablemente porque los usuarios de la aplicación no la verán.

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

    – yingted

    18 de marzo de 2012 a las 3:11

avatar de usuario
tod

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

  • 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.

    – yingted

    18 de marzo de 2012 a las 3:11

¿Ha sido útil esta solución?