2009-12-28 113 views
2

我将从xml中检索这些数据,以便为数千个对象初始化它。如何在C#中表示国家和语言?

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

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

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

另外CountryLanguage不应该组合。 Language将不会代表指定的Country中所使用的语言。

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

我应该做的像?:

<Language>English</Language> 

回答

8

考虑寻找CultureInfo's constructor that takes a string的例子(如 “EN-US”)

提供有关特定 文化(称为“区域设置信息“针对 非托管代码开发)。 信息包括 文化的名称,书写系统,使用的日历 ,以及日期和排序字符串的格式 。

这对于真实世界中实际使用的东西(例如,国家/语言对是有意义的)具有相当特定的意义。你也可以create your own cultures

您指定该语言可能不是该国家所说的语言。你能否澄清一下你会用它做什么?没有进一步的信息,似乎你正在试图定义类似于CultureInfo的东西。

或者,您也可以定义一个简单的对象,仅仅有两个属性(国家和语言),其中国家是ISO 3166-2字符串和语言是一个ISO 639-1 stringEdward Loper suggests below

您可以将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)。因此,你必须定义你自己的。

+0

谢谢,它有所有的语言。 CultureInfo会给我什么优势,而不仅仅是拥有一个国家和语言?我也认为这会给我更多的语言,对吧?像新西兰英语,英国英语等? – 2009-12-28 18:14:28

+3

+1 - 使用那里的东西。重新发明车轮毫无意义。 – ChrisF 2009-12-28 18:18:53

+0

谢谢,但这是为电影。所以这部电影可以来自法国但是用英语。 – 2009-12-28 18:24:08

1

我会使用预建序列化库(例如this tutorial)从xml保存和检索。另外,我会避免使用枚举并简单地使用字符串或类似CultureInfo的东西。

+0

但我可以在xml中使用一个字符串,并在代码中使用枚举,对吧?或者你的意思是你不会在代码中使用枚举? – 2009-12-28 18:19:32

+0

我不会在代码中使用枚举。一般来说,如果有超过3或4种可能性,那么枚举不是正确的方法。 – Pace 2009-12-28 18:56:11

+0

谢谢。你认为这种情况下,这是一个坏的方法?对我来说,它似乎是最简单的。 – 2009-12-28 19:13:52

0

这可能是在那里你可以使用XML的情况:这里所描述的元素的lang属性:http://docs.oasis-open.org/dita/v1.1/OS/archspec/xmllang.html

因为它表明,你再使用“国家语言”标识符的语言环境。这可以用来在反序列化时创建一个CultureInfo对象,即我将在我的代码中使用CultureInfo对象。