Skip to content

Commit b5f84d7

Browse files
fix: general misc fixes, with support for translations
1 parent 5be08bd commit b5f84d7

File tree

7 files changed

+121
-22
lines changed

7 files changed

+121
-22
lines changed

Diff for: configurator/lib/src/utils/parser.dart

+27-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:convert';
2+
import 'package:collection/collection.dart';
23
import 'package:configurator/configurator.dart';
34
import 'package:configurator/src/utils/string_ext.dart';
45
import 'package:yaml/yaml.dart';
@@ -182,13 +183,33 @@ class YamlParser {
182183
static List<YamlSetting> _getSettingNamespaces(
183184
Map<String, dynamic> setting, List<YamlSetting> result, String path) {
184185
for (var es in setting.entries) {
185-
if (es.value is Map) {
186-
result.addAll(_getSettingNamespaces(es.value, [],
187-
'${path.capitalized}_${es.key.capitalized}'.canonicalize));
188-
} else {
189-
result.add(YamlSetting(
186+
// if (es.value is List) {
187+
// print('SHES A LIST');
188+
//
189+
// for (var i = 0; i < es.value.length; i++) {
190+
// result.add(
191+
// YamlSetting(
192+
// '${path.capitalized}_${es.key.capitalized}_i_$i'.canonicalize,
193+
// es.value[i],
194+
// ),
195+
// );
196+
// }
197+
// } else
198+
if (es.value is Map) {
199+
result.addAll(
200+
_getSettingNamespaces(
201+
es.value,
202+
[],
203+
'${path.capitalized}_${es.key.capitalized}'.canonicalize,
204+
),
205+
);
206+
} else {
207+
result.add(
208+
YamlSetting(
190209
'${path.capitalized}_${es.key.capitalized}'.canonicalize,
191-
es.value));
210+
es.value,
211+
),
212+
);
192213
}
193214
}
194215

Diff for: configurator/lib/src/writers/configuration_writer.dart

+68-11
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class ConfigWriter extends Writer {
1919
late final List<YamlSetting<String, dynamic>> images;
2020
late final List<YamlSetting<String, double>> margins;
2121
late final List<YamlSetting<String, double>> padding;
22+
late final Map<String, dynamic> translations;
2223

2324
ConfigWriter({
2425
required this.name,
@@ -41,6 +42,10 @@ class ConfigWriter extends Writer {
4142
this.margins = margins.convert<String, double>();
4243
this.padding = padding.convert<String, double>();
4344
this.images = images.convert<String, dynamic>();
45+
46+
translations = I18nParser.parse(
47+
strings: strings,
48+
);
4449
}
4550

4651
@override
@@ -198,7 +203,29 @@ class ConfigWriter extends Writer {
198203
map[key] = () {
199204
if (f.value is String) {
200205
return '\'${f.value}\'';
206+
} else if (f.value is List) {
207+
return '[${(f.value as List).map((v) {
208+
209+
dynamic tryFindTranslation(dynamic input) {
210+
if (input is List) {
211+
return input.map((e) => tryFindTranslation(e)).toList();
212+
} else if (input is Map) {
213+
return input.map((key, value) {
214+
return MapEntry(key, tryFindTranslation(value));
215+
});
216+
} else if (input is String) {
217+
return findTranslationKeyForString(input);
218+
} else {
219+
return input;
220+
}
221+
}
222+
223+
v = tryFindTranslation(v);
224+
225+
return jsonEncode(v).replaceAll('\\\\', '\\');
226+
}).join(',')}]';
201227
}
228+
202229
return f.value;
203230
}();
204231
}
@@ -261,19 +288,11 @@ class ConfigWriter extends Writer {
261288
name: 'translations',
262289
returnType: 'Map<String, Map<String, String>>',
263290
assignment: Code(() {
264-
Map<String, dynamic> parsed = I18nParser.parse(
265-
strings: strings,
266-
);
267-
268-
var data = jsonEncode(parsed).replaceAll(r'\\', r'\');
291+
var data = jsonEncode(translations).replaceAll(r'\\', r'\');
269292

270-
// while (data.contains(r'\\')) {
271-
// data = data.replaceAll(r'\\', r'\');
272-
// }
293+
var v = data.replaceAll(r'+$', r'+\$');
273294

274-
data = data.replaceAll(r'+$', r'+\$');
275-
276-
return 'const $data';
295+
return 'const $v';
277296
}()),
278297
),
279298
]);
@@ -305,4 +324,42 @@ class ConfigWriter extends Writer {
305324
..assignment = assignment;
306325
});
307326
}
327+
328+
String? findTranslationKeyForString(String input) {
329+
try {
330+
String? result;
331+
332+
bool checkTranslationsForString(Map i) {
333+
for (var entry in i.entries) {
334+
if (entry.value is String && entry.value == input) {
335+
return true;
336+
} else if (entry.value is Map) {
337+
return checkTranslationsForString(entry.value);
338+
}
339+
}
340+
341+
return false;
342+
}
343+
344+
for (var entry in translations.entries) {
345+
var translationKey = entry.key;
346+
347+
if (entry.value is Map){
348+
bool deepCheck = checkTranslationsForString(entry.value);
349+
350+
if (deepCheck) {
351+
result = translationKey;
352+
}
353+
} else if (entry.value is String && entry.value == input) {
354+
result = translationKey;
355+
}
356+
}
357+
358+
return result ?? input;
359+
} catch(e) {
360+
print(e);
361+
}
362+
363+
return null;
364+
}
308365
}

Diff for: configurator/lib/src/writers/misc_writer.dart

+14
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ class MiscWriter extends Writer {
4040
return 'double';
4141
} else if (e.value is bool) {
4242
return 'bool';
43+
} else if (e.value is List) {
44+
var types = (e.value as List).map((e) {
45+
return e.runtimeType.toString();
46+
}).toSet().toList();
47+
48+
if (types.length == 1) {
49+
if (types.first.contains('_Map')) {
50+
return 'List<Map<String, dynamic>>';
51+
}
52+
53+
return 'List<${types.first}>';
54+
}
55+
56+
return 'List<dynamic>';
4357
}
4458

4559
return 'dynamic';

Diff for: configurator/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: configurator
22
description: A new Flutter package project.
3-
version: 0.0.41
3+
version: 0.0.42
44
homepage:
55

66
environment:

Diff for: configurator_flutter/.flutter-plugins-dependencies

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.1/","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"path_provider_android","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_android-2.2.0/","native_build":true,"dependencies":[]}],"macos":[{"name":"path_provider_foundation","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.1/","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/","native_build":false,"dependencies":[]}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2023-09-06 07:44:44.631991","version":"3.13.1"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.1/","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"path_provider_android","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_android-2.2.0/","native_build":true,"dependencies":[]}],"macos":[{"name":"path_provider_foundation","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.1/","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/Users/cgiuliani/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/","native_build":false,"dependencies":[]}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2023-09-09 13:09:26.753110","version":"3.13.1"}

Diff for: configurator_flutter/lib/src/utils/localize_util.dart

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,11 @@ class LocalizeUtil {
1111
),
1212
);
1313
}
14-
}
14+
}
15+
16+
extension LocalizationExt on String {
17+
String translate(Configuration config) => LocalizeUtil.localize(
18+
config,
19+
this,
20+
);
21+
}

Diff for: configurator_flutter/pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: configurator_flutter
22
description: A new Flutter package project.
3-
version: 0.0.41
3+
version: 0.0.42
44
homepage:
55

66
environment:
@@ -30,7 +30,7 @@ dependencies:
3030
git:
3131
url: [email protected]:camrongiuliani/configurator.git
3232
path: configurator
33-
ref: 0.0.41
33+
ref: 0.0.42
3434

3535
dev_dependencies:
3636
flutter_test:

0 commit comments

Comments
 (0)