prevent using same wallet name as existing (#391)
* Add wallet name validation
Serhii committed
Jun 29, 2022 at 20:21 UTC
02533d68a078fa1d3b11e819ff7dd93048353ff4
25 files changed
+137
-51
lib/core/validator.dart
-5
@@ -40,8 +40,3 @@ class TextValidator extends Validator<String> {
40
41
bool match(String value) => RegExp(pattern).hasMatch(value);
42
}
43
-
44
-class WalletNameValidator extends TextValidator {
45
- WalletNameValidator()
46
- : super(minLength: 1, maxLength: 15, pattern: '^[a-zA-Z0-9_]\$');
47
-}
\ No newline at end of file
lib/core/wallet_name_validator.dart
new
+11
@@ -0,0 +1,11 @@
1
+import 'package:cake_wallet/generated/i18n.dart';
2
+import 'package:cake_wallet/core/validator.dart';
3
+
4
+class WalletNameValidator extends TextValidator {
5
+ WalletNameValidator()
6
+ : super(
7
+ errorMessage: S.current.error_text_wallet_name,
8
+ pattern: '^[a-zA-Z0-9\-_ ]+\$',
9
+ minLength: 1,
10
+ maxLength: 33);
11
+}
lib/entities/generate_name.dart
+6
-2
@@ -1,3 +1,4 @@
1
+import 'dart:convert';
2
import 'dart:math';
3
4
import 'package:flutter/services.dart';
@@ -14,8 +15,11 @@ Future<String> generateName() async {
15
await rootBundle.loadString('assets/text/Wallet_Adjectives.txt');
16
final nounStringRaw =
17
await rootBundle.loadString('assets/text/Wallet_Nouns.txt');
17
- final adjectives = List<String>.from(adjectiveStringRaw.split('\n'));
18
- final nouns = List<String>.from(nounStringRaw.split('\n'));
18
+
19
+ final ls = LineSplitter();
20
+ final adjectives = ls.convert(adjectiveStringRaw);
21
+ final nouns = ls.convert(nounStringRaw);
22
+
23
final chosenAdjective = adjectives[randomThing.nextInt(adjectives.length)];
24
final chosenNoun = nouns[randomThing.nextInt(nouns.length)];
25
final returnString =
lib/src/screens/new_wallet/new_wallet_page.dart
+17
-6
@@ -7,7 +7,7 @@ import 'package:flutter_mobx/flutter_mobx.dart';
7
import 'package:flutter/material.dart';
8
import 'package:flutter/cupertino.dart';
9
import 'package:cake_wallet/generated/i18n.dart';
10
-import 'package:cake_wallet/core/validator.dart';
10
+import 'package:cake_wallet/core/wallet_name_validator.dart';
11
import 'package:cake_wallet/src/widgets/seed_language_selector.dart';
12
import 'package:cake_wallet/src/screens/base_page.dart';
13
import 'package:cake_wallet/src/widgets/primary_button.dart';
@@ -218,10 +218,21 @@ class _WalletNameFormState extends State<WalletNameForm> {
218
if (!_formKey.currentState.validate()) {
219
return;
220
}
221
-
222
- _walletNewVM.create(
223
- options: _walletNewVM.hasLanguageSelector
224
- ? _languageSelectorKey.currentState.selected
225
- : null);
221
+ if (_walletNewVM.nameExists(_walletNewVM.name)) {
222
+ showPopUp<void>(
223
+ context: context,
224
+ builder: (_) {
225
+ return AlertWithOneAction(
226
+ alertTitle: '',
227
+ alertContent: S.of(context).wallet_name_exists,
228
+ buttonText: S.of(context).ok,
229
+ buttonAction: () => Navigator.of(context).pop());
230
+ });
231
+ } else {
232
+ _walletNewVM.create(
233
+ options: _walletNewVM.hasLanguageSelector
234
+ ? _languageSelectorKey.currentState.selected
235
+ : null);
236
+ }
237
}
238
}
lib/src/screens/restore/restore_wallet_from_keys_page.dart
+1
-1
@@ -1,4 +1,4 @@
1
-import 'package:cake_wallet/core/validator.dart';
1
+import 'package:cake_wallet/core/wallet_name_validator.dart';
2
import 'package:cake_wallet/palette.dart';
3
import 'package:flutter/services.dart';
4
import 'package:flutter/cupertino.dart';
lib/src/screens/restore/restore_wallet_from_seed_details.dart
+1
-1
@@ -3,7 +3,7 @@ import 'package:mobx/mobx.dart';
3
import 'package:flutter/material.dart';
4
import 'package:flutter_mobx/flutter_mobx.dart';
5
import 'package:cake_wallet/generated/i18n.dart';
6
-import 'package:cake_wallet/core/validator.dart';
6
+import 'package:cake_wallet/core/wallet_name_validator.dart';
7
import 'package:cake_wallet/core/execution_state.dart';
8
import 'package:cake_wallet/src/screens/base_page.dart';
9
import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
lib/src/screens/restore/wallet_restore_from_keys_form.dart
+1
-1
@@ -8,7 +8,7 @@ import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
8
import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
9
import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
10
import 'package:cake_wallet/generated/i18n.dart';
11
-import 'package:cake_wallet/core/validator.dart';
11
+import 'package:cake_wallet/core/wallet_name_validator.dart';
12
import 'package:cake_wallet/entities/generate_name.dart';
13
14
class WalletRestoreFromKeysFrom extends StatefulWidget {
lib/src/screens/restore/wallet_restore_from_seed_form.dart
+7
-3
@@ -10,7 +10,7 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
10
import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
11
import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
12
import 'package:cake_wallet/generated/i18n.dart';
13
-import 'package:cake_wallet/core/validator.dart';
13
+import 'package:cake_wallet/core/wallet_name_validator.dart';
14
15
class WalletRestoreFromSeedForm extends StatefulWidget {
16
WalletRestoreFromSeedForm(
@@ -41,6 +41,7 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
41
WalletRestoreFromSeedFormState(this.language)
42
: seedWidgetStateKey = GlobalKey<SeedWidgetState>(),
43
blockchainHeightKey = GlobalKey<BlockchainHeightState>(),
44
+ formKey = GlobalKey<FormState>(),
45
languageController = TextEditingController(),
46
nameTextEditingController = TextEditingController();
47
@@ -48,6 +49,7 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
49
final GlobalKey<BlockchainHeightState> blockchainHeightKey;
50
final TextEditingController languageController;
51
final TextEditingController nameTextEditingController;
52
+ final GlobalKey<FormState> formKey;
53
String language;
54
55
@override
@@ -61,7 +63,9 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
63
return Container(
64
padding: EdgeInsets.only(left: 24, right: 24),
65
child: Column(children: [
64
- Stack(
66
+ Form(
67
+ key: formKey,
68
+ child: Stack(
69
alignment: Alignment.centerRight,
70
children: [
71
BaseTextFormField(
@@ -97,7 +101,7 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
101
),
102
),
103
],
100
- ),
104
+ )),
105
Container(height: 20),
106
SeedWidget(
107
key: seedWidgetStateKey,
lib/src/screens/restore/wallet_restore_page.dart
+42
-2
@@ -193,8 +193,7 @@ class WalletRestorePage extends BasePage {
193
child: Observer(
194
builder: (context) {
195
return LoadingPrimaryButton(
196
- onPressed: () =>
197
- walletRestoreViewModel.create(options: _credentials()),
196
+ onPressed: _confirmForm,
197
text: S.of(context).restore_recover,
198
color:
199
Theme.of(context).accentTextTheme.subtitle.decorationColor,
@@ -268,4 +267,45 @@ class WalletRestorePage extends BasePage {
267
268
return credentials;
269
}
270
+
271
+ void _confirmForm() {
272
+ final formContext = walletRestoreViewModel.mode == WalletRestoreMode.seed
273
+ ? walletRestoreFromSeedFormKey.currentContext
274
+ : walletRestoreFromKeysFormKey.currentContext;
275
+
276
+ final formKey = walletRestoreViewModel.mode == WalletRestoreMode.seed
277
+ ? walletRestoreFromSeedFormKey.currentState.formKey
278
+ : walletRestoreFromKeysFormKey.currentState.formKey;
279
+
280
+ final name = walletRestoreViewModel.mode == WalletRestoreMode.seed
281
+ ? walletRestoreFromSeedFormKey
282
+ .currentState.nameTextEditingController.value.text
283
+ : walletRestoreFromKeysFormKey
284
+ .currentState.nameTextEditingController.value.text;
285
+
286
+ if (!formKey.currentState.validate()) {
287
+ return;
288
+ }
289
+
290
+ if (walletRestoreViewModel.nameExists(name)) {
291
+ showNameExistsAlert(formContext);
292
+ return;
293
+ }
294
+
295
+ walletRestoreViewModel.create(options: _credentials());
296
+ }
297
+
298
+ Future<void> showNameExistsAlert(BuildContext context) {
299
+ return showPopUp<void>(
300
+ context: context,
301
+ builder: (_) {
302
+ return AlertWithOneAction(
303
+ alertTitle: '',
304
+ alertContent: S.of(context).wallet_name_exists,
305
+ buttonText: S.of(context).ok,
306
+ buttonAction: () => Navigator.of(context).pop());
307
+ });
308
+ }
309
}
310
+
311
+
lib/view_model/wallet_creation_vm.dart
+6
@@ -32,6 +32,12 @@ abstract class WalletCreationVMBase with Store {
32
final Box<WalletInfo> _walletInfoSource;
33
final AppStore _appStore;
34
35
+ bool nameExists(String name) {
36
+ final walletNameList = _walletInfoSource.values.map((e) => e.name.toLowerCase()).toList();
37
+
38
+ return walletNameList.contains(name.toLowerCase());
39
+ }
40
+
41
Future<void> create({dynamic options}) async {
42
try {
43
state = IsExecutingState();
res/values/strings_de.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Der Wert des Betrags darf den verfügbaren Kontostand nicht überschreiten.\nDie Anzahl der Nachkommastellen muss kleiner oder gleich 2 sein",
328
"error_text_subaddress_name" : "Der Name der Unteradresse darf nicht die Zeichen ` , ' \" enthalten\nund muss zwischen 1 und 20 Zeichen lang sein",
329
"error_text_amount" : "Betrag darf nur Zahlen enthalten",
330
- "error_text_wallet_name" : "Der Walletname darf nur Buchstaben und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein",
330
+ "error_text_wallet_name" : "Der Wallet-Name darf nur Buchstaben, Zahlen und _- Symbole enthalten\nund muss zwischen 1 und 33 Zeichen lang sein",
331
"error_text_keys" : "Walletschlüssel können nur 64 hexadezimale Zeichen enthalten",
332
"error_text_crypto_currency" : "Die Anzahl der Nachkommastellen\nmuss kleiner oder gleich 12 sein.",
333
"error_text_minimal_limit" : "Handel für ${provider} wird nicht erstellt. Menge ist unter dem Minimum: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Sprache suchen",
534
"search_currency": "Währung suchen",
535
"new_template" : "neue Vorlage",
536
- "electrum_address_disclaimer": "Wir generieren jedes Mal neue Adressen, wenn Sie eine verwenden, aber vorherige Adressen funktionieren weiterhin"
536
+ "electrum_address_disclaimer": "Wir generieren jedes Mal neue Adressen, wenn Sie eine verwenden, aber vorherige Adressen funktionieren weiterhin",
537
+ "wallet_name_exists": "Wallet mit diesem Namen existiert bereits"
538
}
res/values/strings_en.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2",
328
"error_text_subaddress_name" : "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long",
329
"error_text_amount" : "Amount can only contain numbers",
330
- "error_text_wallet_name" : "Wallet name can only contain letters, numbers\nand must be between 1 and 15 characters long",
330
+ "error_text_wallet_name" : "Wallet name can only contain letters, numbers, _ - symbols \nand must be between 1 and 33 characters long",
331
"error_text_keys" : "Wallet keys can only contain 64 chars in hex",
332
"error_text_crypto_currency" : "The number of fraction digits\nmust be less or equal to 12",
333
"error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Search language",
534
"search_currency": "Search currency",
535
"new_template" : "New Template",
536
- "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work"
536
+ "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work",
537
+ "wallet_name_exists": "Wallet with that name has already existed"
538
}
res/values/strings_es.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "El valor de la cantidad no puede exceder el saldo disponible.\nEl número de dígitos de fracción debe ser menor o igual a 2",
328
"error_text_subaddress_name" : "El nombre de la subdirección no puede contener símbolos `, '\" \ny debe tener entre 1 y 20 caracteres de longitud",
329
"error_text_amount" : "La cantidad solo puede contener números",
330
- "error_text_wallet_name" : "El nombre de la billetera solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud",
330
+ "error_text_wallet_name" : "El nombre de la billetera solo puede contener letras, números , _ - símbolos\ny debe tener entre 1 y 33 caracteres de longitud",
331
"error_text_keys" : "Las llaves de billetera solo pueden contener 64 caracteres en hexadecimal",
332
"error_text_crypto_currency" : "El número de dígitos fraccionarios \ndebe ser menor o igual a 12",
333
"error_text_minimal_limit" : "El comercio por ${provider} no se crea. La cantidad es menos que mínima: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Idioma de búsqueda",
534
"search_currency": "Moneda de búsqueda",
535
"new_template" : "Nueva plantilla",
536
- "electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando"
536
+ "electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando",
537
+ "wallet_name_exists": "Wallet con ese nombre ya ha existido"
538
}
res/values/strings_fr.arb
+3
-2
@@ -325,7 +325,7 @@
325
"error_text_fiat" : "La valeur du montant ne peut dépasser le solde disponible.\nLa partie décimale doit comporter au plus 2 chiffres",
326
"error_text_subaddress_name" : "Le nom de sous-adresse ne peut contenir les symboles ` , ' \"\net sa longueur doit être comprise entre 1 et 20 caractères",
327
"error_text_amount" : "Le montant ne peut comporter que des nombres",
328
- "error_text_wallet_name" : "Le nom du portefeuille ne peut contenir que des lettres et des chiffres\net sa longueur doit être comprise entre 1 et 15 caractères",
328
+ "error_text_wallet_name" : "Le nom du portefeuille ne peut contenir que des lettres, des chiffres, des symboles _ -\net doit comporter entre 1 et 33 caractères",
329
"error_text_keys" : "Les clefs du portefeuille ne peuvent être constituées que de 64 caractères hexadécimaux",
330
"error_text_crypto_currency" : "La partie décimale\ndoit comporter au plus 12 chiffres",
331
"error_text_minimal_limit" : "Échange pour ${provider} non créé. Le montant est inférieur au minimum : ${min} ${currency}",
@@ -531,5 +531,6 @@
531
"search_language": "Langue de recherche",
532
"search_currency": "Devise de recherche",
533
"new_template" : "Nouveau Modèle",
534
- "electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner"
534
+ "electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner",
535
+ "wallet_name_exists": "Le portefeuille portant ce nom existe déjà"
536
}
res/values/strings_hi.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "राशि का मूल्य उपलब्ध शेष राशि से अधिक नहीं हो सकता.\nअंश अंकों की संख्या कम या 2 के बराबर होनी चाहिए",
328
"error_text_subaddress_name" : "सबड्रेस नाम नहीं हो सकता` , ' \" प्रतीकों\nऔर 1 और 20 वर्णों के बीच लंबा होना चाहिए",
329
"error_text_amount" : "राशि में केवल संख्याएँ हो सकती हैं",
330
- "error_text_wallet_name" : "वॉलेट नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए",
330
+ "error_text_wallet_name" : "वॉलेट नाम में केवल अक्षर, संख्याएं, _ - प्रतीक हो सकते हैं\nऔर 1 और 33 वर्णों के बीच लंबा होना चाहिए",
331
"error_text_keys" : "वॉलेट कीज़ में हेक्स में केवल 64 वर्ण हो सकते हैं",
332
"error_text_crypto_currency" : "अंश अंकों की संख्या\n12 से कम या इसके बराबर होना चाहिए",
333
"error_text_minimal_limit" : "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि कम है तो न्यूनतम: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "भाषा खोजें",
534
"search_currency": "मुद्रा खोजें",
535
"new_template" : "नया टेम्पलेट",
536
- "electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं"
536
+ "electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं",
537
+ "wallet_name_exists": "उस नाम वाला वॉलेट पहले से मौजूद है"
538
}
res/values/strings_hr.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Vrijednost iznosa ne smije biti veća od raspoloživog iznosa.\nBroj decimala smije biti 2 ili manji.",
328
"error_text_subaddress_name" : "Ime podadrese ne smije sadržavati znakove ` , ' \" \ni mora biti dužine između 1 i 20 znakova",
329
"error_text_amount" : "Iznos smije sadržavati samo brojeve",
330
- "error_text_wallet_name" : "Ime novčanika smije sadržavati samo slova i brojeve\nte mora biti dužine između 1 i 15 znakova",
330
+ "error_text_wallet_name" : "Naziv novčanika može sadržavati samo slova, brojeve, _ - simbole\ni mora imati između 1 i 33 znaka",
331
"error_text_keys" : "Novčanik smije sadržavati samo 64 znakova hex vrijednosti",
332
"error_text_crypto_currency" : "Broj decimala mora\nbiti 12 ili manji",
333
"error_text_minimal_limit" : "Razmjena za ${provider} nije izrađena. Iznos je manji od minimalnog: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Jezik pretraživanja",
534
"search_currency": "Traži valutu",
535
"new_template" : "novi predložak",
536
- "electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek"
536
+ "electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek",
537
+ "wallet_name_exists": "Novčanik s tim nazivom već postoji"
538
}
res/values/strings_it.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "L'ammontare non può eccedere il saldo dispoinibile.\nIl numero di cifre decimali deve essere inferiore o uguale a 2",
328
"error_text_subaddress_name" : "Il nome del sottoindirizzo non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 20 caratteri",
329
"error_text_amount" : "L'ammontare può contenere solo numeri",
330
- "error_text_wallet_name" : "Il nome del portafoglio può contenere solo lettere, numeri\ne deve avere una lunghezza compresa tra 1 e 15 caratteri",
330
+ "error_text_wallet_name" : "Il nome del portafoglio può contenere solo lettere, numeri, _ - simboli\ne deve avere una lunghezza compresa tra 1 e 33 caratteri",
331
"error_text_keys" : "Le chiavi del portafoglio possono contenere solo 64 caratteri in hex",
332
"error_text_crypto_currency" : "Il numero delle cifre decimali\ndeve essere inferiore o uguale a 12",
333
"error_text_minimal_limit" : "Lo scambio per ${provider} non è stato creato. L'ammontare è inferiore al minimo: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Cerca lingua",
534
"search_currency": "Cerca valuta",
535
"new_template" : "Nuovo modello",
536
- "electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare"
536
+ "electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare",
537
+ "wallet_name_exists": "Il portafoglio con quel nome è già esistito"
538
}
res/values/strings_ja.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "金額は利用可能な残高を超えることはできません.\n小数桁の数は2以下でなければなりません",
328
"error_text_subaddress_name" : "サブアドレス名に含めることはできません` , ' \" シンボル\n1〜20文字の長さである必要があります",
329
"error_text_amount" : "金額には数字のみを含めることができます",
330
- "error_text_wallet_name" : "ウォレット名には文字のみを含めることができます\n1〜15文字である必要があります",
330
+ "error_text_wallet_name" : "ウォレット名には、文字、数字、_-記号のみを含めることができます\n長さは1〜33文字である必要があります",
331
"error_text_keys" : "ウォレットキーには、16進数で64文字しか含めることができません",
332
"error_text_crypto_currency" : "小数桁数\n12以下でなければなりません",
333
"error_text_minimal_limit" : "${provider} の取引は作成されません。 金額は最小額より少ない: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "検索言語",
534
"search_currency": "検索通貨",
535
"new_template" : "新しいテンプレート",
536
- "electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します"
536
+ "electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します",
537
+ "wallet_name_exists": "その名前のウォレットはすでに存在しています"
538
}
res/values/strings_ko.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "금액은 사용 가능한 잔액을 초과 할 수 없습니다.\n소수 자릿수는 2보다 작거나 같아야합니다",
328
"error_text_subaddress_name" : "하위 주소 이름은 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 20 자 사이 여야합니다",
329
"error_text_amount" : "금액은 숫자 만 포함 할 수 있습니다",
330
- "error_text_wallet_name" : "지갑 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다",
330
+ "error_text_wallet_name" : "지갑 이름은 문자, 숫자, _ - 기호만 포함할 수 있습니다.\n1~33자 사이여야 합니다.",
331
"error_text_keys" : "지갑 키는 16 진수로 64 자만 포함 할 수 있습니다",
332
"error_text_crypto_currency" : "소수 자릿수\n12 이하 여야합니다",
333
"error_text_minimal_limit" : "거래 ${provider} 가 생성되지 않습니다. 금액이 최소보다 적습니다. ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "검색 언어",
534
"search_currency": "통화 검색",
535
"new_template" : "새 템플릿",
536
- "electrum_address_disclaimer": "사용할 때마다 새 주소가 생성되지만 이전 주소는 계속 작동합니다."
536
+ "electrum_address_disclaimer": "사용할 때마다 새 주소가 생성되지만 이전 주소는 계속 작동합니다.",
537
+ "wallet_name_exists": "해당 이름의 지갑이 이미 존재합니다."
538
}
res/values/strings_nl.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Waarde van bedrag kan het beschikbare saldo niet overschrijden.\nHet aantal breukcijfers moet kleiner zijn dan of gelijk zijn aan 2",
328
"error_text_subaddress_name" : "Naam subadres mag niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 20 tekens lang zijn",
329
"error_text_amount" : "Bedrag kan alleen cijfers bevatten",
330
- "error_text_wallet_name" : "Naam portemonnee kan alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn",
330
+ "error_text_wallet_name" : "Naam portemonnee kan alleen letters, cijfers , _ - symbolen bevatten\nen moet tussen de 1 en 33 tekens lang zijn",
331
"error_text_keys" : "Portefeuillesleutels kunnen maximaal 64 tekens bevatten in hexadecimale volgorde",
332
"error_text_crypto_currency" : "Het aantal breukcijfers\nmoet kleiner zijn dan of gelijk zijn aan 12",
333
"error_text_minimal_limit" : "Ruil voor ${provider} is niet gemaakt. Bedrag is minder dan minimaal: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Zoektaal",
534
"search_currency": "Zoek valuta",
535
"new_template" : "Nieuwe sjabloon",
536
- "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work"
536
+ "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work",
537
+ "wallet_name_exists": "Portemonnee met die naam bestaat al"
538
}
res/values/strings_pl.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Wartość kwoty nie może przekroczyć dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 2",
328
"error_text_subaddress_name" : "Nazwa podadresu nie może zawierać ` , ' \" symbolika\ni musi mieć od 1 do 20 znaków",
329
"error_text_amount" : "Kwota może zawierać tylko liczby",
330
- "error_text_wallet_name" : "Nazwa portfela może zawierać tylko litery i cyfry\ni musi mieć od 1 do 15 znaków",
330
+ "error_text_wallet_name" : "Nazwa portfela może zawierać tylko litery, cyfry, _ - symbole\ni musi mieć od 1 do 33 znaków",
331
"error_text_keys" : "Klucze portfela mogą zawierać tylko 64 znaki w systemie szesnastkowym",
332
"error_text_crypto_currency" : "Liczba cyfr ułamkowych\nmusi być mniejsza lub równa 12",
333
"error_text_minimal_limit" : "Wymiana dla ${provider} nie została utworzona. Kwota jest mniejsza niż minimalna: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Wyszukaj język",
534
"search_currency": "Wyszukaj walutę",
535
"new_template" : "Nowy szablon",
536
- "electrum_address_disclaimer": "Za każdym razem, gdy korzystasz z jednego z nich, generujemy nowe adresy, ale poprzednie adresy nadal działają"
536
+ "electrum_address_disclaimer": "Za każdym razem, gdy korzystasz z jednego z nich, generujemy nowe adresy, ale poprzednie adresy nadal działają",
537
+ "wallet_name_exists": "Portfel o tej nazwie już istnieje"
538
}
res/values/strings_pt.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "O valor do valor não pode exceder o saldo disponível.\nO número de dígitos decimais deve ser menor ou igual a 2",
328
"error_text_subaddress_name" : "O nome do sub-endereço não pode conter os símbolos ` , ' \" \ne deve ter entre 1 e 20 caracteres",
329
"error_text_amount" : "A quantia deve conter apenas números",
330
- "error_text_wallet_name" : "O nome da carteira só pode conter letras, números\ne deve ter entre 1 e 15 caracteres",
330
+ "error_text_wallet_name" : "O nome da carteira só pode conter letras, números, _ - símbolos\ne deve ter entre 1 e 33 caracteres",
331
"error_text_keys" : "As chaves da carteira podem conter apenas 64 caracteres em hexadecimal",
332
"error_text_crypto_currency" : "O número de dígitos decimais\ndeve ser menor ou igual a 12",
333
"error_text_minimal_limit" : "A troca por ${provider} não é criada. O valor é menor que o mínimo: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Idioma de pesquisa",
534
"search_currency": "Pesquisar moeda",
535
"new_template" : "Novo modelo",
536
- "electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando"
536
+ "electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando",
537
+ "wallet_name_exists": "A carteira com esse nome já existe"
538
}
res/values/strings_ru.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "Значение суммы не может превышать доступный баланс.\nКоличество цифр после запятой должно быть меньше или равно 2",
328
"error_text_subaddress_name" : "Имя субадреса не может содержать ` , ' \" символы\nи должно быть от 1 до 20 символов в длину",
329
"error_text_amount" : "Баланс может содержать только цифры",
330
- "error_text_wallet_name" : "Имя кошелька может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину",
330
+ "error_text_wallet_name" : "Имя кошелька может содержать только буквы, цифры, _ - символы\nи должно быть от 1 до 33 символов в длину",
331
"error_text_keys" : "Ключи кошелька могут содержать только 64 символа в hex",
332
"error_text_crypto_currency" : "Количество цифр после запятой\nдолжно быть меньше или равно 12",
333
"error_text_minimal_limit" : "Сделка для ${provider} не создана. Сумма меньше минимальной: ${min} ${currency}",
@@ -533,5 +533,6 @@
533
"search_language": "Язык поиска",
534
"search_currency": "Валюта поиска",
535
"new_template" : "Новый шаблон",
536
- "electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать."
536
+ "electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать.",
537
+ "wallet_name_exists": "Кошелек с таким именем уже существует"
538
}
res/values/strings_uk.arb
+3
-2
@@ -326,7 +326,7 @@
326
"error_text_fiat" : "Значення суми не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 2",
327
"error_text_subaddress_name" : "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 20 символів в довжину",
328
"error_text_amount" : "Баланс може містити тільки цифри",
329
- "error_text_wallet_name" : "Ім'я гаманця може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину",
329
+ "error_text_wallet_name" : "Ім'я гаманця може містити тільки букви, цифри, символи _ -\nі повинно бути від 1 до 33 символів в довжину",
330
"error_text_keys" : "Ключі гаманця можуть містити тільки 64 символів в hex",
331
"error_text_crypto_currency" : "Кількість цифр після коми\nповинно бути меншим або дорівнювати 12",
332
"error_text_minimal_limit" : "Операція для ${provider} не створена. Сума менша мінімальної: ${min} ${currency}",
@@ -532,5 +532,6 @@
532
"search_language": "Мова пошуку",
533
"search_currency": "Шукати валюту",
534
"new_template" : "Новий шаблон",
535
- "electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати"
535
+ "electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати",
536
+ "wallet_name_exists": "Гаманець з такою назвою вже існує"
537
}
res/values/strings_zh.arb
+3
-2
@@ -327,7 +327,7 @@
327
"error_text_fiat" : "金额不能超过可用余额.\n小数位数必须小于或等于2",
328
"error_text_subaddress_name" : "子地址名称不能包含`,' \" 符号\n并且必须在1到20个字符之间",
329
"error_text_amount" : "金额只能包含数字",
330
- "error_text_wallet_name" : "钱包名称只能包含字母,数字\n且必须介于1到15个字符之间",
330
+ "error_text_wallet_name" : "钱包名称只能包含字母、数字、_ - 符号\n并且长度必须在 1 到 33 个字符之间",
331
"error_text_keys" : "钱包密钥只能包含16个字符的十六进制字符",
332
"error_text_crypto_currency" : "小数位数\n必须小于或等于12",
333
"error_text_minimal_limit" : "未创建 ${provider} 交易。 金额小于最小值:${min} ${currency}",
@@ -531,5 +531,6 @@
531
"search_language": "搜索语言",
532
"search_currency": "搜索货币",
533
"new_template" : "新模板",
534
- "electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效"
534
+ "electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效",
535
+ "wallet_name_exists": "同名的钱包已经存在"
536
}