2017-04-18 60 views
3

我需要爲國家獲取兩個字母的ISO地區名稱ISO 3166-ISO 3166-1 alpha 2。我的問題是我只有瑞典語的國家名稱,例如Sverige代表SwedenTyskland代表Germany。是否有可能只從這些信息獲取RegionInfo?我知道英文國名是可以的。C#獲取RegionInfo,TwoLetterISORegionName,瑞典國名

作品:

var countryName = "Sweden"; 
//var countryName = "Denmark"; 
var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID)); 
var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(countryName)); 
var twoLetterISORegionName = englishRegion.TwoLetterISORegionName; 

https://stackoverflow.com/a/14262292/3850405

回答

4

NativeName嘗試比較:

string nativeName = "Sverige"; // Sweden 

var region = CultureInfo 
    .GetCultures(CultureTypes.SpecificCultures) 
    .Select(ci => new RegionInfo(ci.LCID)) 
    .FirstOrDefault(rg => rg.NativeName == nativeName); 

Console.Write($"{region.TwoLetterISORegionName}"); 

編輯:看來,我們其實是想通過其瑞典找出RegionInfo實例名字

Sverige -> Sweden 
    Tyskland -> Germany 
    ... 

在這種情況下,我們應該使用DisplayName而不是NativeName

string swedishName = "Sverige"; // Sweden 

var region = CultureInfo 
    .GetCultures(CultureTypes.SpecificCultures) 
    .Select(ci => new RegionInfo(ci.LCID)) 
    .FirstOrDefault(rg => rg.DisplayName == swedishName); 

,我們應該確保我們使用本地化

DisplayName屬性顯示該國/地區名稱的 語言的.NET F的本地化版本 ramework。例如, DisplayName屬性在英文版的.NET Framework上以英文顯示國家/地區,在西班牙語中以西班牙語顯示在.NET Framework的西班牙語版 版本。

+0

適用於'Sverige'和'Danmark',但在例如'德國'的'Tyskland'上失敗。 – Ogglas

+0

「德國」(英文名稱)應該是'Deutschland'(當地名稱),「丹麥」時應該是'Danmark','希臘'則應該是'Ελλάδα'等。 –

+0

是的,但保存的值I '德國'有'Tyskland'。 :) – Ogglas