translate method

  1. @override
Future<String> translate(
  1. String source,
  2. LanguageCode sourceLanguage,
  3. LanguageCode target
)
override

Translates given text to specified language source - text which should be translated sourceLanguage - the language in which source was given target - language to which source should be translated

Implementation

@override
Future<String> translate(
  String source,
  LanguageCode sourceLanguage,
  LanguageCode target,
) async {
  logger.info('Translate "$source" from $sourceLanguage to $target');

  final apiResult = await _httpClient.post<_LibreTranslateResponse>(
    path: '/translate',
    headers: {
      'Content-Type': 'application/json',
    },
    body: {
      'q': source,
      'source': sourceLanguage,
      'target': target,
      'api_key': (apiKey ?? '').isEmpty ? null : apiKey,
    },
    decoder: (response) => _LibreTranslateResponse.fromJson(
      jsonDecode(utf8.decode(response.bodyBytes)),
    ),
  );

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

  if (apiResult.valueUnsafe.translatedText.isEmpty) {
    logger.warning('Translation is empty. Source: $source; Target: $target');
    return source;
  }

  return apiResult.valueUnsafe.translatedText;
}