2009-12-28 30 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對象。

相關問題