Microsoft翻译nb-NO转换正常,但支持的语言api调用未列为支持的语言

时间:2017-02-10 10:38:33

标签: c# microsoft-translator

我想在发送翻译文本的请求之前检查Microsoft Translator是否支持某种语言。

我打电话给这个api: http://api.microsofttranslator.com/V2/Http.svc/GetLanguagesForTranslate

并返回语言列表。其中之一是:" no" 为Norweigan。

我的应用程序支持 nb-NO ...所以我的语言检查基本上归结为此代码:

string language = "nb-NO";
this.cachedSupportedLanguages = string[] { "no" };
return this.cachedSupportedLanguages.Contains(language);

我遇到的问题是,如果我将此请求发送到此api, nb-NO 作为语言",则转换回Norweigan : http://api.microsofttranslator.com/v2/Http.svc/Translate?text=textToTranslate&from=fromLanguage&to=toLanguage ......

...但是无法找到预先检查是否支持某种语言的方式,因为即使我这样做了:

new CultureInfo(language)

对于能够回归Norweigan的语言并不了解。

我有什么想法可以比明确的switch更好地检查这个?

修改

  

文化具有层次结构,例如特定的父母   文化是一种中立的文化,是中立文化的父母   InvariantCulture。 Parent属性返回中性文化   与特定文化相关联。

https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.71).aspx

如果我这样做:

CultureInfo cultureInfo = new CultureInfo(language);

// For languages like en-US
if (this.cachedSupportedLanguages.Any(x => x.Equals(cultureInfo.TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase)))
{
    return true;
}

// For languages like nb-NO where the explicit language is not supported but its parent culture is
if (!string.IsNullOrEmpty(cultureInfo.Parent.ToString()))
{
    if (cultureInfo.Parent.IsNeutralCulture)
    {
        if (!string.IsNullOrEmpty(cultureInfo.Parent.Parent.ToString()))
        {
            if (!string.IsNullOrEmpty(cultureInfo.Parent.Parent.CompareInfo.ToString()))
            {
                return this.cachedSupportedLanguages.Any(x => x.Equals(cultureInfo.Parent.Parent.CompareInfo.Name, StringComparison.OrdinalIgnoreCase));
            }
        }
    }
}

我得到了一个真实的......但我不完全明白父母是否总是可以安全地去获取这些信息?

2 个答案:

答案 0 :(得分:0)

Microsoft转换程序方法可返回您需要的信息。数据以JSON格式返回。您可以在一个api调用中获得支持的语言,用于文本翻译,语音翻译和文本到语音。您还可以获得更多信息。

了解相关信息并在以下网址进行试用:http://docs.microsofttranslator.com/languages.html

答案 1 :(得分:0)

GetLanguagesForTranslate对于挪威语返回nb,而不是帖子中所述的no。转到http://docs.microsofttranslator.com/languages.html,点击试试,然后在结果中看到这一点:

"nb": {
  "name": "Norwegian",
  "dir": "ltr"
},

一种方法是保留一个包含GetLanguagesForTranslate结果的表。首先直接查找您的文化代码,如果没有匹配,则在Parent上查找匹配项。为此,父母应该是可靠的。这样,您的代码就可以使用支持的语言,例如sr-Cyrlsr-Latnzh-Hanszh-Hant,并且当限定名称不可用时,可以回退到中性语言。