Skip to content

Commit 626082a

Browse files
committed
feat(cli): add flutter support
1 parent 5f2d0a9 commit 626082a

9 files changed

Lines changed: 448 additions & 10 deletions

File tree

.changeset/tame-dancers-argue.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@replexica/spec": minor
3+
"@replexica/cli": minor
4+
"replexica": minor
5+
---
6+
7+
added Flutter .arb support

package/demo/flutter/en.arb

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
{
2+
"@@locale": "en",
3+
4+
"simpleMessage": "This is a simple message.",
5+
"@simpleMessage": {
6+
"description": "A basic message without any placeholders"
7+
},
8+
9+
"messageWithPlaceholder": "Hello, {name}!",
10+
"@messageWithPlaceholder": {
11+
"description": "A greeting with a name placeholder",
12+
"placeholders": {
13+
"name": {
14+
"type": "String",
15+
"example": "John"
16+
}
17+
}
18+
},
19+
20+
"pluralMessage": "{count, plural, =0{No items} =1{One item} other{{count} items}}",
21+
"@pluralMessage": {
22+
"description": "A message with plural forms",
23+
"placeholders": {
24+
"count": {
25+
"type": "num",
26+
"format": "compact"
27+
}
28+
}
29+
},
30+
31+
"genderMessage": "{gender, select, male{He} female{She} other{They}} liked your post.",
32+
"@genderMessage": {
33+
"description": "A gender-specific message",
34+
"placeholders": {
35+
"gender": {
36+
"type": "String"
37+
}
38+
}
39+
},
40+
41+
"nestedMessage": "You have {count, plural, =0{no new messages} =1{one new message} other{{count} new messages}} and {unread, plural, =0{no unread emails} =1{one unread email} other{{unread} unread emails}}.",
42+
"@nestedMessage": {
43+
"description": "A message with nested plurals",
44+
"placeholders": {
45+
"count": {
46+
"type": "num",
47+
"format": "compact"
48+
},
49+
"unread": {
50+
"type": "num",
51+
"format": "compact"
52+
}
53+
}
54+
},
55+
56+
"dateMessage": "Today is {date}",
57+
"@dateMessage": {
58+
"description": "A message with a date",
59+
"placeholders": {
60+
"date": {
61+
"type": "DateTime",
62+
"format": "yMMMd"
63+
}
64+
}
65+
},
66+
67+
"currencyMessage": "Your balance is {amount}",
68+
"@currencyMessage": {
69+
"description": "A message with a currency amount",
70+
"placeholders": {
71+
"amount": {
72+
"type": "double",
73+
"format": "currency",
74+
"optionalParameters": {
75+
"symbol": "$",
76+
"decimalDigits": 2
77+
}
78+
}
79+
}
80+
},
81+
82+
"percentMessage": "You've completed {percent} of the task.",
83+
"@percentMessage": {
84+
"description": "A message with a percentage",
85+
"placeholders": {
86+
"percent": {
87+
"type": "double",
88+
"format": "percentPattern"
89+
}
90+
}
91+
},
92+
93+
"listMessage": "Your favorite fruits are: {fruits}",
94+
"@listMessage": {
95+
"description": "A message with a list",
96+
"placeholders": {
97+
"fruits": {
98+
"type": "List<String>"
99+
}
100+
}
101+
},
102+
103+
"complexMessage": "On {date}, {name} {gender, select, male{invited his} female{invited her} other{invited their}} {guestCount, plural, =0{no guests} =1{one guest} other{{guestCount} guests}} to {eventName}.",
104+
"@complexMessage": {
105+
"description": "A complex message combining multiple placeholders, gender, and plurals",
106+
"placeholders": {
107+
"date": {
108+
"type": "DateTime",
109+
"format": "yMMMd"
110+
},
111+
"name": {
112+
"type": "String",
113+
"example": "Alice"
114+
},
115+
"gender": {
116+
"type": "String"
117+
},
118+
"guestCount": {
119+
"type": "num",
120+
"format": "compact"
121+
},
122+
"eventName": {
123+
"type": "String",
124+
"example": "Birthday Party"
125+
}
126+
}
127+
},
128+
129+
"escapeMessage": "To use braces, escape them like this: '{' and '}'.",
130+
"@escapeMessage": {
131+
"description": "A message demonstrating how to escape special characters"
132+
},
133+
134+
"multilineMessage": "This is a long message\nthat spans multiple lines\nand preserves line breaks.",
135+
"@multilineMessage": {
136+
"description": "A multiline message"
137+
},
138+
139+
"htmlMessage": "This message contains <b>HTML</b> tags like <i>italics</i> and <u>underline</u>.",
140+
"@htmlMessage": {
141+
"description": "A message with HTML tags (note: handling these requires additional processing in the app)"
142+
}
143+
}

package/demo/flutter/es.arb

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
{
2+
"@@locale": "es",
3+
"simpleMessage": "Este es un mensaje simple.",
4+
"@simpleMessage": {
5+
"description": "Un mensaje básico sin marcadores de posición"
6+
},
7+
"messageWithPlaceholder": "¡Hola, {name}!",
8+
"@messageWithPlaceholder": {
9+
"description": "Un saludo con un marcador de posición para el nombre",
10+
"placeholders": {
11+
"name": {
12+
"type": "String",
13+
"example": "John"
14+
}
15+
}
16+
},
17+
"pluralMessage": "{count, plural, =0{No hay elementos} =1{Un elemento} other{{count} elementos}}",
18+
"@pluralMessage": {
19+
"description": "Un mensaje con formas plurales",
20+
"placeholders": {
21+
"count": {
22+
"type": "num",
23+
"format": "compact"
24+
}
25+
}
26+
},
27+
"genderMessage": "{gender, select, male{A él} female{A ella} other{A ellos}} le gustó tu publicación.",
28+
"@genderMessage": {
29+
"description": "Un mensaje específico de género",
30+
"placeholders": {
31+
"gender": {
32+
"type": "String"
33+
}
34+
}
35+
},
36+
"nestedMessage": "Tienes {count, plural, =0{ningún mensaje nuevo} =1{un mensaje nuevo} other{{count} mensajes nuevos}} y {unread, plural, =0{ningún correo sin leer} =1{un correo sin leer} other{{unread} correos sin leer}}.",
37+
"@nestedMessage": {
38+
"description": "Un mensaje con plurales anidados",
39+
"placeholders": {
40+
"count": {
41+
"type": "num",
42+
"format": "compact"
43+
},
44+
"unread": {
45+
"type": "num",
46+
"format": "compact"
47+
}
48+
}
49+
},
50+
"dateMessage": "Hoy es {date}",
51+
"@dateMessage": {
52+
"description": "Un mensaje con una fecha",
53+
"placeholders": {
54+
"date": {
55+
"type": "DateTime",
56+
"format": "yMMMd"
57+
}
58+
}
59+
},
60+
"currencyMessage": "Tu saldo es de {amount}",
61+
"@currencyMessage": {
62+
"description": "Un mensaje con una cantidad monetaria",
63+
"placeholders": {
64+
"amount": {
65+
"type": "double",
66+
"format": "currency",
67+
"optionalParameters": {
68+
"symbol": "$",
69+
"decimalDigits": 2
70+
}
71+
}
72+
}
73+
},
74+
"percentMessage": "Has completado el {percent} de la tarea.",
75+
"@percentMessage": {
76+
"description": "Un mensaje con un porcentaje",
77+
"placeholders": {
78+
"percent": {
79+
"type": "double",
80+
"format": "percentPattern"
81+
}
82+
}
83+
},
84+
"listMessage": "Tus frutas favoritas son: {fruits}",
85+
"@listMessage": {
86+
"description": "Un mensaje con una lista",
87+
"placeholders": {
88+
"fruits": {
89+
"type": "List<String>"
90+
}
91+
}
92+
},
93+
"complexMessage": "El {date}, {name} {gender, select, male{invitó a} female{invitó a} other{invitó a}} {guestCount, plural, =0{ningún invitado} =1{un invitado} other{{guestCount} invitados}} a {eventName}.",
94+
"@complexMessage": {
95+
"description": "Un mensaje complejo que combina múltiples marcadores, género y plurales",
96+
"placeholders": {
97+
"date": {
98+
"type": "DateTime",
99+
"format": "yMMMd"
100+
},
101+
"name": {
102+
"type": "String",
103+
"example": "Alice"
104+
},
105+
"gender": {
106+
"type": "String"
107+
},
108+
"guestCount": {
109+
"type": "num",
110+
"format": "compact"
111+
},
112+
"eventName": {
113+
"type": "String",
114+
"example": "Fiesta de cumpleaños"
115+
}
116+
}
117+
},
118+
"escapeMessage": "Para usar llaves, escápalas así: '{' y '}'.",
119+
"@escapeMessage": {
120+
"description": "Un mensaje que demuestra cómo escapar caracteres especiales"
121+
},
122+
"multilineMessage": "Este es un mensaje largo\nque abarca varias líneas\ny preserva los saltos de línea.",
123+
"@multilineMessage": {
124+
"description": "Un mensaje multilínea"
125+
},
126+
"htmlMessage": "Este mensaje contiene etiquetas <b>HTML</b> como <i>cursiva</i> y <u>subrayado</u>.",
127+
"@htmlMessage": {
128+
"description": "Un mensaje con etiquetas HTML (nota: el manejo de estas requiere procesamiento adicional en la aplicación)"
129+
}
130+
}

package/i18n.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
"include": [
3939
"demo/xcode-stringsdict/[locale].lproj/Localizable.stringsdict"
4040
]
41+
},
42+
"flutter": {
43+
"include": [
44+
"demo/flutter/[locale].arb"
45+
]
4146
}
4247
}
4348
}

package/i18n.lock

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,57 @@ checksums:
8383
complex_format: 9442e21617626db280d376872a8bae6f
8484
date_format: c4137fde368529804b9c43edb293f521
8585
multiline_html: a2f5d47387c8011c0dccc58ceaa1cb8c
86+
b3b7f970e3d2e81f9679d0f0de74e5bc:
87+
simpleMessage: 6ab8c48d251e87acb707e43006d783f2
88+
"%40simpleMessage/description": d51140d8cf31b254cb2887c465af2121
89+
messageWithPlaceholder: a4028aa70eaa7049318f039837199173
90+
"%40messageWithPlaceholder/description": 80a6d05342c0024a0cdce80a7b4330c3
91+
"%40messageWithPlaceholder/placeholders/name/type": d9b2e6a31602b72464acbd1771cd5720
92+
"%40messageWithPlaceholder/placeholders/name/example": 41853d3f04b645aa5d16b5faa5cd7a96
93+
pluralMessage: 5d99c6ef240b21489e9de37118d9abe9
94+
"%40pluralMessage/description": 0460d201ea86c317355c93e336256f78
95+
"%40pluralMessage/placeholders/count/type": b60b53ee3b55f2f842e64dbb9becfe08
96+
"%40pluralMessage/placeholders/count/format": 3a91783b8a4ca53167e22450df491216
97+
genderMessage: e28d61555c4f2a82e756da7c102fdd30
98+
"%40genderMessage/description": fe9eb56076be28cf1baaee1147b9fd74
99+
"%40genderMessage/placeholders/gender/type": d9b2e6a31602b72464acbd1771cd5720
100+
nestedMessage: 5e0dca93f6b3f140941c1d47ff115314
101+
"%40nestedMessage/description": ebcd51a856fef519b41fc04844936e56
102+
"%40nestedMessage/placeholders/count/type": b60b53ee3b55f2f842e64dbb9becfe08
103+
"%40nestedMessage/placeholders/count/format": 3a91783b8a4ca53167e22450df491216
104+
"%40nestedMessage/placeholders/unread/type": b60b53ee3b55f2f842e64dbb9becfe08
105+
"%40nestedMessage/placeholders/unread/format": 3a91783b8a4ca53167e22450df491216
106+
dateMessage: 8f8b3d41f4fb5849db8efce61cc983c9
107+
"%40dateMessage/description": 1b74219679aac9ad36d2535642b24b55
108+
"%40dateMessage/placeholders/date/type": a6ed10e8d9ba37a95152a327df102f8b
109+
"%40dateMessage/placeholders/date/format": a3b36f0bf5d4dd91b8f14319e6d32280
110+
currencyMessage: b6a41e9a4ccac26e01621ef82c88c287
111+
"%40currencyMessage/description": ee3c723c2e96b41daeced5825e59064a
112+
"%40currencyMessage/placeholders/amount/type": 3ed48c0e4300158c1d9e988fff63f9d9
113+
"%40currencyMessage/placeholders/amount/format": 6d2060db7ea78e2de968a26444ec825a
114+
"%40currencyMessage/placeholders/amount/optionalParameters/symbol": ce3025799d70859c869af0b2fea2ad8a
115+
"%40currencyMessage/placeholders/amount/optionalParameters/decimalDigits": 7f9518f51efce718baf93aced6e39a15
116+
percentMessage: e091023f926a93300645759e90848cf4
117+
"%40percentMessage/description": 664e99ec8994c8b6f29046ec2d4ebbf4
118+
"%40percentMessage/placeholders/percent/type": 3ed48c0e4300158c1d9e988fff63f9d9
119+
"%40percentMessage/placeholders/percent/format": 3a9ba59bd14cdf6a7ddeb922a7efdbf7
120+
listMessage: 12632bfd4b8c03f13bf7cd41a2c821ed
121+
"%40listMessage/description": 1d64eccf032458311db54315afdd2316
122+
"%40listMessage/placeholders/fruits/type": 99472cb8aaf87b3809caee2b781a0557
123+
complexMessage: b30fe2a8990c467391296864126cb42d
124+
"%40complexMessage/description": 50506b19586c2a944ff56db9123686c6
125+
"%40complexMessage/placeholders/date/type": a6ed10e8d9ba37a95152a327df102f8b
126+
"%40complexMessage/placeholders/date/format": a3b36f0bf5d4dd91b8f14319e6d32280
127+
"%40complexMessage/placeholders/name/type": d9b2e6a31602b72464acbd1771cd5720
128+
"%40complexMessage/placeholders/name/example": e80d4063a32adaad7b0a82b0bcc10551
129+
"%40complexMessage/placeholders/gender/type": d9b2e6a31602b72464acbd1771cd5720
130+
"%40complexMessage/placeholders/guestCount/type": b60b53ee3b55f2f842e64dbb9becfe08
131+
"%40complexMessage/placeholders/guestCount/format": 3a91783b8a4ca53167e22450df491216
132+
"%40complexMessage/placeholders/eventName/type": d9b2e6a31602b72464acbd1771cd5720
133+
"%40complexMessage/placeholders/eventName/example": b5c51b2ed9c463cbcc18969e080be169
134+
escapeMessage: 88d90279078fafe7a29fda6f17f99c06
135+
"%40escapeMessage/description": d1115c61088acbe5c0b99d46bdba0a8b
136+
multilineMessage: a54a797df1eded0bdb2d0e6078e5eb5d
137+
"%40multilineMessage/description": 9b738dc852df541efeadadb453e11f5a
138+
htmlMessage: a9e1185f9b7d4cbb64151766e881e4a3
139+
"%40htmlMessage/description": b6bbed89ea7ee962bfc0ce042dcce018

0 commit comments

Comments
 (0)