Verify seed phrase (#1700)
* add confirm passphrase field and show/hide passphrase feature * change error message allow force appending translation to overwrite * minor fix for showing frozen balance correctly [skip ci] * remove debug prints [skip ci]
Omar Hatem committed
Sep 26, 2024 at 04:51 UTC
11584844d55892f31cedf303a919c1991a93bd3e
36 files changed
+155
-55
cw_bitcoin/lib/electrum_transaction_info.dart
+1
-1
@@ -35,7 +35,7 @@ class ElectrumTransactionInfo extends TransactionInfo {
35
List<String>? outputAddresses,
36
required TransactionDirection direction,
37
required bool isPending,
38
- required bool isReplaced,
38
+ bool isReplaced = false,
39
required DateTime date,
40
required int confirmations,
41
String? to,
cw_bitcoin/lib/electrum_wallet.dart
+12
@@ -1902,6 +1902,18 @@ abstract class ElectrumWalletBase
1902
var totalConfirmed = 0;
1903
var totalUnconfirmed = 0;
1904
1905
+ unspentCoinsInfo.values.forEach((info) {
1906
+ unspentCoins.forEach((element) {
1907
+ if (element.hash == info.hash &&
1908
+ element.vout == info.vout &&
1909
+ info.isFrozen &&
1910
+ element.bitcoinAddressRecord.address == info.address &&
1911
+ element.value == info.value) {
1912
+ totalFrozen += element.value;
1913
+ }
1914
+ });
1915
+ });
1916
+
1917
if (hasSilentPaymentsScanning) {
1918
// Add values from unspent coins that are not fetched by the address list
1919
// i.e. scanned silent payments
cw_bitcoin/pubspec.lock
+10
-10
@@ -29,10 +29,10 @@ packages:
29
dependency: transitive
30
description:
31
name: asn1lib
32
- sha256: "58082b3f0dca697204dbab0ef9ff208bfaea7767ea771076af9a343488428dda"
32
+ sha256: "6b151826fcc95ff246cd219a0bf4c753ea14f4081ad71c61939becf3aba27f70"
33
url: "https://pub.dev"
34
source: hosted
35
- version: "1.5.3"
35
+ version: "1.5.5"
36
async:
37
dependency: transitive
38
description:
@@ -71,7 +71,7 @@ packages:
71
description:
72
path: "."
73
ref: cake-update-v7
74
- resolved-ref: bc49e3b1cba601828f8ddc3d016188d8c2499088
74
+ resolved-ref: f577e83fe78766b2655ea0602baa9299b953a31b
75
url: "https://github.com/cake-tech/bitcoin_base"
76
source: git
77
version: "4.7.0"
@@ -296,10 +296,10 @@ packages:
296
dependency: transitive
297
description:
298
name: ffi
299
- sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
299
+ sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
300
url: "https://pub.dev"
301
source: hosted
302
- version: "2.1.2"
302
+ version: "2.1.3"
303
ffigen:
304
dependency: transitive
305
description:
@@ -553,10 +553,10 @@ packages:
553
dependency: transitive
554
description:
555
name: mime
556
- sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
556
+ sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
557
url: "https://pub.dev"
558
source: hosted
559
- version: "1.0.5"
559
+ version: "1.0.6"
560
mobx:
561
dependency: "direct main"
562
description:
@@ -713,10 +713,10 @@ packages:
713
dependency: transitive
714
description:
715
name: quiver
716
- sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47
716
+ sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2
717
url: "https://pub.dev"
718
source: hosted
719
- version: "3.2.1"
719
+ version: "3.2.2"
720
reactive_ble_mobile:
721
dependency: transitive
722
description:
@@ -855,7 +855,7 @@ packages:
855
description:
856
path: "."
857
ref: "sp_v4.0.0"
858
- resolved-ref: "9b04f4b0af80dd7dae9274b496a53c23dcc80ea5"
858
+ resolved-ref: ca1add293bd1e06920aa049b655832da50d0dab2
859
url: "https://github.com/cake-tech/sp_scanner"
860
source: git
861
version: "0.0.1"
lib/src/screens/new_wallet/advanced_privacy_settings_page.dart
+53
-23
@@ -85,7 +85,9 @@ class _AdvancedPrivacySettingsBody extends StatefulWidget {
85
86
class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBody> {
87
final TextEditingController passphraseController = TextEditingController();
88
+ final TextEditingController confirmPassphraseController = TextEditingController();
89
final _formKey = GlobalKey<FormState>();
90
+ final _passphraseFormKey = GlobalKey<FormState>();
91
bool? testnetValue;
92
93
bool obscurePassphrase = true;
@@ -93,9 +95,7 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
95
@override
96
void initState() {
97
passphraseController.text = widget.seedTypeViewModel.passphrase ?? '';
96
-
97
- passphraseController
98
- .addListener(() => widget.seedTypeViewModel.setPassphrase(passphraseController.text));
98
+ confirmPassphraseController.text = widget.seedTypeViewModel.passphrase ?? '';
99
100
if (widget.isChildWallet) {
101
if (widget.privacySettingsViewModel.type == WalletType.bitcoin) {
@@ -205,18 +205,47 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
205
if (widget.privacySettingsViewModel.hasPassphraseOption)
206
Padding(
207
padding: EdgeInsets.all(24),
208
- child: BaseTextFormField(
209
- hintText: S.current.passphrase,
210
- controller: passphraseController,
211
- obscureText: obscurePassphrase,
212
- suffixIcon: GestureDetector(
213
- onTap: () => setState(() {
214
- obscurePassphrase = !obscurePassphrase;
215
- }),
216
- child: Icon(
217
- Icons.remove_red_eye,
218
- color: obscurePassphrase ? Colors.black54 : Colors.black26,
219
- ),
208
+ child: Form(
209
+ key: _passphraseFormKey,
210
+ child: Column(
211
+ children: [
212
+ BaseTextFormField(
213
+ hintText: S.of(context).passphrase,
214
+ controller: passphraseController,
215
+ obscureText: obscurePassphrase,
216
+ suffixIcon: GestureDetector(
217
+ onTap: () => setState(() {
218
+ obscurePassphrase = !obscurePassphrase;
219
+ }),
220
+ child: Icon(
221
+ Icons.remove_red_eye,
222
+ color: obscurePassphrase ? Colors.black54 : Colors.black26,
223
+ ),
224
+ ),
225
+ ),
226
+ const SizedBox(height: 10),
227
+ BaseTextFormField(
228
+ hintText: S.of(context).confirm_passphrase,
229
+ controller: confirmPassphraseController,
230
+ obscureText: obscurePassphrase,
231
+ validator: (text) {
232
+ if (text == passphraseController.text) {
233
+ return null;
234
+ }
235
+
236
+ return S.of(context).passphrases_doesnt_match;
237
+ },
238
+ suffixIcon: GestureDetector(
239
+ onTap: () => setState(() {
240
+ obscurePassphrase = !obscurePassphrase;
241
+ }),
242
+ child: Icon(
243
+ Icons.remove_red_eye,
244
+ color: obscurePassphrase ? Colors.black54 : Colors.black26,
245
+ ),
246
+ ),
247
+ ),
248
+ ],
249
),
250
),
251
),
@@ -272,7 +301,8 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
301
}
302
303
widget.nodeViewModel.save();
275
- } else if (testnetValue == true) {
304
+ }
305
+ if (testnetValue == true) {
306
// TODO: add type (mainnet/testnet) to Node class so when switching wallets the node can be switched to a matching type
307
// Currently this is so you can create a working testnet wallet but you need to keep switching back the node if you use multiple wallets at once
308
widget.nodeViewModel.address = publicBitcoinTestnetElectrumAddress;
@@ -280,6 +310,13 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
310
311
widget.nodeViewModel.save();
312
}
313
+ if (passphraseController.text.isNotEmpty) {
314
+ if (_passphraseFormKey.currentState != null && !_passphraseFormKey.currentState!.validate()) {
315
+ return;
316
+ }
317
+
318
+ widget.seedTypeViewModel.setPassphrase(passphraseController.text);
319
+ }
320
321
Navigator.pop(context);
322
},
@@ -318,11 +355,4 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
355
);
356
});
357
}
321
-
322
- @override
323
- void dispose() {
324
- passphraseController
325
- .removeListener(() => widget.seedTypeViewModel.setPassphrase(passphraseController.text));
326
- super.dispose();
327
- }
358
}
lib/src/screens/restore/wallet_restore_from_seed_form.dart
+12
-1
@@ -78,6 +78,8 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
78
void Function()? repeatedPasswordListener;
79
void Function()? passphraseListener;
80
81
+ bool obscurePassphrase = true;
82
+
83
@override
84
void initState() {
85
_setSeedType(widget.seedSettingsViewModel.moneroSeedType);
@@ -283,7 +285,16 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
285
BaseTextFormField(
286
hintText: S.current.passphrase,
287
controller: passphraseController,
286
- obscureText: true,
288
+ obscureText: obscurePassphrase,
289
+ suffixIcon: GestureDetector(
290
+ onTap: () => setState(() {
291
+ obscurePassphrase = !obscurePassphrase;
292
+ }),
293
+ child: Icon(
294
+ Icons.remove_red_eye,
295
+ color: obscurePassphrase ? Colors.black54 : Colors.black26,
296
+ ),
297
+ ),
298
),
299
]
300
]));
lib/view_model/dashboard/home_settings_view_model.dart
+2
-12
@@ -151,34 +151,24 @@ abstract class HomeSettingsViewModelBase with Store {
151
152
bool isEthereum = _balanceViewModel.wallet.type == WalletType.ethereum;
153
154
- print('An extra log for now');
155
-
154
bool isPotentialScamViaMoralis = await _isPotentialScamTokenViaMoralis(
155
contractAddress,
156
isEthereum ? 'eth' : 'polygon',
157
);
158
161
- print('Is Potential Scam from Moralis: $isPotentialScamViaMoralis');
162
-
159
bool isPotentialScamViaExplorers = await _isPotentialScamTokenViaExplorers(
160
contractAddress,
161
isEthereum: isEthereum,
162
);
163
168
- print('Is Potential Scam from Explorers: $isPotentialScamViaExplorers');
169
-
164
bool isUnverifiedContract = await _isContractUnverified(
165
contractAddress,
166
isEthereum: isEthereum,
167
);
168
175
- print('Is Unverified Contract: $isUnverifiedContract');
176
-
169
final showWarningForContractAddress =
170
isPotentialScamViaMoralis || isUnverifiedContract || isPotentialScamViaExplorers;
171
180
- print('Show Warning: $showWarningForContractAddress');
181
-
172
return showWarningForContractAddress;
173
} finally {
174
isValidatingContractAddress = false;
@@ -272,8 +262,8 @@ abstract class HomeSettingsViewModelBase with Store {
262
final decodedResponse = jsonDecode(response.body) as Map<String, dynamic>;
263
264
if (decodedResponse['status'] != '1') {
275
- print('${response.body}\n');
276
- print('${decodedResponse['result']}\n');
265
+ log('${response.body}\n');
266
+ log('${decodedResponse['result']}\n');
267
return true;
268
}
269
res/values/strings_ar.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "سيؤدي هذا الإجراء إلى حذف هذه المحفظة. هل ترغب في الاستمرار؟",
144
"confirm_fee_deduction": "تأكيد خصم الرسوم",
145
"confirm_fee_deduction_content": "هل توافق على خصم الرسوم من الإخراج؟",
146
+ "confirm_passphrase": "تأكيد عبارة المرور",
147
"confirm_sending": "تأكيد الإرسال",
148
"confirm_silent_payments_switch_node": "العقدة الحالية لا تدعم المدفوعات الصامتة \\ ncake wallet سوف تتحول إلى عقدة متوافقة ، فقط للمسح الضوئي",
149
"confirmations": "التأكيدات",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "تغير المبلغ",
453
"pairingInvalidEvent": "ﺢﻟﺎﺻ ﺮﻴﻏ ﺙﺪﺣ ﻥﺍﺮﻗﺇ",
454
"passphrase": "عبارة الممر (اختياري)",
455
+ "passphrases_doesnt_match": "لا تتطابق عبارات المرور ، يرجى المحاولة مرة أخرى",
456
"password": "كلمة المرور",
457
"paste": "لصق",
458
"pause_wallet_creation": ".ﺎﻴًﻟﺎﺣ ﺎﺘًﻗﺆﻣ ﺔﻔﻗﻮﺘﻣ Haven Wallet ءﺎﺸﻧﺇ ﻰﻠﻋ ﺓﺭﺪﻘﻟﺍ",
res/values/strings_bg.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Този портфейл ще бъде изтрит. Искате ли да продължите?",
144
"confirm_fee_deduction": "Потвърдете приспадането на таксите",
145
"confirm_fee_deduction_content": "Съгласни ли сте да приспадате таксата от продукцията?",
146
+ "confirm_passphrase": "Потвърдете парола",
147
"confirm_sending": "Потвърждаване на изпращането",
148
"confirm_silent_payments_switch_node": "Текущият ви възел не поддържа Silent Payments \\ Ncake Wallet ще премине към съвместим възел, само за сканиране",
149
"confirmations": "потвърждения",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Промени сума",
453
"pairingInvalidEvent": "Невалидно събитие при сдвояване",
454
"passphrase": "Passphrase (по избор)",
455
+ "passphrases_doesnt_match": "Пасифрази не съвпадат, моля, опитайте отново",
456
"password": "Парола",
457
"paste": "Поставяне",
458
"pause_wallet_creation": "Възможността за създаване на Haven Wallet в момента е на пауза.",
res/values/strings_cs.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Tato akce smaže tuto peněženku. Přejete si pokračovat?",
144
"confirm_fee_deduction": "Potvrďte odpočet poplatků",
145
"confirm_fee_deduction_content": "Souhlasíte s odečtením poplatku z výstupu?",
146
+ "confirm_passphrase": "Potvrďte přístupovou frázi",
147
"confirm_sending": "Potvrdit odeslání",
148
"confirm_silent_payments_switch_node": "Váš aktuální uzel nepodporuje tiché platby \\ Ncake peněženka se přepne na kompatibilní uzel, pouze pro skenování",
149
"confirmations": "Potvrzení",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Přepsat částku",
453
"pairingInvalidEvent": "Neplatná událost párování",
454
"passphrase": "Passphrase (volitelné)",
455
+ "passphrases_doesnt_match": "Passfrázy se neshodují, zkuste to znovu",
456
"password": "Heslo",
457
"paste": "Vložit",
458
"pause_wallet_creation": "Možnost vytvářet Haven Wallet je momentálně pozastavena.",
res/values/strings_de.arb
+3
-1
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Diese Aktion löscht diese Wallet. Möchten Sie fortfahren?",
144
"confirm_fee_deduction": "Gebührenabzug bestätigen",
145
"confirm_fee_deduction_content": "Stimmen Sie zu, die Gebühr von der Ausgabe abzuziehen?",
146
+ "confirm_passphrase": "Passphrase bestätigen",
147
"confirm_sending": "Senden bestätigen",
148
"confirm_silent_payments_switch_node": "Ihr aktueller Knoten unterstützt keine stillen Zahlungen \\ NCAKE Wallet wechselt zu einem kompatiblen Knoten, nur zum Scannen",
149
"confirmations": "Bestätigungen",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Paarung ungültiges Ereignis",
454
"passphrase": "Passphrase (optional)",
455
+ "passphrases_doesnt_match": "Passphrasen stimmen nicht überein, bitte versuchen Sie es erneut",
456
"password": "Passwort",
457
"paste": "Einfügen",
458
"pause_wallet_creation": "Die Möglichkeit, Haven Wallet zu erstellen, ist derzeit pausiert.",
@@ -465,8 +467,8 @@
467
"placeholder_transactions": "Ihre Transaktionen werden hier angezeigt",
468
"please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist",
469
"please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.",
468
- "Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
470
"please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
471
+ "Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
472
"please_select": "Bitte auswählen:",
473
"please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.",
474
"please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden",
res/values/strings_en.arb
+3
-1
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "This action will delete this wallet. Do you wish to continue?",
144
"confirm_fee_deduction": "Confirm Fee Deduction",
145
"confirm_fee_deduction_content": "Do you agree to deduct the fee from the output?",
146
+ "confirm_passphrase": "Confirm passphrase",
147
"confirm_sending": "Confirm sending",
148
"confirm_silent_payments_switch_node": "Your current node does not support silent payments\\nCake Wallet will switch to a compatible node, just for scanning",
149
"confirmations": "Confirmations",
@@ -297,8 +298,8 @@
298
"failed_authentication": "Failed authentication. ${state_error}",
299
"faq": "FAQ",
300
"features": "Features",
300
- "fee_rate": "Fee rate",
301
"fee_less_than_min": "Selected Fee is less than the minimum, please increase the fees to be able to send the transaction",
302
+ "fee_rate": "Fee rate",
303
"fetching": "Fetching",
304
"fiat_api": "Fiat API",
305
"fiat_balance": "Fiat Balance",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Pairing Invalid Event",
454
"passphrase": "Passphrase (Optional)",
455
+ "passphrases_doesnt_match": "Passphrases do not match, please try again",
456
"password": "Password",
457
"paste": "Paste",
458
"pause_wallet_creation": "Ability to create Haven Wallet is currently paused.",
res/values/strings_es.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Esta acción eliminará esta billetera. ¿Desea continuar?",
144
"confirm_fee_deduction": "Confirmar la deducción de la tarifa",
145
"confirm_fee_deduction_content": "¿Acepta deducir la tarifa de la producción?",
146
+ "confirm_passphrase": "Confirmar la frase de pases",
147
"confirm_sending": "Confirmar envío",
148
"confirm_silent_payments_switch_node": "Su nodo actual no admite pagos silenciosos \\ ncake billet cambiará a un nodo compatible, solo para escanear",
149
"confirmations": "Confirmaciones",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Evento de emparejamiento no válido",
454
"passphrase": "Passfrase (opcional)",
455
+ "passphrases_doesnt_match": "Las frases de contrato no coinciden, intente nuevamente",
456
"password": "Contraseña",
457
"paste": "Pegar",
458
"pause_wallet_creation": "La capacidad para crear Haven Wallet está actualmente pausada.",
res/values/strings_fr.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Cette action va supprimer ce portefeuille (wallet). Souhaitez-vous contnuer ?",
144
"confirm_fee_deduction": "Confirmer la déduction des frais",
145
"confirm_fee_deduction_content": "Acceptez-vous de déduire les frais de la production?",
146
+ "confirm_passphrase": "Confirmer la phrase passante",
147
"confirm_sending": "Confirmer l'envoi",
148
"confirm_silent_payments_switch_node": "Votre nœud actuel ne prend pas en charge les paiements silencieux \\ ncake qui passera à un nœud compatible, juste pour la numérisation",
149
"confirmations": "Confirmations",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Remplacer le montant",
453
"pairingInvalidEvent": "Événement de couplage non valide",
454
"passphrase": "Phrase de passe (facultative)",
455
+ "passphrases_doesnt_match": "Les phrases de passe ne correspondent pas, veuillez réessayer",
456
"password": "Mot de passe",
457
"paste": "Coller",
458
"pause_wallet_creation": "La possibilité de créer Haven Wallet est actuellement suspendue.",
res/values/strings_ha.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Wannan aikin zai share wannan walat. Kuna so ku ci gaba?",
144
"confirm_fee_deduction": "Tabbatar da cire kudade",
145
"confirm_fee_deduction_content": "Shin kun yarda ku cire kuɗin daga fitarwa?",
146
+ "confirm_passphrase": "Tabbatar da kalmar wucewa",
147
"confirm_sending": "Tabbatar da aikawa",
148
"confirm_silent_payments_switch_node": "Kumburinku na yanzu ba ya goyan bayan biyan shiru da shiru \\ NCADA Wallet zai canza zuwa kumburi mai dacewa, don bincika",
149
"confirmations": "Tabbatar",
@@ -453,6 +454,7 @@
454
"overwrite_amount": "Rubuta adadin",
455
"pairingInvalidEvent": "Haɗa Lamarin mara inganci",
456
"passphrase": "Passphrase (Zabi)",
457
+ "passphrases_doesnt_match": "Passphrases bai dace ba, don Allah sake gwadawa",
458
"password": "Kalmar wucewa",
459
"paste": "Manna",
460
"pause_wallet_creation": "A halin yanzu an dakatar da ikon ƙirƙirar Haven Wallet.",
res/values/strings_hi.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?",
144
"confirm_fee_deduction": "शुल्क कटौती की पुष्टि करें",
145
"confirm_fee_deduction_content": "क्या आप आउटपुट से शुल्क में कटौती करने के लिए सहमत हैं?",
146
+ "confirm_passphrase": "पासफ़्रेज़ की पुष्टि करें",
147
"confirm_sending": "भेजने की पुष्टि करें",
148
"confirm_silent_payments_switch_node": "आपका वर्तमान नोड मूक भुगतान का समर्थन नहीं करता है \\ ncake वॉलेट एक संगत नोड पर स्विच करेगा, बस स्कैनिंग के लिए",
149
"confirmations": "पुष्टिकरण",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "अमान्य ईवेंट युग्मित करना",
454
"passphrase": "पासफ्रेज़ (वैकल्पिक)",
455
+ "passphrases_doesnt_match": "PassPhrases मेल नहीं खाता, कृपया पुनः प्रयास करें",
456
"password": "पारण शब्द",
457
"paste": "पेस्ट करें",
458
"pause_wallet_creation": "हेवन वॉलेट बनाने की क्षमता फिलहाल रुकी हुई है।",
res/values/strings_hr.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Ovom ćete radnjom izbrisati ovaj novčanik. Želite li nastaviti?",
144
"confirm_fee_deduction": "Potvrdite odbitak naknade",
145
"confirm_fee_deduction_content": "Slažete li se da ćete odbiti naknadu od izlaza?",
146
+ "confirm_passphrase": "Potvrdite prolaznu frazu",
147
"confirm_sending": "Potvrdi slanje",
148
"confirm_silent_payments_switch_node": "Vaš trenutni čvor ne podržava tiha plaćanja \\ ncake novčanik prebacit će se na kompatibilni čvor, samo za skeniranje",
149
"confirmations": "Potvrde",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Nevažeći događaj uparivanja",
454
"passphrase": "Prolaznica (neobavezno)",
455
+ "passphrases_doesnt_match": "Prolazne fraze se ne podudaraju, pokušajte ponovo",
456
"password": "Lozinka",
457
"paste": "Zalijepi",
458
"pause_wallet_creation": "Mogućnost stvaranja novčanika Haven trenutno je pauzirana.",
res/values/strings_hy.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Այս գործողությունը կջնջի այս դրամապանակը: Ցանկանու՞մ եք շարունակել։",
144
"confirm_fee_deduction": "Հաստատեք միջնորդավճար հանումը",
145
"confirm_fee_deduction_content": "Դուք համաձայն եք միջնորդավճար հանել արդյունքից?",
146
+ "confirm_passphrase": "Հաստատեք գաղտնաբառը",
147
"confirm_sending": "Հաստատեք ուղարկումը",
148
"confirm_silent_payments_switch_node": "Ձեր ընթացիկ հանգույցը չի աջակցում Լուռ վճարումներին\nCake Wallet-ը կանցնի համատեղելի հանգույց, միայն սկանավորման համար",
149
"confirmations": "Հաստատումներ",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Գրեք գումարը",
453
"pairingInvalidEvent": "Սխալ միացում",
454
"passphrase": "Պարող արտահայտություն (Ոչ պարտադիր)",
455
+ "passphrases_doesnt_match": "Անհատները չեն համընկնում, խնդրում ենք կրկին փորձել",
456
"password": "Գաղտնաբառ",
457
"paste": "Տեղադրել",
458
"pause_wallet_creation": "Հնարավորություն ստեղծել Haven Դրամապանակ ընթացիկ դադարեցված է",
res/values/strings_id.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Tindakan ini akan menghapus dompet ini. Apakah Anda ingin melanjutkan?",
144
"confirm_fee_deduction": "Konfirmasi pengurangan biaya",
145
"confirm_fee_deduction_content": "Apakah Anda setuju untuk mengurangi biaya dari output?",
146
+ "confirm_passphrase": "Konfirmasi frasa sandi",
147
"confirm_sending": "Konfirmasi pengiriman",
148
"confirm_silent_payments_switch_node": "Node Anda saat ini tidak mendukung pembayaran diam \\ ncake Wallet akan beralih ke simpul yang kompatibel, hanya untuk pemindaian",
149
"confirmations": "Konfirmasi",
@@ -453,6 +454,7 @@
454
"overwrite_amount": "Timpa jumlah",
455
"pairingInvalidEvent": "Menyandingkan Acara Tidak Valid",
456
"passphrase": "Frasa sandi (opsional)",
457
+ "passphrases_doesnt_match": "Sandi tidak cocok, coba lagi",
458
"password": "Kata Sandi",
459
"paste": "Tempel",
460
"pause_wallet_creation": "Kemampuan untuk membuat Haven Wallet saat ini dijeda.",
res/values/strings_it.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Questa azione cancellerà questo portafoglio. Desideri continuare?",
144
"confirm_fee_deduction": "Conferma la detrazione delle commissioni",
145
"confirm_fee_deduction_content": "Accetti di detrarre la commissione dall'output?",
146
+ "confirm_passphrase": "Conferma passphrase",
147
"confirm_sending": "Conferma l'invio",
148
"confirm_silent_payments_switch_node": "Il tuo nodo corrente non supporta i pagamenti silenziosi \\ ncake Wallet passerà a un nodo compatibile, solo per la scansione",
149
"confirmations": "Conferme",
@@ -453,6 +454,7 @@
454
"overwrite_amount": "Sovrascrivi quantità",
455
"pairingInvalidEvent": "Associazione evento non valido",
456
"passphrase": "Passphrase (opzionale)",
457
+ "passphrases_doesnt_match": "Le passphrasi non corrispondono, riprova",
458
"password": "Password",
459
"paste": "Incolla",
460
"pause_wallet_creation": "La possibilità di creare Haven Wallet è attualmente sospesa.",
res/values/strings_ja.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "このアクションにより、このウォレットが削除されます。 続行しますか?",
144
"confirm_fee_deduction": "料金控除を確認します",
145
"confirm_fee_deduction_content": "出力から料金を差し引くことに同意しますか?",
146
+ "confirm_passphrase": "パスフレーズを確認します",
147
"confirm_sending": "送信を確認",
148
"confirm_silent_payments_switch_node": "現在のノードはサイレントペイメントをサポートしていません\\ ncakeウォレットは、スキャン用に互換性のあるノードに切り替えます",
149
"confirmations": "確認",
@@ -452,6 +453,7 @@
453
"overwrite_amount": "Overwrite amount",
454
"pairingInvalidEvent": "ペアリング無効イベント",
455
"passphrase": "パスフレーズ(オプション)",
456
+ "passphrases_doesnt_match": "パスフレーズは一致しません。もう一度やり直してください",
457
"password": "パスワード",
458
"paste": "ペースト",
459
"pause_wallet_creation": "Haven Wallet を作成する機能は現在一時停止されています。",
res/values/strings_ko.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "이 작업은이 지갑을 삭제합니다. 계속 하시겠습니까?",
144
"confirm_fee_deduction": "수수료 공제를 확인하십시오",
145
"confirm_fee_deduction_content": "출력에서 수수료를 공제하는 데 동의하십니까?",
146
+ "confirm_passphrase": "암호를 확인하십시오",
147
"confirm_sending": "전송 확인",
148
"confirm_silent_payments_switch_node": "현재 노드는 무음 지불을 지원하지 않습니다 \\ ncake 지갑은 스캔을 위해 호환 가능한 노드로 전환됩니다.",
149
"confirmations": "확인",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "잘못된 이벤트 페어링",
454
"passphrase": "암호화 (선택 사항)",
455
+ "passphrases_doesnt_match": "패스 프레이즈가 일치하지 않습니다. 다시 시도하십시오",
456
"password": "암호",
457
"paste": "풀",
458
"pause_wallet_creation": "Haven Wallet 생성 기능이 현재 일시 중지되었습니다.",
res/values/strings_my.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "ဤလုပ်ဆောင်ချက်သည် ဤပိုက်ဆံအိတ်ကို ဖျက်လိုက်ပါမည်။ ဆက်လုပ်လိုပါသလား။",
144
"confirm_fee_deduction": "အခကြေးငွေကိုနှုတ်ယူခြင်း",
145
"confirm_fee_deduction_content": "output မှအခကြေးငွေကိုယူရန်သဘောတူပါသလား။",
146
+ "confirm_passphrase": "passphrase အတည်ပြုပါ",
147
"confirm_sending": "ပေးပို့အတည်ပြုပါ။",
148
"confirm_silent_payments_switch_node": "သင်၏လက်ရှိ node သည်အသံတိတ်ငွေပေးချေမှုကိုမပံ့ပိုးပါဟု \\ t",
149
"confirmations": "အတည်ပြုချက်များ",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "ပမာဏကို ထပ်ရေးပါ။",
453
"pairingInvalidEvent": "မမှန်ကန်သောဖြစ်ရပ်ကို တွဲချိတ်ခြင်း။",
454
"passphrase": "passphrase (optional)",
455
+ "passphrases_doesnt_match": "passphrases မကိုက်ညီဘူး, ကျေးဇူးပြုပြီးထပ်ကြိုးစားပါ",
456
"password": "စကားဝှက်",
457
"paste": "ငါးပိ",
458
"pause_wallet_creation": "Haven Wallet ဖန်တီးနိုင်မှုကို လောလောဆယ် ခေတ္တရပ်ထားသည်။",
res/values/strings_nl.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?",
144
"confirm_fee_deduction": "Bevestig de aftrek van de kosten",
145
"confirm_fee_deduction_content": "Stemt u ermee in om de vergoeding af te trekken van de output?",
146
+ "confirm_passphrase": "Bevestig Passaspherase",
147
"confirm_sending": "Bevestig verzending",
148
"confirm_silent_payments_switch_node": "Uw huidige knooppunt ondersteunt geen stille betalingen \\ ncake -portemonnee schakelt over naar een compatibele knoop",
149
"confirmations": "Bevestigingen",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Koppelen Ongeldige gebeurtenis",
454
"passphrase": "PassaspHRASE (optioneel)",
455
+ "passphrases_doesnt_match": "Passaspelfiaal komt niet overeen, probeer het opnieuw",
456
"password": "Wachtwoord",
457
"paste": "Plakken",
458
"pause_wallet_creation": "De mogelijkheid om Haven Wallet te maken is momenteel onderbroken.",
res/values/strings_pl.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Ta czynność usunie ten portfel. Czy chcesz kontynuować?",
144
"confirm_fee_deduction": "Potwierdź odliczenie opłaty",
145
"confirm_fee_deduction_content": "Czy zgadzasz się odliczyć opłatę od wyników?",
146
+ "confirm_passphrase": "Potwierdź hasło",
147
"confirm_sending": "Potwierdź wysłanie",
148
"confirm_silent_payments_switch_node": "Twój obecny węzeł nie obsługuje cichych płatności \\ NCAKE Portfel przełączy się na kompatybilny węzeł, tylko do skanowania",
149
"confirmations": "Potwierdzenia",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Nadpisz ilość",
453
"pairingInvalidEvent": "Nieprawidłowe zdarzenie parowania",
454
"passphrase": "PassPhraza (opcjonalnie)",
455
+ "passphrases_doesnt_match": "Passfrazy nie pasują, spróbuj ponownie",
456
"password": "Hasło",
457
"paste": "Wklej",
458
"pause_wallet_creation": "Możliwość utworzenia Portfela Haven jest obecnie wstrzymana.",
res/values/strings_pt.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Esta ação excluirá esta carteira. Você deseja continuar?",
144
"confirm_fee_deduction": "Confirme dedução da taxa",
145
"confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?",
146
+ "confirm_passphrase": "Confirme a senha",
147
"confirm_sending": "Confirmar o envio",
148
"confirm_silent_payments_switch_node": "Seu nó atual não suporta pagamentos silenciosos \n A Cake Wallet mudará para um nó compatível, apenas para escanear",
149
"confirmations": "Confirmações",
@@ -453,6 +454,7 @@
454
"overwrite_amount": "Overwrite amount",
455
"pairingInvalidEvent": "Emparelhamento de evento inválido",
456
"passphrase": "Senha (opcional)",
457
+ "passphrases_doesnt_match": "Passagases não correspondem, por favor tente novamente",
458
"password": "Senha",
459
"paste": "Colar",
460
"pause_wallet_creation": "A capacidade de criar a Haven Wallet está atualmente pausada.",
res/values/strings_ru.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Это действие удалит кошелек. Вы хотите продолжить?",
144
"confirm_fee_deduction": "Подтвердите вычет платы",
145
"confirm_fee_deduction_content": "Согласны ли вы вычесть плату из вывода?",
146
+ "confirm_passphrase": "Подтвердите Passfrase",
147
"confirm_sending": "Подтвердить отправку",
148
"confirm_silent_payments_switch_node": "Ваш текущий узел не поддерживает Silent Payments \\ ncake Wallet переключится на совместимый узел, только для сканирования",
149
"confirmations": "Подтверждения",
@@ -452,6 +453,7 @@
453
"overwrite_amount": "Overwrite amount",
454
"pairingInvalidEvent": "Недействительное событие сопряжения",
455
"passphrase": "Passfrase (необязательно)",
456
+ "passphrases_doesnt_match": "Пасфразы не совпадают, попробуйте еще раз",
457
"password": "Пароль",
458
"paste": "Вставить",
459
"pause_wallet_creation": "Возможность создания Haven Wallet в настоящее время приостановлена.",
res/values/strings_th.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "การดำเนินการนี้จะลบกระเป๋านี้ คุณต้องการดำเนินการต่อหรือไม่?",
144
"confirm_fee_deduction": "ยืนยันการหักค่าธรรมเนียม",
145
"confirm_fee_deduction_content": "คุณตกลงที่จะหักค่าธรรมเนียมจากผลลัพธ์หรือไม่?",
146
+ "confirm_passphrase": "ยืนยันวลีรหัสผ่าน",
147
"confirm_sending": "ยืนยันการส่ง",
148
"confirm_silent_payments_switch_node": "โหนดปัจจุบันของคุณไม่รองรับการชำระเงินแบบเงียบ \\ ncake กระเป๋าเงินจะเปลี่ยนเป็นโหนดที่เข้ากันได้เพียงเพื่อการสแกน",
149
"confirmations": "การยืนยัน",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "เขียนทับจำนวน",
453
"pairingInvalidEvent": "การจับคู่เหตุการณ์ที่ไม่ถูกต้อง",
454
"passphrase": "ข้อความรหัสผ่าน (ไม่บังคับ)",
455
+ "passphrases_doesnt_match": "Passphrases ไม่ตรงกันโปรดลองอีกครั้ง",
456
"password": "รหัสผ่าน",
457
"paste": "วาง",
458
"pause_wallet_creation": "ขณะนี้ความสามารถในการสร้าง Haven Wallet ถูกหยุดชั่วคราว",
res/values/strings_tl.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Tatanggalin ng pagkilos na ito ang wallet na ito. Gusto mo bang magpatuloy?",
144
"confirm_fee_deduction": "Kumpirmahin ang pagbabawas ng fee",
145
"confirm_fee_deduction_content": "Sumasang-ayon ka bang bawasan ang fee mula sa output?",
146
+ "confirm_passphrase": "Kumpirma ang passphrase",
147
"confirm_sending": "Kumpirmahin ang pagpapadala",
148
"confirm_silent_payments_switch_node": "Ang iyong kasalukuyang node ay hindi sumusuporta sa tahimik na pagbabayad \\ nCake Wallet ay lilipat sa isang katugmang node, para lamang sa pag-scan",
149
"confirmations": "Mga kumpirmasyon",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "I-overwrite ang halaga",
453
"pairingInvalidEvent": "Pairing Invalid Event",
454
"passphrase": "Passphrase (opsyonal)",
455
+ "passphrases_doesnt_match": "Ang mga passphrases ay hindi tumutugma, mangyaring subukang muli",
456
"password": "Password",
457
"paste": "I-paste",
458
"pause_wallet_creation": "Kasalukuyang naka-pause ang kakayahang gumawa ng Haven Wallet.",
res/values/strings_tr.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Bu eylem, bu cüzdanı silecek. Devam etmek istiyor musun?",
144
"confirm_fee_deduction": "Ücret kesintisini onaylayın",
145
"confirm_fee_deduction_content": "Ücreti çıktıdan düşürmeyi kabul ediyor musunuz?",
146
+ "confirm_passphrase": "Parola onaylayın",
147
"confirm_sending": "Göndermeyi onayla",
148
"confirm_silent_payments_switch_node": "Mevcut düğümünüz sessiz ödemeleri desteklemiyor \\ nCake cüzdanı, sadece tarama için uyumlu bir düğüme geçecektir",
149
"confirmations": "Onay",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Miktarın üzerine yaz",
453
"pairingInvalidEvent": "Geçersiz Etkinliği Eşleştirme",
454
"passphrase": "Passfrase (isteğe bağlı)",
455
+ "passphrases_doesnt_match": "Passfrases eşleşmiyor, lütfen tekrar deneyin",
456
"password": "Parola",
457
"paste": "Yapıştır",
458
"pause_wallet_creation": "Haven Cüzdanı oluşturma yeteneği şu anda duraklatıldı.",
res/values/strings_uk.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Ця дія видалить гаманець. Ви хочете продовжити?",
144
"confirm_fee_deduction": "Підтвердьте відрахування комісії",
145
"confirm_fee_deduction_content": "Чи погоджуєтесь ви вирахувати комісію з сумми одержувача?",
146
+ "confirm_passphrase": "Підтвердьте пасфрази",
147
"confirm_sending": "Підтвердити відправлення",
148
"confirm_silent_payments_switch_node": "Ваш поточний вузол не підтримує мовчазні платежі \\ ncake Wallet перейде на сумісний вузол, лише для сканування",
149
"confirmations": "Підтвердження",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "Недійсна подія сполучення",
454
"passphrase": "Пасофрази (необов’язково)",
455
+ "passphrases_doesnt_match": "Пасофрази не відповідають, спробуйте ще раз",
456
"password": "Пароль",
457
"paste": "Вставити",
458
"pause_wallet_creation": "Можливість створення гаманця Haven зараз призупинено.",
res/values/strings_ur.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "اس کارروائی سے یہ پرس حذف ہو جائے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟",
144
"confirm_fee_deduction": "فیس میں کٹوتی کی تصدیق کریں",
145
"confirm_fee_deduction_content": "کیا آپ آؤٹ پٹ سے فیس کم کرنے پر راضی ہیں؟",
146
+ "confirm_passphrase": "پاسفریز کی تصدیق کریں",
147
"confirm_sending": "بھیجنے کی تصدیق کریں۔",
148
"confirm_silent_payments_switch_node": "آپ کا موجودہ نوڈ خاموش ادائیگیوں کی حمایت نہیں کرتا ہے۔",
149
"confirmations": "تصدیقات",
@@ -453,6 +454,7 @@
454
"overwrite_amount": "رقم کو اوور رائٹ کریں۔",
455
"pairingInvalidEvent": "ﭧﻧﻮﯾﺍ ﻂﻠﻏ ﺎﻧﺎﻨﺑ ﺍﮌﻮﺟ",
456
"passphrase": "پاسفریز (اختیاری)",
457
+ "passphrases_doesnt_match": "پاسفریز مماثل نہیں ہیں ، براہ کرم دوبارہ کوشش کریں",
458
"password": "پاس ورڈ",
459
"paste": "چسپاں کریں۔",
460
"pause_wallet_creation": "Haven Wallet ۔ﮯﮨ ﻑﻮﻗﻮﻣ ﻝﺎﺤﻟﺍ ﯽﻓ ﺖﯿﻠﮨﺍ ﯽﮐ ﮯﻧﺎﻨﺑ",
res/values/strings_vi.arb
+2
@@ -144,6 +144,7 @@
144
"confirm_fee_dedction_content": "Bạn có đồng ý trừ phí từ đầu ra không?",
145
"confirm_fee_deduction": "Xác nhận Khấu trừ Phí",
146
"confirm_fee_deduction_content": "Bạn có đồng ý khấu trừ phí từ đầu ra không?",
147
+ "confirm_passphrase": "Xác nhận cụm mật khẩu",
148
"confirm_sending": "Xác nhận gửi",
149
"confirm_silent_payments_switch_node": "Nút hiện tại của bạn không hỗ trợ thanh toán im lặng\\nCake Wallet sẽ chuyển sang một nút tương thích chỉ để quét",
150
"confirmations": "Xác nhận",
@@ -452,6 +453,7 @@
453
"overwrite_amount": "Ghi đè số tiền",
454
"pairingInvalidEvent": "Sự kiện ghép nối không hợp lệ",
455
"passphrase": "Cụm từ bảo mật (Tùy chọn)",
456
+ "passphrases_doesnt_match": "Vòng thông không khớp, vui lòng thử lại",
457
"password": "Mật khẩu",
458
"paste": "Dán",
459
"pause_wallet_creation": "Khả năng tạo ví Haven hiện đang bị tạm dừng.",
res/values/strings_yo.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "Ìṣe yìí máa yọ àpamọ́wọ́ yìí kúrò. Ṣé ẹ fẹ́ tẹ̀síwájú?",
144
"confirm_fee_deduction": "Jẹrisi iyọkuro owo",
145
"confirm_fee_deduction_content": "Ṣe o gba lati yọkuro idiyele naa kuro ni iṣejade?",
146
+ "confirm_passphrase": "Jẹrisi kọwe",
147
"confirm_sending": "Jẹ́rìí sí ránṣẹ́",
148
"confirm_silent_payments_switch_node": "Ilode rẹ ti lọwọlọwọ ko ṣe atilẹyin awọn sisanwo ti o dakẹ \\ owet apamọwọ yoo yipada si oju-ọrọ ibaramu, o kan fun Scning",
149
"confirmations": "Àwọn ẹ̀rí",
@@ -452,6 +453,7 @@
453
"overwrite_amount": "Pààrọ̀ iye owó",
454
"pairingInvalidEvent": "Pipọpọ Iṣẹlẹ Ti ko tọ",
455
"passphrase": "Ọrọ kukuru (iyan)",
456
+ "passphrases_doesnt_match": "Awọn ọrọ kukuru ko baamu, jọwọ gbiyanju lẹẹkansi",
457
"password": "Ọ̀rọ̀ aṣínà",
458
"paste": "Fikún ẹ̀dà yín",
459
"pause_wallet_creation": "Agbara lati ṣẹda Haven Wallet ti wa ni idaduro lọwọlọwọ.",
res/values/strings_zh.arb
+2
@@ -143,6 +143,7 @@
143
"confirm_delete_wallet": "此操作将刪除此钱包。确定吗?",
144
"confirm_fee_deduction": "确认费用扣除",
145
"confirm_fee_deduction_content": "您是否同意从产出中扣除费用?",
146
+ "confirm_passphrase": "确认密码",
147
"confirm_sending": "确认发送",
148
"confirm_silent_payments_switch_node": "您当前的节点不支持无声付款\\ ncake钱包将切换到兼容节点,仅用于扫描",
149
"confirmations": "确认",
@@ -451,6 +452,7 @@
452
"overwrite_amount": "Overwrite amount",
453
"pairingInvalidEvent": "配对无效事件",
454
"passphrase": "密码(可选)",
455
+ "passphrases_doesnt_match": "密码不匹配,请重试",
456
"password": "密码",
457
"paste": "粘贴",
458
"pause_wallet_creation": "创建 Haven 钱包的功能当前已暂停。",
tool/append_translation.dart
+5
-4
@@ -5,13 +5,14 @@ import 'utils/translation/translation_utils.dart';
5
/// flutter packages pub run tool/append_translation.dart "hello_world" "Hello World!"
6
7
void main(List<String> args) async {
8
- if (args.length != 2) {
8
+ if (args.length < 2) {
9
throw Exception(
10
- 'Insufficient arguments!\n\nTry to run `./append_translation.dart greetings "Hello World!"`');
10
+ 'Insufficient arguments!\n\nTry to run `./append_translation.dart "greetings" "Hello World!"`');
11
}
12
13
final name = args.first;
14
- final text = args.last;
14
+ final text = args[1];
15
+ final force = args.last == "--force";
16
17
print('Appending "$name": "$text"');
18
@@ -20,7 +21,7 @@ void main(List<String> args) async {
21
final fileName = getArbFileName(lang);
22
final translation = await getTranslation(text, lang);
23
23
- appendStringToArbFile(fileName, name, translation);
24
+ appendStringToArbFile(fileName, name, translation, force: force);
25
}
26
27
print('Alphabetizing all files...');
tool/utils/translation/arb_file_utils.dart
+2
-2
@@ -1,11 +1,11 @@
1
import 'dart:convert';
2
import 'dart:io';
3
4
-void appendStringToArbFile(String fileName, String name, String text) {
4
+void appendStringToArbFile(String fileName, String name, String text, {bool force = false}) {
5
final file = File(fileName);
6
final arbObj = readArbFile(file);
7
8
- if (arbObj.containsKey(name)) {
8
+ if (arbObj.containsKey(name) && !force) {
9
print("String $name already exists in $fileName!");
10
return;
11
}