translateText function

Future<String> translateText(
  1. String text,
  2. Language from,
  3. Language to
)

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