CWA-198 | created front and back sides of wallet card
Oleksandr Sobol committed
Apr 15, 2020 at 19:33 UTC
fc8c632e21016b47e8a98eb331493f83b705f162
19 files changed
+402
-119
assets/images/2.0x/right_arrow.png
Binary files /dev/null and b/assets/images/2.0x/right_arrow.png differ
assets/images/3.0x/right_arrow.png
Binary files /dev/null and b/assets/images/3.0x/right_arrow.png differ
assets/images/right_arrow.png
Binary files /dev/null and b/assets/images/right_arrow.png differ
lib/generated/i18n.dart
+23
@@ -40,6 +40,7 @@ class S implements WidgetsLocalizations {
40
String get available_balance => "Available Balance";
41
String get biometric_auth_reason => "Scan your fingerprint to authenticate";
42
String get cancel => "Cancel";
43
+ String get card_address => "Address:";
44
String get change => "Change";
45
String get change_currency => "Change Currency";
46
String get change_exchange_provider => "Change Exchange Provider";
@@ -362,6 +363,8 @@ class $de extends S {
363
@override
364
String get wallet_list_create_new_wallet => "Neue Wallet erstellen";
365
@override
366
+ String get card_address => "Adresse:";
367
+ @override
368
String get seed_language_portuguese => "Portugiesisch";
369
@override
370
String get setup_pin => "PIN einrichten";
@@ -930,6 +933,8 @@ class $hi extends S {
933
@override
934
String get wallet_list_create_new_wallet => "नया बटुआ बनाएँ";
935
@override
936
+ String get card_address => "पता:";
937
+ @override
938
String get seed_language_portuguese => "पुर्तगाली";
939
@override
940
String get setup_pin => "पिन सेट करें";
@@ -1498,6 +1503,8 @@ class $ru extends S {
1503
@override
1504
String get wallet_list_create_new_wallet => "Создать новый кошелёк";
1505
@override
1506
+ String get card_address => "Адрес:";
1507
+ @override
1508
String get seed_language_portuguese => "Португальский";
1509
@override
1510
String get setup_pin => "Настроить PIN";
@@ -2066,6 +2073,8 @@ class $ko extends S {
2073
@override
2074
String get wallet_list_create_new_wallet => "새 월렛 만들기";
2075
@override
2076
+ String get card_address => "주소:";
2077
+ @override
2078
String get seed_language_portuguese => "포르투갈 인";
2079
@override
2080
String get setup_pin => "설정 PIN";
@@ -2634,6 +2643,8 @@ class $pt extends S {
2643
@override
2644
String get wallet_list_create_new_wallet => "Criar nova carteira";
2645
@override
2646
+ String get card_address => "Endereço:";
2647
+ @override
2648
String get seed_language_portuguese => "Português";
2649
@override
2650
String get setup_pin => "Configurar PIN";
@@ -3202,6 +3213,8 @@ class $uk extends S {
3213
@override
3214
String get wallet_list_create_new_wallet => "Створити новий гаманець";
3215
@override
3216
+ String get card_address => "Адреса:";
3217
+ @override
3218
String get seed_language_portuguese => "Португальська";
3219
@override
3220
String get setup_pin => "Встановити PIN";
@@ -3770,6 +3783,8 @@ class $ja extends S {
3783
@override
3784
String get wallet_list_create_new_wallet => "新しいウォレットを作成";
3785
@override
3786
+ String get card_address => "住所:";
3787
+ @override
3788
String get seed_language_portuguese => "ポルトガル語";
3789
@override
3790
String get setup_pin => "PINのセットアップ";
@@ -4342,6 +4357,8 @@ class $pl extends S {
4357
@override
4358
String get wallet_list_create_new_wallet => "Utwórz nowy portfel";
4359
@override
4360
+ String get card_address => "Adres:";
4361
+ @override
4362
String get seed_language_portuguese => "Portugalski";
4363
@override
4364
String get setup_pin => "Ustaw PIN";
@@ -4910,6 +4927,8 @@ class $es extends S {
4927
@override
4928
String get wallet_list_create_new_wallet => "Crear nueva billetera";
4929
@override
4930
+ String get card_address => "Dirección:";
4931
+ @override
4932
String get seed_language_portuguese => "Portugués";
4933
@override
4934
String get setup_pin => "PIN de configuración";
@@ -5478,6 +5497,8 @@ class $nl extends S {
5497
@override
5498
String get wallet_list_create_new_wallet => "Maak een nieuwe portemonnee";
5499
@override
5500
+ String get card_address => "Adres:";
5501
+ @override
5502
String get seed_language_portuguese => "Portugees";
5503
@override
5504
String get setup_pin => "PIN instellen";
@@ -6046,6 +6067,8 @@ class $zh extends S {
6067
@override
6068
String get wallet_list_create_new_wallet => "创建新钱包";
6069
@override
6070
+ String get card_address => "地址:";
6071
+ @override
6072
String get seed_language_portuguese => "葡萄牙語";
6073
@override
6074
String get setup_pin => "设定PIN码";
lib/palette.dart
+4
@@ -78,4 +78,8 @@ class PaletteDark {
78
static const Color walletCardBottomStartSync = Color.fromRGBO(70, 85, 133, 1.0);
79
static const Color walletCardTopEndSync = Color.fromRGBO(70, 85, 133, 1.0);
80
static const Color walletCardBottomEndSync = Color.fromRGBO(45, 56, 95, 1.0);
81
+ static const Color walletCardText = Color.fromRGBO(140, 153, 201, 1.0);
82
+ static const Color walletCardAddressField = Color.fromRGBO(51, 63, 104, 1.0);
83
+ static const Color walletCardAddressText = Color.fromRGBO(183, 197, 242, 1.0);
84
+ static const Color walletCardSubAddressField = Color.fromRGBO(63, 77, 122, 1.0);
85
}
\ No newline at end of file
lib/src/screens/dashboard/dashboard_page.dart
+2
-2
@@ -114,12 +114,12 @@ class DashboardPageBody extends StatefulWidget {
114
}
115
116
class DashboardPageBodyState extends State<DashboardPageBody> {
117
- final _connectionStatusObserverKey = GlobalKey();
117
+ /*final _connectionStatusObserverKey = GlobalKey();
118
final _balanceObserverKey = GlobalKey();
119
final _balanceTitleObserverKey = GlobalKey();
120
final _syncingObserverKey = GlobalKey();
121
final _listObserverKey = GlobalKey();
122
- final _listKey = GlobalKey();
122
+ final _listKey = GlobalKey();*/
123
124
@override
125
Widget build(BuildContext context) {
lib/src/screens/dashboard/widgets/wallet_card.dart
+337
-105
@@ -1,12 +1,18 @@
1
+import 'dart:async';
2
+import 'package:cake_wallet/src/domain/common/balance_display_mode.dart';
3
+import 'package:flutter/services.dart';
4
+import 'package:provider/provider.dart';
5
+import 'package:cake_wallet/src/stores/balance/balance_store.dart';
6
+import 'package:cake_wallet/src/stores/settings/settings_store.dart';
7
import 'package:cake_wallet/src/stores/sync/sync_store.dart';
8
import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
9
import 'package:flutter/cupertino.dart';
10
import 'package:flutter/material.dart';
11
import 'package:flutter_mobx/flutter_mobx.dart';
12
import 'package:cake_wallet/palette.dart';
7
-import 'package:provider/provider.dart';
13
import 'package:cake_wallet/generated/i18n.dart';
14
import 'package:cake_wallet/src/domain/common/sync_status.dart';
15
+import 'package:cake_wallet/src/screens/receive/qr_image.dart';
16
17
class WalletCard extends StatefulWidget {
18
@override
@@ -15,18 +21,25 @@ class WalletCard extends StatefulWidget {
21
22
class WalletCardState extends State<WalletCard> {
23
final _syncingObserverKey = GlobalKey();
18
- final triangleButton = Image.asset('assets/images/triangle.png');
24
+ final _balanceObserverKey = GlobalKey();
25
+ final _addressObserverKey = GlobalKey();
26
27
final List<Color> colorsSync = [PaletteDark.walletCardTopEndSync, PaletteDark.walletCardBottomEndSync];
28
double cardWidth;
29
+ double cardHeight;
30
double screenWidth;
31
double opacity;
32
+ bool isDraw;
33
+ bool isFrontSide;
34
35
@override
36
void initState() {
37
cardWidth = 0;
38
+ cardHeight = 220;
39
screenWidth = 0;
40
opacity = 0;
41
+ isDraw = false;
42
+ isFrontSide = true;
43
super.initState();
44
WidgetsBinding.instance.addPostFrameCallback(afterLayout);
45
}
@@ -37,21 +50,21 @@ class WalletCardState extends State<WalletCard> {
50
cardWidth = screenWidth;
51
opacity = 1;
52
});
53
+ Timer(Duration(milliseconds: 350), () =>
54
+ setState(() => isDraw = true)
55
+ );
56
}
57
58
@override
59
Widget build(BuildContext context) {
44
- final syncStore = Provider.of<SyncStore>(context);
45
- final walletStore = Provider.of<WalletStore>(context);
46
-
60
return Container(
61
width: double.infinity,
49
- height: 220,
62
+ height: cardHeight,
63
alignment: Alignment.centerRight,
64
child: AnimatedContainer(
65
alignment: Alignment.centerLeft,
66
width: cardWidth,
54
- height: 220,
67
+ height: cardHeight,
68
duration: Duration(milliseconds: 500),
69
curve: Curves.fastOutSlowIn,
70
decoration: BoxDecoration(
@@ -63,98 +76,156 @@ class WalletCardState extends State<WalletCard> {
76
end: Alignment.bottomCenter
77
)
78
),
66
- child: screenWidth > 0 && cardWidth == screenWidth
67
- ? InkWell(
68
- onTap: (){print('TAP');},
69
- child: Observer(
70
- key: _syncingObserverKey,
71
- builder: (_) {
72
- final status = syncStore.status;
73
- final statusText = status.title();
74
- final progress = syncStore.status.progress();
75
- //final isFialure = status is FailedSyncStatus;
76
-
77
- var descriptionText = '';
78
-
79
- if (status is SyncingSyncStatus) {
80
- descriptionText = S
81
- .of(context)
82
- .Blocks_remaining(
83
- syncStore.status.toString());
84
- }
85
-
86
- if (status is FailedSyncStatus) {
87
- descriptionText = S
88
- .of(context)
89
- .please_try_to_connect_to_another_node;
90
- }
91
-
92
- return Container(
93
- width: cardWidth,
94
- height: 220,
95
- child: Stack(
96
- children: <Widget>[
97
- Container(
98
- height: 220,
99
- width: progress * cardWidth,
100
- decoration: BoxDecoration(
101
- borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
102
- gradient: LinearGradient(
103
- colors: colorsSync,
104
- begin: Alignment.topCenter,
105
- end: Alignment.bottomCenter
106
- )
107
- ),
108
- ),
109
- Positioned(
110
- left: 20,
111
- right: 20,
112
- top: 30,
113
- bottom: 30,
114
- child: Container(
115
- child: Column(
116
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
117
- children: <Widget>[
118
- Row(
119
- crossAxisAlignment: CrossAxisAlignment.start,
120
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
121
- children: <Widget>[
122
- Column(
123
- crossAxisAlignment: CrossAxisAlignment.start,
79
+ child: InkWell(
80
+ onTap: () => setState(() => isFrontSide = !isFrontSide),
81
+ child: isFrontSide
82
+ ? frontSide()
83
+ : backSide()
84
+ ),
85
+ ),
86
+ );
87
+ }
88
+
89
+ Widget frontSide() {
90
+ final syncStore = Provider.of<SyncStore>(context);
91
+ final walletStore = Provider.of<WalletStore>(context);
92
+ final settingsStore = Provider.of<SettingsStore>(context);
93
+ final balanceStore = Provider.of<BalanceStore>(context);
94
+ final triangleButton = Image.asset('assets/images/triangle.png');
95
+
96
+ return Observer(
97
+ key: _syncingObserverKey,
98
+ builder: (_) {
99
+ final status = syncStore.status;
100
+ final statusText = status.title();
101
+ final progress = syncStore.status.progress();
102
+
103
+ String shortAddress = walletStore.subaddress.address;
104
+ shortAddress = shortAddress.replaceRange(4, shortAddress.length - 4, '...');
105
+
106
+ var descriptionText = '';
107
+
108
+ if (status is SyncingSyncStatus) {
109
+ descriptionText = S
110
+ .of(context)
111
+ .Blocks_remaining(
112
+ syncStore.status.toString());
113
+ }
114
+
115
+ if (status is FailedSyncStatus) {
116
+ descriptionText = S
117
+ .of(context)
118
+ .please_try_to_connect_to_another_node;
119
+ }
120
+
121
+ return Container(
122
+ width: cardWidth,
123
+ height: cardHeight,
124
+ child: Stack(
125
+ children: <Widget>[
126
+ Container(
127
+ height: cardHeight,
128
+ width: progress * cardWidth,
129
+ decoration: BoxDecoration(
130
+ borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
131
+ gradient: LinearGradient(
132
+ colors: colorsSync,
133
+ begin: Alignment.topCenter,
134
+ end: Alignment.bottomCenter
135
+ )
136
+ ),
137
+ ),
138
+ isDraw ? Positioned(
139
+ left: 20,
140
+ right: 20,
141
+ top: 30,
142
+ bottom: 30,
143
+ child: Container(
144
+ child: Column(
145
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
146
+ children: <Widget>[
147
+ Row(
148
+ crossAxisAlignment: CrossAxisAlignment.start,
149
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
150
+ children: <Widget>[
151
+ Column(
152
+ crossAxisAlignment: CrossAxisAlignment.start,
153
+ children: <Widget>[
154
+ InkWell(
155
+ onTap: () {print('TAP 2');},
156
+ child: Row(
157
children: <Widget>[
125
- InkWell(
126
- onTap: (){print('TAP 2');},
127
- child: Row(
128
- children: <Widget>[
129
- Text(
130
- walletStore.name,
131
- style: TextStyle(
132
- fontSize: 20,
133
- fontWeight: FontWeight.bold
134
- ),
135
- ),
136
- SizedBox(width: 10),
137
- triangleButton
138
- ],
139
- ),
140
- ),
141
- SizedBox(
142
- height: 5,
143
- ),
158
Text(
145
- walletStore.account.label,
159
+ walletStore.name,
160
style: TextStyle(
147
- fontSize: 12
161
+ fontSize: 20,
162
+ fontWeight: FontWeight.bold
163
),
149
- )
164
+ ),
165
+ SizedBox(width: 10),
166
+ triangleButton
167
],
168
),
152
- Text(
153
- walletStore.account.label
154
- )
155
- ],
169
+ ),
170
+ SizedBox(
171
+ height: 5,
172
+ ),
173
+ Text(
174
+ walletStore.account.label,
175
+ style: TextStyle(
176
+ fontSize: 12,
177
+ color: PaletteDark.walletCardText
178
+ ),
179
+ )
180
+ ],
181
+ ),
182
+ Container(
183
+ width: 98,
184
+ height: 32,
185
+ alignment: Alignment.center,
186
+ decoration: BoxDecoration(
187
+ color: PaletteDark.walletCardAddressField,
188
+ borderRadius: BorderRadius.all(Radius.circular(16))
189
),
157
- Row(
190
+ child: Text(
191
+ shortAddress,
192
+ style: TextStyle(
193
+ fontSize: 12,
194
+ color: PaletteDark.walletCardAddressText
195
+ ),
196
+ ),
197
+ )
198
+ ],
199
+ ),
200
+ status is SyncedSyncStatus
201
+ ? Observer(
202
+ key: _balanceObserverKey,
203
+ builder: (_) {
204
+ final balanceDisplayMode = settingsStore.balanceDisplayMode;
205
+ final symbol = settingsStore
206
+ .fiatCurrency
207
+ .toString();
208
+ var balance = '---';
209
+ var fiatBalance = '---';
210
+
211
+ if (balanceDisplayMode ==
212
+ BalanceDisplayMode.availableBalance) {
213
+ balance =
214
+ balanceStore.unlockedBalance ??
215
+ '0.0';
216
+ fiatBalance =
217
+ '$symbol ${balanceStore.fiatUnlockedBalance}';
218
+ }
219
+
220
+ if (balanceDisplayMode ==
221
+ BalanceDisplayMode.fullBalance) {
222
+ balance =
223
+ balanceStore.fullBalance ?? '0.0';
224
+ fiatBalance =
225
+ '$symbol ${balanceStore.fiatFullBalance}';
226
+ }
227
+
228
+ return Row(
229
crossAxisAlignment: CrossAxisAlignment.end,
230
mainAxisAlignment: MainAxisAlignment.spaceBetween,
231
children: <Widget>[
@@ -162,37 +233,198 @@ class WalletCardState extends State<WalletCard> {
233
crossAxisAlignment: CrossAxisAlignment.start,
234
children: <Widget>[
235
Text(
165
- statusText,
236
+ balanceDisplayMode.toString(),
237
style: TextStyle(
167
- fontSize: 12
238
+ fontSize: 12,
239
+ color: PaletteDark.walletCardText
240
),
241
),
242
SizedBox(height: 5),
243
Text(
172
- descriptionText,
244
+ balance,
245
style: TextStyle(
174
- fontSize: 14
246
+ fontSize: 28
247
),
248
)
249
],
250
),
251
Text(
180
- walletStore.account.label
252
+ fiatBalance,
253
+ style: TextStyle(
254
+ fontSize: 14
255
+ ),
256
)
257
],
183
- )
184
- ],
258
+ );
259
+ }
260
+ )
261
+ : Row(
262
+ crossAxisAlignment: CrossAxisAlignment.end,
263
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
264
+ children: <Widget>[
265
+ Column(
266
+ crossAxisAlignment: CrossAxisAlignment.start,
267
+ children: <Widget>[
268
+ Text(
269
+ statusText,
270
+ style: TextStyle(
271
+ fontSize: 12,
272
+ color: PaletteDark.walletCardText
273
+ ),
274
+ ),
275
+ SizedBox(height: 5),
276
+ Text(
277
+ descriptionText,
278
+ style: TextStyle(
279
+ fontSize: 14
280
+ ),
281
+ )
282
+ ],
283
+ )
284
+ ],
285
+ )
286
+ ],
287
+ ),
288
+ )
289
+ )
290
+ : Offstage()
291
+ ],
292
+ ),
293
+ );
294
+ },
295
+ );
296
+ }
297
+
298
+ Widget backSide() {
299
+ final walletStore = Provider.of<WalletStore>(context);
300
+ final rightArrow = Image.asset('assets/images/right_arrow.png');
301
+ double messageBoxHeight = 0;
302
+
303
+ return Observer(
304
+ key: _addressObserverKey,
305
+ builder: (_) {
306
+ return Container(
307
+ width: cardWidth,
308
+ height: cardHeight,
309
+ alignment: Alignment.topCenter,
310
+ child: Stack(
311
+ children: <Widget>[
312
+ Container(
313
+ width: cardWidth,
314
+ height: cardHeight,
315
+ padding: EdgeInsets.only(left: 20, right: 20, top: 30, bottom: 30),
316
+ decoration: BoxDecoration(
317
+ borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
318
+ gradient: LinearGradient(
319
+ colors: colorsSync,
320
+ begin: Alignment.topCenter,
321
+ end: Alignment.bottomCenter
322
+ )
323
+ ),
324
+ child: Column(
325
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
326
+ children: <Widget>[
327
+ Row(
328
+ children: <Widget>[
329
+ Expanded(
330
+ child: Container(
331
+ height: 72,
332
+ child: Column(
333
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
334
+ crossAxisAlignment: CrossAxisAlignment.start,
335
+ children: <Widget>[
336
+ Text(
337
+ S.current.card_address,
338
+ style: TextStyle(
339
+ fontSize: 12,
340
+ color: PaletteDark.walletCardText
341
+ ),
342
+ ),
343
+ GestureDetector(
344
+ onTap: () {
345
+ Clipboard.setData(ClipboardData(
346
+ text: walletStore.subaddress.address));
347
+ _addressObserverKey.currentState.setState(() => messageBoxHeight = 20);
348
+ Timer(Duration(milliseconds: 1000), () {
349
+ try {
350
+ _addressObserverKey.currentState.setState(() => messageBoxHeight = 0);
351
+ } catch(e) {
352
+ print('${e.toString()}');
353
+ }
354
+ });
355
+ },
356
+ child: Text(
357
+ walletStore.subaddress.address,
358
+ style: TextStyle(
359
+ fontSize: 14,
360
+ ),
361
+ ),
362
+ )
363
+ ],
364
+ ),
365
+ )
366
+ ),
367
+ SizedBox(width: 20),
368
+ Container(
369
+ width: 72,
370
+ height: 72,
371
+ child: QrImage(
372
+ data: walletStore.subaddress.address,
373
+ backgroundColor: Colors.transparent,
374
+ foregroundColor: PaletteDark.walletCardText,
375
),
376
)
377
+ ],
378
+ ),
379
+ Container(
380
+ height: 44,
381
+ padding: EdgeInsets.only(left: 20, right: 20),
382
+ alignment: Alignment.center,
383
+ decoration: BoxDecoration(
384
+ borderRadius: BorderRadius.all(Radius.circular(22)),
385
+ color: PaletteDark.walletCardSubAddressField
386
+ ),
387
+ child: InkWell(
388
+ onTap: () {},
389
+ child: Row(
390
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
391
+ children: <Widget>[
392
+ Text(
393
+ S.current.subaddresses,
394
+ style: TextStyle(
395
+ fontSize: 14,
396
+ ),
397
+ ),
398
+ rightArrow
399
+ ],
400
+ ),
401
+ ),
402
)
403
],
404
),
190
- );
191
- },
192
- )
193
- )
194
- : Offstage(),
195
- ),
405
+ ),
406
+ AnimatedContainer(
407
+ width: cardWidth,
408
+ height: messageBoxHeight,
409
+ alignment: Alignment.center,
410
+ duration: Duration(milliseconds: 500),
411
+ curve: Curves.fastOutSlowIn,
412
+ decoration: BoxDecoration(
413
+ borderRadius: BorderRadius.only(topLeft: Radius.circular(10)),
414
+ color: Colors.green
415
+ ),
416
+ child: Text(
417
+ S.of(context).copied_to_clipboard,
418
+ style: TextStyle(
419
+ fontSize: 10,
420
+ color: Colors.white
421
+ ),
422
+ ),
423
+ )
424
+ ],
425
+ ),
426
+ );
427
+ }
428
);
429
}
430
}
\ No newline at end of file
res/values/strings_de.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Ausführung ${currentVersion}",
350
351
"openalias_alert_title" : "XMR-Empfänger erkannt",
352
- "openalias_alert_content" : "Sie senden Geld an\n${recipient_name}"
352
+ "openalias_alert_content" : "Sie senden Geld an\n${recipient_name}",
353
+
354
+ "card_address" : "Adresse:"
355
}
\ No newline at end of file
res/values/strings_en.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Version ${currentVersion}",
350
351
"openalias_alert_title" : "XMR Recipient Detected",
352
- "openalias_alert_content" : "You will be sending funds to\n${recipient_name}"
352
+ "openalias_alert_content" : "You will be sending funds to\n${recipient_name}",
353
+
354
+ "card_address" : "Address:"
355
}
\ No newline at end of file
res/values/strings_es.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Versión ${currentVersion}",
350
351
"openalias_alert_title" : "Destinatario XMR detectado",
352
- "openalias_alert_content" : "Enviará fondos a\n${recipient_name}"
352
+ "openalias_alert_content" : "Enviará fondos a\n${recipient_name}",
353
+
354
+ "card_address" : "Dirección:"
355
}
\ No newline at end of file
res/values/strings_hi.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "संस्करण ${currentVersion}",
350
351
"openalias_alert_title" : "XMR प्राप्तकर्ता का पता लगाया",
352
- "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}"
352
+ "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}",
353
+
354
+ "card_address" : "पता:"
355
}
\ No newline at end of file
res/values/strings_ja.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "バージョン ${currentVersion}",
350
351
"openalias_alert_title" : "XMR受信者が検出されました",
352
- "openalias_alert_content" : "に送金します\n${recipient_name}"
352
+ "openalias_alert_content" : "に送金します\n${recipient_name}",
353
+
354
+ "card_address" : "住所:"
355
}
\ No newline at end of file
res/values/strings_ko.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "버전 ${currentVersion}",
350
351
"openalias_alert_title" : "XMR 수신자 감지",
352
- "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}"
352
+ "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}",
353
+
354
+ "card_address" : "주소:"
355
}
\ No newline at end of file
res/values/strings_nl.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Versie ${currentVersion}",
350
351
"openalias_alert_title" : "XMR-ontvanger gedetecteerd",
352
- "openalias_alert_content" : "U stuurt geld naar\n${recipient_name}"
352
+ "openalias_alert_content" : "U stuurt geld naar\n${recipient_name}",
353
+
354
+ "card_address" : "Adres:"
355
}
\ No newline at end of file
res/values/strings_pl.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Wersja ${currentVersion}",
350
351
"openalias_alert_title" : "Wykryto odbiorcę XMR",
352
- "openalias_alert_content" : "Będziesz wysyłać środki na\n${recipient_name}"
352
+ "openalias_alert_content" : "Będziesz wysyłać środki na\n${recipient_name}",
353
+
354
+ "card_address" : "Adres:"
355
}
\ No newline at end of file
res/values/strings_pt.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Versão ${currentVersion}",
350
351
"openalias_alert_title" : "Destinatário XMR detectado",
352
- "openalias_alert_content" : "Você enviará fundos para\n${recipient_name}"
352
+ "openalias_alert_content" : "Você enviará fundos para\n${recipient_name}",
353
+
354
+ "card_address" : "Endereço:"
355
}
res/values/strings_ru.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Версия ${currentVersion}",
350
351
"openalias_alert_title" : "Получатель XMR обнаружен",
352
- "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}"
352
+ "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}",
353
+
354
+ "card_address" : "Адрес:"
355
}
\ No newline at end of file
res/values/strings_uk.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "Версія ${currentVersion}",
350
351
"openalias_alert_title" : "Отримувача XMR виявлено",
352
- "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}"
352
+ "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}",
353
+
354
+ "card_address" : "Адреса:"
355
}
\ No newline at end of file
res/values/strings_zh.arb
+3
-1
@@ -349,5 +349,7 @@
349
"version" : "版 ${currentVersion}",
350
351
"openalias_alert_title" : "檢測到XMR收件人",
352
- "openalias_alert_content" : "您將匯款至\n${recipient_name}"
352
+ "openalias_alert_content" : "您將匯款至\n${recipient_name}",
353
+
354
+ "card_address" : "地址:"
355
}
\ No newline at end of file