如何将国家名称翻译成当前的文化?

时间:2017-12-08 12:15:31

标签: c#

我有一个从网上抓取的Nations列表,这是以英文返回的。我将每个Nation保存在这样的列表中:

List<Nation> Nations { get; set; } = new List<Nation>();

其中Nation有此实现:

public Nation
{
    public string Name { get; set; }
    public string Link { get; set; }
}

属性Name包含Nation 的英文名称,所以基本上我会得到类似的内容:

England
Italy
France
...

我正在寻找一种方法来翻译当前文化中列表Nations的每个项目的名称,因此假设当前的软件语言是意大利语:

Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("it");

我怎样才能用意大利语翻译所有国家?

我没有在.NET框架中找到任何允许这样做的方法,如:

//Get the current language of the app
var language = Thread.CurrentThread.CurrentCulture;

//Iterate through all items of the list and change the language 
foreach(var nation in nations)
{
    nation.Name = GetTranslatedName(nation.Name);
}

有什么建议吗?想法?

感谢。

2 个答案:

答案 0 :(得分:0)

我认为.NET中没有本机支持。 我建议使用this third-party API

例如:https://restcountries.eu/rest/v2/name/Ukraine

答案 1 :(得分:0)

您可以尝试使用Google翻译:

将语言对传递为en|it

public string GoogleTranslateText(string textToTranslate, string languagePair)
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", textToTranslate, languagePair);
    WebClient webClient = new WebClient();
    webClient.Encoding = System.Text.Encoding.UTF8;
    string translatedText = webClient.DownloadString(url);
    translatedText = translatedText.Substring(translatedText.IndexOf("<span title=\"") + "<span title=\"".Length);
    translatedText = translatedText.Substring(translatedText.IndexOf(">") + 1);
    translatedText = translatedText.Substring(0, translatedText.IndexOf("</span>"));
    return translatedText.Trim();
}