我想在发送翻译文本的请求之前检查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));
}
}
}
}
我得到了一个真实的......但我不完全明白父母是否总是可以安全地去获取这些信息?
答案 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-Cyrl
,sr-Latn
,zh-Hans
和zh-Hant
,并且当限定名称不可用时,可以回退到中性语言。