fetch accurate fee rates from Cake's mempool api (#1649)

* fetch accurate fee rates from mempool api * remove duplicate exception handler onError call [skip ci] * add the domain name

Omar Hatem committed Aug 26, 2024 at 20:07 UTC 518bfbe40d1a70f08e9c25b0cf957f2b30eda282
36 files changed +239 -46
cw_bitcoin/lib/electrum_wallet.dart
+61 -8
@@ -5,6 +5,7 @@ import 'dart:isolate';
5 import 'dart:math';
6
7 import 'package:bitcoin_base/bitcoin_base.dart';
8 +import 'package:shared_preferences/shared_preferences.dart';
9 import 'package:cw_core/encryption_file_utils.dart';
10 import 'package:blockchain_utils/blockchain_utils.dart';
11 import 'package:collection/collection.dart';
@@ -44,6 +45,7 @@ import 'package:mobx/mobx.dart';
45 import 'package:rxdart/subjects.dart';
46 import 'package:sp_scanner/sp_scanner.dart';
47 import 'package:hex/hex.dart';
48 +import 'package:http/http.dart' as http;
49
50 part 'electrum_wallet.g.dart';
51
@@ -101,6 +103,8 @@ abstract class ElectrumWalletBase
103 );
104
105 reaction((_) => syncStatus, _syncStatusReaction);
106 +
107 + sharedPrefs.complete(SharedPreferences.getInstance());
108 }
109
110 static Bip32Slip10Secp256k1 getAccountHDWallet(CryptoCurrency? currency, BasedUtxoNetwork network,
@@ -196,6 +200,13 @@ abstract class ElectrumWalletBase
200
201 bool _isTryingToConnect = false;
202
203 + Completer<SharedPreferences> sharedPrefs = Completer();
204 +
205 + Future<bool> checkIfMempoolAPIIsEnabled() async {
206 + bool isMempoolAPIEnabled = (await sharedPrefs.future).getBool("use_mempool_fee_api") ?? true;
207 + return isMempoolAPIEnabled;
208 + }
209 +
210 @action
211 Future<void> setSilentPaymentsScanning(bool active) async {
212 silentPaymentsScanningActive = active;
@@ -448,6 +459,20 @@ abstract class ElectrumWalletBase
459
460 @action
461 Future<void> updateFeeRates() async {
462 + if (await checkIfMempoolAPIIsEnabled()) {
463 + try {
464 + final response =
465 + await http.get(Uri.parse("http://mempool.cakewallet.com:8999/api/v1/fees/recommended"));
466 +
467 + final result = json.decode(response.body) as Map<String, num>;
468 + final slowFee = result['economyFee']?.toInt() ?? 0;
469 + final mediumFee = result['hourFee']?.toInt() ?? 0;
470 + final fastFee = result['fastestFee']?.toInt() ?? 0;
471 + _feeRates = [slowFee, mediumFee, fastFee];
472 + return;
473 + } catch (_) {}
474 + }
475 +
476 final feeRates = await electrumClient.feeRates(network: network);
477 if (feeRates != [0, 0, 0]) {
478 _feeRates = feeRates;
@@ -1455,7 +1480,6 @@ abstract class ElectrumWalletBase
1480 // Create a list of available outputs
1481 final outputs = <BitcoinOutput>[];
1482 for (final out in bundle.originalTransaction.outputs) {
1458 -
1483 // Check if the script contains OP_RETURN
1484 final script = out.scriptPubKey.script;
1485 if (script.contains('OP_RETURN') && memo == null) {
@@ -2058,13 +2082,42 @@ abstract class ElectrumWalletBase
2082 tx.inputAddresses!.isEmpty ||
2083 tx.outputAddresses == null ||
2084 tx.outputAddresses!.isEmpty) {
2061 - tx = ElectrumTransactionInfo.fromElectrumBundle(
2062 - bundle,
2063 - walletInfo.type,
2064 - network,
2065 - addresses: addressesSet,
2066 - height: tx.height,
2067 - );
2085 + List<String> inputAddresses = [];
2086 + List<String> outputAddresses = [];
2087 +
2088 + for (int i = 0; i < bundle.originalTransaction.inputs.length; i++) {
2089 + final input = bundle.originalTransaction.inputs[i];
2090 + final inputTransaction = bundle.ins[i];
2091 + final vout = input.txIndex;
2092 + final outTransaction = inputTransaction.outputs[vout];
2093 + final address = addressFromOutputScript(outTransaction.scriptPubKey, network);
2094 +
2095 + if (address.isNotEmpty) inputAddresses.add(address);
2096 + }
2097 +
2098 + for (int i = 0; i < bundle.originalTransaction.outputs.length; i++) {
2099 + final out = bundle.originalTransaction.outputs[i];
2100 + final address = addressFromOutputScript(out.scriptPubKey, network);
2101 +
2102 + if (address.isNotEmpty) outputAddresses.add(address);
2103 +
2104 + // Check if the script contains OP_RETURN
2105 + final script = out.scriptPubKey.script;
2106 + if (script.contains('OP_RETURN')) {
2107 + final index = script.indexOf('OP_RETURN');
2108 + if (index + 1 <= script.length) {
2109 + try {
2110 + final opReturnData = script[index + 1].toString();
2111 + final decodedString = utf8.decode(HEX.decode(opReturnData));
2112 + outputAddresses.add('OP_RETURN:$decodedString');
2113 + } catch (_) {
2114 + outputAddresses.add('OP_RETURN:');
2115 + }
2116 + }
2117 + }
2118 + }
2119 + tx.inputAddresses = inputAddresses;
2120 + tx.outputAddresses = outputAddresses;
2121
2122 transactionHistory.addOne(tx);
2123 }
cw_bitcoin/pubspec.lock
+62 -1
@@ -350,6 +350,11 @@ packages:
350 description: flutter
351 source: sdk
352 version: "0.0.0"
353 + flutter_web_plugins:
354 + dependency: transitive
355 + description: flutter
356 + source: sdk
357 + version: "0.0.0"
358 frontend_server_client:
359 dependency: transitive
360 description:
@@ -736,6 +741,62 @@ packages:
741 url: "https://pub.dev"
742 source: hosted
743 version: "0.27.7"
744 + shared_preferences:
745 + dependency: "direct main"
746 + description:
747 + name: shared_preferences
748 + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
749 + url: "https://pub.dev"
750 + source: hosted
751 + version: "2.2.3"
752 + shared_preferences_android:
753 + dependency: transitive
754 + description:
755 + name: shared_preferences_android
756 + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2"
757 + url: "https://pub.dev"
758 + source: hosted
759 + version: "2.2.2"
760 + shared_preferences_foundation:
761 + dependency: transitive
762 + description:
763 + name: shared_preferences_foundation
764 + sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
765 + url: "https://pub.dev"
766 + source: hosted
767 + version: "2.5.2"
768 + shared_preferences_linux:
769 + dependency: transitive
770 + description:
771 + name: shared_preferences_linux
772 + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
773 + url: "https://pub.dev"
774 + source: hosted
775 + version: "2.4.1"
776 + shared_preferences_platform_interface:
777 + dependency: transitive
778 + description:
779 + name: shared_preferences_platform_interface
780 + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
781 + url: "https://pub.dev"
782 + source: hosted
783 + version: "2.4.1"
784 + shared_preferences_web:
785 + dependency: transitive
786 + description:
787 + name: shared_preferences_web
788 + sha256: "59dc807b94d29d52ddbb1b3c0d3b9d0a67fc535a64e62a5542c8db0513fcb6c2"
789 + url: "https://pub.dev"
790 + source: hosted
791 + version: "2.4.1"
792 + shared_preferences_windows:
793 + dependency: transitive
794 + description:
795 + name: shared_preferences_windows
796 + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
797 + url: "https://pub.dev"
798 + source: hosted
799 + version: "2.4.1"
800 shelf:
801 dependency: transitive
802 description:
@@ -944,4 +1005,4 @@ packages:
1005 version: "2.2.1"
1006 sdks:
1007 dart: ">=3.3.0 <4.0.0"
947 - flutter: ">=3.16.6"
1008 + flutter: ">=3.19.0"
cw_bitcoin/pubspec.yaml
+1
@@ -17,6 +17,7 @@ dependencies:
17 mobx: ^2.0.7+4
18 flutter_mobx: ^2.0.6+1
19 intl: ^0.18.0
20 + shared_preferences: ^2.0.15
21 cw_core:
22 path: ../cw_core
23 bitbox:
cw_monero/lib/monero_wallet_service.dart
+2 -36
@@ -9,11 +9,9 @@ import 'package:cw_core/wallet_info.dart';
9 import 'package:cw_core/wallet_service.dart';
10 import 'package:cw_core/wallet_type.dart';
11 import 'package:cw_core/get_height_by_date.dart';
12 -import 'package:cw_monero/api/exceptions/wallet_opening_exception.dart';
12 import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager;
13 import 'package:cw_monero/api/wallet_manager.dart';
14 import 'package:cw_monero/monero_wallet.dart';
16 -import 'package:flutter/widgets.dart';
15 import 'package:hive/hive.dart';
16 import 'package:polyseed/polyseed.dart';
17 import 'package:monero/monero.dart' as monero;
@@ -120,7 +118,6 @@ class MoneroWalletService extends WalletService<
118
119 @override
120 Future<MoneroWallet> openWallet(String name, String password, {bool? retryOnFailure}) async {
123 - MoneroWallet? wallet;
121 try {
122 final path = await pathForWallet(name: name, type: getType());
123
@@ -147,41 +144,10 @@ class MoneroWalletService extends WalletService<
144 await wallet.init();
145
146 return wallet;
150 - } catch (e, s) {
147 + } catch (e) {
148 // TODO: Implement Exception for wallet list service.
149
153 - final bool isBadAlloc = e.toString().contains('bad_alloc') ||
154 - (e is WalletOpeningException &&
155 - (e.message == 'std::bad_alloc' || e.message.contains('bad_alloc')));
156 -
157 - final bool doesNotCorrespond = e.toString().contains('does not correspond') ||
158 - (e is WalletOpeningException && e.message.contains('does not correspond'));
159 -
160 - final bool isMissingCacheFilesIOS = e.toString().contains('basic_string') ||
161 - (e is WalletOpeningException && e.message.contains('basic_string'));
162 -
163 - final bool isMissingCacheFilesAndroid = e.toString().contains('input_stream') ||
164 - e.toString().contains('input stream error') ||
165 - (e is WalletOpeningException &&
166 - (e.message.contains('input_stream') || e.message.contains('input stream error')));
167 -
168 - final bool invalidSignature = e.toString().contains('invalid signature') ||
169 - (e is WalletOpeningException && e.message.contains('invalid signature'));
170 -
171 - final bool invalidPassword = e.toString().contains('invalid password') ||
172 - (e is WalletOpeningException && e.message.contains('invalid password'));
173 -
174 - if (!isBadAlloc &&
175 - !doesNotCorrespond &&
176 - !isMissingCacheFilesIOS &&
177 - !isMissingCacheFilesAndroid &&
178 - !invalidSignature &&
179 - !invalidPassword &&
180 - wallet != null &&
181 - wallet.onError != null) {
182 - wallet.onError!(FlutterErrorDetails(exception: e, stack: s));
183 - }
184 - if (invalidPassword || retryOnFailure == false) {
150 + if (retryOnFailure == false) {
151 rethrow;
152 }
153
lib/entities/preferences_key.dart
+1
@@ -61,6 +61,7 @@ class PreferencesKey {
61 static const useEtherscan = 'use_etherscan';
62 static const usePolygonScan = 'use_polygonscan';
63 static const useTronGrid = 'use_trongrid';
64 + static const useMempoolFeeAPI = 'use_mempool_fee_api';
65 static const defaultNanoRep = 'default_nano_representative';
66 static const defaultBananoRep = 'default_banano_representative';
67 static const lookupsTwitter = 'looks_up_twitter';
lib/src/screens/settings/privacy_page.dart
+29
@@ -6,7 +6,9 @@ import 'package:cake_wallet/src/screens/base_page.dart';
6 import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart';
7 import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
8 import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
9 +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
10 import 'package:cake_wallet/utils/device_info.dart';
11 +import 'package:cake_wallet/utils/show_pop_up.dart';
12 import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
13 import 'package:cake_wallet/view_model/settings/privacy_settings_view_model.dart';
14 import 'package:flutter/material.dart';
@@ -111,6 +113,33 @@ class PrivacyPage extends BasePage {
113 _privacySettingsViewModel.setUseTronGrid(value);
114 },
115 ),
116 + if (_privacySettingsViewModel.canUseMempoolFeeAPI)
117 + SettingsSwitcherCell(
118 + title: S.current.live_fee_rates,
119 + value: _privacySettingsViewModel.useMempoolFeeAPI,
120 + onValueChange: (BuildContext _, bool isEnabled) async {
121 + if (!isEnabled) {
122 + final bool confirmation = await showPopUp<bool>(
123 + context: context,
124 + builder: (BuildContext context) {
125 + return AlertWithTwoActions(
126 + alertTitle: S.of(context).warning,
127 + alertContent: S.of(context).disable_fee_api_warning,
128 + rightButtonText: S.of(context).confirm,
129 + leftButtonText: S.of(context).cancel,
130 + actionRightButton: () => Navigator.of(context).pop(true),
131 + actionLeftButton: () => Navigator.of(context).pop(false));
132 + }) ??
133 + false;
134 + if (confirmation) {
135 + _privacySettingsViewModel.setUseMempoolFeeAPI(isEnabled);
136 + }
137 + return;
138 + }
139 +
140 + _privacySettingsViewModel.setUseMempoolFeeAPI(isEnabled);
141 + },
142 + ),
143 SettingsCellWithArrow(
144 title: S.current.domain_looks_up,
145 handler: (context) => Navigator.of(context).pushNamed(Routes.domainLookupsPage),
lib/store/settings_store.dart
+10
@@ -101,6 +101,7 @@ abstract class SettingsStoreBase with Store {
101 required this.useEtherscan,
102 required this.usePolygonScan,
103 required this.useTronGrid,
104 + required this.useMempoolFeeAPI,
105 required this.defaultNanoRep,
106 required this.defaultBananoRep,
107 required this.lookupsTwitter,
@@ -416,6 +417,9 @@ abstract class SettingsStoreBase with Store {
417 reaction((_) => useTronGrid,
418 (bool useTronGrid) => _sharedPreferences.setBool(PreferencesKey.useTronGrid, useTronGrid));
419
420 + reaction((_) => useMempoolFeeAPI,
421 + (bool useMempoolFeeAPI) => _sharedPreferences.setBool(PreferencesKey.useMempoolFeeAPI, useMempoolFeeAPI));
422 +
423 reaction((_) => defaultNanoRep,
424 (String nanoRep) => _sharedPreferences.setString(PreferencesKey.defaultNanoRep, nanoRep));
425
@@ -707,6 +711,9 @@ abstract class SettingsStoreBase with Store {
711 @observable
712 bool useTronGrid;
713
714 + @observable
715 + bool useMempoolFeeAPI;
716 +
717 @observable
718 String defaultNanoRep;
719
@@ -892,6 +899,7 @@ abstract class SettingsStoreBase with Store {
899 final useEtherscan = sharedPreferences.getBool(PreferencesKey.useEtherscan) ?? true;
900 final usePolygonScan = sharedPreferences.getBool(PreferencesKey.usePolygonScan) ?? true;
901 final useTronGrid = sharedPreferences.getBool(PreferencesKey.useTronGrid) ?? true;
902 + final useMempoolFeeAPI = sharedPreferences.getBool(PreferencesKey.useMempoolFeeAPI) ?? true;
903 final defaultNanoRep = sharedPreferences.getString(PreferencesKey.defaultNanoRep) ?? "";
904 final defaultBananoRep = sharedPreferences.getString(PreferencesKey.defaultBananoRep) ?? "";
905 final lookupsTwitter = sharedPreferences.getBool(PreferencesKey.lookupsTwitter) ?? true;
@@ -1154,6 +1162,7 @@ abstract class SettingsStoreBase with Store {
1162 useEtherscan: useEtherscan,
1163 usePolygonScan: usePolygonScan,
1164 useTronGrid: useTronGrid,
1165 + useMempoolFeeAPI: useMempoolFeeAPI,
1166 defaultNanoRep: defaultNanoRep,
1167 defaultBananoRep: defaultBananoRep,
1168 lookupsTwitter: lookupsTwitter,
@@ -1307,6 +1316,7 @@ abstract class SettingsStoreBase with Store {
1316 useEtherscan = sharedPreferences.getBool(PreferencesKey.useEtherscan) ?? true;
1317 usePolygonScan = sharedPreferences.getBool(PreferencesKey.usePolygonScan) ?? true;
1318 useTronGrid = sharedPreferences.getBool(PreferencesKey.useTronGrid) ?? true;
1319 + useMempoolFeeAPI = sharedPreferences.getBool(PreferencesKey.useMempoolFeeAPI) ?? true;
1320 defaultNanoRep = sharedPreferences.getString(PreferencesKey.defaultNanoRep) ?? "";
1321 defaultBananoRep = sharedPreferences.getString(PreferencesKey.defaultBananoRep) ?? "";
1322 lookupsTwitter = sharedPreferences.getBool(PreferencesKey.lookupsTwitter) ?? true;
lib/utils/exception_handler.dart
+7
@@ -174,6 +174,13 @@ class ExceptionHandler {
174 "ClientException: Write failed, uri=http",
175 "Connection terminated during handshake",
176 "Corrupted wallets seeds",
177 + "bad_alloc",
178 + "does not correspond",
179 + "basic_string",
180 + "input_stream",
181 + "input stream error",
182 + "invalid signature",
183 + "invalid password",
184 ];
185
186 static Future<void> _addDeviceInfo(File file) async {
lib/view_model/settings/privacy_settings_view_model.dart
+11
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/bitcoin/bitcoin.dart';
2 import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
3 import 'package:cake_wallet/entities/exchange_api_mode.dart';
4 import 'package:cake_wallet/ethereum/ethereum.dart';
@@ -75,6 +76,9 @@ abstract class PrivacySettingsViewModelBase with Store {
76 @computed
77 bool get useTronGrid => _settingsStore.useTronGrid;
78
79 + @computed
80 + bool get useMempoolFeeAPI => _settingsStore.useMempoolFeeAPI;
81 +
82 @computed
83 bool get lookupTwitter => _settingsStore.lookupsTwitter;
84
@@ -99,6 +103,8 @@ abstract class PrivacySettingsViewModelBase with Store {
103
104 bool get canUseTronGrid => _wallet.type == WalletType.tron;
105
106 + bool get canUseMempoolFeeAPI => _wallet.type == WalletType.bitcoin;
107 +
108 @action
109 void setShouldSaveRecipientAddress(bool value) =>
110 _settingsStore.shouldSaveRecipientAddress = value;
@@ -156,4 +162,9 @@ abstract class PrivacySettingsViewModelBase with Store {
162 _settingsStore.useTronGrid = value;
163 tron!.updateTronGridUsageState(_wallet, value);
164 }
165 +
166 + @action
167 + void setUseMempoolFeeAPI(bool value) {
168 + _settingsStore.useMempoolFeeAPI = value;
169 + }
170 }
res/values/strings_ar.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "تعطيل إجراء الشراء",
209 "disable_cake_2fa": "تعطيل 2 عامل المصادقة",
210 "disable_exchange": "تعطيل التبادل",
211 + "disable_fee_api_warning": "من خلال إيقاف تشغيل هذا ، قد تكون معدلات الرسوم غير دقيقة في بعض الحالات ، لذلك قد ينتهي بك الأمر إلى دفع مبالغ زائدة أو دفع رسوم المعاملات الخاصة بك",
212 "disable_fiat": "تعطيل fiat",
213 "disable_sell": "قم بتعطيل إجراء البيع",
214 "disableBatteryOptimization": "تعطيل تحسين البطارية",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "يرجى التأكد",
357 "ledger_please_enable_bluetooth": "يرجى تمكين البلوتوث للكشف عن دفتر الأستاذ الخاص بك",
358 "light_theme": "فاتح",
359 + "live_fee_rates": "أسعار الرسوم المباشرة عبر API",
360 "load_more": "تحميل المزيد",
361 "loading_your_wallet": "يتم تحميل محفظتك",
362 "login": "تسجيل الدخول",
res/values/strings_bg.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Деактивирайте действието за покупка",
209 "disable_cake_2fa": "Деактивирайте Cake 2FA",
210 "disable_exchange": "Деактивиране на борса",
211 + "disable_fee_api_warning": "Като изключите това, таксите могат да бъдат неточни в някои случаи, така че може да се препланите или да не плащате таксите за вашите транзакции",
212 "disable_fiat": "Деактивиране на fiat",
213 "disable_sell": "Деактивирайте действието за продажба",
214 "disableBatteryOptimization": "Деактивирайте оптимизацията на батерията",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Моля, уверете се, че сте отворили правилното приложение на вашата книга",
357 "ledger_please_enable_bluetooth": "Моля, активирайте Bluetooth да открие вашата книга",
358 "light_theme": "Светло",
359 + "live_fee_rates": "Цени на таксите на живо чрез API",
360 "load_more": "Зареди още",
361 "loading_your_wallet": "Зареждане на портфейл",
362 "login": "Влизане",
res/values/strings_cs.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Zakázat akci nákupu",
209 "disable_cake_2fa": "Zakázat Cake 2FA",
210 "disable_exchange": "Zakázat směnárny",
211 + "disable_fee_api_warning": "Tímto vypnutím by sazby poplatků mohly být v některých případech nepřesné, takže byste mohli skončit přepláváním nebo nedoplatkem poplatků za vaše transakce",
212 "disable_fiat": "Zakázat fiat",
213 "disable_sell": "Zakázat akci prodeje",
214 "disableBatteryOptimization": "Zakázat optimalizaci baterie",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Ujistěte se, že se na své knize otevřete správnou aplikaci",
357 "ledger_please_enable_bluetooth": "Umožněte prosím Bluetooth detekovat vaši knihu",
358 "light_theme": "Světlý",
359 + "live_fee_rates": "Živé sazby poplatků prostřednictvím API",
360 "load_more": "Načíst další",
361 "loading_your_wallet": "Načítám peněženku",
362 "login": "Login",
res/values/strings_de.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Kaufaktion deaktivieren",
209 "disable_cake_2fa": "Cake 2FA deaktivieren",
210 "disable_exchange": "Exchange deaktivieren",
211 + "disable_fee_api_warning": "Wenn dies ausgeschaltet wird, sind die Gebührenquoten in einigen Fällen möglicherweise ungenau, sodass Sie die Gebühren für Ihre Transaktionen möglicherweise überbezahlt oder unterzahlt",
212 "disable_fiat": "Fiat deaktivieren",
213 "disable_sell": "Verkaufsaktion deaktivieren",
214 "disableBatteryOptimization": "Batterieoptimierung deaktivieren",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Bitte stellen Sie sicher, dass Sie die richtige App auf Ihrem Ledger geöffnet haben",
357 "ledger_please_enable_bluetooth": "Bitte aktivieren Sie Bluetooth um sich mit Ihren Ledger zu verbinden.",
358 "light_theme": "Hell",
359 + "live_fee_rates": "Live -Gebührenpreise über API",
360 "load_more": "Mehr laden",
361 "loading_your_wallet": "Wallet wird geladen",
362 "login": "Einloggen",
res/values/strings_en.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Disable buy action",
209 "disable_cake_2fa": "Disable Cake 2FA",
210 "disable_exchange": "Disable exchange",
211 + "disable_fee_api_warning": "By turning this off, the fee rates might be inaccurate in some cases, so you might end up overpaying or underpaying the fees for your transactions",
212 "disable_fiat": "Disable fiat",
213 "disable_sell": "Disable sell action",
214 "disableBatteryOptimization": "Disable Battery Optimization",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Please make sure you opend the right app on your ledger",
357 "ledger_please_enable_bluetooth": "Please enable Bluetooth to detect your Ledger",
358 "light_theme": "Light",
359 + "live_fee_rates": "Live fee rates via API",
360 "load_more": "Load more",
361 "loading_your_wallet": "Loading your wallet",
362 "login": "Login",
res/values/strings_es.arb
+3 -1
@@ -208,6 +208,7 @@
208 "disable_buy": "Desactivar acción de compra",
209 "disable_cake_2fa": "Desactivar pastel 2FA",
210 "disable_exchange": "Deshabilitar intercambio",
211 + "disable_fee_api_warning": "Al apagar esto, las tasas de tarifas pueden ser inexactas en algunos casos, por lo que puede terminar pagando en exceso o pagando menos las tarifas por sus transacciones",
212 "disable_fiat": "Deshabilitar fiat",
213 "disable_sell": "Desactivar acción de venta",
214 "disableBatteryOptimization": "Deshabilitar la optimización de la batería",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Por favor, asegúrese de abrir la aplicación correcta en su libro mayor.",
357 "ledger_please_enable_bluetooth": "Habilite Bluetooth para detectar su libro mayor",
358 "light_theme": "Ligera",
359 + "live_fee_rates": "Tasas de tarifas en vivo a través de API",
360 "load_more": "Carga más",
361 "loading_your_wallet": "Cargando tu billetera",
362 "login": "Iniciar sesión",
@@ -895,4 +897,4 @@
897 "you_will_get": "Convertir a",
898 "you_will_send": "Convertir de",
899 "yy": "YY"
898 -}
900 +}
\ No newline at end of file
res/values/strings_fr.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Désactiver l'action d'achat",
209 "disable_cake_2fa": "Désactiver Cake 2FA",
210 "disable_exchange": "Désactiver l'échange",
211 + "disable_fee_api_warning": "En désactivant cela, les taux de frais peuvent être inexacts dans certains cas, vous pourriez donc finir par payer trop ou sous-paiement les frais pour vos transactions",
212 "disable_fiat": "Désactiver les montants en fiat",
213 "disable_sell": "Désactiver l'action de vente",
214 "disableBatteryOptimization": "Désactiver l'optimisation de la batterie",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Veuillez vous assurer d'ouvrir la bonne application sur votre grand livre",
357 "ledger_please_enable_bluetooth": "Veuillez activer Bluetooth pour détecter votre grand livre",
358 "light_theme": "Clair",
359 + "live_fee_rates": "Taux de frais en direct via l'API",
360 "load_more": "Charger plus",
361 "loading_your_wallet": "Chargement de votre portefeuille (wallet)",
362 "login": "Utilisateur",
res/values/strings_ha.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Kashe alama",
209 "disable_cake_2fa": "Musaki Cake 2FA",
210 "disable_exchange": "Kashe musanya",
211 + "disable_fee_api_warning": "Ta hanyar juya wannan kashe, kudaden da zai iya zama ba daidai ba a wasu halaye, saboda haka zaku iya ƙare da overpaying ko a ƙarƙashin kudaden don ma'amaloli",
212 "disable_fiat": "Dakatar da fiat",
213 "disable_sell": "Kashe karbuwa",
214 "disableBatteryOptimization": "Kashe ingantawa baturi",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Da fatan za a tabbata kun yi amfani da app ɗin dama akan dillalarku",
357 "ledger_please_enable_bluetooth": "Da fatan za a kunna Bluetooth don gano Ledger ɗinku",
358 "light_theme": "Haske",
359 + "live_fee_rates": "Kudin Kiɗa ta API",
360 "load_more": "Like more",
361 "loading_your_wallet": "Ana loda walat ɗin ku",
362 "login": "Shiga",
res/values/strings_hi.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "खरीद कार्रवाई अक्षम करें",
209 "disable_cake_2fa": "केक 2FA अक्षम करें",
210 "disable_exchange": "एक्सचेंज अक्षम करें",
211 + "disable_fee_api_warning": "इसे बंद करने से, कुछ मामलों में शुल्क दरें गलत हो सकती हैं, इसलिए आप अपने लेनदेन के लिए फीस को कम कर सकते हैं या कम कर सकते हैं",
212 "disable_fiat": "िएट को अक्षम करें",
213 "disable_sell": "बेचने की कार्रवाई अक्षम करें",
214 "disableBatteryOptimization": "बैटरी अनुकूलन अक्षम करें",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "कृपया सुनिश्चित करें कि आप अपने लेजर पर सही ऐप को खोलते हैं",
357 "ledger_please_enable_bluetooth": "कृपया अपने बहीखाने का पता लगाने के लिए ब्लूटूथ को सक्षम करें",
358 "light_theme": "रोशनी",
359 + "live_fee_rates": "एपीआई के माध्यम से लाइव शुल्क दरें",
360 "load_more": "और लोड करें",
361 "loading_your_wallet": "अपना बटुआ लोड कर रहा है",
362 "login": "लॉग इन करें",
res/values/strings_hr.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Onemogući kupnju",
209 "disable_cake_2fa": "Onemogući Cake 2FA",
210 "disable_exchange": "Onemogući exchange",
211 + "disable_fee_api_warning": "Isključivanjem ovoga, stope naknade u nekim bi slučajevima mogle biti netočne, tako da biste mogli preplatiti ili predati naknadu za vaše transakcije",
212 "disable_fiat": "Isključi, fiat",
213 "disable_sell": "Onemogući akciju prodaje",
214 "disableBatteryOptimization": "Onemogući optimizaciju baterije",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Obavezno obavezno otvorite pravu aplikaciju na knjizi",
357 "ledger_please_enable_bluetooth": "Omogućite Bluetooth da otkrije svoju knjigu",
358 "light_theme": "Svijetla",
359 + "live_fee_rates": "Stope naknada uživo putem API -ja",
360 "load_more": "Učitaj više",
361 "loading_your_wallet": "Novčanik se učitava",
362 "login": "Prijava",
res/values/strings_hy.arb
+2
@@ -207,6 +207,7 @@
207 "disable_buy": "Անջատել գնում գործողությունը",
208 "disable_cake_2fa": "Անջատել Cake 2FA",
209 "disable_exchange": "Անջատել փոխանակումը",
210 + "disable_fee_api_warning": "Դրանից անջատելով, վճարների տեմպերը որոշ դեպքերում կարող են անճիշտ լինել, այնպես որ դուք կարող եք վերջ տալ ձեր գործարքների համար վճարների գերավճարների կամ գերավճարների վրա",
211 "disable_fiat": "Անջատել ֆիատ",
212 "disable_sell": "Անջատել վաճառք գործողությունը",
213 "disableBatteryOptimization": "Անջատել մարտկոցի օպտիմիզացիան",
@@ -354,6 +355,7 @@
355 "ledger_error_wrong_app": "Խնդրում ենք համոզվել, որ դուք բացել եք ճիշտ ծրագիրը ձեր Ledger-ում",
356 "ledger_please_enable_bluetooth": "Խնդրում ենք միացնել Bluetooth-ը ձեր Ledger-ը հայտնաբերելու համար",
357 "light_theme": "Լուսավոր",
358 + "live_fee_rates": "Ապակի վարձավճարներ API- ի միջոցով",
359 "load_more": "Բեռնել ավելին",
360 "loading_your_wallet": "Ձեր հաշվեհամարը բեռնում է",
361 "login": "Մուտք",
res/values/strings_id.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Nonaktifkan tindakan beli",
209 "disable_cake_2fa": "Nonaktifkan Kue 2FA",
210 "disable_exchange": "Nonaktifkan pertukaran",
211 + "disable_fee_api_warning": "Dengan mematikan ini, tarif biaya mungkin tidak akurat dalam beberapa kasus, jadi Anda mungkin akan membayar lebih atau membayar biaya untuk transaksi Anda",
212 "disable_fiat": "Nonaktifkan fiat",
213 "disable_sell": "Nonaktifkan aksi jual",
214 "disableBatteryOptimization": "Nonaktifkan optimasi baterai",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Pastikan Anda membuka aplikasi yang tepat di buku besar Anda",
357 "ledger_please_enable_bluetooth": "Harap aktifkan Bluetooth untuk mendeteksi buku besar Anda",
358 "light_theme": "Terang",
359 + "live_fee_rates": "Tarif biaya langsung melalui API",
360 "load_more": "Muat lebih banyak",
361 "loading_your_wallet": "Memuat dompet Anda",
362 "login": "Masuk",
res/values/strings_it.arb
+2
@@ -209,6 +209,7 @@
209 "disable_buy": "Disabilita l'azione di acquisto",
210 "disable_cake_2fa": "Disabilita Cake 2FA",
211 "disable_exchange": "Disabilita scambio",
212 + "disable_fee_api_warning": "Disattivando questo, i tassi delle commissioni potrebbero essere inaccurati in alcuni casi, quindi potresti finire in eccesso o sostenere le commissioni per le transazioni",
213 "disable_fiat": "Disabilita fiat",
214 "disable_sell": "Disabilita l'azione di vendita",
215 "disableBatteryOptimization": "Disabilita l'ottimizzazione della batteria",
@@ -356,6 +357,7 @@
357 "ledger_error_wrong_app": "Assicurati di aprire l'app giusta sul libro mastro",
358 "ledger_please_enable_bluetooth": "Si prega di consentire al Bluetooth di rilevare il libro mastro",
359 "light_theme": "Bianco",
360 + "live_fee_rates": "Tariffe delle commissioni dal vivo tramite API",
361 "load_more": "Carica di più",
362 "loading_your_wallet": "Caricamento portafoglio",
363 "login": "Accedi",
res/values/strings_ja.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "購入アクションを無効にする",
209 "disable_cake_2fa": "Cake 2FA を無効にする",
210 "disable_exchange": "交換を無効にする",
211 + "disable_fee_api_warning": "これをオフにすることで、料金金利は場合によっては不正確になる可能性があるため、取引の費用が過払いまたは不足している可能性があります",
212 "disable_fiat": "フィアットを無効にする",
213 "disable_sell": "販売アクションを無効にする",
214 "disableBatteryOptimization": "バッテリーの最適化を無効にします",
@@ -356,6 +357,7 @@
357 "ledger_error_wrong_app": "元帳に適切なアプリを開始するようにしてください",
358 "ledger_please_enable_bluetooth": "Bluetoothが元帳を検出できるようにしてください",
359 "light_theme": "光",
360 + "live_fee_rates": "API経由のライブ料金",
361 "load_more": "もっと読み込む",
362 "loading_your_wallet": "ウォレットをロードしています",
363 "login": "ログイン",
res/values/strings_ko.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "구매 행동 비활성화",
209 "disable_cake_2fa": "케이크 2FA 비활성화",
210 "disable_exchange": "교환 비활성화",
211 + "disable_fee_api_warning": "이것을 끄면 경우에 따라 수수료가 부정확 할 수 있으므로 거래 수수료를 초과 지불하거나 지불 할 수 있습니다.",
212 "disable_fiat": "법정화폐 비활성화",
213 "disable_sell": "판매 조치 비활성화",
214 "disableBatteryOptimization": "배터리 최적화를 비활성화합니다",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "원장에서 올바른 앱을 반대하는지 확인하십시오.",
357 "ledger_please_enable_bluetooth": "Bluetooth가 원장을 감지 할 수 있도록하십시오",
358 "light_theme": "빛",
359 + "live_fee_rates": "API를 통한 라이브 요금 요금",
360 "load_more": "더로드하십시오",
361 "loading_your_wallet": "지갑 넣기",
362 "login": "로그인",
res/values/strings_my.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "ဝယ်ယူမှု လုပ်ဆောင်ချက်ကို ပိတ်ပါ။",
209 "disable_cake_2fa": "ကိတ်မုန့် 2FA ကို ပိတ်ပါ။",
210 "disable_exchange": "လဲလှယ်မှုကို ပိတ်ပါ။",
211 + "disable_fee_api_warning": "ဤအရာကိုဖွင့်ခြင်းအားဖြင့်အချို့သောကိစ္စရပ်များတွင်အခကြေးငွေနှုန်းထားများသည်တိကျမှုရှိနိုင်သည်,",
212 "disable_fiat": "Fiat ကိုပိတ်ပါ။",
213 "disable_sell": "ရောင်းချခြင်းလုပ်ဆောင်ချက်ကို ပိတ်ပါ။",
214 "disableBatteryOptimization": "ဘက်ထရီ optimization ကိုပိတ်ပါ",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "ကျေးဇူးပြု. သင့်လက်ျာအက်ပ်ကိုသင်၏ Ledger တွင်ဖွင့်ရန်သေချာစေပါ",
357 "ledger_please_enable_bluetooth": "သင်၏ Ledger ကိုရှာဖွေရန် Bluetooth ကိုဖွင့်ပါ",
358 "light_theme": "အလင်း",
359 + "live_fee_rates": "API မှတစ်ဆင့် Live အခကြေးငွေနှုန်းထားများ",
360 "load_more": "ပိုပြီး load",
361 "loading_your_wallet": "သင့်ပိုက်ဆံအိတ်ကို ဖွင့်နေသည်။",
362 "login": "လော့ဂ်အင်",
res/values/strings_nl.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Koopactie uitschakelen",
209 "disable_cake_2fa": "Taart 2FA uitschakelen",
210 "disable_exchange": "Uitwisseling uitschakelen",
211 + "disable_fee_api_warning": "Door dit uit te schakelen, kunnen de tarieven in sommige gevallen onnauwkeurig zijn, dus u kunt de vergoedingen voor uw transacties te veel betalen of te weinig betalen",
212 "disable_fiat": "Schakel Fiat uit",
213 "disable_sell": "Verkoopactie uitschakelen",
214 "disableBatteryOptimization": "Schakel de batterijoptimalisatie uit",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Zorg ervoor dat u de juiste app op uw grootboek opent",
357 "ledger_please_enable_bluetooth": "Schakel Bluetooth in staat om uw grootboek te detecteren",
358 "light_theme": "Licht",
359 + "live_fee_rates": "Live -tarieven via API",
360 "load_more": "Meer laden",
361 "loading_your_wallet": "Uw portemonnee laden",
362 "login": "Log in",
res/values/strings_pl.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Wyłącz akcję kupna",
209 "disable_cake_2fa": "Wyłącz Cake 2FA",
210 "disable_exchange": "Wyłącz wymianę",
211 + "disable_fee_api_warning": "Wyłączając to, stawki opłaty mogą być w niektórych przypadkach niedokładne, więc możesz skończyć się przepłaceniem lub wynagrodzeniem opłat za transakcje",
212 "disable_fiat": "Wyłącz waluty FIAT",
213 "disable_sell": "Wyłącz akcję sprzedaży",
214 "disableBatteryOptimization": "Wyłącz optymalizację baterii",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Upewnij się, że opisz odpowiednią aplikację na swojej księdze",
357 "ledger_please_enable_bluetooth": "Włącz Bluetooth wykrywanie księgi",
358 "light_theme": "Jasny",
359 + "live_fee_rates": "Stawki opłaty na żywo za pośrednictwem API",
360 "load_more": "Załaduj więcej",
361 "loading_your_wallet": "Ładowanie portfela",
362 "login": "Login",
res/values/strings_pt.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Desativar ação de compra",
209 "disable_cake_2fa": "Desabilitar o Cake 2FA",
210 "disable_exchange": "Desativar troca",
211 + "disable_fee_api_warning": "Ao desativar isso, as taxas de taxas podem ser imprecisas em alguns casos, para que você possa acabar pagando demais ou pagando as taxas por suas transações",
212 "disable_fiat": "Desativar fiat",
213 "disable_sell": "Desativar ação de venda",
214 "disableBatteryOptimization": "Desative a otimização da bateria",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Por favor, certifique -se de optar pelo aplicativo certo no seu livro",
357 "ledger_please_enable_bluetooth": "Ative o Bluetooth para detectar seu livro",
358 "light_theme": "Luz",
359 + "live_fee_rates": "Taxas de taxas ao vivo via API",
360 "load_more": "Carregue mais",
361 "loading_your_wallet": "Abrindo sua carteira",
362 "login": "Login",
res/values/strings_ru.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Отключить действие покупки",
209 "disable_cake_2fa": "Отключить торт 2FA",
210 "disable_exchange": "Отключить обмен",
211 + "disable_fee_api_warning": "Выключив это, в некоторых случаях ставки платы могут быть неточными, так что вы можете в конечном итоге переплачивать или недоплачивать сборы за ваши транзакции",
212 "disable_fiat": "Отключить фиат",
213 "disable_sell": "Отключить действие продажи",
214 "disableBatteryOptimization": "Отключить оптимизацию батареи",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Пожалуйста, убедитесь, что вы предлагаете правильное приложение в своей бухгалтерской книге",
357 "ledger_please_enable_bluetooth": "Пожалуйста, включите Bluetooth обнаружить вашу бухгалтерскую книгу",
358 "light_theme": "Светлая",
359 + "live_fee_rates": "Ставки по сбору вживую через API",
360 "load_more": "Загрузи больше",
361 "loading_your_wallet": "Загрузка кошелька",
362 "login": "Логин",
res/values/strings_th.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "ปิดการใช้งานการซื้อ",
209 "disable_cake_2fa": "ปิดการใช้งานเค้ก 2FA",
210 "disable_exchange": "ปิดใช้งานการแลกเปลี่ยน",
211 + "disable_fee_api_warning": "โดยการปิดสิ่งนี้อัตราค่าธรรมเนียมอาจไม่ถูกต้องในบางกรณีดังนั้นคุณอาจจบลงด้วยการจ่ายเงินมากเกินไปหรือจ่ายค่าธรรมเนียมสำหรับการทำธุรกรรมของคุณมากเกินไป",
212 "disable_fiat": "ปิดใช้งานสกุลเงินตรา",
213 "disable_sell": "ปิดการใช้งานการขาย",
214 "disableBatteryOptimization": "ปิดใช้งานการเพิ่มประสิทธิภาพแบตเตอรี่",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "โปรดตรวจสอบให้แน่ใจว่าคุณเปิดแอพที่เหมาะสมในบัญชีแยกประเภทของคุณ",
357 "ledger_please_enable_bluetooth": "โปรดเปิดใช้งานบลูทู ธ ในการตรวจจับบัญชีแยกประเภทของคุณ",
358 "light_theme": "สว่าง",
359 + "live_fee_rates": "อัตราค่าธรรมเนียมสดผ่าน API",
360 "load_more": "โหลดมากขึ้น",
361 "loading_your_wallet": "กำลังโหลดกระเป๋าของคุณ",
362 "login": "เข้าสู่ระบบ",
res/values/strings_tl.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Huwag paganahin ang pagkilos ng pagbili",
209 "disable_cake_2fa": "Huwag paganahin ang Cake 2FA",
210 "disable_exchange": "Huwag paganahin ang palitan",
211 + "disable_fee_api_warning": "Sa pamamagitan ng pag -off nito, ang mga rate ng bayad ay maaaring hindi tumpak sa ilang mga kaso, kaya maaari mong tapusin ang labis na bayad o pagsuporta sa mga bayarin para sa iyong mga transaksyon",
212 "disable_fiat": "Huwag paganahin ang fiat",
213 "disable_sell": "Huwag paganahin ang pagkilos ng pagbebenta",
214 "disableBatteryOptimization": "Huwag Paganahin ang Pag-optimize ng Baterya",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Mangyaring tiyaking pinipili mo ang tamang app sa iyong Ledger",
357 "ledger_please_enable_bluetooth": "Mangyaring paganahin ang Bluetooth upang makita ang iyong Ledger",
358 "light_theme": "Light",
359 + "live_fee_rates": "Mga rate ng live na bayad sa pamamagitan ng API",
360 "load_more": "Mag-load pa",
361 "loading_your_wallet": "Naglo-load ng iyong wallet",
362 "login": "Mag-login",
res/values/strings_tr.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Satın alma işlemini devre dışı bırak",
209 "disable_cake_2fa": "Cake 2FA'yı Devre Dışı Bırak",
210 "disable_exchange": "Borsayı devre dışı bırak",
211 + "disable_fee_api_warning": "Bunu kapatarak, ücret oranları bazı durumlarda yanlış olabilir, bu nedenle işlemleriniz için ücretleri fazla ödeyebilir veya az ödeyebilirsiniz.",
212 "disable_fiat": "İtibari paraları devre dışı bırak",
213 "disable_sell": "Satış işlemini devre dışı bırak",
214 "disableBatteryOptimization": "Pil optimizasyonunu devre dışı bırakın",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Lütfen defterinizde doğru uygulamayı açtığınızdan emin olun",
357 "ledger_please_enable_bluetooth": "Defterinizi algılamak için lütfen Bluetooth'u etkinleştirin",
358 "light_theme": "Aydınlık",
359 + "live_fee_rates": "API üzerinden canlı ücret oranları",
360 "load_more": "Daha fazla yükle",
361 "loading_your_wallet": "Cüzdanın yükleniyor",
362 "login": "Login",
res/values/strings_uk.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Вимкнути дію покупки",
209 "disable_cake_2fa": "Вимкнути Cake 2FA",
210 "disable_exchange": "Вимкнути exchange",
211 + "disable_fee_api_warning": "Вимкнувши це, ставки плати в деяких випадках можуть бути неточними, тому ви можете переплатити або недооплатити плату за свої транзакції",
212 "disable_fiat": "Вимкнути фиат",
213 "disable_sell": "Вимкнути дію продажу",
214 "disableBatteryOptimization": "Вимкнути оптимізацію акумулятора",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "Будь ласка, переконайтеся, що ви відкриваєте потрібну програму на своїй книзі",
357 "ledger_please_enable_bluetooth": "Будь ласка, ввімкніть Bluetooth виявити свою книгу",
358 "light_theme": "Світла",
359 + "live_fee_rates": "Ставки плати за живий через API",
360 "load_more": "Завантажити ще",
361 "loading_your_wallet": "Завантаження гаманця",
362 "login": "Логін",
res/values/strings_ur.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "خرید ایکشن کو غیر فعال کریں۔",
209 "disable_cake_2fa": "کیک 2FA کو غیر فعال کریں۔",
210 "disable_exchange": "تبادلے کو غیر فعال کریں۔",
211 + "disable_fee_api_warning": "اس کو بند کرنے سے ، کچھ معاملات میں فیس کی شرح غلط ہوسکتی ہے ، لہذا آپ اپنے لین دین کے لئے فیسوں کو زیادہ ادائیگی یا ادائیگی ختم کرسکتے ہیں۔",
212 "disable_fiat": "فیاٹ کو غیر فعال کریں۔",
213 "disable_sell": "فروخت کی کارروائی کو غیر فعال کریں۔",
214 "disableBatteryOptimization": "بیٹری کی اصلاح کو غیر فعال کریں",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "براہ کرم یقینی بنائیں کہ آپ اپنے لیجر پر صحیح ایپ کو کھولتے ہیں",
357 "ledger_please_enable_bluetooth": "براہ کرم بلوٹوتھ کو اپنے لیجر کا پتہ لگانے کے لئے اہل بنائیں",
358 "light_theme": "روشنی",
359 + "live_fee_rates": "API کے ذریعے براہ راست فیس کی شرح",
360 "load_more": "مزید لوڈ کریں",
361 "loading_your_wallet": "آپ کا بٹوہ لوڈ ہو رہا ہے۔",
362 "login": "لاگ ان کریں",
res/values/strings_yo.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "Ko iṣọrọ ọja",
209 "disable_cake_2fa": "Ko 2FA Cake sii",
210 "disable_exchange": "Pa ilé pàṣípààrọ̀",
211 + "disable_fee_api_warning": "Nipa yiyi eyi kuro, awọn oṣuwọn owo naa le jẹ aiṣe deede ni awọn ọrọ kan, nitorinaa o le pari apọju tabi awọn idiyele ti o ni agbara fun awọn iṣowo rẹ",
212 "disable_fiat": "Pa owó tí ìjọba pàṣẹ wa lò",
213 "disable_sell": "Ko iṣọrọ iṣọrọ",
214 "disableBatteryOptimization": "Mu Ifasi batiri",
@@ -356,6 +357,7 @@
357 "ledger_error_wrong_app": "Jọwọ rii daju pe iwọ yoo sọ app ti o tọ loju omi rẹ",
358 "ledger_please_enable_bluetooth": "Jọwọ jẹ ki Bluetooth lati rii iṣupọ rẹ",
359 "light_theme": "Funfun bí eérú",
360 + "live_fee_rates": "Awọn oṣuwọn Owo laaye laaye nipasẹ API",
361 "load_more": "Ẹru diẹ sii",
362 "loading_your_wallet": "A ń ṣí àpamọ́wọ́ yín",
363 "login": "Orúkọ",
res/values/strings_zh.arb
+2
@@ -208,6 +208,7 @@
208 "disable_buy": "禁用购买操作",
209 "disable_cake_2fa": "禁用蛋糕 2FA",
210 "disable_exchange": "禁用交换",
211 + "disable_fee_api_warning": "通过将其关闭,在某些情况下,收费率可能不准确,因此您最终可能会超额付款或支付交易费用",
212 "disable_fiat": "禁用法令",
213 "disable_sell": "禁用卖出操作",
214 "disableBatteryOptimization": "禁用电池优化",
@@ -355,6 +356,7 @@
356 "ledger_error_wrong_app": "请确保您在分类帐中操作正确的应用程序",
357 "ledger_please_enable_bluetooth": "请启用蓝牙来检测您的分类帐",
358 "light_theme": "艳丽",
359 + "live_fee_rates": "通过API的实时费率",
360 "load_more": "装载更多",
361 "loading_your_wallet": "加载您的钱包",
362 "login": "登录",