2011-07-12 64 views
0

說,我想我的應用程序被completetely國際化......和用戶應該從表單中的國家名單(下拉列表)選擇...如何處理asp.net mvc中的靜態列表國際化?

國家沒有(目前)在我的數據庫中的表但我願意改變這一點,雖然林不知道最好的主意是什麼。

例如,在西班牙德國是德國。

許多國家有不同的名稱,所以這需要用不同的語言。

我該怎麼做?請幫忙。

編輯澄清:

請記住,這個國家下拉無關,與語言切換機制......我們的應用程序應該跟蹤用戶的出生地地址....所以我想要的是取決於當前選擇的文化possilbe國家的不同列表將顯示....重申我的例子

  • 誰是出生在德國的用戶,並使用英語將應用程序 從dropdwon中選擇德國

  • 出生在德國的用戶使用西班牙語的應用程序 從下拉列表中選擇Alemania。

語言切換工作得很好。任何用戶都可以選擇任何語言來顯示應用程序,並將其存儲在URL上。

+0

問題是爲什麼你想這樣做?爲什麼你首先需要這些信息?另一個問題是,爲什麼你需要強制用戶選擇國家,如果(通常)可以從網絡瀏覽器檢測到? –

+0

我會編輯澄清 – ignaciofuentes

回答

1

爲了獲得國家的名單或多或少的.Net可以使用的CultureInfo和RegionInfo這樣的支持:

List<RegionInfo> allRegions = new List<RegionInfo>(); 
var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
foreach (CultureInfo culture in specificCultures) 
{ 
    var info = new RegionInfo(culture.LCID); 
    allRegions.Add(info); 
} 

這會給你所有的國家,其中一些多次(因爲不同的語言正在使用)。

RegionInfo有一些有趣的特性:

  • NativeName,這將使你的國家的翻譯名稱,但不幸的是一個對應於給定的區域設置標識符(LCID),那就是「波蘭」波蘭「德國」爲德國等;一些將被翻譯成幾種語言(這很有趣,因爲美國既可以看作美國也可以看作美國國家聯盟)
  • DisplayName你應該找什麼,但不幸的是不是 - 微軟「忘了」翻譯它在.Net框架(也許它沒問題,因爲它不應該是屬性然後)
  • 名稱不同於名稱建議會給你兩個字母的國家代碼。

那麼你可以用這些信息做什麼?理論上,您可以使用翻譯的國家名稱 - 在這種情況下,您只需創建一個字典(Dictionary<int, string>)並添加帶有相應NativeName字符串的LCID,並將其用作下拉菜單的源。
從理論上講,在該國出生的人應該能夠理解其至少一種語言(至少大部分時間發生這種情況)。

但實際上,您可能希望擁有獨特的翻譯成您的應用程序目前顯示的任何語言的國家/地區列表。您可以使用上述方法獲取國家列表並使用例如DisplayName(或EnglishName)。在運行時,您可以像解任何其他字符串一樣將它解析爲翻譯名稱。由於需要在後端進行,因此您可以添加另一個資源文件(可以放在App_GlobalResources中,無關緊要),並在代碼隱藏中讀取它。沒有更多的理論,還需要一些代碼示例:

const string RESOURCE_FILE = "Countries"; 
Dictionary<string, string> countryNames = new Dictionary<string, string>(); 

var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
foreach (CultureInfo culture in specificCultures) 
{ 
    var info = new RegionInfo(culture.LCID); 
    var name = info.EnglishName; 
    var translated = GetGlobalResourceObject(RESOURCE_FILE, name).ToString(); 
    countryNames[name] = translated; 
} 

如果你想讀特定語言(比CurrentUICulture等)的名稱傳遞CultureInfo對象作爲第三個參數GetGlobalResourceObject()

+0

我希望C#對你來說可以,因爲你忘了選擇語言。通過正確標記問題,你肯定能得到更多的答案...... –

+0

我剛纔看到它是Asp.Net-MVC的問題......嗯,我相信你仍然可以使用這個解決方案(也許稍作修改)。 –