@@ -16,10 +16,15 @@ import 'package:intl_translation/src/intl_message.dart';
16
16
import 'package:petitparser/petitparser.dart' ;
17
17
18
18
class ArbToDartGenerator {
19
+ final bool addContextPrefix;
20
+
19
21
final intlTranslation = IntlTranslationGenerator ();
20
22
23
+ ArbToDartGenerator ({this .addContextPrefix = false });
24
+
21
25
void generateDartClasses (
22
- ArbBundle bundle, String outputDirectoryPath, String className) {
26
+ ArbBundle bundle, String outputDirectoryPath, String className,
27
+ {bool addContextPrefix}) {
23
28
_buildIntlListFile (bundle.documents.first, outputDirectoryPath, className);
24
29
25
30
intlTranslation.generateLookupTables (outputDirectoryPath, className);
@@ -52,65 +57,64 @@ class ArbToDartGenerator {
52
57
}
53
58
54
59
Method _getResourceMethod (ArbResource resource) {
55
- if (resource.placeholders.isNotEmpty) {
56
- return _getResourceFullMethod (resource);
57
- } else {
58
- return _getResourceGetter (resource);
59
- }
60
- }
61
-
62
- Method _getResourceFullMethod (ArbResource resource) {
63
60
return Method ((MethodBuilder builder) {
64
61
final key = resource.key;
65
- final value = _fixSpecialCharacters (resource.value);
66
62
final description =
67
63
_fixSpecialCharacters (resource.attributes['description' ] ?? = key);
68
64
69
- var args = < String > [];
70
- resource.placeholders.forEach ((ArbResourcePlaceholder placeholder) {
71
- builder.requiredParameters.add (Parameter ((ParameterBuilder builder) {
72
- args.add (placeholder.name);
73
- final argumentType =
74
- placeholder.type == ArbResourcePlaceholder .typeNum
75
- ? 'int'
76
- : 'String' ;
77
- builder
78
- ..name = placeholder.name
79
- ..type = Reference (argumentType);
80
- }));
81
- });
65
+ final methodName =
66
+ (addContextPrefix ? '${resource .context .toLowerCase ()}_' : '' ) +
67
+ ReCase (key).camelCase;
82
68
83
69
builder
84
- ..name = _getMethodName (key)
70
+ ..name = methodName
85
71
..returns = const Reference ('String' )
86
72
..lambda = true
87
- ..docs.add ('\t /// ${description }' )
88
- ..body = Code (
89
- _getCode (value, key: key, args: args, description: description));
73
+ ..docs.add ('/// ${description .replaceAll ("\\ n" , "\n /// " )}' );
74
+
75
+ if (resource.placeholders.isNotEmpty) {
76
+ return _getResourceFullMethod (resource, builder);
77
+ } else {
78
+ return _getResourceGetter (resource, builder);
79
+ }
90
80
});
91
81
}
92
82
93
- // """Intl.message('${value}', name: '$key', args: [${args.join(", ")}], desc: '${description}')"""
94
-
95
- Method _getResourceGetter ( ArbResource resource) {
96
- return Method (( MethodBuilder builder) {
97
- final key = resource.key;
98
- final value = _fixSpecialCharacters (resource.value);
99
- final description =
100
- _fixSpecialCharacters ( resource.attributes[ 'description' ] ?? = key);
101
-
102
- builder
103
- ..name = _getMethodName (key)
104
- ..type = MethodType .getter
105
- ..returns = const Reference ( 'String' )
106
- ..lambda = true
107
- ..body = Code (
108
- '''Intl.message('${ value }', name: '${ key }', desc: '${ description }')''' )
109
- ..docs. add ( '/// ${ description . replaceAll ( " \\ n" , " \n /// " )}' );
83
+ void _getResourceFullMethod ( ArbResource resource, MethodBuilder builder) {
84
+ final key = resource.key;
85
+ final value = _fixSpecialCharacters ( resource.value);
86
+ final description =
87
+ _fixSpecialCharacters ( resource.attributes[ 'description' ] ?? = key) ;
88
+
89
+ var args = < String > [];
90
+ resource.placeholders. forEach (( ArbResourcePlaceholder placeholder) {
91
+ builder.requiredParameters. add ( Parameter (( ParameterBuilder builder) {
92
+ args. add (placeholder.name);
93
+ final argumentType = placeholder.type == ArbResourcePlaceholder .typeNum
94
+ ? 'int'
95
+ : 'String' ;
96
+ builder
97
+ ..name = placeholder.name
98
+ ..type = Reference (argumentType);
99
+ }) );
110
100
});
101
+
102
+ builder
103
+ ..body =
104
+ Code (_getCode (value, key: key, args: args, description: description));
111
105
}
112
106
113
- String _getMethodName (String key) => ReCase (key).camelCase;
107
+ void _getResourceGetter (ArbResource resource, MethodBuilder builder) {
108
+ final key = resource.key;
109
+ final value = _fixSpecialCharacters (resource.value);
110
+ final description =
111
+ _fixSpecialCharacters (resource.attributes['description' ] ?? = key);
112
+
113
+ builder
114
+ ..type = MethodType .getter
115
+ ..body = Code (
116
+ '''Intl.message('${value }', name: '${key }', desc: '${description }')''' );
117
+ }
114
118
115
119
///
116
120
/// intl_translation
0 commit comments