translate method

Future<Translation> translate(
  1. String sourceText, {
  2. String from = 'auto',
  3. String to = 'en',
})

Translates texts from specified language to another

Implementation

Future<Translation> translate(String sourceText,
    {String from = 'auto', String to = 'en'}) async {
  for (var each in [from, to]) {
    if (!LanguageList.contains(each)) {
      throw LanguageNotSupportedException(each);
    }
  }

  final parameters = {
    'client': client == ClientType.siteGT ? 't' : 'gtx',
    'sl': from,
    'tl': to,
    'hl': to,
    'dt': 't',
    'ie': 'UTF-8',
    'oe': 'UTF-8',
    'otf': '1',
    'ssel': '0',
    'tsel': '0',
    'kc': '7',
    'tk': _tokenProvider.generateToken(sourceText),
    'q': sourceText
  };

  var url = Uri.https(_baseUrl, _path, parameters);
  final data = await http.get(url);

  if (data.statusCode != 200) {
    throw http.ClientException('Error ${data.statusCode}: ${data.body}', url);
  }

  final jsonData = jsonDecode(data.body);
  if (jsonData == null) {
    throw http.ClientException('Error: Can\'t parse json data');
  }

  final sb = StringBuffer();

  for (var c = 0; c < jsonData[0].length; c++) {
    sb.write(jsonData[0][c][0]);
  }

  if (from == 'auto' && from != to) {
    from = jsonData[2] ?? from;
    if (from == to) {
      from = 'auto';
    }
  }

  final translated = sb.toString();
  return _Translation(
    translated,
    source: sourceText,
    sourceLanguage: _languageList[from],
    targetLanguage: _languageList[to],
  );
}