Как получить родное имя (эндоним) языка из кода страны в C #?

2

Могу ли я получить название языка из кода страны? Я создал программу, чтобы позволить пользователю выбрать локализацию для отображения валюты. Это программа, которая выполняет настройку.

CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
Dictionary<string, string> Misc_dictLocalization = new Dictionary<string, string>();
var sortList = cinfo.OrderBy(p => p.EnglishName).ToList();
foreach (CultureInfo cul in sortList)
{
    //Add country name and bind with country code
    Misc_dictLocalization.Add(cul.Name, cul.EnglishName);
}
Misc_LocalizationCombobox.DataSource = new BindingSource(Misc_dictLocalization, null);
Misc_LocalizationCombobox.DisplayMember = "Value";
Misc_LocalizationCombobox.ValueMember = "Key";

На выбор Combobox,

string key = ((KeyValuePair<string, string>)Misc_LocalizationCombobox.SelectedItem).Key;
string value = ((KeyValuePair<string, string>)Misc_LocalizationCombobox.SelectedItem).Value;
Misc_CountryCode.Text = key;
decimal dec = Convert.ToDecimal(Misc_DecimalNumber.Text);
Misc_CurrencyFormat.Text = dec.ToString("C", new CultureInfo(Misc_CountryCode.Text));

Изображение 174551

Я сейчас пользуюсь

var allCultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);
string countrycode = "ar-SA";
string langname = allCultures.FirstOrDefault(c => c.Name == countrycode).DisplayName;
//langname will have "Arabic"

Как получить родное имя (эндоним) из кода страны?

Исходя из Википедии Список кодов ISO 639-1, мне нужно получить;

1) Филиппины (fil-PH) => Тагальский

2) Вьетнам (vi-VN) => Tiếng Việt

3) Соединенные Штаты (en-US) => английский

4) арабский (ar-SA) => العربية

РЕШЕНИЕ РЕШЕНО (кредит Nhan Phan).. Точно так же, как я хотел бы Изображение 174551

DirectoryInfo di = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Language"));
FileInfo[] Files = di.GetFiles("*.xaml");
int ID = 1;
var allCultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);
LocalizationProperty.LangLoc = new List<AppModel.LanguageLocalization>();
foreach (FileInfo file in Files)
{
    string countrycode = file.Name.Replace(".xaml", "").Replace("Resources.", "");
    int index = countrycode.LastIndexOf("-");
    string ISOName = countrycode;
    if (index > 0)
        ISOName = ISOName.Substring(0, index);
    string langname = allCultures.FirstOrDefault(c => c.Name == ISOName).NativeName;
    AppModel.LanguageLocalization applang = new AppModel.LanguageLocalization
    {
        LanguageID = ID,
        CountryCode = countrycode,
        LanguageName = langname
    };
    LocalizationProperty.LangLoc.Add(applang);
    ID += 1;
}
string langjson = Newtonsoft.Json.JsonConvert.SerializeObject(LocalizationProperty.LangLoc, Formatting.Indented);
LogEvents($"[{PageTitle} Language file retrieved. {langjson}", EventLogEntryType.Information);

Object2JsonString: -

[
   {
      "LanguageID":1,
      "CountryCode":"ar-SA",
      "LanguageName":"العربية"
   },
   {
      "LanguageID":2,
      "CountryCode":"en-US",
      "LanguageName":"English"
   },
   {
      "LanguageID":3,
      "CountryCode":"fil-PH",
      "LanguageName":"Filipino"
   },
   {
      "LanguageID":4,
      "CountryCode":"ms-MY",
      "LanguageName":"Melayu"
   },
   {
      "LanguageID":5,
      "CountryCode":"syr-SY",
      "LanguageName":"ܣܘܪܝܝܐ"
   },
   {
      "LanguageID":6,
      "CountryCode":"ta-IN",
      "LanguageName":"தமிழ்"
   },
   {
      "LanguageID":7,
      "CountryCode":"tt-RU",
      "LanguageName":"Татар"
   },
   {
      "LanguageID":8,
      "CountryCode":"vi-VN",
      "LanguageName":"Tiếng Việt"
   },
   {
      "LanguageID":9,
      "CountryCode":"zh-CN",
      "LanguageName":"中文"
   }
]

Мнение: - Изображение 174551

Теги:
localization
globalization
cultureinfo

1 ответ

3
Лучший ответ

Вы можете получить его через NativeName вместо DisplayName:

var allCultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);
string countrycode = "ar-SA";
string langname = allCultures.FirstOrDefault(c => c.Name == countrycode).NativeName;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню