Changed restore wallet from seed screen. Added node.imonero.org:18081 to list of default nodes.
M committed
Jan 16, 2020 at 18:05 UTC
6154c6dfa5e3534e1b66b7d9b03be2c03094070a
16 files changed
+313
-165
assets/node_list.yml
+3
@@ -18,4 +18,7 @@
18
is_default: false
19
-
20
uri: opennode.xmr-tw.org:18089
21
+ is_default: false
22
+-
23
+ uri: node.imonero.org:18081
24
is_default: false
\ No newline at end of file
lib/generated/i18n.dart
+63
@@ -286,6 +286,9 @@ class S implements WidgetsLocalizations {
286
String wallet_list_failed_to_remove(String wallet_name, String error) => "Failed to remove ${wallet_name} wallet. ${error}";
287
String wallet_list_loading_wallet(String wallet_name) => "Loading ${wallet_name} wallet";
288
String wallet_list_removing_wallet(String wallet_name) => "Removing ${wallet_name} wallet";
289
+ String get paste => "Paste";
290
+ String get restore_from_seed_placeholder => "Please enter or paste your seed here";
291
+ String get add_new_word => "Add new word";
292
}
293
294
class $de extends S {
@@ -824,6 +827,12 @@ class $de extends S {
827
String wallet_list_failed_to_load(String wallet_name, String error) => "Laden fehlgeschlagen ${wallet_name} Wallet. ${error}";
828
@override
829
String wallet_list_removing_wallet(String wallet_name) => "Entfernen ${wallet_name} Wallet";
830
+ @override
831
+ String get paste => "Einfügen";
832
+ @override
833
+ String get restore_from_seed_placeholder => "Bitte geben Sie hier Ihren Code ein";
834
+ @override
835
+ String get add_new_word => "Neues Wort hinzufügen";
836
}
837
838
class $hi extends S {
@@ -1362,6 +1371,12 @@ class $hi extends S {
1371
String wallet_list_failed_to_load(String wallet_name, String error) => "लोड करने में विफल ${wallet_name} बटुआ. ${error}";
1372
@override
1373
String wallet_list_removing_wallet(String wallet_name) => "निकाला जा रहा है ${wallet_name} बटुआ";
1374
+ @override
1375
+ String get paste => "पेस्ट करें";
1376
+ @override
1377
+ String get restore_from_seed_placeholder => "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें";
1378
+ @override
1379
+ String get add_new_word => "नया शब्द जोड़ें";
1380
}
1381
1382
class $ru extends S {
@@ -1900,6 +1915,12 @@ class $ru extends S {
1915
String wallet_list_failed_to_load(String wallet_name, String error) => "Ошибка при загрузке ${wallet_name} кошелька. ${error}";
1916
@override
1917
String wallet_list_removing_wallet(String wallet_name) => "Удаление ${wallet_name} кошелька";
1918
+ @override
1919
+ String get paste => "Вставить";
1920
+ @override
1921
+ String get restore_from_seed_placeholder => "Введите или вставте код фразу вашего кошелька";
1922
+ @override
1923
+ String get add_new_word => "Добавить новое слово";
1924
}
1925
1926
class $ko extends S {
@@ -2438,6 +2459,12 @@ class $ko extends S {
2459
String wallet_list_failed_to_load(String wallet_name, String error) => "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}";
2460
@override
2461
String wallet_list_removing_wallet(String wallet_name) => "풀이 ${wallet_name} 지갑";
2462
+ @override
2463
+ String get paste => "풀";
2464
+ @override
2465
+ String get restore_from_seed_placeholder => "여기에 코드 문구를 입력하거나 붙여 넣으십시오.";
2466
+ @override
2467
+ String get add_new_word => "새로운 단어 추가";
2468
}
2469
2470
class $pt extends S {
@@ -2976,6 +3003,12 @@ class $pt extends S {
3003
String wallet_list_failed_to_load(String wallet_name, String error) => "Falha ao abrir a carteira ${wallet_name}. ${error}";
3004
@override
3005
String wallet_list_removing_wallet(String wallet_name) => "Removendo a carteira ${wallet_name}";
3006
+ @override
3007
+ String get paste => "Colar";
3008
+ @override
3009
+ String get restore_from_seed_placeholder => "Digite ou cole sua frase de código aqui";
3010
+ @override
3011
+ String get add_new_word => "Adicionar nova palavra";
3012
}
3013
3014
class $ja extends S {
@@ -3514,6 +3547,12 @@ class $ja extends S {
3547
String wallet_list_failed_to_load(String wallet_name, String error) => "読み込みに失敗しました ${wallet_name} 財布. ${error}";
3548
@override
3549
String wallet_list_removing_wallet(String wallet_name) => "取りはずし ${wallet_name} 財布";
3550
+ @override
3551
+ String get paste => "ペースト";
3552
+ @override
3553
+ String get restore_from_seed_placeholder => "ここにコードフレーズを入力または貼り付けてください";
3554
+ @override
3555
+ String get add_new_word => "新しい単語を追加";
3556
}
3557
3558
class $en extends S {
@@ -4056,6 +4095,12 @@ class $pl extends S {
4095
String wallet_list_failed_to_load(String wallet_name, String error) => "Nie udało się załadować ${wallet_name} portfel. ${error}";
4096
@override
4097
String wallet_list_removing_wallet(String wallet_name) => "Usuwanie ${wallet_name} portfel";
4098
+ @override
4099
+ String get paste => "Pasta";
4100
+ @override
4101
+ String get restore_from_seed_placeholder => "Wpisz lub wklej tutaj swoją frazę kodową";
4102
+ @override
4103
+ String get add_new_word => "Dodaj nowe słowo";
4104
}
4105
4106
class $es extends S {
@@ -4594,6 +4639,12 @@ class $es extends S {
4639
String wallet_list_failed_to_load(String wallet_name, String error) => "No se pudo cargar ${wallet_name} la billetera. ${error}";
4640
@override
4641
String wallet_list_removing_wallet(String wallet_name) => "Retirar ${wallet_name} billetera";
4642
+ @override
4643
+ String get paste => "Pegar";
4644
+ @override
4645
+ String get restore_from_seed_placeholder => "Ingrese o pegue su frase de código aquí";
4646
+ @override
4647
+ String get add_new_word => "Agregar palabra nueva";
4648
}
4649
4650
class $nl extends S {
@@ -5132,6 +5183,12 @@ class $nl extends S {
5183
String wallet_list_failed_to_load(String wallet_name, String error) => "Laden mislukt ${wallet_name} portemonnee. ${error}";
5184
@override
5185
String wallet_list_removing_wallet(String wallet_name) => "Verwijderen ${wallet_name} portemonnee";
5186
+ @override
5187
+ String get paste => "Plakken";
5188
+ @override
5189
+ String get restore_from_seed_placeholder => "Voer hier uw codefrase in of plak deze";
5190
+ @override
5191
+ String get add_new_word => "Nieuw woord toevoegen";
5192
}
5193
5194
class $zh extends S {
@@ -5670,6 +5727,12 @@ class $zh extends S {
5727
String wallet_list_failed_to_load(String wallet_name, String error) => "加载失败 ${wallet_name} 钱包. ${error}";
5728
@override
5729
String wallet_list_removing_wallet(String wallet_name) => "拆下 ${wallet_name} 钱包";
5730
+ @override
5731
+ String get paste => "糊";
5732
+ @override
5733
+ String get restore_from_seed_placeholder => "请在此处输入或粘贴您的代码短语";
5734
+ @override
5735
+ String get add_new_word => "添加新词";
5736
}
5737
5738
class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> {
lib/src/screens/restore/restore_wallet_from_seed_page.dart
+22
-38
@@ -6,7 +6,6 @@ import 'package:flutter/services.dart';
6
import 'package:shared_preferences/shared_preferences.dart';
7
import 'package:cake_wallet/routes.dart';
8
import 'package:cake_wallet/generated/i18n.dart';
9
-import 'package:cake_wallet/src/widgets/primary_button.dart';
9
import 'package:cake_wallet/src/domain/services/wallet_list_service.dart';
10
import 'package:cake_wallet/src/domain/services/wallet_service.dart';
11
import 'package:cake_wallet/src/screens/base_page.dart';
@@ -22,15 +21,27 @@ class RestoreWalletFromSeedPage extends BasePage {
21
final WalletListService walletsService;
22
final WalletService walletService;
23
final SharedPreferences sharedPreferences;
24
+ final formKey = GlobalKey<_RestoreFromSeedFormState>();
25
26
@override
27
String get title => S.current.restore_title_from_seed;
28
29
@override
30
- Widget body(BuildContext context) => RestoreFromSeedForm();
30
+ Widget trailing(BuildContext context) => SizedBox(
31
+ width: 80,
32
+ height: 20,
33
+ child: FlatButton(
34
+ child: Text(S.of(context).clear),
35
+ padding: EdgeInsets.all(0),
36
+ onPressed: () => formKey?.currentState?.clear()));
37
+
38
+ @override
39
+ Widget body(BuildContext context) => RestoreFromSeedForm(key: formKey);
40
}
41
42
class RestoreFromSeedForm extends StatefulWidget {
43
+ RestoreFromSeedForm({Key key}) : super(key: key);
44
+
45
@override
46
_RestoreFromSeedFormState createState() => _RestoreFromSeedFormState();
47
}
@@ -39,6 +50,8 @@ class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> {
50
final _seedKey = GlobalKey<SeedWidgetState>();
51
bool _reactionSet = false;
52
53
+ void clear() => _seedKey.currentState.clear();
54
+
55
@override
56
Widget build(BuildContext context) {
57
final walletRestorationStore = Provider.of<WalletRestorationStore>(context);
@@ -50,42 +63,13 @@ class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> {
63
onTap: () =>
64
SystemChannels.textInput.invokeMethod<void>('TextInput.hide'),
65
child: Container(
53
- padding: EdgeInsets.only(left: 20.0, right: 20.0, bottom: 20.0),
54
- child: Column(
55
- children: <Widget>[
56
- Expanded(
57
- child: SeedWidget(
58
- key: _seedKey,
59
- onMnemoticChange: (seed) => walletRestorationStore.setSeed(seed),
60
- )),
61
- Container(
62
- alignment: Alignment.bottomCenter,
63
- child: PrimaryButton(
64
- onPressed: () {
65
- walletRestorationStore.validateSeed(_seedKey.currentState.items);
66
- _seedKey.currentState.setErrorMessage(walletRestorationStore.errorMessage);
67
-
68
- if (!walletRestorationStore.isValid) {
69
- _seedKey.currentState.invalidate();
70
- return;
71
- }
72
-
73
- _seedKey.currentState.validated();
74
-
75
- Navigator.of(context).pushNamed(
76
- Routes.restoreWalletFromSeedDetails,
77
- arguments: _seedKey.currentState.items);
78
- },
79
- text: S.of(context).restore_next,
80
- color: Theme.of(context)
81
- .primaryTextTheme
82
- .button
83
- .backgroundColor,
84
- borderColor: Theme.of(context)
85
- .primaryTextTheme
86
- .button
87
- .decorationColor))
88
- ],
66
+ padding: EdgeInsets.only(left: 20.0, right: 20.0),
67
+ child: SeedWidget(
68
+ key: _seedKey,
69
+ onMnemoticChange: (seed) => walletRestorationStore.setSeed(seed),
70
+ onFinish: () => Navigator.of(context).pushNamed(
71
+ Routes.restoreWalletFromSeedDetails,
72
+ arguments: _seedKey.currentState.items),
73
),
74
),
75
);
lib/src/widgets/primary_button.dart
+7
-4
@@ -7,12 +7,15 @@ class PrimaryButton extends StatelessWidget {
7
{@required this.onPressed,
8
@required this.text,
9
@required this.color,
10
- @required this.borderColor});
10
+ @required this.borderColor,
11
+
12
+ this.isDisabled = false});
13
14
final VoidCallback onPressed;
15
final Color color;
16
final Color borderColor;
17
final String text;
18
+ final bool isDisabled;
19
20
@override
21
Widget build(BuildContext context) {
@@ -20,15 +23,15 @@ class PrimaryButton extends StatelessWidget {
23
minWidth: double.infinity,
24
height: 56.0,
25
child: FlatButton(
23
- onPressed: onPressed,
24
- color: color,
26
+ onPressed: isDisabled ? null : onPressed,
27
+ color: isDisabled ? Colors.grey : color,
28
shape: RoundedRectangleBorder(
29
side: BorderSide(color: borderColor),
30
borderRadius: BorderRadius.circular(10.0)),
31
child: Text(text,
32
style: TextStyle(
33
fontSize: 16.0,
31
- color: Theme.of(context).primaryTextTheme.button.color)),
34
+ color: isDisabled ? Palette.darkGrey : Theme.of(context).primaryTextTheme.button.color)),
35
));
36
}
37
}
lib/src/widgets/seed_widget.dart
+162
-112
@@ -1,3 +1,4 @@
1
+import 'package:cake_wallet/src/widgets/primary_button.dart';
2
import 'package:flutter/cupertino.dart';
3
import 'package:flutter/material.dart';
4
import 'package:flutter/services.dart';
@@ -7,26 +8,35 @@ import 'package:cake_wallet/src/domain/common/mnemotic_item.dart';
8
import 'package:cake_wallet/generated/i18n.dart';
9
10
class SeedWidget extends StatefulWidget {
10
- SeedWidget({Key key, this.onMnemoticChange}) : super(key: key);
11
+ SeedWidget({Key key, this.onMnemoticChange, this.onFinish}) : super(key: key);
12
13
final Function(List<MnemoticItem>) onMnemoticChange;
14
+ final Function() onFinish;
15
16
@override
17
SeedWidgetState createState() => SeedWidgetState();
18
}
19
20
class SeedWidgetState extends State<SeedWidget> {
21
+ static const maxLength = 25;
22
+
23
List<MnemoticItem> items = <MnemoticItem>[];
24
final _seedController = TextEditingController();
25
+ final _seedTextFieldKey = GlobalKey();
26
MnemoticItem selectedItem;
27
bool isValid;
28
String errorMessage;
29
30
+ MnemoticItem currentMnemotic;
31
+ bool isCurrentMnemoticValid;
32
+
33
@override
34
void initState() {
35
super.initState();
28
- isValid = true;
29
- _seedController.addListener(() => mnemoticFromText(_seedController.text));
36
+ isValid = false;
37
+ isCurrentMnemoticValid = false;
38
+ _seedController
39
+ .addListener(() => changeCurrentMnemotic(_seedController.text));
40
}
41
42
void addMnemotic(String text) {
@@ -66,10 +76,14 @@ class SeedWidgetState extends State<SeedWidget> {
76
}
77
78
void selectMnemotic(MnemoticItem item) {
69
- setState(() => selectedItem = item);
70
- _seedController
71
- ..text = item.text
72
- ..selection = TextSelection.collapsed(offset: item.text.length);
79
+ setState(() {
80
+ selectedItem = item;
81
+ currentMnemotic = item;
82
+
83
+ _seedController
84
+ ..text = item.text
85
+ ..selection = TextSelection.collapsed(offset: item.text.length);
86
+ });
87
}
88
89
void onMnemoticTap(MnemoticItem item) {
@@ -107,6 +121,7 @@ class SeedWidgetState extends State<SeedWidget> {
121
void clear() {
122
setState(() {
123
items = [];
124
+ selectedItem = null;
125
_seedController.text = '';
126
127
if (widget.onMnemoticChange != null) {
@@ -132,119 +147,154 @@ class SeedWidgetState extends State<SeedWidget> {
147
mnemoticFromText(text);
148
}
149
150
+ void changeCurrentMnemotic(String text) {
151
+ setState(() {
152
+ if (text == null) {
153
+ currentMnemotic = null;
154
+ isCurrentMnemoticValid = false;
155
+ return;
156
+ }
157
+
158
+ currentMnemotic = MnemoticItem(text: text, dic: EnglishMnemonics.words);
159
+ isCurrentMnemoticValid = currentMnemotic.isCorrect();
160
+ });
161
+ }
162
+
163
+ void saveCurrentMnemoticToItems() {
164
+ setState(() {
165
+ if (selectedItem != null) {
166
+ selectedItem.changeText(currentMnemotic.text);
167
+ selectedItem = null;
168
+ } else {
169
+ items.add(currentMnemotic);
170
+ }
171
+
172
+ currentMnemotic = null;
173
+ _seedController.text = '';
174
+ });
175
+ }
176
+
177
@override
178
Widget build(BuildContext context) {
179
return Container(
180
child: Column(children: [
139
- TextFormField(
140
- onFieldSubmitted: (text) => onFieldSubmitted(text),
141
- style: TextStyle(fontSize: 14.0),
142
- controller: _seedController,
143
- textInputAction: TextInputAction.done,
144
- decoration: InputDecoration(
145
- suffixIcon: GestureDetector(
146
- behavior: HitTestBehavior.opaque,
147
- child: SizedBox(
148
- width: 65,
149
- child: Row(
150
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
151
- children: <Widget>[
152
- InkWell(
153
- onTap: () {
154
- clear();
155
- FocusScope.of(context).unfocus();
156
- },
157
- child: Container(
158
- height: 20,
159
- width: 20,
160
- padding: EdgeInsets.all(3),
161
- decoration: BoxDecoration(
162
- color: Palette.wildDarkBlueWithOpacity,
163
- borderRadius: BorderRadius.circular(10.0)),
164
- child: Image.asset(
165
- 'assets/images/x.png',
166
- color: Palette.wildDarkBlue,
167
- ),
168
- ),
169
- ),
170
- InkWell(
171
- onTap: () async => Clipboard.getData('text/plain')
172
- .then((clipboard) => replaceText(clipboard.text)),
173
- child: Container(
174
- height: 35,
175
- width: 35,
176
- padding: EdgeInsets.all(7),
177
- decoration: BoxDecoration(
178
- color: Palette.wildDarkBlueWithOpacity,
179
- borderRadius: BorderRadius.circular(10.0)),
180
- child: Image.asset('assets/images/paste_button.png',
181
- height: 5, width: 5, color: Palette.wildDarkBlue),
182
- ),
183
- )
184
- ],
185
- ),
186
- ),
187
- ),
188
- errorText: errorMessage,
189
- hintStyle: TextStyle(color: Theme.of(context).hintColor),
190
- hintText: S.of(context).widgets_seed,
191
- focusedBorder: UnderlineInputBorder(
192
- borderSide: BorderSide(color: Palette.cakeGreen, width: 2.0)),
193
- enabledBorder: UnderlineInputBorder(
194
- borderSide: BorderSide(
195
- color:
196
- isValid ? Theme.of(context).focusColor : Palette.red,
197
- width: 1.0))),
198
- ),
199
- SizedBox(height: 20),
200
- Expanded(
201
- child: GridView.count(
202
- physics: NeverScrollableScrollPhysics(),
203
- crossAxisCount: 3,
204
- childAspectRatio: 3.3,
205
- mainAxisSpacing: 10,
206
- crossAxisSpacing: 10,
207
- children: List.generate(items.length, (index) {
208
- final item = items[index];
209
- final isValid = item.isCorrect();
210
- final isSelected = selectedItem == item;
211
-
212
- return InkWell(
213
- onTap: () => onMnemoticTap(item),
214
- child: Container(
215
- decoration: BoxDecoration(
216
- color: isValid ? Palette.brightBlue : Palette.red,
217
- border: Border.all(
218
- color:
219
- isSelected ? Palette.violet : Colors.transparent),
220
- borderRadius: BorderRadius.circular(15.0)),
221
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
222
- child: Row(
223
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
224
- children: [
225
- Text(
181
+ Flexible(
182
+ fit: FlexFit.tight,
183
+ flex: 6,
184
+ child: SingleChildScrollView(
185
+ child: Wrap(
186
+ children: items.map((item) {
187
+ final isValid = item.isCorrect();
188
+ final isSelected = selectedItem == item;
189
+
190
+ return InkWell(
191
+ onTap: () => onMnemoticTap(item),
192
+ child: Container(
193
+ decoration: BoxDecoration(
194
+ color: isValid ? Colors.transparent : Palette.red),
195
+ margin: EdgeInsets.only(right: 7, bottom: 8),
196
+ child: Text(
197
item.toString(),
198
style: TextStyle(
199
color:
200
isValid ? Palette.blueGrey : Palette.lightGrey,
230
- fontSize: 12,
231
- fontWeight: FontWeight.w600),
232
- ),
233
- InkWell(
234
- onTap: () => deleteMnemotic(item),
235
- child: Image.asset(
236
- 'assets/images/x.png',
237
- height: 15,
238
- width: 15,
239
- color: Palette.wildDarkBlue,
240
- ))
241
- ],
242
- ),
243
- ),
244
- );
245
- }),
246
- ),
247
- ),
201
+ fontSize: 18,
202
+ fontWeight:
203
+ isSelected ? FontWeight.w900 : FontWeight.w400,
204
+ decoration: isSelected
205
+ ? TextDecoration.underline
206
+ : TextDecoration.none),
207
+ )),
208
+ );
209
+ }).toList()),
210
+ )),
211
+ Flexible(
212
+ fit: FlexFit.tight,
213
+ flex: 8,
214
+ child: Column(
215
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
216
+ children: <Widget>[
217
+ Column(children: <Widget>[
218
+ TextFormField(
219
+ key: _seedTextFieldKey,
220
+ onFieldSubmitted: (text) => isCurrentMnemoticValid
221
+ ? saveCurrentMnemoticToItems()
222
+ : null,
223
+ style: TextStyle(fontSize: 14.0),
224
+ controller: _seedController,
225
+ textInputAction: TextInputAction.done,
226
+ decoration: InputDecoration(
227
+ suffixIcon: GestureDetector(
228
+ behavior: HitTestBehavior.opaque,
229
+ child: ConstrainedBox(
230
+ constraints: BoxConstraints(maxWidth: 145),
231
+ child: Row(
232
+ mainAxisAlignment: MainAxisAlignment.end,
233
+ children: <Widget>[
234
+ Text(
235
+ '${items.length}/${SeedWidgetState.maxLength}',
236
+ style: TextStyle(
237
+ color: Colors.grey, fontSize: 12)),
238
+ SizedBox(width: 10),
239
+ InkWell(
240
+ onTap: () async =>
241
+ Clipboard.getData('text/plain').then(
242
+ (clipboard) =>
243
+ replaceText(clipboard.text)),
244
+ child: Container(
245
+ height: 35,
246
+ padding: EdgeInsets.all(7),
247
+ decoration: BoxDecoration(
248
+ color:
249
+ Palette.wildDarkBlueWithOpacity,
250
+ borderRadius:
251
+ BorderRadius.circular(10.0)),
252
+ child: Text(S.of(context).paste)),
253
+ )
254
+ ],
255
+ ),
256
+ ),
257
+ ),
258
+ hintStyle:
259
+ TextStyle(color: Theme.of(context).hintColor),
260
+ hintText: S.of(context).restore_from_seed_placeholder,
261
+ focusedBorder: UnderlineInputBorder(
262
+ borderSide: BorderSide(
263
+ color: Palette.cakeGreen, width: 2.0)),
264
+ enabledBorder: UnderlineInputBorder(
265
+ borderSide: BorderSide(
266
+ color: Theme.of(context).focusColor,
267
+ width: 1.0))),
268
+ enableInteractiveSelection: false,
269
+ ),
270
+ ]),
271
+ Padding(
272
+ padding: EdgeInsets.only(bottom: 20),
273
+ child: (selectedItem == null && items.length == maxLength)
274
+ ? PrimaryButton(
275
+ text: S.of(context).restore_next,
276
+ onPressed: () => widget.onFinish != null
277
+ ? widget.onFinish()
278
+ : null,
279
+ color: Theme.of(context)
280
+ .primaryTextTheme
281
+ .button
282
+ .backgroundColor,
283
+ borderColor: Theme.of(context)
284
+ .primaryTextTheme
285
+ .button
286
+ .decorationColor)
287
+ : PrimaryButton(
288
+ text: selectedItem != null
289
+ ? S.of(context).save
290
+ : S.of(context).add_new_word,
291
+ onPressed: () => isCurrentMnemoticValid
292
+ ? saveCurrentMnemoticToItems()
293
+ : null,
294
+ isDisabled: !isCurrentMnemoticValid,
295
+ color: PaletteDark.darkThemeBlueButton,
296
+ borderColor: Palette.brightBlue))
297
+ ]))
298
]),
299
);
300
}
res/values/strings_de.arb
+6
-1
@@ -331,4 +331,9 @@
331
"trade_state_finished" : "Fertig",
332
333
"change_language" : "Sprache ändern",
334
- "change_language_to" : "Ändern Sie die Sprache in ${language}?"}
\ No newline at end of file
334
+ "change_language_to" : "Ändern Sie die Sprache in ${language}?",
335
+
336
+ "paste" : "Einfügen",
337
+ "restore_from_seed_placeholder" : "Bitte geben Sie hier Ihren Code ein",
338
+ "add_new_word" : "Neues Wort hinzufügen"
339
+}
\ No newline at end of file
res/values/strings_en.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Finished",
332
333
"change_language" : "Change language",
334
- "change_language_to" : "Change language to ${language}?"
334
+ "change_language_to" : "Change language to ${language}?",
335
+
336
+ "paste" : ""paste"",
337
+ "restore_from_seed_placeholder" : "Please enter or "paste" your seed here",
338
+ "add_new_word" : "Add new word"
339
}
\ No newline at end of file
res/values/strings_es.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Terminado",
332
333
"change_language" : "Cambiar idioma",
334
- "change_language_to" : "Cambiar el idioma a ${language}?"
334
+ "change_language_to" : "Cambiar el idioma a ${language}?",
335
+
336
+ "paste" : "Pegar",
337
+ "restore_from_seed_placeholder" : "Ingrese o pegue su frase de código aquí",
338
+ "add_new_word" : "Agregar palabra nueva"
339
}
\ No newline at end of file
res/values/strings_hi.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "ख़त्म होना",
332
333
"change_language" : "भाषा बदलो",
334
- "change_language_to" : "को भाषा बदलें ${language}?"
334
+ "change_language_to" : "को भाषा बदलें ${language}?",
335
+
336
+ "paste" : "पेस्ट करें",
337
+ "restore_from_seed_placeholder" : "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें",
338
+ "add_new_word" : "नया शब्द जोड़ें"
339
}
\ No newline at end of file
res/values/strings_ja.arb
+6
-1
@@ -331,5 +331,10 @@
331
"trade_state_finished" : "完成した",
332
333
"change_language" : "言語を変えてください",
334
- "change_language_to" : "言語を変更 ${language}?"
334
+ "change_language_to" : "言語を変更 ${language}?",
335
+
336
+ "paste" : "ペースト",
337
+ "restore_from_seed_placeholder" : "ここにコードフレーズを入力または貼り付けてください",
338
+ "add_new_word" : "新しい単語を追加",
339
+ "add_new_word" : "새로운 단어 추가"
340
}
\ No newline at end of file
res/values/strings_ko.arb
+4
-1
@@ -331,5 +331,8 @@
331
"trade_state_finished" : "끝마친",
332
333
"change_language" : "언어 변경",
334
- "change_language_to" : "언어를로 변경 ${language}?"
334
+ "change_language_to" : "언어를로 변경 ${language}?",
335
+
336
+ "paste" : "풀",
337
+ "restore_from_seed_placeholder" : "여기에 코드 문구를 입력하거나 붙여 넣으십시오."
338
}
\ No newline at end of file
res/values/strings_nl.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Afgewerkt",
332
333
"change_language" : "Verander de taal",
334
- "change_language_to" : "Verander de taal in ${language}?"
334
+ "change_language_to" : "Verander de taal in ${language}?",
335
+
336
+ "paste" : "Plakken",
337
+ "restore_from_seed_placeholder" : "Voer hier uw codefrase in of plak deze",
338
+ "add_new_word" : "Nieuw woord toevoegen"
339
}
\ No newline at end of file
res/values/strings_pl.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Skończone",
332
333
"change_language" : "Zmień język",
334
- "change_language_to" : "Zmień język na ${language}?"
334
+ "change_language_to" : "Zmień język na ${language}?",
335
+
336
+ "paste" : "Pasta",
337
+ "restore_from_seed_placeholder" : "Wpisz lub wklej tutaj swoją frazę kodową",
338
+ "add_new_word" : "Dodaj nowe słowo"
339
}
\ No newline at end of file
res/values/strings_pt.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Finalizada",
332
333
"change_language" : "Mudar idioma",
334
- "change_language_to" : "Alterar idioma para ${language}?"
334
+ "change_language_to" : "Alterar idioma para ${language}?",
335
+
336
+ "paste" : "Colar",
337
+ "restore_from_seed_placeholder" : "Digite ou cole sua frase de código aqui",
338
+ "add_new_word" : "Adicionar nova palavra"
339
}
res/values/strings_ru.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "Окончено",
332
333
"change_language" : "Изменить язык",
334
- "change_language_to" : "Изменить язык на ${language}?"
334
+ "change_language_to" : "Изменить язык на ${language}?",
335
+
336
+ "paste" : "Вставить",
337
+ "restore_from_seed_placeholder" : "Введите или вставте код фразу вашего кошелька",
338
+ "add_new_word" : "Добавить новое слово"
339
}
\ No newline at end of file
res/values/strings_zh.arb
+5
-1
@@ -331,5 +331,9 @@
331
"trade_state_finished" : "已完成",
332
333
"change_language" : "改變語言",
334
- "change_language_to" : "將語言更改為 ${language}?"
334
+ "change_language_to" : "將語言更改為 ${language}?",
335
+
336
+ "paste" : "糊",
337
+ "restore_from_seed_placeholder" : "请在此处输入或粘贴您的代码短语",
338
+ "add_new_word" : "添加新词"
339
}
\ No newline at end of file