web-dev-qa-db-fra.com

Que signifie $ NON-NLS-1 $?

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

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

Qu'est-ce que ça veut dire ?

310
paulgreg

Ils désactivent 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 d'interface utilisateur ne doivent pas être incorporés sous forme de littéraux de chaîne, mais provenir 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 manière à ne pas laisser accidentellement des chaînes d'interface utilisateur non externalisées dans le code; Cependant, certaines chaînes ne doivent pas être externalisées (telles que les expressions rationnelles). // $ NON-NLS-1 $ vous permet donc de communiquer ce fait au compilateur.

364
Aaron Maenpaa

La chaîne n'est pas traduisible. Il dit à l'éditeur Eclipse de ne pas marquer la chaîne comme étant sans ressources. Ceci est important pour les applications multilingues.

53
McDowell

NON-NLS Signifie Non - [~ # ~] n [~ # ~] ational [~ # ~] l [~ # ~] anguage [~ # ~] s [~ # ~] confirme .
Wikipedia propose également Non - [~ # ~] n [~ # ~] actif [~ # ~] l [ ~ # ~] anguage [~ # ~] s [~ # ~] s'affiche ( NLS) mais ce dernier n’est pas très utilisé.

[~ # ~] nls [~ # ~] concerne 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 qui ne font pas partie de l'internationalisation:

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

Remarques:

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

Le livre EMF: Eclipse Modeling Framework à la page 25 dit:

Marqueurs non-NLS - Le compilateur d'Eclipse Java a la capacité de marquer les chaînes non externalisées sous forme d'avertissement ou d'erreur, Afin de faciliter l'activation du support de 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, mais les littéraux de chaîne apparaissent fréquemment, par exemple en tant que clés de recherche de chaînes externalisées. un fichier de propriétés.Cette propriété détermine si les commentaires qui marquent ces littéraux comme non traduisibles doivent être inclus, de sorte que le compilateur ne les signale pas.

Pour plus de détails, voir aussi les pages Interface graphique du générateur et Comment internationaliser votre plug-in Eclipse .

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

Window of the Project Properties on Eclipse

24
olibre

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

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

Si vous envisagez de programmer votre activité en plusieurs langues, il est recommandé de l'activer. Et ensuite, en ajoutant le tag & NON-NLS $ aux chaînes internes de votre activité. Eclipse ajoutera la balise & NON-NLS $ dans la solution rapide si vous cliquez avec le bouton droit de la souris sur l’avertissement ou l’erreur.

14
fishjd

Eclipse l'utilise 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
Kees de Kooter

Il dit au compilateur de ne pas se plaindre d'une chaîne non externalisée et de ne pas nécessiter de localisation.

5
Björn