translateFile function
Implementation
Future<StringBuffer> translateFile({
required Map<String, dynamic> data,
required String translateTo,
String? translateFrom,
}) async {
final translator = GoogleTranslator();
final buffer = StringBuffer();
buffer.writeln('{');
final progress = Progress(
length: data.length,
rightPrompt: (progress) {
return "$progress of ${data.length} sentences translated in $translateTo";
},
).interact();
for (final key in data.keys) {
String originalText = data[key];
final tokenRegex = RegExp(r'(@[^\s]+|\{\{.*?\}\})');
final tokenMap = <String, String>{};
int counter = 0;
final modifiedText =
originalText.replaceAllMapped(tokenRegex, (match) {
final placeholder = '__TOKEN_${counter}__';
tokenMap[placeholder] = match.group(0)!;
counter++;
return placeholder;
});
final translation = await translator.translate(
modifiedText,
from: translateFrom ?? 'auto',
to: translateTo,
);
String translatedText = translation.text;
tokenMap.forEach((placeholder, value) {
translatedText = translatedText.replaceAll(placeholder, value);
});
final text = translatedText
.replaceAll('"', r'\"')
.replaceAll("'", r"\'");
buffer.writeln(' "$key": "$text"${data.keys.last == key ? "" : ","}');
progress.increase(1);
}
buffer.writeln('}');
progress.done();
return buffer;
}