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 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();
}