Que signifie $ NON-NLS-1 $?

320

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

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

Qu'est-ce que ça veut dire ?

paulgreg
la source

Réponses:

370

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 d'interface utilisateur ne doivent pas être incorporés en tant que littéraux de chaîne, mais plutôt 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, afin que vous n'ayez pas accidentellement laissé de chaînes d'interface utilisateur non externalisées dans le code; cependant, il existe des chaînes qui ne doivent pas être externalisées (telles que les expressions régulières) et donc, // $ NON-NLS-1 $ vous donne un moyen de communiquer ce fait au compilateur.

Aaron Maenpaa
la source
10
Alors, que signifie NLS?
MatrixFrog
39
@MatrixFrog il semble que ce soit "National Language Support", c'est du moins ce à quoi il est fait référence ici: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison
23
Pour être évaluatif, je pense que de tels marqueurs spécifiques à l'IDE ne devraient pas être utilisés si le code est modifié dans différents environnements. Bien que le marqueur ne nuise pas, il encombre le code et le rend légèrement plus difficile à maintenir.
migu
4
Alors, comment configurez-vous Eclipse pour détecter les littéraux de chaîne, de sorte que // $ NON-NLS-1 $ manquant déclenche un avertissement ou smt?
rpr
3
La plate-forme NetBeans utilise // le mot-clé de commentaire NOI18N dans le même but
Matt
57

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

McDowell
la source
8
Bonne explication de la raison pour laquelle le drapeau est appelé NON NLS (No National Language Support). Merci.
Kaadzia
28

NON-NLSdes moyens non - N ational L anguage S upport .
Wikipedia propose également non - N ative L ANGUE S upport (NLS) , mais ce dernier n'est pas très utilisé.

NLS consiste à internationaliser votre application. Aide d'Eclipse pour 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 leader //est nécessaire à chaque fois
  • pas de global $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 250 dit:

Marqueurs non NLS: le compilateur Java d'Eclipse a la possibilité de signaler des chaînes non externalisées comme avertissement ou 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îne apparaissent fréquemment, par exemple, comme clés de recherche de chaînes externalisées dans un fichier de propriétés. Cette propriété contrôle s'il faut inclure les commentaires qui marquent ces littéraux comme non traduisibles, afin que le compilateur ne les marque pas.

Pour plus de détails, consultez également les pages L'interface graphique du générateur et Comment internationaliser votre plug-in Eclipse .

Vous pouvez activer / désactiver cette fonction. Sur Eclipse Neon, allez sur
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

olibre
la source
14

Si vous êtes développeur Android. Toutes les chaînes que l'utilisateur peut voir doivent se trouver dans le fichier de ressources /res/values/strings.xml pour lire le fichier strings.xml dans le code que vous utilisez R.string .. En ajoutant la balise // $ NON-NLS- $ vous êtes notant 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 prévoyez de programmer votre activité en plusieurs langues, il est recommandé de l'activer. Et puis en ajoutant la balise & NON-NLS $ aux chaînes internes à votre activité. Eclipse ajoutera la balise & NON-NLS $ dans la correction rapide si vous faites un clic droit sur l'avertissement ou l'erreur.

fishjd
la source
9

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.

Kees de Kooter
la source
Certaines chaînes ne fonctionnent pas correctement lorsqu'elles sont traduites. Si une chaîne représente un jeu de caractères, une balise HTML / XML, une expression régulière, etc., ils pourraient changer le comportement du programme.
décédé
5

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

Björn
la source
4
Je ne pense pas que ce soit le compilateur, je pense que c'est Eclipse qui se plaint.
Paul Tomblin
6
Eclipse a son propre compilateur dans le cadre de JDT qu'il utilise pour ce genre de chose. Alors oui c'est le compilateur (le compilateur d'Eclipse quand même).
Aaron Maenpaa