translateToTargetsList method
Future<Translation>
translateToTargetsList(
- String source,
- LanguageCode sourceLanguage,
- List<
LanguageCode> targets
override
Translates given text to specified languages
source
- text which should be translated
sourceLanguage
- the language in which source
was given
targets
- list of languages to which source
should be translated
Implementation
@override
Future<Translation> translateToTargetsList(
String source,
LanguageCode sourceLanguage,
List<LanguageCode> targets,
) async {
logger
.info('Translate "$source" from $sourceLanguage to multiple $targets');
final targetsQueryParam = targets.map((x) => 'to=$x').join('&');
final apiResult = await _httpClient.post<List<_AzureTranslation>>(
path: 'translate?api-version=3.0&from=$sourceLanguage&$targetsQueryParam',
decoder: (response) => _decodeJson(response.body),
headers: {
'Content-Type': 'application/json',
},
body: [
{
'Text': source,
},
],
);
if (!apiResult.succeeded) {
logger.warning('Translation failed');
return Translation(
source: source,
sourceLanguage: sourceLanguage,
translations: targets.map((x) => MapEntry(x, source)).toMap(),
);
}
Map<LanguageCode, String> translations = {};
for (final translationItem in apiResult.valueUnsafe.first.translations) {
translations[translationItem.to] = translationItem.text;
}
return Translation(
source: source,
sourceLanguage: sourceLanguage,
translations: translations,
);
}