Question

Il y a quelque temps, je lisais l'article du W3C sur 'Réutilisation de chaînes dans du contenu scripté', qui contient quelques conseils utiles sur l'internationalisation, mais qui me semble en contradiction avec le principe DRY (Don't Repeat Yourself) d'élimination du code répétitif.

Pour prendre leur exemple, nous pourrions avoir un code comme celui-ci...

print "The printer is ";
if (printer.working) {
    print "on.\n";
} else {
    print "off.\n";
}

print "The stapler is ";
if (stapler.working) {
    print "on.\n";
} else {
    print "off.\n";
}

Mon instinct serait d'éliminer la répétition à peu près comme suit...

report-state(printer, "printer");
report-state(stapler, "stapler");

function report-state(name, object) {
    print "The "+name+" is ";
    if (object.working) {
        print "on\n";
    } else {
        print "off\n";
    }
}

... mais cela poserait une difficulté dans le code si nous devions le localiser en espagnol, car le mot pour « on » est apparemment différent dans ces deux cas.

Donc, je suppose que ma question est la suivante : comment d’autres développeurs ont-ils réussi à équilibrer le principe DRY avec l’internationalisation de leur code ?

Une partie de moi veut affirmer que l’internationalisation est l’une de ces programmations extrêmes »tu n'en auras pas besoin» situations.D’un autre côté cependant, refactoriser avec le principe DRY à l’esprit est censé équilibrer cela en facilitant la mise en œuvre des fonctionnalités requises, et non plus difficile comme c’est le cas ici.

Était-ce utile?

La solution

J'essaierais de conserver des phrases complètes dans la ressource linguistique.Comme vous l'avez dit, vous pourriez avoir besoin de mots différents dans différents contextes.Mais le plus gros problème est que l’ordre des phrases peut être différent selon les langues.Ainsi, la création de chaînes à partir de mots peut poser des problèmes.

Il suffit de stocker

The printer is on
The printer is off
The stapler is on
The stapler is off

dans la ressource linguistique pour chaque langue.La répétition ici est moins un casse-tête de maintenance que d'essayer de déterminer où tous les mots vont apparaître dans votre application.

Autres conseils

100% d'accord avec Mendelt.

Il ne s’agit pas seulement d’un problème de maintenance, mais peut aussi être un problème linguistique.Dans toutes les langues latines, le genre, le nombre et la casse du sujet affectent d'autres éléments.Exemple pour le roumain

  The printer is on: Imprimanta este pornită // feminine
  The printer is off: Imprimanta este oprită
  The stapler is on: Perforatorul este pornit // masculine
  The stapler is off: Perforatorul este oprit

Regarde aussi http://www.mihai-nita.net/article.php?artID=20060430a

Je suis d'accord avec Mendelt Siebenga lorsqu'il dit que vous devez conserver des phrases ou des expressions entières dans vos fichiers de ressources linguistiques.Les différences de grammaire vous empêcheront toujours de remplacer un seul mot dans toutes les langues.Cela conduira toujours à un code moins répétitif que votre premier exemple car il vous suffit de vérifier le type d'objet et son état, puis d'imprimer le message approprié à partir de la ressource linguistique.

Nous essayons de ne pas créer de chaînes de messages par manipulation de programme car le loc.l'équipe ne peut pas les voir.

La localisation.l'équipe préfère en fait des messages séparés mais presque en double.Cependant, ils accepteront les messages paramétrés.

Par exemple, "Le %(appliance)% est %(on_or_off)%."

Les paramètres peuvent être erronés, mais au moins, il est plus évident pour l'équipe locale quand cela fonctionnera et quand cela ne fonctionnera pas.

Je suppose que cela dépend du niveau de qualité linguistique que vous souhaitez atteindre.

En essayant de minimiser la répétition du code qui traite de ces véritables chaînes de langage, vous vous exposez simplement à une toute autre couche de logique dans les syntaxes et les structures des différents langages.La production d'un code conservant la structure originale du langage tout en minimisant les répétitions nécessiterait une énorme quantité de travail.

Vous devrez décider quelle approche est la plus appropriée à un problème particulier ;Code qui se répète, ou code qui essaie d'être un touche-à-tout et s'adapte à d'innombrables règles de langage (sans aucun doute un cauchemar de maintenance).

Bien sûr, vous pouvez trouver un juste milieu et minimiser la répétition de votre code, mais renoncer à une éloquence grammaticale satisfaisante.Prenons l'exemple d'Ultima Online : lors de sa localisation, une chaîne qui disait auparavant « Une pile de 329 pièces d'or » est devenue quelque chose comme « Une pile de pièces d'or :329".Pas génial, mais une solution assez raisonnable qui se prête facilement à la localisation.

Je suggérerais d'utiliser un CMS plutôt que de coder en dur vos valeurs textuelles pour couvrir la localisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top