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 "";
}
}