2009-03-17 16 views
285

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

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

Qu'est-ce que cela signifie?

Répondre

337

Ils désactivent un avertissement qu'Eclipse émet lorsqu'il rencontre des littéraux de chaîne (et qu'il a été configuré pour se plaindre). L'idée est que les messages d'interface utilisateur ne doivent pas être intégrés en tant que littéraux de chaîne, mais plutôt en provenance d'un fichier de ressources (afin qu'ils puissent être traduits, corrigé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 laissé par inadvertance des chaînes d'interface utilisateur non virtualisées dans le code; cependant, il existe des chaînes qui ne doivent pas être externalisées (telles que les expressions rationnelles) et // $ NON-NLS-1 $ vous donne un moyen de communiquer ce fait au compilateur.

+1

Ok, donc, c'est seulement sur eclipse? Qu'en est-il d'IntelliJ Idea ou de Netbeans? – paulgreg

+0

Autant que je sache, c'est une chose Eclipse, même si d'autres IDE peuvent l'avoir ramassé. –

+6

Alors, que signifie NLS? – MatrixFrog

49

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

+5

bonne explication à la raison pour laquelle le drapeau est appelé NON NLS (Non Langue de soutien national). Merci. – Kaadzia

5

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

+3

Je ne pense pas que ce soit le compilateur, je pense que c'est Eclipse qui se plaint. –

+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 (compilateur d'Eclipse quand même). –

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 visible par les utilisateurs de l'application.

+0

Certaines chaînes ne fonctionnent pas correctement lorsqu'elles sont traduites. Si une chaîne représente un charset, une balise HTML/XML, une regex, etc., ils peuvent changer le comportement du programme. – yingted

14

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 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é au Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Si vous prévoyez programmer votre activité en plusieurs langues, il est recommandé d'activer cette option. Et puis en ajoutant la balise NON-NLS $ & aux chaînes qui sont internes à votre activité. Eclipse ajoutera & non-NLS $ dans le correctif si vous faites un clic droit sur l'avertissement ou l'erreur.

15

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

NLS est d'internationaliser 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.Sur l'exemple suivant les deux "!" sont des chaînes codées en dur ne fait 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
  • pas $NON-NLS$ global pour plusieurs chaînes dans le même ligne
    (par exemple si votre ligne a six cordes, vous devez écrire six fois //$NON-NLS-x$)

Le livre EMF: Eclipse Modeling Framework at page 250 dit:

non-NLS Markers- compilateur de Java Eclipse a la capacité de drapeau des chaînes non extériorisés comme un avertissement ou une 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; cependant, les littéraux de chaîne apparaissent fréquemment, par exemple, en tant que clés pour la recherche de chaînes externalisées dans un fichier de propriétés. Cette propriété contrôle si les commentaires qui marquent ces littéraux comme étant non traduisibles doivent être inclus, afin que le compilateur ne les marque pas.

Pour plus de détails, voir également les pages The Generator GUI et How to Internationalize your Eclipse Plug-In.

Vous pouvez activer/désactiver cette fonctionnalité. Eclipse Neon aller à
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