generateSheetClass method
Generate individual sheet class file
Implementation
Future<void> generateSheetClass(
LocalizationSheet sheet,
String outputDir,
) async {
final buffer = StringBuffer();
final className = '${StringUtils.capitalize(sheet.name)}Localizations';
// Add generation comment
buffer.writeln('// GENERATED CODE - DO NOT MODIFY BY HAND');
buffer.writeln('// Generated by Excel Translator');
buffer.writeln('// ${DateTime.now()}');
buffer.writeln();
buffer.writeln('class $className {');
buffer.writeln(' final String _languageCode;');
buffer.writeln();
buffer.writeln(' const $className(this._languageCode);');
buffer.writeln();
// Generate methods for each translation
for (final translation in sheet.translations) {
final methodName = StringUtils.sanitizeMethodName(translation.key);
// Add comment for the translation key
buffer.writeln(' /// Translation for key: ${translation.key}');
// Check if the translation has interpolation
final hasInterpolation = translation.values.values.any(
(value) => StringUtils.hasInterpolation(value),
);
if (hasInterpolation) {
// Generate method with parameters
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] ?? '';
buffer.writeln(" case '$languageCode':");
buffer.writeln(" return '''$translatedValue'''");
// Add interpolation replacements
for (final param in params) {
buffer.writeln(
" .replaceAll('{$param}', $param.toString())");
}
buffer.writeln(" ;");
}
buffer.writeln(" default:");
final defaultTranslation = translation.values.values.first;
buffer.writeln(" return '''$defaultTranslation'''");
for (final param in params) {
buffer.writeln(
" .replaceAll('{$param}', $param.toString())");
}
buffer.writeln(" ;");
buffer.writeln(' }');
buffer.writeln(' }');
} else {
// Generate simple getter
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('}');
final file = File(path.join(outputDir, '${sheet.name}_localizations.dart'));
await file.writeAsString(buffer.toString());
}