dev
dart 50 lines 1.48 KB
Raw
1 import 'package:translator/translator.dart';
2
3 import '../../print_verbose_dummy.dart';
4 import 'arb_file_utils.dart';
5 import 'translation_constants.dart';
6
7 final translator = GoogleTranslator();
8
9 Future<void> appendTranslation(String lang, String key, String text) async {
10 final fileName = getArbFileName(lang);
11 final translation = await getTranslation(text, lang);
12
13 appendStringToArbFile(fileName, key, translation);
14 }
15
16 Future<void> appendTranslations(String lang, Map<String, String> defaults) async {
17 final fileName = getArbFileName(lang);
18 final translations = <String, String>{};
19
20 for (var key in defaults.keys) {
21 final value = defaults[key]!;
22 final translation = await getTranslation(value, lang);
23
24 translations[key] = translation;
25 }
26
27 appendStringsToArbFile(fileName, translations);
28 }
29
30 Future<String> getTranslation(String text, String lang) async {
31 if (lang == defaultLang) return text;
32
33 final regExp = RegExp(r'{(.*?)}');
34 final placeholder =
35 regExp.allMatches(text).map((e) => text.substring(e.start, e.end)).toList().asMap();
36
37 String translation = text;
38 try {
39 translation = (await translator.translate(text, from: defaultLang, to: lang)).text;
40 } catch (e) {
41 print("$lang, $text, $e");
42 }
43 placeholder.forEach((index, value) {
44 final translatedPlaceholder = regExp.allMatches(translation).toList()[index];
45 translation =
46 translation.replaceRange(translatedPlaceholder.start, translatedPlaceholder.end, value);
47 });
48
49 return translation;
50 }