2017-02-10 223 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