translate method
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],
);
}