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