discontinuedPackage uni_translate has been discontinued.

translate method

  1. @override
Future<TranslateResponse> translate(
  1. TranslateRequest request
)
override

Implementation

@override
Future<TranslateResponse> translate(TranslateRequest request) async {
  List<TextTranslation> translations = [];

  Map<String, String> queryParameters = {
    'auth_key': _optionAuthKey,
    'text': request.text,
    'source_lang': request.sourceLanguage!.toUpperCase(),
    'target_lang': request.targetLanguage!.toUpperCase(),
  };

  String host = _isDeepLFree ? 'api-free.deepl.com' : 'api.deepl.com';
  var uri = Uri.https(host, '/v2/translate', queryParameters);

  final response = await http.post(
    uri,
    headers: {
      HttpHeaders.contentTypeHeader: 'application/json; charset=utf-8',
    },
  );

  String? errorMessage;

  if (response.statusCode == 200) {
    Map<String, dynamic> data = json.decode(utf8.decode(response.bodyBytes));

    if (data['translations'] != null) {
      Iterable l = data['translations'] as List;
      translations = l
          .map(
            (e) => TextTranslation(
              detectedSourceLanguage: e['detected_source_language'],
              text: e['text'],
            ),
          )
          .toList();
    }

    if (data['message'] != null) {
      errorMessage = [
        data['message'],
        data['detail'] ?? '',
      ].join('\n');
    }
  } else {
    errorMessage = _knownErrors['5**'];
    if (_knownErrors.containsKey('${response.statusCode}')) {
      errorMessage = _knownErrors['${response.statusCode}'];
    }
  }

  if ((errorMessage ?? '').trim().isNotEmpty) {
    throw UniTranslateClientError(
      message: errorMessage!,
    );
  }

  return TranslateResponse(
    translations: translations,
  );
}