2009-12-28 12 views
2

Je vais récupérer ces données à partir d'un fichier XML pour l'initialiser pour des milliers d'objets. Donc, si MyObject a une propriété Country et Language, que devraient-ils être et comment devraient-ils être représentés à la fois en code et en XML? Je pense à utiliser un code Enum en code.Comment représenter des pays et des langues en C#?

Je suis juste à la recherche de l'opinion d'autres personnes pour trouver le meilleur moyen de le faire. Est-ce que toutes les langues et tous les pays sont inclus dans la BCL, donc je peux utiliser la minstead d'en écrire une?

De même, Country et Language ne doivent pas être combinés. Le Language ne représentera pas la langue parlée dans le Country spécifié.

Comment implémenter au mieux ceci pour le code et dans le Xml.

dois-je faire comme ?:

<Language>English</Language> 

Répondre

8

examinions des CultureInfo's constructor that takes a string des exemples (par exemple, "en-us")

Fournit des informations sur une culture spécifique (appelée « locale "pour développement de code non géré). Les informations incluent les noms de la culture , le système d'écriture, le calendrier utilisé et la mise en forme des dates et des chaînes de tri .

Il est assez spécifique à ce qui est réellement utilisé dans le monde réel (par exemple, les paires pays/langue ont du sens). Vous pouvez également create your own cultures.

Vous avez précisé que la langue n'est peut-être pas celle parlée dans le pays. Pourriez-vous préciser à quoi exactement vous l'utiliserez? Sans plus d'informations, il semble que vous essayez de définir quelque chose de similaire à un CultureInfo. Alternativement, vous pouvez également définir un objet simple ayant juste les deux propriétés (Country et Language) où Country est une chaîne ISO 3166-2 et Language est un ISO 639-1 string as Edward Loper suggests below.

Vous pouvez stocker une liste des codes ISO dans un fichier XML et les analyser à l'aide de traditional techniques. J'ai suggéré CultureInfo parce que vous avez spécifié que vous cherchiez quelque chose dans la BCL.

L'utilisation énumérations est, en général, discouraged by the Framework Design Guidelines pour les jeux ouverts:

NE PAS utiliser un ENUM pour les jeux ouverts (tels que la version du système d'exploitation, les noms de vos amis, etc.).

Vous pouvez adopter une approche hybride où vous définissez deux classes statique qui a un tas de readonly statiques chaînes comme dans

// ISO-3166-2 codes 
public static Countries 
{ 
    public static readonly string France = "FR"; 
    ... 
} 

// CultureInfo style codes 
public static Languages 
{ 
    public static readonly string BritishEnglish = "en-GB"; 
} 

MISE À JOUR: Sur la base de votre commentaire que ce soit spécifiquement pour les films, vous pouvez toujours utiliser un CultureInfo pour la culture où il a été produit et la culture du contenu. Tout ce qui est au-delà est probablement trop politique pour que Microsoft participe à son intégration dans le système d'exploitation (cf. this). Ainsi, vous devrez définir votre propre.

+0

Merci, il ne toutes les langues. Et quel avantage CultureInfo me donnerait au lieu de simplement avoir un pays et une langue? Je pense aussi que cela me donnera plus de langues, non? Comme l'anglais de Nouvelle-Zélande, l'anglais de la Grande-Bretagne, etc.? –

+3

+1 - utilise ce qu'il y a. Il ne sert à rien de réinventer la roue. – ChrisF

+0

Merci, mais c'est pour les films. Donc le film peut venir de France mais en anglais. –

1

Je voudrais enregistrer et récupérer à partir de xml en utilisant une bibliothèque de sérialisation prédéfinie (par exemple this tutorial). Aussi, j'éviterais d'utiliser une énumération et j'utiliserais simplement des chaînes ou quelque chose comme CultureInfo.

+0

Mais je pourrais utiliser une chaîne dans le XML et utiliser enum dans le code, non? Ou vous voulez dire que vous n'utiliseriez pas enum dans le code aussi? –

+0

Je n'utiliserais pas une énumération dans le code. Généralement s'il y a plus de 3 ou 4 possibilités qu'une énumération n'est pas la bonne approche. – Pace

+0

Merci. Vous pensez que dans ce cas, c'est une mauvaise approche? Pour moi, il semble que c'est le plus simple. –

0

Cela pourrait être le cas où vous pouvez utiliser l'attribut xml: lang d'un élément tel que décrit ici: http://docs.oasis-open.org/dita/v1.1/OS/archspec/xmllang.html

Comme il l'indique, vous utilisez ensuite les identifiants « pays » LANGUE pour les locales. Cela peut être utilisé pour créer un objet CultureInfo lors de la désérialisation, c'est-à-dire que j'utiliserais des objets CultureInfo dans mon code.