【问题标题】:How to get language culture from given language name?如何从给定的语言名称中获取语言文化?
【发布时间】:2021-06-13 01:15:21
【问题描述】:

我将用户的源语言和目标语言作为输入,我想使用 .Net 库生成这些输入的文化,如下所示;

例如,用户从两个组合框中选择“English”和“Turkish”。然后我想从“英语”和土耳其语中生成“En”和“Tr”。我想为所有可能的语言实现这一点,这样做的正确方法是什么?

我将在我的请求中使用这些文化来翻译文本,而不是这个;

string url = String.Format("https://translate.googleapis.com/translate_a/single?client=gtx&sl={0}&tl={1}&dt=t&q={2}",
       "En", "Tr", Uri.EscapeUriString(input));

我想用这个;

string url = String.Format("https://translate.googleapis.com/translate_a/single?client=gtx&sl={0}&tl={1}&dt=t&q={2}",
       sourceLanguage, targetLanguage, Uri.EscapeUriString(input));

我不想使用字典,因为我需要手动输入每种语言的所有信息,我想用 CultureInfo 类来做,但我还没弄清楚该怎么做。

【问题讨论】:

  • 您的实际问题是什么?知道有效的语言 ID?
  • 您可以从一开始就将此信息与语言名称相关联。例如,使用包含以下对的 Dictionary<string, string>:English, en-GB、Turkish, tr-TR 等。您以某种方式将这些名称放入您的 ComboBoxes 中。
  • 我想要做的基本上是使用 .Net 库将“English”转换为“En”,将“Turkish”转换为“Tr”等。
  • 好的,但是,您是如何将这些名称添加到组合框的?你应该有一个字符串的集合,某种来源。请注意,例如,English 非常模糊。您有大约 10 种使用该名称的子语言。无论如何,您可以获得DisplayName.StartsWith("English") 所在的第一个文化并阅读其TwoLettersISOLanguageName 属性。
  • 好吧,如果你这样做:var culture = CultureInfo.GetCultures(CultureTypes.NeutralCultures).FirstOrDefault(c => c.DisplayName.StartsWith("English"))?.TwoLetterISOLanguageName;,够好吗?

标签: c# language-translation google-translation-api


【解决方案1】:

使用System.Globalization。

添加using语句:using System.Globalization;

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

foreach (CultureInfo ci in cultures)
{
    string output = String.Format("Name: {0} DisplayName: {1} 2-Letter Name: {2} 3-Letter Name: {3}", ci.Name, ci.DisplayName, ci.TwoLetterISOLanguageName, ci.ThreeLetterISOLanguageName);
    System.Diagnostics.Debug.WriteLine(output);
}

注意:您要的数据在属性TwoLetterISOLanguageName中。

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多