Localisation: comment mapper les informations de culture sur un nom de script ou une plage de caractères Unicode?

StackOverflow https://stackoverflow.com/questions/252662

Question

J'ai besoin d'informations sur la localisation. J'utilise .net 2.0 avec C # 2.0, qui prend en charge la plupart des problèmes liés à la localisation. Cependant, je dois dessiner manuellement les alphabets correspondant à la culture actuelle sur un écran particulier.

Cela ressemblerait à l’écran Contacts de Microsoft Outlook (vue Cartes d’adresses ou Vue détaillée des cartes d’adresses sous Contacts), il fallait donc une colonne de boutons à l’extrémité droite, une pour chaque alphabet.

J'essaie d'imiter cela, mais je ne veux pas demander à l'utilisateur de choisir le script. Si la culture actuelle est le chinois, je veux dessiner des alphabets chinois. Lorsque l'utilisateur modifie les informations de culture en anglais (et lorsqu'il redémarre l'application), je souhaite plutôt dessiner des alphabets anglais. J'espère que vous comprenez où je vais avec cette requête.

Je peux déterminer la culture de l'utilisateur actuel (Application.CurrentCulture ou System.Globalization.CultureInfo.CurrentCulture donnera les informations relatives à la culture). J'ai aussi tous les scripts pour rendre les alphabets. Cependant, le problème est que je ne sais pas comment mapper les informations de culture sur le nom d'un script.

En d'autres termes, existe-t-il un moyen de déterminer le nom du script correspondant à une culture? Ou est-il possible de déterminer la plage de valeurs de caractères Unicode correspondant à une culture? L'un ou l'autre me permettrait de restituer correctement les alphabets du bouton.

Toute suggestion ou orientation à ce sujet est vraiment appréciée. S'il y a quelque chose de fondamentalement faux dans mon approche (ou dans ce que j'essaie de réaliser), veuillez également l'indiquer. Merci pour votre temps.

PS: Je sais que la solution la plus simple consiste à configurer le nom du script dans le cadre des préférences de l'utilisateur ou à afficher une liste de langues parmi lesquelles l'utilisateur peut choisir (par exemple, Contact dans Outlook 2007). Mais j'essaie simplement de voir si je peux rendre les alphabets correspondant à la culture sans que l'utilisateur ait à faire quoi que ce soit.

Était-ce utile?

La solution

Dans le code natif, LOCALE_SSCRIPTS pour GetLocaleInfoEx () (Vista et ci-dessus) vous indique quels scripts sont attendus pour une langue. Il n’existe pas de concept similaire pour .Net pour le moment.

Autres conseils

Le chinois ayant des milliers de caractères, il pourrait ne pas être possible d'afficher tous les caractères de leur jeu de caractères. Il n'y a pas de concept natif d'alphabet en chinois et je ne pense pas que le chinois ait un syllabaire comme le japonais.

Le pinyin (chinois écrit en alphabet latin) peut être utilisé pour représenter les caractères chinois, ce qui peut vous aider à les indexer. Je sais que cela ne répond pas à votre question, mais j'espère que cela vous aidera.

Je suis entièrement d'accord avec mikiemacman. De plus, un langage donné n’utilise pas nécessairement toutes les lettres d’un script.

Quoi qu'il en soit, le plus proche auquel je puisse penser est CultureInfo.TextInfo.ANSICodePage - > Il y a seulement une poignée de Pages de code ANSI . Vous pouvez créer une table (ou une instruction switch (), peu importe) qui répertorie le script de chaque page de code ANSI.

Proto, attends! Il y a une solution beaucoup plus précise. C'est un non géré sur le moment où vous devrez peut-être P / Invoke.

GetLocaleInfoW(MAKELCID(wLangId, SORT_DEFAULT), LOCALE_FONTSIGNATURE, wcBuf, MAXWCBUF);

Cela vous donne une LOCALESIGNATURE . . La réponse se trouve dans le champ lsUsb: champ de bits de sous-ensembles Unicode. Les rats! la page MS pour cette structure est vide. Mais cherchez dans votre copie MSDN. Il est entièrement documenté ici: Un ensemble d’indicateurs décrivant les scripts qui sont commandés. Et oui, il y a un drapeau pour le tamoul ;-)

HTH.

EDIT: Oups! N'avait pas vu la réponse de Shawne. Hou la la! Réponse d'un expert interne! ;-) Quoi qu’il en soit, une réponse compatible avec Pre-Vista pourrait encore vous intéresser.

Sujet fascinant. Il se peut que Omniglot soit une bonne ressource.

La bonne réponse est susceptible d'être complexe et dépend du problème exact que vous résolvez. En supposant que votre objectif ne affichant que les lettres utilisées dans une langue donnée pour séparer les sections du répertoire (comme dans Outlook), voici quelques problèmes:

  • Personnes dont les noms de contact couvrent plusieurs scripts / langues.
  • lettres 2-glyphes (par exemple, «Lj» en serbe). C'est un phonème, toujours traité comme une seule lettre bien qu'il ait 2 symboles Unicode. "Il aurait sa propre section dans le répertoire (séparée de" L ").
  • Trop de glyphes à répertorier (par exemple, le chinois)
  • Ordre peu orthodoxe (par exemple, thaï - un annuaire téléphonique serait séparé par des consonnes uniquement, sans tenir compte des voyelles).
  • Distinction majuscule / minuscule (vous ne voudrez probablement qu'un seul cas pour les langues qui le prennent en charge - qui se décompose de manière mineure en turc 'i').
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top