buildDartNormalizeTrKeyFunction function

String buildDartNormalizeTrKeyFunction(
  1. FlattenKeyStyle style
)

Emits a Dart _normalizeTrKey implementation for generated I18n files.

Implementation

String buildDartNormalizeTrKeyFunction(FlattenKeyStyle style) {
  switch (style) {
    case FlattenKeyStyle.dot:
      return '''
  static String _normalizeTrKey(String key) => key;''';
    case FlattenKeyStyle.camel:
      return '''
  static String _normalizeTrKey(String key) {
    if (key.isEmpty) {
      return key;
    }
    final segments = key.contains('.') ? key.split('.') : <String>[key];
    if (segments.length == 1) {
      return _trToCamelCase(segments.single);
    }
    return segments.first +
        segments.skip(1).map(_trCapitalizeFirstChar).join();
  }

  static String _trCapitalizeFirstChar(String input) {
    if (input.isEmpty) {
      return input;
    }
    return input[0].toUpperCase() + input.substring(1);
  }

  static String _trToCamelCase(String input) {
    final parts = _trSplitToWords(input);
    if (parts.isEmpty) {
      return '';
    }
    return parts.first.toLowerCase() +
        parts.skip(1).map(_trCapitalizeWord).join();
  }''';
    case FlattenKeyStyle.pascal:
      return '''
  static String _normalizeTrKey(String key) {
    if (key.isEmpty) {
      return key;
    }
    final segments = key.contains('.') ? key.split('.') : <String>[key];
    if (segments.length == 1) {
      return _trToPascalCase(segments.single);
    }
    return segments.map(_trCapitalizeFirstChar).join();
  }

  static String _trCapitalizeFirstChar(String input) {
    if (input.isEmpty) {
      return input;
    }
    return input[0].toUpperCase() + input.substring(1);
  }

  static String _trToPascalCase(String input) {
    final parts = _trSplitToWords(input);
    return parts.map(_trCapitalizeWord).join();
  }''';
    case FlattenKeyStyle.snake:
      return '''
  static String _normalizeTrKey(String key) {
    if (key.isEmpty) {
      return key;
    }
    final segments = key.contains('.') ? key.split('.') : <String>[key];
    if (segments.length == 1) {
      return _trToSnakeCase(segments.single);
    }
    return segments.map(_trToSnakeCase).join('_');
  }

  static String _trToSnakeCase(String input) {
    final parts = _trSplitToWords(input);
    return parts.map((word) => word.toLowerCase()).join('_');
  }''';
    case FlattenKeyStyle.kebab:
      return '''
  static String _normalizeTrKey(String key) {
    if (key.isEmpty) {
      return key;
    }
    final segments = key.contains('.') ? key.split('.') : <String>[key];
    if (segments.length == 1) {
      return _trToKebabCase(segments.single);
    }
    return segments.map(_trToKebabCase).join('-');
  }

  static String _trToKebabCase(String input) {
    final parts = _trSplitToWords(input);
    return parts.map((word) => word.toLowerCase()).join('-');
  }''';
  }
}