translateText function
Translates text from one language to another using the MyMemory API.
Splits the text into smaller chunks if it exceeds the maximum length.
param text
The text to be translated.
param from
The source language.
param to
The target language.
returns
The translated text.
Implementation
Future<String> translateText(String text, Language from, Language to) async {
if (text.isEmpty) {
return "";
}
if (text.length > 300) {
for (String splitter in splitters) {
if (text.contains(splitter)) {
var sentences = text.split(splitter);
// half by sentences
var half = sentences.length ~/ 2;
var firstHalf = sentences.sublist(0, half).join(splitter);
var secondHalf = sentences.sublist(half).join(splitter);
var f = translateText(firstHalf, from, to);
var s = translateText(secondHalf, from, to);
return Future.wait([f, s]).then((value) => value.join(splitter));
}
}
}
var url = Uri.parse(
"https://api.mymemory.translated.net/get?q=$text&langpair=${from.code}|${to.code}",
);
var response = await http.get(url);
if (response.statusCode == 200) {
// json decode
var json = response.body;
var data = jsonDecode(json);
return data["responseData"]["translatedText"];
} else {
return "";
}
}