Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 26 additions & 12 deletions lib/src/generator/generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,21 @@ Future<void> generate([String path = 'l10n.yaml']) async {
output.writeln(_generateField(key));
} else {
final key = line.split(' ')[1].split('(').first;
final paramPairs = lines[i].split('(').last.split(')')[0].split(',');

final parameters = <String, String>{};

for (var pair in paramPairs) {
final parts = pair.trim().split(' ');
parameters[parts[0].trimRight()] = parts[1].trimLeft();
}
final methodSignature = _getMethodSignature(lines, i);
i += methodSignature.length - 1;
final paramPairs =
methodSignature.join(' ').split('(').last.split(')')[0].split(',');

// Parameters map of name:type, e.g. 'count':'int'
final parameters = {
for (final pair in paramPairs)
if (pair.trim().split(' ') case final parts when parts.length > 1)
parts[1].trimRight(): parts[0].trimLeft(),
};

output.writeln(_generateMethod(key, parameters));
}
} else if(line.startsWith('//')) {
} else if (line.startsWith('//')) {
lastComments.add(lines[i]);
} else {
lastComments.clear();
Expand All @@ -61,16 +64,27 @@ Future<void> generate([String path = 'l10n.yaml']) async {
await output.close();
}

List<String> _getMethodSignature(List<String> lines, int start) {
for (var i = start; i < lines.length; i++) {
if (lines[i].contains(';')) {
return lines.sublist(start, i + 1);
}
}
return lines.sublist(start);
}

String _generateField(String key) {
return '\tString get $key => _arb.get(\'$key\') ?? base.$key;';
}

String _generateMethod(String key, Map<String, String> parameters) {
final sParameters = parameters.entries.map((e) => '${e.key} ${e.value}').join(', ');
final sParameterNames = parameters.values.join(', ');
final sParameters =
parameters.entries.map((e) => '${e.value} ${e.key}').join(', ');
final sParameterNames = parameters.keys.join(', ');

// like _arb.get('title', {'name': name}) for arb string '"title": "translated title {name}"'
final sArbCall = '_arb.get(\'$key\', {${parameters.values.map((e) => '\'$e\': $e').join(', ')}})';
final sArbCall =
'_arb.get(\'$key\', {${parameters.keys.map((e) => '\'$e\': $e').join(', ')}})';

return '\tString $key($sParameters) => $sArbCall ?? base.$key($sParameterNames);';
}
5 changes: 2 additions & 3 deletions lib/src/generator/model/templates.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class @(baseClass)Remote extends @(baseClass) {
final @(baseClass) base;
final ArbWorker _arb;

static const LocalizationsDelegate<@(baseClass)> delegate = _L10nDelegateWithOta(L10n.delegate);
static const LocalizationsDelegate<@(baseClass)> delegate = _@(baseClass)DelegateWithOta(@(baseClass).delegate);

/// A list of this localizations delegate along with the default localizations
/// delegates.
Expand All @@ -40,7 +40,6 @@ class @(baseClass)Remote extends @(baseClass) {
static const List<Locale> supportedLocales = @(baseClass).supportedLocales;
''';


const footer = '''
class _@(baseClass)DelegateWithOta extends LocalizationsDelegate<@(baseClass)> {
const _@(baseClass)DelegateWithOta(this.baseDelegate);
Expand All @@ -61,4 +60,4 @@ class _@(baseClass)DelegateWithOta extends LocalizationsDelegate<@(baseClass)> {
@override
bool shouldReload(_@(baseClass)DelegateWithOta old) => false;
}
''';
''';
Loading