diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 18ad16e4b..272f7bbee 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -11,3 +11,4 @@ Please include a summary of the changes and which issue is fixed / feature is ad - [ ] Format code - [ ] Look for code duplication - [ ] Clear naming for variables and methods +- [ ] Manual tests in accessibility mode (TalkBack on Android) passed diff --git a/cw_core/lib/monero_wallet_utils.dart b/cw_core/lib/monero_wallet_utils.dart index 8a4990f78..9682784f9 100644 --- a/cw_core/lib/monero_wallet_utils.dart +++ b/cw_core/lib/monero_wallet_utils.dart @@ -19,15 +19,15 @@ Future backupWalletFiles(String name) async { final newKeysFilePath = backupFileName(keysFile.path); final newAddressListFilePath = backupFileName(addressListFile.path); - if (cacheFile.existsSync()) { + if (cacheFile.existsSync() && !File(newCacheFilePath).existsSync()) { await cacheFile.copy(newCacheFilePath); } - if (keysFile.existsSync()) { + if (keysFile.existsSync() && !File(newKeysFilePath).existsSync()) { await keysFile.copy(newKeysFilePath); } - if (addressListFile.existsSync()) { + if (addressListFile.existsSync() && !File(newAddressListFilePath).existsSync()) { await addressListFile.copy(newAddressListFilePath); } } @@ -83,10 +83,13 @@ Future backupWalletFilesExists(String name) async { Future removeCache(String name) async { final path = await pathForWallet(name: name, type: WalletType.monero); final cacheFile = File(path); - + final backgroundCacheFile = File(path + ".background"); if (cacheFile.existsSync()) { cacheFile.deleteSync(); } + if (backgroundCacheFile.existsSync()) { + backgroundCacheFile.deleteSync(); + } } Future restoreOrResetWalletFiles(String name) async { @@ -94,7 +97,8 @@ Future restoreOrResetWalletFiles(String name) async { if (backupsExists) { await removeCache(name); - + // TODO(mrcyjanek): is this needed? + // If we remove cache then wallet should be restored from .keys file. await restoreWalletFiles(name); } } diff --git a/cw_decred/lib/wallet.dart b/cw_decred/lib/wallet.dart index a1f876488..337856e34 100644 --- a/cw_decred/lib/wallet.dart +++ b/cw_decred/lib/wallet.dart @@ -222,7 +222,7 @@ abstract class DecredWalletBase extends WalletBase checkSync() async { final syncStatusJSON = await _libwallet.syncStatus(walletInfo.name); - final decoded = json.decode(syncStatusJSON); + final decoded = json.decode(syncStatusJSON.isEmpty ? "{}" : syncStatusJSON); final syncStatusCode = decoded["syncstatuscode"] ?? 0; // final syncStatusStr = decoded["syncstatus"] ?? ""; diff --git a/cw_solana/lib/solana_client.dart b/cw_solana/lib/solana_client.dart index 1bc93f6a3..fc14dbbbd 100644 --- a/cw_solana/lib/solana_client.dart +++ b/cw_solana/lib/solana_client.dart @@ -254,8 +254,9 @@ class SolanaWalletClient { final receiver = message.accountKeys[instruction.accounts[1]].address; String? tokenSymbol = splTokenSymbol; + if (tokenSymbol == null && mintAddress != null) { - final token = await fetchSPLTokenInfo(mintAddress); + final token = await getTokenInfo(mintAddress); tokenSymbol = token?.symbol; } @@ -288,9 +289,9 @@ class SolanaWalletClient { int? splTokenDecimal, Commitment? commitment, SolAddress? walletAddress, + required void Function(List) onUpdate, }) async { List transactions = []; - try { final signatures = await _provider!.request( SolanaRequestGetSignaturesForAddress( @@ -299,10 +300,11 @@ class SolanaWalletClient { ), ); - final List transactionDetails = []; + // The maximum concurrent batch size. + const int batchSize = 10; - for (int i = 0; i < signatures.length; i += 20) { - final batch = signatures.skip(i).take(20).toList(); // Get the next 20 signatures + for (int i = 0; i < signatures.length; i += batchSize) { + final batch = signatures.skip(i).take(batchSize).toList(); final batchResponses = await Future.wait(batch.map((signature) async { try { @@ -314,30 +316,31 @@ class SolanaWalletClient { ), ); } catch (e) { - printV("Error fetching transaction: $e"); + // printV("Error fetching transaction: $e"); return null; } })); - transactionDetails.addAll(batchResponses.whereType()); + final versionedBatchResponses = batchResponses.whereType(); - // to avoid reaching the node RPS limit - if (i + 20 < signatures.length) { + final parsedTransactionsFutures = versionedBatchResponses.map((tx) => parseTransaction( + txResponse: tx, + splTokenSymbol: splTokenSymbol, + walletAddress: walletAddress?.address ?? address.address, + )); + + final parsedTransactions = await Future.wait(parsedTransactionsFutures); + + transactions.addAll(parsedTransactions.whereType().toList()); + + // Calling the callback after each batch is processed, therefore passing the current list of transactions. + onUpdate(List.from(transactions)); + + if (i + batchSize < signatures.length) { await Future.delayed(const Duration(milliseconds: 500)); } } - for (final tx in transactionDetails) { - final parsedTx = await parseTransaction( - txResponse: tx, - splTokenSymbol: splTokenSymbol, - walletAddress: walletAddress?.address ?? address.address, - ); - if (parsedTx != null) { - transactions.add(parsedTx); - } - } - return transactions; } catch (err, s) { printV('Error fetching transactions: $err \n$s'); @@ -350,6 +353,7 @@ class SolanaWalletClient { required String splTokenSymbol, required int splTokenDecimal, required SolanaPrivateKey privateKey, + required void Function(List) onUpdate, }) async { ProgramDerivedAddress? associatedTokenAccount; final ownerWalletAddress = privateKey.publicKey().toAddress(); @@ -373,11 +377,26 @@ class SolanaWalletClient { splTokenSymbol: splTokenSymbol, splTokenDecimal: splTokenDecimal, walletAddress: ownerWalletAddress, + onUpdate: onUpdate, ); return tokenTransactions; } + final Map tokenInfoCache = {}; + + Future getTokenInfo(String mintAddress) async { + if (tokenInfoCache.containsKey(mintAddress)) { + return tokenInfoCache[mintAddress]; + } else { + final token = await fetchSPLTokenInfo(mintAddress); + if (token != null) { + tokenInfoCache[mintAddress] = token; + } + return token; + } + } + Future fetchSPLTokenInfo(String mintAddress) async { final programAddress = MetaplexTokenMetaDataProgramUtils.findMetadataPda(mint: SolAddress(mintAddress)); @@ -747,9 +766,7 @@ class SolanaWalletClient { } catch (e) { associatedRecipientAccount = null; - throw SolanaCreateAssociatedTokenAccountException( - 'Error fetching recipient associated token account: ${e.toString()}', - ); + throw SolanaCreateAssociatedTokenAccountException(e.toString()); } if (associatedRecipientAccount == null) { diff --git a/cw_solana/lib/solana_wallet.dart b/cw_solana/lib/solana_wallet.dart index 4ec98eba0..37afe029c 100644 --- a/cw_solana/lib/solana_wallet.dart +++ b/cw_solana/lib/solana_wallet.dart @@ -166,10 +166,10 @@ abstract class SolanaWalletBase extends WalletBase> fetchTransactions() async => {}; + void updateTransactions(List updatedTx) { + _addTransactionsToTransactionHistory(updatedTx); + } + /// Fetches the native SOL transactions linked to the wallet Public Key Future _updateNativeSOLTransactions() async { - final transactions = await _client.fetchTransactions(_solanaPublicKey.toAddress()); + final transactions = + await _client.fetchTransactions(_solanaPublicKey.toAddress(), onUpdate: updateTransactions); await _addTransactionsToTransactionHistory(transactions); } @@ -312,6 +317,7 @@ abstract class SolanaWalletBase extends WalletBase on Iterable { + T? firstWhereOrNull(bool Function(T element) test) { + try { + return firstWhere(test); + } catch (e) { + return null; + } + } +} \ No newline at end of file diff --git a/lib/di.dart b/lib/di.dart index 75114d7a1..7303c1ac8 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -15,7 +15,6 @@ import 'package:cake_wallet/core/backup_service_v3.dart'; import 'package:cake_wallet/core/new_wallet_arguments.dart'; import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart'; import 'package:cake_wallet/core/auth_service.dart'; -import 'package:cake_wallet/core/backup_service.dart'; import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/core/new_wallet_type_arguments.dart'; import 'package:cake_wallet/core/secure_storage.dart'; @@ -1238,8 +1237,7 @@ Future setup({ ); }); - getIt.registerFactoryParam( - (seedPhraseLength, _) => PreSeedPage(seedPhraseLength)); + getIt.registerFactory(() => PreSeedPage()); getIt.registerFactoryParam( (content, _) => TransactionSuccessPage(content: content)); diff --git a/lib/entities/wallet_manager.dart b/lib/entities/wallet_manager.dart index 8bcabcaf2..09b764289 100644 --- a/lib/entities/wallet_manager.dart +++ b/lib/entities/wallet_manager.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:cake_wallet/entities/hash_wallet_identifier.dart'; import 'package:cake_wallet/entities/wallet_group.dart'; import 'package:cw_core/wallet_base.dart'; @@ -33,7 +35,11 @@ class WalletManager { } // Fallback to old logic - return walletInfo.parentAddress ?? walletInfo.address; + final address = walletInfo.parentAddress ?? walletInfo.address; + if (address.isEmpty) { + return Random().nextInt(100000).toString(); + } + return address; } WalletGroup _getOrCreateGroup(String groupKey) { diff --git a/lib/exchange/trade_state.dart b/lib/exchange/trade_state.dart index f63b41e5d..e1c4470b4 100644 --- a/lib/exchange/trade_state.dart +++ b/lib/exchange/trade_state.dart @@ -7,6 +7,7 @@ class TradeState extends EnumerableItem with Serializable { bool operator ==(Object other) => other is TradeState && other.raw == raw; static const pending = TradeState(raw: 'pending', title: 'Pending'); + static const awaiting = TradeState(raw: 'awaiting', title: 'Awaiting'); static const confirming = TradeState(raw: 'confirming', title: 'Confirming'); static const trading = TradeState(raw: 'trading', title: 'Trading'); static const traded = TradeState(raw: 'traded', title: 'Traded'); @@ -134,6 +135,8 @@ class TradeState extends EnumerableItem with Serializable { return success; case 'expired': return expired; + case 'awaiting': + return awaiting; default: throw Exception('Unexpected token: $raw in TradeState deserialize'); } diff --git a/lib/router.dart b/lib/router.dart index 28a737ce6..de7b39b96 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -9,7 +9,6 @@ import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/qr_view_data.dart'; import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart'; -import 'package:cake_wallet/entities/wallet_nft_response.dart'; import 'package:cake_wallet/exchange/trade.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; @@ -141,7 +140,6 @@ import 'package:cw_core/wallet_type.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:cake_wallet/src/screens/cake_pay/cake_pay.dart'; import 'src/screens/buy/buy_sell_page.dart'; import 'src/screens/dashboard/pages/nft_import_page.dart'; @@ -620,13 +618,10 @@ Route createRoute(RouteSettings settings) { return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.preSeedPage: - return MaterialPageRoute( - builder: (_) => getIt.get(param1: settings.arguments as int)); + return MaterialPageRoute(builder: (_) => getIt.get()); case Routes.walletGroupExistingSeedDescriptionPage: - return MaterialPageRoute( - builder: (_) => WalletGroupExistingSeedDescriptionPage( - seedPhraseWordsLength: settings.arguments as int)); + return MaterialPageRoute(builder: (_) => WalletGroupExistingSeedDescriptionPage()); case Routes.transactionSuccessPage: return MaterialPageRoute( diff --git a/lib/src/screens/backup/backup_page.dart b/lib/src/screens/backup/backup_page.dart index 408fad2d3..12c8594ae 100644 --- a/lib/src/screens/backup/backup_page.dart +++ b/lib/src/screens/backup/backup_page.dart @@ -3,10 +3,9 @@ import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/src/widgets/trail_button.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:cake_wallet/utils/share_util.dart'; @@ -76,7 +75,9 @@ class BackupPage extends BasePage { Navigator.of(context).pushNamed(Routes.editBackupPassword), text: S.of(context).change_password, color: Theme.of(context).cardColor, - textColor: Colors.white, + textColor: Theme.of(context) + .extension()! + .buttonTextColor, ), SizedBox(height: 10), Observer( diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index eaf00a1de..81f29b81c 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -1,123 +1,178 @@ +import 'package:cake_wallet/src/widgets/alert_background.dart'; +import 'package:cake_wallet/src/widgets/alert_close_button.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart'; import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/src/widgets/standard_checkbox.dart'; import 'package:cake_wallet/themes/extensions/menu_theme.dart'; -import 'package:cake_wallet/view_model/dashboard/dropdown_filter_item.dart'; -import 'package:cake_wallet/view_model/dashboard/dropdown_filter_item_widget.dart'; +import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/view_model/dashboard/filter_item.dart'; import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; - -//import 'package:date_range_picker/date_range_picker.dart' as date_rage_picker; import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart'; -class FilterWidget extends StatelessWidget { - FilterWidget({required this.filterItems}); +class FilterWidget extends StatefulWidget { + const FilterWidget({required this.filterItems, this.onClose, Key? key}) : super(key: key); final Map> filterItems; + final Function()? onClose; + + @override + _FilterWidgetState createState() => _FilterWidgetState(); +} + +class _FilterWidgetState extends State { + final ScrollController _scrollController = ScrollController(); + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } @override Widget build(BuildContext context) { - const sectionDivider = const HorizontalSectionDivider(); - return PickerWrapperWidget( - children: [ - Padding( - padding: EdgeInsets.only(left: 24, right: 24, top: 24), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(24)), - child: Container( - color: Theme.of(context).extension()!.backgroundColor, - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: EdgeInsets.all(24.0), - child: Text( - S.of(context).filter_by, - style: TextStyle( - color: - Theme.of(context).extension()!.detailsTitlesColor, - fontSize: 16, - fontFamily: 'Lato', - decoration: TextDecoration.none, - ), - ), - ), - sectionDivider, - ListView.separated( - padding: EdgeInsets.zero, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: filterItems.length, - separatorBuilder: (context, _) => sectionDivider, - itemBuilder: (_, index1) { - final title = filterItems.keys.elementAt(index1); - final section = filterItems.values.elementAt(index1); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 20, left: 24, right: 24), - child: Text( - title, - style: TextStyle( - color: Theme.of(context).extension()!.titleColor, - fontSize: 16, - fontFamily: 'Lato', - fontWeight: FontWeight.bold, - decoration: TextDecoration.none), - ), + return AlertBackground( + child: Column( + children: [ + const Expanded(child: SizedBox()), + Expanded( + flex: responsiveLayoutUtil.shouldRenderTabletUI ? 16 : 8, + child: LayoutBuilder( + builder: (context, constraints) { + double availableHeight = constraints.maxHeight; + return _buildFilterContent(context, availableHeight); + }, + ), + ), + Expanded( + child: AlertCloseButton( + key: const ValueKey('filter_wrapper_close_button_key'), + isPositioned: false, + onTap: widget.onClose, + ), + ), + const SizedBox(height: 24), + ], + ), + ); + } + + Widget _buildFilterContent(BuildContext context, double availableHeight) { + const sectionDivider = HorizontalSectionDivider(); + + const double totalHeaderHeight = 73; + const double filterTileMinHeight = 40; + double availableHeightForItems = availableHeight - totalHeaderHeight; + + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(left: 24, right: 24, top: 24), + child: ClipRRect( + borderRadius: BorderRadius.circular(24), + child: Container( + color: Theme.of(context).extension()!.backgroundColor, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(24.0), + child: Text( + S.of(context).filter_by, + style: TextStyle( + color: Theme.of(context) + .extension()! + .detailsTitlesColor, + fontSize: 16, + fontFamily: 'Lato', + decoration: TextDecoration.none, ), - ListView.builder( - padding: EdgeInsets.symmetric(horizontal: 28.0), - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), + ), + ), + sectionDivider, + ListView.separated( + padding: EdgeInsets.zero, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: widget.filterItems.length, + separatorBuilder: (context, _) => sectionDivider, + itemBuilder: (_, index1) { + final title = widget.filterItems.keys.elementAt(index1); + final section = widget.filterItems.values.elementAt(index1); + + final double itemHeight = + availableHeightForItems / widget.filterItems.length; + + final isSectionScrollable = + (itemHeight < (section.length * filterTileMinHeight)); + + final Widget sectionListView = ListView.builder( + controller: isSectionScrollable ? _scrollController : null, + padding: const EdgeInsets.symmetric(horizontal: 28.0), + shrinkWrap: isSectionScrollable ? false : true, + physics: isSectionScrollable + ? const BouncingScrollPhysics() + : const NeverScrollableScrollPhysics(), itemCount: section.length, itemBuilder: (_, index2) { final item = section[index2]; - - if (item is DropdownFilterItem) { - return Padding( - padding: EdgeInsets.fromLTRB(8, 0, 8, 16), - child: Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - width: 1.0, - color: Theme.of(context).extension()!.secondaryTextColor), - ), - ), - child: DropdownFilterList( - items: item.items, - caption: item.caption, - selectedItem: item.selectedItem, - onItemSelected: item.onItemSelected, - ), - ), - ); - } final content = Observer( - builder: (_) => StandardCheckbox( - value: item.value(), - caption: item.caption, - gradientBackground: true, - borderColor: Theme.of(context).dividerColor, - iconColor: Colors.white, - onChanged: (value) => item.onChanged(), - )); - return FilterTile(child: content); + builder: (_) => StandardCheckbox( + value: item.value(), + caption: item.caption, + gradientBackground: true, + borderColor: Theme.of(context).dividerColor, + iconColor: Colors.white, + onChanged: (value) => item.onChanged(), + ), + ); + return FilterTile( + child: content, + ); }, - ) - ], - ); - }, + ); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 20, left: 24, right: 24), + child: Text( + title, + style: TextStyle( + color: Theme.of(context).extension()!.titleColor, + fontSize: 16, + fontFamily: 'Lato', + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + ), + ), + Container( + height: isSectionScrollable ? itemHeight - totalHeaderHeight : null, + child: isSectionScrollable + ? Scrollbar( + controller: _scrollController, + thumbVisibility: true, + child: sectionListView, + ) + : sectionListView, + ), + ], + ); + }, + ), + ], ), - ]), + ), ), ), - ) - ], + ], + ), ); } } diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 277d3c838..4b7b8ace9 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -7,7 +7,6 @@ import 'package:cake_wallet/src/widgets/bottom_sheet/confirm_sending_bottom_shee import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/theme_base.dart'; -import 'dart:ui'; import 'package:cake_wallet/utils/request_review_handler.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:mobx/mobx.dart'; @@ -205,6 +204,7 @@ class ExchangeTradeState extends State { ); } + BuildContext? dialogContext; BuildContext? loadingBottomSheetContext; void _setEffects() { @@ -213,7 +213,12 @@ class ExchangeTradeState extends State { } _exchangeStateReaction = reaction((_) => this.widget.exchangeTradeViewModel.sendViewModel.state, - (ExecutionState state) { + (ExecutionState state) async { + + if (dialogContext != null && dialogContext?.mounted == true) { + Navigator.of(dialogContext!).pop(); + } + if (state is! IsExecutingState && loadingBottomSheetContext != null && loadingBottomSheetContext!.mounted) { @@ -237,6 +242,13 @@ class ExchangeTradeState extends State { } if (state is IsExecutingState) { + // wait a bit to avoid showing the loading dialog if transaction is failed + await Future.delayed(const Duration(milliseconds: 300)); + final currentState = widget.exchangeTradeViewModel.sendViewModel.state; + if (currentState is ExecutedSuccessfullyState || currentState is FailureState) { + return; + } + WidgetsBinding.instance.addPostFrameCallback((_) { if (context.mounted) { showModalBottomSheet( @@ -311,10 +323,12 @@ class ExchangeTradeState extends State { actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'), actionButton: () { Navigator.of(bottomSheetContext).pop(); - Navigator.of(context).pushNamedAndRemoveUntil( - Routes.dashboard, - (route) => false, - ); + if (context.mounted) { + Navigator.of(context).pushNamedAndRemoveUntil( + Routes.dashboard, + (route) => false, + ); + } RequestReviewHandler.requestReview(); }); }, diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart index 044c52349..1304b4e1d 100644 --- a/lib/src/screens/new_wallet/new_wallet_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_page.dart @@ -104,11 +104,9 @@ class _WalletNameFormState extends State { if (state is ExecutedSuccessfullyState) { if (widget.isChildWallet) { Navigator.of(navigatorKey.currentContext ?? context).pushNamed( - Routes.walletGroupExistingSeedDescriptionPage, - arguments: _walletNewVM.seedPhraseWordsLength); + Routes.walletGroupExistingSeedDescriptionPage); } else { - Navigator.of(navigatorKey.currentContext ?? context) - .pushNamed(Routes.preSeedPage, arguments: _walletNewVM.seedPhraseWordsLength); + Navigator.of(navigatorKey.currentContext ?? context).pushNamed(Routes.preSeedPage); } } diff --git a/lib/src/screens/new_wallet/wallet_group_existing_seed_description_page.dart b/lib/src/screens/new_wallet/wallet_group_existing_seed_description_page.dart index 34e07bbaf..a1bd4ebff 100644 --- a/lib/src/screens/new_wallet/wallet_group_existing_seed_description_page.dart +++ b/lib/src/screens/new_wallet/wallet_group_existing_seed_description_page.dart @@ -9,9 +9,7 @@ import 'package:cake_wallet/themes/theme_base.dart'; import 'package:flutter/material.dart'; class WalletGroupExistingSeedDescriptionPage extends BasePage { - WalletGroupExistingSeedDescriptionPage({required this.seedPhraseWordsLength}); - - final int seedPhraseWordsLength; + WalletGroupExistingSeedDescriptionPage(); @override String get title => S.current.wallet_group; @@ -69,8 +67,7 @@ class WalletGroupExistingSeedDescriptionPage extends BasePage { child: PrimaryButton( key: ValueKey( 'wallet_group_existing_seed_description_page_verify_seed_button_key'), - onPressed: () => Navigator.pushNamed(context, Routes.preSeedPage, - arguments: seedPhraseWordsLength), + onPressed: () => Navigator.pushNamed(context, Routes.preSeedPage), text: S.current.verify_seed, color: Theme.of(context).cardColor, textColor: currentTheme.type == ThemeType.dark diff --git a/lib/src/screens/seed/pre_seed_page.dart b/lib/src/screens/seed/pre_seed_page.dart index 91a47fda5..5fb6bb8c1 100644 --- a/lib/src/screens/seed/pre_seed_page.dart +++ b/lib/src/screens/seed/pre_seed_page.dart @@ -4,9 +4,7 @@ import 'package:cake_wallet/src/screens/Info_page.dart'; import 'package:flutter/cupertino.dart'; class PreSeedPage extends InfoPage { - PreSeedPage(this.seedPhraseLength); - - final int seedPhraseLength; + PreSeedPage(); @override bool get onWillPop => false; @@ -15,7 +13,7 @@ class PreSeedPage extends InfoPage { String get pageTitle => S.current.pre_seed_title; @override - String get pageDescription => S.current.pre_seed_description(seedPhraseLength.toString()); + String get pageDescription => S.current.pre_seed_description; @override String get buttonText => S.current.pre_seed_button_text; diff --git a/lib/src/widgets/alert_close_button.dart b/lib/src/widgets/alert_close_button.dart index 6ef0bdaa5..30e37ef20 100644 --- a/lib/src/widgets/alert_close_button.dart +++ b/lib/src/widgets/alert_close_button.dart @@ -7,6 +7,7 @@ class AlertCloseButton extends StatelessWidget { this.image, this.bottom, this.onTap, + this.isPositioned = true, super.key, }); @@ -14,6 +15,7 @@ class AlertCloseButton extends StatelessWidget { final Image? image; final double? bottom; + final bool isPositioned; final closeButton = Image.asset( 'assets/images/close.png', @@ -22,24 +24,18 @@ class AlertCloseButton extends StatelessWidget { @override Widget build(BuildContext context) { - return Positioned( - bottom: bottom ?? 60, - child: GestureDetector( + final button = GestureDetector( onTap: onTap ?? () => Navigator.of(context).pop(), child: Semantics( - label: S.of(context).close, - button: true, - enabled: true, - child: Container( - height: 42, - width: 42, - decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle), - child: Center( - child: image ?? closeButton, - ), - ), - ), - ), - ); + label: S.of(context).close, + button: true, + enabled: true, + child: Container( + height: 42, + width: 42, + decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle), + child: Center(child: image ?? closeButton)))); + + return isPositioned ? Positioned(bottom: bottom ?? 60, child: button) : button; } } diff --git a/lib/src/widgets/primary_button.dart b/lib/src/widgets/primary_button.dart index d5800aa5b..fcabe5b83 100644 --- a/lib/src/widgets/primary_button.dart +++ b/lib/src/widgets/primary_button.dart @@ -104,7 +104,7 @@ class LoadingPrimaryButton extends StatelessWidget { ), )), child: isLoading - ? CupertinoActivityIndicator(animating: true) + ? CupertinoActivityIndicator(animating: true, color: textColor) : Text(text, style: TextStyle( fontSize: 15.0, diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart index 29b008b85..bb27675c0 100644 --- a/lib/store/settings_store.dart +++ b/lib/store/settings_store.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:cake_wallet/bitcoin/bitcoin.dart'; +import 'package:cake_wallet/core/utilities.dart'; import 'package:cake_wallet/decred/decred.dart'; import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart'; import 'package:cake_wallet/core/secure_storage.dart'; @@ -12,6 +13,7 @@ import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart'; import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/cake_2fa_preset_options.dart'; import 'package:cake_wallet/entities/country.dart'; +import 'package:cake_wallet/entities/default_settings_migration.dart'; import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; @@ -1023,7 +1025,6 @@ abstract class SettingsStoreBase with Store { sharedPreferences.getInt(PreferencesKey.currentLitecoinElectrumSererIdKey); final bitcoinCashElectrumServerId = sharedPreferences.getInt(PreferencesKey.currentBitcoinCashNodeIdKey); - final havenNodeId = sharedPreferences.getInt(PreferencesKey.currentHavenNodeIdKey); final ethereumNodeId = sharedPreferences.getInt(PreferencesKey.currentEthereumNodeIdKey); final polygonNodeId = sharedPreferences.getInt(PreferencesKey.currentPolygonNodeIdKey); final nanoNodeId = sharedPreferences.getInt(PreferencesKey.currentNanoNodeIdKey); @@ -1033,20 +1034,35 @@ abstract class SettingsStoreBase with Store { final wowneroNodeId = sharedPreferences.getInt(PreferencesKey.currentWowneroNodeIdKey); final zanoNodeId = sharedPreferences.getInt(PreferencesKey.currentZanoNodeIdKey); final decredNodeId = sharedPreferences.getInt(PreferencesKey.currentDecredNodeIdKey); - final moneroNode = nodeSource.get(nodeId); - final bitcoinElectrumServer = nodeSource.get(bitcoinElectrumServerId); - final litecoinElectrumServer = nodeSource.get(litecoinElectrumServerId); - final havenNode = nodeSource.get(havenNodeId); - final ethereumNode = nodeSource.get(ethereumNodeId); - final polygonNode = nodeSource.get(polygonNodeId); - final bitcoinCashElectrumServer = nodeSource.get(bitcoinCashElectrumServerId); - final nanoNode = nodeSource.get(nanoNodeId); - final decredNode = nodeSource.get(decredNodeId); - final nanoPowNode = powNodeSource.get(nanoPowNodeId); - final solanaNode = nodeSource.get(solanaNodeId); - final tronNode = nodeSource.get(tronNodeId); - final wowneroNode = nodeSource.get(wowneroNodeId); - final zanoNode = nodeSource.get(zanoNodeId); + + /// get the selected node, if null, then use the default + final moneroNode = nodeSource.get(nodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == newCakeWalletMoneroUri); + final bitcoinElectrumServer = nodeSource.get(bitcoinElectrumServerId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == newCakeWalletBitcoinUri); + final litecoinElectrumServer = nodeSource.get(litecoinElectrumServerId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == cakeWalletLitecoinElectrumUri); + final ethereumNode = nodeSource.get(ethereumNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == ethereumDefaultNodeUri); + final polygonNode = nodeSource.get(polygonNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == polygonDefaultNodeUri); + final bitcoinCashElectrumServer = nodeSource.get(bitcoinCashElectrumServerId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == cakeWalletBitcoinCashDefaultNodeUri); + final nanoNode = nodeSource.get(nanoNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == nanoDefaultNodeUri); + final decredNode = nodeSource.get(decredNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == decredDefaultUri); + final nanoPowNode = powNodeSource.get(nanoPowNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == nanoDefaultPowNodeUri); + final solanaNode = nodeSource.get(solanaNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == solanaDefaultNodeUri); + final tronNode = nodeSource.get(tronNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == tronDefaultNodeUri); + final wowneroNode = nodeSource.get(wowneroNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == wowneroDefaultNodeUri); + final zanoNode = nodeSource.get(zanoNodeId) ?? + nodeSource.values.firstWhereOrNull((e) => e.uriRaw == zanoDefaultNodeUri); + final packageInfo = await PackageInfo.fromPlatform(); final deviceName = await _getDeviceName() ?? ''; final shouldShowYatPopup = sharedPreferences.getBool(PreferencesKey.shouldShowYatPopup) ?? true; @@ -1092,10 +1108,6 @@ abstract class SettingsStoreBase with Store { nodes[WalletType.litecoin] = litecoinElectrumServer; } - if (havenNode != null) { - nodes[WalletType.haven] = havenNode; - } - if (ethereumNode != null) { nodes[WalletType.ethereum] = ethereumNode; } @@ -1137,7 +1149,8 @@ abstract class SettingsStoreBase with Store { } final savedSyncMode = SyncMode.all.firstWhere((element) { - return element.type.index == (sharedPreferences.getInt(PreferencesKey.syncModeKey) ?? 2); // default to 2 - daily sync + return element.type.index == + (sharedPreferences.getInt(PreferencesKey.syncModeKey) ?? 2); // default to 2 - daily sync }); final savedSyncAll = sharedPreferences.getBool(PreferencesKey.syncAllKey) ?? true; diff --git a/lib/view_model/anon_invoice_page_view_model.dart b/lib/view_model/anon_invoice_page_view_model.dart index 39992dca7..05467bd71 100644 --- a/lib/view_model/anon_invoice_page_view_model.dart +++ b/lib/view_model/anon_invoice_page_view_model.dart @@ -107,20 +107,24 @@ abstract class AnonInvoicePageViewModelBase with Store { return; } } - final result = await anonPayApi.createInvoice(AnonPayRequest( - cryptoCurrency: cryptoCurrency, - address: address, - amount: amount.isEmpty ? null : amount, - description: description, - email: receipientEmail, - name: receipientName, - fiatEquivalent: - selectedCurrency is FiatCurrency ? (selectedCurrency as FiatCurrency).raw : null, - )); + try { + final result = await anonPayApi.createInvoice(AnonPayRequest( + cryptoCurrency: cryptoCurrency, + address: address, + amount: amount.isEmpty ? null : amount, + description: description, + email: receipientEmail, + name: receipientName, + fiatEquivalent: + selectedCurrency is FiatCurrency ? (selectedCurrency as FiatCurrency).raw : null, + )); - _anonpayInvoiceInfoSource.add(result); + _anonpayInvoiceInfoSource.add(result); - state = ExecutedSuccessfullyState(payload: result); + state = ExecutedSuccessfullyState(payload: result); + } catch (e) { + state = FailureState(e.toString()); + } } @action @@ -156,12 +160,16 @@ abstract class AnonInvoicePageViewModelBase with Store { } Future _fetchLimits() async { - final limit = await anonPayApi.fetchLimits( - cryptoCurrency: cryptoCurrency, - fiatCurrency: selectedCurrency is FiatCurrency ? selectedCurrency as FiatCurrency : null, - ); - minimum = limit.min; - maximum = limit.max != null ? limit.max! / 4 : null; + try { + final limit = await anonPayApi.fetchLimits( + cryptoCurrency: cryptoCurrency, + fiatCurrency: selectedCurrency is FiatCurrency ? selectedCurrency as FiatCurrency : null, + ); + minimum = limit.min; + maximum = limit.max != null ? limit.max! / 4 : null; + } catch (e) { + state = FailureState(e.toString()); + } } @computed diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index bfd198148..4d87b6485 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -4,7 +4,6 @@ import 'dart:io' show Platform; import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:cake_wallet/bitcoin/bitcoin.dart'; -import 'package:cake_wallet/core/background_sync.dart'; import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart'; import 'package:cake_wallet/entities/balance_display_mode.dart'; @@ -276,10 +275,17 @@ abstract class DashboardViewModelBase with Store { _transactionDisposer?.reaction.dispose(); _transactionDisposer = reaction( - (_) => - appStore.wallet!.transactionHistory.transactions.length * - appStore.wallet!.transactionHistory.transactions.values.first.confirmations, - _transactionDisposerCallback); + (_) => appStore.wallet!.transactionHistory.transactions.length, + _transactionDisposerCallback, + ); + + if (hasSilentPayments) { + silentPaymentsScanningActive = bitcoin!.getScanningActive(wallet); + + reaction((_) => wallet.syncStatus, (SyncStatus syncStatus) { + silentPaymentsScanningActive = bitcoin!.getScanningActive(wallet); + }); + } _checkMweb(); reaction((_) => settingsStore.mwebAlwaysScan, (bool value) => _checkMweb()); @@ -814,10 +820,7 @@ abstract class DashboardViewModelBase with Store { _transactionDisposer?.reaction.dispose(); - _transactionDisposer = reaction( - (_) => - appStore.wallet!.transactionHistory.transactions.length * - appStore.wallet!.transactionHistory.transactions.values.first.confirmations, + _transactionDisposer = reaction((_) => appStore.wallet!.transactionHistory.transactions.length, _transactionDisposerCallback); } diff --git a/lib/view_model/hardware_wallet/ledger_view_model.dart b/lib/view_model/hardware_wallet/ledger_view_model.dart index 4f80aa698..f555da0cf 100644 --- a/lib/view_model/hardware_wallet/ledger_view_model.dart +++ b/lib/view_model/hardware_wallet/ledger_view_model.dart @@ -137,7 +137,9 @@ abstract class LedgerViewModelBase with Store { allowChangeWallet: true, isReconnect: true, onConnectDevice: (context, ledgerVM) async { - Navigator.of(context).pop(); + if (context.mounted) { + Navigator.of(context).pop(); + } }, ), ); diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 8b00cefa4..a6774f2ee 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -742,7 +742,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor } if (error is CreateAssociatedTokenAccountException) { - return "${S.current.solana_create_associated_token_account_exception}\n\n${error.errorMessage}"; + return "${S.current.solana_create_associated_token_account_exception} ${S.current.added_message_for_ata_error}\n\n${error.errorMessage}"; } if (error is SignSPLTokenTransactionRentException) { diff --git a/lib/view_model/wallet_list/wallet_list_view_model.dart b/lib/view_model/wallet_list/wallet_list_view_model.dart index b27bf52f6..96662e0b6 100644 --- a/lib/view_model/wallet_list/wallet_list_view_model.dart +++ b/lib/view_model/wallet_list/wallet_list_view_model.dart @@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/wallet_group.dart'; import 'package:cake_wallet/entities/wallet_list_order_types.dart'; import 'package:cake_wallet/entities/wallet_manager.dart'; import 'package:cake_wallet/reactions/bip39_wallet_utils.dart'; +import 'package:cw_core/utils/print_verbose.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/store/app_store.dart'; @@ -109,45 +110,7 @@ abstract class WalletListViewModelBase with Store { continue; } - // Identify wallets that should be moved to singleWalletsList using the filters: the type/derivation - final excludedWallets = []; - - for (var wallet in group.wallets) { - // Check for non-BIP39 wallet types - final isNonBIP39 = !isBIP39Wallet(wallet.type); - - // Check for nano derivation type - final isNanoDerivation = wallet.type == WalletType.nano && - wallet.derivationInfo?.derivationType == DerivationType.nano; - - // Check for electrum derivation type - final isElectrumDerivation = - (wallet.type == WalletType.bitcoin || wallet.type == WalletType.litecoin) && - wallet.derivationInfo?.derivationType == DerivationType.electrum; - - if (isNonBIP39 || isNanoDerivation || isElectrumDerivation) { - excludedWallets.add(wallet); - } - } - - // Add excluded wallets to singleWalletsList - for (var excludedWallet in excludedWallets) { - singleWalletsList.add(convertWalletInfoToWalletListItem(excludedWallet)); - } - - // Remove excluded wallets from the group's wallets to avoid duplication - group.wallets.removeWhere((wallet) { - return excludedWallets.any((excluded) => excluded.address == wallet.address); - }); - - // Check if the group has more than one wallet after the excluded wallets are removed. - if (group.wallets.length > 1) { - //Add the entire group to the multi wallet group list since its still a multi wallet - multiWalletGroups.add(group); - } else if (group.wallets.length == 1) { - // Add the group to the wallet left to the single wallets list - singleWalletsList.add(convertWalletInfoToWalletListItem(group.wallets.first)); - } + multiWalletGroups.add(group); } } @@ -253,7 +216,6 @@ abstract class WalletListViewModelBase with Store { await sortGroupByType(); break; case FilterListOrderType.Custom: - default: await reorderAccordingToWalletList(); break; } diff --git a/lib/view_model/wallet_new_vm.dart b/lib/view_model/wallet_new_vm.dart index 1987a37d2..86d1be65f 100644 --- a/lib/view_model/wallet_new_vm.dart +++ b/lib/view_model/wallet_new_vm.dart @@ -52,38 +52,6 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store { bool get showLanguageSelector => newWalletArguments?.mnemonic == null && hasLanguageSelector; - int get seedPhraseWordsLength { - switch (type) { - case WalletType.monero: - case WalletType.wownero: - return advancedPrivacySettingsViewModel.isPolySeed ? 16 : 25; - case WalletType.tron: - case WalletType.solana: - case WalletType.polygon: - case WalletType.ethereum: - case WalletType.bitcoinCash: - return advancedPrivacySettingsViewModel.seedPhraseLength.value; - case WalletType.bitcoin: - case WalletType.litecoin: - return seedSettingsViewModel.bitcoinSeedType == BitcoinSeedType.bip39 - ? advancedPrivacySettingsViewModel.seedPhraseLength.value - : 24; - case WalletType.nano: - case WalletType.banano: - return seedSettingsViewModel.nanoSeedType == NanoSeedType.bip39 - ? advancedPrivacySettingsViewModel.seedPhraseLength.value - : 24; - case WalletType.none: - return 24; - case WalletType.haven: - return 25; - case WalletType.zano: - return 26; - case WalletType.decred: - return 15; - } - } - bool get hasSeedType => newWalletArguments?.mnemonic == null && [WalletType.monero, WalletType.wownero].contains(type); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 931cc0823..a7db9b567 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.", "add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!", "add_value": "إضافة قيمة", + "added_message_for_ata_error": "يرجى التأكد من أن لديك ما يكفي من توازن SOL لإكمال معاملتك.", "address": " ﻥﺍﻮﻨﻋ", "address_book": "دليل العناوين", "address_book_menu": "دليل العناوين", @@ -543,7 +544,7 @@ "potential_scam": "عملية احتيال محتملة", "powered_by": "بدعم من ${title}", "pre_seed_button_text": "انا أفهم. أرني سييد الخاص بي", - "pre_seed_description": "في الصفحة التالية ستشاهد سلسلة من الكلمات ${words}. هذه هي سييد الفريدة والخاصة بك وهي الطريقة الوحيدة لاسترداد محفظتك في حالة فقدها أو عطلها. تقع على عاتقك مسؤولية تدوينها وتخزينها في مكان آمن خارج تطبيق Cake Wallet.", + "pre_seed_description": "في الصفحة التالية ، سترى سلسلة من الكلمات. هذه هي البذور الفريدة والخاصة الخاصة بك وهي الطريقة الوحيدة لاستعادة محفظتك في حالة الخسارة أو العطل. تقع على عاتقك مسؤولية كتابتها وتخزينها في مكان آمن خارج تطبيق Cake Wallet.", "pre_seed_title": "مهم", "prepaid_cards": "البطاقات المدفوعة مسبقا", "prevent_screenshots": "منع لقطات الشاشة وتسجيل الشاشة", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "سوف تتلقى(ooded )", "you_will_send": "تحويل من", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 2bc1aa598..edf2c427b 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.", "add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!", "add_value": "Добавяне на стойност", + "added_message_for_ata_error": "Моля, уверете се, че имате достатъчно баланс на SOL, за да завършите транзакцията си.", "address": "Адрес", "address_book": "Адресна книга", "address_book_menu": "Адресна книга", @@ -543,7 +544,7 @@ "potential_scam": "Потенциална измама", "powered_by": "Powered by ${title}", "pre_seed_button_text": "Разбирам. Покажи seed", - "pre_seed_description": "На следващата страница ще видите поредица от ${words} думи. Това е вашият таен личен seed и е единственият начин да възстановите портфейла си. Отговорността за съхранението му на сигурно място извън приложението на Cake Wallet е изцяло ВАША.", + "pre_seed_description": "На следващата страница ще видите поредица от думи. Това е вашето уникално и частно семе и това е единственият начин да възстановите портфейла си в случай на загуба или неизправност. Ваша отговорност е да го запишете и да го съхранявате на безопасно място извън приложението за портфейл за торта.", "pre_seed_title": "ВАЖНО", "prepaid_cards": "Предплатени карти", "prevent_screenshots": "Предотвратете екранни снимки и запис на екрана", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Ще получите(прогнозно )", "you_will_send": "Обръщане от", "yy": "гг" -} +} \ No newline at end of file diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 5c5f8c3b5..694dc1528 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Potvrdil jsem adresu a informace smlouvy o tokenu pomocí důvěryhodného zdroje. Přidání škodlivých nebo nesprávných informací může vést ke ztrátě finančních prostředků.", "add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků.\nVždy potvrďte adresy tokenů s renomovanými zdroji!", "add_value": "Přidat hodnotu", + "added_message_for_ata_error": "Laskavě se ujistěte, že máte dostatek rovnováhy SOL, abyste dokončili transakci.", "address": "Adresa", "address_book": "Adresář", "address_book_menu": "Adresář", @@ -543,7 +544,7 @@ "potential_scam": "Potenciální podvod", "powered_by": "Zajišťuje ${title}", "pre_seed_button_text": "Rozumím. Ukaž mi můj seed.", - "pre_seed_description": "Na následující stránce uvidíte sérii ${words} slov. Je to váš tzv. seed a je to JEDINÁ možnost, jak můžete později obnovit svou peněženku v případě ztráty nebo poruchy. Je VAŠÍ zodpovědností zapsat si ho a uložit si ho na bezpečném místě mimo aplikaci Cake Wallet.", + "pre_seed_description": "Na další stránce uvidíte řadu slov. Toto je vaše jedinečné a soukromé semeno a je to jediný způsob, jak obnovit peněženku v případě ztráty nebo poruchy. Je vaší odpovědností zapisovat jej a uložit jej na bezpečném místě mimo aplikaci Cake Wallet.", "pre_seed_title": "DŮLEŽITÉ", "prepaid_cards": "Předplacené karty", "prevent_screenshots": "Zabránit vytváření snímků obrazovky a nahrávání obrazovky", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Obdržíte(odhadovaný )", "you_will_send": "Směnit z", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 68c081be6..84fa4504e 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Ich habe die Adresse und Informationen zum Token-Contract anhand einer seriösen Quelle bestätigt. Das Hinzufügen böswilliger oder falscher Informationen kann zu einem Verlust von Geldern führen.", "add_token_warning": "Bearbeiten oder fügen Sie Token nicht gemäß den Anweisungen von Betrügern hinzu.\nBestätigen Sie Token-Adressen immer mit seriösen Quellen!", "add_value": "Wert hinzufügen", + "added_message_for_ata_error": "Bitte stellen Sie sicher, dass Sie über genügend SOL -Balance verfügen, um Ihre Transaktion abzuschließen.", "address": "Adresse", "address_book": "Adressbuch", "address_book_menu": "Adressbuch", @@ -544,7 +545,7 @@ "potential_scam": "Potenzieller Betrug", "powered_by": "Ermöglicht durch ${title}", "pre_seed_button_text": "Verstanden. Zeig mir meinen Seed", - "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von ${words} Wörtern. Dies ist Ihr einzigartiger und privater Seed und der EINZIGE Weg, um Ihre Wallet im Falle eines Verlusts oder einer Fehlfunktion wiederherzustellen. Es liegt in IHRER Verantwortung, ihn aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet-App aufzubewahren.", + "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Samen und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.", "pre_seed_title": "WICHTIG", "prepaid_cards": "Karten mit Guthaben", "prevent_screenshots": "Verhindern Sie Screenshots und Bildschirmaufzeichnungen", @@ -1036,4 +1037,4 @@ "you_will_receive_estimated_amount": "Sie erhalten(geschätzt )", "you_will_send": "Konvertieren von", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index d8cb49e6e..518e711d7 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "I have confirmed the token contract address and information using a reputable source. Adding malicious or incorrect information can result in a loss of funds.", "add_token_warning": "Do not edit or add tokens as instructed by scammers.\nAlways confirm token addresses with reputable sources!", "add_value": "Add value", + "added_message_for_ata_error": "Kindly ensure you have enough SOL balance to complete your transaction.", "address": "Address", "address_book": "Address Book", "address_book_menu": "Address book", @@ -544,7 +545,7 @@ "potential_scam": "Potential Scam", "powered_by": "Powered by ${title}", "pre_seed_button_text": "I understand. Show me my seed", - "pre_seed_description": "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", + "pre_seed_description": "On the next page you will see a series of words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", "pre_seed_title": "IMPORTANT", "prepaid_cards": "Prepaid Cards", "prevent_screenshots": "Prevent screenshots and screen recording", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "You will receive (estimated)", "you_will_send": "Convert from", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 71e749ec6..53bf0c5d0 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "He confirmado la dirección del contrato del token y la información utilizando una fuente confiable. Agregar información maliciosa o incorrecta puede resultar en una pérdida de fondos.", "add_token_warning": "No edite ni agregue tokens según las instrucciones de los estafadores.\n¡Confirme siempre las direcciones de los tokens con fuentes acreditadas!", "add_value": "Añadir valor", + "added_message_for_ata_error": "Asegúrese de tener suficiente equilibrio SOL para completar su transacción.", "address": "Dirección", "address_book": "Libreta de direcciones", "address_book_menu": "Libreta de direcciones", @@ -544,7 +545,7 @@ "potential_scam": "Estafa potencial", "powered_by": "Posible gracias a ${title}", "pre_seed_button_text": "Entiendo. Muéstrame mi semilla", - "pre_seed_description": "En la página siguiente verás una serie de ${words} palabras. Esta es su semilla única y privada y es la ÚNICA forma de recuperar tu billetera en caso de pérdida o mal funcionamiento. Es TU responsabilidad escribirla y guardarla en un lugar seguro fuera de la aplicación Cake Wallet.", + "pre_seed_description": "En la página siguiente, verá una serie de palabras. Esta es su semilla única y privada y es la única forma de recuperar su billetera en caso de pérdida o mal funcionamiento. Es su responsabilidad escribirlo y almacenarlo en un lugar seguro fuera de la aplicación de billetera de pastel.", "pre_seed_title": "IMPORTANTE", "prepaid_cards": "Tajetas prepagadas", "prevent_screenshots": "Evitar capturas de pantalla y grabación de pantalla", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "Recibirá(estimado )", "you_will_send": "Convertir de", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 895c2ad96..ee7177643 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "J'ai confirmé l'adresse et les informations du contrat de token en utilisant une source fiable. L'ajout d'informations malveillantes ou incorrectes peut entraîner une perte de fonds.", "add_token_warning": "Ne modifiez pas ou n'ajoutez pas de tokens comme pourraient vous le suggérer des escrocs.\nConfirmez toujours les adresses de token auprès de sources fiables !", "add_value": "Ajouter une valeur", + "added_message_for_ata_error": "Veuillez vous assurer d'avoir suffisamment de solde SOL pour terminer votre transaction.", "address": "Adresse", "address_book": "Carnet d'Adresses", "address_book_menu": "Carnet d'Adresses", @@ -543,7 +544,7 @@ "potential_scam": "Arnaque potentielle", "powered_by": "Proposé par ${title}", "pre_seed_button_text": "J'ai compris. Montrez moi ma phrase secrète (seed)", - "pre_seed_description": "Sur la page suivante vous allez voir une série de ${words} mots. Ils constituent votre phrase secrète (seed) unique et privée et sont le SEUL moyen de restaurer votre portefeuille (wallet) en cas de perte ou de dysfonctionnement. Il est de VOTRE responsabilité d'écrire cette série de mots et de la stocker dans un lieu sûr en dehors de l'application Cake Wallet.", + "pre_seed_description": "À la page suivante, vous verrez une série de mots. Il s'agit de votre semence unique et privée et c'est le seul moyen de récupérer votre portefeuille en cas de perte ou de dysfonctionnement. Il est de votre responsabilité de l'écrire et de le stocker dans un endroit sûr à l'extérieur de l'application de portefeuille Cake.", "pre_seed_title": "IMPORTANT", "prepaid_cards": "Cartes prépayées", "prevent_screenshots": "Empêcher les captures d'écran et l'enregistrement d'écran", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Vous recevrez ( estimé )", "you_will_send": "Convertir depuis", "yy": "AA" -} +} \ No newline at end of file diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index dbe5bfbc2..a6f410f98 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Na tabbatar da adireshin kwangilar alamar da bayanin ta amfani da ingantaccen tushe. Ƙara bayanan ƙeta ko kuskure na iya haifar da asarar kuɗi.", "add_token_warning": "Kar a gyara ko ƙara alamu kamar yadda masu zamba suka umarta.\nKoyaushe tabbatar da adiresoshin alamar tare da sanannun tushe!", "add_value": "Ƙara ƙima", + "added_message_for_ata_error": "Da kyau tabbatar kana da isasshen so su daidaita don kammala ma'amalar ku.", "address": "Adireshi", "address_book": "Littafin adireshi", "address_book_menu": "Littafin adireshi", @@ -545,7 +546,7 @@ "potential_scam": "M zamba", "powered_by": "An ƙarfafa shi ta ${title}", "pre_seed_button_text": "Ina fahimta. Nuna mini seed din nawa", - "pre_seed_description": "A kan shafin nan za ku ga wata ƙungiya na ${words} kalmomi. Wannan shine tsarin daban-daban ku kuma na sirri kuma shine hanya ɗaya kadai don mai da purse dinku a cikin yanayin rasa ko rashin aiki. Yana da damar da kuke a cikin tabbatar da kuyi rubuta shi kuma kuyi ajiye shi a wuri na aminci wanda ya wuce wurin app na Cake Wallet.", + "pre_seed_description": "A shafi na gaba za ku ga jerin kalmomi. Wannan shi ne zuriyarku na musamman da keɓaɓɓun iri kuma ita ce kadai hanyar da za a dawo da walat ɗinku idan an rasa ko rashin lalacewa ko kuma muguntar. Hakkin ku ne ka rubuta shi ƙasa kuma adana shi a cikin amintaccen wuri a waje da app din Wallet Ojef.", "pre_seed_title": "MUHIMMANCI", "prepaid_cards": "Katunan shirye-shirye", "prevent_screenshots": "Fada lambobi da jarrabobi na kayan lambobi", @@ -1035,4 +1036,4 @@ "you_will_receive_estimated_amount": "Za ku (karɓi )", "you_will_send": "Maida daga", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index f93cf3818..c941a1127 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।", "add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!", "add_value": "मूल्य जोड़ें", + "added_message_for_ata_error": "कृपया सुनिश्चित करें कि आपके पास अपना लेनदेन पूरा करने के लिए पर्याप्त SOL बैलेंस है।", "address": "पता", "address_book": "पता पुस्तिका", "address_book_menu": "पता पुस्तिका", @@ -544,7 +545,7 @@ "potential_scam": "संभावित घोटाला", "powered_by": "द्वारा संचालित ${title}", "pre_seed_button_text": "मै समझता हुँ। मुझे अपना बीज दिखाओ", - "pre_seed_description": "अगले पेज पर आपको ${words} शब्दों की एक श्रृंखला दिखाई देगी। यह आपका अद्वितीय और निजी बीज है और नुकसान या खराबी के मामले में अपने बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। यह आपकी जिम्मेदारी है कि इसे नीचे लिखें और इसे Cake Wallet ऐप के बाहर सुरक्षित स्थान पर संग्रहीत करें।", + "pre_seed_description": "अगले पृष्ठ पर आपको शब्दों की एक श्रृंखला दिखाई देगी। यह आपका अनूठा और निजी बीज है और यह नुकसान या खराबी के मामले में अपने बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। यह आपकी जिम्मेदारी है कि आप इसे लिखें और इसे केक वॉलेट ऐप के बाहर एक सुरक्षित स्थान पर संग्रहीत करें।", "pre_seed_title": "महत्वपूर्ण", "prepaid_cards": "पूर्वदत्त कार्ड", "prevent_screenshots": "स्क्रीनशॉट और स्क्रीन रिकॉर्डिंग रोकें", @@ -1035,4 +1036,4 @@ "you_will_receive_estimated_amount": "आपको#अनुमानित ( प्राप्त होगा)", "you_will_send": "से रूपांतरित करें", "yy": "वाईवाई" -} +} \ No newline at end of file diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 423c2042a..80f1d56bb 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Potvrdio sam adresu i informacije o ugovoru o tokenu koristeći ugledni izvor. Dodavanje zlonamjernih ili netočnih informacija može dovesti do gubitka sredstava.", "add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata.\nUvijek potvrdite adrese tokena s uglednim izvorima!", "add_value": "Dodaj vrijednost", + "added_message_for_ata_error": "Ljubazno osigurajte da imate dovoljno salda SOL -a da dovršite svoju transakciju.", "address": "Adresa", "address_book": "Imenik", "address_book_menu": "Imenik", @@ -543,7 +544,7 @@ "potential_scam": "Potencijalna prijevara", "powered_by": "Omogućio ${title}", "pre_seed_button_text": "Razumijem. Prikaži mi moj pristupni izraz", - "pre_seed_description": "Na sljedećoj ćete stranici vidjeti niz ${words} riječi. Radi se o Vašem jedinstvenom i tajnom pristupnom izrazu koji je ujedno i JEDINI način na koji možete oporaviti svoj novčanik u slučaju gubitka ili kvara. VAŠA je odgovornost zapisati ga te pohraniti na sigurno mjesto izvan Cake Wallet aplikacije.", + "pre_seed_description": "Na sljedećoj stranici vidjet ćete niz riječi. Ovo je vaše jedinstveno i privatno sjeme i to je jedini način da povratite novčanik u slučaju gubitka ili neispravnosti. Vaša je odgovornost zapisati je i pohraniti na sigurno mjesto izvan aplikacije za novčanik.", "pre_seed_title": "VAŽNO", "prepaid_cards": "Unaprijed plaćene kartice", "prevent_screenshots": "Spriječite snimke zaslona i snimanje zaslona", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Primit ćete(procijenjeno )", "you_will_send": "Razmijeni iz", "yy": "GG" -} +} \ No newline at end of file diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index 750b5a870..3baccc4c6 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Ես հաստատել եմ token-ի պայմանագրի հասցեն և տեղեկատվությունը վստահելի աղբյուրի օգտագործմամբ: Վնասակար կամ սխալ տեղեկատվության ավելացումը կարող է հանգեցնել միջոցների կորստի:", "add_token_warning": "Մի խմբագրեք կամ ավելացրեք token-ներ, ինչպես կոչ են անում խարդախները:\nՄիշտ հաստատեք Token-ների հասցեները վստահելի աղբյուրներով:", "add_value": "Ավելացնել արժեք", + "added_message_for_ata_error": "Սիրով համոզվեք, որ ձեր գործարքը ավարտելու համար բավականաչափ SOL հավասարակշռություն ունեք:", "address": "Հասցե", "address_book": "Հասցեագիրք", "address_book_menu": "Հասցեագիրք", @@ -542,7 +543,7 @@ "potential_scam": "Հնարավոր խաբեություն", "powered_by": "${title} կողմից ապահովված", "pre_seed_button_text": "Ես հասկանում եմ։ Ցույց տվեք իմ սերմը", - "pre_seed_description": "Հաջորդ էջում դուք կտեսնեք ${words} բառերի շարք։ Սա ձեր յուրահատուկ և գաղտնի սերմն է, որը ձեր դրամապանակը վերականգնելու միակ միջոցն է կորուստի կամ սխալ գործարքի դեպքում։ Դուք պատասխանատու եք այն գրառել և ապահով վայրում պահել Cake Wallet հավելվածից դուրս", + "pre_seed_description": "Հաջորդ էջում կտեսնեք մի շարք բառեր: Սա ձեր եզակի եւ մասնավոր սերմն է, եւ դա ձեր դրամապանակը վերականգնելու միակ միջոցն է կորստի կամ անսարքության դեպքում: Ձեր պարտականությունն է գրել այն եւ պահել այն անվտանգ վայրում, տորթի դրամապանակի հավելվածից դուրս:", "pre_seed_title": "ԿԱՐԵՎՈՐ", "prepaid_cards": "Նախավճարային քարտեր", "prevent_screenshots": "Կանխել էկրանի պատկերները և տեսագրությունը", @@ -1031,4 +1032,4 @@ "you_will_receive_estimated_amount": "Դուք կստանաք ( գնահատված )", "you_will_send": "Փոխանակեք", "yy": "ՏՏ" -} +} \ No newline at end of file diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index e7bf457e7..188a2ac28 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Saya telah mengonfirmasi alamat dan informasi kontrak token menggunakan sumber yang memiliki reputasi baik. Menambahkan informasi jahat atau salah dapat mengakibatkan hilangnya dana.", "add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu.\nSelalu konfirmasikan alamat token dengan sumber tepercaya!", "add_value": "Tambahkan nilai", + "added_message_for_ata_error": "Mohon pastikan Anda memiliki saldo SOL yang cukup untuk menyelesaikan transaksi Anda.", "address": "Alamat", "address_book": "Buku Alamat", "address_book_menu": "Buku alamat", @@ -545,7 +546,7 @@ "potential_scam": "Penipuan potensial", "powered_by": "Didukung oleh ${title}", "pre_seed_button_text": "Saya mengerti. Tampilkan seed saya", - "pre_seed_description": "Di halaman berikutnya Anda akan melihat serangkaian kata ${words}. Ini adalah seed unik dan pribadi Anda dan itu SATU-SATUNYA cara untuk mengembalikan dompet Anda jika hilang atau rusak. Ini adalah TANGGUNG JAWAB Anda untuk menuliskannya dan menyimpan di tempat yang aman di luar aplikasi Cake Wallet.", + "pre_seed_description": "Di halaman berikutnya Anda akan melihat serangkaian kata. Ini adalah benih unik dan pribadi Anda dan ini adalah satu -satunya cara untuk memulihkan dompet Anda jika terjadi kehilangan atau kerusakan. Adalah tanggung jawab Anda untuk menuliskannya dan menyimpannya di tempat yang aman di luar aplikasi Cake Wallet.", "pre_seed_title": "PENTING", "prepaid_cards": "Kartu prabayar", "prevent_screenshots": "Cegah tangkapan layar dan perekaman layar", @@ -1036,4 +1037,4 @@ "you_will_receive_estimated_amount": "Anda akan menerima(estimasi )", "you_will_send": "Konversi dari", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 33b3bea39..6eaf85575 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Ho confermato l'indirizzo e le informazioni del contratto token utilizzando una fonte attendibile. L'aggiunta di informazioni dannose o errate può comportare una perdita di fondi.", "add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori.\nConferma sempre gli indirizzi dei token con fonti attendibili!", "add_value": "Aggiungi valore", + "added_message_for_ata_error": "Si prega di assicurati di avere abbastanza equilibrio sol per completare la transazione.", "address": "Indirizzo", "address_book": "Rubrica indirizzi", "address_book_menu": "Rubrica indirizzi", @@ -544,7 +545,7 @@ "potential_scam": "Potenziale truffa", "powered_by": "Sviluppato da ${title}", "pre_seed_button_text": "Ho capito. Mostrami il seme", - "pre_seed_description": "Nella pagina seguente ti sarà mostrata una serie di parole ${words}. Questo è il tuo seme unico e privato ed è l'UNICO modo per recuperare il tuo portafoglio in caso di perdita o malfunzionamento. E' TUA responsabilità trascriverlo e conservarlo in un posto sicuro fuori dall'app Cake Wallet.", + "pre_seed_description": "Nella pagina successiva vedrai una serie di parole. Questo è il tuo seme unico e privato ed è l'unico modo per recuperare il portafoglio in caso di perdita o malfunzionamento. È tua responsabilità scriverlo e archiviarlo in un posto sicuro al di fuori dell'app per il portafoglio Cake.", "pre_seed_title": "IMPORTANTE", "prepaid_cards": "Carte prepagata", "prevent_screenshots": "Impedisci screenshot e registrazione dello schermo", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "Riceverai(stimato )", "you_will_send": "Conveti da", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 6a59e62af..4af17dc84 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。", "add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。", "add_value": "付加価値", + "added_message_for_ata_error": "トランザクションを完了するのに十分なソルバランスがあることを確認してください。", "address": "住所", "address_book": "住所録", "address_book_menu": "住所録", @@ -544,7 +545,7 @@ "potential_scam": "潜在的な詐欺", "powered_by": "搭載 ${title}", "pre_seed_button_text": "わかります。 種を見せて", - "pre_seed_description": "次のページでは、一連の${words}語が表示されます。 これはあなたのユニークでプライベートなシードであり、紛失や誤動作が発生した場合にウォレットを回復する唯一の方法です。 それを書き留めて、Cake Wallet アプリの外の安全な場所に保管するのはあなたの責任です。", + "pre_seed_description": "次のページには、一連の単語が表示されます。これはあなたのユニークでプライベートな種であり、損失や誤動作の場合に財布を回復する唯一の方法です。それを書き留めて、ケーキウォレットアプリの外の安全な場所に保管するのはあなたの責任です。", "pre_seed_title": "重要", "prepaid_cards": "プリペイドカード", "prevent_screenshots": "スクリーンショットと画面録画を防止する", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "あなたは(推定)を受け取ります", "you_will_send": "から変換", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 06c899fe7..cff1c05ba 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.", "add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!", "add_value": "값 추가", + "added_message_for_ata_error": "거래를 완료하기에 충분한 SOL 잔액이 있는지 확인하십시오.", "address": "주소", "address_book": "주소록", "address_book_menu": "주소록", @@ -543,7 +544,7 @@ "potential_scam": "잠재적 사기", "powered_by": "에 의해 구동 ${title}", "pre_seed_button_text": "이해 했어요. 내 씨앗을 보여줘", - "pre_seed_description": "다음 페이지에서 ${words} 개의 단어를 볼 수 있습니다. 이것은 귀하의 고유하고 개인적인 시드이며 분실 또는 오작동시 지갑을 복구하는 유일한 방법입니다. 기록해두고 Cake Wallet 앱 외부의 안전한 장소에 보관하는 것은 귀하의 책임입니다.", + "pre_seed_description": "다음 페이지에는 일련의 단어가 표시됩니다. 이것은 독특하고 개인적인 씨앗이며 손실이나 오작동의 경우 지갑을 회수하는 유일한 방법입니다. 케이크 지갑 앱 외부의 안전한 장소에 그것을 적어두고 보관하는 것은 귀하의 책임입니다.", "pre_seed_title": "중대한", "prepaid_cards": "선불 카드", "prevent_screenshots": "스크린샷 및 화면 녹화 방지", @@ -1034,4 +1035,4 @@ "you_will_send": "다음에서 변환", "YY": "YY", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index d04ae980d..91604d3ca 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။", "add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။", "add_value": "တန်ဖိုးထည့်ပါ။", + "added_message_for_ata_error": "ကြင်နာစွာသင့်ငွေပေးငွေယူကိုဖြည့်စွက်ရန်သင်အလုံအလောက် sol မျှတမှုရှိသည်။", "address": "လိပ်စာ", "address_book": "လိပ်စာစာအုပ်", "address_book_menu": "လိပ်စာစာအုပ်", @@ -543,7 +544,7 @@ "potential_scam": "အလားအလာရှိသောလိမ်လည်မှု", "powered_by": "${title} မှ ပံ့ပိုးပေးသည်", "pre_seed_button_text": "ကျွန်တော်နားလည်ပါတယ်။ ငါ့အမျိုးအနွယ်ကို ပြလော့", - "pre_seed_description": "နောက်စာမျက်နှာတွင် ${words} စကားလုံးများ အတွဲလိုက်ကို တွေ့ရပါမည်။ ၎င်းသည် သင်၏ထူးခြားပြီး သီးသန့်မျိုးစေ့ဖြစ်ပြီး ပျောက်ဆုံးခြင်း သို့မဟုတ် ချွတ်ယွင်းမှုရှိပါက သင့်ပိုက်ဆံအိတ်ကို ပြန်လည်ရယူရန် တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ၎င်းကို Cake Wallet အက်ပ်၏အပြင်ဘက်တွင် လုံခြုံသောနေရာတွင် သိမ်းဆည်းရန်မှာ သင်၏တာဝန်ဖြစ်သည်။", + "pre_seed_description": "နောက်စာမျက်နှာမှာစကားလုံးတစ်လုံးကိုတွေ့ရလိမ့်မယ်။ ၎င်းသည်သင်၏ထူးခြားသည့်နှင့်ပုဂ္ဂလိကမျိုးစေ့ဖြစ်ပြီးဆုံးရှုံးမှုသို့မဟုတ်ချွတ်ယွင်းမှုကိစ္စတွင်သင်၏ပိုက်ဆံအိတ်ကိုပြန်လည်ရယူရန်တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ၎င်းကိုရေးရန်နှင့်၎င်းကို Cake Wallet App အပြင်ဘက်တွင်လုံခြုံသောနေရာ၌သိမ်းဆည်းရန်သင်၏တာ 0 န်ဖြစ်သည်။", "pre_seed_title": "အရေးကြီးသည်။", "prepaid_cards": "ကြိုတင်ငွေဖြည့်ကဒ်များ", "prevent_screenshots": "ဖန်သားပြင်ဓာတ်ပုံများနှင့် မျက်နှာပြင်ရိုက်ကူးခြင်းကို တားဆီးပါ။", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "သင် ( ခန့်မှန်းခြေ ) လက်ခံရရှိလိမ့်မည်", "you_will_send": "မှပြောင်းပါ။", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 1b6dd4519..200c4b5a6 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Ik heb het adres en de informatie van het tokencontract bevestigd met behulp van een betrouwbare bron. Het toevoegen van kwaadaardige of onjuiste informatie kan leiden tot verlies van geld.", "add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters.\nBevestig tokenadressen altijd met betrouwbare bronnen!", "add_value": "Waarde toevoegen", + "added_message_for_ata_error": "Zorg ervoor dat u voldoende SOL -balans hebt om uw transactie te voltooien.", "address": "Adres", "address_book": "Adresboek", "address_book_menu": "Adresboek", @@ -543,7 +544,7 @@ "potential_scam": "Potentiële zwendel", "powered_by": "Aangedreven door ${title}", "pre_seed_button_text": "Ik begrijp het. Laat me mijn zaad zien", - "pre_seed_description": "Op de volgende pagina ziet u een reeks van ${words} woorden. Dit is uw unieke en persoonlijke zaadje en het is de ENIGE manier om uw portemonnee te herstellen in geval van verlies of storing. Het is JOUW verantwoordelijkheid om het op te schrijven en op een veilige plaats op te slaan buiten de Cake Wallet app.", + "pre_seed_description": "Op de volgende pagina ziet u een reeks woorden. Dit is uw unieke en privézaad en het is de enige manier om uw portemonnee te herstellen in geval van verlies of storing. Het is uw verantwoordelijkheid om het op te schrijven en op te slaan op een veilige plek buiten de cake -portemonnee -app.", "pre_seed_title": "BELANGRIJK", "prepaid_cards": "Prepaid-kaarten", "prevent_screenshots": "Voorkom screenshots en schermopname", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "U ontvangt(geschat )", "you_will_send": "Converteren van", "yy": "JJ" -} +} \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 1537a8229..8f64ea27b 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Potwierdziłem adres kontraktu tokena i informacje, korzystając z renomowanego źródła. Dodanie złośliwych lub niepoprawnych informacji może spowodować utratę środków.", "add_token_warning": "Nie edytuj ani nie dodawaj tokenów zgodnie z instrukcjami oszustów.\nZawsze potwierdzaj adresy tokenów z renomowanymi źródłami!", "add_value": "Dodaj wartość", + "added_message_for_ata_error": "Upewnij się, że masz wystarczającą saldo SOL, aby ukończyć transakcję.", "address": "Adres", "address_book": "Kontakty", "address_book_menu": "Kontakty", @@ -543,7 +544,7 @@ "potential_scam": "Potencjalne oszustwo", "powered_by": "Obsługiwane przez ${title}", "pre_seed_button_text": "Rozumiem. Pokaż mi moją fraze seed", - "pre_seed_description": "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoja unikalna i prywatna fraza seed i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii telefonu. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu (np. na kartce w sejfie).", + "pre_seed_description": "Na następnej stronie zobaczysz serię słów. To jest twoje wyjątkowe i prywatne ziarno i jest to jedyny sposób na odzyskanie portfela w przypadku utraty lub awarii. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu poza aplikacją do portfela ciasta.", "pre_seed_title": "WAŻNE", "prepaid_cards": "Karty przedpłacone", "prevent_screenshots": "Zapobiegaj zrzutom ekranu i nagrywaniu ekranu", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Otrzymasz(oszacowane )", "you_will_send": "Konwertuj z", "yy": "RR" -} +} \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 30de389f7..7aa896216 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Confirmei o endereço e as informações do contrato de token usando uma fonte confiável. Adicionar informações maliciosas ou incorretas pode resultar em perda de fundos.", "add_token_warning": "Não edite ou adicione tokens de acordo com as instruções dos golpistas.\nSempre confirme os endereços de token com fontes confiáveis!", "add_value": "Adicionar valor", + "added_message_for_ata_error": "Por favor, certifique -se de ter um equilíbrio SOL suficiente para concluir sua transação.", "address": "Endereço", "address_book": "Livro de endereços", "address_book_menu": "Livro de endereços", @@ -545,7 +546,7 @@ "potential_scam": "Golpe potencial", "powered_by": "Troca realizada por ${title}", "pre_seed_button_text": "Compreendo. Me mostre minha semente", - "pre_seed_description": "Na próxima página, você verá uma série de ${words} palavras. Esta é a sua semente única e privada e é a ÚNICA maneira de recuperar sua carteira em caso de perda ou mau funcionamento. É SUA responsabilidade anotá-lo e armazená-lo em um local seguro fora do aplicativo Cake Wallet.", + "pre_seed_description": "Na próxima página, você verá uma série de palavras. Esta é a sua semente única e privada e é a única maneira de recuperar sua carteira em caso de perda ou mau funcionamento. É sua responsabilidade anotar e armazená -lo em um local seguro fora do aplicativo de carteira de bolo.", "pre_seed_title": "IMPORTANTE", "prepaid_cards": "Cartões pré-pagos", "prevent_screenshots": "Evite capturas de tela e gravação de tela", @@ -1039,4 +1040,4 @@ "you_will_receive_estimated_amount": "Você receberá(estimado )", "you_will_send": "Converter de", "yy": "aa" -} +} \ No newline at end of file diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 8e0d49b3c..63af1e52a 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.", "add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!", "add_value": "Добавить значение", + "added_message_for_ata_error": "Пожалуйста, убедитесь, что у вас достаточно баланса Sol, чтобы завершить вашу транзакцию.", "address": "Адрес", "address_book": "Адресная книга", "address_book_menu": "Адресная книга", @@ -544,7 +545,7 @@ "potential_scam": "Потенциальная афера", "powered_by": "Используя ${title}", "pre_seed_button_text": "Понятно. Покажите мнемоническую фразу", - "pre_seed_description": "На следующей странице вы увидите серию из ${words} слов. Это ваша уникальная и личная мнемоническая фраза, и это ЕДИНСТВЕННЫЙ способ восстановить свой кошелек в случае потери или неисправности. ВАМ необходимо записать ее и хранить в надежном месте вне приложения Cake Wallet.", + "pre_seed_description": "На следующей странице вы увидите серию слов. Это ваше уникальное и частное семя, и это единственный способ восстановить ваш кошелек в случае потери или неисправности. Вы несете ответственность за то, чтобы записать его и хранить в безопасном месте за пределами приложения кошелька для торта.", "pre_seed_title": "ВАЖНО", "prepaid_cards": "Предоплаченные карты", "prevent_screenshots": "Предотвратить скриншоты и запись экрана", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "Вы получите(Оценку )", "you_will_send": "Конвертировать из", "yy": "ГГ" -} +} \ No newline at end of file diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 1f4045808..4c7bca115 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้", "add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!", "add_value": "เพิ่มมูลค่า", + "added_message_for_ata_error": "กรุณาตรวจสอบให้แน่ใจว่าคุณมียอดคงเหลือโซลเพียงพอที่จะทำธุรกรรมให้เสร็จสมบูรณ์", "address": "ที่อยู่", "address_book": "สมุดที่อยู่", "address_book_menu": "สมุดที่อยู่", @@ -543,7 +544,7 @@ "potential_scam": "การหลอกลวงที่มีศักยภาพ", "powered_by": "พัฒนาขึ้นโดย ${title}", "pre_seed_button_text": "ฉันเข้าใจ แสดง seed ของฉัน", - "pre_seed_description": "บนหน้าถัดไปคุณจะเห็นชุดของคำ ${words} คำ นี่คือ seed ของคุณที่ไม่ซ้ำใดๆ และเป็นความลับเพียงของคุณ และนี่คือเพียงวิธีเดียวที่จะกู้กระเป๋าของคุณในกรณีที่สูญหายหรือมีปัญหา มันเป็นความรับผิดชอบของคุณเพื่อเขียนมันลงบนกระดาษและจัดเก็บไว้ในที่ปลอดภัยนอกแอป Cake Wallet", + "pre_seed_description": "ในหน้าถัดไปคุณจะเห็นชุดคำ นี่คือเมล็ดพันธุ์ที่ไม่เหมือนใครและเป็นส่วนตัวของคุณและเป็นวิธีเดียวที่จะกู้คืนกระเป๋าเงินของคุณในกรณีที่สูญเสียหรือทำงานผิดปกติ มันเป็นความรับผิดชอบของคุณที่จะเขียนลงและเก็บไว้ในที่ปลอดภัยนอกแอพเค้กกระเป๋าเงิน", "pre_seed_title": "สำคัญ", "prepaid_cards": "บัตรเติมเงิน", "prevent_screenshots": "ป้องกันภาพหน้าจอและการบันทึกหน้าจอ", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "คุณจะได้รับ(โดยประมาณ )", "you_will_send": "แปลงจาก", "yy": "ปี" -} +} \ No newline at end of file diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 7d1bcaa13..489fd5ef6 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Kinumpirma ko ang address ng kontrata ng token at impormasyon gamit ang isang kagalang-galang na mapagkukunan. Ang pagdaragdag ng nakakahamak o hindi tamang impormasyon ay maaaring magresulta sa pagkawala ng mga pondo.", "add_token_warning": "Huwag i-edit o magdagdag ng mga token tulad ng itinuro ng mga scammers.\nLaging kumpirmahin ang mga token address na may mga kagalang-galang na mapagkukunan!", "add_value": "Magdagdag ng halaga", + "added_message_for_ata_error": "Mabuting tiyakin na mayroon kang sapat na balanse ng sol upang makumpleto ang iyong transaksyon.", "address": "Address", "address_book": "Address Book", "address_book_menu": "Address book", @@ -543,7 +544,7 @@ "potential_scam": "Potensyal na scam", "powered_by": "Pinapagana ng ${title}", "pre_seed_button_text": "Naiintindihan ko. Ipakita sa akin ang aking binhi", - "pre_seed_description": "Sa susunod na pahina makikita mo ang isang serye ng mga ${words} na mga salita. Ito ang iyong natatangi at pribadong binhi at ito ang tanging paraan upang mabawi ang iyong pitaka kung sakaling mawala o madepektong paggawa. Responsibilidad mong isulat ito at itago ito sa isang ligtas na lugar sa labas ng cake wallet app.", + "pre_seed_description": "Sa susunod na pahina makikita mo ang isang serye ng mga salita. Ito ang iyong natatangi at pribadong binhi at ito ang tanging paraan upang mabawi ang iyong pitaka kung sakaling mawala o madepektong paggawa. Responsibilidad mong isulat ito at itago ito sa isang ligtas na lugar sa labas ng cake wallet app.", "pre_seed_title": "Mahalaga", "prepaid_cards": "Mga Prepaid Card", "prevent_screenshots": "Maiwasan ang mga screenshot at pag -record ng screen", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "Makakatanggap ka ng(tinantyang)", "you_will_send": "I-convert mula sa", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index eec81e9f4..e8b481f27 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Belirteç sözleşmesi adresini ve bilgilerini saygın bir kaynak kullanarak onayladım. Kötü amaçlı veya yanlış bilgilerin eklenmesi para kaybına neden olabilir.", "add_token_warning": "Dolandırıcıların talimatına göre jetonları düzenlemeyin veya eklemeyin.\nBelirteç adreslerini her zaman saygın kaynaklarla onaylayın!", "add_value": "Değer ekle", + "added_message_for_ata_error": "Lütfen işleminizi tamamlamak için yeterli SOL bakiyesine sahip olduğunuzdan emin olun.", "address": "Adres", "address_book": "Adres Defteri", "address_book_menu": "Adres defteri", @@ -543,7 +544,7 @@ "potential_scam": "Potansiyel aldatmaca", "powered_by": "${title} tarafından desteklenmektedir", "pre_seed_button_text": "Anladım. Bana tohumumu göster.", - "pre_seed_description": "Bir sonraki sayfada ${words} kelime göreceksin. Bu senin benzersiz ve özel tohumundur, kaybetmen veya silinmesi durumunda cüzdanını kurtarmanın TEK YOLUDUR. Bunu yazmak ve Cake Wallet uygulaması dışında güvenli bir yerde saklamak tamamen SENİN sorumluluğunda.", + "pre_seed_description": "Bir sonraki sayfada bir dizi kelime göreceksiniz. Bu sizin eşsiz ve özel tohumunuzdur ve kayıp veya arıza durumunda cüzdanınızı kurtarmanın tek yolu budur. Yazmak ve kek cüzdan uygulamasının dışında güvenli bir yerde saklamak sizin sorumluluğunuzdadır.", "pre_seed_title": "UYARI", "prepaid_cards": "Ön ödemeli kartlar", "prevent_screenshots": "Ekran görüntülerini ve ekran kaydını önleyin", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "(Tahmini ) alacaksınız", "you_will_send": "Biçiminden dönüştür:", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 220797d26..8166d36c9 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.", "add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!", "add_value": "Додати значення", + "added_message_for_ata_error": "Будь ласка, переконайтеся, що у вас є достатньо балансу SOL, щоб завершити свою транзакцію.", "address": "Адреса", "address_book": "Адресна книга", "address_book_menu": "Адресна книга", @@ -543,7 +544,7 @@ "potential_scam": "Потенційна афера", "powered_by": "Використовуючи ${title}", "pre_seed_button_text": "Зрозуміло. Покажіть мнемонічну фразу", - "pre_seed_description": "На наступній сторінці ви побачите серію з ${words} слів. Це ваша унікальна та приватна мнемонічна фраза, і це ЄДИНИЙ спосіб відновити ваш гаманець на випадок втрати або несправності. ВАМ необхідно записати її та зберігати в безпечному місці поза програмою Cake Wallet.", + "pre_seed_description": "На наступній сторінці ви побачите ряд слів. Це ваше унікальне та приватне насіння, і це єдиний спосіб відновити гаманець у разі втрати або несправності. Ви несете відповідальність записати його та зберігати в безпечному місці поза додатком для гаманця тортів.", "pre_seed_title": "ВАЖЛИВО", "prepaid_cards": "Передплачені картки", "prevent_screenshots": "Запобігати знімкам екрана та запису екрана", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "Ви отримаєте(оцінюється )", "you_will_send": "Конвертувати з", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index d4741d451..b8ca42745 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔", "add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!", "add_value": "قدر شامل کریں۔", + "added_message_for_ata_error": "برائے مہربانی اس بات کو یقینی بنائیں کہ آپ کے لین دین کو مکمل کرنے کے ل enough آپ کے پاس کافی SOL توازن موجود ہے۔", "address": "ﮧﺘﭘ", "address_book": "ایڈریس بک", "address_book_menu": "ایڈریس بک", @@ -545,7 +546,7 @@ "potential_scam": "ممکنہ گھوٹالہ", "powered_by": "${title} کے ذریعے تقویت یافتہ", "pre_seed_button_text": "میں سمجھتا ہوں۔ مجھے میرا بیج دکھاؤ", - "pre_seed_description": "اگلے صفحے پر آپ کو ${words} الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور یہ آپ کے بٹوے کو ضائع یا خرابی کی صورت میں بازیافت کرنے کا واحد طریقہ ہے۔ اسے لکھنا اور اسے کیک والیٹ ایپ سے باہر کسی محفوظ جگہ پر اسٹور کرنا آپ کی ذمہ داری ہے۔", + "pre_seed_description": "اگلے صفحے پر آپ کو الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور نقصان یا خرابی کی صورت میں اپنے بٹوے کی بازیابی کا واحد راستہ ہے۔ آپ کی ذمہ داری ہے کہ وہ اسے لکھیں اور اسے کیک پرس ایپ کے باہر کسی محفوظ جگہ پر محفوظ کریں۔", "pre_seed_title": "اہم", "prepaid_cards": "پری پیڈ کارڈز", "prevent_screenshots": "اسکرین شاٹس اور اسکرین ریکارڈنگ کو روکیں۔", @@ -1035,4 +1036,4 @@ "you_will_receive_estimated_amount": "آپ(تخمینہ ) وصول کریں گے", "you_will_send": "سے تبدیل کریں۔", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index f4ed2c097..b055670d9 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Tôi đã xác nhận địa chỉ hợp đồng token và thông tin bằng nguồn đáng tin cậy. Thêm thông tin sai hoặc độc hại có thể dẫn đến mất tiền.", "add_token_warning": "Không chỉnh sửa hoặc thêm token theo yêu cầu của kẻ lừa đảo.\nLuôn xác nhận địa chỉ token từ các nguồn đáng tin cậy!", "add_value": "Thêm giá trị", + "added_message_for_ata_error": "Vui lòng đảm bảo bạn có đủ số dư SOL để hoàn thành giao dịch của mình.", "address": "Địa chỉ", "address_book": "Sổ địa chỉ", "address_book_menu": "Sổ địa chỉ", @@ -541,7 +542,7 @@ "potential_scam": "Lừa đảo tiềm năng", "powered_by": "Được cung cấp bởi ${title}", "pre_seed_button_text": "Tôi hiểu. Hiển thị hạt giống của tôi", - "pre_seed_description": "Trên trang tiếp theo, bạn sẽ thấy một chuỗi ${words} từ. Đây là hạt giống riêng tư và duy nhất của bạn và là CÁCH DUY NHẤT để khôi phục ví của bạn trong trường hợp mất hoặc hỏng hóc. Đây là TRÁCH NHIỆM của bạn để ghi lại và lưu trữ nó ở một nơi an toàn ngoài ứng dụng Cake Wallet.", + "pre_seed_description": "Trên trang tiếp theo, bạn sẽ thấy một loạt các từ. Đây là hạt giống độc đáo và riêng tư của bạn và đó là cách duy nhất để phục hồi ví của bạn trong trường hợp mất hoặc trục trặc. Bạn có trách nhiệm viết nó ra và lưu trữ nó ở một nơi an toàn bên ngoài ứng dụng ví Cake.", "pre_seed_title": "QUAN TRỌNG", "prepaid_cards": "Thẻ trả trước", "prevent_screenshots": "Ngăn chặn ảnh chụp màn hình và ghi hình màn hình", @@ -1030,4 +1031,4 @@ "you_will_receive_estimated_amount": "Bạn sẽ nhận được(ước tính )", "you_will_send": "Chuyển đổi từ", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 470191f96..89f9846ae 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "Mo ti jẹrisi adirẹsi adehun ami ati alaye nipa lilo orisun olokiki kan. Fifi irira tabi alaye ti ko tọ le ja si isonu ti owo.", "add_token_warning": "Ma ṣe ṣatunkọ tabi ṣafikun awọn ami bi a ti fun ni aṣẹ nipasẹ awọn scammers.\nNigbagbogbo jẹrisi awọn adirẹsi ami pẹlu awọn orisun olokiki!", "add_value": "Fikún owó", + "added_message_for_ata_error": "Daradara rii daju pe o ni iwọntunwọnsi Sol Sol lati pari iṣowo rẹ.", "address": "Adirẹsi", "address_book": "Ìwé Àdírẹ́sì", "address_book_menu": "Ìwé Àdírẹ́sì", @@ -544,7 +545,7 @@ "potential_scam": "Egan ti o ni agbara", "powered_by": "Láti ọwọ́ ${title}", "pre_seed_button_text": "Mo ti gbọ́. O fi hóró mi hàn mi", - "pre_seed_description": "Ẹ máa wo àwọn ọ̀rọ̀ ${words} lórí ojú tó ń bọ̀. Èyí ni hóró aládàáni yín tó kì í jọra. Ẹ lè fi í nìkan dá àpamọ́wọ́ yín padà sípò tí àṣìṣe tàbí ìbàjẹ́ bá ṣẹlẹ̀. Hóró yín ni ẹ gbọ́dọ̀ kọ sílẹ̀ àti pamọ́ síbí tó kò léwu níta Cake Wallet.", + "pre_seed_description": "Ni oju-iwe ti o tẹle iwọ yoo rii lẹsẹsẹ awọn ọrọ. Eyi jẹ irugbin alailẹgbẹ ati ti ikọkọ ati pe o jẹ ọna nikan lati bọsi apamọwọ rẹ ni ọran ti pipadanu tabi aisise. O jẹ ojuṣe rẹ lati kọ ọ silẹ ki o tọju rẹ ni aye ailewu ti ita ti app Fifun akara naa.", "pre_seed_title": "Ó TI ṢE PÀTÀKÌ", "prepaid_cards": "Awọn kaadi ti a ti sanwo", "prevent_screenshots": "Pese asapọ ti awọn ẹrọ eto aṣa", @@ -1034,4 +1035,4 @@ "you_will_receive_estimated_amount": "Iwọ yoo gba ( excimated )", "you_will_send": "Ṣe pàṣípààrọ̀ láti", "yy": "Ọd" -} +} \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 6de41f297..a1714a63a 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -21,6 +21,7 @@ "add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。", "add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址!", "add_value": "增加价值", + "added_message_for_ata_error": "请确保您有足够的SOL余额来完成交易。", "address": "地址", "address_book": "地址簿", "address_book_menu": "地址簿", @@ -543,7 +544,7 @@ "potential_scam": "潜在骗局", "powered_by": "Powered by ${title}", "pre_seed_button_text": "我明白。 查看种子", - "pre_seed_description": "在下一页上,您将看到${words}个文字。 这是您独有的种子,是丟失或出现故障时恢复钱包的唯一方法。 您有必须将其写下并储存在Cake Wallet应用程序以外的安全地方。", + "pre_seed_description": "在下一页上,您将看到一系列单词。这是您独特的私人种子,这是在损失或故障时恢复钱包的唯一方法。将其写下来并将其存储在蛋糕钱包应用程序外的安全地方是您的责任。", "pre_seed_title": "重要", "prepaid_cards": "预付费卡", "prevent_screenshots": "防止截屏和录屏", @@ -1033,4 +1034,4 @@ "you_will_receive_estimated_amount": "您将收到(估计的)", "you_will_send": "转换自", "yy": "YY" -} +} \ No newline at end of file diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 435d74b72..4de7a3373 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -15,14 +15,14 @@ APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="4.26.0" -MONERO_COM_BUILD_NUMBER=119 +MONERO_COM_BUILD_NUMBER=120 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_SCHEME="monero.com" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.26.0" -CAKEWALLET_BUILD_NUMBER=257 +CAKEWALLET_BUILD_NUMBER=258 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" CAKEWALLET_SCHEME="cakewallet" diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index bb6cf2753..b42a8a2da 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -13,12 +13,12 @@ APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="4.26.0" -MONERO_COM_BUILD_NUMBER=116 +MONERO_COM_BUILD_NUMBER=117 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.26.0" -CAKEWALLET_BUILD_NUMBER=311 +CAKEWALLET_BUILD_NUMBER=312 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" diff --git a/scripts/macos/app_env.sh b/scripts/macos/app_env.sh index 9a3b95f89..651ad48e9 100755 --- a/scripts/macos/app_env.sh +++ b/scripts/macos/app_env.sh @@ -17,12 +17,12 @@ fi MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="4.26.0" -MONERO_COM_BUILD_NUMBER=48 +MONERO_COM_BUILD_NUMBER=49 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.26.0" -CAKEWALLET_BUILD_NUMBER=110 +CAKEWALLET_BUILD_NUMBER=111 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then