Que signifie $NON-NLS-1$?

Dans le code source D'Eclipse, j'ai trouvé un '$ NON-NLS-1$ ' dans les commentaires utilisés comme ça:

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

Qu'est-ce que cela signifie ?

295
demandé sur paulgreg 2009-03-17 15:34:27

6 réponses

Ils font taire un avertissement Qu'Eclipse émet lorsqu'il rencontre des littéraux de chaîne (et a été configuré pour se plaindre).

L'idée est que les messages de L'interface utilisateur ne doivent pas être incorporés en tant que littéraux de chaîne, mais proviennent plutôt d'un fichier de ressources (afin qu'ils puissent être traduits, vérifiés, etc.). Par conséquent, Eclipse peut être configuré pour détecter les littéraux de chaîne, de sorte que vous n'ayez pas accidentellement laissé des chaînes d'interface utilisateur non internationalisées dans le code; cependant, il y a des chaînes qui ne devraient pas être externalisé (comme les expressions rationnelles) et ainsi, / / $NON-NLS-1$ vous donne un moyen de communiquer ce fait au compilateur.

350
répondu Aaron Maenpaa 2009-03-17 12:40:34

La chaîne n'est pas traduisible. Il indique à L'éditeur Eclipse de ne pas marquer la chaîne comme non sourcée. Ceci est important pour les applications multilingues.

53
répondu McDowell 2009-03-17 12:37:14

NON-NLS moyens Non-Nes Langue Ssoutiennent.
Wikipédia propose également Non-Nnent - Langue Sppuyer (NLS), mais cette dernière n'est pas très utilisé.

NLS est sur l'internationalisation de votre application. Eclipse aide à localiser les chaînes codées en dur dans votre code. Pour indiquer qu'une chaîne ne fait pas partie de l'internationalisation, ajoutez le commentaire //$NON-NLS-x$ où x est la position de la chaîne. Dans l'exemple suivant, les deux "!" sont des chaînes codées en dur ne faisant pas partie de l'internationalisation:

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

Notes:

  • le premier // est nécessaire à chaque fois
  • non global $NON-NLS$ pour plusieurs chaînes dans la même ligne
    (par exemple, si votre ligne a six cordes, vous devez écrire six fois //$NON-NLS-x$)

Le livre FEM: Eclipse Modeling Framework à la page 250 dit:

Non-NLS Markers - le compilateur Java D'Eclipse a la capacité de signaler les chaînes non externalisées comme un avertissement ou une erreur, afin de faciliter l'activation de la prise en charge de la langue nationale (NLS). Le code généré par EMF n'utilise pas de chaînes codées en dur pour les messages que l'utilisateur verra; cependant, les littéraux de chaînes apparaissent fréquemment, par exemple, comme clés pour la recherche de chaînes externalisées dans un fichier de propriétés. Cette propriété contrôle s'il faut inclure des commentaires qui marquent ces littéraux comme non traduisibles, de sorte que le compilateur ne drapeau.

Pour plus de détails, voir aussi les pages L'interface graphique du générateur et comment internationaliser votre Plug-In Eclipse.

Vous pouvez activer / désactiver cette fonctionnalité. Sur Eclipse Néon aller à
Project > Properties > Java Compiler > Errors/Warnings
et sélectionnez le champ
Non-externalized strings (missing/unused $NON-NLS$ tag)

Fenêtre des propriétés du projet sur Eclipse

19
répondu olibre 2016-10-26 15:47:33

Si vous êtes un développeur Android. Toutes les chaînes que l'utilisateur peut voir doivent être dans le fichier de ressources / res / values / strings.xml pour lire les chaînes.fichier xml dans le code que vous utilisez R. string.. En ajoutant la balise / / $NON-NLS -$, vous remarquez que la chaîne ne sera pas vue par les utilisateurs.

L'avertissement dans Eclipse Helios peut être allumé à Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Si vous prévoyez de programmer votre activité en plusieurs langues, il serait recommandé de l'activer. Et puis en ajoutant le & NON-NLS$ tag aux chaînes qui sont internes à votre activité. Eclipse ajoutera & non-nls$ tag dans le Quick-fix si vous faites un clic droit sur l'avertissement ou l'erreur.

14
répondu fishjd 2013-06-25 19:46:32

Il est utilisé par Eclipse pour indiquer qu'une chaîne n'a pas besoin d'être traduite, probablement parce qu'elle ne sera pas vue par les utilisateurs de l'application.

9
répondu Kees de Kooter 2009-03-17 12:38:35

Il indique au compilateur de ne pas se plaindre d'une chaîne non externalisée, et qu'elle ne nécessite pas de localisation.

5
répondu Björn 2013-09-16 21:10:35