爲了獲得國家的名單或多或少的.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()
。
問題是爲什麼你想這樣做?爲什麼你首先需要這些信息?另一個問題是,爲什麼你需要強制用戶選擇國家,如果(通常)可以從網絡瀏覽器檢測到? –
我會編輯澄清 – ignaciofuentes