44 votes

L'internationalisation dans vos projets

Comment avez-vous mis en œuvre de l'Internationalisation (i18n) dans les projets que vous avez travaillé?

J'ai pris un intérêt dans la prise de logiciels de la croix-culturel après j'ai lu le fameux post de Joel, Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!). Cependant, je n'ai pas encore en mesure de prendre avantage de cette dans un projet réel, en plus de rendre sûr j'ai utilisé des chaînes Unicode lorsque cela est possible. Mais toutes les chaînes de caractères Unicode et de s'assurer que vous comprenez ce que le codage tout ce que vous travaillez avec est dans est que la pointe de l'i18n iceberg.

Tout ce que j'ai travaillé à ce jour a été pour une utilisation par un ensemble ordonné de NOUS des gens parlant anglais, ou i18n n'était tout simplement pas quelque chose que nous avons eu le temps de travailler sur avant de pousser le projet de vivre. Je suis à la recherche pour les conseils de guerre ou des histoires de gens ont au sujet de logiciel de fabrication de plus localisée dans le monde réel des projets.

47voto

McDowell Points 62645

Il a été un certain temps, ce n'est donc pas exhaustive.

Les Jeux De Caractères

Unicode est grand, mais vous ne pouvez pas sortir avec en ignorant d'autres jeux de caractères. Le jeu de caractères par défaut sur Windows XP (en anglais) est Cp1252. Sur le web, vous ne savez pas ce qu'est un navigateur envoie à vous (bien que j'espère de votre conteneur de traiter la plupart des ce). Et ne soyez pas surpris quand il ya des bugs dans quelle application que vous utilisez. Les jeux de caractères peuvent avoir des interactions intéressantes avec des noms de fichiers quand ils se déplacent entre les machines.

Traduction De Chaînes De Caractères

Les traducteurs sont, en général, pas des codeurs. Si vous envoyez un fichier source à un traducteur, ils vont casser. Les chaînes doivent être extraites de fichiers de ressources (par exemple, les propriétés des fichiers en Java ou de la Dll de ressource dans Visual C++). Les traducteurs doivent être des fichiers qui sont difficiles à briser et à des outils qui ne les laissez pas briser.

Les traducteurs ne sais pas où les chaînes de provenance d'un produit. Il est difficile de traduire une chaîne de caractères sans contexte. Si vous n'avez pas à fournir des conseils, de la qualité de la traduction en souffrent.

Alors que sur le sujet de son contexte, vous pouvez voir la même chaîne "toto" des cultures en plusieurs fois et pense qu'il serait plus efficace d'avoir tous les cas dans l'INTERFACE utilisateur pointer vers la même ressource. C'est une mauvaise idée. Les mots peuvent être très sensibles au contexte dans certaines langues.

La traduction des chaînes de l'argent frais. Si la sortie d'une nouvelle version d'un produit, il est logique de récupérer les anciennes versions. Avoir des outils pour récupérer les chaînes de vos vieux fichiers de ressources.

La concaténation de chaîne et un manuel de manipulation de chaînes de caractères doit être réduite au minimum. Utilisez le format de fonctions, le cas échéant.

Les traducteurs doivent être en mesure de modifier les raccourcis clavier. Ctrl+P est imprimé en anglais, les Allemands utilisez Ctrl+D.

Si vous avez un processus de traduction qui nécessite quelqu'un pour manuellement couper et coller des chaînes à tout moment, vous êtes d'avoir des ennuis.

Des Dates, Des Heures, Des Calendriers, Des Devises, Des Formats De Nombre, Les Fuseaux Horaires

Toutes ces valeurs peuvent varier d'un pays à l'autre. Une virgule peut être utilisé pour indiquer les décimales. Fois peut-être dans les 24 heures de la notation. Pas tout le monde utilise le calendrier Grégorien. Vous devez être sans équivoque, trop. Si vous prenez soin d'afficher les dates sous la forme MM/JJ/AAAA pour les etats-unis et JJ/MM/AAAA pour le royaume-UNI sur votre site web, les dates sont ambigus, à moins que l'utilisateur sait que vous l'avez fait.

En Particulier Monnaie

Les paramètres Régionaux de fonctions dans les bibliothèques de classe, qui va vous donner de la monnaie locale, symbole, mais vous ne pouvez pas simplement s'en tenir à une livre sterling (sterling) ou le symbole de l'euro, face à une valeur qui donne un prix en dollars.

Les Interfaces Utilisateur

Mise en page doit être dynamique. Non seulement sont des chaînes de caractères devrait doubler dans la longueur, sur la traduction, l'INTERFACE utilisateur peut avoir besoin d'être inversé (en hébreu; en arabe), de sorte que les contrôles fonctionnent de la droite vers la gauche. Et c'est avant d'arriver à l'Asie.

Test Préalable À La Traduction

  • Utiliser l'analyse statique de votre code afin de localiser les problèmes. Au strict minimum, d'exploiter les outils intégrés dans votre IDE. (Eclipse les utilisateurs peuvent allez dans Window > Preferences > Java > Compilateur > les Erreurs/Avertissements et de vérifier la non-externalisation des chaînes de caractères.)
  • Le test de fumée par la simulation de la traduction. Il n'est pas difficile d'analyser un fichier de ressources et remplacer des chaînes de caractères avec un pseudo-version traduite qui double la longueur et l'insère funky caractères. Vous n'avez pas à parler une langue étrangère système d'exploitation. Les systèmes modernes, vous permettra de connecter en tant qu'utilisateur étranger avec chaînes traduites et à l'étranger. Si vous êtes familier avec votre OS, vous pouvez comprendre ce que fait ce, sans connaître un seul mot de la langue.
  • Clavier de cartes et de jeu de caractères les références sont très utiles.
  • La Virtualisation serait très utile ici.

Les Questions Non techniques

Parfois, vous avez à être sensible aux différences culturelles (infraction ou d'incompréhension peut entraîner). Une erreur, vous voyez souvent est l'utilisation des drapeaux comme un repère visuel de choisir une langue du site ou de la géographie. Sauf si vous voulez que votre logiciel de déclarer côtés de la politique mondiale, c'est une mauvaise idée. Si vous étiez français et la possibilité pour l'anglais avec Saint-George drapeau, le drapeau de l'Angleterre, est une croix rouge sur champ blanc), cela peut entraîner une confusion pour de nombreux locuteurs de l'anglais - assumer similaire problèmes avec les langues étrangères et les pays. Les icônes doivent être examinées quant à la pertinence culturelle. Que fait un thumbs-up ou une coche verte signifie? La langue doit être relativement neutre - aborder les utilisateurs d'une manière particulière peut être acceptable dans une région, mais considéré comme impoli dans un autre.

Ressources

C++ et Java programmeurs peuvent trouver de l'unité de soins intensifs de site web utiles: http://www.icu-project.org/

15voto

Michael Stum Points 72046

Des choses amusantes:

  1. Avoir un PHP et MySQL Application qui fonctionne bien avec l'allemand et le français, mais a maintenant besoin d'un soutien russe et Chinois. Je pense que je déplace ce fil pour .net, PHP est le support de l'Unicode est - à mon avis - pas vraiment bon. Bien sûr, jongler avec utf8_de/encoder ou de la mbstring-fonctions est un plaisir. Presque aussi amusant que d'avoir Freddy Krüger vous rendre visite à la nuit...

  2. Réalisant que certaines langues sont BEAUCOUP plus Détaillé que les autres. L'allemand est BEAUCOUP plus détaillé que l'anglais généralement, et de voir comment la Version allemande détruit l'Interface Utilisateur, car trop peu de place a été attribuée n'était pas amusant. Certains produits acquis une certaine notoriété pour leurs façons créatives de travailler autour de cela, avec l'Oubli du "Schw.Tr.d.Le.Fr.W." être mémorable :-)

  3. En jouant avec les formats de date, woohoo! Oui, il ya effectivement des gens dans le monde qui utilisent des formats de la date où la journée se passe dans le milieu. Sooooo beaucoup de plaisir à essayer de trouver ce que 07/02/2008 est censé signifier, juste parce que certains utilisateurs pourraient croire qu'il pourrait être le 2 juillet... Mais encore une fois, vous les gars sur l'étang du même avis sur les utilisateurs qui ont mis le mois dans le milieu :-P, surtout parce que dans l'anglais, le 2 juillet sonne beaucoup mieux que le 2 juillet, quelque chose qui n'est pas impérativement s'appliquer à d'autres langues (c'est à dire en allemand, vous ne serait jamais dire Juli 2 mais toujours Zweiter Juli). J'utilise 2008-02-07 chaque fois que possible. Il est clair que cela signifie 7 février et il trie correctement, mais jj/mm vs jj/mm peut être vraiment un problème délicat.

  4. Anoter chose amusante, les formats de Nombre! 10.000,50 vs de 10 000.50 contre 10 000,50 contre 10'000,50... C'est mon plus grand cauchemar de la droite maintenant, ayant pour support multi-culturelle environent mais n'ayant aucun moyen fiable de savoir quel format de nombre à l'utilisateur.

  5. Formel ou Informel. Dans certaines langues, il y a deux façons de s'adresser aux gens, d'une façon formelle, et de manière plus informelle. En anglais, vous venez de dire "Vous", mais en allemand, vous devez décider entre le formel "Sie" et l'informel "Du", de même pour le français Tu/Vous. C'est généralement une valeur sûre de choisir la manière formelle, mais c'est facile de négliger.

  6. Les calendriers. En Europe, le premier jour de la Semaine est le lundi, alors que dans le NOUS, c'est dimanche. Calendrier des Widgets sont gentils. Montrant un Calendrier avec le dimanche, sur la gauche, et samedi sur le droit Européen de l'utilisateur n'est pas très agréable, il les confond.

8voto

Mike Stone Points 21293

J'ai travaillé sur un projet pour mon ancien employeur que l'employé .NET, et il y a une construite dans .format de resx nous avons utilisé. Essentiellement, nous avons eu un fichier qui a 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 efficace pour s'assurer que toutes les chaînes visibles dans l'application sont stockés dans le .resx, et quand on est changé, vous devez mettre à jour toutes les langues que vous soutenir.

Si vous obtenez paresseux et ne pas informer les personnes en charge de traductions, ou vous incorporez des chaînes sans passer par votre système de localisation, ce sera un cauchemar pour essayer de le corriger plus tard. De même, si la localisation est une réflexion après coup, il sera très difficile à mettre en place. Bas de ligne, si vous n'avez pas toutes les chaînes de caractères visibles stockées à l'extérieur dans un endroit standard, il sera très difficile de trouver tout ce qu'il faut pour être localisé.

Une autre note, très strictement éviter la concaténation de chaînes de caractères visibles directement, comme

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 pour cela est que les différentes souvent d'une langue à l'ordre les mots différemment, et la concaténation de chaînes directement auront besoin d'une nouvelle version pour corriger le problème, mais si vous utilisé une sorte de chaîne de mécanisme de remplacement, comme ci-dessus, vous pouvez modifier votre .fichier resx (ou quelle que soit la localisation de fichiers que vous utilisez) pour le langage spécifique qui a besoin de modifier l'ordre des mots.

5voto

Michael Stum Points 72046

J'écoutais justement un podcast de Scott Hanselman ce matin, où il parle d'internationalisation, en particulier des choses vraiment difficiles, comme le turc (avec ses quatre mots) et le thaï. En outre, Jeff Atwood avait un post :

3voto

Decio Lira Points 1449

En plus de tous les précédents conseils, n'oubliez pas que i18n ce n'est pas seulement de changer les mots de leur équivalent dans d'autres langues, surtout pour des langues non latines alphabets (coréen, arabe) qui écrit de droite à gauche, de sorte que l'ensemble de l'INTERFACE utilisateur devra se conformer, comme

  • point 1
  • article 2
  • point 3

devrait être

texte arabe 1 -

texte arabe 2 -

texte arabe 3 -

(inversé liste à puce ne semble pas fonctionner :P)

ce qui peut être une INTERFACE utilisateur cauchemar si votre système a pour appliquer les modifications dinamically une fois que l'utilisateur change la langue utilisée.

Un autre très dur, c'est de tester les différentes langues, et pas seulement pour la justesse de la parole, mais puisque les langues comme le coréen ont généralement plus grand type de police pour leurs personnages, cela peut conduire à un langage spécifique des bugs (comme "SAUVER" le texte sur un bouton étant plus grand que le bouton lui-même pour certaines langues).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X