2017-02-10 200 views
1

我想在发送翻译文本请求之前检查Microsoft翻译是否支持某种语言。Microsoft翻译nb-NO翻译得很好,但支持的语言api调用不会列为支持的语言

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

并返回语言列表。其中之一是:“否” Norweigan。

我的应用程序有NB-NO支持......所以我的语言主要检查归结为以下代码:

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

我遇到的问题是,如果我发送请求关闭这个API与NB-NO为“到语言”,翻译回落到挪威语: http://api.microsofttranslator.com/v2/Http.svc/Translate?text=textToTranslate&from=fromLanguage&to=toLanguage ...

...但我找不到前检查的方式,如果一门语言是suppo因为即使我这样做:

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

我得到真正的...但我不完全明白如果家长总是将是一个安全的赌注去对于这些信息?

回答

0

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

了解它并尝试在:http://docs.microsofttranslator.com/languages.html