From 6154c6dfa5e3534e1b66b7d9b03be2c03094070a Mon Sep 17 00:00:00 2001 From: M Date: Thu, 16 Jan 2020 18:05:07 +0200 Subject: [PATCH] Changed restore wallet from seed screen. Added node.imonero.org:18081 to list of default nodes. --- assets/node_list.yml | 3 + lib/generated/i18n.dart | 63 ++++ .../restore_wallet_from_seed_page.dart | 60 ++-- lib/src/widgets/primary_button.dart | 11 +- lib/src/widgets/seed_widget.dart | 272 +++++++++++------- res/values/strings_de.arb | 7 +- res/values/strings_en.arb | 6 +- res/values/strings_es.arb | 6 +- res/values/strings_hi.arb | 6 +- res/values/strings_ja.arb | 7 +- res/values/strings_ko.arb | 5 +- res/values/strings_nl.arb | 6 +- res/values/strings_pl.arb | 6 +- res/values/strings_pt.arb | 6 +- res/values/strings_ru.arb | 6 +- res/values/strings_zh.arb | 6 +- 16 files changed, 312 insertions(+), 164 deletions(-) diff --git a/assets/node_list.yml b/assets/node_list.yml index 9e9de82a7..6aa8f93e9 100644 --- a/assets/node_list.yml +++ b/assets/node_list.yml @@ -18,4 +18,7 @@ is_default: false - uri: opennode.xmr-tw.org:18089 + is_default: false +- + uri: node.imonero.org:18081 is_default: false \ No newline at end of file diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 8cf212888..2ab5b9c92 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -286,6 +286,9 @@ class S implements WidgetsLocalizations { String wallet_list_failed_to_remove(String wallet_name, String error) => "Failed to remove ${wallet_name} wallet. ${error}"; String wallet_list_loading_wallet(String wallet_name) => "Loading ${wallet_name} wallet"; String wallet_list_removing_wallet(String wallet_name) => "Removing ${wallet_name} wallet"; + String get paste => "Paste"; + String get restore_from_seed_placeholder => "Please enter or paste your seed here"; + String get add_new_word => "Add new word"; } class $de extends S { @@ -824,6 +827,12 @@ class $de extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "Laden fehlgeschlagen ${wallet_name} Wallet. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Entfernen ${wallet_name} Wallet"; + @override + String get paste => "Einfügen"; + @override + String get restore_from_seed_placeholder => "Bitte geben Sie hier Ihren Code ein"; + @override + String get add_new_word => "Neues Wort hinzufügen"; } class $hi extends S { @@ -1362,6 +1371,12 @@ class $hi extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "लोड करने में विफल ${wallet_name} बटुआ. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "निकाला जा रहा है ${wallet_name} बटुआ"; + @override + String get paste => "पेस्ट करें"; + @override + String get restore_from_seed_placeholder => "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें"; + @override + String get add_new_word => "नया शब्द जोड़ें"; } class $ru extends S { @@ -1900,6 +1915,12 @@ class $ru extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "Ошибка при загрузке ${wallet_name} кошелька. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Удаление ${wallet_name} кошелька"; + @override + String get paste => "Вставить"; + @override + String get restore_from_seed_placeholder => "Введите или вставте код фразу вашего кошелька"; + @override + String get add_new_word => "Добавить новое слово"; } class $ko extends S { @@ -2438,6 +2459,12 @@ class $ko extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "풀이 ${wallet_name} 지갑"; + @override + String get paste => "풀"; + @override + String get restore_from_seed_placeholder => "여기에 코드 문구를 입력하거나 붙여 넣으십시오."; + @override + String get add_new_word => "새로운 단어 추가"; } class $pt extends S { @@ -2976,6 +3003,12 @@ class $pt extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "Falha ao abrir a carteira ${wallet_name}. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Removendo a carteira ${wallet_name}"; + @override + String get paste => "Colar"; + @override + String get restore_from_seed_placeholder => "Digite ou cole sua frase de código aqui"; + @override + String get add_new_word => "Adicionar nova palavra"; } class $ja extends S { @@ -3514,6 +3547,12 @@ class $ja extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "読み込みに失敗しました ${wallet_name} 財布. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "取りはずし ${wallet_name} 財布"; + @override + String get paste => "ペースト"; + @override + String get restore_from_seed_placeholder => "ここにコードフレーズを入力または貼り付けてください"; + @override + String get add_new_word => "新しい単語を追加"; } class $en extends S { @@ -4056,6 +4095,12 @@ class $pl extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "Nie udało się załadować ${wallet_name} portfel. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Usuwanie ${wallet_name} portfel"; + @override + String get paste => "Pasta"; + @override + String get restore_from_seed_placeholder => "Wpisz lub wklej tutaj swoją frazę kodową"; + @override + String get add_new_word => "Dodaj nowe słowo"; } class $es extends S { @@ -4594,6 +4639,12 @@ class $es extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "No se pudo cargar ${wallet_name} la billetera. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Retirar ${wallet_name} billetera"; + @override + String get paste => "Pegar"; + @override + String get restore_from_seed_placeholder => "Ingrese o pegue su frase de código aquí"; + @override + String get add_new_word => "Agregar palabra nueva"; } class $nl extends S { @@ -5132,6 +5183,12 @@ class $nl extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "Laden mislukt ${wallet_name} portemonnee. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "Verwijderen ${wallet_name} portemonnee"; + @override + String get paste => "Plakken"; + @override + String get restore_from_seed_placeholder => "Voer hier uw codefrase in of plak deze"; + @override + String get add_new_word => "Nieuw woord toevoegen"; } class $zh extends S { @@ -5670,6 +5727,12 @@ class $zh extends S { String wallet_list_failed_to_load(String wallet_name, String error) => "加载失败 ${wallet_name} 钱包. ${error}"; @override String wallet_list_removing_wallet(String wallet_name) => "拆下 ${wallet_name} 钱包"; + @override + String get paste => "糊"; + @override + String get restore_from_seed_placeholder => "请在此处输入或粘贴您的代码短语"; + @override + String get add_new_word => "添加新词"; } class GeneratedLocalizationsDelegate extends LocalizationsDelegate { diff --git a/lib/src/screens/restore/restore_wallet_from_seed_page.dart b/lib/src/screens/restore/restore_wallet_from_seed_page.dart index 024e8d848..1c9998d2d 100644 --- a/lib/src/screens/restore/restore_wallet_from_seed_page.dart +++ b/lib/src/screens/restore/restore_wallet_from_seed_page.dart @@ -6,7 +6,6 @@ import 'package:flutter/services.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/domain/services/wallet_list_service.dart'; import 'package:cake_wallet/src/domain/services/wallet_service.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -22,15 +21,27 @@ class RestoreWalletFromSeedPage extends BasePage { final WalletListService walletsService; final WalletService walletService; final SharedPreferences sharedPreferences; + final formKey = GlobalKey<_RestoreFromSeedFormState>(); @override String get title => S.current.restore_title_from_seed; @override - Widget body(BuildContext context) => RestoreFromSeedForm(); + Widget trailing(BuildContext context) => SizedBox( + width: 80, + height: 20, + child: FlatButton( + child: Text(S.of(context).clear), + padding: EdgeInsets.all(0), + onPressed: () => formKey?.currentState?.clear())); + + @override + Widget body(BuildContext context) => RestoreFromSeedForm(key: formKey); } class RestoreFromSeedForm extends StatefulWidget { + RestoreFromSeedForm({Key key}) : super(key: key); + @override _RestoreFromSeedFormState createState() => _RestoreFromSeedFormState(); } @@ -39,6 +50,8 @@ class _RestoreFromSeedFormState extends State { final _seedKey = GlobalKey(); bool _reactionSet = false; + void clear() => _seedKey.currentState.clear(); + @override Widget build(BuildContext context) { final walletRestorationStore = Provider.of(context); @@ -50,42 +63,13 @@ class _RestoreFromSeedFormState extends State { onTap: () => SystemChannels.textInput.invokeMethod('TextInput.hide'), child: Container( - padding: EdgeInsets.only(left: 20.0, right: 20.0, bottom: 20.0), - child: Column( - children: [ - Expanded( - child: SeedWidget( - key: _seedKey, - onMnemoticChange: (seed) => walletRestorationStore.setSeed(seed), - )), - Container( - alignment: Alignment.bottomCenter, - child: PrimaryButton( - onPressed: () { - walletRestorationStore.validateSeed(_seedKey.currentState.items); - _seedKey.currentState.setErrorMessage(walletRestorationStore.errorMessage); - - if (!walletRestorationStore.isValid) { - _seedKey.currentState.invalidate(); - return; - } - - _seedKey.currentState.validated(); - - Navigator.of(context).pushNamed( - Routes.restoreWalletFromSeedDetails, - arguments: _seedKey.currentState.items); - }, - text: S.of(context).restore_next, - color: Theme.of(context) - .primaryTextTheme - .button - .backgroundColor, - borderColor: Theme.of(context) - .primaryTextTheme - .button - .decorationColor)) - ], + padding: EdgeInsets.only(left: 20.0, right: 20.0), + child: SeedWidget( + key: _seedKey, + onMnemoticChange: (seed) => walletRestorationStore.setSeed(seed), + onFinish: () => Navigator.of(context).pushNamed( + Routes.restoreWalletFromSeedDetails, + arguments: _seedKey.currentState.items), ), ), ); diff --git a/lib/src/widgets/primary_button.dart b/lib/src/widgets/primary_button.dart index ce64b1224..6ef8f1af8 100644 --- a/lib/src/widgets/primary_button.dart +++ b/lib/src/widgets/primary_button.dart @@ -7,12 +7,15 @@ class PrimaryButton extends StatelessWidget { {@required this.onPressed, @required this.text, @required this.color, - @required this.borderColor}); + @required this.borderColor, + + this.isDisabled = false}); final VoidCallback onPressed; final Color color; final Color borderColor; final String text; + final bool isDisabled; @override Widget build(BuildContext context) { @@ -20,15 +23,15 @@ class PrimaryButton extends StatelessWidget { minWidth: double.infinity, height: 56.0, child: FlatButton( - onPressed: onPressed, - color: color, + onPressed: isDisabled ? null : onPressed, + color: isDisabled ? Colors.grey : color, shape: RoundedRectangleBorder( side: BorderSide(color: borderColor), borderRadius: BorderRadius.circular(10.0)), child: Text(text, style: TextStyle( fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.button.color)), + color: isDisabled ? Palette.darkGrey : Theme.of(context).primaryTextTheme.button.color)), )); } } diff --git a/lib/src/widgets/seed_widget.dart b/lib/src/widgets/seed_widget.dart index 79f112565..209d7e070 100644 --- a/lib/src/widgets/seed_widget.dart +++ b/lib/src/widgets/seed_widget.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -7,26 +8,35 @@ import 'package:cake_wallet/src/domain/common/mnemotic_item.dart'; import 'package:cake_wallet/generated/i18n.dart'; class SeedWidget extends StatefulWidget { - SeedWidget({Key key, this.onMnemoticChange}) : super(key: key); + SeedWidget({Key key, this.onMnemoticChange, this.onFinish}) : super(key: key); final Function(List) onMnemoticChange; + final Function() onFinish; @override SeedWidgetState createState() => SeedWidgetState(); } class SeedWidgetState extends State { + static const maxLength = 25; + List items = []; final _seedController = TextEditingController(); + final _seedTextFieldKey = GlobalKey(); MnemoticItem selectedItem; bool isValid; String errorMessage; + MnemoticItem currentMnemotic; + bool isCurrentMnemoticValid; + @override void initState() { super.initState(); - isValid = true; - _seedController.addListener(() => mnemoticFromText(_seedController.text)); + isValid = false; + isCurrentMnemoticValid = false; + _seedController + .addListener(() => changeCurrentMnemotic(_seedController.text)); } void addMnemotic(String text) { @@ -66,10 +76,14 @@ class SeedWidgetState extends State { } void selectMnemotic(MnemoticItem item) { - setState(() => selectedItem = item); - _seedController - ..text = item.text - ..selection = TextSelection.collapsed(offset: item.text.length); + setState(() { + selectedItem = item; + currentMnemotic = item; + + _seedController + ..text = item.text + ..selection = TextSelection.collapsed(offset: item.text.length); + }); } void onMnemoticTap(MnemoticItem item) { @@ -107,6 +121,7 @@ class SeedWidgetState extends State { void clear() { setState(() { items = []; + selectedItem = null; _seedController.text = ''; if (widget.onMnemoticChange != null) { @@ -132,119 +147,154 @@ class SeedWidgetState extends State { mnemoticFromText(text); } + void changeCurrentMnemotic(String text) { + setState(() { + if (text == null) { + currentMnemotic = null; + isCurrentMnemoticValid = false; + return; + } + + currentMnemotic = MnemoticItem(text: text, dic: EnglishMnemonics.words); + isCurrentMnemoticValid = currentMnemotic.isCorrect(); + }); + } + + void saveCurrentMnemoticToItems() { + setState(() { + if (selectedItem != null) { + selectedItem.changeText(currentMnemotic.text); + selectedItem = null; + } else { + items.add(currentMnemotic); + } + + currentMnemotic = null; + _seedController.text = ''; + }); + } + @override Widget build(BuildContext context) { return Container( child: Column(children: [ - TextFormField( - onFieldSubmitted: (text) => onFieldSubmitted(text), - style: TextStyle(fontSize: 14.0), - controller: _seedController, - textInputAction: TextInputAction.done, - decoration: InputDecoration( - suffixIcon: GestureDetector( - behavior: HitTestBehavior.opaque, - child: SizedBox( - width: 65, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - InkWell( - onTap: () { - clear(); - FocusScope.of(context).unfocus(); - }, - child: Container( - height: 20, - width: 20, - padding: EdgeInsets.all(3), - decoration: BoxDecoration( - color: Palette.wildDarkBlueWithOpacity, - borderRadius: BorderRadius.circular(10.0)), - child: Image.asset( - 'assets/images/x.png', - color: Palette.wildDarkBlue, - ), - ), - ), - InkWell( - onTap: () async => Clipboard.getData('text/plain') - .then((clipboard) => replaceText(clipboard.text)), - child: Container( - height: 35, - width: 35, - padding: EdgeInsets.all(7), - decoration: BoxDecoration( - color: Palette.wildDarkBlueWithOpacity, - borderRadius: BorderRadius.circular(10.0)), - child: Image.asset('assets/images/paste_button.png', - height: 5, width: 5, color: Palette.wildDarkBlue), - ), - ) - ], - ), - ), - ), - errorText: errorMessage, - hintStyle: TextStyle(color: Theme.of(context).hintColor), - hintText: S.of(context).widgets_seed, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Palette.cakeGreen, width: 2.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: - isValid ? Theme.of(context).focusColor : Palette.red, - width: 1.0))), - ), - SizedBox(height: 20), - Expanded( - child: GridView.count( - physics: NeverScrollableScrollPhysics(), - crossAxisCount: 3, - childAspectRatio: 3.3, - mainAxisSpacing: 10, - crossAxisSpacing: 10, - children: List.generate(items.length, (index) { - final item = items[index]; - final isValid = item.isCorrect(); - final isSelected = selectedItem == item; + Flexible( + fit: FlexFit.tight, + flex: 6, + child: SingleChildScrollView( + child: Wrap( + children: items.map((item) { + final isValid = item.isCorrect(); + final isSelected = selectedItem == item; - return InkWell( - onTap: () => onMnemoticTap(item), - child: Container( - decoration: BoxDecoration( - color: isValid ? Palette.brightBlue : Palette.red, - border: Border.all( - color: - isSelected ? Palette.violet : Colors.transparent), - borderRadius: BorderRadius.circular(15.0)), - padding: EdgeInsets.fromLTRB(10, 0, 10, 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( + return InkWell( + onTap: () => onMnemoticTap(item), + child: Container( + decoration: BoxDecoration( + color: isValid ? Colors.transparent : Palette.red), + margin: EdgeInsets.only(right: 7, bottom: 8), + child: Text( item.toString(), style: TextStyle( color: isValid ? Palette.blueGrey : Palette.lightGrey, - fontSize: 12, - fontWeight: FontWeight.w600), - ), - InkWell( - onTap: () => deleteMnemotic(item), - child: Image.asset( - 'assets/images/x.png', - height: 15, - width: 15, - color: Palette.wildDarkBlue, - )) - ], - ), - ), - ); - }), - ), - ), + fontSize: 18, + fontWeight: + isSelected ? FontWeight.w900 : FontWeight.w400, + decoration: isSelected + ? TextDecoration.underline + : TextDecoration.none), + )), + ); + }).toList()), + )), + Flexible( + fit: FlexFit.tight, + flex: 8, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column(children: [ + TextFormField( + key: _seedTextFieldKey, + onFieldSubmitted: (text) => isCurrentMnemoticValid + ? saveCurrentMnemoticToItems() + : null, + style: TextStyle(fontSize: 14.0), + controller: _seedController, + textInputAction: TextInputAction.done, + decoration: InputDecoration( + suffixIcon: GestureDetector( + behavior: HitTestBehavior.opaque, + child: ConstrainedBox( + constraints: BoxConstraints(maxWidth: 145), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + '${items.length}/${SeedWidgetState.maxLength}', + style: TextStyle( + color: Colors.grey, fontSize: 12)), + SizedBox(width: 10), + InkWell( + onTap: () async => + Clipboard.getData('text/plain').then( + (clipboard) => + replaceText(clipboard.text)), + child: Container( + height: 35, + padding: EdgeInsets.all(7), + decoration: BoxDecoration( + color: + Palette.wildDarkBlueWithOpacity, + borderRadius: + BorderRadius.circular(10.0)), + child: Text(S.of(context).paste)), + ) + ], + ), + ), + ), + hintStyle: + TextStyle(color: Theme.of(context).hintColor), + hintText: S.of(context).restore_from_seed_placeholder, + focusedBorder: UnderlineInputBorder( + borderSide: BorderSide( + color: Palette.cakeGreen, width: 2.0)), + enabledBorder: UnderlineInputBorder( + borderSide: BorderSide( + color: Theme.of(context).focusColor, + width: 1.0))), + enableInteractiveSelection: false, + ), + ]), + Padding( + padding: EdgeInsets.only(bottom: 20), + child: (selectedItem == null && items.length == maxLength) + ? PrimaryButton( + text: S.of(context).restore_next, + onPressed: () => widget.onFinish != null + ? widget.onFinish() + : null, + color: Theme.of(context) + .primaryTextTheme + .button + .backgroundColor, + borderColor: Theme.of(context) + .primaryTextTheme + .button + .decorationColor) + : PrimaryButton( + text: selectedItem != null + ? S.of(context).save + : S.of(context).add_new_word, + onPressed: () => isCurrentMnemoticValid + ? saveCurrentMnemoticToItems() + : null, + isDisabled: !isCurrentMnemoticValid, + color: PaletteDark.darkThemeBlueButton, + borderColor: Palette.brightBlue)) + ])) ]), ); } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 7638dd6b1..0e086a258 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -331,4 +331,9 @@ "trade_state_finished" : "Fertig", "change_language" : "Sprache ändern", - "change_language_to" : "Ändern Sie die Sprache in ${language}?"} \ No newline at end of file + "change_language_to" : "Ändern Sie die Sprache in ${language}?", + + "paste" : "Einfügen", + "restore_from_seed_placeholder" : "Bitte geben Sie hier Ihren Code ein", + "add_new_word" : "Neues Wort hinzufügen" +} \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index c09511b96..a6bbc8266 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Finished", "change_language" : "Change language", - "change_language_to" : "Change language to ${language}?" + "change_language_to" : "Change language to ${language}?", + + "paste" : ""paste"", + "restore_from_seed_placeholder" : "Please enter or "paste" your seed here", + "add_new_word" : "Add new word" } \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 39032191c..052ab1bbe 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Terminado", "change_language" : "Cambiar idioma", - "change_language_to" : "Cambiar el idioma a ${language}?" + "change_language_to" : "Cambiar el idioma a ${language}?", + + "paste" : "Pegar", + "restore_from_seed_placeholder" : "Ingrese o pegue su frase de código aquí", + "add_new_word" : "Agregar palabra nueva" } \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index e52b8928c..b22ade21d 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "ख़त्म होना", "change_language" : "भाषा बदलो", - "change_language_to" : "को भाषा बदलें ${language}?" + "change_language_to" : "को भाषा बदलें ${language}?", + + "paste" : "पेस्ट करें", + "restore_from_seed_placeholder" : "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें", + "add_new_word" : "नया शब्द जोड़ें" } \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index fcaa93184..e92f2ac01 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -331,5 +331,10 @@ "trade_state_finished" : "完成した", "change_language" : "言語を変えてください", - "change_language_to" : "言語を変更 ${language}?" + "change_language_to" : "言語を変更 ${language}?", + + "paste" : "ペースト", + "restore_from_seed_placeholder" : "ここにコードフレーズを入力または貼り付けてください", + "add_new_word" : "新しい単語を追加", + "add_new_word" : "새로운 단어 추가" } \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 963d1fb81..32946ba45 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -331,5 +331,8 @@ "trade_state_finished" : "끝마친", "change_language" : "언어 변경", - "change_language_to" : "언어를로 변경 ${language}?" + "change_language_to" : "언어를로 변경 ${language}?", + + "paste" : "풀", + "restore_from_seed_placeholder" : "여기에 코드 문구를 입력하거나 붙여 넣으십시오." } \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 16a8cb67b..34b199512 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Afgewerkt", "change_language" : "Verander de taal", - "change_language_to" : "Verander de taal in ${language}?" + "change_language_to" : "Verander de taal in ${language}?", + + "paste" : "Plakken", + "restore_from_seed_placeholder" : "Voer hier uw codefrase in of plak deze", + "add_new_word" : "Nieuw woord toevoegen" } \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index c9849d3c9..82b08979c 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Skończone", "change_language" : "Zmień język", - "change_language_to" : "Zmień język na ${language}?" + "change_language_to" : "Zmień język na ${language}?", + + "paste" : "Pasta", + "restore_from_seed_placeholder" : "Wpisz lub wklej tutaj swoją frazę kodową", + "add_new_word" : "Dodaj nowe słowo" } \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 382614a8c..67037ce0f 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Finalizada", "change_language" : "Mudar idioma", - "change_language_to" : "Alterar idioma para ${language}?" + "change_language_to" : "Alterar idioma para ${language}?", + + "paste" : "Colar", + "restore_from_seed_placeholder" : "Digite ou cole sua frase de código aqui", + "add_new_word" : "Adicionar nova palavra" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index bad3c13ed..351256c1d 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "Окончено", "change_language" : "Изменить язык", - "change_language_to" : "Изменить язык на ${language}?" + "change_language_to" : "Изменить язык на ${language}?", + + "paste" : "Вставить", + "restore_from_seed_placeholder" : "Введите или вставте код фразу вашего кошелька", + "add_new_word" : "Добавить новое слово" } \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 8e99ea071..cfef8358d 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -331,5 +331,9 @@ "trade_state_finished" : "已完成", "change_language" : "改變語言", - "change_language_to" : "將語言更改為 ${language}?" + "change_language_to" : "將語言更改為 ${language}?", + + "paste" : "糊", + "restore_from_seed_placeholder" : "请在此处输入或粘贴您的代码短语", + "add_new_word" : "添加新词" } \ No newline at end of file