如何用C#表示国家和语言?

如何用C#表示国家和语言?,c#,.net,xml,enums,base-class-library,C#,.net,Xml,Enums,Base Class Library,我将从xml中检索此数据,以对数千个对象进行初始化 因此,如果MyObject具有Country和Language属性,那么它们应该是什么,以及如何在代码和xml中表示它们 我正在考虑在代码中使用Enum 我只是在寻找其他人的意见,以找到最好的方法来做到这一点。所有的语言和国家都在BCL中吗?这样我就可以用写一个的方法了 此外,不应将国家和语言组合在一起。语言将不代表指定的国家所说的语言 如何在代码和Xml中最好地实现这一点 我应该这样做吗 <Language>English<

我将从xml中检索此数据,以对数千个对象进行初始化

因此,如果
MyObject
具有
Country
Language
属性,那么它们应该是什么,以及如何在代码和xml中表示它们

我正在考虑在代码中使用
Enum

我只是在寻找其他人的意见,以找到最好的方法来做到这一点。所有的语言和国家都在BCL中吗?这样我就可以用写一个的方法了

此外,不应将
国家
语言
组合在一起。
语言
将不代表指定的
国家所说的语言

如何在代码和Xml中最好地实现这一点

我应该这样做吗

<Language>English</Language>
英语
考虑查看示例(例如“en-us”)

提供有关特定项目的信息 区域性(称为 非托管代码开发)。这个 这些信息包括该项目的名称 文化,写作体系,文化 使用的日历,以及 日期和排序字符串

它相当具体地反映了现实世界中实际使用的内容(例如,国家/语言对是有意义的)。你也可以

您指定该语言可能不是该国使用的语言。你能澄清一下你到底要用它做什么吗?如果没有进一步的信息,您似乎正在尝试定义类似于

或者,您也可以定义一个简单的对象,它只有两个属性(Country和Language),其中Country是字符串,Language是as

您可以将ISO代码列表存储在XML文件中,并使用XML解析它们。我建议使用CultureInfo,因为您指定要在BCL中查找某些内容

通常,对于开放集,使用枚举是:

不要将枚举用于开放集(例如 作为操作系统版本,名称 你的朋友等等)

您可以采用一种混合方法,定义两个静态类,其中包含一组静态字符串,如中所示

// 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";
}

更新:根据您的评论,这是专门为电影制作的,您仍然可以使用CultureInfo作为制作区域和内容的区域。除此之外的任何事情对于微软来说都可能太过政治化,以至于不能让它成为操作系统(c.f.)的一部分。因此,您必须自己定义。

我将使用预构建的序列化库(例如)从xml中保存和检索。此外,我将避免使用枚举,而只使用字符串或类似CultureInfo的内容。

在这种情况下,您可以使用元素的xml:lang属性,如下所述:

正如它所建议的,然后使用地区的“国家语言”标识符。这可用于在反序列化时创建CultureInfo对象,即我将在代码中使用CultureInfo对象。

ISO 639-2(语言名称表示代码)提供了一个相当完整的人类语言列表,以及可用于这些语言的标准代码:

同样,ISO 3166-1给出了所有国家的标准代码:


谢谢,它有所有语言吗。而CultureInfo会给我什么样的优势,而不仅仅是一个国家和一种语言?我也认为这会给我更多的语言,对吗?像新西兰英语、英国英语等?+1-使用那里的内容。重新发明轮子没有意义。谢谢,但这是电影用的。所以这部电影可以来自法国,但用英语。@Joan Venge-啊,对不起。我只是略读了一下问题,没有读到。谢谢,不用担心。我不知道CultureInfo,所以我向你学习了,哈哈。但是我可以在xml中使用字符串,在代码中使用enum,对吗?或者你的意思是你不会在代码中也使用枚举?我不会在代码中使用枚举。通常,如果有超过3或4种可能性,则枚举不是正确的方法。谢谢。你认为在这种情况下,这是一个糟糕的方法?对我来说,这似乎是最简单的。