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

时间:2009-12-28 18:09:21

标签: c# .net xml enums base-class-library

我将从xml中检索此数据,以便为数千个对象初始化它。

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

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

我只是在寻找其他人的意见,以找到最佳方法。所有的语言和国家都在BCL中,所以我可以使用写一个语言吗?

CountryLanguage也不应合并。 Language不代表指定Country中使用的语言。

如何最好地为代码和Xml实现这一点。

我应该这样做吗?:

<Language>English</Language>

4 个答案:

答案 0 :(得分:8)

考虑查看CultureInfo's constructor that takes a string示例(例如“en-us”)

  

提供有关特定信息的信息   文化(称为“语言环境”)   非托管代码开发)。该   信息包括的名称   文化,写作系统,   使用的日历和格式   日期和排序字符串。

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

您指定该语言可能不是该国家/地区使用的语言。你能澄清一下你究竟会用它做什么的吗?如果没有进一步的信息,您似乎正在尝试定义类似于CultureInfo的内容。

或者,您也可以定义一个只有两个属性(国家/地区和语言)的简单对象,其中Country是ISO 3166-2字符串,Language是ISO 639-1 string Edward Loper suggests below。< / p>

您可以将ISO代码列表存储在XML文件中,并使用traditional techniques对其进行解析。我建议CultureInfo,因为你指定你正在寻找BCL中的东西。

对于开放集合,通常使用枚举discouraged by the Framework Design Guidelines

  

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

您可以采用混合方法,在其中定义两个静态类,其中包含一堆静态readonly字符串,如

// 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。this)。因此,您必须定义自己的。

答案 1 :(得分:2)

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

http://www.loc.gov/standards/iso639-2/php/code_list.php

同样,ISO 3166-1为所有国家/地区提供标准代码:

http://en.wikipedia.org/wiki/ISO_3166-1

答案 2 :(得分:1)

我会使用预建的序列化库(例如this tutorial)从xml保存和检索。此外,我会避免使用枚举,只需使用字符串或类似CultureInfo。

答案 3 :(得分:0)

这可能是您可以使用元素的xml:lang属性的情况,如下所述:http://docs.oasis-open.org/dita/v1.1/OS/archspec/xmllang.html

根据建议,您可以使用“country-LANGUAGE”标识符进行区域设置。这可以用于在反序列化时创建CultureInfo对象,即我将在我的代码中使用CultureInfo对象。