update sending template text

Godwin Asuquo committed Jan 12, 2022 at 18:58 UTC 3115798b707f9f7ef53a848f960fa0fa2fa104af
15 files changed +233 -213
lib/src/screens/send/send_page.dart
+191 -199
@@ -26,7 +26,7 @@ import 'package:cake_wallet/store/yat/yat_store.dart';
26 import 'package:cake_wallet/src/screens/yat/yat_sending.dart';
27
28 class SendPage extends BasePage {
29 - SendPage({@required this.sendViewModel}) :_formKey = GlobalKey<FormState>();
29 + SendPage({@required this.sendViewModel}) : _formKey = GlobalKey<FormState>();
30
31 final SendViewModel sendViewModel;
32 final GlobalKey<FormState> _formKey;
@@ -51,24 +51,24 @@ class SendPage extends BasePage {
51
52 @override
53 Widget trailing(context) => Observer(builder: (_) {
54 - return sendViewModel.isBatchSending
55 - ? TrailButton(
56 - caption: S.of(context).remove,
57 - onPressed: () {
58 - var pageToJump = controller.page.round() - 1;
59 - pageToJump = pageToJump > 0 ? pageToJump : 0;
60 - final output = _defineCurrentOutput();
61 - sendViewModel.removeOutput(output);
62 - controller.jumpToPage(pageToJump);
63 - })
64 - : TrailButton(
65 - caption: S.of(context).clear,
66 - onPressed: () {
67 - final output = _defineCurrentOutput();
68 - _formKey.currentState.reset();
69 - output.reset();
70 - });
71 - });
54 + return sendViewModel.isBatchSending
55 + ? TrailButton(
56 + caption: S.of(context).remove,
57 + onPressed: () {
58 + var pageToJump = controller.page.round() - 1;
59 + pageToJump = pageToJump > 0 ? pageToJump : 0;
60 + final output = _defineCurrentOutput();
61 + sendViewModel.removeOutput(output);
62 + controller.jumpToPage(pageToJump);
63 + })
64 + : TrailButton(
65 + caption: S.of(context).clear,
66 + onPressed: () {
67 + final output = _defineCurrentOutput();
68 + _formKey.currentState.reset();
69 + output.reset();
70 + });
71 + });
72
73 @override
74 Widget body(BuildContext context) {
@@ -96,57 +96,39 @@ class SendPage extends BasePage {
96 output: output,
97 sendViewModel: sendViewModel,
98 );
99 - }
100 - );
99 + });
100 },
102 - )
103 - ),
101 + )),
102 Padding(
105 - padding: EdgeInsets.only(top: 10, left: 24, right: 24, bottom: 10),
106 - child: Container(
107 - height: 10,
108 - child: Observer(builder: (_) {
109 - final count = sendViewModel.outputs.length;
103 + padding:
104 + EdgeInsets.only(top: 10, left: 24, right: 24, bottom: 10),
105 + child: Container(
106 + height: 10,
107 + child: Observer(
108 + builder: (_) {
109 + final count = sendViewModel.outputs.length;
110
111 - return count > 1
111 + return count > 1
112 ? SmoothPageIndicator(
113 - controller: controller,
114 - count: count,
115 - effect: ScrollingDotsEffect(
116 - spacing: 6.0,
117 - radius: 6.0,
118 - dotWidth: 6.0,
119 - dotHeight: 6.0,
120 - dotColor: Theme.of(context)
121 - .primaryTextTheme
122 - .display2
123 - .backgroundColor,
124 - activeDotColor: Theme.of(context)
125 - .primaryTextTheme
126 - .display3
127 - .backgroundColor
113 + controller: controller,
114 + count: count,
115 + effect: ScrollingDotsEffect(
116 + spacing: 6.0,
117 + radius: 6.0,
118 + dotWidth: 6.0,
119 + dotHeight: 6.0,
120 + dotColor: Theme.of(context)
121 + .primaryTextTheme
122 + .display2
123 + .backgroundColor,
124 + activeDotColor: Theme.of(context)
125 + .primaryTextTheme
126 + .display3
127 + .backgroundColor),
128 )
129 - )
129 : Offstage();
131 - })
132 - )
133 - ),
134 - Padding(
135 - padding: EdgeInsets.only(left: 24, bottom: 24),
136 - child: Row(
137 - mainAxisAlignment: MainAxisAlignment.start,
138 - children: <Widget>[
139 - Text(
140 - S.of(context).send_templates,
141 - style: TextStyle(
142 - fontSize: 18,
143 - fontWeight: FontWeight.w600,
144 - color: Theme.of(context)
145 - .primaryTextTheme
146 - .display4
147 - .color),
148 - )
149 - ],
130 + },
131 + ),
132 ),
133 ),
134 Container(
@@ -155,51 +137,60 @@ class SendPage extends BasePage {
137 padding: EdgeInsets.only(left: 24),
138 child: SingleChildScrollView(
139 scrollDirection: Axis.horizontal,
158 - child: Row(
159 - children: <Widget>[
160 - GestureDetector(
161 - onTap: () => Navigator.of(context)
162 - .pushNamed(Routes.sendTemplate),
163 - child: Container(
164 - padding: EdgeInsets.only(left: 1, right: 10),
165 - child: DottedBorder(
166 - borderType: BorderType.RRect,
167 - dashPattern: [6, 4],
168 - color: Theme.of(context)
169 - .primaryTextTheme
170 - .display2
171 - .decorationColor,
172 - strokeWidth: 2,
173 - radius: Radius.circular(20),
174 - child: Container(
175 - height: 34,
176 - width: 75,
177 - padding:
178 - EdgeInsets.only(left: 10, right: 10),
179 - alignment: Alignment.center,
180 - decoration: BoxDecoration(
181 - borderRadius:
182 - BorderRadius.all(Radius.circular(20)),
183 - color: Colors.transparent,
184 - ),
185 - child: Text(
186 - S.of(context).send_new,
187 - style: TextStyle(
188 - fontSize: 14,
189 - fontWeight: FontWeight.w600,
190 - color: Theme.of(context)
191 - .primaryTextTheme
192 - .display3
193 - .color),
194 - ),
195 - )),
196 - ),
197 - ),
198 - Observer(builder: (_) {
199 - final templates = sendViewModel.templates;
200 - final itemCount = templates.length;
140 + child: Observer(
141 + builder: (_) {
142 + final templates = sendViewModel.templates;
143 + final itemCount = templates.length;
144
202 - return ListView.builder(
145 + return Row(
146 + children: <Widget>[
147 + GestureDetector(
148 + onTap: () => Navigator.of(context)
149 + .pushNamed(Routes.sendTemplate),
150 + child: Container(
151 + padding: EdgeInsets.only(left: 1, right: 10),
152 + child: DottedBorder(
153 + borderType: BorderType.RRect,
154 + dashPattern: [6, 4],
155 + color: Theme.of(context)
156 + .primaryTextTheme
157 + .headline2
158 + .decorationColor,
159 + strokeWidth: 2,
160 + radius: Radius.circular(20),
161 + child: Container(
162 + height: 34,
163 + padding: EdgeInsets.only(left: 10, right: 10),
164 + alignment: Alignment.center,
165 + decoration: BoxDecoration(
166 + borderRadius:
167 + BorderRadius.all(Radius.circular(20)),
168 + color: Colors.transparent,
169 + ),
170 + child: templates.length >= 1
171 + ? Icon(
172 + Icons.add,
173 + color: Theme.of(context)
174 + .primaryTextTheme
175 + .display3
176 + .color,
177 + )
178 + : Text(
179 + S.of(context).new_template,
180 + style: TextStyle(
181 + fontSize: 14,
182 + fontWeight: FontWeight.w600,
183 + color: Theme.of(context)
184 + .primaryTextTheme
185 + .display3
186 + .color,
187 + ),
188 + ),
189 + ),
190 + ),
191 + ),
192 + ),
193 + ListView.builder(
194 scrollDirection: Axis.horizontal,
195 shrinkWrap: true,
196 physics: NeverScrollableScrollPhysics(),
@@ -214,109 +205,108 @@ class SendPage extends BasePage {
205 from: template.cryptoCurrency,
206 onTap: () async {
207 final output = _defineCurrentOutput();
217 - output.address =
218 - template.address;
208 + output.address = template.address;
209 output.setCryptoAmount(template.amount);
210 output.resetParsedAddress();
211 await output.fetchParsedAddress(context);
212 },
213 onRemove: () {
214 showPopUp<void>(
225 - context: context,
226 - builder: (dialogContext) {
227 - return AlertWithTwoActions(
228 - alertTitle:
229 - S.of(context).template,
230 - alertContent: S
231 - .of(context)
232 - .confirm_delete_template,
233 - rightButtonText:
234 - S.of(context).delete,
235 - leftButtonText:
236 - S.of(context).cancel,
237 - actionRightButton: () {
215 + context: context,
216 + builder: (dialogContext) {
217 + return AlertWithTwoActions(
218 + alertTitle: S.of(context).template,
219 + alertContent: S
220 + .of(context)
221 + .confirm_delete_template,
222 + rightButtonText: S.of(context).delete,
223 + leftButtonText: S.of(context).cancel,
224 + actionRightButton: () {
225 + Navigator.of(dialogContext).pop();
226 + sendViewModel.sendTemplateViewModel
227 + .removeTemplate(
228 + template: template);
229 + },
230 + actionLeftButton: () =>
231 Navigator.of(dialogContext)
239 - .pop();
240 - sendViewModel
241 - .sendTemplateViewModel
242 - .removeTemplate(
243 - template: template);
244 - },
245 - actionLeftButton: () =>
246 - Navigator.of(dialogContext)
247 - .pop());
248 - });
232 + .pop());
233 + },
234 + );
235 },
236 );
251 - });
252 - })
253 - ],
237 + },
238 + ),
239 + ],
240 + );
241 + },
242 ),
243 ),
244 )
245 ],
246 ),
247 bottomSectionPadding:
260 - EdgeInsets.only(left: 24, right: 24, bottom: 24),
248 + EdgeInsets.only(left: 24, right: 24, bottom: 24),
249 bottomSection: Column(
250 children: [
251 Padding(
264 - padding: EdgeInsets.only(bottom: 12),
265 - child: PrimaryButton(
266 - onPressed: () {
267 - sendViewModel.addOutput();
268 - Future.delayed(const Duration(milliseconds: 250), () {
269 - controller.jumpToPage(sendViewModel.outputs.length - 1);
270 - });
271 - },
272 - text: S.of(context).add_receiver,
273 - color: Colors.transparent,
274 - textColor: Theme.of(context)
275 - .accentTextTheme
276 - .display2
277 - .decorationColor,
278 - isDottedBorder: true,
279 - borderColor: Theme.of(context)
280 - .primaryTextTheme
281 - .display2
282 - .decorationColor,
283 - )
284 - ),
285 - Observer(builder: (_) {
286 - return LoadingPrimaryButton(
287 - onPressed: () async {
288 - if (!_formKey.currentState.validate()) {
289 - if (sendViewModel.outputs.length > 1) {
290 - showErrorValidationAlert(context);
291 - }
252 + padding: EdgeInsets.only(bottom: 12),
253 + child: PrimaryButton(
254 + onPressed: () {
255 + sendViewModel.addOutput();
256 + Future.delayed(const Duration(milliseconds: 250), () {
257 + controller.jumpToPage(sendViewModel.outputs.length - 1);
258 + });
259 + },
260 + text: S.of(context).add_receiver,
261 + color: Colors.transparent,
262 + textColor: Theme.of(context)
263 + .accentTextTheme
264 + .display2
265 + .decorationColor,
266 + isDottedBorder: true,
267 + borderColor: Theme.of(context)
268 + .primaryTextTheme
269 + .display2
270 + .decorationColor,
271 + )),
272 + Observer(
273 + builder: (_) {
274 + return LoadingPrimaryButton(
275 + onPressed: () async {
276 + if (!_formKey.currentState.validate()) {
277 + if (sendViewModel.outputs.length > 1) {
278 + showErrorValidationAlert(context);
279 + }
280
293 - return;
294 - }
281 + return;
282 + }
283
296 - final notValidItems = sendViewModel.outputs
297 - .where((item) =>
298 - item.address.isEmpty || item.cryptoAmount.isEmpty)
299 - .toList();
284 + final notValidItems = sendViewModel.outputs
285 + .where((item) =>
286 + item.address.isEmpty || item.cryptoAmount.isEmpty)
287 + .toList();
288
301 - if (notValidItems?.isNotEmpty ?? false) {
302 - showErrorValidationAlert(context);
303 - return;
304 - }
289 + if (notValidItems?.isNotEmpty ?? false) {
290 + showErrorValidationAlert(context);
291 + return;
292 + }
293
306 - await sendViewModel.createTransaction();
294 + await sendViewModel.createTransaction();
295
308 - if (!sendViewModel.isBatchSending && sendViewModel.hasYat) {
309 - Navigator.of(context).push<void>(YatSending.createRoute(sendViewModel));
310 - }
311 - },
312 - text: S.of(context).send,
313 - color: Theme.of(context).accentTextTheme.body2.color,
314 - textColor: Colors.white,
315 - isLoading: sendViewModel.state is IsExecutingState ||
316 - sendViewModel.state is TransactionCommitting,
317 - isDisabled: !sendViewModel.isReadyForSend,
318 - );
319 - },
296 + if (!sendViewModel.isBatchSending &&
297 + sendViewModel.hasYat) {
298 + Navigator.of(context)
299 + .push<void>(YatSending.createRoute(sendViewModel));
300 + }
301 + },
302 + text: S.of(context).send,
303 + color: Theme.of(context).accentTextTheme.body2.color,
304 + textColor: Colors.white,
305 + isLoading: sendViewModel.state is IsExecutingState ||
306 + sendViewModel.state is TransactionCommitting,
307 + isDisabled: !sendViewModel.isReadyForSend,
308 + );
309 + },
310 )
311 ],
312 )),
@@ -343,8 +333,8 @@ class SendPage extends BasePage {
333 });
334 }
335
346 - if (state is ExecutedSuccessfullyState
347 - && !(!sendViewModel.isBatchSending && sendViewModel.hasYat)) {
336 + if (state is ExecutedSuccessfullyState &&
337 + !(!sendViewModel.isBatchSending && sendViewModel.hasYat)) {
338 WidgetsBinding.instance.addPostFrameCallback((_) {
339 showPopUp<void>(
340 context: context,
@@ -353,13 +343,17 @@ class SendPage extends BasePage {
343 alertTitle: S.of(context).confirm_sending,
344 amount: S.of(context).send_amount,
345 amountValue:
356 - sendViewModel.pendingTransaction.amountFormatted,
357 - fiatAmountValue: sendViewModel.pendingTransactionFiatAmount
358 - + ' ' + sendViewModel.fiat.title,
346 + sendViewModel.pendingTransaction.amountFormatted,
347 + fiatAmountValue:
348 + sendViewModel.pendingTransactionFiatAmount +
349 + ' ' +
350 + sendViewModel.fiat.title,
351 fee: S.of(context).send_fee,
352 feeValue: sendViewModel.pendingTransaction.feeFormatted,
361 - feeFiatAmount: sendViewModel.pendingTransactionFeeFiatAmount
362 - + ' ' + sendViewModel.fiat.title,
353 + feeFiatAmount:
354 + sendViewModel.pendingTransactionFeeFiatAmount +
355 + ' ' +
356 + sendViewModel.fiat.title,
357 outputs: sendViewModel.outputs,
358 rightButtonText: S.of(context).ok,
359 leftButtonText: S.of(context).cancel,
@@ -380,8 +374,7 @@ class SendPage extends BasePage {
374 return AlertWithOneAction(
375 alertTitle: '',
376 alertContent: S.of(context).send_success(
383 - sendViewModel.currency
384 - .toString()),
377 + sendViewModel.currency.toString()),
378 buttonText: S.of(context).ok,
379 buttonAction: () =>
380 Navigator.of(context).pop());
@@ -419,8 +412,7 @@ class SendPage extends BasePage {
412 alertTitle: S.of(context).error,
413 alertContent: 'Please, check receiver forms',
414 buttonText: S.of(context).ok,
422 - buttonAction: () =>
423 - Navigator.of(context).pop());
415 + buttonAction: () => Navigator.of(context).pop());
416 });
417 }
418 }
res/values/strings_de.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Ihr Yat ist eine einzige eindeutige Emoji-Adresse, die alle Ihre langen hexadezimalen Adressen für alle Ihre Währungen ersetzt.",
517 "third_intro_title" : "Yat spielt gut mit anderen",
518 "third_intro_content" : "Yats leben auch außerhalb von Cake Wallet. Jede Wallet-Adresse auf der Welt kann durch ein Yat ersetzt werden!",
519 - "learn_more" : "Erfahren Sie mehr"
519 + "learn_more" : "Erfahren Sie mehr",
520 +
521 + "new_template" : "neue Vorlage"
522 }
res/values/strings_en.arb
+3 -1
@@ -517,5 +517,7 @@
517 "second_intro_content" : "Your Yat is a single unique emoji address that replaces all of your long hexadecimal addresses for all of your currencies.",
518 "third_intro_title" : "Yat plays nicely with others",
519 "third_intro_content" : "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!",
520 - "learn_more" : "Learn More"
520 + "learn_more" : "Learn More",
521 +
522 + "new_template" : "New Template"
523 }
\ No newline at end of file
res/values/strings_es.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Tu Yat es una única dirección emoji única que reemplaza todas tus direcciones hexadecimales largas para todas tus monedas.",
517 "third_intro_title" : "Yat juega muy bien con otras",
518 "third_intro_content" : "Los Yats también viven fuera de Cake Wallet. Cualquier dirección de billetera en la tierra se puede reemplazar con un Yat!",
519 - "learn_more" : "Aprende más"
519 + "learn_more" : "Aprende más",
520 +
521 + "new_template" : "Nueva plantilla"
522 }
\ No newline at end of file
res/values/strings_hi.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "आपका Yat एक अद्वितीय इमोजी पता है जो आपकी सभी मुद्राओं के लिए आपके सभी लंबे हेक्साडेसिमल पतों को बदल देता है।",
517 "third_intro_title" : "Yat दूसरों के साथ अच्छा खेलता है",
518 "third_intro_content" : "Yats Cake Wallet के बाहर भी रहता है। धरती पर किसी भी वॉलेट पते को Yat से बदला जा सकता है!",
519 - "learn_more" : "और अधिक जानें"
519 + "learn_more" : "और अधिक जानें",
520 +
521 + "new_template" : "नया टेम्पलेट"
522 }
\ No newline at end of file
res/values/strings_hr.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Vaš Yat jedinstvena je adresa emojija koja zamjenjuje sve vaše duge heksadecimalne adrese za sve vaše valute.",
517 "third_intro_title" : "Yat se lijepo igra s drugima",
518 "third_intro_content" : "Yats žive i izvan Cake Wallet -a. Bilo koja adresa novčanika na svijetu može se zamijeniti Yat!",
519 - "learn_more" : "Saznajte više"
519 + "learn_more" : "Saznajte više",
520 +
521 + "new_template" : "novi predložak"
522 }
\ No newline at end of file
res/values/strings_it.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Il tuo Yat è un unico indirizzo emoji univoco che sostituisce tutti i tuoi lunghi indirizzi esadecimali per tutte le tue valute.",
517 "third_intro_title" : "Yat gioca bene con gli altri",
518 "third_intro_content" : "Anche Yats vive fuori da Cake Wallet. Qualsiasi indirizzo di portafoglio sulla terra può essere sostituito con un Yat!",
519 - "learn_more" : "Impara di più"
519 + "learn_more" : "Impara di più",
520 +
521 + "new_template" : "Nuovo modello"
522 }
\ No newline at end of file
res/values/strings_ja.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Yatは、すべての通貨のすべての長い16進アドレスを置き換える単一の一意の絵文字アドレスです。",
517 "third_intro_title" : "Yatは他の人とうまく遊ぶ",
518 "third_intro_content" : "YatsはCakeWalletの外にも住んでいます。 地球上のどのウォレットアドレスもYatに置き換えることができます!",
519 - "learn_more" : "もっと詳しく知る"
519 + "learn_more" : "もっと詳しく知る",
520 +
521 + "new_template" : "新しいテンプレート"
522 }
\ No newline at end of file
res/values/strings_ko.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "귀하의 Yat는 귀하의 모든 통화에 대해 긴 16진수 주소를 모두 대체하는 고유한 단일 이모지 주소입니다.",
517 "third_intro_title" : "Yat는 다른 사람들과 잘 놉니다.",
518 "third_intro_content" : "Yats는 Cake Wallet 밖에서도 살고 있습니다. 지구상의 모든 지갑 주소는 Yat!",
519 - "learn_more" : "더 알아보기"
519 + "learn_more" : "더 알아보기",
520 +
521 + "new_template" : "새 템플릿"
522 }
\ No newline at end of file
res/values/strings_nl.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Je Yat is een enkel uniek emoji-adres dat al je lange hexadecimale adressen vervangt voor al je valuta's.",
517 "third_intro_title" : "Yat speelt leuk met anderen",
518 "third_intro_content" : "Yats wonen ook buiten Cake Wallet. Elk portemonnee-adres op aarde kan worden vervangen door een Yat!",
519 - "learn_more" : "Kom meer te weten"
519 + "learn_more" : "Kom meer te weten",
520 +
521 + "new_template" : "Nieuwe sjabloon"
522 }
\ No newline at end of file
res/values/strings_pl.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Twój Yat to jeden unikalny adres emoji, który zastępuje wszystkie Twoje długie adresy szesnastkowe dla wszystkich Twoich walut.",
517 "third_intro_title" : "Yat ładnie bawi się z innymi",
518 "third_intro_content" : "Yats mieszkają również poza Cake Wallet. Każdy adres portfela na ziemi można zastąpić Yat!",
519 - "learn_more" : "Ucz się więcej"
519 + "learn_more" : "Ucz się więcej",
520 +
521 + "new_template" : "Nowy szablon"
522 }
\ No newline at end of file
res/values/strings_pt.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Seu Yat é um endereço de emoji único e exclusivo que substitui todos os seus endereços hexadecimais longos para todas as suas moedas.",
517 "third_intro_title" : "Yat joga bem com os outros",
518 "third_intro_content" : "Yats também mora fora da Cake Wallet. Qualquer endereço de carteira na Terra pode ser substituído por um Yat!",
519 - "learn_more" : "Saber mais"
519 + "learn_more" : "Saber mais",
520 +
521 + "new_template" : "Novo modelo"
522 }
\ No newline at end of file
res/values/strings_ru.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Ваш Yat - это единственный уникальный адрес эмодзи, который заменяет длинные шестнадцатеричные адреса для всех ваших валют.",
517 "third_intro_title" : "Yat хорошо взаимодействует с другими",
518 "third_intro_content" : "Yat находятся за пределами Cake Wallet. Любой адрес кошелька на земле можно заменить на Yat!",
519 - "learn_more" : "Узнать больше"
519 + "learn_more" : "Узнать больше",
520 +
521 + "new_template" : "Новый шаблон"
522 }
\ No newline at end of file
res/values/strings_uk.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "Ваш Yat - це єдина унікальна адреса емодзі, яка замінює довгі шістнадцятиричні адреси для всіх ваших валют.",
517 "third_intro_title" : "Yat добре взаємодіє з іншими",
518 "third_intro_content" : "Yat знаходиться за межами Cake Wallet. Будь-яку адресу гаманця на землі можна замінити на Yat!",
519 - "learn_more" : "Дізнатися більше"
519 + "learn_more" : "Дізнатися більше",
520 +
521 + "new_template" : "Новий шаблон"
522 }
\ No newline at end of file
res/values/strings_zh.arb
+3 -1
@@ -516,5 +516,7 @@
516 "second_intro_content" : "您的 Yat 是一個唯一的表情符號地址,可替換您所有貨幣的所有長十六進制地址。",
517 "third_intro_title" : "Yat 和別人玩得很好",
518 "third_intro_content" : "Yats 也住在 Cake Wallet 之外。 地球上任何一個錢包地址都可以用一個Yat來代替!",
519 - "learn_more" : "了解更多"
519 + "learn_more" : "了解更多",
520 +
521 + "new_template" : "新模板"
522 }
\ No newline at end of file