diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index 11dffdeac..d40e7671d 100644 --- a/lib/src/screens/seed/wallet_seed_page.dart +++ b/lib/src/screens/seed/wallet_seed_page.dart @@ -1,13 +1,13 @@ import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/src/widgets/seedphrase_grid_widget.dart'; +import 'package:cake_wallet/src/widgets/warning_box_widget.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart'; import 'package:cake_wallet/themes/theme_base.dart'; -import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/share_util.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/show_bar.dart'; -import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -16,14 +16,9 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/view_model/wallet_seed_view_model.dart'; -import '../../../themes/extensions/send_page_theme.dart'; - class WalletSeedPage extends BasePage { WalletSeedPage(this.walletSeedViewModel, {required this.isNewWalletCreated}); - final imageLight = Image.asset('assets/images/crypto_lock_light.png'); - final imageDark = Image.asset('assets/images/crypto_lock.png'); - @override String get title => S.current.seed_title; @@ -68,7 +63,6 @@ class WalletSeedPage extends BasePage { return WillPopScope( onWillPop: () async => false, child: Container( - padding: EdgeInsets.symmetric(horizontal: 14, vertical: 8), alignment: Alignment.center, child: ConstrainedBox( constraints: @@ -79,46 +73,14 @@ class WalletSeedPage extends BasePage { Observer( builder: (_) { return Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 22, right: 22), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: BoxDecoration( - color: currentTheme.type == ThemeType.dark - ? Color.fromRGBO(132, 110, 64, 1) - : Color.fromRGBO(194, 165, 94, 1), - borderRadius: BorderRadius.all(Radius.circular(12)), - border: Border.all( - color: currentTheme.type == ThemeType.dark - ? Color.fromRGBO(177, 147, 41, 1) - : Color.fromRGBO(125, 122, 15, 1), - width: 2.0, - )), - child: Row( - children: [ - Icon( - Icons.warning_amber_rounded, - size: 64, - color: Colors.white.withOpacity(0.75), - ), - SizedBox(width: 6), - Expanded( - child: Text( - S.current.cake_seeds_save_disclaimer, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w800, - color: currentTheme.type == ThemeType.dark - ? Colors.white.withOpacity(0.75) - : Colors.white.withOpacity(0.85), - ), - ), - ), - ], - ), - ), + WarningBox( + content: S.current.cake_seeds_save_disclaimer, + currentTheme: currentTheme), SizedBox(height: 20), Text( key: ValueKey('wallet_seed_page_wallet_name_text_key'), @@ -131,70 +93,19 @@ class WalletSeedPage extends BasePage { ), SizedBox(height: 20), Expanded( - child: GridView.builder( - itemCount: walletSeedViewModel.seedSplit.length, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, - childAspectRatio: 2.8, - mainAxisSpacing: 8.0, - crossAxisSpacing: 8.0, - ), - itemBuilder: (context, index) { - final item = walletSeedViewModel.seedSplit[index]; - final numberCount = index + 1; - - return Container( - padding: const EdgeInsets.symmetric(horizontal: 8), - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: Theme.of(context).cardColor, - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - child: Text( - //maxLines: 1, - numberCount.toString(), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12, - height: 1, - fontWeight: FontWeight.w800, - color: Theme.of(context) - .extension()! - .buttonTextColor - .withOpacity(0.5)), - ), - ), - const SizedBox(width: 6), - Expanded( - child: Text( - '${item[0].toLowerCase()}${item.substring(1)}', - style: TextStyle( - fontSize: 14, - height: 0.8, - fontWeight: FontWeight.w700, - color: Theme.of(context) - .extension()! - .buttonTextColor), - ), - ), - ], - ), - ); - }, - ), + child: SeedPhraseGridWidget(list: walletSeedViewModel.seedSplit), ), ], ), + ), ); }, ), Column( children: [ - Row( + Padding( + padding: EdgeInsets.symmetric(horizontal: 14, vertical: 8), + child: Row( mainAxisSize: MainAxisSize.max, children: [ Flexible( @@ -233,6 +144,7 @@ class WalletSeedPage extends BasePage { ) ], ), + ), SizedBox(height: 12), ], ) diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index ac00bb161..4030c21f1 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -1,19 +1,21 @@ -import 'package:auto_size_text/auto_size_text.dart'; import 'package:cake_wallet/entities/qr_view_data.dart'; -import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/list_row.dart'; -import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/widgets/primary_button.dart'; +import 'package:cake_wallet/src/widgets/seedphrase_grid_widget.dart'; +import 'package:cake_wallet/src/widgets/text_info_box.dart'; +import 'package:cake_wallet/src/widgets/warning_box_widget.dart'; +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart'; +import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/utils/brightness_util.dart'; import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/view_model/wallet_keys_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:qr_flutter/qr_flutter.dart'; -import 'package:cake_wallet/themes/extensions/picker_theme.dart'; class WalletKeysPage extends BasePage { WalletKeysPage(this.walletKeysViewModel); @@ -24,95 +26,290 @@ class WalletKeysPage extends BasePage { final WalletKeysViewModel walletKeysViewModel; @override - Widget trailing(BuildContext context) => IconButton( - key: ValueKey('wallet_keys_page_fullscreen_qr_button_key'), - onPressed: () async { - final url = await walletKeysViewModel.url; + Widget body(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(left: 14, right: 14, bottom: 8), + child: WarningBox( + key: const ValueKey('wallet_keys_page_share_warning_text_key'), + content: S.of(context).do_not_share_warning_text.toUpperCase(), + currentTheme: currentTheme, + ), + ), + Expanded( + child: WalletKeysPageBody( + walletKeysViewModel: walletKeysViewModel, + currentTheme: currentTheme, + ), + ), + ], + ), + ); + } +} - BrightnessUtil.changeBrightnessForFunction(() async { - await Navigator.pushNamed( - context, - Routes.fullscreenQR, - arguments: QrViewData(data: url.toString(), version: QrVersions.auto), - ); - }); - }, - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - hoverColor: Colors.transparent, - icon: Image.asset( - 'assets/images/qr_code_icon.png', - ), - ); +class WalletKeysPageBody extends StatefulWidget { + WalletKeysPageBody({ + required this.walletKeysViewModel, + required this.currentTheme, + }); + + final WalletKeysViewModel walletKeysViewModel; + final ThemeBase currentTheme; @override - Widget body(BuildContext context) { + State createState() => _WalletKeysPageBodyState(); +} + +class _WalletKeysPageBodyState extends State + with SingleTickerProviderStateMixin { + late TabController _tabController; + late bool showKeyTab; + late bool showLegacySeedTab; + late bool isLegacySeedOnly; + + @override + void initState() { + super.initState(); + + showKeyTab = widget.walletKeysViewModel.items.isNotEmpty; + showLegacySeedTab = widget.walletKeysViewModel.legacySeedSplit.isNotEmpty; + isLegacySeedOnly = widget.walletKeysViewModel.isLegacySeedOnly; + + final totalTabs = 1 + (showKeyTab ? 1 : 0) + (showLegacySeedTab ? 1 : 0); + + _tabController = TabController(length: totalTabs, vsync: this); + } + + @override + void dispose() { + _tabController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.only(left: 22, right: 22, top: 0), + child: TabBar( + controller: _tabController, + splashFactory: NoSplash.splashFactory, + indicatorSize: TabBarIndicatorSize.label, + isScrollable: true, + labelStyle: TextStyle( + fontSize: 18, + fontFamily: 'Lato', + fontWeight: FontWeight.w600, + color: Theme.of(context).appBarTheme.titleTextStyle!.color, + ), + unselectedLabelStyle: TextStyle( + fontSize: 18, + fontFamily: 'Lato', + fontWeight: FontWeight.w600, + color: Theme.of(context).appBarTheme.titleTextStyle!.color?.withOpacity(0.5), + ), + labelColor: Theme.of(context).appBarTheme.titleTextStyle!.color, + indicatorColor: Theme.of(context).appBarTheme.titleTextStyle!.color, + indicatorPadding: EdgeInsets.zero, + labelPadding: const EdgeInsets.only(right: 24), + tabAlignment: TabAlignment.start, + dividerColor: Colors.transparent, + padding: EdgeInsets.zero, + tabs: [ + Tab(text: S.of(context).widgets_seed), + if (showKeyTab) Tab(text: S.of(context).keys), + if (showLegacySeedTab) Tab(text: S.of(context).legacy), + ], + ), + ), + const SizedBox(height: 20), + Expanded( + child: TabBarView( + controller: _tabController, + children: [ + Padding( + padding: const EdgeInsets.only(left: 22, right: 22,), + child: _buildSeedTab(context, false), + ), + if (showKeyTab) + Padding( + padding: const EdgeInsets.only(left: 22, right: 22), + child: _buildKeysTab(context), + ), + if (showLegacySeedTab) + Padding( + padding: const EdgeInsets.only(left: 22, right: 22), + child: _buildSeedTab(context, showLegacySeedTab), + ), + ], + ), + ), + + ], + ), + ); + } + + Widget _buildSeedTab(BuildContext context, bool isLegacySeed) { return Column( children: [ + if (isLegacySeedOnly || isLegacySeed) _buildHeightBox(), + const SizedBox(height: 20), Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), - child: Container( - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12.0), - color: Theme.of(context).cardColor, - ), - child: Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: AutoSizeText( - key: ValueKey('wallet_keys_page_share_warning_text_key'), - S.of(context).do_not_share_warning_text.toUpperCase(), - textAlign: TextAlign.center, - maxLines: 4, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Colors.red, - ), - ), - ), - ), - ), + child: SeedPhraseGridWidget( + list: isLegacySeed + ? widget.walletKeysViewModel.legacySeedSplit + : widget.walletKeysViewModel.seedSplit, ), ), - Expanded( - flex: 7, - child: Container( - padding: EdgeInsets.only(top: 20.0, bottom: 20.0), - child: Observer( - builder: (_) { - return ListView.separated( - key: ValueKey('wallet_keys_page_credentials_list_view_key'), - separatorBuilder: (context, index) => Container( - height: 1, - padding: EdgeInsets.only(left: 24), - color: Theme.of(context).extension()!.dividerColor, - child: const HorizontalSectionDivider(), - ), - itemCount: walletKeysViewModel.items.length, - itemBuilder: (BuildContext context, int index) { - final item = walletKeysViewModel.items[index]; - - return GestureDetector( - key: item.key, - onTap: () { - ClipboardUtil.setSensitiveDataToClipboard(ClipboardData(text: item.value)); - showBar(context, S.of(context).copied_key_to_clipboard(item.title)); - }, - child: ListRow( - title: item.title + ':', - value: item.value, - ), - ); - }, - ); - }, - ), - ), + const SizedBox(height: 10), + _buildBottomActionPanel( + titleForClipboard: S.of(context).wallet_seed.toLowerCase(), + dataToCopy: isLegacySeed + ? widget.walletKeysViewModel.legacySeed + : widget.walletKeysViewModel.seed, + onShowQR: () async => _showQR(context, false), ), ], ); } + + Widget _buildKeysTab(BuildContext context) { + return Column( + children: [ + Expanded( + child: ListView.separated( + shrinkWrap: true, + itemCount: widget.walletKeysViewModel.items.length, + itemBuilder: (context, index) { + final item = widget.walletKeysViewModel.items[index]; + return TextInfoBox( + key: item.key, + title: item.title, + value: item.value, + onCopy: (context) => _onCopy(item.title, item.value, context), + ); + }, + separatorBuilder: (context, index) => const SizedBox(height: 20), + ), + ), + SizedBox(height: 20), + ], + ); + } + + Widget _buildHeightBox() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 14), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: Theme.of(context).cardColor, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + S.of(context).block_height, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Theme.of(context).extension()!.buttonTextColor.withOpacity(0.5), + ), + ), + const SizedBox(width: 6), + Expanded( + child: FutureBuilder( + future: widget.walletKeysViewModel.restoreHeight, + builder: (context, snapshot) { + final textToDisplay = snapshot.connectionState == ConnectionState.waiting + ? 'Fetching...' + : (snapshot.data ?? '---'); + + return Text( + textToDisplay, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Theme.of(context).extension()!.buttonTextColor, + ), + ); + }, + ), + ), + ], + ), + ); + } + + + Widget _buildBottomActionPanel({ + required String titleForClipboard, + required String dataToCopy, + required VoidCallback onShowQR, + }) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: Container( + padding: const EdgeInsets.only(right: 8.0, top: 8.0), + child: PrimaryButton( + key: const ValueKey('wallet_keys_page_copy_seeds_button_key'), + onPressed: () => _onCopy(titleForClipboard, dataToCopy, context), + text: S.of(context).copy, + color: Theme.of(context).cardColor, + textColor: widget.currentTheme.type == ThemeType.dark + ? Theme.of(context).extension()!.textColor + : Theme.of(context).extension()!.buttonTextColor, + ), + ), + ), + Flexible( + child: Container( + padding: const EdgeInsets.only(left: 8.0, top: 8.0), + child: PrimaryButton( + key: const ValueKey('wallet_keys_page_show_qr_seeds_button_key'), + onPressed: onShowQR, + text: S.current.show + ' QR', + color: Theme.of(context).primaryColor, + textColor: Colors.white, + ), + ), + ), + ], + ), + ), + const SizedBox(height: 12), + ], + ); + } + + Future _onCopy(String title, String text, BuildContext context) async { + await ClipboardUtil.setSensitiveDataToClipboard(ClipboardData(text: text)); + showBar(context, S.of(context).copied_key_to_clipboard(title)); + } + + Future _showQR(BuildContext context, bool isLegacySeed) async { + final url = await widget.walletKeysViewModel.getUrl(isLegacySeed); + + BrightnessUtil.changeBrightnessForFunction(() async { + await Navigator.pushNamed( + context, + Routes.fullscreenQR, + arguments: QrViewData(data: url.toString(), version: QrVersions.auto), + ); + }); + } } diff --git a/lib/src/widgets/seedphrase_grid_widget.dart b/lib/src/widgets/seedphrase_grid_widget.dart new file mode 100644 index 000000000..4f537c064 --- /dev/null +++ b/lib/src/widgets/seedphrase_grid_widget.dart @@ -0,0 +1,68 @@ +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; +import 'package:flutter/material.dart'; + +class SeedPhraseGridWidget extends StatelessWidget { + const SeedPhraseGridWidget({ + super.key, + required this.list, + }); + + final List list; + + @override + Widget build(BuildContext context) { + return GridView.builder( + itemCount: list.length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + childAspectRatio: 2.8, + mainAxisSpacing: 8.0, + crossAxisSpacing: 8.0, + ), + itemBuilder: (context, index) { + final item = list[index]; + final numberCount = index + 1; + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: Theme.of(context).cardColor, + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + child: Text( + //maxLines: 1, + numberCount.toString(), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, + height: 1, + fontWeight: FontWeight.w800, + color: Theme.of(context) + .extension()! + .buttonTextColor + .withOpacity(0.5)), + ), + ), + const SizedBox(width: 6), + Expanded( + child: Text( + '${item[0].toLowerCase()}${item.substring(1)}', + style: TextStyle( + fontSize: 14, + height: 0.8, + fontWeight: FontWeight.w700, + color: Theme.of(context).extension()!.buttonTextColor), + ), + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/src/widgets/text_info_box.dart b/lib/src/widgets/text_info_box.dart new file mode 100644 index 000000000..8a4149c55 --- /dev/null +++ b/lib/src/widgets/text_info_box.dart @@ -0,0 +1,51 @@ +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; +import 'package:flutter/material.dart'; + +class TextInfoBox extends StatelessWidget { + const TextInfoBox({Key? key, required this.title, required this.value, this.onCopy}) + : super(key: key); + + final String title; + final String value; + final void Function(BuildContext context)? onCopy; + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: Theme.of(context).cardColor, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(title, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Theme.of(context) + .extension()! + .buttonTextColor + .withOpacity(0.5))), + GestureDetector( + onTap: onCopy != null ? () => onCopy!(context) : null, + child: Icon(Icons.copy, + size: 13, + color: Theme.of(context).textTheme.bodyLarge?.color?.withOpacity(0.7))), + ], + ), + const SizedBox(height: 4), + Text(value, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).extension()!.buttonTextColor)), + ], + ), + ); + } +} diff --git a/lib/src/widgets/warning_box_widget.dart b/lib/src/widgets/warning_box_widget.dart new file mode 100644 index 000000000..02d688956 --- /dev/null +++ b/lib/src/widgets/warning_box_widget.dart @@ -0,0 +1,51 @@ +import 'package:cake_wallet/themes/theme_base.dart'; +import 'package:flutter/material.dart'; + +class WarningBox extends StatelessWidget { + const WarningBox({required this.content, required this.currentTheme, Key? key}) + : super(key: key); + + final String content; + final ThemeBase currentTheme; + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: BoxDecoration( + color: currentTheme.type == ThemeType.dark + ? Color.fromRGBO(132, 110, 64, 1) + : Color.fromRGBO(194, 165, 94, 1), + borderRadius: BorderRadius.all(Radius.circular(12)), + border: Border.all( + color: currentTheme.type == ThemeType.dark + ? Color.fromRGBO(177, 147, 41, 1) + : Color.fromRGBO(125, 122, 15, 1), + width: 2.0, + )), + child: Row( + children: [ + Icon( + Icons.warning_amber_rounded, + size: 64, + color: Colors.white.withOpacity(0.75), + ), + SizedBox(width: 6), + Expanded( + child: Text( + content, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w800, + color: currentTheme.type == ThemeType.dark + ? Colors.white.withOpacity(0.75) + : Colors.white.withOpacity(0.85), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/view_model/wallet_keys_view_model.dart b/lib/view_model/wallet_keys_view_model.dart index 81eda7cc8..00490d429 100644 --- a/lib/view_model/wallet_keys_view_model.dart +++ b/lib/view_model/wallet_keys_view_model.dart @@ -3,6 +3,7 @@ import 'package:cake_wallet/haven/haven.dart'; import 'package:cake_wallet/monero/monero.dart'; import 'package:cake_wallet/reactions/wallet_connect.dart'; import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart'; +import 'package:cake_wallet/src/widgets/text_info_box.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/wownero/wownero.dart'; import 'package:cw_core/transaction_direction.dart'; @@ -20,32 +21,29 @@ class WalletKeysViewModel = WalletKeysViewModelBase with _$WalletKeysViewModel; abstract class WalletKeysViewModelBase with Store { WalletKeysViewModelBase(this._appStore) - : title = _appStore.wallet!.type == WalletType.bitcoin || - _appStore.wallet!.type == WalletType.litecoin || - _appStore.wallet!.type == WalletType.bitcoinCash - ? S.current.wallet_seed - : S.current.wallet_keys, + : title = S.current.wallet_keys, + _wallet = _appStore.wallet!, _walletName = _appStore.wallet!.type.name, _restoreHeight = _appStore.wallet!.walletInfo.restoreHeight, _restoreHeightByTransactions = 0, items = ObservableList() { - _populateItems(); + _populateKeysItems(); reaction((_) => _appStore.wallet, (WalletBase? _wallet) { - _populateItems(); + _populateKeysItems(); }); - if (_appStore.wallet!.type == WalletType.monero || - _appStore.wallet!.type == WalletType.haven || - _appStore.wallet!.type == WalletType.wownero) { - final accountTransactions = _getWalletTransactions(_appStore.wallet!); + if (_wallet.type == WalletType.monero || + _wallet.type == WalletType.haven || + _wallet.type == WalletType.wownero) { + final accountTransactions = _getWalletTransactions(_wallet); if (accountTransactions.isNotEmpty) { final incomingAccountTransactions = accountTransactions.where((tx) => tx.direction == TransactionDirection.incoming); if (incomingAccountTransactions.isNotEmpty) { incomingAccountTransactions.toList().sort((a, b) => a.date.compareTo(b.date)); - _restoreHeightByTransactions = _getRestoreHeightByTransactions( - _appStore.wallet!.type, incomingAccountTransactions.first.date); + _restoreHeightByTransactions = + _getRestoreHeightByTransactions(_wallet.type, incomingAccountTransactions.first.date); } } } @@ -54,26 +52,61 @@ abstract class WalletKeysViewModelBase with Store { final ObservableList items; final String title; - + final WalletBase _wallet; final String _walletName; - - AppStore get appStore => _appStore; - final AppStore _appStore; - final int _restoreHeight; int _restoreHeightByTransactions; - void _populateItems() { + AppStore get appStore => _appStore; + + String get seed => _wallet.seed != null ? _wallet.seed! : ''; + + bool get isLegacySeedOnly => + (_wallet.type == WalletType.monero || _wallet.type == WalletType.wownero) && + _wallet.seed != null && + !Polyseed.isValidSeed(_wallet.seed!); + + String get legacySeed { + if ((_wallet.type == WalletType.monero || _wallet.type == WalletType.wownero) && + _wallet.seed != null && + Polyseed.isValidSeed(_wallet.seed!)) { + final langName = PolyseedLang.getByPhrase(_wallet.seed!).nameEnglish; + + if (_wallet.type == WalletType.monero) { + return (_wallet as MoneroWalletBase).seedLegacy(langName); + } else if (_wallet.type == WalletType.wownero) { + return wownero!.getLegacySeed(_wallet, langName); + } + } + return ''; + } + + String get legacyRestoreHeight { + if (_wallet.type == WalletType.monero) { + return monero!.getRestoreHeight(_wallet)?.toString() ?? ''; + } + return ''; + } + + /// The Regex split the words based on any whitespace character. + /// + /// Either standard ASCII space (U+0020) or the full-width space character (U+3000) used by the Japanese. + List get seedSplit => seed.isNotEmpty ? seed.split(RegExp(r'\s+')) : []; + + List get legacySeedSplit => legacySeed.isNotEmpty ? legacySeed.split(RegExp(r'\s+')) : []; + + void _populateKeysItems() { items.clear(); - if (_appStore.wallet!.type == WalletType.monero) { - final keys = monero!.getKeys(_appStore.wallet!); + if (_wallet.type == WalletType.monero) { + final keys = monero!.getKeys(_wallet); items.addAll([ if (keys['primaryAddress'] != null) StandartListItem( + key: ValueKey('${_walletName}_wallet_primary_address_item_key'), title: S.current.primary_address, value: keys['primaryAddress']!), if (keys['publicSpendKey'] != null) @@ -100,43 +133,16 @@ abstract class WalletKeysViewModelBase with Store { title: S.current.view_key_private, value: keys['privateViewKey']!, ), - if (_appStore.wallet!.seed!.isNotEmpty) - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, - ), ]); - - if (_appStore.wallet?.seed != null && Polyseed.isValidSeed(_appStore.wallet!.seed!)) { - final lang = PolyseedLang.getByPhrase(_appStore.wallet!.seed!); - items.add( - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_legacy_item_key'), - title: S.current.wallet_seed_legacy, - value: (_appStore.wallet as MoneroWalletBase).seedLegacy(lang.nameEnglish), - ), - ); - } - - final restoreHeight = monero!.getRestoreHeight(_appStore.wallet!); - if (restoreHeight != null) { - items.add( - StandartListItem( - key: ValueKey('${_walletName}_wallet_restore_height_item_key'), - title: S.current.wallet_recovery_height, - value: restoreHeight.toString(), - ), - ); - } } - if (_appStore.wallet!.type == WalletType.haven) { - final keys = haven!.getKeys(_appStore.wallet!); + if (_wallet.type == WalletType.haven) { + final keys = haven!.getKeys(_wallet); items.addAll([ if (keys['primaryAddress'] != null) StandartListItem( + key: ValueKey('${_walletName}_wallet_primary_address_item_key'), title: S.current.primary_address, value: keys['primaryAddress']!), if (keys['publicSpendKey'] != null) @@ -163,21 +169,16 @@ abstract class WalletKeysViewModelBase with Store { title: S.current.view_key_private, value: keys['privateViewKey']!, ), - if (_appStore.wallet!.seed!.isNotEmpty) - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, - ), ]); } - if (_appStore.wallet!.type == WalletType.wownero) { - final keys = wownero!.getKeys(_appStore.wallet!); + if (_wallet.type == WalletType.wownero) { + final keys = wownero!.getKeys(_wallet); items.addAll([ if (keys['primaryAddress'] != null) StandartListItem( + key: ValueKey('${_walletName}_wallet_primary_address_item_key'), title: S.current.primary_address, value: keys['primaryAddress']!), if (keys['publicSpendKey'] != null) @@ -204,108 +205,73 @@ abstract class WalletKeysViewModelBase with Store { title: S.current.view_key_private, value: keys['privateViewKey']!, ), - if (_appStore.wallet!.seed!.isNotEmpty) - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, - ), - ]); - - if (_appStore.wallet?.seed != null && Polyseed.isValidSeed(_appStore.wallet!.seed!)) { - final lang = PolyseedLang.getByPhrase(_appStore.wallet!.seed!); - items.add( - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_legacy_item_key'), - title: S.current.wallet_seed_legacy, - value: wownero!.getLegacySeed(_appStore.wallet!, lang.nameEnglish), - ), - ); - } - } - - if (_appStore.wallet!.type == WalletType.bitcoin || - _appStore.wallet!.type == WalletType.litecoin || - _appStore.wallet!.type == WalletType.bitcoinCash) { - // final keys = bitcoin!.getWalletKeys(_appStore.wallet!); - - items.addAll([ - // if (keys['wif'] != null) - // StandartListItem(title: "WIF", value: keys['wif']!), - // if (keys['privateKey'] != null) - // StandartListItem(title: S.current.private_key, value: keys['privateKey']!), - // if (keys['publicKey'] != null) - // StandartListItem(title: S.current.public_key, value: keys['publicKey']!), - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, - ), ]); } - if (isEVMCompatibleChain(_appStore.wallet!.type) || - _appStore.wallet!.type == WalletType.solana || - _appStore.wallet!.type == WalletType.tron) { + // if (_wallet.type == WalletType.bitcoin || + // _wallet.type == WalletType.litecoin || + // _wallet.type == WalletType.bitcoinCash) { + // final keys = bitcoin!.getWalletKeys(_appStore.wallet!); + // + // items.addAll([ + // if (keys['wif'] != null) + // StandartListItem(title: "WIF", value: keys['wif']!), + // if (keys['privateKey'] != null) + // StandartListItem(title: S.current.private_key, value: keys['privateKey']!), + // if (keys['publicKey'] != null) + // StandartListItem(title: S.current.public_key, value: keys['publicKey']!), + // ]); + // } + + if (isEVMCompatibleChain(_wallet.type) || + _wallet.type == WalletType.solana || + _wallet.type == WalletType.tron) { items.addAll([ - if (_appStore.wallet!.privateKey != null) + if (_wallet.privateKey != null) StandartListItem( key: ValueKey('${_walletName}_wallet_private_key_item_key'), title: S.current.private_key, - value: _appStore.wallet!.privateKey!, - ), - if (_appStore.wallet!.seed != null) - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, + value: _wallet.privateKey!, ), ]); } - bool nanoBased = - _appStore.wallet!.type == WalletType.nano || _appStore.wallet!.type == WalletType.banano; + bool nanoBased = _wallet.type == WalletType.nano || _wallet.type == WalletType.banano; if (nanoBased) { // we always have the hex version of the seed and private key: items.addAll([ - if (_appStore.wallet!.seed != null) - StandartListItem( - key: ValueKey('${_walletName}_wallet_seed_item_key'), - title: S.current.wallet_seed, - value: _appStore.wallet!.seed!, - ), - if (_appStore.wallet!.hexSeed != null) + if (_wallet.hexSeed != null) StandartListItem( key: ValueKey('${_walletName}_wallet_hex_seed_key'), title: S.current.seed_hex_form, - value: _appStore.wallet!.hexSeed!, + value: _wallet.hexSeed!, ), - if (_appStore.wallet!.privateKey != null) + if (_wallet.privateKey != null) StandartListItem( key: ValueKey('${_walletName}_wallet_private_key_item_key'), title: S.current.private_key, - value: _appStore.wallet!.privateKey!, + value: _wallet.privateKey!, ), ]); } } Future _currentHeight() async { - if (_appStore.wallet!.type == WalletType.haven) { + if (_wallet.type == WalletType.haven) { return await haven!.getCurrentHeight(); } - if (_appStore.wallet!.type == WalletType.monero) { + if (_wallet.type == WalletType.monero) { return await monero!.getCurrentHeight(); } - if (_appStore.wallet!.type == WalletType.wownero) { + if (_wallet.type == WalletType.wownero) { return await wownero!.getCurrentHeight(); } return null; } String get _scheme { - switch (_appStore.wallet!.type) { + switch (_wallet.type) { case WalletType.monero: return 'monero-wallet'; case WalletType.bitcoin: @@ -331,7 +297,7 @@ abstract class WalletKeysViewModelBase with Store { case WalletType.wownero: return 'wownero-wallet'; default: - throw Exception('Unexpected wallet type: ${_appStore.wallet!.type.toString()}'); + throw Exception('Unexpected wallet type: ${_wallet.type.toString()}'); } } @@ -349,19 +315,26 @@ abstract class WalletKeysViewModelBase with Store { Future> get _queryParams async { final restoreHeightResult = await restoreHeight; return { - if (_appStore.wallet!.seed != null) 'seed': _appStore.wallet!.seed!, - if (_appStore.wallet!.seed == null && _appStore.wallet!.hexSeed != null) - 'hexSeed': _appStore.wallet!.hexSeed!, - if (_appStore.wallet!.seed == null && _appStore.wallet!.privateKey != null) - 'private_key': _appStore.wallet!.privateKey!, + if (_wallet.seed != null) 'seed': _wallet.seed!, + if (_wallet.seed == null && _wallet.hexSeed != null) 'hexSeed': _wallet.hexSeed!, + if (_wallet.seed == null && _wallet.privateKey != null) 'private_key': _wallet.privateKey!, if (restoreHeightResult != null) ...{'height': restoreHeightResult}, - if (_appStore.wallet!.passphrase != null) 'passphrase': _appStore.wallet!.passphrase! + if (_wallet.passphrase != null) 'passphrase': _wallet.passphrase! }; } - Future get url async => Uri( + Future> get _queryParamsForLegacy async { + final restoreHeightResult = await restoreHeight; + return { + if (legacySeed.isNotEmpty) 'seed': legacySeed, + if (restoreHeightResult != null) ...{'height': restoreHeightResult}, + if (_wallet.passphrase != null) 'passphrase': _wallet.passphrase! + }; + } + + Future getUrl(bool isLegacySeed) async => Uri( scheme: _scheme, - queryParameters: await _queryParams, + queryParameters: isLegacySeed ? await _queryParamsForLegacy : await _queryParams, ); List _getWalletTransactions(WalletBase wallet) { diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index e067eca08..e75c99825 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "موضوع البيتكوين الظلام", "bitcoin_light_theme": "موضوع البيتكوين الخفيفة", "bitcoin_payments_require_1_confirmation": "تتطلب مدفوعات Bitcoin تأكيدًا واحدًا ، والذي قد يستغرق 20 دقيقة أو أكثر. شكرا لصبرك! سيتم إرسال بريد إلكتروني إليك عند تأكيد الدفع.", + "block_height": "ارتفاع كتلة", "block_remaining": "1 كتلة متبقية", "Blocks_remaining": "بلوك متبقي ${status}", "bluetooth": "بلوتوث", @@ -379,6 +380,7 @@ "invalid_password": "رمز مرور خاطئ", "invoice_details": "تفاصيل الفاتورة", "is_percentage": "يكون", + "keys": "مفاتيح", "last_30_days": "آخر 30 يومًا", "learn_more": "اعرف المزيد", "ledger_connection_error": "فشل في الاتصال بك دفتر الأستاذ. حاول مرة اخرى.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "تم رفض المعاملة على الجهاز", "ledger_error_wrong_app": "يرجى التأكد", "ledger_please_enable_bluetooth": "يرجى تمكين البلوتوث للكشف عن دفتر الأستاذ الخاص بك", + "legacy": "إرث", "light_theme": "فاتح", "litecoin_enable_mweb_sync": "تمكين MWEB المسح الضوئي", "litecoin_mweb": "mweb", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 8536200fd..b965ff2d3 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Тъмна тема за биткойн", "bitcoin_light_theme": "Лека биткойн тема", "bitcoin_payments_require_1_confirmation": "Плащанията с Bitcoin изискват потвърждение, което може да отнеме 20 минути или повече. Благодарим за търпението! Ще получите имейл, когато плащането е потвърдено.", + "block_height": "Височина на блока", "block_remaining": "1 блок останал", "Blocks_remaining": "${status} оставащи блока", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Невалидна парола", "invoice_details": "IДанни за фактура", "is_percentage": "е", + "keys": "Клавиши", "last_30_days": "Последните 30 дни", "learn_more": "Научете още", "ledger_connection_error": "Не успя да се свърже с вашата книга. Моля, опитайте отново.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Транзакция, отхвърлена на устройство", "ledger_error_wrong_app": "Моля, уверете се, че сте отворили правилното приложение на вашата книга", "ledger_please_enable_bluetooth": "Моля, активирайте Bluetooth да открие вашата книга", + "legacy": "Наследство", "light_theme": "Светло", "litecoin_enable_mweb_sync": "Активирайте сканирането на MWeb", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 8ec02ddb0..5c9027485 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Tmavé téma bitcoinů", "bitcoin_light_theme": "Světlé téma bitcoinů", "bitcoin_payments_require_1_confirmation": "U plateb Bitcoinem je vyžadováno alespoň 1 potvrzení, což může trvat 20 minut i déle. Děkujeme za vaši trpělivost! Až bude platba potvrzena, budete informováni e-mailem.", + "block_height": "Výška bloku", "block_remaining": "1 blok zbývající", "Blocks_remaining": "Zbývá ${status} bloků", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Neplatné heslo", "invoice_details": "detaily faktury", "is_percentage": "je", + "keys": "Klíče", "last_30_days": "Posledních 30 dnů", "learn_more": "Zjistit více", "ledger_connection_error": "Nepodařilo se připojit k vaší knize. Prosím zkuste to znovu.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transakce zamítnuta na zařízení", "ledger_error_wrong_app": "Ujistěte se, že se na své knize otevřete správnou aplikaci", "ledger_please_enable_bluetooth": "Umožněte prosím Bluetooth detekovat vaši knihu", + "legacy": "Dědictví", "light_theme": "Světlý", "litecoin_enable_mweb_sync": "Povolit skenování MWeb", "litecoin_mweb": "MWeb", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 762f93451..fef3a734f 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Dunkles Bitcoin-Thema", "bitcoin_light_theme": "Bitcoin Light-Thema", "bitcoin_payments_require_1_confirmation": "Bitcoin-Zahlungen erfordern 1 Bestätigung, was 20 Minuten oder länger dauern kann. Danke für Ihre Geduld! Sie erhalten eine E-Mail, wenn die Zahlung bestätigt ist.", + "block_height": "Blockhöhe", "block_remaining": "1 Block verbleibend", "Blocks_remaining": "${status} verbleibende Blöcke", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Ungültiges Passwort", "invoice_details": "Rechnungs-Details", "is_percentage": "ist", + "keys": "Schlüssel", "last_30_days": "Letzte 30 Tage", "learn_more": "Erfahren Sie mehr", "ledger_connection_error": "Verbindung zum Ledger gescheitert. Bitte versuche es erneut.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transaktion auf dem Gerät abgelehnt", "ledger_error_wrong_app": "Bitte stellen Sie sicher, dass Sie die richtige App auf Ihrem Ledger geöffnet haben", "ledger_please_enable_bluetooth": "Bitte aktivieren Sie Bluetooth um sich mit Ihren Ledger zu verbinden.", + "legacy": "Vermächtnis", "light_theme": "Hell", "litecoin_enable_mweb_sync": "Aktivieren Sie das MWEB-Scannen", "litecoin_mweb": "MWeb", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 0495e5d75..69bee6892 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Dark Theme", "bitcoin_light_theme": "Bitcoin Light Theme", "bitcoin_payments_require_1_confirmation": "Bitcoin payments require 1 confirmation, which can take 20 minutes or longer. Thanks for your patience! You will be emailed when the payment is confirmed.", + "block_height": "Block height", "block_remaining": "1 Block Remaining", "Blocks_remaining": "${status} Blocks Remaining", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Invalid password", "invoice_details": "Invoice details", "is_percentage": "is", + "keys": "Keys", "last_30_days": "Last 30 days", "learn_more": "Learn More", "ledger_connection_error": "Failed to connect to you Ledger. Please try again.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transaction rejected on device", "ledger_error_wrong_app": "Please make sure you opend the right app on your ledger", "ledger_please_enable_bluetooth": "Please enable Bluetooth to detect your Ledger", + "legacy": "Legacy", "light_theme": "Light", "litecoin_enable_mweb_sync": "Enable MWEB scanning", "litecoin_mweb": "MWEB", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 7084894eb..d67fef797 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Tema oscuro de Bitcoin", "bitcoin_light_theme": "Tema claro de Bitcoin", "bitcoin_payments_require_1_confirmation": "Los pagos de Bitcoin requieren 1 confirmación, que puede demorar 20 minutos o más. ¡Gracias por tu paciencia! Se te enviará un correo electrónico cuando se confirme el pago.", + "block_height": "Altura de bloque", "block_remaining": "1 bloqueo restante", "Blocks_remaining": "${status} Bloques restantes", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Contraseña invalida", "invoice_details": "Detalles de la factura", "is_percentage": "es", + "keys": "Llaves", "last_30_days": "Últimos 30 días", "learn_more": "Aprende más", "ledger_connection_error": "No se pudo conectar con ledger. Inténtalo de nuevo.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transacción rechazada en el dispositivo", "ledger_error_wrong_app": "Por favor, asegúrate de abrir la aplicación correcta en su libro mayor.", "ledger_please_enable_bluetooth": "Habilita tu Bluetooth para detectar tu ledger", + "legacy": "Legado", "light_theme": "Ligero", "litecoin_enable_mweb_sync": "Habilitar el escaneo mweb", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 4e3f20200..d52aa9cf6 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Thème sombre Bitcoin", "bitcoin_light_theme": "Thème léger Bitcoin", "bitcoin_payments_require_1_confirmation": "Les paiements Bitcoin nécessitent 1 confirmation, ce qui peut prendre 20 minutes ou plus. Merci pour votre patience ! Vous serez averti par e-mail lorsque le paiement sera confirmé.", + "block_height": "Hauteur de blocage", "block_remaining": "1 bloc restant", "Blocks_remaining": "Blocs Restants : ${status}", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Mot de passe incorrect", "invoice_details": "Détails de la facture", "is_percentage": "est", + "keys": "Clés", "last_30_days": "30 derniers jours", "learn_more": "En savoir plus", "ledger_connection_error": "Impossible de se connecter à votre Ledger. Veuillez réessayer.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transaction rejetée sur l'appareil", "ledger_error_wrong_app": "Veuillez vous assurer d'ouvrir la bonne application sur votre Ledger", "ledger_please_enable_bluetooth": "Veuillez activer le Bluetooth pour détecter votre Ledger", + "legacy": "Héritage", "light_theme": "Clair", "litecoin_enable_mweb_sync": "Activer la numérisation MWEB", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index b37a88b61..28048941d 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Dark Jigo", "bitcoin_light_theme": "Jigon Hasken Bitcoin", "bitcoin_payments_require_1_confirmation": "Akwatin Bitcoin na buɗe 1 sambumbu, da yake za ta samu mintuna 20 ko yawa. Ina kira ga sabuwar lafiya! Zaka sanarwa ta email lokacin da aka samu akwatin samun lambar waya.", + "block_height": "Toshe tsawo", "block_remaining": "1 toshe ragowar", "Blocks_remaining": "${status} Katanga ya rage", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Kalmar sirri mara inganci", "invoice_details": "Bayanin wadannan", "is_percentage": "shine", + "keys": "Makullin", "last_30_days": "Kwanaki 30 na ƙarshe", "learn_more": "Ƙara Koyi", "ledger_connection_error": "Ba a yi nasarar haɗawa da ku ba. Da fatan za a sake gwadawa.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Ma'amala da aka ƙi akan na'urar", "ledger_error_wrong_app": "Da fatan za a tabbata kun yi amfani da app ɗin dama akan dillalarku", "ledger_please_enable_bluetooth": "Da fatan za a kunna Bluetooth don gano Ledger ɗinku", + "legacy": "Gado", "light_theme": "Haske", "litecoin_enable_mweb_sync": "Kunna binciken Mweb", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 1f8fd30eb..092f5c409 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "बिटकॉइन डार्क थीम", "bitcoin_light_theme": "बिटकॉइन लाइट थीम", "bitcoin_payments_require_1_confirmation": "बिटकॉइन भुगतान के लिए 1 पुष्टिकरण की आवश्यकता होती है, जिसमें 20 मिनट या अधिक समय लग सकता है। आपके धैर्य के लिए धन्यवाद! भुगतान की पुष्टि होने पर आपको ईमेल किया जाएगा।", + "block_height": "ब्लॉक ऊंचाई", "block_remaining": "1 ब्लॉक शेष", "Blocks_remaining": "${status} शेष रहते हैं", "bluetooth": "ब्लूटूथ", @@ -379,6 +380,7 @@ "invalid_password": "अवैध पासवर्ड", "invoice_details": "चालान विवरण", "is_percentage": "है", + "keys": "चाबी", "last_30_days": "पिछले 30 दिन", "learn_more": "और अधिक जानें", "ledger_connection_error": "आप लेजर से जुड़ने में विफल रहे। कृपया पुन: प्रयास करें।", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "डिवाइस पर लेनदेन खारिज कर दिया गया", "ledger_error_wrong_app": "कृपया सुनिश्चित करें कि आप अपने लेजर पर सही ऐप को खोलते हैं", "ledger_please_enable_bluetooth": "कृपया अपने बहीखाने का पता लगाने के लिए ब्लूटूथ को सक्षम करें", + "legacy": "परंपरा", "light_theme": "रोशनी", "litecoin_enable_mweb_sync": "MWEB स्कैनिंग सक्षम करें", "litecoin_mweb": "मावली", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 0cb5988c8..887506811 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Tamna tema", "bitcoin_light_theme": "Bitcoin Light Theme", "bitcoin_payments_require_1_confirmation": "Bitcoin plaćanja zahtijevaju 1 potvrdu, što može potrajati 20 minuta ili dulje. Hvala na Vašem strpljenju! Dobit ćete e-poruku kada plaćanje bude potvrđeno.", + "block_height": "Visina bloka", "block_remaining": "Preostalo 1 blok", "Blocks_remaining": "${status} preostalih blokova", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Netočna zaporka", "invoice_details": "Podaci o fakturi", "is_percentage": "je", + "keys": "Ključ", "last_30_days": "Zadnjih 30 dana", "learn_more": "Saznajte više", "ledger_connection_error": "Nije uspio povezati se s knjigom. Molim te pokušaj ponovno.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transakcija odbijena na uređaju", "ledger_error_wrong_app": "Obavezno obavezno otvorite pravu aplikaciju na knjizi", "ledger_please_enable_bluetooth": "Omogućite Bluetooth da otkrije svoju knjigu", + "legacy": "Nasljeđe", "light_theme": "Svijetla", "litecoin_enable_mweb_sync": "Omogućite MWEB skeniranje", "litecoin_mweb": "MWeb", diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index eaf413027..145ec04e2 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin մութ տեսք", "bitcoin_light_theme": "Bitcoin պայծառ տեսք", "bitcoin_payments_require_1_confirmation": "Bitcoin վճարումները պահանջում են 1 հաստատում, որը կարող է տևել 20 րոպե կամ ավելի: Շնորհակալություն ձեր համբերության համար: Դուք էլ. նամակ կստանաք, երբ վճարումը հաստատվի։", + "block_height": "Բլոկի բարձրությունը", "block_remaining": "1 Բլոկ է մնացել", "Blocks_remaining": "${status} Բլոկ է մնացել", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Սխալ գաղտնաբառ", "invoice_details": "Հաշիվ-ապրանքագրի մանրամասներ", "is_percentage": "կազմում է", + "keys": "Ստեղներ", "last_30_days": "Վերջին 30 օրը", "learn_more": "Տեղեկանալ ավելին", "ledger_connection_error": "Չկարողացանք կապ հաստատել Ledger-ի հետ: Խնդրում ենք փորձել նորից", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Գործարքը մերժված է օգտատերի կողմից", "ledger_error_wrong_app": "Խնդրում ենք համոզվել, որ դուք բացել եք ճիշտ ծրագիրը ձեր Ledger-ում", "ledger_please_enable_bluetooth": "Խնդրում ենք միացնել Bluetooth-ը ձեր Ledger-ը հայտնաբերելու համար", + "legacy": "Ժառանգություն", "light_theme": "Լուսավոր", "litecoin_enable_mweb_sync": "Միացնել MWEB սկան", "litecoin_mweb": "Մուեբ", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index f53bd2963..a5e1a2da5 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Tema Gelap Bitcoin", "bitcoin_light_theme": "Tema Cahaya Bitcoin", "bitcoin_payments_require_1_confirmation": "Pembayaran Bitcoin memerlukan 1 konfirmasi, yang bisa memakan waktu 20 menit atau lebih. Terima kasih atas kesabaran Anda! Anda akan diemail saat pembayaran dikonfirmasi.", + "block_height": "Tinggi blok", "block_remaining": "1 blok tersisa", "Blocks_remaining": "${status} Blok Tersisa", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Kata sandi salah", "invoice_details": "Detail faktur", "is_percentage": "adalah", + "keys": "Kunci", "last_30_days": "30 hari terakhir", "learn_more": "Pelajari Lebih Lanjut", "ledger_connection_error": "Gagal terhubung ke buku besar Anda. Tolong coba lagi.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transaksi ditolak pada perangkat", "ledger_error_wrong_app": "Pastikan Anda membuka aplikasi yang tepat di buku besar Anda", "ledger_please_enable_bluetooth": "Harap aktifkan Bluetooth untuk mendeteksi buku besar Anda", + "legacy": "Warisan", "light_theme": "Terang", "litecoin_enable_mweb_sync": "Aktifkan pemindaian MWEB", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 5eaa2e58e..4bcfdc58c 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Tema oscuro di Bitcoin", "bitcoin_light_theme": "Tema luce Bitcoin", "bitcoin_payments_require_1_confirmation": "I pagamenti in bitcoin richiedono 1 conferma, che può richiedere 20 minuti o più. Grazie per la vostra pazienza! Riceverai un'e-mail quando il pagamento sarà confermato.", + "block_height": "Altezza del blocco", "block_remaining": "1 blocco rimanente", "Blocks_remaining": "${status} Blocchi Rimanenti", "bluetooth": "Bluetooth", @@ -380,6 +381,7 @@ "invalid_password": "Password non valida", "invoice_details": "Dettagli della fattura", "is_percentage": "è", + "keys": "Tasti", "last_30_days": "Ultimi 30 giorni", "learn_more": "Impara di più", "ledger_connection_error": "Impossibile connettersi al libro mastro. Per favore riprova.", @@ -387,6 +389,7 @@ "ledger_error_tx_rejected_by_user": "Transazione rifiutata sul dispositivo", "ledger_error_wrong_app": "Assicurati di aprire l'app giusta sul libro mastro", "ledger_please_enable_bluetooth": "Si prega di consentire al Bluetooth di rilevare il libro mastro", + "legacy": "Eredità", "light_theme": "Bianco", "litecoin_enable_mweb_sync": "Abilita la scansione MWeb", "litecoin_mweb": "MWeb", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 4427f7d7b..167f268a6 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "ビットコインダークテーマ", "bitcoin_light_theme": "ビットコインライトテーマ", "bitcoin_payments_require_1_confirmation": "ビットコインの支払いには 1 回の確認が必要で、これには 20 分以上かかる場合があります。お待ち頂きまして、ありがとうございます!支払いが確認されると、メールが送信されます。", + "block_height": "ブロックの高さ", "block_remaining": "残り1ブロック", "Blocks_remaining": "${status} 残りのブロック", "bluetooth": "ブルートゥース", @@ -380,6 +381,7 @@ "invalid_password": "無効なパスワード", "invoice_details": "請求の詳細", "is_percentage": "is", + "keys": "キー", "last_30_days": "過去30日", "learn_more": "もっと詳しく知る", "ledger_connection_error": "元帳に接続できませんでした。もう一度やり直してください。", @@ -387,6 +389,7 @@ "ledger_error_tx_rejected_by_user": "トランザクションはデバイスで拒否されました", "ledger_error_wrong_app": "元帳に適切なアプリを開始するようにしてください", "ledger_please_enable_bluetooth": "Bluetoothが元帳を検出できるようにしてください", + "legacy": "遺産", "light_theme": "光", "litecoin_enable_mweb_sync": "MWEBスキャンを有効にします", "litecoin_mweb": "mweb", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index e84d713cc..e8ccb393a 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "비트코인 다크 테마", "bitcoin_light_theme": "비트코인 라이트 테마", "bitcoin_payments_require_1_confirmation": "비트코인 결제는 1번의 확인이 필요하며 20분 이상이 소요될 수 있습니다. 기다려 주셔서 감사합니다! 결제가 확인되면 이메일이 전송됩니다.", + "block_height": "블록 높이", "block_remaining": "남은 블록 1 개", "Blocks_remaining": "${status} 남은 블록", "bluetooth": "블루투스", @@ -379,6 +380,7 @@ "invalid_password": "유효하지 않은 비밀번호", "invoice_details": "인보이스 세부정보", "is_percentage": "이다", + "keys": "키", "last_30_days": "지난 30일", "learn_more": "더 알아보기", "ledger_connection_error": "원장에 연결하지 못했습니다. 다시 시도하십시오.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "장치에서 거래가 거부되었습니다", "ledger_error_wrong_app": "원장에서 올바른 앱을 반대하는지 확인하십시오.", "ledger_please_enable_bluetooth": "Bluetooth가 원장을 감지 할 수 있도록하십시오", + "legacy": "유산", "light_theme": "빛", "litecoin_enable_mweb_sync": "mweb 스캔을 활성화합니다", "litecoin_mweb": "mweb", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index e25956a4c..feee7decc 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Dark Theme", "bitcoin_light_theme": "Bitcoin Light အပြင်အဆင်", "bitcoin_payments_require_1_confirmation": "Bitcoin ငွေပေးချေမှုများသည် မိနစ် 20 သို့မဟုတ် ထို့ထက်ပိုကြာနိုင်သည် 1 အတည်ပြုချက် လိုအပ်သည်။ မင်းရဲ့စိတ်ရှည်မှုအတွက် ကျေးဇူးတင်ပါတယ်။ ငွေပေးချေမှုကို အတည်ပြုပြီးသောအခါ သင့်ထံ အီးမေးလ်ပို့ပါမည်။", + "block_height": "ပိတ်ပင်တားဆီးမှုအမြင့်", "block_remaining": "ကျန်ရှိနေသေးသော block", "Blocks_remaining": "${status} ဘလောက်များ ကျန်နေပါသည်။", "bluetooth": "ဘလူးတုသ်", @@ -379,6 +380,7 @@ "invalid_password": "မမှန်ကန်သောစကားဝှက်", "invoice_details": "ပြေစာအသေးစိတ်", "is_percentage": "သည်", + "keys": "သော့များ", "last_30_days": "လွန်ခဲ့သော ရက် 30", "learn_more": "ပိုမိုသိရှိရန်", "ledger_connection_error": "သငျသညျ Ledger နှင့်ချိတ်ဆက်ရန်မအောင်မြင်ပါ။ ကျေးဇူးပြုပြီးထပ်ကြိုးစားပါ", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "ငွေပေးငွေယူ device ကိုအပေါ်ငြင်းပယ်ခဲ့သည်", "ledger_error_wrong_app": "ကျေးဇူးပြု. သင့်လက်ျာအက်ပ်ကိုသင်၏ Ledger တွင်ဖွင့်ရန်သေချာစေပါ", "ledger_please_enable_bluetooth": "သင်၏ Ledger ကိုရှာဖွေရန် Bluetooth ကိုဖွင့်ပါ", + "legacy": "အနေှးမနေသော", "light_theme": "အလင်း", "litecoin_enable_mweb_sync": "mweb scanning ဖွင့်ပါ", "litecoin_mweb": "မင်္ဂလာပါ", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index cc5bb5ef6..e947a117a 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin donker thema", "bitcoin_light_theme": "Bitcoin Light-thema", "bitcoin_payments_require_1_confirmation": "Bitcoin-betalingen vereisen 1 bevestiging, wat 20 minuten of langer kan duren. Dank voor uw geduld! U ontvangt een e-mail wanneer de betaling is bevestigd.", + "block_height": "Blokhoogte", "block_remaining": "1 blok resterend", "Blocks_remaining": "${status} Resterende blokken", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Ongeldig wachtwoord", "invoice_details": "Factuurgegevens", "is_percentage": "is", + "keys": "Sleutels", "last_30_days": "Laatste 30 dagen", "learn_more": "Kom meer te weten", "ledger_connection_error": "Kan geen verbinding maken met u grootboek. Probeer het opnieuw.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transactie afgewezen op apparaat", "ledger_error_wrong_app": "Zorg ervoor dat u de juiste app op uw grootboek opent", "ledger_please_enable_bluetooth": "Schakel Bluetooth in staat om uw grootboek te detecteren", + "legacy": "Nalatenschap", "light_theme": "Licht", "litecoin_enable_mweb_sync": "MWEB -scanning inschakelen", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 73a989420..d27bab167 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Ciemny motyw Bitcoina", "bitcoin_light_theme": "Lekki motyw Bitcoin", "bitcoin_payments_require_1_confirmation": "Płatności Bitcoin wymagają 1 potwierdzenia, co może zająć 20 minut lub dłużej. Dziękuję za cierpliwość! Otrzymasz wiadomość e-mail, gdy płatność zostanie potwierdzona.", + "block_height": "Wysokość bloku", "block_remaining": "1 blok pozostałym", "Blocks_remaining": "Pozostało ${status} bloków", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Nieprawidłowe hasło", "invoice_details": "Dane do faktury", "is_percentage": "jest", + "keys": "Klawiatura", "last_30_days": "Ostatnie 30 dni", "learn_more": "Dowiedz się więcej", "ledger_connection_error": "Nie udało się połączyć z twoją księgą. Proszę spróbuj ponownie.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transakcja odrzucona na urządzeniu", "ledger_error_wrong_app": "Upewnij się, że opisz odpowiednią aplikację na swojej księdze", "ledger_please_enable_bluetooth": "Włącz Bluetooth wykrywanie księgi", + "legacy": "Dziedzictwo", "light_theme": "Jasny", "litecoin_enable_mweb_sync": "Włącz skanowanie MWEB", "litecoin_mweb": "MWEB", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index a126cd2a0..ab70cd72d 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Tema escuro Bitcoin", "bitcoin_light_theme": "Tema claro de bitcoin", "bitcoin_payments_require_1_confirmation": "Os pagamentos em Bitcoin exigem 1 confirmação, o que pode levar 20 minutos ou mais. Obrigado pela sua paciência! Você receberá um e-mail quando o pagamento for confirmado.", + "block_height": "Altura do bloco", "block_remaining": "1 bloco restante", "Blocks_remaining": "${status} blocos restantes", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Senha inválida", "invoice_details": "Detalhes da fatura", "is_percentage": "é", + "keys": "Chaves", "last_30_days": "Últimos 30 dias", "learn_more": "Saber mais", "ledger_connection_error": "Falha ao se conectar ao seu livro. Por favor, tente novamente.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Transação rejeitada no dispositivo", "ledger_error_wrong_app": "Por favor, certifique -se de optar pelo aplicativo certo no seu livro", "ledger_please_enable_bluetooth": "Ative o Bluetooth para detectar seu livro", + "legacy": "Legado", "light_theme": "Luz", "litecoin_enable_mweb_sync": "Ativar digitalização do MWEB", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index c020b384e..7b976dc7b 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Биткойн Темная тема", "bitcoin_light_theme": "Светлая биткойн-тема", "bitcoin_payments_require_1_confirmation": "Биткойн-платежи требуют 1 подтверждения, что может занять 20 минут или дольше. Спасибо тебе за твое терпение! Вы получите электронное письмо, когда платеж будет подтвержден.", + "block_height": "Высота блока", "block_remaining": "1 Блок остался", "Blocks_remaining": "${status} Осталось блоков", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Неверный пароль", "invoice_details": "Детали счета", "is_percentage": "есть", + "keys": "Ключи", "last_30_days": "Последние 30 дней", "learn_more": "Узнать больше", "ledger_connection_error": "Не удалось подключиться к вам, книги. Пожалуйста, попробуйте еще раз.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Транзакция отклоняется на устройстве", "ledger_error_wrong_app": "Пожалуйста, убедитесь, что вы предлагаете правильное приложение в своей бухгалтерской книге", "ledger_please_enable_bluetooth": "Пожалуйста, включите Bluetooth обнаружить вашу бухгалтерскую книгу", + "legacy": "Наследие", "light_theme": "Светлая", "litecoin_enable_mweb_sync": "Включить MWEB сканирование", "litecoin_mweb": "Мвеб", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 71f0fdd3a..6e801b938 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "ธีมมืด Bitcoin", "bitcoin_light_theme": "ธีมแสง Bitcoin", "bitcoin_payments_require_1_confirmation": "การชำระเงินด้วย Bitcoin ต้องการการยืนยัน 1 ครั้ง ซึ่งอาจใช้เวลา 20 นาทีหรือนานกว่านั้น ขอบคุณสำหรับความอดทนของคุณ! คุณจะได้รับอีเมลเมื่อการชำระเงินได้รับการยืนยัน", + "block_height": "ความสูงของบล็อก", "block_remaining": "เหลือ 1 บล็อก", "Blocks_remaining": "${status} บล็อกที่เหลืออยู่", "bluetooth": "บลูทู ธ", @@ -379,6 +380,7 @@ "invalid_password": "รหัสผ่านไม่ถูกต้อง", "invoice_details": "รายละเอียดใบแจ้งหนี้", "is_percentage": "เป็น", + "keys": "กุญแจ", "last_30_days": "30 วันล่าสุด", "learn_more": "ศึกษาเพิ่มเติม", "ledger_connection_error": "ไม่สามารถเชื่อมต่อกับบัญชีแยกประเภทของคุณได้ กรุณาลองอีกครั้ง.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "ธุรกรรมถูกปฏิเสธบนอุปกรณ์", "ledger_error_wrong_app": "โปรดตรวจสอบให้แน่ใจว่าคุณเปิดแอพที่เหมาะสมในบัญชีแยกประเภทของคุณ", "ledger_please_enable_bluetooth": "โปรดเปิดใช้งานบลูทู ธ ในการตรวจจับบัญชีแยกประเภทของคุณ", + "legacy": "มรดก", "light_theme": "สว่าง", "litecoin_enable_mweb_sync": "เปิดใช้งานการสแกน MWEB", "litecoin_mweb": "mweb", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index c46d58b19..6903098cd 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Dark Theme", "bitcoin_light_theme": "Bitcoin Light Theme", "bitcoin_payments_require_1_confirmation": "Ang mga pagbabayad sa Bitcoin ay nangangailangan ng 1 kumpirmasyon, na maaaring tumagal ng 20 minuto o mas mahaba. Salamat sa iyong pasensya! Mag-email ka kapag nakumpirma ang pagbabayad.", + "block_height": "I -block ang taas", "block_remaining": "1 Bloke ang Natitira", "Blocks_remaining": "Ang natitirang ${status} ay natitira", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Di-wastong password", "invoice_details": "Mga detalye ng invoice", "is_percentage": "ay", + "keys": "Mga susi", "last_30_days": "Huling 30 na araw", "learn_more": "Matuto nang higit pa", "ledger_connection_error": "Nabigong kumonekta sa iyong Ledger. Pakisubukang muli.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Ang transaksyon ay tinanggihan sa hardware wallet", "ledger_error_wrong_app": "Mangyaring tiyaking pinipili mo ang tamang app sa iyong Ledger", "ledger_please_enable_bluetooth": "Mangyaring paganahin ang Bluetooth upang makita ang iyong Ledger", + "legacy": "Pamana", "light_theme": "Light", "litecoin_enable_mweb_sync": "Paganahin ang pag -scan ng MWeb", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 828e364c2..ee8e7398c 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Karanlık Teması", "bitcoin_light_theme": "Bitcoin Hafif Tema", "bitcoin_payments_require_1_confirmation": "Bitcoin ödemeleri, 20 dakika veya daha uzun sürebilen 1 onay gerektirir. Sabrınız için teşekkürler! Ödeme onaylandığında e-posta ile bilgilendirileceksiniz.", + "block_height": "Blok yüksekliği", "block_remaining": "Kalan 1 blok", "Blocks_remaining": "${status} Blok Kaldı", "bluetooth": "Bluetooth", @@ -379,6 +380,7 @@ "invalid_password": "Geçersiz şifre", "invoice_details": "fatura detayları", "is_percentage": "is", + "keys": "Anahtar", "last_30_days": "Son 30 gün", "learn_more": "Daha fazla öğren", "ledger_connection_error": "Ledger'e bağlanamadı. Lütfen tekrar deneyin.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Cihazda reddedilen işlem", "ledger_error_wrong_app": "Lütfen defterinizde doğru uygulamayı açtığınızdan emin olun", "ledger_please_enable_bluetooth": "Defterinizi algılamak için lütfen Bluetooth'u etkinleştirin", + "legacy": "Miras", "light_theme": "Aydınlık", "litecoin_enable_mweb_sync": "MWEB taramasını etkinleştir", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 73301eca0..29043fa6e 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Темна тема Bitcoin", "bitcoin_light_theme": "Світла тема Bitcoin", "bitcoin_payments_require_1_confirmation": "Платежі Bitcoin потребують 1 підтвердження, яке може зайняти 20 хвилин або більше. Дякую за Ваше терпіння! Ви отримаєте електронний лист, коли платіж буде підтверджено.", + "block_height": "Висота блоку", "block_remaining": "1 блок, що залишився", "Blocks_remaining": "${status} Залишилось блоків", "bluetooth": "Блюдот", @@ -379,6 +380,7 @@ "invalid_password": "Недійсний пароль", "invoice_details": "Реквізити рахунку-фактури", "is_percentage": "є", + "keys": "Ключі", "last_30_days": "Останні 30 днів", "learn_more": "Дізнатися більше", "ledger_connection_error": "Не вдалося підключитися до вас. Будь ласка спробуйте ще раз.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "Транзакція відхилена на пристрої", "ledger_error_wrong_app": "Будь ласка, переконайтеся, що ви відкриваєте потрібну програму на своїй книзі", "ledger_please_enable_bluetooth": "Будь ласка, ввімкніть Bluetooth виявити свою книгу", + "legacy": "Спадщина", "light_theme": "Світла", "litecoin_enable_mweb_sync": "Увімкнути сканування MWEB", "litecoin_mweb": "Мвеб", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index d15731cc4..e713cd1ef 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "بٹ کوائن ڈارک تھیم", "bitcoin_light_theme": "بٹ کوائن لائٹ تھیم", "bitcoin_payments_require_1_confirmation": "بٹ کوائن کی ادائیگی میں 1 تصدیق کی ضرورت ہوتی ہے ، جس میں 20 منٹ یا اس سے زیادہ وقت لگ سکتا ہے۔ آپ کے صبر کا شکریہ! ادائیگی کی تصدیق ہونے پر آپ کو ای میل کیا جائے گا۔", + "block_height": "اونچائی کو بلاک کریں", "block_remaining": "1 بلاک باقی", "Blocks_remaining": "${status} بلاکس باقی ہیں۔", "bluetooth": "بلوٹوتھ", @@ -379,6 +380,7 @@ "invalid_password": "غلط پاسورڈ", "invoice_details": "رسید کی تفصیلات", "is_percentage": "ہے", + "keys": "چابیاں", "last_30_days": "آخری 30 دن", "learn_more": "اورجانیے", "ledger_connection_error": "آپ سے لیجر سے رابطہ قائم کرنے میں ناکام۔ دوبارہ کوشش کریں.", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "آلہ پر لین دین کو مسترد کردیا گیا", "ledger_error_wrong_app": "براہ کرم یقینی بنائیں کہ آپ اپنے لیجر پر صحیح ایپ کو کھولتے ہیں", "ledger_please_enable_bluetooth": "براہ کرم بلوٹوتھ کو اپنے لیجر کا پتہ لگانے کے لئے اہل بنائیں", + "legacy": "میراث", "light_theme": "روشنی", "litecoin_enable_mweb_sync": "MWEB اسکیننگ کو فعال کریں", "litecoin_mweb": "MWEB", diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index f9bbaaf7a..0042752e7 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Chủ đề Bitcoin tối", "bitcoin_light_theme": "Chủ đề Bitcoin sáng", "bitcoin_payments_require_1_confirmation": "Các khoản thanh toán Bitcoin yêu cầu 1 xác nhận, có thể mất 20 phút hoặc lâu hơn. Cảm ơn bạn đã kiên nhẫn! Bạn sẽ nhận được email khi thanh toán được xác nhận.", + "block_height": "Chiều cao khối", "block_remaining": "1 khối còn lại", "Blocks_remaining": "${status} khối còn lại", "bluetooth": "Bluetooth", @@ -378,6 +379,7 @@ "invalid_password": "Mật khẩu không hợp lệ", "invoice_details": "Chi tiết hóa đơn", "is_percentage": "là", + "keys": "Chìa khóa", "last_30_days": "30 ngày gần nhất", "learn_more": "Tìm hiểu thêm", "ledger_connection_error": "Không thể kết nối với Ledger của bạn. Vui lòng thử lại.", @@ -385,6 +387,7 @@ "ledger_error_tx_rejected_by_user": "Giao dịch bị từ chối trên thiết bị", "ledger_error_wrong_app": "Vui lòng đảm bảo bạn đã mở đúng ứng dụng trên Ledger của mình", "ledger_please_enable_bluetooth": "Vui lòng bật Bluetooth để phát hiện Ledger của bạn", + "legacy": "Di sản", "light_theme": "Chủ đề sáng", "litecoin_enable_mweb_sync": "Bật quét MWEB", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index cb9f7f1bb..be4087a9e 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "Bitcoin Dark Akori", "bitcoin_light_theme": "Bitcoin Light Akori", "bitcoin_payments_require_1_confirmation": "Àwọn àránṣẹ́ Bitcoin nílò ìjẹ́rìísí kan. Ó lè lo ìṣéjú ogun tàbí ìṣéjú jù. A dúpẹ́ fún sùúrù yín! Ẹ máa gba ímeèlì t'ó bá jẹ́rìísí àránṣẹ́ náà.", + "block_height": "Dènà giga", "block_remaining": "1 bulọọki to ku", "Blocks_remaining": "Àkójọpọ̀ ${status} kikù", "bluetooth": "Bluetooth", @@ -380,6 +381,7 @@ "invalid_password": "Ọrọ igbaniwọle ti ko wulo", "invoice_details": "Iru awọn ẹya ọrọ", "is_percentage": "jẹ́", + "keys": "Awọn bọtini", "last_30_days": "Ọ̀jọ̀ mọ́gbọ̀n tó kọjà", "learn_more": "Túbọ̀ kọ́", "ledger_connection_error": "O kuna lati sopọ mọ ọ. Jọwọ gbiyanju lẹẹkansi.", @@ -387,6 +389,7 @@ "ledger_error_tx_rejected_by_user": "Idunadura kọ lori ẹrọ", "ledger_error_wrong_app": "Jọwọ rii daju pe iwọ yoo sọ app ti o tọ loju omi rẹ", "ledger_please_enable_bluetooth": "Jọwọ jẹ ki Bluetooth lati rii iṣupọ rẹ", + "legacy": "Agbara", "light_theme": "Funfun bí eérú", "litecoin_enable_mweb_sync": "Mu mweb ọlọjẹ", "litecoin_mweb": "Mweb", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 88d55aeed..d169b6f28 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -81,6 +81,7 @@ "bitcoin_dark_theme": "比特币黑暗主题", "bitcoin_light_theme": "比特币浅色主题", "bitcoin_payments_require_1_confirmation": "比特币支付需要 1 次确认,这可能需要 20 分钟或更长时间。谢谢你的耐心!确认付款后,您将收到电子邮件。", + "block_height": "块高度", "block_remaining": "剩下1个块", "Blocks_remaining": "${status} 剩余的块", "bluetooth": "蓝牙", @@ -379,6 +380,7 @@ "invalid_password": "无效的密码", "invoice_details": "发票明细", "is_percentage": "是", + "keys": "钥匙", "last_30_days": "过去 30 天", "learn_more": "了解更多", "ledger_connection_error": "无法连接到您的分类帐。请再试一次。", @@ -386,6 +388,7 @@ "ledger_error_tx_rejected_by_user": "交易在设备上拒绝", "ledger_error_wrong_app": "请确保您在分类帐中操作正确的应用程序", "ledger_please_enable_bluetooth": "请启用蓝牙来检测您的分类帐", + "legacy": "遗产", "light_theme": "艳丽", "litecoin_enable_mweb_sync": "启用MWEB扫描", "litecoin_mweb": "MWEB",