Как получить родное имя (эндоним) языка из кода страны в C #? - PullRequest
0 голосов
/ 24 декабря 2018

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

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));

enter image description here

Я в настоящее времяиспользуя

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) ..Точно каккак бы я хотел Language resources folder

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":"中文"
   }
]

Вид: - Main select language page

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете получить его через 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...