translate method
Translates text to target language
lang parameter can take either target language code
or source_language_code-destination_language_code
Example: either 'ru' or 'en-ru'
Text parameter shouldn't increase length of 10000 characters, otherwise error message will be returned
Optional named parameter type, is by default -- plain
If you're interested in translating a webpage, make sure you pass html as its value
And it'll take care of rest :)
In case of success, returns
{ 'text': ' ... ' }
In case of error, returns
{ 'error': ' ... ' }
Implementation
Future<Map<String, String>> translate(
String text,
String lang, {
String type: 'plain',
}) {
var completer = Completer<Map<String, String>>();
if (text == null || text.isEmpty || text.length > 10000)
completer.complete({
'error': 'Text no okay',
});
else
HttpClient()
.postUrl(
Uri.https(domain, path, {
'key': apiKey,
'text': text,
'lang': lang,
'format': type,
}),
)
.then(
(HttpClientRequest request) => request.close(),
onError: (e) => completer.complete({
'error': e.toString(),
}),
)
.then(
(HttpClientResponse response) =>
response.transform(utf8.decoder).transform(json.decoder).listen(
(data) => completer.complete(
response.statusCode == 200
? {
'text': List<String>.from(
Map<String, dynamic>.from(data)
.remove('text'))
.join(' ')
}
: {
'error': Map<String, dynamic>.from(data)
.remove('message')
},
),
onError: (e) => completer.complete({
'error': e.toString(),
}),
cancelOnError: true,
),
onError: (e) => completer.complete({
'error': e.toString(),
}),
);
return completer.future;
}