generateClassBody method

String generateClassBody(
  1. LocalizationSheet sheet
)

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 params = _paramsFor(translation);
    final paramSet = params.toSet();
    final defaultTranslation = translation.values.values.first;

    if (params.isNotEmpty) {
      final paramList = params.map((p) => 'dynamic $p').join(', ');
      buffer.writeln('  String $methodName({$paramList}) {');
    } 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 ${_literal(translatedValue, paramSet)};');
    }

    buffer.writeln('      default:');
    buffer.writeln('        return ${_literal(defaultTranslation, paramSet)};');
    buffer.writeln('    }');
    buffer.writeln('  }');
    buffer.writeln();
  }

  buffer.writeln('}');
  return buffer.toString();
}