Я хотел бы проверить, поддерживается ли язык Microsoft Translator, перед отправкой запроса на перевод текста.Microsoft переводчик nb-NO переводит отлично, но поддерживаемый язык 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);
Проблема у меня в том, если я отправить запрос от этого апи с NB-NO как «на язык», перевод возвращается к норвежским: http://api.microsofttranslator.com/v2/Http.svc/Translate?text=textToTranslate&from=fromLanguage&to=toLanguage ...
... но я не могу найти способ предварительной проверки, если язык является Suppo rted потому, что даже если я делаю:
new CultureInfo(language)
Он не имеет каких-либо знаний о языке будучи в состоянии возвратиться к норвежским.
Любые идеи, как я могу проверить это лучше, чем явное 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));
}
}
}
}
Я получаю истинное ... Но я не совсем понимаю, если Родитель всегда будет безопасная ставка, чтобы перейти к за эту информацию?