diff --git a/assets/images/live_support.png b/assets/images/live_support.png new file mode 100644 index 000000000..89ad61f45 Binary files /dev/null and b/assets/images/live_support.png differ diff --git a/assets/images/more_links.png b/assets/images/more_links.png new file mode 100644 index 000000000..97891f3ad Binary files /dev/null and b/assets/images/more_links.png differ diff --git a/assets/images/wallet_guides.png b/assets/images/wallet_guides.png new file mode 100644 index 000000000..3f2d9f270 Binary files /dev/null and b/assets/images/wallet_guides.png differ diff --git a/cw_core/lib/wallet_info.dart b/cw_core/lib/wallet_info.dart index 210adb9a4..ddd15e851 100644 --- a/cw_core/lib/wallet_info.dart +++ b/cw_core/lib/wallet_info.dart @@ -1,8 +1,8 @@ +import 'package:hive/hive.dart'; +import 'package:cw_core/wallet_type.dart'; import 'dart:async'; import 'package:cw_core/address_info.dart'; import 'package:cw_core/hive_type_ids.dart'; -import 'package:cw_core/wallet_type.dart'; -import 'package:hive/hive.dart'; part 'wallet_info.g.dart'; diff --git a/cw_ethereum/lib/ethereum_wallet.dart b/cw_ethereum/lib/ethereum_wallet.dart index d8c236657..e36e1ee87 100644 --- a/cw_ethereum/lib/ethereum_wallet.dart +++ b/cw_ethereum/lib/ethereum_wallet.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'dart:math'; import 'package:cw_core/crypto_currency.dart'; +import 'package:cw_core/cake_hive.dart'; import 'package:cw_core/node.dart'; import 'package:cw_core/pathForWallet.dart'; import 'package:cw_core/pending_transaction.dart'; @@ -61,14 +62,11 @@ abstract class EthereumWalletBase {CryptoCurrency.eth: initialBalance ?? ERC20Balance(BigInt.zero)}), super(walletInfo) { this.walletInfo = walletInfo; - transactionHistory = EthereumTransactionHistory( - walletInfo: walletInfo, - password: password, - encryptionFileUtils: encryptionFileUtils, - ); + transactionHistory = EthereumTransactionHistory(walletInfo: walletInfo, password: password, encryptionFileUtils: encryptionFileUtils, +); - if (!Hive.isAdapterRegistered(Erc20Token.typeId)) { - Hive.registerAdapter(Erc20TokenAdapter()); + if (!CakeHive.isAdapterRegistered(Erc20Token.typeId)) { + CakeHive.registerAdapter(Erc20TokenAdapter()); } _sharedPrefs.complete(SharedPreferences.getInstance()); @@ -107,7 +105,7 @@ abstract class EthereumWalletBase Completer _sharedPrefs = Completer(); Future init() async { - erc20TokensBox = await Hive.openBox(Erc20Token.boxName); + erc20TokensBox = await CakeHive.openBox(Erc20Token.boxName); await walletAddresses.init(); await transactionHistory.init(); _ethPrivateKey = await getPrivateKey( diff --git a/lib/di.dart b/lib/di.dart index 9454461ab..42cda01ed 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1,6 +1,4 @@ - import 'package:cake_wallet/buy/onramper/onramper_buy_provider.dart'; -import 'package:cake_wallet/core/yat_service.dart'; import 'package:cake_wallet/entities/parse_address_from_domain.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cake_wallet/anonpay/anonpay_api.dart'; @@ -38,20 +36,22 @@ import 'package:cake_wallet/src/screens/ionia/cards/ionia_custom_redeem_page.dar import 'package:cake_wallet/src/screens/ionia/cards/ionia_gift_card_detail_page.dart'; import 'package:cake_wallet/src/screens/ionia/cards/ionia_more_options_page.dart'; import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart'; +import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart'; +import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart'; import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart'; -import 'package:cake_wallet/themes/theme_list.dart'; -import 'package:cake_wallet/utils/payment_request.dart'; -import 'package:cake_wallet/utils/responsive_layout_util.dart'; -import 'package:cake_wallet/view_model/dashboard/desktop_sidebar_view_model.dart'; import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart'; import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart'; import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart'; import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart'; import 'package:cake_wallet/src/screens/wallet/wallet_edit_page.dart'; +import 'package:cake_wallet/themes/theme_list.dart'; import 'package:cake_wallet/utils/device_info.dart'; import 'package:cake_wallet/store/anonpay/anonpay_transactions_store.dart'; +import 'package:cake_wallet/utils/payment_request.dart'; +import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/view_model/anon_invoice_page_view_model.dart'; import 'package:cake_wallet/view_model/anonpay_details_view_model.dart'; +import 'package:cake_wallet/view_model/dashboard/desktop_sidebar_view_model.dart'; import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart'; import 'package:cake_wallet/view_model/dashboard/market_place_view_model.dart'; import 'package:cake_wallet/view_model/dashboard/receive_option_view_model.dart'; @@ -864,6 +864,11 @@ Future setup({ getIt.registerFactory(() => SupportPage(getIt.get())); + getIt.registerFactory(() => + SupportChatPage(getIt.get(), secureStorage: getIt.get())); + + getIt.registerFactory(() => SupportOtherLinksPage(getIt.get())); + getIt.registerFactory(() { final wallet = getIt.get().wallet; diff --git a/lib/router.dart b/lib/router.dart index 5d5c64a53..c1ad52aa8 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -41,6 +41,8 @@ import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart'; import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart'; import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart'; import 'package:cake_wallet/src/screens/support/support_page.dart'; +import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart'; +import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart'; import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart'; @@ -468,9 +470,16 @@ Route createRoute(RouteSettings settings) { case Routes.support: return CupertinoPageRoute( - fullscreenDialog: true, builder: (_) => getIt.get()); + case Routes.supportLiveChat: + return CupertinoPageRoute( + builder: (_) => getIt.get()); + + case Routes.supportOtherLinks: + return CupertinoPageRoute( + fullscreenDialog: true, + builder: (_) => getIt.get()); case Routes.unspentCoinsList: return MaterialPageRoute( builder: (_) => getIt.get()); diff --git a/lib/routes.dart b/lib/routes.dart index 0d3f7e1f6..c46a93bb1 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -47,6 +47,8 @@ class Routes { static const editBackupPassword = '/edit_backup_passowrd'; static const restoreFromBackup = '/restore_from_backup'; static const support = '/support'; + static const supportLiveChat = '/support/live_chat'; + static const supportOtherLinks = '/support/other'; static const orderDetails = '/order_details'; static const preOrder = '/pre_order'; static const buyWebView = '/buy_web_view'; @@ -83,7 +85,6 @@ class Routes { static const anonPayInvoicePage = '/anon_pay_invoice_page'; static const anonPayReceivePage = '/anon_pay_receive_page'; static const anonPayDetailsPage = '/anon_pay_details_page'; - static const payfuraPage = '/pay_fura_page'; static const desktop_actions = '/desktop_actions'; static const transactionsPage = '/transactions_page'; static const setup_2faPage = '/setup_2fa_page'; diff --git a/lib/src/screens/dashboard/widgets/address_page.dart b/lib/src/screens/dashboard/widgets/address_page.dart index 6340238b6..3d4ab9421 100644 --- a/lib/src/screens/dashboard/widgets/address_page.dart +++ b/lib/src/screens/dashboard/widgets/address_page.dart @@ -1,5 +1,4 @@ import 'package:cake_wallet/themes/extensions/keyboard_theme.dart'; -import 'package:cake_wallet/themes/extensions/keyboard_theme.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/monero_accounts/monero_account_list_page.dart'; diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart index cc614453e..a8b8937ae 100644 --- a/lib/src/screens/new_wallet/new_wallet_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_page.dart @@ -212,7 +212,7 @@ class _WalletNameFormState extends State { fontSize: 18.0, fontWeight: FontWeight.w500, color: Theme.of(context).extension()!.hintTextColor), - hintText: S.of(context).repeate_wallet_password, + hintText: S.of(context).repeat_wallet_password, focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: Theme.of(context).extension()!.underlineColor, diff --git a/lib/src/screens/restore/wallet_restore_from_keys_form.dart b/lib/src/screens/restore/wallet_restore_from_keys_form.dart index e73e3ffa9..ba09aa12c 100644 --- a/lib/src/screens/restore/wallet_restore_from_keys_form.dart +++ b/lib/src/screens/restore/wallet_restore_from_keys_form.dart @@ -152,7 +152,7 @@ class WalletRestoreFromKeysFromState extends State { padding: EdgeInsets.only(top: 20.0), child: BaseTextFormField( controller: repeatedPasswordTextEditingController, - hintText: S.of(context).repeate_wallet_password, + hintText: S.of(context).repeat_wallet_password, obscureText: true))], Container(height: 20), _restoreFromKeysFormFields(), diff --git a/lib/src/screens/restore/wallet_restore_from_seed_form.dart b/lib/src/screens/restore/wallet_restore_from_seed_form.dart index 9c193daf3..a55fceb0d 100644 --- a/lib/src/screens/restore/wallet_restore_from_seed_form.dart +++ b/lib/src/screens/restore/wallet_restore_from_seed_form.dart @@ -148,7 +148,7 @@ class WalletRestoreFromSeedFormState extends State { obscureText: true), BaseTextFormField( controller: repeatedPasswordTextEditingController, - hintText: S.of(context).repeate_wallet_password, + hintText: S.of(context).repeat_wallet_password, obscureText: true)], if (widget.displayLanguageSelector) GestureDetector( diff --git a/lib/src/screens/support/support_page.dart b/lib/src/screens/support/support_page.dart index f13bcd1d5..883677832 100644 --- a/lib/src/screens/support/support_page.dart +++ b/lib/src/screens/support/support_page.dart @@ -1,51 +1,78 @@ -import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart'; -import 'package:cake_wallet/src/screens/settings/widgets/settings_link_provider_cell.dart'; -import 'package:cake_wallet/src/widgets/standard_list.dart'; -import 'package:cake_wallet/themes/extensions/support_page_theme.dart'; -import 'package:cake_wallet/view_model/settings/link_list_item.dart'; -import 'package:cake_wallet/view_model/settings/regular_list_item.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/src/screens/support/widgets/support_tiles.dart'; +import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/utils/device_info.dart'; import 'package:cake_wallet/view_model/support_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/generated/i18n.dart'; +import 'package:url_launcher/url_launcher.dart'; class SupportPage extends BasePage { SupportPage(this.supportViewModel); final SupportViewModel supportViewModel; + final imageLiveSupport = Image.asset('assets/images/live_support.png'); + final imageWalletGuides = Image.asset('assets/images/wallet_guides.png'); + final imageMoreLinks = Image.asset('assets/images/more_links.png'); + @override String get title => S.current.settings_support; + @override + AppBarStyle get appBarStyle => AppBarStyle.regular; + @override Widget body(BuildContext context) { - final iconColor = Theme.of(context).extension()!.iconColor; - // FIX-ME: Added `context` it was not used here before, maby bug ? - return Center( - child: ConstrainedBox( - constraints: BoxConstraints(maxWidth: 500), - child: SectionStandardList( - sectionCount: 1, - itemCounter: (int _) => supportViewModel.items.length, - itemBuilder: (_, index) { - final item = supportViewModel.items[index]; - - if (item is RegularListItem) { - return SettingsCellWithArrow(title: item.title, handler: item.handler); - } - - if (item is LinkListItem) { - return SettingsLinkProviderCell( - title: item.title, - icon: item.icon, - iconColor: item.hasIconColor ? iconColor : null, - link: item.link, - linkTitle: item.linkTitle); - } - - return Container(); - }), + return Container( + child: Center( + child: ConstrainedBox( + constraints: BoxConstraints(maxWidth: 330), + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 24), + child: SupportTile( + image: imageLiveSupport, + title: S.of(context).support_title_live_chat, + description: S.of(context).support_description_live_chat, + onPressed: () { + if (DeviceInfo.instance.isDesktop) { + _launchUrl(supportViewModel.fetchUrl()); + } else { + Navigator.pushNamed(context, Routes.supportLiveChat); + } + }, + ), + ), + Padding( + padding: EdgeInsets.only(top: 24), + child: SupportTile( + image: imageWalletGuides, + title: S.of(context).support_title_guides, + description: S.of(context).support_description_guides, + onPressed: () => _launchUrl(supportViewModel.guidesUrl), + ), + ), + Padding( + padding: EdgeInsets.only(top: 24), + child: SupportTile( + image: imageMoreLinks, + title: S.of(context).support_title_other_links, + description: S.of(context).support_description_other_links, + onPressed: () => Navigator.pushNamed(context, Routes.supportOtherLinks), + ), + ), + ], + ), + ), ), ); } + + void _launchUrl(String url) async { + try { + await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication); + } catch (e) {} + } } diff --git a/lib/src/screens/support_chat/support_chat_page.dart b/lib/src/screens/support_chat/support_chat_page.dart new file mode 100644 index 000000000..c7aa3a881 --- /dev/null +++ b/lib/src/screens/support_chat/support_chat_page.dart @@ -0,0 +1,38 @@ +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/support_chat/widgets/chatwoot_widget.dart'; +import 'package:cake_wallet/view_model/support_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:cake_wallet/core/secure_storage.dart'; + + +class SupportChatPage extends BasePage { + SupportChatPage(this.supportViewModel, {required this.secureStorage}); + + final SupportViewModel supportViewModel; + final SecureStorage secureStorage; + + @override + String get title => S.current.settings_support; + + @override + AppBarStyle get appBarStyle => AppBarStyle.regular; + + @override + Widget body(BuildContext context) => FutureBuilder( + future: getCookie(), + builder: (BuildContext context, AsyncSnapshot snapshot) { + print(snapshot.data); + if (snapshot.hasData) + return ChatwootWidget( + secureStorage, + supportUrl: supportViewModel.fetchUrl(authToken: snapshot.data!) + ); + return Container(); + }, + ); + + Future getCookie() async { + return await secureStorage.read(key: COOKIE_KEY) ?? ""; + } +} diff --git a/lib/src/screens/support_chat/widgets/chatwoot_widget.dart b/lib/src/screens/support_chat/widgets/chatwoot_widget.dart new file mode 100644 index 000000000..72e48c3ef --- /dev/null +++ b/lib/src/screens/support_chat/widgets/chatwoot_widget.dart @@ -0,0 +1,62 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:cake_wallet/core/secure_storage.dart'; + +const COOKIE_KEY = 'chatwootCookie'; + +class ChatwootWidget extends StatefulWidget { + ChatwootWidget(this.secureStorage, {required this.supportUrl}); + + final SecureStorage secureStorage; + final String supportUrl; + + @override + ChatwootWidgetState createState() => ChatwootWidgetState(); +} + +class ChatwootWidgetState extends State { + final GlobalKey _webViewkey = GlobalKey(); + + @override + Widget build(BuildContext context) => InAppWebView( + key: _webViewkey, + initialOptions: InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions(transparentBackground: true), + ), + initialUrlRequest: URLRequest(url: Uri.tryParse(widget.supportUrl)), + onWebViewCreated: (InAppWebViewController controller) { + controller.addWebMessageListener( + WebMessageListener( + jsObjectName: 'ReactNativeWebView', + onPostMessage: (String? message, Uri? sourceOrigin, bool isMainFrame, + JavaScriptReplyProxy replyProxy) { + final shortenedMessage = message?.substring(16); + if (shortenedMessage != null && isJsonString(shortenedMessage)) { + final parsedMessage = jsonDecode(shortenedMessage); + final eventType = parsedMessage["event"]; + if (eventType == 'loaded') { + final authToken = parsedMessage["config"]["authToken"]; + print(authToken); + storeCookie(authToken as String); + } + } + }, + ), + ); + }, + ); + + bool isJsonString(String str) { + try { + jsonDecode(str); + } catch (e) { + return false; + } + return true; + } + + Future storeCookie(String value) async => + await widget.secureStorage.write(key: COOKIE_KEY, value: value); +} diff --git a/model_generator.sh b/model_generator.sh index f45fe9637..2a06b11d0 100755 --- a/model_generator.sh +++ b/model_generator.sh @@ -1,8 +1,8 @@ #!/bin/sh -cd cw_core && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd .. -cd cw_monero && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd .. -cd cw_bitcoin && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd .. -cd cw_haven && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd .. -cd cw_ethereum && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd .. -flutter packages pub run build_runner build --delete-conflicting-outputs \ No newline at end of file +cd cw_core; flutter pub get; flutter packages pub run build_runner build --delete-conflicting-outputs; cd .. +cd cw_monero; flutter pub get; flutter packages pub run build_runner build --delete-conflicting-outputs; cd .. +cd cw_bitcoin; flutter pub get; flutter packages pub run build_runner build --delete-conflicting-outputs; cd .. +cd cw_haven; flutter pub get; flutter packages pub run build_runner build --delete-conflicting-outputs; cd .. +cd cw_ethereum; flutter pub get; flutter packages pub run build_runner build --delete-conflicting-outputs; cd .. +dart run build_runner build --delete-conflicting-outputs diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 10af91655..f5379bf93 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -696,5 +696,11 @@ "select_destination": ".ﻲﻃﺎﻴﺘﺣﻻﺍ ﺦﺴﻨﻟﺍ ﻒﻠﻣ ﺔﻬﺟﻭ ﺪﻳﺪﺤﺗ ءﺎﺟﺮﻟﺍ", "save_to_downloads": "ﺕﻼﻳﺰﻨﺘﻟﺍ ﻲﻓ ﻆﻔﺣ", "support_description_other_links": "انضم إلى مجتمعاتنا أو تصل إلينا شركائنا من خلال أساليب أخرى", - "auto_generate_subaddresses": "تلقائي توليد subddresses" + "auto_generate_subaddresses": "تلقائي توليد subddresses", + "invalid_password": "رمز مرور خاطئ", + "unlock": "الغاء القفل", + "enter_wallet_password": "أدخل كلمة مرور المحفظة", + "repeat_wallet_password": "كرر كلمة مرور المحفظة", + "wallet_password_is_empty": "كلمة مرور المحفظة فارغة. يجب ألا تكون كلمة مرور المحفظة فارغة", + "repeated_password_is_incorrect": "كلمة المرور المتكررة غير صحيحة. يرجى تكرار كلمة مرور المحفظة مرة أخرى." } diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index b558cd300..24be64085 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -692,5 +692,12 @@ "support_title_other_links": "Други връзки за поддръжка", "support_description_other_links": "Присъединете се към нашите общности или се свържете с нас нашите партньори чрез други методи", "select_destination": "Моля, изберете дестинация за архивния файл.", - "save_to_downloads": "Запазване в Изтегляния" -} + "save_to_downloads": "Запазване в Изтегляния", + "settings": "Настройки", + "invalid_password": "Невалидна парола", + "unlock": "Отключване", + "enter_wallet_password": "Въведете паролата за портфейла", + "repeat_wallet_password": "Повторете паролата на портфейла", + "wallet_password_is_empty": "Паролата за портфейл е празна. Паролата за портфейл не трябва да е празна", + "repeated_password_is_incorrect": "Многократната парола е неправилна. Моля, повторете отново паролата за портфейла." +} \ No newline at end of file diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 0d2115ab3..b89804ebe 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -685,5 +685,11 @@ "support_title_other_links": "Další odkazy na podporu", "support_description_other_links": "Připojte se k našim komunitám nebo se k nám oslovte další metody", "select_destination": "Vyberte cíl pro záložní soubor.", - "save_to_downloads": "Uložit do Stažených souborů" -} + "save_to_downloads": "Uložit do Stažených souborů", + "invalid_password": "Neplatné heslo", + "unlock": "Odemknout", + "enter_wallet_password": "Zadejte heslo peněženky", + "repeat_wallet_password": "Opakujte heslo peněženky", + "wallet_password_is_empty": "Heslo peněženky je prázdné. Heslo peněženky by nemělo být prázdné", + "repeated_password_is_incorrect": "Opakované heslo je nesprávné. Znovu opakujte heslo peněženky." +} \ No newline at end of file diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 5a795e35d..749514556 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -647,7 +647,7 @@ "matrix_green_dark_theme": "Matrix Green Dark Theme", "monero_light_theme": "Monero Light-Thema", "auto_generate_subaddresses": "Unteradressen automatisch generieren", - "cake_2fa_preset" : "Cake 2FA-Voreinstellung", + "cake_2fa_preset": "Cake 2FA-Voreinstellung", "narrow": "Eng", "normal": "Normal", "aggressive": "Übereifrig", @@ -693,5 +693,11 @@ "support_title_other_links": "Andere Support-Links", "support_description_other_links": "Treten Sie unseren Communities bei oder erreichen Sie uns oder unsere Partner über andere Methoden", "select_destination": "Bitte wählen Sie das Ziel für die Sicherungsdatei aus.", - "save_to_downloads": "Unter „Downloads“ speichern" + "save_to_downloads": "Unter „Downloads“ speichern", + "invalid_password": "Ungültiges Passwort", + "unlock": "Freischalten", + "enter_wallet_password": "Geben Sie das Brieftaschenkennwort ein", + "repeat_wallet_password": "Wiederholen Sie das Brieftaschenkennwort", + "wallet_password_is_empty": "Brieftaschenkennwort ist leer. Brieftaschenkennwort sollte nicht leer sein", + "repeated_password_is_incorrect": "Wiederholtes Passwort ist falsch. Bitte wiederholen Sie das Brieftaschenkennwort erneut." } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index c56fd5e38..b869253f7 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Other support links", "support_description_other_links": "Join our communities or reach us our our partners through other methods", "select_destination": "Please select destination for the backup file.", - "save_to_downloads": "Save to Downloads" -} + "save_to_downloads": "Save to Downloads", + "invalid_password": "Invalid password", + "unlock": "Unlock", + "enter_wallet_password": "Enter the wallet password", + "repeat_wallet_password": "Repeat the wallet password", + "wallet_password_is_empty": "Wallet password is empty. Wallet password should not be empty", + "repeated_password_is_incorrect": "Repeated password is incorrect. Please repeat the wallet password again." +} \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 59702382b..cee8f66c7 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Otros enlaces de soporte", "support_description_other_links": "Únase a nuestras comunidades o comuníquese con nosotros nuestros socios a través de otros métodos", "select_destination": "Seleccione el destino del archivo de copia de seguridad.", - "save_to_downloads": "Guardar en Descargas" -} + "save_to_downloads": "Guardar en Descargas", + "invalid_password": "Contraseña invalida", + "unlock": "desbloquear", + "enter_wallet_password": "Ingrese la contraseña de la billetera", + "repeat_wallet_password": "Repita la contraseña de billetera", + "wallet_password_is_empty": "La contraseña de billetera está vacía. La contraseña de la billetera no debe estar vacía", + "repeated_password_is_incorrect": "La contraseña repetida es incorrecta. Repita la contraseña de la billetera nuevamente." +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 13de4ff95..0b63c1c38 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Autres liens d'assistance", "support_description_other_links": "Rejoignez nos communautés ou contactez-nous nos partenaires à travers d'autres méthodes", "select_destination": "Veuillez sélectionner la destination du fichier de sauvegarde.", - "save_to_downloads": "Enregistrer dans les téléchargements" -} + "save_to_downloads": "Enregistrer dans les téléchargements", + "invalid_password": "Mot de passe incorrect", + "unlock": "Ouvrir", + "enter_wallet_password": "Entrez le mot de passe du portefeuille", + "repeat_wallet_password": "Répétez le mot de passe du portefeuille", + "wallet_password_is_empty": "Le mot de passe du portefeuille est vide. Le mot de passe du portefeuille ne doit pas être vide", + "repeated_password_is_incorrect": "Le mot de passe répété est incorrect. Veuillez répéter le mot de passe du portefeuille." +} \ No newline at end of file diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index 528ea7c58..27b299506 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -671,5 +671,11 @@ "support_title_other_links": "Sauran hanyoyin tallafi", "support_description_other_links": "Kasance tare da al'ummominmu ko kuma ka kai mu abokanmu ta hanyar wasu hanyoyi", "select_destination": "Da fatan za a zaɓi wurin da za a yi wa madadin fayil ɗin.", - "save_to_downloads": "Ajiye zuwa Zazzagewa" -} + "save_to_downloads": "Ajiye zuwa Zazzagewa", + "invalid_password": "Kalmar sirri mara inganci", + "unlock": "Buɗe", + "enter_wallet_password": "Shigar da kalmar sirri ta walat", + "repeat_wallet_password": "Maimaita kalmar sirri", + "wallet_password_is_empty": "Alamar Wallet babu komai. Al'adun Wallet bai zama komai ba", + "repeated_password_is_incorrect": "Maimaita kalmar sirri ba daidai ba ce. Da fatan za a sake maimaita kalmar sirri." +} \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index fee7465a8..7875bcbf6 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -693,5 +693,11 @@ "support_title_other_links": "अन्य समर्थन लिंक", "support_description_other_links": "हमारे समुदायों में शामिल हों या अन्य तरीकों के माध्यम से हमारे साथी तक पहुंचें", "select_destination": "कृपया बैकअप फ़ाइल के लिए गंतव्य का चयन करें।", - "save_to_downloads": "डाउनलोड में सहेजें" -} + "save_to_downloads": "डाउनलोड में सहेजें", + "invalid_password": "अवैध पासवर्ड", + "unlock": "अनलॉक", + "enter_wallet_password": "वॉलेट पासवर्ड दर्ज करें", + "repeat_wallet_password": "वॉलेट पासवर्ड दोहराएं", + "wallet_password_is_empty": "वॉलेट पासवर्ड खाली है। वॉलेट पासवर्ड खाली नहीं होना चाहिए", + "repeated_password_is_incorrect": "बार -बार पासवर्ड गलत है। कृपया फिर से वॉलेट पासवर्ड दोहराएं।" +} \ No newline at end of file diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index de9526a1c..fb78d5131 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Ostale veze za podršku", "support_description_other_links": "Pridružite se našim zajednicama ili nam dosegnu naše partnere drugim metodama", "select_destination": "Odaberite odredište za datoteku sigurnosne kopije.", - "save_to_downloads": "Spremi u Preuzimanja" -} + "save_to_downloads": "Spremi u Preuzimanja", + "invalid_password": "Netočna zaporka", + "unlock": "Otključati", + "enter_wallet_password": "Unesite lozinku za novčanik", + "repeat_wallet_password": "Ponovite lozinku za novčanik", + "wallet_password_is_empty": "Lozinka za novčanik je prazna. Lozinka za novčanik ne bi trebala biti prazna", + "repeated_password_is_incorrect": "Ponovljena lozinka je netočna. Molimo ponovite lozinku za novčanik." +} \ No newline at end of file diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 75f038f4a..54aad0438 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -682,5 +682,11 @@ "support_title_other_links": "Tautan dukungan lainnya", "support_description_other_links": "Bergabunglah dengan komunitas kami atau hubungi kami mitra kami melalui metode lain", "select_destination": "Silakan pilih tujuan untuk file cadangan.", - "save_to_downloads": "Simpan ke Unduhan" -} + "save_to_downloads": "Simpan ke Unduhan", + "invalid_password": "Kata sandi salah", + "unlock": "Membuka kunci", + "enter_wallet_password": "Masukkan Kata Sandi Dompet", + "repeat_wallet_password": "Ulangi Kata Sandi Dompet", + "wallet_password_is_empty": "Kata sandi dompet kosong. Kata sandi dompet tidak boleh kosong", + "repeated_password_is_incorrect": "Kata sandi yang diulang tidak benar. Harap ulangi kata sandi dompet lagi." +} \ No newline at end of file diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index ef62d901b..72bed454c 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Altri collegamenti di supporto", "support_description_other_links": "Unisciti alle nostre comunità o raggiungici i nostri partner attraverso altri metodi", "select_destination": "Seleziona la destinazione per il file di backup.", - "save_to_downloads": "Salva in Download" -} + "save_to_downloads": "Salva in Download", + "invalid_password": "Password non valida", + "unlock": "Sbloccare", + "enter_wallet_password": "Immettere la password del portafoglio", + "repeat_wallet_password": "Ripeti la password del portafoglio", + "wallet_password_is_empty": "La password del portafoglio è vuota. La password del portafoglio non dovrebbe essere vuota", + "repeated_password_is_incorrect": "La password ripetuta non è corretta. Si prega di ripetere di nuovo la password del portafoglio." +} \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index cfb653dbb..3b5f3688b 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -693,5 +693,11 @@ "support_description_other_links": "私たちのコミュニティに参加するか、他の方法を通して私たちのパートナーに連絡してください", "select_destination": "バックアップファイルの保存先を選択してください。", "save_to_downloads": "ダウンロードに保存", - "auto_generate_subaddresses": "Autoはサブアドレスを生成します" + "auto_generate_subaddresses": "Autoはサブアドレスを生成します", + "invalid_password": "無効なパスワード", + "unlock": "ロックを解除します", + "enter_wallet_password": "ウォレットパスワードを入力します", + "repeat_wallet_password": "ウォレットパスワードを繰り返します", + "wallet_password_is_empty": "ウォレットパスワードは空です。ウォレットのパスワードは空にしてはいけません", + "repeated_password_is_incorrect": "繰り返しパスワードが正しくありません。ウォレットのパスワードをもう一度繰り返してください。" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 80197ca70..f8c9d2a5d 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -693,5 +693,11 @@ "support_description_other_links": "다른 방법을 통해 커뮤니티에 가입하거나 파트너에게 연락하십시오.", "select_destination": "백업 파일의 대상을 선택하십시오.", "save_to_downloads": "다운로드에 저장", - "auto_generate_subaddresses": "자동 생성 서브 아드 드레스" + "auto_generate_subaddresses": "자동 생성 서브 아드 드레스", + "invalid_password": "유효하지 않은 비밀번호", + "unlock": "터놓다", + "enter_wallet_password": "지갑 암호를 입력하십시오", + "repeat_wallet_password": "지갑 암호를 반복하십시오", + "wallet_password_is_empty": "지갑 암호는 비어 있습니다. 지갑 암호는 비어 있지 않아야합니다", + "repeated_password_is_incorrect": "반복 된 비밀번호가 올바르지 않습니다. 지갑 암호를 다시 반복하십시오." } diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 519866937..85c06ebce 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -691,5 +691,11 @@ "support_description_other_links": "ကျွန်ုပ်တို့၏လူမှုအသိုင်းအဝိုင်းများသို့ 0 င်ရောက်ပါ", "select_destination": "အရန်ဖိုင်အတွက် ဦးတည်ရာကို ရွေးပါ။", "save_to_downloads": "ဒေါင်းလုဒ်များထံ သိမ်းဆည်းပါ။", - "auto_generate_subaddresses": "အော်တို Generate Subaddresses" + "auto_generate_subaddresses": "အော်တို Generate Subaddresses", + "invalid_password": "မမှန်ကန်သောစကားဝှက်", + "unlock": "သော့ဖွင့်", + "enter_wallet_password": "ပိုက်ဆံအိတ်စကားဝှက်ကိုရိုက်ထည့်ပါ", + "repeat_wallet_password": "ပိုက်ဆံအိတ်စကားဝှက်ကိုပြန်လုပ်ပါ", + "wallet_password_is_empty": "ပိုက်ဆံအိတ်စကားဝှက်သည်ဗလာဖြစ်သည်။ ပိုက်ဆံအိတ်စကားဝှက်သည်အချည်းနှီးဖြစ်သင့်သည်", + "repeated_password_is_incorrect": "ထပ်ခါတလဲလဲစကားဝှက်မမှန်ကန်ပါ ကျေးဇူးပြုပြီးပိုက်ဆံအိတ်စကားဝှက်ကိုပြန်လုပ်ပါ။" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 4c7f8b298..e589ea2b2 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Andere ondersteuningslinks", "support_description_other_links": "Word lid van onze gemeenschappen of bereik ons ​​onze partners via andere methoden", "select_destination": "Selecteer de bestemming voor het back-upbestand.", - "save_to_downloads": "Opslaan in downloads" -} + "save_to_downloads": "Opslaan in downloads", + "invalid_password": "Ongeldig wachtwoord", + "unlock": "Ontgrendelen", + "enter_wallet_password": "Voer het Wallet -wachtwoord in", + "repeat_wallet_password": "Herhaal het Wallet -wachtwoord", + "wallet_password_is_empty": "Wallet -wachtwoord is leeg. Wallet -wachtwoord mag niet leeg zijn", + "repeated_password_is_incorrect": "Herhaald wachtwoord is onjuist. Herhaal het Wallet -wachtwoord opnieuw." +} \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index e04cd108a..da5e8ba35 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Inne linki wsparcia", "support_description_other_links": "Dołącz do naszych społeczności lub skontaktuj się z nami naszymi partnerami za pomocą innych metod", "select_destination": "Wybierz miejsce docelowe dla pliku kopii zapasowej.", - "save_to_downloads": "Zapisz w Pobranych" -} + "save_to_downloads": "Zapisz w Pobranych", + "invalid_password": "Nieprawidłowe hasło", + "unlock": "Odblokować", + "enter_wallet_password": "Wprowadź hasło portfela", + "repeat_wallet_password": "Powtórz hasło portfela", + "wallet_password_is_empty": "Hasło portfela jest puste. Hasło portfela nie powinno być puste", + "repeated_password_is_incorrect": "Powtarzane hasło jest nieprawidłowe. Powtórz ponownie hasło portfela." +} \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index c0cfbefe0..682099d71 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -692,5 +692,11 @@ "support_title_other_links": "Outros links de suporte", "support_description_other_links": "Junte -se às nossas comunidades ou chegue a nós nossos parceiros por meio de outros métodos", "select_destination": "Selecione o destino para o arquivo de backup.", - "save_to_downloads": "Salvar em Downloads" -} + "save_to_downloads": "Salvar em Downloads", + "invalid_password": "Senha inválida", + "unlock": "Desbloquear", + "enter_wallet_password": "Digite a senha da carteira", + "repeat_wallet_password": "Repita a senha da carteira", + "wallet_password_is_empty": "A senha da carteira está vazia. A senha da carteira não deve estar vazia", + "repeated_password_is_incorrect": "A senha repetida está incorreta. Repita a senha da carteira novamente." +} \ No newline at end of file diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 0c542bee5..8ccedcd38 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -694,5 +694,11 @@ "support_description_other_links": "Присоединяйтесь к нашим сообществам или охватите нас наших партнеров с помощью других методов", "select_destination": "Пожалуйста, выберите место для файла резервной копии.", "save_to_downloads": "Сохранить в загрузках", - "auto_generate_subaddresses": "Авто генерируйте Subaddresses" + "auto_generate_subaddresses": "Авто генерируйте Subaddresses", + "invalid_password": "Неверный пароль", + "unlock": "Разблокировать", + "enter_wallet_password": "Введите пароль кошелька", + "repeat_wallet_password": "Повторите пароль кошелька", + "wallet_password_is_empty": "Пароль кошелька пуст. Пароль кошелька не должен быть пустым", + "repeated_password_is_incorrect": "Повторный пароль неверен. Пожалуйста, повторите пароль кошелька снова." } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 4a45f305f..abe6994fe 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -691,5 +691,11 @@ "support_description_other_links": "เข้าร่วมชุมชนของเราหรือเข้าถึงเราพันธมิตรของเราผ่านวิธีการอื่น ๆ", "select_destination": "โปรดเลือกปลายทางสำหรับไฟล์สำรอง", "save_to_downloads": "บันทึกลงดาวน์โหลด", - "auto_generate_subaddresses": "Auto สร้าง subaddresses" + "auto_generate_subaddresses": "Auto สร้าง subaddresses", + "invalid_password": "รหัสผ่านไม่ถูกต้อง", + "unlock": "ปลดล็อค", + "enter_wallet_password": "ป้อนรหัสผ่านกระเป๋าเงิน", + "repeat_wallet_password": "ทำซ้ำรหัสผ่านกระเป๋าเงิน", + "wallet_password_is_empty": "รหัสผ่านกระเป๋าเงินว่างเปล่า รหัสผ่านกระเป๋าเงินไม่ควรว่างเปล่า", + "repeated_password_is_incorrect": "รหัสผ่านซ้ำไม่ถูกต้อง โปรดทำซ้ำรหัสผ่านกระเป๋าเงินอีกครั้ง" } diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index acb12c50b..194afa89e 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -691,5 +691,11 @@ "support_title_other_links": "Diğer destek bağlantıları", "support_description_other_links": "Topluluklarımıza katılın veya ortaklarımıza diğer yöntemlerle bize ulaşın", "select_destination": "Lütfen yedekleme dosyası için hedef seçin.", - "save_to_downloads": "İndirilenlere Kaydet" -} + "save_to_downloads": "İndirilenlere Kaydet", + "invalid_password": "Geçersiz şifre", + "unlock": "Kilidini aç", + "enter_wallet_password": "Cüzdan şifresini girin", + "repeat_wallet_password": "Cüzdan şifresini tekrarlayın", + "wallet_password_is_empty": "Cüzdan şifresi boş. Cüzdan şifresi boş olmamalı", + "repeated_password_is_incorrect": "Tekrarlanan şifre yanlış. Lütfen cüzdan şifresini tekrarlayın." +} \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 42c3b50ce..f20d45a00 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -693,5 +693,11 @@ "support_title_other_links": "Інші посилання на підтримку", "support_description_other_links": "Приєднуйтесь до наших спільнот або досягайте нас нашими партнерами іншими методами", "select_destination": "Виберіть місце призначення для файлу резервної копії.", - "save_to_downloads": "Зберегти до завантажень" -} + "save_to_downloads": "Зберегти до завантажень", + "invalid_password": "Недійсний пароль", + "unlock": "Розблокувати", + "enter_wallet_password": "Введіть пароль гаманця", + "repeat_wallet_password": "Повторіть пароль гаманця", + "wallet_password_is_empty": "Пароль гаманця порожній. Пароль гаманця не повинен бути порожнім", + "repeated_password_is_incorrect": "Повторний пароль невірний. Будь ласка, повторіть пароль гаманця ще раз." +} \ No newline at end of file diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index dd1213959..751cee7b6 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -686,5 +686,11 @@ "support_description_other_links": "ہماری برادریوں میں شامل ہوں یا دوسرے طریقوں سے ہمارے شراکت داروں تک پہنچیں", "select_destination": "۔ﮟﯾﺮﮐ ﺏﺎﺨﺘﻧﺍ ﺎﮐ ﻝﺰﻨﻣ ﮯﯿﻟ ﮯﮐ ﻞﺋﺎﻓ ﭖﺍ ﮏﯿﺑ ﻡﺮﮐ ﮦﺍﺮﺑ", "save_to_downloads": "۔ﮟﯾﺮﮐ ﻅﻮﻔﺤﻣ ﮟﯿﻣ ﺯﮈﻮﻟ ﻥﺅﺍﮈ", - "auto_generate_subaddresses": "آٹو سب ایڈریس تیار کرتا ہے" + "auto_generate_subaddresses": "آٹو سب ایڈریس تیار کرتا ہے", + "invalid_password": "غلط پاسورڈ", + "unlock": "غیر مقفل", + "enter_wallet_password": "پرس کا پاس ورڈ درج کریں", + "repeat_wallet_password": "بٹوے کا پاس ورڈ دہرائیں", + "wallet_password_is_empty": "پرس کا پاس ورڈ خالی ہے۔ پرس کا پاس ورڈ خالی نہیں ہونا چاہئے", + "repeated_password_is_incorrect": "بار بار پاس ورڈ غلط ہے۔ براہ کرم دوبارہ پرس کا پاس ورڈ دہرائیں۔" } diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 8cd2f6ebd..59b53ced0 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -681,5 +681,11 @@ "monero_light_theme": "Monero Light Akori", "select_destination": "Jọwọ yan ibi ti o nlo fun faili afẹyinti.", "save_to_downloads": "Fipamọ si Awọn igbasilẹ", - "auto_generate_subaddresses": "Aṣiṣe Ibi-Afọwọkọ" + "auto_generate_subaddresses": "Aṣiṣe Ibi-Afọwọkọ", + "invalid_password": "Ọrọ igbaniwọle ti ko wulo", + "unlock": "Sisalẹ", + "enter_wallet_password": "Tẹ ọrọ igbaniwọle apamọwọ", + "repeat_wallet_password": "Tun ọrọ igbaniwọle apamọwọ naa", + "wallet_password_is_empty": "Ọrọ igbaniwọle apamọwọ ti ṣofo. Ọrọ igbaniwọle apamọwọ ko yẹ ki o ṣofo", + "repeated_password_is_incorrect": "Ọrọ igbaniwọle tun jẹ aṣiṣe. Jọwọ tun ọrọigbaniwọle apamọwọ lẹẹkansi." } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 4dd34e1de..17406d30f 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -692,5 +692,11 @@ "monero_light_theme": "门罗币浅色主题", "select_destination": "请选择备份文件的目的地。", "save_to_downloads": "保存到下载", - "auto_generate_subaddresses": "自动生成子辅助" + "auto_generate_subaddresses": "自动生成子辅助", + "invalid_password": "无效的密码", + "unlock": "开锁", + "enter_wallet_password": "输入钱包密码", + "repeat_wallet_password": "重复钱包密码", + "wallet_password_is_empty": "钱包密码为空。钱包密码不应为空", + "repeated_password_is_incorrect": "重复密码不正确。请再次重复钱包密码。" }