diff --git a/lib/entities/solana_nft_asset_model.dart b/lib/entities/solana_nft_asset_model.dart new file mode 100644 index 000000000..51f43c583 --- /dev/null +++ b/lib/entities/solana_nft_asset_model.dart @@ -0,0 +1,130 @@ +class SolanaNFTAssetModel { + String? address; + String? mint; + String? standard; + String? name; + String? symbol; + String? description; + String? imageOriginalUrl; + String? externalUrl; + String? metadataOriginalUrl; + String? totalSupply; + Metaplex? metaplex; + Collection? collection; + Contract? contract; + + SolanaNFTAssetModel({ + this.address, + this.mint, + this.standard, + this.name, + this.symbol, + this.description, + this.imageOriginalUrl, + this.externalUrl, + this.metadataOriginalUrl, + this.totalSupply, + this.metaplex, + this.collection, + this.contract, + }); + + factory SolanaNFTAssetModel.fromJson(Map json) { + return SolanaNFTAssetModel( + address: json['address'] as String?, + mint: json['mint'] as String?, + standard: json['standard'] as String?, + name: json['name'] as String?, + symbol: json['symbol'] as String?, + description: json['description'] as String?, + imageOriginalUrl: json['imageOriginalUrl'] as String?, + externalUrl: json['externalUrl'] as String?, + metadataOriginalUrl: json['metadataOriginalUrl'] as String?, + totalSupply: json['totalSupply'] as String?, + metaplex: json['metaplex'] != null + ? Metaplex.fromJson(json['metaplex'] as Map) + : null, + collection: json['collection'] != null + ? Collection.fromJson(json['collection'] as Map) + : null, + contract: json['contract'] != null + ? Contract.fromJson(json['contract'] as Map) + : null, + ); + } +} + +class Metaplex { + String? metadataUri; + String? updateAuthority; + int? sellerFeeBasisPoints; + int? primarySaleHappened; + bool? isMutable; + bool? masterEdition; + + Metaplex( + {this.metadataUri, + this.updateAuthority, + this.sellerFeeBasisPoints, + this.primarySaleHappened, + this.isMutable, + this.masterEdition}); + + factory Metaplex.fromJson(Map json) { + return Metaplex( + metadataUri: json['metadataUri'] as String?, + updateAuthority: json['updateAuthority'] as String?, + sellerFeeBasisPoints: json['sellerFeeBasisPoints'] as int?, + primarySaleHappened: json['primarySaleHappened'] as int?, + isMutable: json['isMutable'] as bool?, + masterEdition: json['masterEdition'] as bool?, + ); + } +} + +class Collection { + String? collectionAddress; + String? name; + String? description; + String? imageOriginalUrl; + String? externalUrl; + String? metaplexMint; + int? sellerFeeBasisPoints; + + Collection( + {this.collectionAddress, + this.name, + this.description, + this.imageOriginalUrl, + this.externalUrl, + this.metaplexMint, + this.sellerFeeBasisPoints}); + + factory Collection.fromJson(Map json) { + return Collection( + collectionAddress: json['collectionAddress'] as String?, + name: json['name'] as String?, + description: json['description'] as String?, + imageOriginalUrl: json['imageOriginalUrl'] as String?, + externalUrl: json['externalUrl'] as String?, + metaplexMint: json['metaplexMint'] as String?, + sellerFeeBasisPoints: json['sellerFeeBasisPoints'] as int?, + ); + } +} + +class Contract { + String? type; + String? name; + String? symbol; + + Contract({this.type, this.name, this.symbol}); + + factory Contract.fromJson(Map json) { + return Contract( + type: json['type'] as String?, + name: json['name'] as String?, + symbol: json['symbol'] as String?, + ); + } +} diff --git a/lib/reactions/wallet_connect.dart b/lib/reactions/wallet_connect.dart index ca908bc65..217664eaa 100644 --- a/lib/reactions/wallet_connect.dart +++ b/lib/reactions/wallet_connect.dart @@ -12,6 +12,17 @@ bool isEVMCompatibleChain(WalletType walletType) { } } +bool isNFTACtivatedChain(WalletType walletType) { + switch (walletType) { + case WalletType.polygon: + case WalletType.ethereum: + case WalletType.solana: + return true; + default: + return false; + } +} + bool isWalletConnectCompatibleChain(WalletType walletType) { switch (walletType) { case WalletType.polygon: @@ -55,7 +66,7 @@ String getChainNameBasedOnWalletType(WalletType walletType) { case WalletType.polygon: return 'polygon'; case WalletType.solana: - return 'solana'; + return 'mainnet'; default: return ''; } diff --git a/lib/router.dart b/lib/router.dart index 72fc06e40..9026919d6 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -771,7 +771,7 @@ Route createRoute(RouteSettings settings) { case Routes.nftDetailsPage: return MaterialPageRoute( builder: (_) => NFTDetailsPage( - nftAsset: settings.arguments as NFTAssetModel, + arguments: settings.arguments as NFTDetailsPageArguments, dashboardViewModel: getIt.get(), ), ); diff --git a/lib/src/screens/dashboard/pages/balance/balance_page.dart b/lib/src/screens/dashboard/pages/balance/balance_page.dart index e9c2115a9..8577ba0ad 100644 --- a/lib/src/screens/dashboard/pages/balance/balance_page.dart +++ b/lib/src/screens/dashboard/pages/balance/balance_page.dart @@ -23,13 +23,13 @@ class BalancePage extends StatelessWidget { Widget build(BuildContext context) { return Observer( builder: (context) { - final isEVMCompatible = isEVMCompatibleChain(dashboardViewModel.type); + final isNFTActivated = isNFTACtivatedChain(dashboardViewModel.type); return DefaultTabController( - key: ValueKey(isEVMCompatible), - length: isEVMCompatible ? 2 : 1, + key: ValueKey(isNFTActivated), + length: isNFTActivated ? 2 : 1, child: Column( children: [ - if (isEVMCompatible) + if (isNFTActivated) Align( alignment: Alignment.centerLeft, child: Padding( @@ -76,7 +76,7 @@ class BalancePage extends StatelessWidget { physics: NeverScrollableScrollPhysics(), children: [ CryptoBalanceWidget(dashboardViewModel: dashboardViewModel), - if (isEVMCompatible) NFTListingPage(nftViewModel: nftViewModel) + if (isNFTActivated) NFTListingPage(nftViewModel: nftViewModel) ], ), ), diff --git a/lib/src/screens/dashboard/pages/nft_details_page.dart b/lib/src/screens/dashboard/pages/nft_details_page.dart index b8352a672..c82c5ce90 100644 --- a/lib/src/screens/dashboard/pages/nft_details_page.dart +++ b/lib/src/screens/dashboard/pages/nft_details_page.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/entities/solana_nft_asset_model.dart'; import 'package:cake_wallet/entities/wallet_nft_response.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -8,21 +10,23 @@ import 'package:cake_wallet/themes/extensions/balance_page_theme.dart'; import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart'; import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; -import 'package:flutter/material.dart'; class NFTDetailsPage extends BasePage { - NFTDetailsPage({required this.dashboardViewModel, required this.nftAsset}); + NFTDetailsPage({ + required this.dashboardViewModel, + required this.arguments, + Key? key, + }); final DashboardViewModel dashboardViewModel; - final NFTAssetModel nftAsset; + final NFTDetailsPageArguments arguments; @override bool get gradientBackground => true; @override Widget Function(BuildContext, Widget) get rootWrapper => - (BuildContext context, Widget scaffold) => - GradientBackground(scaffold: scaffold); + (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold); @override bool get resizeToAvoidBottomInset => false; @@ -30,15 +34,14 @@ class NFTDetailsPage extends BasePage { @override Widget get endDrawer => MenuWidget( dashboardViewModel, - ValueKey('nft_details_page_menu_widget_key'), + const ValueKey('nft_details_page_menu_widget_key'), ); @override Widget trailing(BuildContext context) { final menuButton = Image.asset( 'assets/images/menu.png', - color: - Theme.of(context).extension()!.pageTitleTextColor, + color: Theme.of(context).extension()!.pageTitleTextColor, ); return Container( @@ -58,119 +61,200 @@ class NFTDetailsPage extends BasePage { @override Widget body(BuildContext context) { return SingleChildScrollView( - child: Column( - children: [ - Container( - width: double.infinity, - margin: const EdgeInsets.all(16), - padding: const EdgeInsets.symmetric(vertical: 16), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(30.0), - border: Border.all( - color: Theme.of(context) - .extension()! - .cardBorderColor, - width: 1, - ), - color: Theme.of(context) - .extension()! - .syncedBackgroundColor, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: MediaQuery.sizeOf(context).height / 2.5, - width: double.infinity, - clipBehavior: Clip.hardEdge, - margin: const EdgeInsets.all(8), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(16.0), - border: Border.all( - color: Theme.of(context) - .extension()! - .cardBorderColor, - width: 1, - ), - color: Theme.of(context) - .extension()! - .syncedBackgroundColor, - - ), - child: CakeImageWidget( - imageUrl: nftAsset.normalizedMetadata?.imageUrl, - ), - ), - SizedBox(height: 16), - _NFTSingleInfoTile( - infoType: S.current.name, - infoValue: nftAsset.normalizedMetadata?.name ?? '---', - ), - - if (nftAsset.normalizedMetadata?.description != null) ...[ - SizedBox(height: 16), - _NFTSingleInfoTile( - infoType: S.current.description, - infoValue: nftAsset.normalizedMetadata?.description ?? '---', - ), - ], - - SizedBox(height: 16), - _NFTSingleInfoTile( - infoType: S.current.contractName, - infoValue: nftAsset.name ?? '---', - ), - SizedBox(height: 8), - _NFTSingleInfoTile( - infoType: S.current.contractSymbol, - infoValue: nftAsset.symbol ?? '---', - ), - ], - ), + child: Container( + width: double.infinity, + margin: const EdgeInsets.all(16), + padding: const EdgeInsets.symmetric(vertical: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30.0), + border: Border.all( + color: Theme.of(context).extension()!.cardBorderColor, + width: 1, ), - ], + color: Theme.of(context).extension()!.syncedBackgroundColor, + ), + child: arguments.isSolanaNFT + ? SolanaNFTDetailsWidget( + solanaNftAsset: arguments.solanaNFTAssetModel, + ) + : EVMChainNFTDetailsWidget( + nftAsset: arguments.nftAsset, + ), ), ); } } +class _NFTImageWidget extends StatelessWidget { + final String? imageUrl; + + const _NFTImageWidget({Key? key, this.imageUrl}) : super(key: key); + + @override + Widget build(BuildContext context) { + final balanceTheme = Theme.of(context).extension()!; + final syncTheme = Theme.of(context).extension()!; + + return Container( + height: MediaQuery.sizeOf(context).height / 2.5, + width: double.infinity, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16.0), + border: Border.all( + color: balanceTheme.cardBorderColor, + width: 1, + ), + color: syncTheme.syncedBackgroundColor, + ), + child: CakeImageWidget(imageUrl: imageUrl), + ); + } +} + +class EVMChainNFTDetailsWidget extends StatelessWidget { + final NFTAssetModel? nftAsset; + + const EVMChainNFTDetailsWidget({Key? key, this.nftAsset}) : super(key: key); + + @override + Widget build(BuildContext context) { + if (nftAsset == null) { + return Center(child: Text(S.current.no_extra_detail)); + } + + final metadata = nftAsset!.normalizedMetadata; + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _NFTImageWidget(imageUrl: metadata?.imageUrl), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.name, + infoValue: metadata?.name ?? '---', + ), + if (metadata?.description != null) ...[ + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.description, + infoValue: metadata!.description ?? '---', + ), + ], + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.contractName, + infoValue: nftAsset!.name ?? '---', + ), + const SizedBox(height: 8), + _NFTSingleInfoTile( + infoType: S.current.contractSymbol, + infoValue: nftAsset!.symbol ?? '---', + ), + ], + ); + } +} + +class SolanaNFTDetailsWidget extends StatelessWidget { + final SolanaNFTAssetModel? solanaNftAsset; + + const SolanaNFTDetailsWidget({Key? key, this.solanaNftAsset}) : super(key: key); + + @override + Widget build(BuildContext context) { + if (solanaNftAsset == null) { + return Center(child: Text(S.current.no_extra_detail)); + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _NFTImageWidget(imageUrl: solanaNftAsset?.imageOriginalUrl), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.name, + infoValue: solanaNftAsset?.name ?? '---', + ), + if (solanaNftAsset?.description != null) ...[ + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.description, + infoValue: solanaNftAsset!.description ?? '---', + ), + ], + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.mint_address, + infoValue: solanaNftAsset?.mint ?? '---', + ), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.contractName, + infoValue: solanaNftAsset?.contract?.name ?? '---', + ), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.contractSymbol, + infoValue: solanaNftAsset?.contract?.symbol ?? '---', + ), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.collection_name, + infoValue: solanaNftAsset?.collection?.name ?? '---', + ), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.collection_description, + infoValue: solanaNftAsset?.collection?.description ?? '---', + ), + const SizedBox(height: 16), + _NFTSingleInfoTile( + infoType: S.current.collection_address, + infoValue: solanaNftAsset?.collection?.collectionAddress ?? '---', + ), + const SizedBox(height: 16), + ], + ); + } +} + class _NFTSingleInfoTile extends StatelessWidget { + final String infoType; + final String infoValue; + const _NFTSingleInfoTile({ required this.infoType, required this.infoValue, }); - final String infoType; - final String infoValue; @override Widget build(BuildContext context) { + final balanceTheme = Theme.of(context).extension()!; return Padding( padding: const EdgeInsets.symmetric(horizontal: 24), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( -infoType, + infoType, style: TextStyle( fontSize: 12, fontFamily: 'Lato', fontWeight: FontWeight.w400, - color: Theme.of(context) - .extension()! - .labelTextColor, + color: balanceTheme.labelTextColor, height: 1, ), ), - SizedBox(height: 8), + const SizedBox(height: 8), Text( infoValue, style: TextStyle( fontSize: 16, fontFamily: 'Lato', fontWeight: FontWeight.w600, - color: Theme.of(context) - .extension()! - .assetTitleColor, + color: balanceTheme.assetTitleColor, height: 1, ), ), @@ -179,3 +263,15 @@ infoType, ); } } + +class NFTDetailsPageArguments { + NFTDetailsPageArguments({ + this.nftAsset, + this.solanaNFTAssetModel, + required this.isSolanaNFT, + }); + + final NFTAssetModel? nftAsset; + final SolanaNFTAssetModel? solanaNFTAssetModel; + final bool isSolanaNFT; +} diff --git a/lib/src/screens/dashboard/pages/nft_import_page.dart b/lib/src/screens/dashboard/pages/nft_import_page.dart index 6b40b46cc..3ed30d6f8 100644 --- a/lib/src/screens/dashboard/pages/nft_import_page.dart +++ b/lib/src/screens/dashboard/pages/nft_import_page.dart @@ -6,6 +6,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart'; import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart'; +import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -68,7 +69,6 @@ class _ImportNFTPage extends BasePage { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( S.current.address, textAlign: TextAlign.center, @@ -76,8 +76,7 @@ class _ImportNFTPage extends BasePage { fontSize: 16, fontFamily: 'Lato', fontWeight: FontWeight.w800, - color: - Theme.of(context).extension()!.hintTextColor, + color: Theme.of(context).extension()!.hintTextColor, height: 1, ), ), @@ -92,9 +91,7 @@ class _ImportNFTPage extends BasePage { tokenAddressController.text = tokenAddress; } }, - borderColor: Theme.of(context) - .extension()! - .textfieldUnderlineColor, + borderColor: Theme.of(context).extension()!.textfieldUnderlineColor, iconColor: Theme.of(context).primaryColor, placeholder: '0x...', textStyle: TextStyle( @@ -108,46 +105,45 @@ class _ImportNFTPage extends BasePage { color: PaletteDark.darkCyanBlue, ), ), - - SizedBox(height: 48), - Text( - S.current.tokenID, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16, - fontFamily: 'Lato', - fontWeight: FontWeight.w800, - color: Theme.of(context).extension()!.hintTextColor, - height: 1, + if (nftViewModel.appStore.wallet!.type != WalletType.solana) ...[ + SizedBox(height: 48), + Text( + S.current.tokenID, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16, + fontFamily: 'Lato', + fontWeight: FontWeight.w800, + color: Theme.of(context).extension()!.hintTextColor, + height: 1, + ), ), - ), - AddressTextField( - controller: tokenIDController, - options: [AddressTextFieldOption.paste], - onPushPasteButton: (context) async { - final clipboard = await Clipboard.getData('text/plain'); - final tokenID = clipboard?.text ?? ''; + AddressTextField( + controller: tokenIDController, + options: [AddressTextFieldOption.paste], + onPushPasteButton: (context) async { + final clipboard = await Clipboard.getData('text/plain'); + final tokenID = clipboard?.text ?? ''; - if (tokenID.isNotEmpty) { - tokenIDController.text = tokenID; - } - }, - borderColor: Theme.of(context) - .extension()! - .textfieldUnderlineColor, - iconColor: Theme.of(context).primaryColor, - placeholder: S.current.enterTokenID, - textStyle: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w400, - color: PaletteDark.darkCyanBlue, + if (tokenID.isNotEmpty) { + tokenIDController.text = tokenID; + } + }, + borderColor: Theme.of(context).extension()!.textfieldUnderlineColor, + iconColor: Theme.of(context).primaryColor, + placeholder: S.current.enterTokenID, + textStyle: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + color: PaletteDark.darkCyanBlue, + ), + hintStyle: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + color: PaletteDark.darkCyanBlue, + ), ), - hintStyle: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w400, - color: PaletteDark.darkCyanBlue, - ), - ), + ], Spacer(), Observer(builder: (context) { return LoadingPrimaryButton( @@ -161,6 +157,7 @@ class _ImportNFTPage extends BasePage { }, ); }), + SizedBox(height: 16), ], ), ); diff --git a/lib/src/screens/dashboard/pages/nft_listing_page.dart b/lib/src/screens/dashboard/pages/nft_listing_page.dart index 46690a969..8da63fce6 100644 --- a/lib/src/screens/dashboard/pages/nft_listing_page.dart +++ b/lib/src/screens/dashboard/pages/nft_listing_page.dart @@ -1,32 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/nft_tile_widget.dart'; +import 'package:cake_wallet/src/screens/dashboard/widgets/solana_nft_tile_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart'; import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart'; import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart'; import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:cw_core/wallet_type.dart'; class NFTListingPage extends StatelessWidget { final NFTViewModel nftViewModel; const NFTListingPage({super.key, required this.nftViewModel}); + @override Widget build(BuildContext context) { + final dashboardTheme = Theme.of(context).extension()!; + final syncIndicatorTheme = Theme.of(context).extension()!; + final exchangeTheme = Theme.of(context).extension()!; + return Observer( builder: (context) { return Column( children: [ - SizedBox(height: 16), + const SizedBox(height: 16), Padding( - padding: EdgeInsets.only(left: 16, right: 16, bottom: 16), + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), child: PrimaryButton( text: S.current.import, - color: Theme.of(context) - .extension()! - .syncedBackgroundColor, + color: syncIndicatorTheme.syncedBackgroundColor, textColor: Colors.white, onPressed: () => Navigator.pushNamed( context, @@ -39,46 +44,75 @@ class NFTListingPage extends StatelessWidget { Expanded( child: Center( child: CircularProgressIndicator( - backgroundColor: Theme.of(context).extension()!.textColor, + backgroundColor: dashboardTheme.textColor, valueColor: AlwaysStoppedAnimation( - Theme.of(context) - .extension()! - .firstGradientBottomPanelColor, + exchangeTheme.firstGradientBottomPanelColor, ), ), ), - ), - if (!nftViewModel.isLoading) - Expanded( - child: nftViewModel.nftAssetByWalletModels.isEmpty - ? Center( - child: Text( - S.current.noNFTYet, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, - fontFamily: 'Lato', - fontWeight: FontWeight.w600, - color: Theme.of(context) - .extension()! - .pageTitleTextColor, - height: 1, - ), - ), - ) - : ListView.separated( - padding: EdgeInsets.symmetric(horizontal: 4, vertical: 16), - separatorBuilder: (context, index) => SizedBox(height: 8), - itemCount: nftViewModel.nftAssetByWalletModels.length, - itemBuilder: (context, index) { - final nftAsset = nftViewModel.nftAssetByWalletModels[index]; - return NFTTileWidget(nftAsset: nftAsset); - }, - ), ) + else + Expanded( + child: NFTListWidget(nftViewModel: nftViewModel), + ), ], ); }, ); } } + +class NFTListWidget extends StatelessWidget { + const NFTListWidget({required this.nftViewModel, super.key}); + + final NFTViewModel nftViewModel; + + @override + Widget build(BuildContext context) { + return Observer( + builder: (context) { + final isSolana = nftViewModel.appStore.wallet!.type == WalletType.solana; + + final emptyMessage = Center( + child: Text( + S.current.noNFTYet, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20, + fontFamily: 'Lato', + fontWeight: FontWeight.w600, + color: Theme.of(context).extension()!.pageTitleTextColor, + height: 1, + ), + ), + ); + + if (isSolana) { + if (nftViewModel.solanaNftAssetModels.isEmpty) return emptyMessage; + + return ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 16), + separatorBuilder: (context, index) => const SizedBox(height: 8), + itemCount: nftViewModel.solanaNftAssetModels.length, + itemBuilder: (context, index) { + final nftAsset = nftViewModel.solanaNftAssetModels[index]; + return SolanaNFTTileWidget(nftAsset: nftAsset); + }, + ); + } else { + if (nftViewModel.nftAssetByWalletModels.isEmpty) return emptyMessage; + + return ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 16), + separatorBuilder: (context, index) => const SizedBox(height: 8), + itemCount: nftViewModel.nftAssetByWalletModels.length, + itemBuilder: (context, index) { + final nftAsset = nftViewModel.nftAssetByWalletModels[index]; + return NFTTileWidget(nftAsset: nftAsset); + }, + ); + } + }, + ); + } +} diff --git a/lib/src/screens/dashboard/widgets/nft_tile_widget.dart b/lib/src/screens/dashboard/widgets/nft_tile_widget.dart index 4c4d214e7..c7d79bfa7 100644 --- a/lib/src/screens/dashboard/widgets/nft_tile_widget.dart +++ b/lib/src/screens/dashboard/widgets/nft_tile_widget.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/entities/wallet_nft_response.dart'; import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/src/screens/dashboard/pages/nft_details_page.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/themes/extensions/balance_page_theme.dart'; import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart'; @@ -12,7 +13,14 @@ class NFTTileWidget extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: () => Navigator.pushNamed(context, Routes.nftDetailsPage, arguments: nftAsset), + onTap: () => Navigator.pushNamed( + context, + Routes.nftDetailsPage, + arguments: NFTDetailsPageArguments( + isSolanaNFT: false, + nftAsset: nftAsset, + ), + ), child: Container( width: double.infinity, margin: const EdgeInsets.only(left: 16, right: 16), diff --git a/lib/src/screens/dashboard/widgets/solana_nft_tile_widget.dart b/lib/src/screens/dashboard/widgets/solana_nft_tile_widget.dart new file mode 100644 index 000000000..bd134d7b5 --- /dev/null +++ b/lib/src/screens/dashboard/widgets/solana_nft_tile_widget.dart @@ -0,0 +1,97 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/entities/solana_nft_asset_model.dart'; +import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/src/screens/dashboard/pages/nft_details_page.dart'; +import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart'; +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart'; + +class SolanaNFTTileWidget extends StatelessWidget { + const SolanaNFTTileWidget({super.key, required this.nftAsset}); + + final SolanaNFTAssetModel nftAsset; + + @override + Widget build(BuildContext context) { + final balanceTheme = Theme.of(context).extension()!; + final syncTheme = Theme.of(context).extension()!; + + return InkWell( + onTap: () { + Navigator.pushNamed( + context, + Routes.nftDetailsPage, + arguments: NFTDetailsPageArguments( + isSolanaNFT: true, + solanaNFTAssetModel: nftAsset, + ), + ); + }, + child: Container( + width: double.infinity, + margin: const EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16.0), + border: Border.all( + color: balanceTheme.cardBorderColor, + width: 1, + ), + color: syncTheme.syncedBackgroundColor, + ), + child: Row( + children: [ + Container( + height: 100, + width: 100, + margin: const EdgeInsets.all(8), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16.0), + border: Border.all( + color: balanceTheme.cardBorderColor, + width: 1, + ), + color: syncTheme.syncedBackgroundColor, + ), + child: CakeImageWidget( + imageUrl: nftAsset.imageOriginalUrl, + ), + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Symbol: ${nftAsset.symbol ?? '---'}', + style: TextStyle( + fontSize: 12, + fontFamily: 'Lato', + fontWeight: FontWeight.w400, + color: balanceTheme.labelTextColor, + height: 1, + ), + ), + const SizedBox(height: 8), + Text( + (nftAsset.name?.isNotEmpty ?? false) + ? nftAsset.name! + : (nftAsset.symbol ?? '---'), + style: TextStyle( + fontSize: 20, + fontFamily: 'Lato', + fontWeight: FontWeight.w900, + color: balanceTheme.assetTitleColor, + height: 1, + ), + ), + ], + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/view_model/dashboard/nft_view_model.dart b/lib/view_model/dashboard/nft_view_model.dart index f00f929a3..b0474604b 100644 --- a/lib/view_model/dashboard/nft_view_model.dart +++ b/lib/view_model/dashboard/nft_view_model.dart @@ -2,8 +2,10 @@ import 'dart:convert'; import 'dart:developer'; import 'package:cake_wallet/core/wallet_connect/wc_bottom_sheet_service.dart'; +import 'package:cake_wallet/entities/solana_nft_asset_model.dart'; import 'package:cake_wallet/reactions/wallet_connect.dart'; import 'package:cake_wallet/src/screens/wallet_connect/widgets/message_display_widget.dart'; +import 'package:cw_core/wallet_type.dart'; import 'package:http/http.dart' as http; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/.secrets.g.dart' as secrets; @@ -19,7 +21,8 @@ abstract class NFTViewModelBase with Store { NFTViewModelBase(this.appStore, this.bottomSheetService) : isLoading = false, isImportNFTLoading = false, - nftAssetByWalletModels = ObservableList() { + nftAssetByWalletModels = ObservableList(), + solanaNftAssetModels = ObservableList() { getNFTAssetByWallet(); reaction((_) => appStore.wallet, (_) => getNFTAssetByWallet()); @@ -36,31 +39,44 @@ abstract class NFTViewModelBase with Store { ObservableList nftAssetByWalletModels; + ObservableList solanaNftAssetModels; + @action Future getNFTAssetByWallet() async { - if (!isEVMCompatibleChain(appStore.wallet!.type)) return; + final walletType = appStore.wallet!.type; + + if (!isNFTACtivatedChain(walletType)) return; final walletAddress = appStore.wallet!.walletInfo.address; log('Fetching wallet NFTs for $walletAddress'); - final chainName = getChainNameBasedOnWalletType(appStore.wallet!.type); + final chainName = getChainNameBasedOnWalletType(walletType); // the [chain] refers to the chain network that the nft is on // the [format] refers to the number format type of the responses // the [normalizedMetadata] field is a boolean that determines if // the response would include a json string of the NFT Metadata that can be decoded // and used within the wallet // the [excludeSpam] field is a boolean that determines if spam nfts be excluded from the response. - final uri = Uri.https( - 'deep-index.moralis.io', - '/api/v2.2/$walletAddress/nft', - { - "chain": chainName, - "format": "decimal", - "media_items": "false", - "exclude_spam": "true", - "normalizeMetadata": "true", - }, - ); + + Uri uri; + if (walletType == WalletType.solana) { + uri = Uri.https( + 'solana-gateway.moralis.io', + '/account/$chainName/$walletAddress/nft', + ); + } else { + uri = Uri.https( + 'deep-index.moralis.io', + '/api/v2.2/$walletAddress/nft', + { + "chain": chainName, + "format": "decimal", + "media_items": "false", + "exclude_spam": "true", + "normalizeMetadata": "true", + }, + ); + } try { isLoading = true; @@ -73,13 +89,30 @@ abstract class NFTViewModelBase with Store { }, ); - final decodedResponse = jsonDecode(response.body) as Map; + final decodedResponse = jsonDecode(response.body); - final result = WalletNFTsResponseModel.fromJson(decodedResponse).result ?? []; + if (walletType == WalletType.solana) { + final results = await Future.wait( + (decodedResponse as List).map( + (x) { + final data = x as Map; + final mint = data['mint'] as String? ?? ''; + return getSolanaNFTDetails(mint, chainName); + }, + ).toList(), + ); - nftAssetByWalletModels.clear(); + solanaNftAssetModels.clear(); - nftAssetByWalletModels.addAll(result); + solanaNftAssetModels.addAll(results); + } else { + final result = + WalletNFTsResponseModel.fromJson(decodedResponse as Map).result ?? []; + + nftAssetByWalletModels.clear(); + + nftAssetByWalletModels.addAll(result); + } isLoading = false; } catch (e) { @@ -94,51 +127,76 @@ abstract class NFTViewModelBase with Store { } } + Future getSolanaNFTDetails(String address, String chainName) async { + final uri = Uri.https( + 'solana-gateway.moralis.io', + '/nft/$chainName/$address/metadata', + ); + + final response = await http.get( + uri, + headers: { + "Accept": "application/json", + "X-API-Key": secrets.moralisApiKey, + }, + ); + + final decodedResponse = jsonDecode(response.body) as Map; + + return SolanaNFTAssetModel.fromJson(decodedResponse); + } + @action - Future importNFT(String tokenAddress, String tokenId) async { + Future importNFT(String tokenAddress, String? tokenId) async { final chainName = getChainNameBasedOnWalletType(appStore.wallet!.type); // the [chain] refers to the chain network that the nft is on // the [format] refers to the number format type of the responses // the [normalizedMetadata] field is a boolean that determines if // the response would include a json string of the NFT Metadata that can be decoded // and used within the wallet - final uri = Uri.https( - 'deep-index.moralis.io', - '/api/v2.2/nft/$tokenAddress/$tokenId', - { - "chain": chainName, - "format": "decimal", - "media_items": "false", - "normalizeMetadata": "true", - }, - ); try { isImportNFTLoading = true; - final response = await http.get( - uri, - headers: { - "Accept": "application/json", - "X-API-Key": secrets.moralisApiKey, - }, - ); + if (appStore.wallet!.type == WalletType.solana) { + final result = await getSolanaNFTDetails(tokenAddress, chainName); - final decodedResponse = jsonDecode(response.body) as Map; + solanaNftAssetModels.add(result); + } else { + final uri = Uri.https( + 'deep-index.moralis.io', + '/api/v2.2/nft/$tokenAddress/$tokenId', + { + "chain": chainName, + "format": "decimal", + "media_items": "false", + "normalizeMetadata": "true", + }, + ); - final nftAsset = NFTAssetModel.fromJson(decodedResponse); + final response = await http.get( + uri, + headers: { + "Accept": "application/json", + "X-API-Key": secrets.moralisApiKey, + }, + ); - nftAssetByWalletModels.add(nftAsset); + final decodedResponse = jsonDecode(response.body) as Map; - isImportNFTLoading = false; + final nftAsset = NFTAssetModel.fromJson(decodedResponse); + + nftAssetByWalletModels.add(nftAsset); + } } catch (e) { - isImportNFTLoading = false; bottomSheetService.queueBottomSheet( isModalDismissible: true, widget: BottomSheetMessageDisplayWidget( message: e.toString(), ), ); + } finally { + isImportNFTLoading = false; } } } diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index ecbf2ad6f..ec09b2b3d 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -148,6 +148,9 @@ "close": "يغلق", "coin_control": "التحكم في العملة (اختياري)", "cold_or_recover_wallet": "أضف محفظة للقراءة فقط من Cupcake أو محفظة باردة أو استعاد محفظة ورقية", + "collection_address": "عنوان التجميع", + "collection_description": "وصف المجموعة", + "collection_name": "اسم المجموعة", "color_theme": "سمة اللون", "commit_transaction_amount_fee": "تنفيذ الصفقة\nالمبلغ: ${amount}\nالرسوم: ${fee}", "confirm": "تأكيد", @@ -430,6 +433,7 @@ "methods": " ﻕﺮﻃُ", "min_amount": "الحد الأدنى: ${value}", "min_value": "الحد الأدنى: ${value} ${currency}", + "mint_address": "عنوان النعناع", "minutes_to_pin_code": "${minutes} دقيقة", "mm": "MM", "modify_2fa": "تعديل 2 عامل المصادقة", @@ -457,6 +461,7 @@ "new_wallet": "إنشاء محفظة جديدة", "newConnection": "ﺪﻳﺪﺟ ﻝﺎﺼﺗﺍ", "no_cards_found": "لم يتم العثور على بطاقات", + "no_extra_detail": "لا توجد تفاصيل إضافية متاحة", "no_id_needed": "لا حاجة لID!", "no_id_required": "لا ID مطلوب. اشحن وانفق في أي مكان", "no_providers_available": "لا مقدمي الخدمات المتاحة", @@ -675,8 +680,8 @@ "select_destination": ".ﻲﻃﺎﻴﺘﺣﻻﺍ ﺦﺴﻨﻟﺍ ﻒﻠﻣ ﺔﻬﺟﻭ ﺪﻳﺪﺤﺗ ءﺎﺟﺮﻟﺍ", "select_hw_account_below": "الرجاء تحديد حساب الاستعادة أدناه:", "select_sell_provider_notice": ".ﻖﻴﺒﻄﺘﻟﺍ ﺕﺍﺩﺍﺪﻋﺇ ﻲﻓ ﻚﺑ ﺹﺎﺨﻟﺍ ﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﻴﺒﻟﺍ ﺩﻭﺰﻣ ﻦﻴﻴﻌﺗ ﻖﻳﺮﻃ ﻦﻋ ﺔﺷﺎﺸﻟﺍ ﻩﺬﻫ ﻲﻄﺨﺗ", - "selected_trocador_provider": "مزود تروكادور المختار", "select_your_country": "الرجاء تحديد بلدك", + "selected_trocador_provider": "مزود تروكادور المختار", "sell": "بيع", "sell_alert_content": ".ﺎﻬﻴﻟﺇ ﻞﻳﺪﺒﺘﻟﺍ ﻭﺃ Litecoin ﻭﺃ Ethereum ﻭﺃ Bitcoin ﺔﻈﻔﺤﻣ ءﺎﺸﻧﺇ ﻰﺟﺮﻳ .Litecoin ﻭ", "sell_monero_com_alert_content": "بيع Monero غير مدعوم حتى الآن", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index e1959d195..31fd57c27 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -148,6 +148,9 @@ "close": "затвори", "coin_control": "Управление на монетите (не е задължително)", "cold_or_recover_wallet": "Добавете портфейл само за четене от Cupcake или студен портфейл или възстановете хартиен портфейл", + "collection_address": "Адрес на колекцията", + "collection_description": "Описание на колекцията", + "collection_name": "Име на колекцията", "color_theme": "Цвят", "commit_transaction_amount_fee": "Изпълняване на транзакция\nСума: ${amount}\nТакса: ${fee}", "confirm": "Потвърждаване", @@ -430,6 +433,7 @@ "methods": "Методи", "min_amount": "Мин: ${value}", "min_value": "Мин: ${value} ${currency}", + "mint_address": "Адрес на мента", "minutes_to_pin_code": "${minute} минути", "mm": "мм", "modify_2fa": "Модифициране на тортата 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Нов портфейл", "newConnection": "Нова връзка", "no_cards_found": "Не са намерени карти", + "no_extra_detail": "Няма налични допълнителни подробности", "no_id_needed": "Без нужда от документ за самоличност!", "no_id_required": "Без нужда от документ за самоличност. Използвайте навсякъде", "no_providers_available": "Няма налични доставчици", @@ -675,8 +680,8 @@ "select_destination": "Моля, изберете дестинация за архивния файл.", "select_hw_account_below": "Моля, изберете кой акаунт да възстановите по -долу:", "select_sell_provider_notice": "Изберете доставчик на продажба по-горе. Можете да пропуснете този екран, като зададете своя доставчик на продажба по подразбиране в настройките на приложението.", - "selected_trocador_provider": "Избран доставчик на трокадор", "select_your_country": "Моля, изберете вашата страна", + "selected_trocador_provider": "Избран доставчик на трокадор", "sell": "Продаване", "sell_alert_content": "В момента поддържаме само продажбата на Bitcoin, Ethereum и Litecoin. Моля, създайте или превключете към своя портфейл Bitcoin, Ethereum или Litecoin.", "sell_monero_com_alert_content": "Продажбата на Monero все още не се поддържа", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index bed37c456..fd66fdcae 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -148,6 +148,9 @@ "close": "zavřít", "coin_control": "Volba mincí (nepovinné)", "cold_or_recover_wallet": "Přidejte peněženku pouze pro čtení z Cupcake nebo studené peněženky nebo obnovte papírovou peněženku", + "collection_address": "Sběrná adresa", + "collection_description": "Popis sbírky", + "collection_name": "Název sbírky", "color_theme": "Barevný motiv", "commit_transaction_amount_fee": "Odeslat transakci\nČástka: ${amount}\nPoplatek: ${fee}", "confirm": "Potvrdit", @@ -430,6 +433,7 @@ "methods": "Metody", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Adresa máty", "minutes_to_pin_code": "${minute} minutách", "mm": "MM", "modify_2fa": "Upravte Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nová peněženka", "newConnection": "Nové připojení", "no_cards_found": "Žádné karty nenalezeny", + "no_extra_detail": "K dispozici nejsou žádné další podrobnosti", "no_id_needed": "Žádné ID není potřeba!", "no_id_required": "Žádní ID není potřeba. Dobijte si a utrácejte kdekoliv", "no_providers_available": "Žádní poskytovatelé jsou k dispozici", @@ -675,8 +680,8 @@ "select_destination": "Vyberte cíl pro záložní soubor.", "select_hw_account_below": "Níže vyberte, který účet chcete obnovit:", "select_sell_provider_notice": "Výše vyberte poskytovatele prodeje. Tuto obrazovku můžete přeskočit nastavením výchozího poskytovatele prodeje v nastavení aplikace.", - "selected_trocador_provider": "Vybraný poskytovatel Trocador", "select_your_country": "Vyberte prosím svou zemi", + "selected_trocador_provider": "Vybraný poskytovatel Trocador", "sell": "Prodat", "sell_alert_content": "V současné době podporujeme pouze prodej bitcoinů, etherea a litecoinů. Vytvořte nebo přepněte na svou bitcoinovou, ethereum nebo litecoinovou peněženku.", "sell_monero_com_alert_content": "Prodej Monero zatím není podporován", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index beca8957e..36f5ecfa8 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -148,6 +148,9 @@ "close": "Schließen", "coin_control": "Coin Control (optional)", "cold_or_recover_wallet": "Fügen Sie eine schreibgeschützte Wallet von Cupcake, eine Cold-Wallet oder eine Papier-Wallet hinzu.", + "collection_address": "Sammeladresse", + "collection_description": "Sammlung Beschreibung", + "collection_name": "Sammlungsname", "color_theme": "Farbthema", "commit_transaction_amount_fee": "Transaktion absenden\nBetrag: ${amount}\nGebühr: ${fee}", "confirm": "Bestätigen", @@ -430,6 +433,7 @@ "methods": "Methoden", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Minzadresse", "minutes_to_pin_code": "${minute} Minuten", "mm": "MM", "modify_2fa": "Cake 2FA ändern", @@ -457,6 +461,7 @@ "new_wallet": "Neue Wallet", "newConnection": "Neue Verbindung", "no_cards_found": "Keine Karten gefunden", + "no_extra_detail": "Keine zusätzlichen Details verfügbar", "no_id_needed": "Keine ID erforderlich!", "no_id_required": "Keine ID erforderlich. Upgraden und überall ausgeben", "no_providers_available": "Keine Anbieter verfügbar", @@ -676,8 +681,8 @@ "select_destination": "Bitte wählen Sie das Ziel für die Sicherungsdatei aus.", "select_hw_account_below": "Bitte wählen Sie unten, welches Konto unten wiederhergestellt werden soll:", "select_sell_provider_notice": "Wählen Sie oben einen Verkaufsanbieter aus. Sie können diesen Bildschirm überspringen, indem Sie in den App-Einstellungen Ihren Standard-Verkaufsanbieter festlegen.", - "selected_trocador_provider": "Ausgewählter Trocador -Anbieter", "select_your_country": "Bitte wählen Sie Ihr Land aus", + "selected_trocador_provider": "Ausgewählter Trocador -Anbieter", "sell": "Verkaufen", "sell_alert_content": "Wir unterstützen derzeit nur den Verkauf von Bitcoin, Ethereum und Litecoin. Bitte erstellen Sie Ihr Bitcoin-, Ethereum- oder Litecoin-Wallet oder wechseln Sie zu diesem.", "sell_monero_com_alert_content": "Der Verkauf von Monero wird noch nicht unterstützt", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 0bd5d7138..1278aaf04 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -148,6 +148,9 @@ "close": "Close", "coin_control": "Coin control (optional)", "cold_or_recover_wallet": "Add a read-only wallet from Cupcake or a cold wallet or recover a paper wallet", + "collection_address": "Collection Address", + "collection_description": "Collection Description", + "collection_name": "Collection Name", "color_theme": "Color theme", "commit_transaction_amount_fee": "Commit transaction\nAmount: ${amount}\nFee: ${fee}", "confirm": "Confirm", @@ -430,6 +433,7 @@ "methods": "Methods", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Mint Address", "minutes_to_pin_code": "${minute} minutes", "mm": "MM", "modify_2fa": "Modify Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "New Wallet", "newConnection": "New Connection", "no_cards_found": "No cards found", + "no_extra_detail": "No extra details available", "no_id_needed": "No ID needed!", "no_id_required": "No ID required. Top up and spend anywhere", "no_providers_available": "No providers available", @@ -676,8 +681,8 @@ "select_destination": "Please select destination for the backup file.", "select_hw_account_below": "Please select which account to restore below:", "select_sell_provider_notice": "Select a sell provider above. You can skip this screen by setting your default sell provider in app settings.", - "selected_trocador_provider": "selected Trocador provider", "select_your_country": "Please select your country", + "selected_trocador_provider": "selected Trocador provider", "sell": "Sell", "sell_alert_content": "We currently only support the sale of Bitcoin, Ethereum and Litecoin. Please create or switch to your Bitcoin, Ethereum or Litecoin wallet.", "sell_monero_com_alert_content": "Selling Monero is not supported yet", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index e2da76a97..1849a2f60 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -148,6 +148,9 @@ "close": "Cerca", "coin_control": "Control de monedas (opcional)", "cold_or_recover_wallet": "Agregue una billetera de solo lectura de Cupcake o una billetera en frío o recupere una billetera de papel", + "collection_address": "Dirección de recolección", + "collection_description": "Descripción de la colección", + "collection_name": "Nombre de colección", "color_theme": "Tema de color", "commit_transaction_amount_fee": "Confirmar transacción\nCantidad: ${amount}\nCuota: ${fee}", "confirm": "Confirmar", @@ -430,6 +433,7 @@ "methods": "Métodos", "min_amount": "Mínimo: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Dirección menta", "minutes_to_pin_code": "${minute} minutos", "mm": "mm", "modify_2fa": "Modificar 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nueva billetera", "newConnection": "Nueva conexión", "no_cards_found": "No se encuentran cartas", + "no_extra_detail": "No hay detalles adicionales disponibles", "no_id_needed": "¡No se necesita identificación!", "no_id_required": "No se requiere identificación. Recarga y gaste en cualquier lugar", "no_providers_available": "No hay proveedores disponibles", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 0e65bdb08..bcd513f67 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -148,6 +148,9 @@ "close": "Fermer", "coin_control": "Contrôle optionnel des pièces (coins)", "cold_or_recover_wallet": "Ajoutez un portefeuille en lecture seule de Cupcake ou d'un portefeuille froid ou récupérez un portefeuille en papier", + "collection_address": "Adresse de collecte", + "collection_description": "Description de la collection", + "collection_name": "Nom de collection", "color_theme": "Thème", "commit_transaction_amount_fee": "Valider la transaction\nMontant : ${amount}\nFrais : ${fee}", "confirm": "Confirmer", @@ -430,6 +433,7 @@ "methods": "Méthodes", "min_amount": "Min : ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Adresse de la menthe", "minutes_to_pin_code": "${minute} minutes", "mm": "MM", "modify_2fa": "Modifier les paramètres Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nouveau Portefeuille (Wallet)", "newConnection": "Nouvelle connexion", "no_cards_found": "Pas de cartes trouvées", + "no_extra_detail": "Aucun détail supplémentaire disponible", "no_id_needed": "Aucune pièce d'identité nécessaire !", "no_id_required": "Aucune pièce d'identité requise. Rechargez et dépensez n'importe où", "no_providers_available": "Aucun fournisseur disponible", @@ -675,8 +680,8 @@ "select_destination": "Veuillez sélectionner la destination du fichier de sauvegarde.", "select_hw_account_below": "Veuillez sélectionner le compte à restaurer ci-dessous:", "select_sell_provider_notice": "Sélectionnez un fournisseur de vente ci-dessus. Vous pouvez ignorer cet écran en définissant votre fournisseur de vente par défaut dans les paramètres de l'application.", - "selected_trocador_provider": "fournisseur de trocador sélectionné", "select_your_country": "Veuillez sélectionner votre pays", + "selected_trocador_provider": "fournisseur de trocador sélectionné", "sell": "Vendre", "sell_alert_content": "Nous ne prenons actuellement en charge que la vente de Bitcoin, Ethereum et Litecoin. Veuillez créer ou basculer vers votre portefeuille Bitcoin, Ethereum ou Litecoin.", "sell_monero_com_alert_content": "La vente de Monero n'est pas encore prise en charge", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index 53cfd164b..0e30d2aff 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -148,6 +148,9 @@ "close": "Rufa", "coin_control": "Sarrafa tsabar kuɗi (na zaɓi)", "cold_or_recover_wallet": "Aara wani walat mai karanta-kawai Cupcake ko walat ɗin mai sanyi ko murmurewa takarda takarda", + "collection_address": "Adireshin tarin tarin", + "collection_description": "Bayanin tarin", + "collection_name": "Sunan tattara", "color_theme": "Jigon launi", "commit_transaction_amount_fee": "Aikata ciniki\nAdadi: ${amount}\nKuda: ${fee}", "confirm": "Tabbatar", @@ -430,6 +433,7 @@ "methods": "Hanyoyin", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Adireshin Mint", "minutes_to_pin_code": "${minute} minti", "mm": "MM", "modify_2fa": "Gyara Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Sabuwar Wallet", "newConnection": "Sabuwar Haɗi", "no_cards_found": "Babu katunan da aka samo", + "no_extra_detail": "Babu ƙarin cikakkun bayanai", "no_id_needed": "Babu ID da ake buƙata!", "no_id_required": "Babu ID da ake buƙata. Yi da kuma ciyar a ko'ina", "no_providers_available": "Babu masu samar da wadatar", @@ -677,8 +682,8 @@ "select_destination": "Da fatan za a zaɓi wurin da za a yi wa madadin fayil ɗin.", "select_hw_account_below": "Da fatan za a zabi wanda asusun zai gyara a ƙasa:", "select_sell_provider_notice": "Zaɓi mai bada siyarwa a sama. Kuna iya tsallake wannan allon ta saita mai bada siyar da ku a cikin saitunan app.", - "selected_trocador_provider": "Zabi mai bada TORACAD", "select_your_country": "Da fatan za a zabi ƙasarku", + "selected_trocador_provider": "Zabi mai bada TORACAD", "sell": "sayar", "sell_alert_content": "A halin yanzu muna tallafawa kawai siyar da Bitcoin, Ethereum da Litecoin. Da fatan za a ƙirƙiri ko canza zuwa walat ɗin ku na Bitcoin, Ethereum ko Litecoin.", "sell_monero_com_alert_content": "Selling Monero bai sami ƙarshen mai bukatar samun ba", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 002aa8246..d309c7f89 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -148,6 +148,9 @@ "close": "बंद करना", "coin_control": "सिक्का नियंत्रण (वैकल्पिक)", "cold_or_recover_wallet": "Cupcake या एक कोल्ड वॉलेट से एक रीड-ओनली वॉलेट जोड़ें या एक पेपर वॉलेट को पुनर्प्राप्त करें", + "collection_address": "संग्रह पता", + "collection_description": "संग्रह विवरण", + "collection_name": "संग्रह नाम", "color_theme": "रंग विषय", "commit_transaction_amount_fee": "लेन-देन करें\nरकम: ${amount}\nशुल्क: ${fee}", "confirm": "की पुष्टि करें", @@ -430,6 +433,7 @@ "methods": "तरीकों", "min_amount": "न्यूनतम: ${value}", "min_value": "मिन: ${value} ${currency}", + "mint_address": "टकसाल पता", "minutes_to_pin_code": "${minute} मिनट", "mm": "एमएम", "modify_2fa": "केक 2FA संशोधित करें", @@ -457,6 +461,7 @@ "new_wallet": "नया बटुआ", "newConnection": "नया कनेक्शन", "no_cards_found": "कोई कार्ड नहीं मिला", + "no_extra_detail": "कोई अतिरिक्त विवरण उपलब्ध नहीं है", "no_id_needed": "कोई आईडी नहीं चाहिए!", "no_id_required": "कोई आईडी आवश्यक नहीं है। टॉप अप करें और कहीं भी खर्च करें", "no_providers_available": "कोई प्रदाता उपलब्ध नहीं है", @@ -509,8 +514,8 @@ "paste": "पेस्ट करें", "pause_wallet_creation": "हेवन वॉलेट बनाने की क्षमता फिलहाल रुकी हुई है।", "payment_id": "भुगतान ID: ", - "payment_was_received": "आपका भुगतान प्राप्त हुआ था।", "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", + "payment_was_received": "आपका भुगतान प्राप्त हुआ था।", "pending": " (अपूर्ण)", "percentageOf": "${amount} का", "pin_at_top": "शीर्ष पर ${token} पिन करें", @@ -677,8 +682,8 @@ "select_destination": "कृपया बैकअप फ़ाइल के लिए गंतव्य का चयन करें।", "select_hw_account_below": "कृपया नीचे पुनर्स्थापित करने के लिए कौन सा खाता चुनें:", "select_sell_provider_notice": "ऊपर एक विक्रय प्रदाता का चयन करें। आप ऐप सेटिंग में अपना डिफ़ॉल्ट विक्रय प्रदाता सेट करके इस स्क्रीन को छोड़ सकते हैं।", - "selected_trocador_provider": "चयनित ट्रोकैडर प्रदाता", "select_your_country": "कृपया अपने देश का चयन करें", + "selected_trocador_provider": "चयनित ट्रोकैडर प्रदाता", "sell": "बेचना", "sell_alert_content": "हम वर्तमान में केवल बिटकॉइन, एथेरियम और लाइटकॉइन की बिक्री का समर्थन करते हैं। कृपया अपना बिटकॉइन, एथेरियम या लाइटकॉइन वॉलेट बनाएं या उसमें स्विच करें।", "sell_monero_com_alert_content": "मोनेरो बेचना अभी तक समर्थित नहीं है", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 45fc66005..4040513cb 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -148,6 +148,9 @@ "close": "Zatvoriti", "coin_control": "Kontrola novca (nije obavezno)", "cold_or_recover_wallet": "Dodajte novčanik samo za čitanje od Cupcake ili hladnog novčanika ili oporavite papirni novčanik", + "collection_address": "Adresa prikupljanja", + "collection_description": "Zbirka Opis opisa", + "collection_name": "Naziv kolekcije", "color_theme": "Shema boja", "commit_transaction_amount_fee": "Izvrši transakciju \nAmount: ${amount}\nFee: ${fee}", "confirm": "Potvrdi", @@ -430,6 +433,7 @@ "methods": "Metode", "min_amount": "Minimalno: ${value}", "min_value": "Min.: ${value} ${currency}", + "mint_address": "Adresa metvice", "minutes_to_pin_code": "${minute} minuta", "mm": "MM", "modify_2fa": "Izmijenite tortu 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Novi novčanik", "newConnection": "Nova veza", "no_cards_found": "Nisu pronađene kartice", + "no_extra_detail": "Nema dostupnih dodatnih detalja", "no_id_needed": "Nije potreban ID!", "no_id_required": "Nije potreban ID. Nadopunite i potrošite bilo gdje", "no_providers_available": "Nema dostupnih pružatelja usluga", @@ -675,8 +680,8 @@ "select_destination": "Odaberite odredište za datoteku sigurnosne kopije.", "select_hw_account_below": "Molimo odaberite koji će se račun vratiti u nastavku:", "select_sell_provider_notice": "Gore odaberite pružatelja usluga prodaje. Ovaj zaslon možete preskočiti postavljanjem zadanog pružatelja usluga prodaje u postavkama aplikacije.", - "selected_trocador_provider": "Odabrani pružatelj usluga trokadora", "select_your_country": "Odaberite svoju zemlju", + "selected_trocador_provider": "Odabrani pružatelj usluga trokadora", "sell": "Prodavati", "sell_alert_content": "Trenutno podržavamo samo prodaju Bitcoina, Ethereuma i Litecoina. Izradite ili prijeđite na svoj Bitcoin, Ethereum ili Litecoin novčanik.", "sell_monero_com_alert_content": "Prodaja Monera još nije podržana", diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index 2719015cc..e8ab6ca99 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -148,6 +148,9 @@ "close": "Փակել", "coin_control": "Մետաղադրամի վերահսկում (ըստ ցանկության)", "cold_or_recover_wallet": "Cupcake կամ ցուրտ դրամապանակից ավելացնել միայն ընթերցված դրամապանակ կամ վերականգնել թղթի դրամապանակը", + "collection_address": "Հավաքածուի հասցե", + "collection_description": "Հավաքածուի նկարագրությունը", + "collection_name": "Հավաքածուի անուն", "color_theme": "Գույների տեսք", "commit_transaction_amount_fee": "Հաստատել գործարքը\nՍկզբնական գումար. ${amount}\nՄիջնորդավճար. ${fee}", "confirm": "Հաստատել", @@ -430,6 +433,7 @@ "methods": "Մեթոդներ", "min_amount": "Նվազը: ${value}", "min_value": "Նվազը: ${value} ${currency}", + "mint_address": "Անանուխի հասցե", "minutes_to_pin_code": "${minute} րոպե", "mm": "ԱԱ", "modify_2fa": "Փոփոխել Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Նոր դրամապանակ", "newConnection": "Նոր կապ", "no_cards_found": "Ոչ մի քարտ չի գտնվել", + "no_extra_detail": "Լրացուցիչ մանրամասներ մատչելի չեն", "no_id_needed": "Ոչ մի փաստաթուղթ չի պահանջվում!", "no_id_required": "Ոչ մի փաստաթուղթ չի պահանջվում։ Լրացրեք և ծախսեք ամենուր", "no_relay_on_domain": "Տիրույթի համար ընդունող չկա կամ անհասանելի է։ Խնդրում ենք ընտրել ընդունող", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index f5b0bb285..db2383f17 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -148,6 +148,9 @@ "close": "Menutup", "coin_control": "Kontrol koin (opsional)", "cold_or_recover_wallet": "Tambahkan dompet hanya baca dari Cupcake atau dompet dingin atau memulihkan dompet kertas", + "collection_address": "Alamat Koleksi", + "collection_description": "Deskripsi Koleksi", + "collection_name": "Nama Koleksi", "color_theme": "Tema warna", "commit_transaction_amount_fee": "Lakukan transaksi\nJumlah: ${amount}\nBiaya: ${fee}", "confirm": "Konfirmasi", @@ -430,6 +433,7 @@ "methods": "Metode", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Alamat mint", "minutes_to_pin_code": "${minute} menit", "mm": "MM", "modify_2fa": "Ubah Kue 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Dompet Baru", "newConnection": "Koneksi Baru", "no_cards_found": "Tidak ada kartu yang ditemukan", + "no_extra_detail": "Tidak ada detail tambahan yang tersedia", "no_id_needed": "Tidak perlu ID!", "no_id_required": "Tidak perlu ID. Isi ulang dan belanja di mana saja", "no_providers_available": "Tidak ada penyedia yang tersedia", @@ -678,8 +683,8 @@ "select_destination": "Silakan pilih tujuan untuk file cadangan.", "select_hw_account_below": "Pilih akun mana yang akan dikembalikan di bawah ini:", "select_sell_provider_notice": "Pilih penyedia jual di atas. Anda dapat melewati layar ini dengan mengatur penyedia penjualan default Anda di pengaturan aplikasi.", - "selected_trocador_provider": "Penyedia Trocador Terpilih", "select_your_country": "Pilih negara Anda", + "selected_trocador_provider": "Penyedia Trocador Terpilih", "sell": "Jual", "sell_alert_content": "Saat ini kami hanya mendukung penjualan Bitcoin, Ethereum, dan Litecoin. Harap buat atau alihkan ke dompet Bitcoin, Ethereum, atau Litecoin Anda.", "sell_monero_com_alert_content": "Menjual Monero belum didukung", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 3c55f909d..5ebbcece8 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -148,6 +148,9 @@ "close": "Chiudi", "coin_control": "Controllo valute (opzionale)", "cold_or_recover_wallet": "Aggiungi un portafoglio di sola lettura da Cupcake o un cold wallet o recupera un portafoglio di carta", + "collection_address": "Indirizzo di raccolta", + "collection_description": "Descrizione della raccolta", + "collection_name": "Nome della raccolta", "color_theme": "Colore tema", "commit_transaction_amount_fee": "Invia transazione\nAmmontare: ${amount}\nCommissione: ${fee}", "confirm": "Conferma", @@ -430,6 +433,7 @@ "methods": "Metodi", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Indirizzo di menta", "minutes_to_pin_code": "${minute} minuti", "mm": "mm", "modify_2fa": "Modifica Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nuovo portafoglio", "newConnection": "Nuova connessione", "no_cards_found": "Nessuna carta trovata", + "no_extra_detail": "Nessun dettaglio extra disponibile", "no_id_needed": "Nessun ID necessario!", "no_id_required": "Nessun ID richiesto. Ricarica e spendi ovunque", "no_providers_available": "Nessun fornitore disponibile", @@ -674,10 +679,10 @@ "select_backup_file": "Seleziona file di backup", "select_buy_provider_notice": "Seleziona un provider di acquisto sopra. È possibile saltare questa schermata impostando il provider di acquisto predefinito nelle impostazioni dell'app.", "select_destination": "Seleziona la destinazione per il file di backup.", - "selected_trocador_provider": "Provider di Trocador selezionato", "select_hw_account_below": "Seleziona quale account ripristinare:", "select_sell_provider_notice": "Seleziona un provider di vendita sopra. Puoi saltare questa schermata impostando il tuo provider di vendita predefinito nelle impostazioni dell'app.", "select_your_country": "Seleziona il tuo paese", + "selected_trocador_provider": "Provider di Trocador selezionato", "sell": "Vendi", "sell_alert_content": "Al momento supportiamo solo la vendita di Bitcoin, Ethereum e Litecoin. Crea o passa al tuo portafoglio Bitcoin, Ethereum o Litecoin.", "sell_monero_com_alert_content": "La vendita di Monero non è ancora supportata", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 23414628a..9fe48e0b3 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -148,6 +148,9 @@ "close": "近い", "coin_control": "コインコントロール(オプション)", "cold_or_recover_wallet": "Cupcakeまたはコールドウォレットから読み取り専用ウォレットを追加するか、紙の財布を回収する", + "collection_address": "コレクションアドレス", + "collection_description": "コレクションの説明", + "collection_name": "コレクション名", "color_theme": "カラーテーマ", "commit_transaction_amount_fee": "トランザクションをコミット\n量: ${amount}\n費用: ${fee}", "confirm": "確認する", @@ -431,6 +434,7 @@ "methods": "メソッド", "min_amount": "最小: ${value}", "min_value": "分: ${value} ${currency}", + "mint_address": "ミントアドレス", "minutes_to_pin_code": "${minute} 分", "mm": "んん", "modify_2fa": "ケーキの 2FA を変更する", @@ -458,6 +462,7 @@ "new_wallet": "新しいウォレット", "newConnection": "新しい接続", "no_cards_found": "カードは見つかりません", + "no_extra_detail": "追加の詳細はありません", "no_id_needed": "IDは必要ありません!", "no_id_required": "IDは必要ありません。どこにでも補充して使用できます", "no_providers_available": "プロバイダーは利用できません", @@ -676,8 +681,8 @@ "select_destination": "バックアップファイルの保存先を選択してください。", "select_hw_account_below": "以下に復元するアカウントを選択してください。", "select_sell_provider_notice": "上記の販売プロバイダーを選択してください。アプリ設定でデフォルトの販売プロバイダーを設定することで、この画面をスキップできます。", - "selected_trocador_provider": "選択したTrocadorプロバイダー", "select_your_country": "あなたの国を選択してください", + "selected_trocador_provider": "選択したTrocadorプロバイダー", "sell": "売る", "sell_alert_content": "現在、ビットコイン、イーサリアム、ライトコインの販売のみをサポートしています。ビットコイン、イーサリアム、またはライトコインのウォレットを作成するか、これらのウォレットに切り替えてください。", "sell_monero_com_alert_content": "モネロの販売はまだサポートされていません", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 6b73f54b8..c498b2438 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -148,6 +148,9 @@ "close": "닫다", "coin_control": "코인 제어 (옵션)", "cold_or_recover_wallet": "Cupcake 또는 차가운 지갑에서 읽기 전용 지갑을 추가하거나 종이 지갑을 복구하십시오.", + "collection_address": "수집 주소", + "collection_description": "컬렉션 설명", + "collection_name": "수집 이름", "color_theme": "색상 테마", "commit_transaction_amount_fee": "커밋 거래\n양: ${amount}\n보수: ${fee}", "confirm": "확인", @@ -430,6 +433,7 @@ "methods": "행동 양식", "min_amount": "최소: ${value}", "min_value": "최소: ${value} ${currency}", + "mint_address": "민트 주소", "minutes_to_pin_code": "${minute}분", "mm": "mm", "modify_2fa": "수정 케이크 2FA", @@ -457,6 +461,7 @@ "new_wallet": "새 월렛", "newConnection": "새로운 연결", "no_cards_found": "카드를 찾지 못했습니다", + "no_extra_detail": "추가 세부 정보가 없습니다", "no_id_needed": "ID가 필요하지 않습니다!", "no_id_required": "신분증이 필요하지 않습니다. 충전하고 어디에서나 사용하세요", "no_providers_available": "제공되는 제공자가 없습니다", @@ -675,8 +680,8 @@ "select_destination": "백업 파일의 대상을 선택하십시오.", "select_hw_account_below": "아래를 복원 할 계정을 선택하십시오.", "select_sell_provider_notice": "위에서 판매 공급자를 선택하세요. 앱 설정에서 기본 판매 공급자를 설정하면 이 화면을 건너뛸 수 있습니다.", - "selected_trocador_provider": "선정 된 트로 코더 제공 업체", "select_your_country": "국가를 선택하십시오", + "selected_trocador_provider": "선정 된 트로 코더 제공 업체", "sell": "팔다", "sell_alert_content": "현재 Bitcoin, Ethereum 및 Litecoin의 판매만 지원합니다. Bitcoin, Ethereum 또는 Litecoin 지갑을 생성하거나 전환하십시오.", "sell_monero_com_alert_content": "지원되지 않습니다.", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 9a86dda6c..5c166afca 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -148,6 +148,9 @@ "close": "အနီးကပ်", "coin_control": "အကြွေစေ့ထိန်းချုပ်မှု (ချန်လှပ်ထားနိုင်သည်)", "cold_or_recover_wallet": "Cupcake သို့မဟုတ်အအေးပိုက်ဆံအိတ်မှဖတ်ရန်သာပိုက်ဆံအိတ်တစ်ခုထည့်ပါသို့မဟုတ်စက္ကူပိုက်ဆံအိတ်ကိုပြန်လည်ရယူပါ", + "collection_address": "စုဆောင်းမှုလိပ်စာ", + "collection_description": "စုဆောင်းခြင်းဖော်ပြချက်", + "collection_name": "စုဆောင်းခြင်းအမည်", "color_theme": "အရောင်အပြင်အဆင်", "commit_transaction_amount_fee": "ငွေလွှဲခြင်း\nပမာဏ- ${amount}\nအခကြေးငွေ- ${fee}", "confirm": "အတည်ပြုပါ။", @@ -430,6 +433,7 @@ "methods": "နည်းလမ်းများ", "min_amount": "အနည်းဆုံး- ${value}", "min_value": "အနည်းဆုံး- ${value} ${currency}", + "mint_address": "Mint လိပ်စာ", "minutes_to_pin_code": "${minute} မိနစ်", "mm": "MM", "modify_2fa": "ကိတ်မုန့် 2FA ကို ပြင်ဆင်ပါ။", @@ -457,6 +461,7 @@ "new_wallet": "ပိုက်ဆံအိတ်အသစ်", "newConnection": "ချိတ်ဆက်မှုအသစ်", "no_cards_found": "ကဒ်များမရှိပါ", + "no_extra_detail": "အဘယ်သူမျှမအပိုအသေးစိတ်ကိုရရှိနိုင်", "no_id_needed": "ID မလိုအပ်ပါ။", "no_id_required": "ID မလိုအပ်ပါ။ ငွေဖြည့်ပြီး ဘယ်နေရာမဆို သုံးစွဲပါ။", "no_providers_available": "မရရှိနိုင်ပါ", @@ -675,8 +680,8 @@ "select_destination": "အရန်ဖိုင်အတွက် ဦးတည်ရာကို ရွေးပါ။", "select_hw_account_below": "အောက်ဖော်ပြပါမည်သည့်အကောင့်ကိုရွေးပါ။", "select_sell_provider_notice": "အထက်ဖော်ပြပါ အရောင်းဝန်ဆောင်မှုပေးသူကို ရွေးပါ။ အက်ပ်ဆက်တင်များတွင် သင်၏မူလရောင်းချပေးသူကို သတ်မှတ်ခြင်းဖြင့် ဤစခရင်ကို ကျော်နိုင်သည်။", - "selected_trocador_provider": "ရွေးချယ်ထား Tracador ပံ့ပိုးပေး", "select_your_country": "ကျေးဇူးပြု. သင့်နိုင်ငံကိုရွေးချယ်ပါ", + "selected_trocador_provider": "ရွေးချယ်ထား Tracador ပံ့ပိုးပေး", "sell": "ရောင်း", "sell_alert_content": "ကျွန်ုပ်တို့သည် လက်ရှိတွင် Bitcoin၊ Ethereum နှင့် Litecoin ရောင်းချခြင်းကိုသာ ပံ့ပိုးပေးပါသည်။ သင်၏ Bitcoin၊ Ethereum သို့မဟုတ် Litecoin ပိုက်ဆံအိတ်ကို ဖန်တီးပါ သို့မဟုတ် ပြောင်းပါ။", "sell_monero_com_alert_content": "Monero ရောင်းချခြင်းကို မပံ့ပိုးရသေးပါ။", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 69280dbbe..d1b43bbdc 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -148,6 +148,9 @@ "close": "Dichtbij", "coin_control": "Muntcontrole (optioneel)", "cold_or_recover_wallet": "Voeg een alleen-lezen portemonnee toe van Cupcake of een koude portemonnee of herstel een papieren portemonnee", + "collection_address": "Verzameladres", + "collection_description": "Verzamelingsbeschrijving", + "collection_name": "Verzamelnaam", "color_theme": "Kleur thema", "commit_transaction_amount_fee": "Verricht transactie\nBedrag: ${amount}\nhonorarium: ${fee}", "confirm": "Bevestigen", @@ -430,6 +433,7 @@ "methods": "Methoden", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Muntadres", "minutes_to_pin_code": "${minute} minuten", "mm": "MM", "modify_2fa": "Wijzig Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nieuwe portemonnee", "newConnection": "Nieuwe verbinding", "no_cards_found": "Geen kaarten gevonden", + "no_extra_detail": "Geen extra details beschikbaar", "no_id_needed": "Geen ID nodig!", "no_id_required": "Geen ID vereist. Opwaarderen en overal uitgeven", "no_providers_available": "Geen providers beschikbaar", @@ -675,8 +680,8 @@ "select_destination": "Selecteer de bestemming voor het back-upbestand.", "select_hw_account_below": "Selecteer welk account u hieronder moet herstellen:", "select_sell_provider_notice": "Selecteer hierboven een verkoopaanbieder. U kunt dit scherm overslaan door uw standaardverkoopprovider in te stellen in de app-instellingen.", - "selected_trocador_provider": "Geselecteerde Trocador -provider", "select_your_country": "Selecteer uw land", + "selected_trocador_provider": "Geselecteerde Trocador -provider", "sell": "Verkopen", "sell_alert_content": "We ondersteunen momenteel alleen de verkoop van Bitcoin, Ethereum en Litecoin. Maak of schakel over naar uw Bitcoin-, Ethereum- of Litecoin-portemonnee.", "sell_monero_com_alert_content": "Het verkopen van Monero wordt nog niet ondersteund", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 0e57ecf8c..e0514d481 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -148,6 +148,9 @@ "close": "Zamknąć", "coin_control": "Kontrola monet (opcjonalnie)", "cold_or_recover_wallet": "Dodaj portfel tylko do odczytu od Cupcake lub zimnego portfela lub odzyskaj papierowy portfel", + "collection_address": "Adres kolekcji", + "collection_description": "Opis kolekcji", + "collection_name": "Nazwa kolekcji", "color_theme": "Motyw kolorystyczny", "commit_transaction_amount_fee": "Zatwierdź transakcję\nIlość: ${amount}\nOpłata: ${fee}", "confirm": "Potwierdzać", @@ -430,6 +433,7 @@ "methods": "Metody", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Adres mięty", "minutes_to_pin_code": "${minute} minut", "mm": "MM", "modify_2fa": "Zmodyfikuj ciasto 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Nowy portfel", "newConnection": "Nowe połączenie", "no_cards_found": "Nie znaleziono żadnych kart", + "no_extra_detail": "Brak dodatkowych szczegółów", "no_id_needed": "Nie potrzeba Dowodu!", "no_id_required": "Nie wymagamy Dowodu. Doładuj i wydawaj gdziekolwiek", "no_providers_available": "Brak dostępnych dostawców", @@ -675,8 +680,8 @@ "select_destination": "Wybierz miejsce docelowe dla pliku kopii zapasowej.", "select_hw_account_below": "Wybierz, które konto przywrócić poniżej:", "select_sell_provider_notice": "Wybierz dostawcę sprzedaży powyżej. Możesz pominąć ten ekran, ustawiając domyślnego dostawcę sprzedaży w ustawieniach aplikacji.", - "selected_trocador_provider": "Wybrany dostawca Trocador", "select_your_country": "Wybierz swój kraj", + "selected_trocador_provider": "Wybrany dostawca Trocador", "sell": "Sprzedać", "sell_alert_content": "Obecnie obsługujemy tylko sprzedaż Bitcoin, Ethereum i Litecoin. Utwórz lub przełącz się na swój portfel Bitcoin, Ethereum lub Litecoin.", "sell_monero_com_alert_content": "Sprzedaż Monero nie jest jeszcze obsługiwana", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index ccc87926d..f6f4a1295 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -148,6 +148,9 @@ "close": "Fechar", "coin_control": "Controle de moedas (opcional)", "cold_or_recover_wallet": "Adicione uma carteira somente leitura de Cupcake ou uma carteira fria ou recupere uma carteira de papel", + "collection_address": "Endereço de coleção", + "collection_description": "Descrição da coleção", + "collection_name": "Nome da coleção", "color_theme": "Tema de cor", "commit_transaction_amount_fee": "Confirmar transação\nQuantia: ${amount}\nTaxa: ${fee}", "confirm": "Confirmar", @@ -431,6 +434,7 @@ "methods": "Métodos", "min_amount": "Mínimo: ${valor}", "min_value": "Mín: ${value} ${currency}", + "mint_address": "Endereço da hortelã", "minutes_to_pin_code": "${minute} minutos", "mm": "MM", "modify_2fa": "Modificar o Cake 2FA", @@ -458,6 +462,7 @@ "new_wallet": "Nova carteira", "newConnection": "Nova conexão", "no_cards_found": "Nenhum cartão encontrado", + "no_extra_detail": "Sem detalhes extras disponíveis", "no_id_needed": "Nenhum ID necessário!", "no_id_required": "Não é necessário ID. Recarregue e gaste em qualquer lugar", "no_providers_available": "Nenhum fornecedor disponível", @@ -677,8 +682,8 @@ "select_destination": "Selecione o destino para o arquivo de backup.", "select_hw_account_below": "Selecione qual conta para restaurar abaixo:", "select_sell_provider_notice": "Selecione um fornecedor de venda acima. Você pode pular esta tela definindo seu provedor de venda padrão nas configurações do aplicativo.", - "selected_trocador_provider": "Provedor de Trocador selecionado", "select_your_country": "Selecione seu país", + "selected_trocador_provider": "Provedor de Trocador selecionado", "sell": "Vender", "sell_alert_content": "Atualmente, oferecemos suporte apenas à venda de Bitcoin, Ethereum e Litecoin. Crie ou troque para sua carteira Bitcoin, Ethereum ou Litecoin.", "sell_monero_com_alert_content": "A venda de Monero ainda não é suportada", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 757d8b7bd..e2a718cb0 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -148,6 +148,9 @@ "close": "Закрывать", "coin_control": "Контроль монет (необязательно)", "cold_or_recover_wallet": "Добавить кошелек только для чтения из Cupcake или холодный кошелек или восстановить бумажный кошелек", + "collection_address": "Адрес сбора", + "collection_description": "Описание коллекции", + "collection_name": "Название коллекции", "color_theme": "Цветовая тема", "commit_transaction_amount_fee": "Подтвердить транзакцию \nСумма: ${amount}\nКомиссия: ${fee}", "confirm": "Подтвердить", @@ -430,6 +433,7 @@ "methods": "Методы", "min_amount": "Минимум: ${value}", "min_value": "Мин: ${value} ${currency}", + "mint_address": "Мятный адрес", "minutes_to_pin_code": "${minute} минут", "mm": "ММ", "modify_2fa": "Изменить торт 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Новый кошелёк", "newConnection": "Новое соединение", "no_cards_found": "Карт не найдено", + "no_extra_detail": "Нет дополнительных деталей", "no_id_needed": "Идентификатор не нужен!", "no_id_required": "Идентификатор не требуется. Пополняйте и тратьте где угодно", "no_providers_available": "Нет доступных поставщиков", @@ -676,8 +681,8 @@ "select_destination": "Пожалуйста, выберите место для файла резервной копии.", "select_hw_account_below": "Пожалуйста, выберите, какую учетную запись восстановить ниже:", "select_sell_provider_notice": "Выберите поставщика услуг продажи выше. Вы можете пропустить этот экран, установив поставщика услуг продаж по умолчанию в настройках приложения.", - "selected_trocador_provider": "Выбранный провайдер Трокадора", "select_your_country": "Пожалуйста, выберите свою страну", + "selected_trocador_provider": "Выбранный провайдер Трокадора", "sell": "Продавать", "sell_alert_content": "В настоящее время мы поддерживаем только продажу биткойнов, эфириума и лайткойна. Пожалуйста, создайте или переключитесь на свой кошелек Bitcoin, Ethereum или Litecoin.", "sell_monero_com_alert_content": "Продажа Monero пока не поддерживается", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 0ac198a58..ff950f3b7 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -148,6 +148,9 @@ "close": "ปิด", "coin_control": "การควบคุมเหรียญ (ตัวเลือก)", "cold_or_recover_wallet": "เพิ่มกระเป๋าเงินแบบอ่านอย่างเดียวจาก Cupcake หรือกระเป๋าเงินเย็นหรือกู้คืนกระเป๋ากระดาษ", + "collection_address": "ที่อยู่คอลเลกชัน", + "collection_description": "คำอธิบายการรวบรวม", + "collection_name": "ชื่อคอลเลกชัน", "color_theme": "ธีมสี", "commit_transaction_amount_fee": "ยืนยันธุรกรรม\nจำนวน: ${amount}\nค่าธรรมเนียม: ${fee}", "confirm": "ยืนยัน", @@ -430,6 +433,7 @@ "methods": "วิธีการ", "min_amount": "จำนวนขั้นต่ำ: ${value}", "min_value": "ขั้นต่ำ: ${value} ${currency}", + "mint_address": "ที่อยู่มินต์", "minutes_to_pin_code": "${minute} นาที", "mm": "เดือน", "modify_2fa": "แก้ไขเค้ก 2FA", @@ -457,6 +461,7 @@ "new_wallet": "กระเป๋าใหม่", "newConnection": "การเชื่อมต่อใหม่", "no_cards_found": "ไม่พบการ์ด", + "no_extra_detail": "ไม่มีรายละเอียดเพิ่มเติม", "no_id_needed": "ไม่จำเป็นต้องใช้บัตรประชาชน!", "no_id_required": "ไม่จำเป็นต้องใช้บัตรประจำตัว ฝากเงินและใช้งานได้ทุกที่", "no_providers_available": "ไม่มีผู้ให้บริการ", @@ -675,8 +680,8 @@ "select_destination": "โปรดเลือกปลายทางสำหรับไฟล์สำรอง", "select_hw_account_below": "กรุณาเลือกบัญชีที่จะกู้คืนด้านล่าง:", "select_sell_provider_notice": "เลือกผู้ให้บริการการขายด้านบน คุณสามารถข้ามหน้าจอนี้ได้โดยการตั้งค่าผู้ให้บริการการขายเริ่มต้นในการตั้งค่าแอป", - "selected_trocador_provider": "ผู้ให้บริการ Trocador ที่เลือก", "select_your_country": "กรุณาเลือกประเทศของคุณ", + "selected_trocador_provider": "ผู้ให้บริการ Trocador ที่เลือก", "sell": "ขาย", "sell_alert_content": "ขณะนี้เรารองรับการขาย Bitcoin, Ethereum และ Litecoin เท่านั้น โปรดสร้างหรือเปลี่ยนเป็นกระเป๋าเงิน Bitcoin, Ethereum หรือ Litecoin ของคุณ", "sell_monero_com_alert_content": "ยังไม่รองรับการขาย Monero", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 6a17a4c9d..fe065080f 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -148,6 +148,9 @@ "close": "Isara", "coin_control": "Coin control (opsyonal)", "cold_or_recover_wallet": "Magdagdag ng isang basahin lamang na pitaka mula sa Cupcake o isang malamig na pitaka o mabawi ang isang wallet ng papel", + "collection_address": "Address ng koleksyon", + "collection_description": "Paglalarawan ng Koleksyon", + "collection_name": "Pangalan ng Koleksyon", "color_theme": "Color theme", "commit_transaction_amount_fee": "Gumawa ng transaksyon\nHalaga: ${amount}\nFee: ${fee}", "confirm": "Kumpirmahin", @@ -430,6 +433,7 @@ "methods": "Mga Paraan", "min_amount": "Min: ${value}", "min_value": "Min: ${value} ${currency}", + "mint_address": "Mint Address", "minutes_to_pin_code": "${minute} minuto", "mm": "MM", "modify_2fa": "Baguhin ang Cake 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Bagong Wallet", "newConnection": "Bagong Koneksyon", "no_cards_found": "Walang nahanap na mga card", + "no_extra_detail": "Walang magagamit na mga dagdag na detalye", "no_id_needed": "Hindi kailangan ng ID!", "no_id_required": "Hindi kailangan ng ID. I-top up at gumastos kahit saan", "no_providers_available": "Walang magagamit na mga nagbibigay", @@ -675,8 +680,8 @@ "select_destination": "Mangyaring piliin ang patutunguhan para sa backup na file.", "select_hw_account_below": "Mangyaring piliin kung aling account ang ibabalik sa ibaba:", "select_sell_provider_notice": "Pumili ng provider ng nagbebenta sa itaas. Maaari mong laktawan ang screen na ito sa pamamagitan ng pagtatakda ng iyong default na sell provider sa mga setting ng app.", - "selected_trocador_provider": "Napiling Trocador Provider", "select_your_country": "Mangyaring piliin ang iyong bansa", + "selected_trocador_provider": "Napiling Trocador Provider", "sell": "Ibenta", "sell_alert_content": "Kasalukuyan lamang naming sinusuportahan ang pagbebenta ng Bitcoin, Ethereum at Litecoin. Mangyaring lumikha o lumipat sa iyong Bitcoin, Ethereum o Litecoin wallet.", "sell_monero_com_alert_content": "Ang pagbebenta ng Monero ay hindi pa suportado", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 9f58e6861..9e9ac3726 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -148,6 +148,9 @@ "close": "Kapalı", "coin_control": "Koin kontrolü (isteğe bağlı)", "cold_or_recover_wallet": "Cupcake veya soğuk bir cüzdandan salt okunur bir cüzdan ekleyin veya bir kağıt cüzdanı kurtar", + "collection_address": "Toplama adresi", + "collection_description": "Koleksiyon Açıklama", + "collection_name": "Toplama adı", "color_theme": "Renk teması", "commit_transaction_amount_fee": "Transferi gerçekleştir\nMiktar: ${amount}\nKomisyon: ${fee}", "confirm": "Onayla", @@ -430,6 +433,7 @@ "methods": "Yöntemler", "min_amount": "Min: ${value}", "min_value": "En az: ${value} ${currency}", + "mint_address": "Nane adresi", "minutes_to_pin_code": "${minute} dakika", "mm": "AA", "modify_2fa": "Cake 2FA'yı Değiştirin", @@ -457,6 +461,7 @@ "new_wallet": "Yeni Cüzdan", "newConnection": "Yeni bağlantı", "no_cards_found": "Kart bulunamadı", + "no_extra_detail": "Ekstra ayrıntı yok", "no_id_needed": "Kimlik gerekmez!", "no_id_required": "Kimlik gerekmez. Para yükleyin ve istediğiniz yerde harcayın", "no_providers_available": "Sağlayıcı yok", @@ -675,8 +680,8 @@ "select_destination": "Lütfen yedekleme dosyası için hedef seçin.", "select_hw_account_below": "Lütfen aşağıda hangi hesabı geri yükleyeceğinizi seçin:", "select_sell_provider_notice": "Yukarıdan bir satış sağlayıcısı seçin. Uygulama ayarlarında varsayılan satış sağlayıcınızı ayarlayarak bu ekranı atlayabilirsiniz.", - "selected_trocador_provider": "Seçilmiş Trocador Sağlayıcı", "select_your_country": "Lütfen ülkenizi seçin", + "selected_trocador_provider": "Seçilmiş Trocador Sağlayıcı", "sell": "Satış", "sell_alert_content": "Şu anda yalnızca Bitcoin, Ethereum ve Litecoin satışını destekliyoruz. Lütfen Bitcoin, Ethereum veya Litecoin cüzdanınızı oluşturun veya cüzdanınıza geçin.", "sell_monero_com_alert_content": "Monero satışı henüz desteklenmiyor", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index af255c26a..6b321cb78 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -148,6 +148,9 @@ "close": "Закрити", "coin_control": "Контроль монет (необов’язково)", "cold_or_recover_wallet": "Додайте гаманець лише для читання від Cupcake або холодного гаманця або відновіть паперовий гаманець", + "collection_address": "Адреса колекції", + "collection_description": "Опис колекції", + "collection_name": "Назва колекції", "color_theme": "Кольорова тема", "commit_transaction_amount_fee": "Підтвердити транзакцію \nСума: ${amount}\nКомісія: ${fee}", "confirm": "Підтвердити", @@ -430,6 +433,7 @@ "methods": "методи", "min_amount": "Мінімум: ${value}", "min_value": "Мін: ${value} ${currency}", + "mint_address": "Адреса м'яти", "minutes_to_pin_code": "${minute} хвилин", "mm": "MM", "modify_2fa": "Змінити торт 2FA", @@ -457,6 +461,7 @@ "new_wallet": "Новий гаманець", "newConnection": "Нове підключення", "no_cards_found": "Карт не знайдено", + "no_extra_detail": "Немає додаткових деталей", "no_id_needed": "Ідентифікатор не потрібен!", "no_id_required": "Ідентифікатор не потрібен. Поповнюйте та витрачайте будь-де", "no_providers_available": "Немає постачальників", @@ -676,8 +681,8 @@ "select_destination": "Виберіть місце призначення для файлу резервної копії.", "select_hw_account_below": "Виберіть, який рахунок відновити нижче:", "select_sell_provider_notice": "Виберіть вище постачальника послуг продажу. Ви можете пропустити цей екран, встановивши постачальника послуг продажу за умовчанням у налаштуваннях програми.", - "selected_trocador_provider": "Вибраний постачальник Trocador", "select_your_country": "Будь ласка, виберіть свою країну", + "selected_trocador_provider": "Вибраний постачальник Trocador", "sell": "Продати", "sell_alert_content": "Наразі ми підтримуємо лише продаж Bitcoin, Ethereum і Litecoin. Створіть або перейдіть на свій гаманець Bitcoin, Ethereum або Litecoin.", "sell_monero_com_alert_content": "Продаж Monero ще не підтримується", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index cb86f8af6..3ed3f5949 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -148,6 +148,9 @@ "close": "بند کریں", "coin_control": "سکے کنٹرول (اختیاری)", "cold_or_recover_wallet": "Cupcake یا سرد بٹوے سے صرف ایک پڑھنے والا پرس شامل کریں یا کاغذ کا پرس بازیافت کریں", + "collection_address": "جمع کرنے کا پتہ", + "collection_description": "جمع کرنے کی تفصیل", + "collection_name": "جمع کرنے کا نام", "color_theme": "رنگین تھیم", "commit_transaction_amount_fee": "لین دین کا ارتکاب کریں\\nرقم: ${amount}\\nفیس: ${fee}", "confirm": "تصدیق کریں۔", @@ -430,6 +433,7 @@ "methods": "ﮯﻘﯾﺮﻃ", "min_amount": "کم سے کم: ${value}", "min_value": "کم سے کم: ${value} ${currency}", + "mint_address": "ٹکسال کا پتہ", "minutes_to_pin_code": "${minute} منٹ", "mm": "MM", "modify_2fa": "کیک 2FA میں ترمیم کریں۔", @@ -457,6 +461,7 @@ "new_wallet": "نیا پرس", "newConnection": "ﻦﺸﮑﻨﮐ ﺎﯿﻧ", "no_cards_found": "کوئی کارڈ نہیں ملا", + "no_extra_detail": "کوئی اضافی تفصیلات دستیاب نہیں ہیں", "no_id_needed": "شناخت کی ضرورت نہیں!", "no_id_required": "کوئی ID درکار نہیں۔ ٹاپ اپ اور کہیں بھی خرچ کریں۔", "no_providers_available": "کوئی فراہم کنندہ دستیاب نہیں ہے", @@ -677,8 +682,8 @@ "select_destination": "۔ﮟﯾﺮﮐ ﺏﺎﺨﺘﻧﺍ ﺎﮐ ﻝﺰﻨﻣ ﮯﯿﻟ ﮯﮐ ﻞﺋﺎﻓ ﭖﺍ ﮏﯿﺑ ﻡﺮﮐ ﮦﺍﺮﺑ", "select_hw_account_below": "براہ کرم ذیل میں کون سا اکاؤنٹ بحال کرنا ہے منتخب کریں:", "select_sell_provider_notice": "۔ﮟﯿﮨ ﮯﺘﮑﺳ ﮌﻮﮭﭼ ﻮﮐ ﻦﯾﺮﮑﺳﺍ ﺱﺍ ﺮﮐ ﮮﺩ ﺐﯿﺗﺮﺗ ﻮﮐ ﮦﺪﻨﻨﮐ ﻢﮨﺍﺮﻓ ﻞﯿﺳ ﭧﻟﺎﻔﯾﮈ ﮯﻨﭘﺍ ﮟﯿﻣ ﺕﺎﺒ", - "selected_trocador_provider": "منتخب کردہ ٹروکاڈور فراہم کنندہ", "select_your_country": "براہ کرم اپنے ملک کو منتخب کریں", + "selected_trocador_provider": "منتخب کردہ ٹروکاڈور فراہم کنندہ", "sell": "بیچنا", "sell_alert_content": "۔ﮟﯾﺮﮐ ﭻﺋﻮﺳ ﺮﭘ ﺱﺍ ﺎﯾ ﮟﯿﺋﺎﻨﺑ ﭧﯿﻟﺍﻭ Litecoin ﺎﯾ Bitcoin، Ethereum ﺎﻨﭘﺍ ﻡﺮﮐ ﮦﺍﺮﺑ ۔", "sell_monero_com_alert_content": "Monero فروخت کرنا ابھی تک تعاون یافتہ نہیں ہے۔", diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index ff547e77b..787115f44 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -146,6 +146,9 @@ "close": "Đóng", "coin_control": "Kiểm soát đồng xu (tùy chọn)", "cold_or_recover_wallet": "Thêm ví chỉ đọc từ Cupcake hoặc ví lạnh hoặc thu hồi ví giấy", + "collection_address": "Địa chỉ bộ sưu tập", + "collection_description": "Mô tả bộ sưu tập", + "collection_name": "Tên bộ sưu tập", "color_theme": "Chủ đề màu sắc", "commit_transaction_amount_fee": "Cam kết giao dịch\nSố tiền: ${amount}\nPhí: ${fee}", "confirm": "Xác nhận", @@ -429,6 +432,7 @@ "methods": "Phương pháp", "min_amount": "Tối thiểu: ${value}", "min_value": "Tối thiểu: ${value} ${currency}", + "mint_address": "Địa chỉ bạc hà", "minutes_to_pin_code": "${minute} phút", "mm": "MM", "modify_2fa": "Chỉnh sửa Cake 2FA", @@ -456,6 +460,7 @@ "new_wallet": "Ví mới", "newConnection": "Kết nối mới", "no_cards_found": "Không tìm thấy thẻ", + "no_extra_detail": "Không có thêm chi tiết có sẵn", "no_id_needed": "Không cần ID!", "no_id_required": "Không yêu cầu ID. Nạp tiền và chi tiêu ở bất kỳ đâu", "no_relay_on_domain": "Không có relay cho miền của người dùng hoặc relay không khả dụng. Vui lòng chọn một relay để sử dụng.", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index e5e94b01f..ac9f30013 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -148,6 +148,9 @@ "close": "sunmo", "coin_control": "Ìdarí owó ẹyọ (ìyàn nìyí)", "cold_or_recover_wallet": "Ṣafikun apamọwọ kika-nikan lati Cupcake tabi apamọwọ tutu tabi gba owo apamọwọ iwe kan", + "collection_address": "Adirẹsi", + "collection_description": "Ijuwe akopọ", + "collection_name": "Orukọ ikojọpọ", "color_theme": "Àwọn ààtò àwọ̀", "commit_transaction_amount_fee": "Jẹ́rìí sí àránṣẹ́\nOwó: ${amount}\nIye àfikún: ${fee}", "confirm": "Jẹ́rìísí", @@ -431,6 +434,7 @@ "methods": "Awọn ọna", "min_amount": "kò kéré ju: ${value}", "min_value": "kò gbọ́dọ̀ kéré ju ${value} ${currency}", + "mint_address": "Adirẹsi Mint", "minutes_to_pin_code": "${minute} ìṣẹ́jú", "mm": "Os", "modify_2fa": "Fi iṣiro 2FA sii Cake", @@ -458,6 +462,7 @@ "new_wallet": "Àpamọ́wọ́ títun", "newConnection": "Tuntun Asopọ", "no_cards_found": "Ko si awọn kaadi ti a rii", + "no_extra_detail": "Ko si awọn alaye afikun ti o wa", "no_id_needed": "Ẹ kò nílò àmì ìdánimọ̀!", "no_id_required": "Ẹ kò nílò àmì ìdánimọ̀. Ẹ lè fikún owó àti san níbikíbi", "no_providers_available": "Ko si awọn olupese ti o wa", @@ -676,8 +681,8 @@ "select_destination": "Jọwọ yan ibi ti o nlo fun faili afẹyinti.", "select_hw_account_below": "Jọwọ yan iru iroyin lati mu pada ni isalẹ:", "select_sell_provider_notice": "Yan olupese ti o ta loke. O le foju iboju yii nipa tito olupese iṣẹ tita aiyipada rẹ ni awọn eto app.", - "selected_trocador_provider": "olupese trocador ti a yan", "select_your_country": "Jọwọ yan orilẹ-ede rẹ", + "selected_trocador_provider": "olupese trocador ti a yan", "sell": "Tà", "sell_alert_content": "Lọwọlọwọ a ṣe atilẹyin tita Bitcoin, Ethereum ati Litecoin nikan. Jọwọ ṣẹda tabi yipada si Bitcoin, Ethereum tabi apamọwọ Litecoin rẹ.", "sell_monero_com_alert_content": "Kọ ju lọwọ Monero ko ṣe ni ibamu", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index eeba24191..1eb3e7d7a 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -148,6 +148,9 @@ "close": "关闭", "coin_control": "硬幣控制(可選)", "cold_or_recover_wallet": "从Cupcake或冷钱包中添加只读的钱包或恢复纸钱包", + "collection_address": "收集地址", + "collection_description": "集合描述", + "collection_name": "收集名称", "color_theme": "主题", "commit_transaction_amount_fee": "提交交易\n金额: ${amount}\n手续费: ${fee}", "confirm": "确认", @@ -430,6 +433,7 @@ "methods": "方法", "min_amount": "最小值: ${value}", "min_value": "最小: ${value} ${currency}", + "mint_address": "薄荷地址", "minutes_to_pin_code": "${minute} 分钟", "mm": "毫米", "modify_2fa": "修改蛋糕2FA", @@ -457,6 +461,7 @@ "new_wallet": "新钱包", "newConnection": "新连接", "no_cards_found": "找不到卡", + "no_extra_detail": "没有其他详细信息", "no_id_needed": "不需要 ID!", "no_id_required": "不需要身份证。充值并在任何地方消费", "no_providers_available": "没有提供商可用", @@ -675,8 +680,8 @@ "select_destination": "请选择备份文件的目的地。", "select_hw_account_below": "请在下面选择要还原的帐户:", "select_sell_provider_notice": "选择上面的销售提供商。您可以通过在应用程序设置中设置默认销售提供商来跳过此屏幕。", - "selected_trocador_provider": "选定的trocador提供商", "select_your_country": "请选择你的国家", + "selected_trocador_provider": "选定的trocador提供商", "sell": "卖", "sell_alert_content": "我们目前仅支持比特币、以太坊和莱特币的销售。请创建或切换到您的比特币、以太坊或莱特币钱包。", "sell_monero_com_alert_content": "尚不支持出售门罗币",