translateBulkToSingleTarget method

  1. @override
Future<List<String>> translateBulkToSingleTarget(
  1. List<String> sources,
  2. LanguageCode sourceLanguage,
  3. LanguageCode target
)
override

Translates given texts to specified language sources - list of text which should be translated sourceLanguage - the language in which sources were given target - language to which sources should be translated

Implementation

@override
Future<List<String>> translateBulkToSingleTarget(
  List<String> sources,
  LanguageCode sourceLanguage,
  LanguageCode target,
) async {
  logger.info(
      'Translate bulk "$sources" from $sourceLanguage to single $target');

  List<MapEntry<String, String>> parameters = [];
  parameters.add(MapEntry('source_lang', sourceLanguage));
  parameters.add(MapEntry('target_lang', target));
  for (final source in sources) {
    parameters.add(MapEntry('text', Uri.encodeComponent(source)));
  }

  final parametersStr =
      parameters.map((x) => '${x.key}=${x.value}').join('&');

  final apiResult = await _httpClient.post<_DeepLTranslation>(
    path: 'v2/translate?$parametersStr',
    headers: {
      'Authorization': 'DeepL-Auth-Key $apiKey',
    },
    decoder: (response) => _decodeTranslationJson(response.body),
    body: {},
  );

  if (!apiResult.succeeded) {
    logger.warning('Translation failed');
    return sources;
  }

  return apiResult.valueUnsafe.translations.map((x) => x.text).toList();
}