Skip to content
This repository was archived by the owner on Jul 31, 2022. It is now read-only.

Commit 26310be

Browse files
committed
Implemented the casing options
1 parent c15ef7d commit 26310be

7 files changed

Lines changed: 59 additions & 76 deletions

File tree

example/lib/localization/keys.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:flutter_translate_annotations/flutter_translate_annotations.dart
22

33
part 'keys.g.dart';
44

5-
@TranslateKeysOptions(path: 'assets/i18n', caseStyle: CaseStyle.titleCase, separator: "_")
6-
class _$Keys
5+
@TranslateKeysOptions(path: 'assets/i18n', caseStyle: CaseStyle.lowerCase, separator: "_")
6+
class _$Keys // ignore: unused_element
77
{
88
}

example/lib/main.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
import 'package:flutter_translate_gen/flutter_translate_gen.dart';
2-
31
main() {
42
}

flutter_translate_gen.iml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
77
<excludeFolder url="file://$MODULE_DIR$/.pub" />
88
<excludeFolder url="file://$MODULE_DIR$/build" />
9+
<excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />
910
<excludeFolder url="file://$MODULE_DIR$/example/.pub" />
1011
<excludeFolder url="file://$MODULE_DIR$/example/build" />
1112
</content>

lib/flutter_translate_gen.dart

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import 'dart:convert';
33
import 'package:analyzer/dart/element/element.dart';
44
import 'package:build/build.dart';
55
import 'package:code_builder/code_builder.dart';
6+
import 'package:dart_casing/dart_casing.dart';
67
import 'package:dart_style/dart_style.dart';
78
import 'package:dart_utils/dart_utils.dart';
89
import 'package:flutter_translate_annotations/flutter_translate_annotations.dart';
910
import 'package:flutter_translate_gen/annotation_generator.dart';
1011
import 'package:flutter_translate_gen/keys_class_generator.dart';
11-
import 'package:flutter_translate_gen/translation.dart';
12+
import 'package:flutter_translate_gen/localized_item.dart';
1213
import 'package:glob/glob.dart';
1314
import 'package:source_gen/source_gen.dart';
1415

@@ -27,7 +28,7 @@ class FlutterTranslateGen extends AnnotationGenerator<TranslateKeysOptions>
2728

2829
validateClassName(className);
2930

30-
List<Translation> translations;
31+
List<LocalizedItem> translations;
3132

3233
try
3334
{
@@ -40,7 +41,7 @@ class FlutterTranslateGen extends AnnotationGenerator<TranslateKeysOptions>
4041

4142
validateLocalizationItems(translations);
4243

43-
final file = Library((lb) => lb..body.addAll([generateKeysClass(translations, className)]));
44+
final file = Library((lb) => lb..body.addAll([KeysClassGenerator.generateClass(options, translations, className)]));
4445

4546
final DartEmitter emitter = DartEmitter(Allocator());
4647

@@ -55,7 +56,7 @@ class FlutterTranslateGen extends AnnotationGenerator<TranslateKeysOptions>
5556
separator: annotation.peek("separator")?.stringValue);
5657
}
5758

58-
Future<List<Translation>> getKeyMap(BuildStep step, TranslateKeysOptions options) async
59+
Future<List<LocalizedItem>> getKeyMap(BuildStep step, TranslateKeysOptions options) async
5960
{
6061
var mapping = <String, List<String>>{};
6162

@@ -70,13 +71,24 @@ class FlutterTranslateGen extends AnnotationGenerator<TranslateKeysOptions>
7071
translationMap.forEach((key, value) => (mapping[key] ??= <String>[]).add(value));
7172
}
7273

73-
var translations = List<Translation>();
74+
var translations = List<LocalizedItem>();
7475

75-
mapping.forEach((id, trans) => translations.add(Translation(key: id, translations: trans, separator: options.separator),));
76+
mapping.forEach((id, trans) => translations.add(LocalizedItem(id, trans, getKeyFieldName(id, options))));
7677

7778
return translations;
7879
}
7980

81+
String getKeyFieldName(String key, TranslateKeysOptions options)
82+
{
83+
switch(options.caseStyle)
84+
{
85+
case CaseStyle.titleCase: return Casing.titleCase(key,separator: options.separator);
86+
case CaseStyle.upperCase: return Casing.upperCase(key,separator: options.separator);
87+
case CaseStyle.lowerCase: return Casing.lowerCase(key,separator: options.separator);
88+
default: return throw InvalidGenerationSourceError("Invalid CaseStyle specified: ${options.caseStyle.toString()}");
89+
}
90+
}
91+
8092
Map<String, String> getTranslationMap(Map<String, dynamic> jsonMap, {String parentKey})
8193
{
8294
final map = Map<String, String>();
@@ -101,7 +113,7 @@ class FlutterTranslateGen extends AnnotationGenerator<TranslateKeysOptions>
101113
return map;
102114
}
103115

104-
void validateLocalizationItems(List<Translation> translations)
116+
void validateLocalizationItems(List<LocalizedItem> translations)
105117
{
106118
if (translations.isEmpty) return;
107119

lib/keys_class_generator.dart

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,31 @@
11
import 'package:code_builder/code_builder.dart';
2-
import 'package:dart_casing/dart_casing.dart';
3-
import 'package:flutter_translate_gen/translation.dart';
2+
import 'package:flutter_translate_annotations/flutter_translate_annotations.dart';
3+
import 'package:flutter_translate_gen/localized_item.dart';
44

5-
const String strKeysClassName = "_\$Keys";
6-
7-
Reference get stringType => TypeReference((trb) => trb..symbol = "String");
8-
9-
Class generateKeysClass(List<Translation> translations, String className)
5+
class KeysClassGenerator
106
{
11-
return Class((x) => x
7+
static Reference get stringType => TypeReference((trb) => trb..symbol = "String");
8+
9+
static Class generateClass(TranslateKeysOptions options, List<LocalizedItem> translations, String className)
10+
{
11+
return Class((x) => x
1212
..docs.add("/// Contains the static localization keys")
1313
..name = className.substring(2)
1414
..fields.addAll(translations
15-
.map((translation) => generateField(translation))
15+
.map((translation) => generateField(translation, options))
1616
.toList()),
17-
);
17+
);
18+
}
19+
20+
static Field generateField(LocalizedItem item, TranslateKeysOptions options)
21+
{
22+
return Field((x) => x
23+
..name = item.fieldName
24+
..type = stringType
25+
..static = true
26+
..modifier = FieldModifier.constant
27+
..assignment = literalString(item.key).code,
28+
);
29+
}
1830
}
1931

20-
Field generateField(Translation translation)
21-
{
22-
var a = translation.keyVariable;
23-
24-
var key = translation.keyVariable.replaceAll("\$", "\\");
25-
var name = Casing.titleCase(key, separator: translation.separator);
26-
27-
return Field(
28-
(fb) => fb
29-
..name = name //translation.keyVariable.replaceAll("\$", '_')
30-
..type = stringType
31-
..static = true
32-
..modifier = FieldModifier.final$
33-
..assignment = literalString(translation.key).code,
34-
);
35-
}
36-
37-

lib/localized_item.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:dart_casing/dart_casing.dart';
2+
3+
class LocalizedItem
4+
{
5+
final String key;
6+
final List<String> translations;
7+
final String fieldName;
8+
9+
LocalizedItem(this.key, this.translations, this.fieldName);
10+
}
11+
12+
List<String> keysOf(List<LocalizedItem> items)
13+
{
14+
return items.map((x) => x.key).toList();
15+
}

lib/translation.dart

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)