Чтобы получить список стран, более или менее поддерживаемых .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)«Польша» для Польши, «Германия» для Германии и т. д .;некоторые будут переведены на несколько языков (это интересно, потому что США видны как Соединенные Штаты и как Estados Unidos) DisplayName
что должно быть тем, что вы ищете, но, к сожалению, нет - Microsoft "забыла"чтобы перевести его в .Net Framework (возможно, все в порядке, потому что тогда это не должно быть свойство) - Имя, которое, в отличие от имени, предполагает, даст вам двухбуквенный код страны.
Так что вы можете сделать с этой информацией?Теоретически вы можете использовать переведенные названия стран - в этом случае вы просто создаете словарь (Dictionary<int, string>
) и добавляете LCID с соответствующей строкой NativeName и используете его в качестве источника для вашего выпадающего меню.
Теоретически тот, кто родился вСтрана должна быть в состоянии понимать хотя бы один из ее языков (по крайней мере, это происходит в большинстве случаев).
В действительности вы, вероятно, хотите, чтобы уникальный список стран был переведен на любой язык, который ваше приложение отображает в данный момент.Вы можете использовать метод выше, чтобы получить список стран и использовать, например, 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()
.