language agnostic - L'internationalisation dans vos projets

Translate

Comment avez-vous implémenté l'internationalisation (i18n) dans les projets sur lesquels vous avez travaillé?

Je me suis intéressé à faire des logiciels interculturels après avoir lu le fameux article de Joel,Le minimum absolu que tout développeur de logiciel doit absolument et positivement savoir sur l'Unicode et les jeux de caractères (sans 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 comprendre dans quel encodage tout ce que vous travaillez n'est que la pointe de l'iceberg i18n.

Tout ce sur quoi j'ai travaillé à ce jour a été 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 en direct. Je recherche donc des astuces ou des histoires de guerre que les gens ont pour rendre les logiciels plus localisés dans des projets réels.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Cela fait longtemps, donc ce n'est pas exhaustif.

Jeux de caractères

Unicode est génial, mais vous ne pouvez pas vous en passer en ignorant 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 la plupart de cela). Et ne soyez pas surpris lorsqu'il y a des bogues 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 les machines.

Traduire des 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 exemple, des fichiers de propriétés en Java ou des DLL de ressources en Visual C ++). Les traducteurs doivent recevoir des fichiers difficiles à casser et des outils qui ne les 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 donnez 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 judicieux de récupérer les anciennes versions. Ayez des outils pour récupérer des 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 pouvoir modifier les raccourcis clavier.Ctrl+Pest imprimé en anglais; les Allemands utilisentCtrl+D.

Si vous avez un processus de traduction qui oblige quelqu'un à couper et coller manuellement des chaînes à tout moment, vous demandez des problèmes.

Dates, heures, calendriers, devise, formats de nombre, fuseaux horaires

Ceux-ci peuvent tous varier d'un pays à l'autre. Une virgule peut être utilisée pour désigner les décimales. Les heures peuvent être en notation 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 ne sache que vous l'avez fait.

Surtout la monnaie

Les fonctions locales 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 toute l'interface utilisateur peut devoir être inversée (hébreu; arabe) pour que les contrôles s'exécutent de droite à gauche. Et c'est avant d'arriver en Asie.

Test avant traduction

  • Utilisez l'analyse statique de votre code pour localiser les problèmes. Au strict minimum, tirez parti des outils intégrés à votre IDE. (Les utilisateurs d'Eclipse peuvent accéder à Fenêtre> Préférences> Java> Compilateur> Erreurs / Avertissements et vérifier 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 funky. 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

Parfois, vous devez être sensible aux différences culturelles (il peut en résulter une offense ou une incompréhension). Une erreur que vous voyez souvent est l'utilisation d'indicateurs comme repère visuel pour choisir la langue ou la géographie d'un site Web. À moins que vous ne souhaitiez que votre logiciel déclare les côtés de la politique mondiale, c'est une mauvaise idée. Si vous étiez français et que vous offriez l'option pour l'anglais avec le drapeau de Saint-Georges (le drapeau de l'Angleterre est une croix rouge sur un champ blanc), cela pourrait entraîner une confusion pour de nombreux anglophones - supposons que des problèmes similaires se poseront avec les langues et les 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 ICU utile:http://www.icu-project.org/

La source
Translate

Quelques choses amusantes:

  1. Avoir une application PHP et MySQL qui fonctionne bien avec l'allemand et le français, mais qui doit maintenant 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 BEAUCOUP plus bavard que l'anglais habituellement, et voir comment la version allemande détruit l'interface utilisateur parce que trop peu d'espace a été alloué n'était pas amusant. Certains produits ont acquis une certaine renommée grâce à leur manière créative de contourner ce problème, avec "Schw.Tr.d.Le.En.W." d'Oblivion. être mémorable :-)

  3. Jouer avec les formats de date, woohoo! Oui, il y a en fait des gens dans le monde qui utilisent des formats de date où le jour passe au milieu. Tellement amusant d'essayer de savoir ce que le 07/02/2008 est censé signifier, juste parce que certains utilisateurs pourraient croire que cela pourrait être le 2 juillet ... Mais là encore, vous les gars de l'étang pouvez croire la même chose des utilisateurs qui mois au milieu :-P, surtout parce qu'en anglais, le 2 juillet sonne beaucoup mieux que le 2 juillet, ce qui ne s'applique pas forcément aux autres langues (c'est-à-dire en allemand, on ne dirait jamais Juli 2 mais toujours Zweiter Juli). J'utilise 2008-02-07 autant que possible. Il est clair que cela signifie le 7 février et que le tri est correct, mais jj / mm contre mm / jj peut être un problème vraiment délicat.

  4. Une chose amusante,Formats de nombres! 10.000,50 vs 10.000.50 vs 10 000,50 vs 10'000,50 ... C'est mon plus grand cauchemar en ce moment, devoir supporter un environnement multiculturel mais n'ayant aucun moyen de savoir de manière fiable quel format de nombre l'utilisateur utilisera.

  5. Formel ou informel. Dans certaines langues, il existe deux façons 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, idem pour le français Tu / Vous. C'est généralement une valeur sûre de choisir la manière formelle, mais cela est facilement négligé.

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

La source
Translate

J'ai travaillé sur un projet pour mon employeur précédent qui utilisait .NET, et nous avons utilisé 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 être très diligent pour vous assurer que toutes les chaînes visibles dans l'application sont stockées dans le .resx, et chaque fois qu'une 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 le réparer plus tard. De même, si la localisation est une réflexion après coup, elle sera très difficile à mettre en place. En bout de ligne, 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 note, évitez très strictement de concaténer directement les 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 la concaténation directe des chaînes nécessitera une nouvelle construction à corriger, 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 n'importe quelle localisation) fichiers que vous utilisez) pour la langue spécifique qui doit réorganiser les mots.

La source
Translate

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

La source
Translate

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

  • objet 1
  • élément 2
  • élément 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 des changements 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, non seulement pour l'exactitude du mot, mais comme des langues comme le coréen ont généralement un type de police plus grand pour leurs caractères, cela peut entraîner des bogues spécifiques à la langue (comme le texte "SAVE" sur un bouton est plus grand que le bouton lui-même pour certaines langues).

La source
Translate

Une des choses les plus amusantes à découvrir: le makrup en italique et en gras ne fonctionne 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 crée juste des taches d'encre)

La source
Clyde Lee
Translate

Je pense que tout le monde travaillant dans l'internationalisation devrait se familiariser avec le référentiel de données de paramètres régionaux communs, qui est maintenant un sous-projet d'Unicode:

Référentiel de données de paramètres régionaux communs

Ces gens travaillent dur pour établir une ressource standard pour toutes sortes de problèmes i18n: devises, noms géographiques, des tonnes de choses. Tout projet qui maintient ses propres données locales de base étant donné que ce projet existe est assez dingue, à mon humble avis.

La source
Translate

Je suggère d'utiliser quelque chose comme99translations.compour maintenir vos traductions. Sinon, vous ne pourrez pas dire quelles sont vos traductions à jour dans toutes les langues.

La source
Translate

Un autre défi sera d'accepter les commentaires de vos utilisateurs. Dans de nombreux cas, cela est facilité par le traitement d'entrée 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.

La source
Translate

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, il est donc évidemment différent des besoins des entreprises.

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

La source
Novia Lee
Translate

Une chose que personne n'a encore mentionnée, ce sont les chaînes avec une partie méfiante comme dans "L'unité arrivera dans 5 jours" ou "Lundi, quelque chose se passe. où 5 et lundi changeront 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ère en changer l'ordre.

La source