2010-12-06 5 views

Répondre

2

D'abord posté à Everything you need to know about Locales

Il y a longtemps quand j'étais développeur senior dans le groupe Windows chez Microsoft, on m'a envoyé à l'Extrême-Orient pour aider à obtenir la version 3.1 de Windows F.E. livré. C'était mon introduction au logiciel de localisation - essentiellement poussé dans la partie profonde de la piscine et dit d'apprendre à nager. C'est là que j'ai appris que la localisation est beaucoup plus que la traduction.

Note: Une chose intéressante que nous avons frappé - l'écran bleu tristement célèbre de la mort a basculé l'écran en mode texte. Vous ne pouvez pas afficher les langues asiatiques en mode texte. Donc, nous (et par nous, je veux dire moi) est venu avec un système où nous avons mis l'écran en mode VGA, stocké le 12 pt. bitmap de messagerie à la résolution pour seulement les caractères utilisés dans les messages BSoD, et l'a rendu ainsi. Les enfants d'aujourd'hui l'ont si facilement. J.

Gardez donc à l'esprit que la prise en compte des paramètres régionaux peut entraîner un travail inattendu.

La Locale

Ok, donc à aujourd'hui. Qu'est-ce qu'un lieu et que devez-vous savoir? Un paramètre régional est fondamentalement la langue et le pays d'un programme. (Il peut également y avoir une variante ajoutée au pays mais l'utilisation de ceci est extrêmement rare.) La localisation est cette combinaison mais vous pouvez avoir n'importe quelle combinaison de ces deux parties. Par exemple, un ressortissant espagnol en Allemagne définirait es_DE pour que son interface utilisateur soit en espagnol (es) mais que ses paramètres de pays soient en allemand (DE). Ne supposez pas l'emplacement basé sur la langue ou vice-versa.

La partie linguistique des paramètres régionaux est très simple - c'est la langue dans laquelle vous souhaitez afficher le texte dans votre application. Si l'utilisateur est un locuteur espagnol, vous souhaitez afficher tout le texte en espagnol. Mais quel dialecte de l'espagnol - c'est assez différent entre l'Espagne et le Mexique (tout comme en Amérique nous épelons la couleur alors qu'en Angleterre c'est la couleur). Ainsi, le pays peut avoir un impact sur la langue utilisée, en fonction de la combinaison.

Toutes les langues qui prennent en charge les ressources spécifiques aux paramètres régionaux (qui sont à peu près toutes d'aujourd'hui) utilisent un système de secours. Ils vont d'abord chercher une ressource pour la combinaison language_country. Alors que es_DE n'a probablement jamais été fait, il y a souvent un es_MX et es_ES. Donc, pour un paramètre régional défini sur es_MX, il recherchera d'abord la ressource es_MX. Si cela n'est pas trouvé, il recherche alors la ressource es. C'est la ressource pour cette langue, mais pas spécifique à un pays. Généralement, ceci est copié du plus grand pays (économiquement) pour cette langue. Si ce n'est pas trouvé, il va alors à la ressource "générale" qui est presque toujours la langue maternelle dans laquelle le programme a été écrit.

La théorie derrière ce repli est que vous devez seulement définir différentes ressources pour les ressources plus spécifiques - et c'est très utile. Mais plus important encore, lorsque de nouvelles parties de l'interface utilisateur sont créées et que vous souhaitez envoyer des copies bêta ou que vous les libérez avant de pouvoir tout traduire, les parties traduites sont localisées mais les parties non traduites s'affichent toujours, mais en anglais. Cela dérange les utilisateurs dans d'autres pays, mais cela leur permet d'avoir le programme plus tôt. (Note: Nous utilisons Sisulizer pour traduire nos ressources - bon produit.)

La seconde moitié est le pays. Ceci est principalement utilisé pour les paramètres de nombre et de date/heure. Cela couvre la gamme de ce que les symboles de séparateur décimal et millier sont (12 345,67 aux États-Unis est de 12 345,67 en Russie) à quel calendrier est utilisé.La façon de gérer cela consiste à utiliser les classes d'exécution disponibles pour toutes les opérations sur ces éléments lors de l'interaction avec un utilisateur. Les classes existent pour analyser les valeurs entrées par l'utilisateur et les afficher. Maintenez une distinction claire entre les valeurs entrées ou affichées par l'utilisateur pour l'utilisateur et les valeurs stockées en interne en tant que données. Un nombre est une chaîne dans un fichier XML mais dans le fichier XML ce sera "12345.67" (sauf si quelqu'un a fait quelque chose de très stupide). Gardez vos données fortement typées et n'effectuez que les conversions spécifiques aux paramètres régionaux lors de l'affichage ou de l'analyse du texte de/vers l'utilisateur. Stocker des données dans un format spécifique à la locale vous mordra dans le cul tôt ou tard.

chinois

chinois ne dispose pas d'un alphabet, mais a plutôt un ensemble de glyphes. Il y a plusieurs décennies, la République populaire de Chine a considérablement révisé la façon de dessiner les glyphes, ce que l'on appelle simplifié. Les glyphes chinois utilisés ailleurs ont continué avec l'original et cela s'appelle traditionnel. C'est exactement le même ensemble de caractères, mais ils sont dessinés différemment. C'est comme si nous avions à la fois un texte A et un script A - les deux signifient la même chose mais sont dessinés différemment. Ceci est plus une question de police qu'un problème de traduction, sauf que le libellé et l'utilisation ont divergé un peu, en partie en raison des différences d'approche entre le chinois traditionnel et simplifié. Le résultat final est que vous voulez généralement avoir deux ressources en langue chinoise, une zh_CN (PRC) et une zh_TW (Taiwan). Quant à savoir quelle devrait être la ressource zh - c'est une question géopolitique majeure et vous êtes seul (mais gardez à l'esprit que PRC a des armes nucléaires - et vous ne le faites pas).

Strings Donc, avec des valeurs substituées

vous devez afficher l'affichage du message ("L'opération avait l'erreur:" + msg); Non non Non! Parce que dans une autre langue l'utilisation correcte pourrait être Display ("L'erreur:" + msg + "a été causée par l'opération"); Chaque bibliothèque d'exécution moderne a une construction où vous pouvez avoir une ressource de chaîne "L'opération avait l'erreur: {0}" et se substituera alors dans votre message à {0}. (Certains utilisent une syntaxe autre que {0}, {1}, ...)

Vous stockez ces chaînes dans un fichier de ressources pouvant être localisé. Ensuite, lorsque vous avez besoin d'afficher le message, vous le chargez à partir des ressources, vous le substituez dans les variables et vous l'affichez. La combinaison de ceci, plus le nombre & formateurs date/heure, il est facile de construire ces chaînes. Et une fois que vous vous y habituerez, vous trouverez cela plus facile que l'ancienne approche. (Si vous utilisez Visual Studio, téléchargez et installez ResourceRefactoringTool pour rendre cela trivial.)

Scripts arabes, hébreux et complexes.

Arabe & L'hébreu est appelé b-directionnel parce que certaines parties sont de droite à gauche tandis que les autres parties sont de gauche à droite. Le texte en arabe/hébreu est écrit et lu de droite à gauche. Mais quand vous arrivez au texte ou aux nombres latins, vous sautez alors à la partie la plus à gauche et lisez ceci de gauche à droite, puis revenez à l'endroit où cela a commencé et relisez de droite à gauche. Et puis il y a la ponctuation et d'autres caractères non-lettre où les règles dépendent de l'endroit où ils sont utilisés.

Voici l'essentiel: il est incroyablement complexe et il est impossible d'apprendre comment cela fonctionne si vous ne le prenez pas comme un travail à temps plein. Mais ne vous inquiétez pas, encore une fois les bibliothèques d'exécution pour la plupart des langues ont des classes pour gérer cela. La clé pour cela est le texte pour une ligne est stockée dans l'ordre où vous lisez les caractères. Donc, dans la mémoire de l'ordinateur, il est dans l'ordre de gauche à droite pour l'ordre que vous liriez (pas afficher) les caractères.De cette façon, tout fonctionne normalement sauf lorsque vous affichez le texte et déterminez le déplacement du curseur.

Les scripts complexes comme les scripts Indic ont un problème différent. Pendant qu'ils sont lus de gauche à droite, vous pouvez avoir des cas où certaines combinaisons de lettres sont placées les unes au-dessus des autres, de sorte que la chaîne n'est pas plus large sur l'écran lorsque la seconde lettre est ajoutée. Cela a tendance à exiger un peu de soin avec le mouvement du caret, mais rien de plus.

Nous avons même des cas comme celui-ci en anglais où ae est parfois rendu comme un seul caractère æ. (Quand la langue a inventé le genre humain, ils ne pensaient pas l'ordinateur amical.)

Ne pas trop insister sur ce

Il semble que beaucoup, mais il est en fait assez simple. Dans la plupart des cas, vous devez afficher du texte en fonction de la ressource la plus proche. Et vous utilisez le nombre & classes de date/heure pour tous les paramètres régionaux, y compris votre langue maternelle. Peu importe où vous vivez, la plupart des utilisateurs d'ordinateurs sont dans un autre pays parlant une autre langue - donc bien localiser augmente considérablement votre marché potentiel.

Et si vous êtes une petite entreprise, pensez à offrir une copie gratuite pour les personnes qui traduisent votre produit. Lorsque j'ai créé la scène, j'ai offert une copie gratuite (prix de 79,95 $) pour la traduction - et j'ai obtenu 28 traductions. J'ai également rencontré des gens très sympas en ligne dans le processus. Pour un produit au niveau de l'entreprise, plusieurs fois un VAR dans un autre pays le traduira pour vous à un taux réduit ou même gratuitement s'il voit un bon potentiel de marché. Mais dans ces cas-là, faites la première traduction en interne pour obtenir les corrections. Une ressource que je trouve très utile est le Microsoft Language Portal où vous pouvez mettre du texte en anglais et si ce texte est dans l'un des produits Microsoft, il vous donnera la traduction Microsoft utilisée pour une langue donnée. Cela peut vous permettre de traduire rapidement et de haute qualité jusqu'à 80% de votre programme dans de nombreux cas.

Удачи! (Bonne chance)

Questions connexes