generateClassBody method
Generate class body only (no file header). Used by builder for inline mode.
Implementation
String generateClassBody(LocalizationSheet sheet) {
final buffer = StringBuffer();
final className =
'${StringUtils.sanitizeClassName(sheet.name)}Localizations';
buffer.writeln('class $className {');
buffer.writeln(' final String _languageCode;');
buffer.writeln();
buffer.writeln(' const $className(this._languageCode);');
buffer.writeln();
for (final translation in sheet.translations) {
final methodName = StringUtils.sanitizeMethodName(translation.key);
buffer.writeln(' /// Translation for key: ${translation.key}');
final hasInterpolation = translation.values.values.any(
(value) => StringUtils.hasInterpolation(value),
);
if (hasInterpolation) {
final params = StringUtils.extractInterpolationParams(
translation.values.values.first,
);
final paramList = params.map((p) => 'dynamic $p').join(', ');
buffer.writeln(' String $methodName({$paramList}) {');
buffer.writeln(' switch (_languageCode) {');
for (final languageCode in sheet.languageCodes) {
final translatedValue = translation.values[languageCode] ?? '';
final normalizedValue = StringUtils.normalizeInterpolation(translatedValue);
buffer.writeln(" case '$languageCode':");
buffer.writeln(" return '''$normalizedValue'''");
for (final param in params) {
buffer.writeln(" .replaceAll('{$param}', $param.toString())");
}
buffer.writeln(" ;");
}
buffer.writeln(" default:");
final defaultTranslation = translation.values.values.first;
final normalizedDefault = StringUtils.normalizeInterpolation(defaultTranslation);
buffer.writeln(" return '''$normalizedDefault'''");
for (final param in params) {
buffer.writeln(" .replaceAll('{$param}', $param.toString())");
}
buffer.writeln(" ;");
buffer.writeln(' }');
buffer.writeln(' }');
} else {
buffer.writeln(' String get $methodName {');
buffer.writeln(' switch (_languageCode) {');
for (final languageCode in sheet.languageCodes) {
final translatedValue = translation.values[languageCode] ?? '';
buffer.writeln(" case '$languageCode':");
buffer.writeln(" return '''$translatedValue''';");
}
buffer.writeln(" default:");
final defaultTranslation = translation.values.values.first;
buffer.writeln(" return '''$defaultTranslation''';");
buffer.writeln(' }');
buffer.writeln(' }');
}
buffer.writeln();
}
buffer.writeln('}');
return buffer.toString();
}