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