Question

Comment avez-vous mis en œuvre l'internationalisation (i18n) dans les projets réels sur lesquels vous avez travaillé ?

Je me suis intéressé à la création de logiciels interculturels après avoir lu le célèbre article de Joel, Le minimum absolu que tout développeur de logiciels doit absolument et positivement connaître l'Unicode et les jeux de caractères (pas d'excuses !).Cependant, je n'ai pas encore pu en profiter dans un projet réel, en plus de m'assurer d'utiliser des chaînes Unicode lorsque cela est possible.Mais rendre toutes vos chaînes Unicode et vous assurer de bien comprendre dans quoi se trouve l'encodage de tout ce avec quoi vous travaillez n'est que la pointe de l'iceberg i18n.

Tout ce sur quoi j'ai travaillé jusqu'à présent était destiné à être utilisé par un groupe contrôlé de personnes anglophones des États-Unis, ou i18n n'était tout simplement pas quelque chose sur lequel nous avions le temps de travailler avant de lancer le projet.Je recherche donc des conseils ou des histoires de guerre que les gens ont pour rendre les logiciels plus localisés dans des projets du monde réel.

Pas de solution correcte

Autres conseils

Cela fait un certain temps, donc ce n'est pas exhaustif.

Jeux de caractères

Unicode est génial, mais vous ne pouvez pas ignorer les autres jeux de caractères.Le jeu de caractères par défaut sous Windows XP (anglais) est Cp1252.Sur le Web, vous ne savez pas ce qu'un navigateur vous enverra (même si, espérons-le, votre conteneur gérera l'essentiel de cela).Et ne soyez pas surpris s'il y a des bugs dans l'implémentation que vous utilisez.Les jeux de caractères peuvent avoir des interactions intéressantes avec les noms de fichiers lorsqu'ils se déplacent entre machines.

Traduction de chaînes

Les traducteurs ne sont généralement pas des codeurs.Si vous envoyez un fichier source à un traducteur, il le cassera.Les chaînes doivent être extraites dans des fichiers de ressources (par ex.fichiers de propriétés en Java ou DLL de ressources en Visual C++).Les traducteurs doivent disposer de fichiers difficiles à casser et d'outils qui ne leur permettent pas de les casser.

Les traducteurs ne savent pas d’où viennent les chaînes dans un produit.Il est difficile de traduire une chaîne sans contexte.Si vous ne fournissez pas de conseils, la qualité de la traduction en souffrira.

En ce qui concerne le contexte, vous pouvez voir la même chaîne "foo" apparaître plusieurs fois et penser qu'il serait plus efficace que toutes les instances de l'interface utilisateur pointent vers la même ressource.C'est une mauvaise idée.Les mots peuvent être très sensibles au contexte dans certaines langues.

Traduire des chaînes coûte de l’argent.Si vous publiez une nouvelle version d'un produit, il est logique de récupérer les anciennes versions.Disposez d'outils pour récupérer les chaînes de vos anciens fichiers de ressources.

La concaténation de chaînes et la manipulation manuelle des chaînes doivent être minimisées.Utilisez les fonctions de format le cas échéant.

Les traducteurs doivent être capables de modifier les raccourcis clavier. Ctrl+P. est imprimé en anglais ;les Allemands utilisent Ctrl+D.

Si vous avez un processus de traduction qui nécessite que quelqu'un coupe et colle manuellement des chaînes à tout moment, vous risquez des ennuis.

Dates, heures, calendriers, devises, formats numériques, fuseaux horaires

Tout cela peut varier d’un pays à l’autre.Une virgule peut être utilisée pour désigner les décimales.Les heures peuvent être au format 24 heures.Tout le monde n'utilise pas le calendrier grégorien.Vous devez également être sans ambiguïté.Si vous prenez soin d'afficher les dates au format MM/JJ/AAAA pour les États-Unis et JJ/MM/AAAA pour le Royaume-Uni sur votre site Web, les dates sont ambiguës à moins que l'utilisateur sache que vous l'avez fait.

Surtout la monnaie

Les fonctions Locale fournies dans les bibliothèques de classes vous donneront le symbole de la devise locale, mais vous ne pouvez pas simplement coller un symbole de livre sterling ou d'euro devant une valeur qui donne un prix en dollars.

Les interfaces des utilisateurs

La mise en page doit être dynamique.Non seulement les chaînes sont susceptibles de doubler de longueur lors de la traduction, mais l'ensemble de l'interface utilisateur devra peut-être être inversé (hébreu ;arabe) pour que les commandes s'exécutent de droite à gauche.Et c'est avant d'arriver à l'Asie.

Tests avant la traduction

  • Utilisez l'analyse statique de votre code pour localiser les problèmes.Au strict minimum, exploitez les outils intégrés à votre IDE.(Les utilisateurs d'Eclipse peuvent accéder à Fenêtre > Préférences > Java > Compilateur > Erreurs/Avertissements et rechercher les chaînes non externalisées.)
  • Test de fumée en simulant la traduction.Il n'est pas difficile d'analyser un fichier de ressources et de remplacer les chaînes par une version pseudo-traduite qui double la longueur et insère des caractères géniaux.Vous n'avez pas besoin de parler une langue pour utiliser un système d'exploitation étranger.Les systèmes modernes devraient vous permettre de vous connecter en tant qu'utilisateur étranger avec des chaînes traduites et des paramètres régionaux étrangers.Si vous connaissez votre système d’exploitation, vous pouvez comprendre ce qui fait quoi sans connaître un seul mot de la langue.
  • Les cartes de clavier et les références de jeux de caractères sont très utiles.
  • La virtualisation serait ici très utile.

Problèmes non techniques

Il faut parfois être sensible aux différences culturelles (il peut en résulter une offense ou une incompréhension).Une erreur que l’on constate souvent est l’utilisation de drapeaux comme repère visuel pour choisir la langue ou la géographie d’un site Web.À moins que vous souhaitiez que votre logiciel prenne parti dans la politique mondiale, c'est une mauvaise idée.Si vous étiez français et que vous offriez l'option anglais avec St.Le drapeau de George (le drapeau de l'Angleterre est une croix rouge sur un champ blanc), cela pourrait prêter à confusion pour de nombreux anglophones - supposons que des problèmes similaires se poseront avec des langues et des pays étrangers.Les icônes doivent être vérifiées pour leur pertinence culturelle.Que signifie un pouce levé ou une coche verte ?Le langage doit être relativement neutre : s'adresser aux utilisateurs d'une manière particulière peut être acceptable dans une région, mais considéré comme impoli dans une autre.

Ressources

Les programmeurs C++ et Java peuvent trouver le site Web de l'ICU utile : http://www.icu-project.org/

Quelques choses amusantes :

  1. Avoir une application PHP et MySQL qui fonctionne bien avec l'allemand et le français, mais qui doit désormais prendre en charge le russe et le chinois.Je pense que je déplace cela vers .net, car le support Unicode de PHP n'est - à mon avis - pas vraiment bon.Bien sûr, jongler avec utf8_de/encode ou les fonctions mbstring est amusant.Presque aussi amusant que de recevoir Freddy Krüger la nuit...

  2. Réaliser que certaines langues sont BEAUCOUP plus verbeuses que d’autres.L'allemand est généralement BEAUCOUP plus verbeux que l'anglais, et voir comment la version allemande détruit l'interface utilisateur parce que trop peu d'espace était alloué n'était pas amusant.Certains produits ont gagné en renommée pour leurs façons créatives de contourner cela, avec l'Oblivion "Schw.tr.d.le.en.w." Être mémorable :-)

  3. Jouer avec les formats de date, woohoo !Oui, il y a effectivement des gens dans le monde qui utilisent des formats de date où la journée se situe au milieu.C'est tellement amusant d'essayer de découvrir ce que le 02/07/2008 est censé signifier, simplement parce que certains utilisateurs pourraient croire que cela pourrait être le 2 juillet...Mais là encore, vous les gars de l'autre côté de l'étang pensez peut-être la même chose à propos des utilisateurs qui mettent le mois au milieu :-P, surtout parce qu'en anglais, le 2 juillet sonne bien mieux que le 2 juillet, ce qui ne s'applique pas nécessairement aux autres. langues (c'est-à-direen allemand, on ne dirait jamais Juli 2 mais toujours Zweiter Juli).J'utilise le 07/02/2008 autant que possible.C'est clair que ça veut dire le 7 février et ça trie correctement, mais jj/mm vs.mm/jj peut être un problème vraiment délicat.

  4. Une autre chose amusante, Formats de nombres!10.000,50 contre 10.000,50 contre.10 000,50 contre.10'000,50...C'est mon plus grand cauchemar en ce moment, devoir prendre en charge un environnement multiculturel mais ne pas avoir aucun moyen de savoir de manière fiable quel format numérique l'utilisateur utilisera.

  5. Formel ou informel.Dans certaines langues, il existe deux manières de s’adresser aux gens : une manière formelle et une manière plus informelle.En anglais, vous dites simplement « You », mais en allemand, vous devez choisir entre le « Sie » formel et le « Du » informel, pareil pour le français Tu/Vous.Il est généralement plus prudent de choisir la voie formelle, mais cela est facilement négligé.

  6. Calendriers.En Europe, le premier jour de la semaine est le lundi, alors qu'aux États-Unis, c'est le dimanche.Les widgets de calendrier sont sympas.Afficher un calendrier avec dimanche à gauche et samedi à droite à un utilisateur européen n'est pas si agréable, cela les confond.

J'ai travaillé sur un projet pour mon ancien employeur qui utilisait .NET, et nous utilisions un format .resx intégré.Nous avions essentiellement un fichier contenant toutes les traductions dans le fichier .resx, puis plusieurs fichiers avec des traductions différentes.La conséquence de ceci est que vous devez faire très attention à ce que toutes les chaînes visibles dans l'application soient stockées dans le fichier .resx, et chaque fois qu'une chaîne est modifiée, vous devez mettre à jour toutes les langues que vous prenez en charge.

Si vous devenez paresseux et n'informez pas les personnes en charge des traductions, ou si vous intégrez des chaînes sans passer par votre système de localisation, ce sera un cauchemar d'essayer de corriger le problème plus tard.De même, si la localisation est réfléchie après coup, elle sera très difficile à mettre en place.En fin de compte, si toutes les chaînes visibles ne sont pas stockées en externe dans un emplacement standard, il sera très difficile de trouver tout ce qui doit être localisé.

Une autre remarque, évitez très strictement de concaténer directement des chaînes visibles, telles que

String message = "The " + item + " is on sale!";

Au lieu de cela, vous devez utiliser quelque chose comme

String message = String.Format("The {0} is on sale!", item);

La raison en est que différentes langues ordonnent souvent les mots différemment et que la concaténation directe des chaînes nécessitera une nouvelle version pour être corrigée, mais si vous avez utilisé une sorte de mécanisme de remplacement de chaîne comme ci-dessus, vous pouvez modifier votre fichier .resx (ou quelle que soit la localisation). fichiers que vous utilisez) pour la langue spécifique qui doit réorganiser les mots.

J'écoutais juste un Podcast de Scott Hanselman ce matin, où il parle de l'internationalisation, en particulier des choses les plus délicates, comme le turc (avec ses quatre i) et le thaï.De plus, Jeff Atwood avait un poste:

Outre tous les conseils précédents, rappelez-vous que i18n ne consiste pas seulement à changer des mots pour leur équivalent dans d'autres langues, en particulier pour les alphabets de langues non latines (coréen, arabe) qui s'écrivent de droite à gauche, donc toute l'interface utilisateur devra être conforme, comme

  • objet 1
  • article 2
  • article 3

devrait être

texte arabe 1 -

texte arabe 2 -

texte arabe 3 -

(la liste à puces inversée ne semble pas fonctionner :P)

ce qui peut être un cauchemar d'interface utilisateur si votre système doit appliquer les modifications de manière dynamique une fois que l'utilisateur change la langue utilisée.

Une autre chose très difficile est de tester différentes langues, pas seulement pour l'exactitude des mots, mais comme les langues comme le coréen ont généralement une police de caractères plus grande pour leurs caractères, cela peut conduire à des bugs spécifiques à la langue (comme le texte « ENREGISTRER » sur un bouton qui est plus grand que le bouton lui-même pour certaines langues).

Une des choses les plus amusantes à découvrir :Les textes en italique et en gras ne fonctionnent pas avec les caractères CJK (chinois/japonais/coréen).Ils deviennent tout simplement illisibles.(OK, je ne pouvais pas vraiment les lire avant non plus, mais surtout le gras ne fait que créer des taches d'encre)

Je pense que tous ceux qui travaillent dans le domaine de l'internationalisation devraient être familiers avec le Common Locale Data Repository, qui est désormais un sous-projet d'Unicode :

Référentiel de données locales communes

Ces personnes travaillent dur pour établir une ressource standard pour toutes sortes de problèmes i18n :monnaie, noms géographiques, des tonnes de trucs.Tout projet qui conserve ses propres données locales de base étant donné que ce projet existe est plutôt dingue, à mon humble avis.

Je suggère d'utiliser quelque chose comme 99translations.com pour maintenir vos traductions.Sinon, vous ne pourrez pas savoir quelles sont vos traductions qui sont à jour dans chaque langue.

Un autre défi consistera à accepter les commentaires de vos utilisateurs.Dans de nombreux cas, cela est facilité par le traitement des entrées fourni par le système d'exploitation, tel que IME dans Windows, qui fonctionne de manière transparente avec les widgets de texte courants, mais cette fonctionnalité ne sera pas disponible pour tous les besoins possibles.

Un site Web que j'utilise a une méthode de traduction que le propriétaire appelle « wiki + traduction automatique ».Il s’agit d’un site communautaire qui est donc évidemment différent des besoins des entreprises.

http://blog.bookmooch.com/2007/09/23/how-bookmooch-does-its-translations/

Une chose que personne n'a encore mentionnée, ce sont les cordes avec une partie de façon pratiquante comme dans "L'unité va se produire en 5 jours" ou "lundi quelque chose se passe". où 5 et lundi changent en fonction de l'État.Ce n'est pas une bonne idée de les diviser en deux et de les concaténer.Avec une seule partie variable et une bonne documentation, vous pourriez vous en sortir, avec deux parties différentes, il y aura un langage qui préférera changer leur ordre.

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