diff --git a/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt index 8064273ab8..e35089b9e9 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt @@ -1,6 +1,7 @@ package com.tangem.tap.di.domain import com.tangem.domain.promo.* +import com.tangem.domain.settings.repositories.SettingsRepository import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -33,7 +34,10 @@ internal object PromoDomainModule { @Provides @Singleton - fun provideGetStoryContentUseCase(promoRepository: PromoRepository): GetStoryContentUseCase { - return GetStoryContentUseCase(promoRepository) + fun provideGetStoryContentUseCase( + promoRepository: PromoRepository, + settingsRepository: SettingsRepository, + ): GetStoryContentUseCase { + return GetStoryContentUseCase(promoRepository, settingsRepository) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeModel.kt b/app/src/main/java/com/tangem/tap/features/home/HomeModel.kt index 58f8a67687..91c45b832a 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeModel.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeModel.kt @@ -17,6 +17,8 @@ import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.domain.settings.usercountry.GetUserCountryUseCase +import com.tangem.domain.settings.usercountry.models.UserCountry import com.tangem.domain.tokens.TokensAction import com.tangem.domain.wallets.builder.UserWalletBuilder import com.tangem.domain.wallets.usecase.SaveWalletUseCase @@ -24,6 +26,7 @@ import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter import com.tangem.tap.common.analytics.events.IntroductionProcess import com.tangem.tap.common.analytics.events.Shop import com.tangem.tap.common.extensions.dispatchNavigationAction +import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.features.home.redux.HIDE_PROGRESS_DELAY @@ -33,8 +36,10 @@ import com.tangem.tap.store import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber +import java.util.Locale import javax.inject.Inject @Suppress("LongParameterList") @@ -44,6 +49,7 @@ internal class HomeModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, private val scanCardProcessor: ScanCardProcessor, private val saveWalletUseCase: SaveWalletUseCase, + private val getUserCountryUseCase: GetUserCountryUseCase, private val cardSdkConfigRepository: CardSdkConfigRepository, private val settingsRepository: SettingsRepository, private val urlOpener: UrlOpener, @@ -53,6 +59,18 @@ internal class HomeModel @Inject constructor( private val tangemErrorHandler = TangemTangemErrorsHandler(store) + init { + getUserCountryUseCase.invoke() + .distinctUntilChanged() + .filterNotNull() + .onEach { + val userCountry = it.getOrNull() ?: UserCountry.Other(Locale.getDefault().country) + store.dispatchOnMain(HomeAction.UserCountryLoaded(userCountry)) + } + .flowOn(dispatchers.io) + .launchIn(modelScope) + } + fun onScanClick() { analyticsEventHandler.send(IntroductionProcess.ButtonScanCard()) scanCard() diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt index 05ba17df63..9a449e938e 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.home.redux +import com.tangem.domain.settings.usercountry.models.UserCountry import kotlinx.coroutines.CoroutineScope import org.rekotlin.Action @@ -15,4 +16,6 @@ sealed class HomeAction : Action { data class ReadCard(val scope: CoroutineScope) : HomeAction() data class ScanInProgress(val scanInProgress: Boolean) : HomeAction() + + data class UserCountryLoaded(val userCountry: UserCountry) : HomeAction() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeReducer.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeReducer.kt index ab41e3d89f..678de45d76 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeReducer.kt @@ -1,6 +1,8 @@ package com.tangem.tap.features.home.redux +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.tap.common.redux.AppState +import kotlinx.collections.immutable.toImmutableList import org.rekotlin.Action object HomeReducer { @@ -14,6 +16,16 @@ private fun internalReduce(action: Action, appState: AppState): HomeState { is HomeAction.ScanInProgress -> { appState.homeState.copy(scanInProgress = action.scanInProgress) } + is HomeAction.UserCountryLoaded -> { + val stories = if (action.userCountry.needApplyFCARestrictions()) { + getRestrictedStories() + } else { + Stories.entries + } + appState.homeState.copy( + stories = stories.toImmutableList(), + ) + } else -> appState.homeState } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeState.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeState.kt index 89d3c728a6..b1d45779ba 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeState.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeState.kt @@ -7,7 +7,7 @@ import org.rekotlin.StateType // todo refactor [REDACTED_TASK_KEY] data class HomeState( val scanInProgress: Boolean = false, - val stories: ImmutableList = Stories.entries.toImmutableList(), + val stories: ImmutableList = getRestrictedStories().toImmutableList(), ) : StateType { val firstStory: Stories get() = stories[0] @@ -22,4 +22,11 @@ enum class Stories(val duration: Int = 6000) { Currencies, Web3, WalletForEveryone, +} + +/** + * For FCA restriction stories + */ +fun getRestrictedStories(): List { + return Stories.entries.filterNot { it == Stories.Currencies } } \ No newline at end of file diff --git a/core/res/src/main/res/values-de/strings-blockchain.xml b/core/res/src/main/res/values-de/strings-blockchain.xml deleted file mode 100644 index adea1fc8ea..0000000000 --- a/core/res/src/main/res/values-de/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - Standard - Altbestand - Erhalt der Gebühr fehlgeschlagen - Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren. - Nicht genug Geld für die Transaktion. Bitte lade dein Konto auf. - Es ist ein Fehler aufgetreten. Code: %s. - Um das %1$s -Netzwerk nutzen zu können, must du die Kontoreserve ( %2$s %3$s ) bezahlen, die diesen Betrag auf unbestimmte Zeit sperrt und verbirgt - Das Zielkonto ist nicht aktiv. Sende %s oder mehr, um das Konto zu aktivieren. - Senden Sie Geld an diese Andresse um ein Konto zu erstellen - Minimaler Betrag ist %s - Die Veränderung ist zu gering - Falsche Gebühr - Mindestguthaben ist %s - Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %s + Gebühr oder mehr sein - Unbekannter Fehler - Der Betrag geht über die Bilanz hinaus - Ungültiger Betrag - Die Gebühr geht über die Bilanz hinaus - Der Gesamtbetrag geht über die Bilanz hinaus - Nein, alles senden - Um %s XTZ reduziert - Damit Sie beim nächsten Aufladen Ihrer Brieftasche keine erhöhte Provision zahlen, soll der Betrag um %s XTZ reduziert werden - diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index b7a04e5add..aabccb9ff7 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -21,6 +21,8 @@ Token anlegen Token verwalten Sende nur %1$s ( %2$s ) vom %3$s -Netzwerk an diese Adresse. Die Verwendung anderer Token und Netzwerke kann zum Verlust von Geldern führen. + Standard + Altbestand So scannt man Hilfe anfordern Erneut versuchen @@ -83,6 +85,7 @@ Cardano-Transaktionsanforderungen Um eine %1$s Transaktion durchzuführen, musst du einen gewissen ADA-Betrag einzahlen, um die Netzwerkgebühr und den ADA-Mindestwert zu decken (5 ADA werden empfohlen). Nicht genügend ADA für die Tokenübertrag + Betrag absenden, die Änderung darf nicht unter 1 ADA liegen Du musst einige ADA verwalten, weil du einige Token auf der Cardano-Blockchain besitzt Nicht genug ADA Akzeptieren @@ -100,6 +103,7 @@ Saldo biometrische Authentifizierung biometrische Daten + Transaktion fehlgeschlagen Kaufen Gehe zu %1$s D hast keinen Zugang zur Kamera erteilt, bitte passe deine Datenschutzeinstellungen an @@ -110,6 +114,8 @@ Stakingbelohnungen beanspruchen Schließen Bestätigen + Kontakt zum Tangem-Support + Kontakt zum Visa-Support Weiter Kopieren Adresse kopieren @@ -135,6 +141,7 @@ Erkunden Transaktionsverlauf einsehen Explorer + Erhalt der Gebühr fehlgeschlagen Netzwerkgebühren sind Gebühren, die Nutzer für die Verarbeitung und Bestätigung von Transaktionen zahlen. Die Höhe der Gebühren kann von der Überlastung des Netzes, der Größe der Transaktion und der Ausführungspriorität abhängen. %s Schnell Markt @@ -156,6 +163,7 @@ Netzgebühr Der überwiesene Betrag wird um %1$s (%2$s) gekürzt, um die gewählte Gebührenhöhe zu decken. Weiter + NFT Nein Keine Adresse Jetzt @@ -178,10 +186,12 @@ Suchen Token suchen sek. + Alles einblenden Seed phrase Aktion auswählen Verkaufen Senden + Absenden der Transaktion fehlgeschlagen Der Server ist nicht verfügbar. Bitte versuche es später erneut. Teilen Link teilen @@ -205,6 +215,7 @@ Es ist ein Fehler aufgetreten. Bitte versuche es erneut. Nicht erreichbar Staking beenden + Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren. woche mit Ja @@ -261,6 +272,7 @@ Überprüfe deine Internetverbindung oder wechseln zu einem anderen Netzwerk Nutzungsbedingungen Du hast eine Karte oder Ring aus einer anderen Wallet verwendet. Tippe auf die Karte oder Ring, die dieser Wallet zugeordnet ist. + Nicht genug Geld für die Transaktion. Bitte lade dein Konto auf. Meine Token Du hast noch keine Token hinzugefügt. Füge Token über den Markt zum Tausch hinzu Kann nicht gegen %s ausgetauscht werden @@ -298,6 +310,7 @@ Einzahlung wird erwartet Warten auf Einzahlung... Rückerstattet + Rückerstattung An dich gesendet wird an dich versendet... Gesendet @@ -340,6 +353,9 @@ Feedback zu Tangem Eine Transaktion kann nicht gesendet werden Fehler in der Coinbeschreibung + Es ist ein Fehler aufgetreten + Es ist ein Fehler aufgetreten. Code: %s. + Memo erforderlich Nur diese Gib das Genehmigungslimit für das ausgewählte Token an Betrag %s @@ -364,7 +380,7 @@ Du hast deine biometrischen Daten aktualisiert, scanne deine Karte oder Ring, um einzutreten Dein Guthaben sollte höher sein als der Gebührenwert, um eine Überweisung zu tätigen Unzureichende Mittel - Du hast nicht genug Mana für diese Transaktion. Bitte warte, bis das Mana wieder aufgefüllt ist. Dein Mana-Guthaben beträgt %1$s/%2$s + Du hast nicht genug Mana für diese Transaktion. Bitte warte, bis das Mana wieder aufgefüllt ist. Dein Managuthaben beträgt %1$s/%2$s Nicht genug Mana Du kannst nur %s übertragen, da das Koinos-Netzwerk ein Mana-Limit vorgibt. Mana-Limit @@ -499,14 +515,49 @@ Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen Token hinzufügen NFC ist auf deinem Gerät nicht verfügbar + Über NFT + NFT-Vermögenswert %d Stück %d Stücke + NFTs, die an Deine Wallet-Adresse gesendet werden, werden hier angezeigt. + Noch keine Kollektionen + NFT erhalten + NFT-Kollektionen + Einige Daten werden möglicherweise nicht geladen + Vorübergehende Ladeprobleme + Basisinformationen + Netzwerk + Vertragsadresse + Letzter Verkaufspreis + Raritätsetikett + Seltenheitsgrad + Token-Adresse + Token-ID + Token-Standard + Eigenschaften + Keine Ergebnisse. Bitte versuche eine andere Anfrage. + Keine Abholung + Verfügbar + Netzwerk auswählen + NFT erhalten + Du hast dieses Netzwerk noch nicht hinzugefügt. Um NFTs zu empfangen, füge es zum Hauptbildschirm hinzu! + Netzwerk nicht hinzugefügt + Nicht hinzugefügt + NFT senden + Eigenschaften %1$d NFTs in der %2$d Sammlung Tippe hier, um das erste NFT zu erhalten NFT-Sammlungen Die Daten konnten nicht geladen werden + Um das %1$s -Netzwerk nutzen zu können, must du die Kontoreserve ( %2$s %3$s ) bezahlen, die diesen Betrag auf unbestimmte Zeit sperrt und verbirgt + Das Zielkonto ist nicht aktiv. Sende %s oder mehr, um das Konto zu aktivieren. + Senden Sie Geld an diese Andresse um ein Konto zu erstellen + Das Zielkonto verfügt nicht über eine Vertrauensstellung für das gesendete Asset. + Jetzt beitreten + Teile Deinen Code – verdiene 5 USDT pro Verkauf. Deine Freunde erhalten 10 % Rabatt. + Erhalte BELOHNUNGEN für jeden Freund! Du musst einen einzigen Zugangscode einrichten, um alle deine Geräte zu schützen Schützen Du kannst später auf jeder Karte oder Ring einen individuellen Zugangscode einrichten @@ -522,7 +573,7 @@ Bitte wiederhole den Vorgang. Die Karte oder Ring wird auf Werkseinstellungen zurückgesetzt. Aktivierungsfehler Token hinzufügen - Du hast einee Backup-Karte oder einen Backup-Ring hinzugefügt. Wenn der Backup-Prozess abgeschlossen ist, kannst Du keine weiteren Backup-Geräte hinzufügen. Wenn Du noch eine Karte oder einen Ring hast, fügen diese(n) zum Backup hinzu. Möchtest Du den Backup-Prozess fortsetzen? + Du hast eine Backup-Karte oder einen Backup-Ring hinzugefügt. Nach Abschluss des Backup-Vorgangs kannst Du keine weiteren Backup-Geräte hinzufügen. Wenn Du eine weitere Karte oder einen weiteren Ring hast, fügen diesen dem Backup jetzt hinzu. Möchtest Du den Backup-Vorgang fortsetzen? Der Sicherungsvorgang ist teilweise abgeschlossen. Du kannst ihn jetzt nicht beenden. Die Passphrase ist eine fortschrittliche Sicherheitsfunktion, die von Krypto-Wallets verwendet wird. Sie fügt ein zusätzliches Wort oder eine Phrase deiner Wahl zu der bereits bestehenden Wiederherstellungsphrase hinzu, um einen brandneuen Satz von Adressen zu erzeugen. Hinzufügen einer Sicherungskarte oder Ring @@ -638,6 +689,7 @@ Kamerazugriff verweigert Kein Memo erforderlich %1$s ( %2$s ) im %3$s Netzwerk + %1$s im %2$s Netzwerk Das Senden einer anderen Währung führt zu deren irreversiblem Verlust. Sende nur %s an diese Adresse. Der Versand einer anderen Währung führt zu ihrem unwiderruflichen Verlust. Senden nur %1$s im Netzwerk %2$s @@ -716,6 +768,12 @@ Ziel-Tag Adresse eingeben Die Adresse stimmt mit der Adresse Ihrer Brieftasche überein + Minimaler Betrag ist %s + Minimaler Wechselgeld ist %s + Falsche Gebühr + Mindestguthaben ist %s + Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %s + Gebühr oder mehr sein + Unbekannter Fehler Ungültiges Memo. Sie wird der Transaktion nicht hinzugefügt. Memo Überprüfe deine Netzwerkverbindung @@ -773,8 +831,12 @@ inklusive einer Netzgebühr von %1$s Die Transaktion wurde erfolgreich signiert und an den Blockchain-Knoten gesendet. Die Walletbilanz wird aktualisiert %1$s ist ein Vermögenswert im Tron-Netzwerk. Um die Gebühr zu berechnen und eine Transaktion durchzuführen, musst du etwas Tron (TRX) auf deinem Konto einzahlen. + Der Betrag geht über die Bilanz hinaus Um diese Transaktion für die angegebene Adresse abzuschließen, ist ein Ziel-Tag (Memo) erforderlich. Ziel-Tag erforderlich + Ungültiger Betrag + Die Gebühr geht über die Bilanz hinaus + Der Gesamtbetrag geht über die Bilanz hinaus Transaktion gesendet Bereite das Scannen der Karte oder Ring vor, die du einrichten möchtest. Entferne diese Wallet @@ -844,6 +906,11 @@ Mit Restake kannst Du Dein Guthaben von einem Validator zu einem anderen verschieben, ohne dass Du den Stake aufheben musst. Du bist dabei, Dein gesamtes Guthaben zu staken. Wir empfehlen, einen kleinen Betrag übrig zu lassen, um die Netzwerkgebühren für die Aufhebung des Stakes oder das Einfordern von Prämien abzudecken. Um mit dem Staking bei TON zu beginnen, führe zunächst eine ausgehende Transaktion in beliebiger Höhe durch – dadurch wird Deine Wallet aktiviert. + Zusätzlich zur Netzwerkgebühr werden bis zu 0,2 TON benötigt, um alle Schritte der Transaktion abzuschließen. Nicht genutzte Beträge werden nach Abschluss der Transaktion zurückerstattet. + Für diesen Vorgang sind zusätzlich zur Netzwerkgebühr 0,2 TON erforderlich. Bitte lade Dein Guthaben auf. + 0,2 Ton reserviert + Durch diese Aktion werden andere Positionen geschlossen oder gemäß den Netzwerkregeln in den Auszahlungsstatus versetzt. + Positionsstatus Entsperre dein Geld, um es aus dem Staking-Prozess abzuheben. Das Freischalten nimmt %s. Nach Ablauf der 21-tägigen Bindungsfrist kannst Du über Dein Guthaben verfügen. Die Prämie wird zusammen mit dem ungestaketen Guthaben abgehoben. Deine Assets stehen Dir nach Ablauf der Frist für die Aufhebung der Bindung %s zur Verfügung. @@ -905,7 +972,7 @@ Verwende es unterwegs, überall und jederzeit. Keine Kabel oder Batterien. Tippe einfach mit der Karte oder Ring auf dein Telefon, wenn du Kryptowährung benötigst. Die Wallet für jeden Lerne Tangem kennen - Tausche, kaufen Sie NFTs, vergebe Kredite und tätige Einlagen bei mehr als 100 verschiedenen dezentralen Diensten + Mehr als 100 Integrationen dezentraler Dienste sind verfügbar Web 3.0-kompatibel Zum Fortfahren ist eine eingehende Transaktion von mindestens %1$s erforderlich Unzureichende Mittel @@ -960,7 +1027,7 @@ Blende %s aus Token ausblenden Durch das Staking kannst du alle %2$s Tage %1$s verdienen und Belohnungen erhalten - Verdiene bis zu %s Stakingprämie pro Jahr + Staking-Dienst %1$s Token in %%image%% %2$s Netzwerk Token in %%image%% %1$s Netzwerk Der %1$s (%2$s) Token ist die Hauptwährung im %3$s Netzwerk und kann nicht versteckt werden, solange du andere Token dieses Netzwerks in der Liste aktiv hast. @@ -1022,6 +1089,7 @@ Das wird nicht lange dauern. Wir richten gerade Dein Konto ein. Das wird nicht lange dauern. Wir schließen die Aktivierung ab. Alles wird vorbereitet! + PIN wurde nicht akzeptiert. Versuche es erneut oder verwende einen anderen Code. Ungültige PIN: Sequenzen oder Wiederholungen vermeiden Schon kann es losgehen! Du kannst Deine Verbindung \n auf der Website des Drittanbieters \n herstellen und zurück zur Tangem-App gelangen @@ -1030,6 +1098,7 @@ Willkommen zurück! Folge den Schritten, um Dein Konto einzurichten. Willkommen! + Diese Transaktion anfechten Freischalten Scanne Deine Karte, um den Zugriff freizuschalten Benötigte Freischaltung @@ -1163,12 +1232,36 @@ Dies ist eine Testnet-Karte. Sie kann keine Transaktionen verarbeiten und sollte nur zu Test- und Entwicklungszwecken verwendet werden. Nur für Testzwecke Der Kontostand ist möglicherweise veraltet. Aktualisiere bittre die Seite. + Unbekannte Domäne + Trotzdem verbinden + Zeitüberschreitungsfehler. Bitte versuche es später erneut. + WalletConnect konnte nicht hergestellt werden + Diese Domäne kann nicht verifiziert werden. Überprüfe die Anfrage sorgfältig und bestätige diese dann. + WalletConnect-Sitzung wurde getrennt + Fehlercode: %s. Wenn das Problem weiterhin besteht, wende Dich bitte an unseren Support. + Wir haben einen unbekannten Fehler festgestellt. + Tangem unterstützt derzeit das erforderliches Netzwerk von %s nicht. + Nicht unterstützte Netzwerke + Tangem unterstützt ein erforderliches Netzwerk um %s. + Verifizierte Domain + Wir haben eine Art Problem + Netzwerk + Netzwerke + Wallet + Signiere die Transaktionen ohne eine Vorankündigung + Genehmigung für Transaktionen anfordern + Wird nicht in der Lage sein, Verbindungen Alle trennen + Text über die Trennung aller dApps Alle dApps trennen + Füge Deinem Profil für dieses Wallet das Netzwerk %s hinzu + Die Wallet verfügt über keine erforderlichen Netzwerke Neue Verbindung Verbinde Deine Wallet mit einer anderen dApp Keine Sitzungen + Diese Domain wird von mehreren Sicherheitsanbietern als unsicher eingestuft. Verlasse diese umgehend, um Dein Vermögen zu schützen. + Bekanntes Sicherheitsrisiko Verwerfen Du hast eine unterbrochene Sicherung. Möchtest du diese fortsetzen? Ja, fortsetzen @@ -1180,4 +1273,7 @@ Karte oder Ring scannen Verwenden %s oder scanne eine Karte oder Ring, um auf die App zuzugreifen Willkommen zurück! + Nein, alles senden + Um %s XTZ reduziert + Damit Sie beim nächsten Aufladen Ihrer Brieftasche keine erhöhte Provision zahlen, soll der Betrag um %s XTZ reduziert werden diff --git a/core/res/src/main/res/values-es/strings-blockchain.xml b/core/res/src/main/res/values-es/strings-blockchain.xml deleted file mode 100644 index 709f3ab9dd..0000000000 --- a/core/res/src/main/res/values-es/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - Por defecto - Legado - No se pudo obtener la tarifa - Debido a limitaciónes sobre %1$s, solos %2$d UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debe reducir la cantidad. - No hay fondos suficientes para la transacción. Por favor, recargue su cuenta. - Ocurrió un error. Código: %s - Para utilizar la red %1$s, debe pagar la reserva de cuenta (%2$s%3$s), que bloquea y oculta ese monto indefinidamente - La cuenta de destino no está activa. Envíe %s o más para activar la cuenta. - Para crear una cuenta, envíe fondos a esta dirección - El monto mínimo es %s - La cantidad es demasiado baja - Tarifa no válida - El saldo mínimo es %s - No se ha creado la cuenta de destino. El monto a enviar debe ser %s + comisiones o más - Error desconocido - El monto excede el saldo - Cantidad no válida - La tarifa excede el saldo - El monto total excede el saldo - No, enviar todo - Réduire de %s XTZ - Para evitar pagar una comisión mayor la próxima vez que recargue su billetera, reduzca el monto en %s - diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index abe6273ee4..0bd26c5acb 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -21,6 +21,8 @@ Agregue un token personalizado Gestionar tokens Envíe solo %1$s (%2$s) desde redes como %3$s a esta dirección. Usar otros tokens y redes puede resultar en la pérdida de fondos. + Por defecto + Legado Cómo escanear Solicitar soporte Inténtelo de nuevo @@ -83,6 +85,7 @@ Requisitos de transacción de Cardano Para realizar una %1$s transacción, deba depositar algo de ADA para cubrir la tarifa de red y el valor mínimo de ADA (se recomiendan 5 ADA) ADA insuficiente para la transferencia de tokens + El monto enviado y el cambio no pueden ser menores a 1 ADA Deba mantener algo de ADA porque tiene algunos tokens en la blockchain de Cardano ADA insuficiente Aceptar @@ -100,6 +103,7 @@ Saldo autenticación biométrica biometría + No se pudo crear la transacción Comprar Ir a %1$s No ha otorgado acceso a su cámara, cambie su configuración de privacidad @@ -135,6 +139,7 @@ Explore Explore historial de transacciones Explorador(a) + No se pudo obtener la tarifa Las tarifas de red son cargos que los usuarios pagan para procesar y confirmar transacciones. El importe de la tarifa puede verse afectado por la congestión de la red, el tamaño de la transacción y la prioridad de ejecución. %s Rápido Mercado @@ -182,6 +187,7 @@ Seleccione una acción Vender Enviar + Error al enviar la transacción El servidor no está disponible, por favor inténtelo de nuevo más tarde Compartir Compartir enlace @@ -205,6 +211,7 @@ Hubo un error. Por favor inténtelo de nuevo. Inaccesible Termine el staking + Debido a limitaciónes sobre %1$s, solos %2$d UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debe reducir la cantidad. semana con @@ -261,6 +268,7 @@ Compruebe su conexión a internet o cambia a una red diferente Condiciones de uso Ha usado una tarjeta de otra billetera. Toque la tarjeta asociada con esta billetera + No hay fondos suficientes para la transacción. Por favor, recargue su cuenta. Mis tokens Aún no ha añadido ningún token. Agregue tokens a través de Market para hacer swap No se puede intercambiar por %s @@ -340,6 +348,9 @@ Comentarios en Tangem No se puede completar una transacción Error de descripción de moneda + Ocurrió un error + Ocurrió un error. Código: %s + Requiere memo Esta transacción Especifique el límite aprobado para el token seleccionado. Montante %s @@ -364,7 +375,7 @@ Ha actualizado la biometría, escanee su tarjeta o anillo para entrar Su saldo debe ser mayor que el valor de la tarifa para hacer una transferencia Saldo insuficiente - No tiene suficiente Mana para esta transacción. Por favor, espere hasta que el Mana se recargue. Su saldo de Mana es %1$s/%2$s + No tiene suficiente Mana para esta transacción. Espere hasta que se reponga el maná. Su saldo de maná es %1$s/%2$s Mana insuficiente Solo puede transferir %s debido al límite de Mana impuesto por la red Koinos Límite de Mana @@ -499,6 +510,10 @@ Tire hacia arriba o toque la barra de búsqueda para agregar tokens directamente desde el mercado Agregar tokens NFC no está disponible en su dispositivo + Para utilizar la red %1$s, debe pagar la reserva de cuenta (%2$s%3$s), que bloquea y oculta ese monto indefinidamente + La cuenta de destino no está activa. Envíe %s o más para activar la cuenta. + Para crear una cuenta, envíe fondos a esta dirección + La cuenta de destino no tiene una Trustline para el activo que se envía. Deba configurar un único código de acceso para proteger todss sus dispositivos. Proteger Puede configurar un código de acceso individual en cada tarjeta más adelante @@ -708,6 +723,12 @@ ID de destino Introduce la dirección La dirección es la misma que su billetera. + El monto mínimo es %s + El cambio mínimo es %s + Tarifa no válida + El saldo mínimo es %s + No se ha creado la cuenta de destino. El monto a enviar debe ser %s + comisiones o más + Error desconocido Memo no válido. No se añadirá a la transacción. Memo Compruebe su conexión de red @@ -765,8 +786,12 @@ incluida una tarifa de red de %1$s La transacción se firmó con éxito y se envió al nodo blockchain. El saldo de la billetera se actualizará después de un tiempo. %1$s es un activo en la red Tron. Para calcular la tarifa y realizar una transacción, deba depositar algo de Tron (TRX) en su cuenta. + El monto excede el saldo Es necesario una etiqueta de destino (memo) para completar esta transacción para la dirección especificada. Etiqueta de destino obligatoria + Cantidad no válida + La tarifa excede el saldo + El monto total excede el saldo Transacción enviada Escanee la tarjeta/anillo que quiere configurar Olvidar la billetera @@ -897,7 +922,7 @@ Úselo en cualquier lugar, en cualquier momento. Sin cables ni baterías. Solo toque la tarjeta con su teléfono cuando necesites su cripto. La billetera para todos Descubra Tangem - Intercambie, compre NFT, haga préstamos y depósitos en más de 100 servicios descentralizados diferentes + Más de 100 integraciones de servicios descentralizados están disponibles Compatible con Web 3.0 Se requiere una transacción entrante de al menos %1$s para proceder Fondos insuficientes @@ -952,7 +977,7 @@ Ocultar %s Ocultar el token El staking le permite ganar %1$s y obtener recompensas cada %2$s días - Gane hasta %s recompensa del staking por año + Servicio de Staking Token de %1$s en la red %%image%% %2$s Token en la %%image%% red %1$s El token %1$s (%2$s) es la moneda principal en la red %3$s y no se puede ocultar mientras tengas otros tokens de esta red en la lista @@ -1144,4 +1169,7 @@ Escanee la tarjeta o el anillo Use %s o escanee una tarjeta/anillo para acceder a la app ¡Bienvenido de nuevo! + No, enviar todo + Réduire de %s XTZ + Para evitar pagar una comisión mayor la próxima vez que recargue su billetera, reduzca el monto en %s diff --git a/core/res/src/main/res/values-fr/strings-blockchain.xml b/core/res/src/main/res/values-fr/strings-blockchain.xml deleted file mode 100644 index 8269ca16c6..0000000000 --- a/core/res/src/main/res/values-fr/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - Défaut - Héritage - Échec de réception des frais de commissions - En raison d\'une limitations sur les %1$s, seuls les %2$d UTXO peuvent s\'intégrer dans une seule transaction. Ce qui signifie vous ne pouvez envoyer que %3$s ou moins. Réduisez le montant. - Pas assez de fonds pour la transaction. Veuillez recharger votre compte. - Une erreur s\'est produite. Code:%s - Pour utiliser le réseau %1$s, vous devez payer la réserve de compte (%2$s%3$s), qui bloque et cache ce montant indéfiniment - Le compte de destination est inactif. Envoyez %s ou plus pour activer le compte. - Pour créer un compte, envoyez des fonds à cette adresse - Le montant minimal est de %s - Le montant est trop faible - Frais de commissions non valides - Le solde minimal est de %s - Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %s + frais de commissions ou plus - Erreur inconnue - Le montant dépasse le solde - Montant invalide - Les frais de commissions dépassent le solde - Le total dépasse le solde - Non, envoyer toute la somme - Réduire de %s XTZ - Pour ne pas payer un fraid de commissions élevé la prochaine fois que vous rechargez votre portefeuille, veuillez réduire le montant de %s XTZ - diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 01f05ff01c..3866456cd5 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -21,6 +21,8 @@ Ajouter un jeton personnalisé Gérer les jetons Envoyez uniquement %1$s (%2$s) depuis les réseaux %3$s à cette adresse. L\'utilisation d\'autres jetons et réseaux peut entraîner une perte de fonds. + Défaut + Héritage Comment scanner Demander de l\'aide Réessayez @@ -83,6 +85,7 @@ Exigences pour les transactions Cardano Pour effectuer une transaction %1$s, vous devez déposer de l\'ADA pour couvrir les frais de réseau et la valeur minimale en ADA (5 ADA recommandés) ADA insuffisant pour le transfert de jetons + Le montant envoyé et la change ne peuvent être inférieurs à 1 ADA Vous devez conserver un peu d\'ADA car vous avez des jetons sur la blockchain Cardano ADA insuffisant Accepter @@ -100,6 +103,7 @@ Solde authentification biométrique biométrie + Échec de création de la transaction Acheter Aller à %1$s Vous n\'avez pas octroyé l\'accès à votre caméra, veuillez modifier vos paramètres de confidentialité @@ -135,11 +139,13 @@ Explorez Explorez l\'historique des transactions Explorateur + Échec de réception des frais de commissions Les frais de réseau sont des charges que les utilisateurs paient pour traiter et confirmer les transactions. Le montant des frais peut être affecté par la congestion du réseau, la taille de la transaction et la priorité d\'exécution. %s Rapide Marché Lent Vitesse et frais + Terminer Synchroniser les adresses Aller au fournisseur Aller au jeton @@ -159,6 +165,7 @@ Aucune adresse Maintenant OK + Ouvrir dans le navigateur Carte principale Bague principale Passphrase @@ -180,8 +187,10 @@ Sélectionnez une action Vendre Envoyer + Échec d\'envoi de la transaction Le serveur n\'est pas disponible, veuillez réessayer plus tard Partager + Partager le lien Signez Signez et envoyez Stake @@ -202,6 +211,7 @@ Il y avait une erreur. Veuillez réessayer. Inaccessible Unstakez + En raison d\'une limitations sur les %1$s, seuls les %2$d UTXO peuvent s\'intégrer dans une seule transaction. Ce qui signifie vous ne pouvez envoyer que %3$s ou moins. Réduisez le montant. semaine avec Oui @@ -258,6 +268,7 @@ Vérifiez votre connexion Internet ou passez à un réseau différent Conditions d\'utilisation Vous avez utilisé une carte d\'un autre portefeuille. Appuyez sur la carte associée à ce portefeuille + Pas assez de fonds pour la transaction. Veuillez recharger votre compte. Mes jetons Vous n\'avez pas encore ajouté de jetons. Ajoutez des jetons via Market pour effectuer une échange Ne peut pas être échangé contre %s @@ -337,6 +348,9 @@ Commentaires sur Tangem Impossible d\'effectuer une transaction Erreur de description de la pièce + Une erreur s\'est produite + Une erreur s\'est produite. Code:%s + Un mémo est requis Cette transaction Spécifiez la limite approuvée pour le jeton sélectionné Montant %s @@ -361,7 +375,7 @@ Vous avez mis à jour vos données biométriques, scannez votre carte ou bague pour entrer Votre solde doit être supérieur à la valeur des frais pour effectuer un transfert Solde insuffisant - Vous n\'avez pas assez de Mana pour cette transaction. Veuillez attendre que le Mana soit reconstitué. Votre solde de Mana est de %1$s/%2$s + Vous n\'avez pas assez de mana pour cette transaction. Veuillez patienter jusqu\'à ce que le mana soit réapprovisionné. Votre solde de mana est %1$s/%2$s Mana insuffisant Vous ne pouvez transférer que %s en raison de la limite de Mana imposée par le réseau Koinos Limite de Mana @@ -496,6 +510,23 @@ Tirez vers le haut ou appuyez sur la barre de recherche pour ajouter des jetons directement depuis le marché Ajouter des jetons NFC n\'est pas disponible sur votre appareil + Les NFT envoyés à l\'adresse de votre portefeuille s\'afficheront ici. + Aucune collection pour le moment + Recevoir des NFT + Collections NFT + Certaines données peuvent ne pas se charger + Problèmes de chargement temporaires + %1$d NFT dans la collection %2$d + Appuyez ici pour recevoir le premier NFT + Collections NFT + Impossible de charger les données + Pour utiliser le réseau %1$s, vous devez payer la réserve de compte (%2$s%3$s), qui bloque et cache ce montant indéfiniment + Le compte de destination est inactif. Envoyez %s ou plus pour activer le compte. + Pour créer un compte, envoyez des fonds à cette adresse + Le compte destinataire n\'a pas de Trustline pour l\'actif envoyé qu\'il tente d\'envoyer. + Rejoignez maintenant + Partagez votre code et gagnez 5 USDT par vente. Votre ami bénéficie de 10 % de réduction. + Recevez des RÉCOMPENSES pour chaque ami ! Vous devez définir un seul code d\'accès pour protéger tous vos appareils. Protéger Vous pourrez définir un code d\'accès individuel sur chaque carte plus tard @@ -705,6 +736,12 @@ ID de destination Entrez l\'adresse L\'adresse est la même que celle de votre portefeuille + Le montant minimal est de %s + La monnaie minimale est de %s + Frais de commissions non valides + Le solde minimal est de %s + Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %s + frais de commissions ou plus + Erreur inconnue Mémo invalide. Il ne sera pas ajouté à la transaction. Mémo Vérifiez votre connexion réseau @@ -762,6 +799,12 @@ y compris des frais de réseau de %1$s La transaction a été signée avec succès et envoyée au nœud de blockchain. Le solde du portefeuille sera mis à jour après un certain temps %1$s est un actif du réseau Tron. Pour calculer les frais et effectuer une transaction, déposez du Tron (TRX) sur votre compte. + Le montant dépasse le solde + Une balise de destination (mémo) est requise pour terminer cette transaction pour l\'adresse spécifiée. + Étiquette de destination requise + Montant invalide + Les frais de commissions dépassent le solde + Le total dépasse le solde Transaction envoyée Scannez la carte/ bague que vous souhaitez configurer. Oublier le portefeuille @@ -783,6 +826,7 @@ %s profit estimatif Cote du marché Métriques + Selon les règles du réseau %1$s, les réclamations sont possibles à partir de %2$s. Les montants ci-dessous seront crédités sur votre compte lors du déblocage. Minimum requis Aucune récompense à réclamer Réclamation de récompense @@ -820,11 +864,16 @@ Solde de staking faible Un minimum de %1$s %2$s est requis pour le re-staking. Veuillez recharger votre solde. Pas assez de %s + Solde insuffisant pour le staking + Un minimum de 3 ADA est requis pour le re-staking. Veuillez recharger votre solde. + ADA insuffisants + Le montant minimum requis pour le staking doit être supérieur à 5 ADA. Veuillez recharger votre solde pour commencer à staking. L\'option de staking n\'est actuellement pas disponible en raison des conditions du réseau. Veuillez réessayer plus tard. Le staking dans le réseau %1$s avec un nouveau validateur transférera automatiquement tous les fonds précédemment stakés vers ce validateur Réinvestissez vos récompenses gagnées dans le montant que vous avez staké, augmentant ainsi vos gains potentiels. L\'option de restaker vous permet de déplacer vos fonds d\'un validateur à un autre sans avoir besoin de les déstaker. Vous êtes sur le point de staker l\'intégralité de votre solde. Nous vous recommandons de laisser un petit montant pour couvrir les frais de réseau pour unstaking ou la réclamation des récompenses. + Pour commencer à staker TON, effectuez d\'abord une transaction sortante de n\'importe quel montant — cela activera votre portefeuille. Débloquez votre argent pour le retirer du processus de staking. Le déverrouillage prend %s. Vos fonds seront disponibles à l\'utilisation après la période de déblocage de 21 jours. La récompense sera retirée en même temps que vos fonds de déblocage. Vos fonds seront disponibles pour utilisation après la période de désengagement %s. @@ -853,6 +902,7 @@ Récompenses Stake verrouillé Staker plus + Lorsque vous stakez %1$s, la totalité de votre solde %2$s est stakeée. Tout dépôt supplémentaire de %2$s sur votre portefeuille Tangem sera également staké automatiquement. Montant staké Vous stakez %1$s et recevrez %2$s Appuyez pour déverrouiller @@ -885,8 +935,10 @@ Utilisez-la en déplacement, n\'importe où, n\'importe quand. Pas de fils ni de piles. Il suffit de taper la carte sur votre téléphone lorsque vous avez besoin de votre crypto. Le portefeuille pour tous Découvrez Tangem - Échangez, achetez des NFT, faites des prêts et des dépôts dans plus de 100 services décentralisés différents + Plus de 100 intégrations de services décentralisés sont disponibles Compatible avec Web 3.0 + Une transaction entrante d\'au moins de %1$s est requise pour continuer + Fonds insuffisants Le réseau facturera des frais d\'approbation de jeton pour vérifier que vous autorisez l\'utilisation de votre jeton pour l\'échange. Échangez plus de jetons à de meilleurs taux directement dans votre portefeuille. Nouveau fournisseur d\'échange disponible ! @@ -926,6 +978,7 @@ Vous n\'avez pas de fonds à envoyer. Renflouez votre compte pour pouvoir envoyer des fonds à partir de celui-ci. Die Daten wurden noch nicht geladen. Dies kann einige Sekunden dauern. Bitte versuchen Sie es später noch einmal. Le service d\'échange %s n\'est pas pris en charge par les fournisseurs actuels mais nous travaillons à ajouter plus d\'options. + Le solde affiché peut être obsolète en raison de la mise en cache. La vente de fonds sera disponible une fois que la ou les transactions en attente dans le réseau %s seront terminées L\'envoi de fonds sera disponible une fois la ou les transactions en attente dans le réseau %s terminées. L\'achat de %s n\'est pas pris en charge par les fournisseurs actuels mais nous travaillons à ajouter plus d\'options. @@ -936,7 +989,7 @@ Masquer %s Masquer le jeton Le Staking vous permet d\'en gagner %1$s et d\'obtenir des récompenses tous les %2$s jours - Gagnez jusqu\'à %s récompense de mise par an + Service de Staking %1$s jeton dans %%image%% %2$s le réseau Jeton dans le %%image%% %1$s réseau Le jeton %1$s (%2$s) est la principale devise du réseau %3$s et ne peut pas être masqué tant que vous avez d\'autres jetons de ce réseau dans la liste @@ -972,6 +1025,7 @@ Tangem Twin Cette action est irréversible. Vous n\'aurez plus accès à l\'ancien portefeuille. Appuyez sur la carte jumelle avec le numéro %s et ne la retirez pas jusqu\'à la fin de l\'opération + Nous avons rencontré une erreur. Code d\'erreur : %s. Veuillez contacter notre équipe de support. Utilisez %s ou scannez une carte/bague pour avoir accès à votre portefeuille Échec de la connexion : Cette dApp utilise Wallet Connect version1.0, qui n\'est pas prise en charge. Veuillez vous assurer que la dApp prend en charge Wallet Connect version2.0 pour réussir la connexion. Restez à jour avec les dernières fonctionnalités et actualités @@ -986,6 +1040,24 @@ Renommer le portefeuille Tout déverrouiller Tout déverrouiller avec %s + + disponible pour %d jour + disponible pour %d jours + + Soldes et Limites + Êtes-vous sûr de vouloir quitter ? Vous pourrez reprendre plus tard là où vous vous étiez arrêté. + Cela ne prendra pas longtemps. Nous configurons votre compte. + Cela ne prendra pas longtemps. Nous terminons l\'activation. + Tout est en cours de préparation ! + Code PIN invalide : évitez les séquences ou les répétitions + Accéder le site Web + Continuons la configuration de votre compte. + Content de vous revoir ! + Suivez les étapes pour configurer votre compte. + Bienvenue ! + Déverrouiller + Scannez votre carte pour déverrouiller l\'accès + Déverrouillage nécessaire La blockchain n\'est pas accessible. Réessayez plus tard Scanner la carte ou la bague Ce portefeuille a déjà été activé auparavant.\nSi cela n\'a pas été fait par vous, veuillez contacter le support.\nTangem ne vend jamais de portefeuilles avec le code d\'accès pré-généré. @@ -1116,6 +1188,13 @@ Il s\'agit d\'une carte Testnet. Elle ne peut pas traiter les transactions et ne doit être utilisée qu\'à des fins de test et de développement. À des fins de test uniquement Le solde peut être obsolète. Rafraîchissez la page. + Connexions + Déconnecter tout + Texte sur la déconnexion de toutes les dApps + Déconnecter toutes les dApps + Nouvelle connexion + Connectez votre portefeuille à différentes dApps + Aucune séance Ignorer Vous avez une sauvegarde interrompue. Voulez-vous la reprendre ? Oui, reprendre @@ -1127,4 +1206,7 @@ Scanner la carte Utiliser %s ou scanner une carte pour accéder à l\'application Bon retour ! + Non, envoyer toute la somme + Réduire de %s XTZ + Pour ne pas payer un fraid de commissions élevé la prochaine fois que vous rechargez votre portefeuille, veuillez réduire le montant de %s XTZ diff --git a/core/res/src/main/res/values-it/strings-blockchain.xml b/core/res/src/main/res/values-it/strings-blockchain.xml deleted file mode 100644 index bedc136ed0..0000000000 --- a/core/res/src/main/res/values-it/strings-blockchain.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - Impossibile ottenere la commissione - Per creare un account, invia fondi a questo indirizzo - L\'importo minimo è di %s - L\'importo residuo è molto basso - Commissione non valida - Il conto totale non è stato creato L\'importo da inviare deve essere %s + commissione o maggiore - Errore sconosciuto - L\'importo supera il saldo - Importo non valido - La commissione supera il saldo - Il totale supera il saldo - No, invia l\'intero importo - Riduci di %s XTZ - Per evitare di pagare una commissione maggiore la prossima volta che ricarichi il tuo portafoglio, riduci l\'importo di %s XTZ - diff --git a/core/res/src/main/res/values-it/strings.xml b/core/res/src/main/res/values-it/strings.xml index 9b25886a73..7132029cfe 100644 --- a/core/res/src/main/res/values-it/strings.xml +++ b/core/res/src/main/res/values-it/strings.xml @@ -1,17 +1,23 @@ + Default + Legacy Questa carta non è progettata per funzionare con Tangem + L\'importo inviato e il cambio non può essere inferiore a 1 ADA Accetta Saldo: %s + Impossibile creare la transazione Non hai fornito l\'accesso alla tua videocamera, modifica le tue impostazioni sulla privacy Annulla Rimuovere Fatto Errore + Impossibile ottenere la commissione Costi della rete OK Mantieni le modifiche Invia + Impossibile inviare la transazione Con successo Codice di accesso Prima di scansionare la carta sarà necessario inserire il codice di accesso corretto @@ -27,22 +33,39 @@ Firmato Requisiti Termini del servizio + Not enough funds for the transaction. Please top up your account. + An error occurred + Notifica richiesta Scansiona carta Avvicina per modificare il codice di accesso Avvicina per modificare la password Avvicina per scansionare Avvicina per firmare Avvicina la carta + Per creare un account, invia fondi a questo indirizzo + The destination account does not have a trustline for the asset being sent. Crea portafoglio Importo L\'indirizzo corrisponde all\'indirizzo del tuo portafoglio + L\'importo minimo è di %s + Il resto minimo è di %s + Commissione non valida + Il conto totale non è stato creato L\'importo da inviare deve essere %s + commissione o maggiore + Errore sconosciuto Memo Importo totale La transazione è stata firmata con successo e inviata al nodo blockchain. Il saldo del portafoglio verrà aggiornato dopo un po\' di tempo + L\'importo supera il saldo + Importo non valido + La commissione supera il saldo + Il totale supera il saldo Tangem Twin WalletConnect L\'indirizzo è stato copiato con successo Nessuna connessione a Internet Tangem Ok, ho capito! + No, invia l\'intero importo + Riduci di %s XTZ + Per evitare di pagare una commissione maggiore la prossima volta che ricarichi il tuo portafoglio, riduci l\'importo di %s XTZ diff --git a/core/res/src/main/res/values-ja/strings-blockchain.xml b/core/res/src/main/res/values-ja/strings-blockchain.xml deleted file mode 100644 index 5c5a94491d..0000000000 --- a/core/res/src/main/res/values-ja/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - デフォルト - レガシー - 手数料を取得できませんでした - %1$sの制限により、1つのトランザクションに収まるUTXOは%2$d個のみです。つまり、 %3$s以下しか送信できません。量を減らす必要があります。 - 取引に必要な資金が不足しています。アカウントに入金してください。 - エラーが発生しました。コード: %s 。 - %1$sネットワークを使用するには、アカウント準備金 ( %2$s %3$s ) を支払う必要があります。これにより、その金額はロックされ、無期限に非表示になります。 - 送信先アカウントが有効ではありません。%s 以上を送信してアカウントを有効にしてください。 - アカウントを作成するには、このアドレスに資金を送金してください - 最低額は%sです - 値が小さすぎます - 無効な手数料 - 最低残高は%sです - 対象アカウントは作成されていません。送信金額は、%s + 手数料またはそれ以上である必要があります。 - 不明なエラー - 金額が残高を超えています - 無効な金額 - 手数料が残高を超えています - 合計金額が残高を超えています - いいえ、すべて送信します - %s XTZを減らす - 次回ウォレットにチャージするときに手数料の増加を避けるには、金額を%s XTZ減らしてください。 - diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 9b67c45675..9492011009 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -21,6 +21,8 @@ カスタムトークンの追加 トークンの管理 このアドレスには%3$s ネットワークから%1$s (%2$s) のみを送信してください。他のトークンやネットワークを使用すると、資金を失う可能性があります。 + デフォルト + レガシー スキャン方法 サポートをリクエストする もう一度やり直してください @@ -82,6 +84,7 @@ Cardanoの取引要件 %1$s 取引を行うには、いくらかのADAを入金し、ネットワーク手数料と最小ADA (5ADAを推奨) をカバーする必要があります。 トークンを送るために必要なADAが不足しています。 + 送金額とお釣りは1ADA未満にすることはできません カルダノブロックチェーン上にトークンを持っているため、いくらかのADA残高を維持する必要があります。 ADAが不足しています。 受け入れる @@ -99,6 +102,7 @@ 残高 生体認証 生体認証 + 取引の構築に失敗しました 買う %1$sへ移動 カメラへのアクセスを許可していません。プライバシー設定を調整してください。 @@ -109,6 +113,8 @@ 報酬を受け取る 閉じる 確認 + Tangemサポートへ問い合わせる + Visaサポートへ問い合わせる 続ける コピー アドレスをコピー @@ -132,6 +138,7 @@ 移動する 取引履歴を調べる エクスプローラー + 手数料を取得できませんでした ネットワーク手数料は、取引の処理と確認のためにユーザーが支払う料金です。手数料の額は、ネットワークの混雑さ、取引のサイズ、実行の優先度によって左右されます。 %s 速い マーケット @@ -153,6 +160,7 @@ ネットワーク手数料 送金額は、選択された手数料レベルをカバーするため、%1$s (%2$s) 減額されます。 + NFT いいえ アドレスがありません @@ -175,10 +183,12 @@ 検索 トークンを検索 + すべて見る シードフレーズ アクションを選択 売る 送る + 取引の送信に失敗しました サーバーが利用できません。しばらくしてからもう一度お試しください。 共有 リンクを共有 @@ -202,6 +212,7 @@ エラーが発生しました。もう一度お試しください。 アクセスできません ステーキング解除 + %1$sの制限により、1つのトランザクションに収まるUTXOは%2$d個のみです。つまり、 %3$s以下しか送信できません。量を減らす必要があります。 はい @@ -258,6 +269,7 @@ インターネット接続を確認するか、別のネットワークに切り替えてください。 利用規約 別のウォレットのカードまたはリングを使用しました。このウォレットにリンクしているカードまたはリングをタップしてください。 + 取引に必要な資金が不足しています。アカウントに入金してください。 マイトークン まだトークンを追加していません。マーケットからトークンを追加して交換してください。 %sとの交換はできません @@ -295,6 +307,7 @@ 入金待ち 入金待ち... 返金済み + 処理中 あなたへ送金しています 送金中... 送金済み @@ -337,6 +350,9 @@ Tangemへのフィードバック 取引を送信できません コインの説明エラー + エラーが発生しました + エラーが発生しました。コード: %s 。 + メモが必要 取引 選択したトークンの承認制限を指定します 金額%s @@ -361,7 +377,7 @@ 生体認証を更新しました。カードまたはリングをスキャンして入ってください。 送金するには、残高が手数料額より高くなければなりません。 残高不足 - この取引に必要なManaが不足しています。Manaが補充されるまでお待ちください。あなたのMana残高は%1$s/%2$sです。 + この取引に必要なManaが足りません。Manaが補充されるまでお待ちください。Manaの残高は%1$s / %2$sです。 Manaが不足しています KoinosネットワークによるMana制限のため、%s のみ送金できます。 Mana上限 @@ -493,6 +509,8 @@ これをドラッグするか、検索窓をタップして、マーケットから直接トークンを追加します トークンを追加 お使いのデバイスではNFCが使用できません + NFTについて + NFTアセット アイテム @@ -502,10 +520,37 @@ NFTコレクション 一部のデータが読み込まれない場合があります 一時的な読み込みの問題 + 基本情報 + チェーン + コントラクトアドレス + 最終販売価格 + レアリティ・ラベル + レアリティ・ランク + トークンアドレス + トークンID + トークン標準 + 特徴 + 結果がありません。別のリクエストをお試しください。 + コレクションなし + 利用可能 + ネットワークを選択 + NFTを受け取る + このネットワークはまだ追加されていません。NFTの受け取りを開始するには、メイン画面に追加してください。 + ネットワークが追加されていません + 未追加 + NFTを送信する + 特徴 %1$dコレクションの%2$dNFT ここをタップして最初のNFTを受け取ります NFTコレクション データを読み込めません + %1$sネットワークを使用するには、アカウント準備金 ( %2$s %3$s ) を支払う必要があります。これにより、その金額はロックされ、無期限に非表示になります。 + 送信先アカウントが有効ではありません。%s 以上を送信してアカウントを有効にしてください。 + アカウントを作成するには、このアドレスに資金を送金してください + 送信先アカウントには、送金されるアセットのトラストラインがありません。 + 今すぐ参加 + コードを共有すると、販売ごとに5 USDTを獲得できます。お友達は10%割引になります。 + 友達への紹介で報酬を獲得しよう! すべてのデバイスを保護するには、単一のアクセスコードを設定してください。 保護する 後で各カードおよびリングに個別のアクセスコードを設定できます。 @@ -635,6 +680,7 @@ カメラへのアクセスが拒否されました メモ不要 %3$sネットワーク上の%1$s ( %2$s ) + %2$sネットワーク上の%1$s 他の暗号資産を送信すると、取り返しのつかない損失が発生します。 このアドレスには%sのみを送金してください。他のトークンを送信すると、取り返しのつかない損失が発生します。 %2$sネットワークの%1$sのみを送信してください @@ -711,6 +757,12 @@ 宛先タグ アドレスを入力 アドレスはウォレットアドレスと同じです + 最低額は%sです + 最小の変更は%sです + 無効な手数料 + 最低残高は%sです + 対象アカウントは作成されていません。送信金額は、%s + 手数料またはそれ以上である必要があります。 + 不明なエラー 無効なメモです。取引には追加されません。 メモ ネットワーク接続を確認してください @@ -768,8 +820,12 @@ ネットワーク手数料%1$sを含む 取引は正常に署名され、ブロックチェーンノードに送信されました。ウォレットの残高はしばらくして更新されます。 %1$sはTronネットワークのアセットです。手数料を計算して取引を行うには、アカウントにTron(TRX)を入金する必要があります。 + 金額が残高を超えています 指定されたアドレスへの取引を完了するには、宛先タグ(メモ)が必要です。 宛先タグが必要です + 無効な金額 + 手数料が残高を超えています + 合計金額が残高を超えています 取引が送信されました 設定したいカードまたはリングをスキャンするために準備してください。 ウォレット削除 @@ -839,6 +895,11 @@ 再ステーキングを使うと、ステーキングを解除することなく、あるバリデータから別のバリデータに資金を移動できます。 残高のすべてをステーキングしようとしています。ステーキング解除や報酬請求にかかるネットワーク手数料をカバーするために、少額を残しておくことをお勧めします。 TONでステーキングを開始するには、まず任意の金額の送金を行ってください。これにより、ウォレットがアクティブになります。 + ネットワーク手数料に加え、取引の全ステップを完了するには最大0.2 TONが必要です。未使用分は取引完了後に返金されます。 + この操作を続行するには、ネットワーク手数料に加えて0.2 TONが必要です。残高を補充してください。 + 0.2 TON保留済み + このアクションは、ネットワークのルールに従って、他のポジションをクローズするか、引き出しステータスに切り替えます。 + ポジション状況 資金をステーキングから引き出すには、ロックを解除してください。ロック解除には%sかかります。 資金は、21日間のロック解除期間後に使用可能になります。報酬は、ロック解除後の資金とともに引き出されます。 %sのステーキング解除期間後、資金はすぐ利用可能となります。 @@ -955,7 +1016,7 @@ %sを非表示 トークンを非表示 ステーキングにより、 %1$sを獲得し、 %2$s日ごとに報酬を受け取ることができます。 - 年間最大%sのステーキング報酬を獲得 + ステーキングサービス %%image%% %2$s ネットワークの %1$s トークン %%image%% %1$sネットワーク上のトークン %1$s ( %2$s ) トークンは%3$sネットワークの主要通貨であり、このネットワーク上の他のトークンがリストにある限り、非表示にすることはできません。 @@ -1015,12 +1076,14 @@ 長くはかかりません。アカウントを設定しています。 長くはかかりません。アクティベーションを完了しています。 準備完了です! + PINの認証に失敗しました。もう一度お試しいただくか、別のコードを使用してください。 無効な暗証番号:連続や繰り返しを避けてください ウェブサイトに移動 アカウントの設定を続けましょう。 お帰りなさい! 手順に従ってアカウントを設定してください。 ようこそ! + この取引に異議を唱える ロック解除 カードをスキャンしてアクセスロックを解除する ロック解除が必要 @@ -1153,13 +1216,44 @@ これはテストネットカードです。取引処理はできませんので、テストおよび開発目的でのみご利用ください。 テスト目的のみ 残高が古い可能性があります。ページを更新してください。 + 不明なドメイン + とにかく接続する + タイムアウトエラーが発生しました。しばらくしてからもう一度お試しください。 + WalletConnectを確立できませんでした + このドメインは検証できません。承認前にリクエスト内容をよく確認してください。 + ブラウザに戻り、WalletConnect経由で再度接続してください。 + WalletConnectセッションが接続解除されました + エラーコード: %s 。問題が解決しない場合は、お気軽にサポートまでお問い合わせください。 + 不明なエラーが発生しました + Tangemは現在%sで必要なネットワークをサポートしていません。 + サポートされていないネットワーク + Tangemは%sで必要なネットワークをサポートします。 + 検証済みドメイン + Tangemアプリで誤ったカードまたはリングが選択されました + 問題が起きています + 接続する + ネットワーク + ネットワーク + ウォレット + 接続されたネットワーク + ウォレットの残高とアクティビティを表示する + 通知なしに取引に署名する + 取引の承認をリクエストする + できなくなります + したい + 接続リクエスト 接続 すべての接続を解除する すべてのdAppsの接続解除に関するテキスト すべてのdAppを接続解除する + このウォレットのプロフィールに%sネットワークを追加する + ウォレットに必要なネットワークはありません 新しい接続 ウォレットを別のdAppに接続する セッションなし + このドメインは複数のセキュリティプロバイダーから安全でないとの警告を受けています。あなたの資産を守るため、直ちにアクセスを中止してください。 + 既知のセキュリティリスク + ウォレットコネクト 破棄 バックアップが中断されました。再開しますか? はい、再開します @@ -1171,4 +1265,7 @@ カードまたはリングをスキャン アプリにアクセスするには、 %sを使用するか、カードまたはリングをスキャンします お帰りなさい! + いいえ、すべて送信します + %s XTZを減らす + 次回ウォレットにチャージするときに手数料の増加を避けるには、金額を%s XTZ減らしてください。 diff --git a/core/res/src/main/res/values-ru/strings-blockchain.xml b/core/res/src/main/res/values-ru/strings-blockchain.xml deleted file mode 100644 index f589ed1f9f..0000000000 --- a/core/res/src/main/res/values-ru/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - По умолчанию - Устаревший - Не удалось получить комиссию - Из-за ограничений %1$s в одну транзакцию может поместиться только %2$d UTXO. Это означает, что вы можете отправить только %3$s или меньше. Вам нужно уменьшить сумму. - Недостаточно средств для совершения транзакции. Пожалуйста, пополните свой аккаунт. - Произошла ошибка. Код: %s. - Чтобы использовать сеть %1$s, вы должны оплатить резерв аккаунта (%2$s %3$s), который блокируется и не используется в вашем балансе - Аккаунт получателя не активирован. Отправьте %s или более для активации аккаунта. - Для создания аккаунта отправьте средства на этот адрес - Минимальная сумма: %s - Сдача слишком мала - Неверная комиссия - Минимальный баланс: %s - Аккаунт получателя не создан. Сумма для отправки должна быть %s + комиссия или больше - Неизвестная ошибка - Сумма превышает остаток - Недопустимая сумма - Комиссия превышает остаток - Отправляемая сумма превышает остаток - Нет, отправить все - Уменьшить на %s XTZ - Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ - diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index de090f81f6..a4e05ae190 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -21,6 +21,8 @@ Добавить токен Валюты Отправляйте только %1$s (%2$s) в сети %3$s на этот адрес. Использование другой сети может привести к утрате средств. + По умолчанию + Устаревший Как сканировать Обратиться в поддержку Попробовать снова @@ -85,6 +87,7 @@ Требования к транзакции Cardano Чтобы совершить транзакцию %1$s, внесите некоторую сумму ADA для покрытия сетевой комиссии и минимального значения ADA (рекомендуется 5 ADA) Недостаточно ADA для транзакции + Отправляемая сумма и сдача не могут быть меньше 1 ADA Вы должны поддерживать некоторое количество ADA, поскольку у вас на балансе есть токены в сети Cardano Недостаточно ADA Принять @@ -102,6 +105,7 @@ Баланс биометрическую аутентификацию биометрией + Не удалось создать транзакцию Купить Перейти на %1$s Вы не предоставили доступ к камере, пожалуйста, измените настройки конфиденциальности. @@ -141,6 +145,7 @@ Обозреватель Посмотреть историю транзакций Обозреватель + Не удалось получить комиссию Сетевые комиссии – это плата пользователя за обработку и подтверждение транзакций. Размер комиссии зависит от нагрузки на сеть, объема транзакции и приоритета исполнения. %s Быстро По рынку @@ -188,6 +193,7 @@ Выберите действие Продать Отправить + Не удалось отправить транзакцию Сервер недоступен, повторите попытку позднее Поделиться Поделиться ссылкой @@ -211,6 +217,7 @@ Произошла ошибка. Пожалуйста, попробуйте снова. Недоступно Завершить стейкинг + Из-за ограничений %1$s в одну транзакцию может поместиться только %2$d UTXO. Это означает, что вы можете отправить только %3$s или меньше. Вам нужно уменьшить сумму. неделю с Да @@ -267,6 +274,7 @@ Проверьте подключение с интернетом или переключитесь на другую сеть Условия использования Вы использовали карту или кольцо от другого кошелька. Приложите карту или кольцо, связанную с этим кошельком. + Недостаточно средств для совершения транзакции. Пожалуйста, пополните свой аккаунт. Мои токены У вас нет добавленных токенов. Добавьте токены для обмена Недоступен для обмена с %s @@ -345,6 +353,9 @@ Обращение в поддержку Tangem Не могу отправить транзакцию Ошибка в описании монеты + Произошла ошибка + Произошла ошибка. Код: %s. + Требуется memo Транзакция Укажите лимит доступа к выбранному токену Количество %s @@ -434,7 +445,7 @@ Все Опытные трейдеры - Рейтинг + Капитализация Сортировать по Лидеры роста Лидеры падения @@ -510,6 +521,13 @@ Потяните вверх или коснитесь поисковой строки, чтобы добавить токены напрямую из рынка Добавить токены Функция NFC недоступна на вашем устройстве + Чтобы использовать сеть %1$s, вы должны оплатить резерв аккаунта (%2$s %3$s), который блокируется и не используется в вашем балансе + Аккаунт получателя не активирован. Отправьте %s или более для активации аккаунта. + Для создания аккаунта отправьте средства на этот адрес + Аккаунт получателя не содержит трастлайна для отправляемого актива. + Присоединиться + Поделись промокодом — заработай 5 USDT с каждой покупки. Твои друзья получат скидку 10% на карту Tangem! + Получай бонусы за каждого друга! Установите единый код доступа для защиты всех ваших карт или колец Защита Установите индивидуальный код доступа для каждой карты или кольца позже. @@ -727,6 +745,12 @@ Код назначения Введите адрес Адрес совпадает с адресом кошелька + Минимальная сумма: %s + Минимальная сдача: %s + Неверная комиссия + Минимальный баланс: %s + Аккаунт получателя не создан. Сумма для отправки должна быть %s + комиссия или больше + Неизвестная ошибка Недопустимый Memo. Он не будет добавлен в транзакцию. Memo Проверьте своё интернет соединение @@ -784,7 +808,11 @@ включая комиссию сети в размере %1$s Транзакция успешно подписана и отправлена в блокчейн. Баланс будет обновлен через некоторое время %1$s — это монета в сети Tron. Чтобы рассчитать комиссию и совершить транзакцию, вам необходимо внести немного Tron (TRX) на свой адрес. + Сумма превышает остаток Для завершения транзакции на указанный адрес необходим тег назначения (мемо). + Недопустимая сумма + Комиссия превышает остаток + Отправляемая сумма превышает остаток Транзакция отправлена Подготовьтесь к сканированию кольца или карты, которую вы хотите настроить. Забыть кошелек @@ -853,6 +881,9 @@ Рестейк позволяет вам переместить средства из одного валидатора в другого без необходимости выхода из стейкинга. Вы собираетесь застейкать весь баланс, рекомендуем оставить небольшую сумму для оплаты комиссии сети при выходе из стейкинга или получении награды. Чтобы начать стейкинг в TON, сначала осуществите исходящую транзакцию на любую сумму — это активирует ваш кошелек. + В дополнение к сетевой комиссии может потребоваться до 0.2 TON для завершения всех этапов транзакции. Неиспользованная часть будет возвращена после выполнения. + Для выполнения операции требуется дополнительно 0.2 TON, помимо сетевой комиссии. Пожалуйста, пополните баланс. + Зарезервировано 0.2 TON Разблокируйте свои средства, чтобы вывести их из стейкинга. Разблокировка займёт %s. Ваши средства будут доступны для использования после 21-дневного периода отзыва. Награда будет выведена вместе с вашими выводими средствами. Ваши средства будут доступны после %s периода отзыва. @@ -914,7 +945,7 @@ Используйте его на ходу, в любом месте, в любое время. Без проводов и батареек. Как только понадобится крипта, просто приложите карту или кольцо к телефону. Кошелек для каждого Встречайте Tangem - Обменивайте, покупайте NFT, получайте займы и делайте вклады в более чем 100 различных децентрализованных сервисах + Более 100 децентрализованных сервисов уже доступны для интеграции Поддержка Web 3.0 Для отправки требуется входящая транзакция на сумму не менее %1$s Недостаточно средств @@ -969,7 +1000,7 @@ Скрыть %s Скрыть токен Стейкинг позволяет вам зарабатывать %1$s и получать вознаграждения каждые %2$s дней - Зарабатывайте до %s вознаграждений за стейкинг ежегодно + Сервис стейкинга %1$s токен в сети %%image%% %2$s Токен в сети %%image%% %1$s Токен %1$s (%2$s) является основной валютой в сети %3$s и не может быть скрыт до тех пор, пока у вас в списке есть другие токены этой сети @@ -1020,6 +1051,7 @@ Переименование кошелька Разблокировать все Разблокировать все с %s + ПИН не принят. Попробуйте ещё раз или введите другой код. Блокчейн недоступен. Попробуйте позже. Отсканируйте карту или кольцо Этот кошелек уже был активирован ранее.\nЕсли это сделали не вы, свяжитесь со службой поддержки.\nTangem никогда не продает кошелек вместе с предустановленным кодом доступа. @@ -1163,4 +1195,7 @@ Сканировать карту или кольцо Используйте %s или отсканируйте карту либо кольцо для входа в приложение C возвращением! + Нет, отправить все + Уменьшить на %s XTZ + Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ diff --git a/core/res/src/main/res/values-uk-rUA/strings-blockchain.xml b/core/res/src/main/res/values-uk-rUA/strings-blockchain.xml deleted file mode 100644 index d2c3ed6cdf..0000000000 --- a/core/res/src/main/res/values-uk-rUA/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - За замовчуванням - Застарілий - Не вдалося отримати комісію - Через обмеження %1$s в одну транзакцію може поміститися тільки %2$d UTXO. Це означає, що ви можете відправити тільки %3$s або менше. Вам потрібно зменшити суму. - Недостатньо коштів для здійснення транзакції. Будь ласка, поповніть свій акаунт. - Виникла помилка. Код: %s. - Щоб користуватися мережею %1$s, ви маєте оплатити резерв акаунта (%2$s %3$s), який блокується і не використовується у вашому балансі - Обліковий запис одержувача не активовано. Надішліть %s або більше, щоб активувати обліковий запис. - Для створення акаунту надішліть кошти на цю адресу - Мінімальна сума: %s - Решта занадто мала - Невірна комісія - Мінімальний баланс: %s - Обліковий запис одержувача не створено. Сума для переказу повинна бути %s + комісія або більше - Невідома помилка - Сума перевищує залишок - Недопустима сума - Комісія перевищує залишок - Сума, що відправляється, перевищує залишок - Ні, відправити все - Зменшити на %s XTZ - Щоб не платити підвищену комісію при наступному поповненні гаманця, зменште суму на %s XTZ - diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 4b6a67ab8c..06a4c50786 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -21,6 +21,8 @@ Додати токен Токени Надсилайте тільки %1$s (%2$s) в мережі %3$s на цю адресу. Використання іншої мережі може призвести до втрати коштів. + За замовчуванням + Застарілий Як сканувати Звернутися в підтримку Спробуйте ще раз @@ -85,6 +87,7 @@ Вимоги до транзакції Cardano Щоб здійснити транзакцію %1$s, внесіть певну суму ADA для покриття мережевої комісії та мінімальне значення ADA (рекомендовано 5 ADA) Недостатньо ADA для транзакції + Сума і решта, що відправляються, не можуть бути меншими за 1 ADA Ви повинні утримувати деяку кількість ADA, оскільки у вас на балансі є токени в мережі Cardano Недостатньо ADA Прийняти @@ -102,6 +105,7 @@ Баланс біометричну автентифікацію біометрії + Не вдалося створити транзакцію Купити Перейдіть до %1$s Ви не надали доступ до камери, будь ласка, змініть налаштування конфіденційності @@ -141,6 +145,7 @@ Оглядач Переглянути історію транзакцій Оглядач + Не вдалося отримати комісію Мережеві комісії – це збори, які користувачі сплачують за обробку та підтвердження транзакцій. На розмір комісії може впливати перевантаження мережі, розмір транзакції та пріоритет виконання. %s Швидко За ринком @@ -188,6 +193,7 @@ Оберіть дію Продати Надіслати + Не вдалося надіслати транзакцію Сервер недоступний, спробуйте пізніше Поширити Поділитися посиланням @@ -211,6 +217,7 @@ Виникла помилка. Будь ласка, спробуйте ще раз. Недоступно Скасувати стейкінг + Через обмеження %1$s в одну транзакцію може поміститися тільки %2$d UTXO. Це означає, що ви можете відправити тільки %3$s або менше. Вам потрібно зменшити суму. тиждень з Так @@ -267,6 +274,7 @@ Перевірте підключення до інтернету або змініть мережу Умови використання Ви використали картку або кільце від іншого гаманця. Прикладіть картку або кільце, пов\'язану з цим гаманцем. + Недостатньо коштів для здійснення транзакції. Будь ласка, поповніть свій акаунт. Мої токени У вас немає доданих токенів. Додайте токени для обміну Недоступний для обміну з %s @@ -346,6 +354,9 @@ Звернення в підтримку Tangem Не вдається відправити транзакцію Помилка в описі монети + Виникла помилка + Виникла помилка. Код: %s. + Вимагається memo Транзакція Вкажіть ліміт доступу для обраного токена Кількість %s @@ -370,7 +381,7 @@ Ви оновили дані біометрії, відскануйте свою картку або кільце для входу Ваш баланс повинен перевищувати суму комісії для здійснення переказу Недостатньо балансу - У вас недостатньо Mana для цієї транзакції. Будь ласка, зачекайте, поки Mana буде поповнена. Ваш баланс Mana становить %1$s/%2$s + У вас недостатньо Мани для цієї транзакції. Будь ласка, зачекайте, поки Мана поповниться. Ваш баланс мани дорівнює %1$s/%2$s Недостатньо Mana Ви можете переказати тільки %s через обмеження Mana, встановлене мережею Koinos Ліміт Mana @@ -511,6 +522,10 @@ Потягніть вгору або торкніться панелі пошуку, щоб додати токени безпосередньо з маркету Додати токени Функція NFC недоступна на вашому пристрої + Щоб користуватися мережею %1$s, ви маєте оплатити резерв акаунта (%2$s %3$s), який блокується і не використовується у вашому балансі + Обліковий запис одержувача не активовано. Надішліть %s або більше, щоб активувати обліковий запис. + Для створення акаунту надішліть кошти на цю адресу + Акаунт одержувача не містить трастлайну для активу, що надсилається. Налаштуйте єдиний код доступу для захисту всіх ваших карток або кілець Захист Встановіть індивідуальний код доступу для кожної картки або кільця пізніше. @@ -728,6 +743,12 @@ Тег призначення Введіть адресу Адреса збігається з адресою гаманця + Мінімальна сума: %s + Мінімальна решта: %s + Невірна комісія + Мінімальний баланс: %s + Обліковий запис одержувача не створено. Сума для переказу повинна бути %s + комісія або більше + Невідома помилка Недопустимий Memo. Він не буде доданий до транзакції. Memo Перевірте підключення до мережі @@ -785,8 +806,12 @@ включно з комісією мережі %1$s Транзакція успішно підписана і відправлена до блокчейну. Баланс гаманця буде оновлено через деякий час %1$s — це монета у мережі Tron. Щоб розрахувати комісію та здійснити транзакцію, вам необхідно внести певну кількість Tron (TRX) на свій рахунок. + Сума перевищує залишок Тег призначення (memo) потрібен для завершення цієї транзакції для вказаної адреси. Тег призначення обов\'язковий + Недопустима сума + Комісія перевищує залишок + Сума, що відправляється, перевищує залишок Трансакцію надіслано Підготуйтеся до сканування кільця або картки, яку ви хочете налаштувати. Забути гаманець @@ -917,7 +942,7 @@ Використовуйте його в дорозі, будь-де і будь-коли. Ніяких дротів чи батарейок. Просто прикладіть картку або кільце до телефону, коли вам потрібна криптовалюта. Гаманець для кожного Зустрічайте Tangem - Обмінюйте, купуйте NFT, отримуйте позики та робіть депозити у понад 100 різних децентралізованих сервісах + Доступно понад 100 інтеграцій з децентралізованими сервісами Web 3.0 сумісність Для відправки потрібна вхідна транзакція на суму не менше %1$s Недостатньо коштів @@ -972,7 +997,7 @@ Приховати %s Приховати токен Стейкінг дозволяє заробляти %1$s і отримувати винагороду кожні %2$s днів - Заробляйте до %s винагород за стейкінг щороку + Сервіс стейкінгу %1$s токен в мережі %%image%% %2$s Токен у мережі %%image%% %1$s Токен %1$s (%2$s) є основною валютою в мережі %3$s і не може бути прихований до тих пір, поки у вас в списку є інші токени цієї мережі @@ -1166,4 +1191,7 @@ Сканувати картку або кільце Використовуйте %s або відскануйте картку або кільце для входу у додаток З поверненням! + Ні, відправити все + Зменшити на %s XTZ + Щоб не платити підвищену комісію при наступному поповненні гаманця, зменште суму на %s XTZ diff --git a/core/res/src/main/res/values-zh-rTW/strings-blockchain.xml b/core/res/src/main/res/values-zh-rTW/strings-blockchain.xml deleted file mode 100644 index 7545da58e5..0000000000 --- a/core/res/src/main/res/values-zh-rTW/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 默認 - 遺留資產 - 獲取費用失敗 - 由於 %1$s 的限制,只有%2$d UTXO 可以放入單次交易中。這意味著您只能發送%3$s或更少數量。您需要減少數量。 - 沒有足夠的資金進行交易。請先入金 - - - 目標帳戶未激活。發送 %s 或更多以激活帳戶 - 要創建帳戶,請將資金發送到此地址 - 最小數量是 %s - 更動太小 - 無效費用 - 最低餘額為 %s - 未創建目標帳戶。發送金額應為 %s + 費用或更多 - 未知錯誤 - 金額超出餘額 - 無效金額 - 費用超出餘額 - 總金額超出餘額 - 不,全部發送 - 減少 %s XTZ - 為避免下次給錢包充值時支付增加的佣金,請將金額減少 %s XTZ - diff --git a/core/res/src/main/res/values-zh-rTW/strings.xml b/core/res/src/main/res/values-zh-rTW/strings.xml index 814be67145..e1f37d9840 100644 --- a/core/res/src/main/res/values-zh-rTW/strings.xml +++ b/core/res/src/main/res/values-zh-rTW/strings.xml @@ -3,6 +3,8 @@ 添加自定義代幣 管理代幣 僅將 %1$s (%2$s) 從 %3$s 網絡發送到此地址。使用其他代幣和網絡可能會導致資金損失 + 默認 + 遺留資產 請求支持 再試一次 此功能不在展示模式中提供 @@ -36,6 +38,7 @@ 回復至原廠設置 安全模式 卡片設置 + 發送金額和找零不能少於1個ADA 接受 允許 注意 @@ -43,6 +46,7 @@ 餘額 生物識別 生物 + 建立交易失敗 購買 您尚未授予相機訪問權限,請更改您的隱私設置 删除 @@ -58,6 +62,7 @@ 允許 啟用 錯誤 + 獲取費用失敗 導入 進行中 網路費 @@ -73,6 +78,7 @@ 選擇 銷售 發送 + 發送交易失敗 伺服器不可用,請稍後在試 分享 簽署 @@ -85,6 +91,7 @@ 交易 我了解 無法觸達 + 由於 %1$s 的限制,只有%2$d UTXO 可以放入單次交易中。這意味著您只能發送%3$s或更少數量。您需要減少數量。 已複製代幣地址 支持的網路 @@ -121,6 +128,7 @@ 檢查您的網路連接或切換到其他網絡 服務條款 您使用了另一個錢包中的卡。點按與此錢包關聯的卡片 + 沒有足夠的資金進行交易。請先入金 以下信息是可選的。如果不想共享,可以將其刪除 告訴我們您缺少哪些功能,我們會盡力幫助您 請告訴我們你有什麼卡 @@ -131,6 +139,8 @@ 反饋 Tangem反饋 無法發送交易 + An error occurred + 需要memo 數量 %s 要繼續,您需要允許 %1s 智能合約使用您的 %2s 賦予權限 @@ -146,6 +156,9 @@ 要訪問所有的網路您需要掃描卡片 掃描卡片 代幣 + 目標帳戶未激活。發送 %s 或更多以激活帳戶 + 要創建帳戶,請將資金發送到此地址 + 目標帳戶沒有用於發送資產的 trustline 保護 您可以稍後在每張卡上設置單獨的訪問密碼 個人化 @@ -255,10 +268,20 @@ 準備好您的卡! 數量 地址與錢包地址相同 + 最小數量是 %s + 最小變化是 %s + 無效費用 + 最低餘額為 %s + 未創建目標帳戶。發送金額應為 %s + 費用或更多 + 未知錯誤 Memo無效。 它不會被添加到交易中 Memo 最大值 交易已成功簽署並發送至區塊鏈節點。錢包餘額稍後更新 + 金額超出餘額 + 無效金額 + 費用超出餘額 + 總金額超出餘額 安全地存儲您的加密貨幣,同時將私鑰保存在您的卡中 創新式的硬體錢包 最多 3張實體卡片 到一個錢包 @@ -358,4 +381,7 @@ 掃描卡片 使用 %s 或掃描卡片以訪問該應用程序 歡迎回來! + 不,全部發送 + 減少 %s XTZ + 為避免下次給錢包充值時支付增加的佣金,請將金額減少 %s XTZ diff --git a/core/res/src/main/res/values/strings-blockchain.xml b/core/res/src/main/res/values/strings-blockchain.xml deleted file mode 100644 index ef4e2b2edb..0000000000 --- a/core/res/src/main/res/values/strings-blockchain.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - Default - Legacy - Failed to get fee - Due to %1$s limitations only %2$d UTXOs can fit in a single transaction. This means you can only send %3$s or less. You need to reduce the amount. - Not enough funds for the transaction. Please top up your account. - An error occurred. Code: %s. - To use the %1$s network, you must pay the account reserve (%2$s %3$s), which locks up and hides that amount indefinitely - Destination account is not active. Send %s or more to activate the account. - To create account send funds to this address - Minimum amount is %s - Change is too small - Invalid Fee - Minimum balance is %s - Target account is not created. Amount to send should be %s + fee or more - Unknown error - Amount exceeds balance - Invalid amount - Fee exceeds balance - Total amount exceeds balance - No, send all - Reduce by %s XTZ - To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ - diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 48b2496729..0e73021a1e 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -21,6 +21,8 @@ Add custom token Manage tokens Send only %1$s (%2$s) from %3$s network to this address. Using other tokens and networks may result in loss of funds. + Default + Legacy How to scan Request support Try again @@ -83,6 +85,7 @@ Cardano transaction requirements To make a %1$s transaction, you must deposit some ADA to cover the network fee and minimum ADA value (5 ADA recommended) Insufficient ADA for token transfer + Sent amount and change cannot be less than 1 ADA You must maintain some ADA because you have some tokens on the Cardano blockchain Not enough ADA Accept @@ -100,6 +103,7 @@ Balance biometric authentication biometrics + Failed to build transaction Buy Go to %1$s You have not given access to your camera, please adjust your privacy settings @@ -110,13 +114,14 @@ Claim rewards Close Confirm + Contact Tangem Support + Contact Visa Support Continue Copy Copy address Create %1$s (%2$s) Custom - NFT %d day %d days @@ -136,6 +141,7 @@ Explore Explore transaction history Explorer + Failed to get fee Network fees are charges users pay to process and confirm transactions. The fee amount can be affected by network congestion, transaction size, and execution priority. %s Fast Market @@ -157,6 +163,7 @@ Network fee Amount sent will be reduced by %1$s (%2$s) to cover the selected fee level Next + NFT No No address Now @@ -184,6 +191,7 @@ Select action Sell Send + Failed to send transaction The server is not available, please try again later Share Share Link @@ -208,6 +216,7 @@ There was an error. Please try again. Unreachable Unstake + Due to %1$s limitations only %2$d UTXOs can fit in a single transaction. This means you can only send %3$s or less. You need to reduce the amount. week with Yes @@ -264,6 +273,7 @@ Check your internet connection or switch to a different network Terms of service You have used a card or ring from another wallet. Tap the card or ring associated with this wallet + Not enough funds for the transaction. Please top up your account. My tokens You haven\'t added any tokens yet. Add tokens via Market to swap Cannot be swapped for %s @@ -301,6 +311,7 @@ Awaiting deposit Awaiting deposit... Refunded + Refunding Sending to you Sending to you... Sent @@ -309,11 +320,11 @@ Verification required Awaiting transaction hash List of all tokens added to your wallet - Fetching best rates... + Fetching current rates... Floating rate By using swap functionality, you agree with provider’s %s By using swap functionality, you agree with provider’s %1$s and %2$s - More providers are coming soon.\nStay tuned! + More providers will be available soon Provider Best rate Available up to %s @@ -343,6 +354,9 @@ Tangem feedback Can\'t send a transaction Coin description error + An error occurred + An error occurred. Code: %s. + Requires memo Transaction Specify the approve limit for the selected token Amount %s @@ -406,6 +420,7 @@ This asset is currently not supported in the wallet This asset is not available for this wallet Add + APY %s Available networks My portfolio Market @@ -430,11 +445,13 @@ 7d All Experienced buyers - Rating + Capitalization Sort By Top Gainers Top Losers Trending + Staking is the easiest way to receive rewards on your crypto. + Earn up to %s APY About %s %d exchange @@ -479,9 +496,9 @@ Market cap The total market value of a cryptocurrency, calculated by multiplying the current price of the coin by the total number of coins in circulation Market cap - Market rating + Market position Position in crypto rating between all coins based on market capitalization - Market rating + Market position Max supply The maximum number of coins or tokens that can ever exist for a particular cryptocurrency Max supply @@ -502,6 +519,8 @@ Pull this up or tap the search bar to add tokens directly from the market Add tokens NFC is not available on your device + About NFT + NFT asset %d item %d items @@ -512,27 +531,37 @@ NFT collections Some data may not load Temporary loading problems + Base information + Chain + Contract Address + Last sale price + Rarity label + Rarity rank + Token Address + Token ID + Token Standard + Traits No results. Please try another request. + No collection + Available + Choose network Receive NFT - To My wallet + You haven\'t added this network yet. To start receiving NFTs, add it to the main screen! + Network not added + Not Added + Send NFT + Traits %1$d NFTs in %2$d collection Tap here to receive first NFT NFT collections Unable to load the data - Choose network + To use the %1$s network, you must pay the account reserve (%2$s %3$s), which locks up and hides that amount indefinitely + Destination account is not active. Send %s or more to activate the account. + To create account send funds to this address + The destination account does not have a trustline for the asset being sent. Join Now Share your code - earn 5 USDT per sale. Your friend gets 10% OFF. Get REWARDS for every friend! - Last sale price - Rarity label - Rarity rank - Traits - Base information - Token Standard - Contract Address - Token ID - Token Address - Chain Set up a single access code to protect all your devices. Protect Set an individual access code for each card or ring later. @@ -743,6 +772,12 @@ Destination Tag Enter address Address is the same as wallet address + Minimum amount is %s + Minimum change is %s + Invalid Fee + Minimum balance is %s + Target account is not created. Amount to send should be %s + fee or more + Unknown error Invalid Memo. It won\'t be added to the transaction. Memo Check your network connection @@ -800,8 +835,12 @@ including a network fee of %1$s Transaction has been successfully signed and sent to the blockchain node. Wallet balance will be updated in a while %1$s is an asset in the Tron network. To calculate the fee and make a transaction you need to deposit some Tron (TRX) in your account. + Amount exceeds balance A destination tag (memo) is required to complete this transaction for the specified address. Destination Tag Required + Invalid amount + Fee exceeds balance + Total amount exceeds balance Transaction sent Prepare to scan card or ring you want to set up. Forget wallet @@ -812,16 +851,16 @@ Unstaking amount will be rounded to %1$s TRX due to network rules. Claim unstaked Stake account fee - A staking account is a special account where staked SOL tokens are stored. It is created when you delegate your tokens to a validator to participate in transaction validation and earn rewards. A small fee is charged for creating the staking account, which is returned after the staking is completed. + A staking account is a special account where staked SOL tokens are stored. It is created when you delegate your tokens to a validator to participate in transaction validation and receive rewards. A small fee is charged for creating the staking account, which is returned after the staking is completed. Annual percentage rate The annual percentage return you can earn from participating in staking. APR Rewards automatically accumulate in your staking balance daily. Available Average Reward Rate - What is Staking? + How Staking Works? %s est. profit - Market rating + Market position Metrics According to %1$s network rules, claims are possible from %2$s. Amounts below will be credited to your account upon unstaking. Minimum Requirement @@ -847,15 +886,15 @@ When staking on the Cardano network, your entire balance is used. An additional 2 ADA will be reserved and returned after unstaking. Your ADA remains unlocked while staking. ADA Staking Details Earned rewards will be sent to your wallet and available for use immediately - Stake securely and start earning your rewards - Stake securely and start earning daily rewards - Stake securely and start earning hourly rewards - Stake securely and start earning monthly rewards - Staking allows you to earn %1$s. Your staking rewards arrive every day. - Staking allows you to earn %1$s. Your staking rewards arrive every hour. - Staking allows you to earn %1$s. Your staking rewards arrive every month. - Staking allows you to earn %1$s. Your staking rewards arrive every week. - Stake securely and start earning weekly rewards + Stake securely and start receiving your rewards + Stake securely and start receiving daily rewards + Stake securely and start receiving hourly rewards + Stake securely and start receiving monthly rewards + Staking allows you to receive %1$s. Your staking rewards arrive every day. + Staking allows you to receive %1$s. Your staking rewards arrive every hour. + Staking allows you to receive %1$s. Your staking rewards arrive every month. + Staking allows you to receive %1$s. Your staking rewards arrive every week. + Stake securely and start receiving weekly rewards Earn staking rewards Your remaining staked balance will be too low to unstake. You’ll need to stake more to meet the minimum unstake amount. Low staked balance @@ -871,6 +910,11 @@ Restake lets you move your funds from one validator to another without the need to unstake You’re about to stake your entire balance. We recommend leaving a small amount to cover network fees for unstaking or claiming rewards. To start staking in TON, first make an outgoing transaction of any amount — this will activate your wallet. + In addition to the network fee, up to 0.2 TON is needed to complete all steps of the transaction. Unused amount will be returned after it\'s finished. + 0.2 TON is required to proceed with this operation, in addition to the network fee. Please top up your balance. + 0.2 Ton Reserved + This action will close other positions or switch them to withdrawal status, according to network rules. + Positions status Unlock your money to withdraw it from staking process. Unlocking takes %s. Your funds will be available for use after the 21-day unbonding period. Reward will be withdrawn along with your unstaking funds. Your funds will be available for use after the %s unbonding period. @@ -932,7 +976,7 @@ Use it on the go, anywhere, anytime. No wires or batteries. Just tap the card or ring to your phone when you need your crypto. The Wallet for Everyone Meet Tangem - Exchange, buy NFT\'s, make loans and deposits in more than 100 different decentralized services + More than 100 decentralized service integrations are available Web 3.0 Compatible An incoming transaction of at least %1$s is required to proceed Insufficient funds @@ -986,8 +1030,8 @@ You are about to hide this token from the main screen. You can add it back anytime through the manage tokens page. Hide %s Hide token - Staking allows you to earn %1$s and get rewards every %2$s days - Earn up to %s staking rewards yearly + Staking allows you to receive %1$s and get rewards every %2$s days + Staking Service %1$s token in %%image%% %2$s network Token in %%image%% %1$s network The %1$s (%2$s) token is the main currency on the %3$s network and cannot be hidden as long as you have other tokens on this network in the list @@ -1070,6 +1114,7 @@ Set up a 4-digit code. 
It will be used for payments. PIN code Create PIN Code + PIN was not accepted. Try again or use a different code. Invalid PIN: avoid sequences or repeats You\'re good to go! Prepare the Tangem card and tap to approve @@ -1101,6 +1146,7 @@ Transaction request Transaction status Type + Dispute this transaction Unlock Scan your card to unlock access Needed unlock @@ -1234,13 +1280,44 @@ This is a Testnet card. It cannot process transactions and should only be used for testing and development purposes. For testing purposes only Balance may be outdated. Refresh the page. + Unknown domain + Connect anyway + Timeout error. Please, try again later. + Failed to establish WalletConnect + This domain cannot be verified. Check the request carefully approving. + Go back to your browser and connect via WalletConnect again. + WalletConnect session was disconnected + Error code: %s. If the problem persists — feel free to contact our support. + We\'ve encountered unknown error + Tangem does not currently support a required network by %s. + Unsuported networks + Tangem support a required network by %s. + Verified domain + Wrong card or ring selected in Tangem App + We\'ve got some kind of problem + Connect + Network + Networks + Wallet + Connected networks + View your wallet balance and activity + Sign transactions without your notice + Request approval for transactions + Will not be able to + Would like to + Connection request Connections Disconnect all Text about discnected all dApps Disconect All dApps + Add the %s network to your profile for this wallet + The wallet has no required networks New connection Connect your wallet to a different dApps No sessions + This domain is flagged as unsafe by multiple security providers. Leave immediately to protect your assets + Known security risk + Wallet connect Discard You have an interrupted backup. Do you want to resume? Yes, resume @@ -1252,4 +1329,7 @@ Scan card or ring Use %s or scan a card or ring to access the app Welcome back! + No, send all + Reduce by %s XTZ + To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ diff --git a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt index 1fdbc68282..87ea3f6639 100644 --- a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt +++ b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt @@ -8,12 +8,11 @@ import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getSyncOrDefault import com.tangem.datasource.local.preferences.utils.store import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.domain.settings.usercountry.models.GB_COUNTRY import com.tangem.domain.settings.usercountry.models.UserCountry import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.util.Locale @@ -108,15 +107,11 @@ internal class DefaultSettingsRepository( appPreferencesStore.store(key = PreferencesKeys.SHOULD_SHOW_MARKETS_TOOLTIP_KEY, value = !value) } - override suspend fun getUserCountryCodeSync(): UserCountry? { + override fun getUserCountryCodeSync(): UserCountry? { // If user country code is already set, return it val countryCode = userCountryFlow.value if (countryCode != null) return countryCode - coroutineScope { - launch { fetchUserCountryCode() } - } - return null } @@ -125,6 +120,12 @@ internal class DefaultSettingsRepository( override suspend fun fetchUserCountryCode() { Timber.i("Start fetching user country code") + // for GB locale avoid request geo and use device default (FCA fixes) + if (Locale.getDefault().country == GB_COUNTRY.code) { + userCountryFlow.value = GB_COUNTRY + return + } + withContext(dispatchers.io) { val country = runCatching { tangemTechApi.getUserCountryCode() } .fold( diff --git a/domain/promo/build.gradle.kts b/domain/promo/build.gradle.kts index cefe592d97..61d5cb9d12 100644 --- a/domain/promo/build.gradle.kts +++ b/domain/promo/build.gradle.kts @@ -6,6 +6,7 @@ plugins { dependencies { implementation(projects.domain.promo.models) implementation(projects.domain.wallets.models) + implementation(projects.domain.settings) implementation(deps.kotlin.coroutines) implementation(deps.arrow.core) diff --git a/domain/promo/src/main/java/com/tangem/domain/promo/GetStoryContentUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/GetStoryContentUseCase.kt index 786f1e9552..03a93bc23a 100644 --- a/domain/promo/src/main/java/com/tangem/domain/promo/GetStoryContentUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/GetStoryContentUseCase.kt @@ -4,21 +4,49 @@ import arrow.core.Either import arrow.core.left import arrow.core.right import com.tangem.domain.promo.models.StoryContent -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.catch -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onEmpty +import com.tangem.domain.promo.models.StoryContentIds +import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions +import kotlinx.coroutines.flow.* +import kotlin.time.Duration.Companion.seconds class GetStoryContentUseCase( private val promoRepository: PromoRepository, + private val settingsRepository: SettingsRepository, ) { - operator fun invoke(id: String): Flow> = promoRepository.getStoryById(id) - .map> { it.right() } - .catch { emit(it.left()) } - .onEmpty { emit(null.right()) } + operator fun invoke(id: String): Flow> { + return isFCAAllowed(id).transform { isAllowed -> + if (isAllowed) { + emitAll( + promoRepository.getStoryById(id) + .map> { it.right() } + .catch { emit(it.left()) } + .onEmpty { emit(null.right()) }, + ) + } else { + emit(null.right()) + } + } + } suspend fun invokeSync(id: String, refresh: Boolean = false): Either = Either.catch { - promoRepository.getStoryByIdSync(id, refresh) + val isFCAAllowed = isFCAAllowed(id).firstOrNull() ?: false + return@catch if (isFCAAllowed) { + promoRepository.getStoryByIdSync(id, refresh) + } else { + null + } + } + + private fun isFCAAllowed(id: String): Flow { + return if (id == StoryContentIds.STORY_FIRST_TIME_SWAP.id) { + settingsRepository.getUserCountryCode() + .filterNotNull() + .timeout(5.seconds) + .map { !it.needApplyFCARestrictions() } + } else { + flowOf(true) + } } } \ No newline at end of file diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt index 047947701d..23b4a1756c 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt +++ b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt @@ -34,7 +34,7 @@ interface SettingsRepository { suspend fun setMarketsTooltipShown(value: Boolean) - suspend fun getUserCountryCodeSync(): UserCountry? + fun getUserCountryCodeSync(): UserCountry? fun getUserCountryCode(): StateFlow diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/GetUserCountryUseCase.kt b/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/GetUserCountryUseCase.kt index cabd6677a9..3e7f731735 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/GetUserCountryUseCase.kt +++ b/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/GetUserCountryUseCase.kt @@ -31,7 +31,7 @@ class GetUserCountryUseCase( } } - suspend fun invokeSync(): Either { + fun invokeSync(): Either { return either { val userCountryCode = catch( block = { settingsRepository.getUserCountryCodeSync() }, diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/models/UserCountry.kt b/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/models/UserCountry.kt index e212b96917..c83164f088 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/models/UserCountry.kt +++ b/domain/settings/src/main/java/com/tangem/domain/settings/usercountry/models/UserCountry.kt @@ -1,5 +1,7 @@ package com.tangem.domain.settings.usercountry.models +import java.util.Locale + /** * User country * @@ -10,4 +12,12 @@ sealed class UserCountry(open val code: String) { data object Russia : UserCountry("ru") data class Other(override val code: String) : UserCountry(code) -} \ No newline at end of file +} + +fun UserCountry?.needApplyFCARestrictions(): Boolean { + val local = Locale.getDefault().country + if (local == GB_COUNTRY.code) return true + return this?.code.equals(GB_COUNTRY.code, ignoreCase = true) +} + +val GB_COUNTRY = UserCountry.Other(Locale.UK.country) \ No newline at end of file diff --git a/features/markets/impl/build.gradle.kts b/features/markets/impl/build.gradle.kts index 87db7e37d6..fded1c34bc 100644 --- a/features/markets/impl/build.gradle.kts +++ b/features/markets/impl/build.gradle.kts @@ -33,6 +33,7 @@ dependencies { implementation(projects.domain.tokens.models) implementation(projects.domain.wallets) implementation(projects.domain.wallets.models) + implementation(projects.domain.settings) // FIXME [REDACTED_TASK_KEY] // Remove the "Buy" and "Sell" actions from the redux middleware. diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt index 3ba4dd807e..5e4e7a4d4d 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt @@ -26,6 +26,9 @@ import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.feedback.models.FeedbackEmailType import com.tangem.domain.markets.* +import com.tangem.domain.settings.usercountry.GetUserCountryUseCase +import com.tangem.domain.settings.usercountry.models.UserCountry +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.features.markets.details.MarketsTokenDetailsComponent import com.tangem.features.markets.details.impl.analytics.MarketDetailsAnalyticsEvent import com.tangem.features.markets.details.impl.model.converters.DescriptionConverter @@ -49,6 +52,7 @@ import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import org.joda.time.DateTime import java.math.BigDecimal +import java.util.Locale import javax.inject.Inject @Suppress("LargeClass", "LongParameterList") @@ -66,9 +70,11 @@ internal class MarketsTokenDetailsModel @Inject constructor( private val urlOpener: UrlOpener, private val analyticsEventHandler: AnalyticsEventHandler, private val excludedBlockchains: ExcludedBlockchains, + private val getUserCountryUseCase: GetUserCountryUseCase, ) : Model() { private var quotesJob = JobHolder() + private var userCountry: UserCountry? = null private val params = paramsContainer.require() private val analyticsEventBuilder = MarketDetailsAnalyticsEvent.EventBuilder(token = params.token) @@ -121,6 +127,9 @@ internal class MarketsTokenDetailsModel @Inject constructor( ), ) }, + needApplyFCARestrictions = Provider { + userCountry.needApplyFCARestrictions() + }, // ================== ) @@ -130,6 +139,9 @@ internal class MarketsTokenDetailsModel @Inject constructor( // === Analytics === analyticsEventHandler.send(analyticsEventBuilder.readMoreClicked()) }, + needApplyFCARestrictions = Provider { + userCountry.needApplyFCARestrictions() + }, onGeneratedAINotificationClick = { modelScope.launch { sendFeedbackEmailUseCase( @@ -231,6 +243,8 @@ internal class MarketsTokenDetailsModel @Inject constructor( private val loadChartJobHolder = JobHolder() init { + userCountry = getUserCountryUseCase.invokeSync().getOrNull() + ?: UserCountry.Other(Locale.getDefault().country) // reload screen if currency changed modelScope.launch { currentAppCurrency diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/DescriptionConverter.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/DescriptionConverter.kt index e2e8e6f985..f1e55176d1 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/DescriptionConverter.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/DescriptionConverter.kt @@ -8,15 +8,18 @@ import com.tangem.domain.markets.TokenMarketInfo import com.tangem.features.markets.details.impl.ui.state.InfoBottomSheetContent import com.tangem.features.markets.details.impl.ui.state.MarketsTokenDetailsUM import com.tangem.features.markets.impl.R +import com.tangem.utils.Provider import com.tangem.utils.converter.Converter @Stable internal class DescriptionConverter( private val onReadModeClicked: (InfoBottomSheetContent) -> Unit, private val onGeneratedAINotificationClick: () -> Unit, + private val needApplyFCARestrictions: Provider, ) : Converter { override fun convert(value: TokenMarketInfo): MarketsTokenDetailsUM.Description? { + if (needApplyFCARestrictions()) return null return value.shortDescription?.let { desc -> MarketsTokenDetailsUM.Description( shortDescription = stringReference(desc), diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/TokenMarketInfoConverter.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/TokenMarketInfoConverter.kt index 85c354906a..8f67567773 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/TokenMarketInfoConverter.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/TokenMarketInfoConverter.kt @@ -16,6 +16,7 @@ import com.tangem.utils.converter.Converter @Suppress("LongParameterList") internal class TokenMarketInfoConverter( private val appCurrency: Provider, + private val needApplyFCARestrictions: Provider, private val onInfoClick: (TangemBottomSheetConfigContent) -> Unit, private val onListedOnClick: (Int) -> Unit, onSecurityScoreInfoClick: (SecurityScoreBottomSheetContent) -> Unit, @@ -49,9 +50,19 @@ internal class TokenMarketInfoConverter( ) val exchangesAmount = value.exchangesAmount + val insights = if (needApplyFCARestrictions()) { + null + } else { + value.insights?.let { insightsConverter.convert(it) } + } + val securityScore = if (needApplyFCARestrictions()) { + null + } else { + value.securityData?.let { securityScoreConverter.convert(it) } + } return MarketsTokenDetailsUM.InformationBlocks( - insights = value.insights?.let { insightsConverter.convert(it) }, - securityScore = value.securityData?.let { securityScoreConverter.convert(it) }, + insights = insights, + securityScore = securityScore, metrics = value.metrics?.let { metricsConverter.convert(it) }, pricePerformance = value.pricePerformance?.let { pricePerformanceConverter.convert( diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/ui/NFTReceive.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/ui/NFTReceive.kt index 69acaeef22..56ad2eeddb 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/ui/NFTReceive.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/ui/NFTReceive.kt @@ -33,7 +33,6 @@ internal fun NFTReceive(state: NFTReceiveUM, modifier: Modifier = Modifier) { onIconClicked = state.onBackClick, ), title = stringResourceSafe(id = R.string.nft_receive_title), - subtitle = stringResourceSafe(id = R.string.nft_receive_subtitle), ) }, content = { innerPadding -> diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt index ea142aa30f..6a367639cb 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt @@ -21,6 +21,9 @@ import com.tangem.domain.onramp.analytics.OnrampAnalyticsEvent import com.tangem.domain.onramp.model.OnrampPaymentMethod import com.tangem.domain.onramp.model.OnrampProviderWithQuote import com.tangem.domain.onramp.model.error.OnrampError +import com.tangem.domain.settings.usercountry.GetUserCountryUseCase +import com.tangem.domain.settings.usercountry.models.UserCountry +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.paymentmethod.entity.PaymentMethodUM import com.tangem.features.onramp.providers.SelectProviderComponent @@ -37,6 +40,7 @@ import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber import java.math.BigDecimal +import java.util.Locale import javax.inject.Inject @Suppress("LongParameterList") @@ -48,6 +52,7 @@ internal class SelectProviderModel @Inject constructor( private val getOnrampSelectedPaymentMethodUseCase: GetOnrampSelectedPaymentMethodUseCase, private val getOnrampProviderWithQuoteUseCase: GetOnrampProviderWithQuoteUseCase, private val saveSelectedPaymentMethod: OnrampSaveSelectedPaymentMethod, + private val getUserCountryUseCase: GetUserCountryUseCase, paramsContainer: ParamsContainer, ) : Model() { @@ -56,7 +61,12 @@ internal class SelectProviderModel @Inject constructor( private val params: SelectProviderComponent.Params = paramsContainer.require() private val _state = MutableStateFlow(getInitialState()) + private var userCountry: UserCountry? = null + init { + userCountry = getUserCountryUseCase.invokeSync().getOrNull() + ?: UserCountry.Other(Locale.getDefault().country) + analyticsEventHandler.send(OnrampAnalyticsEvent.ProvidersScreenOpened) getPaymentMethods() getProviders(params.selectedPaymentMethod) @@ -202,7 +212,8 @@ internal class SelectProviderModel @Inject constructor( val rateDiff = bestProvider?.toAmount?.value?.let { bestRate -> BigDecimal.ONE - quote.toAmount.value / bestRate } - val isBestProvider = quote == bestProvider && hasBestProvider + val isBestProvider = + quote == bestProvider && hasBestProvider && !userCountry.needApplyFCARestrictions() val providerResult = SelectProviderResult.ProviderWithQuote( paymentMethod = quote.paymentMethod, provider = quote.provider, @@ -253,7 +264,7 @@ internal class SelectProviderModel @Inject constructor( onClick = { onProviderSelected( result = providerResult, - isBestRate = bestProvider == quote, + isBestRate = bestProvider == quote && !userCountry.needApplyFCARestrictions(), ) params.onDismiss() }, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt index 45ee5db07e..c4c8f072a3 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt @@ -117,7 +117,7 @@ internal class SetInitialDataStateTransformer( startText = TextReference.Res(R.string.staking_details_annual_percentage_rate), endText = getAprRange(validators), iconClick = { clickIntents.onInfoClick(InfoType.ANNUAL_PERCENTAGE_RATE) }, - isEndTextHighlighted = true, + isEndTextHighlighted = false, ) } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt index 99b5c966bd..ca16207365 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt @@ -16,8 +16,9 @@ import com.tangem.core.ui.format.bigdecimal.format import com.tangem.core.ui.format.bigdecimal.percent import com.tangem.core.ui.res.TangemTheme import com.tangem.features.staking.impl.R -import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.model.StakingClickIntents +import com.tangem.features.staking.impl.presentation.state.BalanceState +import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.utils.extensions.orZero @Composable @@ -37,16 +38,7 @@ internal fun StakingClaimRewardsValidatorContent( key(item.title.resolveReference() + index) { InputRowImageInfo( subtitle = item.title, - caption = combinedReference( - resourceReference(R.string.staking_details_apr), - annotatedReference { - appendSpace() - appendColored( - text = item.validator?.apr.orZero().format { percent() }, - color = TangemTheme.colors.text.accent, - ) - }, - ), + caption = item.getAprTextNeutral(), infoTitle = item.formattedFiatAmount, infoSubtitle = item.formattedCryptoAmount, imageUrl = item.validator?.image.orEmpty(), @@ -64,4 +56,26 @@ internal fun StakingClaimRewardsValidatorContent( } } } -} \ No newline at end of file +} + +/** + * For FCA fixes remove coloring for now + */ +@Suppress("UnusedPrivateMember") +@Composable +private fun BalanceState.getAprTextColored() = combinedReference( + resourceReference(R.string.staking_details_apr), + annotatedReference { + appendSpace() + appendColored( + text = validator?.apr.orZero().format { percent() }, + color = TangemTheme.colors.text.accent, + ) + }, +) + +@Composable +private fun BalanceState.getAprTextNeutral() = combinedReference( + resourceReference(R.string.staking_details_apr), + stringReference(" " + validator?.apr.orZero().format { percent() }), +) \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt index 5e8683d6a9..e984f97d3d 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt @@ -264,7 +264,7 @@ private fun ActiveStakingBlock( val (icon, iconTint) = balance.type.getIcon() InputRowImageInfo( subtitle = balance.title, - caption = balance.subtitle ?: balance.getAprText(), + caption = balance.subtitle ?: balance.getAprTextNeutral(), infoTitle = balance.formattedFiatAmount.orMaskWithStars(isBalanceHidden), infoSubtitle = balance.formattedCryptoAmount.orMaskWithStars(isBalanceHidden), imageUrl = balance.getImage(), @@ -301,8 +301,12 @@ private fun StakeButtonBlock(buttonState: NavigationButtonsState) { } } +/** + * For FCA fixes remove coloring for now + */ +@Suppress("UnusedPrivateMember") @Composable -private fun BalanceState.getAprText() = combinedReference( +private fun BalanceState.getAprTextColored() = combinedReference( resourceReference(R.string.staking_details_apr), annotatedReference { appendSpace() @@ -313,6 +317,12 @@ private fun BalanceState.getAprText() = combinedReference( }, ) +@Composable +private fun BalanceState.getAprTextNeutral() = combinedReference( + resourceReference(R.string.staking_details_apr), + stringReference(" " + validator?.apr.orZero().format { percent() }), +) + @Composable private fun BalanceType.getIcon() = when (this) { BalanceType.UNSTAKING -> R.drawable.ic_connection_18 to TangemTheme.colors.icon.accent diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt index a525deb6df..3c842275b6 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt @@ -27,11 +27,12 @@ import com.tangem.core.ui.format.bigdecimal.format import com.tangem.core.ui.format.bigdecimal.percent import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.domain.staking.model.stakekit.Yield import com.tangem.features.staking.impl.R +import com.tangem.features.staking.impl.presentation.model.StakingClickIntents import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.state.previewdata.ValidatorStatePreviewData import com.tangem.features.staking.impl.presentation.state.stub.StakingClickIntentsStub -import com.tangem.features.staking.impl.presentation.model.StakingClickIntents import com.tangem.utils.extensions.orZero /** @@ -62,16 +63,7 @@ internal fun StakingValidatorListContent( InputRowImageSelector( subtitle = stringReference(item.name), - caption = combinedReference( - resourceReference(R.string.staking_details_annual_percentage_rate), - annotatedReference { - appendSpace() - appendColored( - text = item.apr.orZero().format { percent() }, - color = TangemTheme.colors.text.accent, - ) - }, - ), + caption = item.getAprTextNeutral(), imageUrl = item.image.orEmpty(), isSelected = item == state.chosenValidator, onSelect = { clickIntents.onValidatorSelect(item) }, @@ -108,6 +100,28 @@ internal fun StakingValidatorListContent( } } +/** + * For FCA fixes remove coloring for now + */ +@Suppress("UnusedPrivateMember") +@Composable +private fun Yield.Validator.getAprTextColored() = combinedReference( + resourceReference(R.string.staking_details_annual_percentage_rate), + annotatedReference { + appendSpace() + appendColored( + text = apr.orZero().format { percent() }, + color = TangemTheme.colors.text.accent, + ) + }, +) + +@Composable +private fun Yield.Validator.getAprTextNeutral() = combinedReference( + resourceReference(R.string.staking_details_annual_percentage_rate), + stringReference(" " + apr.orZero().format { percent() }), +) + @Composable private fun RowScope.ValidatorLabel(isStrategicPartner: Boolean) { if (isStrategicPartner) { diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/ValidatorBlock.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/ValidatorBlock.kt index 3d5cc0310a..6e2d13e5e0 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/ValidatorBlock.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/ValidatorBlock.kt @@ -40,16 +40,30 @@ internal fun ValidatorBlock(validatorState: StakingStates.ValidatorState, isClic InputRowImageInfo( title = resourceReference(R.string.staking_validator), subtitle = stringReference(state.chosenValidator.name), - infoTitle = annotatedReference { - append(resourceReference(R.string.staking_details_apr).resolveReference()) - appendSpace() - appendColored( - text = state.chosenValidator.apr.orZero().format { percent() }, - color = TangemTheme.colors.text.accent, - ) - }, + infoTitle = state.getInfoTitleNeutral(), imageUrl = state.chosenValidator.image.orEmpty(), onImageError = { ValidatorImagePlaceholder() }, ) } -} \ No newline at end of file +} + +/** + * For FCA fixes remove coloring for now + */ +@Suppress("UnusedPrivateMember") +@Composable +private fun StakingStates.ValidatorState.Data.getInfoTitleColored() = combinedReference( + annotatedReference { + append(resourceReference(R.string.staking_details_apr).resolveReference()) + appendSpace() + appendColored( + text = chosenValidator.apr.orZero().format { percent() }, + color = TangemTheme.colors.text.accent, + ) + }, +) + +private fun StakingStates.ValidatorState.Data.getInfoTitleNeutral() = combinedReference( + resourceReference(R.string.staking_details_apr), + stringReference(" " + chosenValidator.apr.orZero().format { percent() }), +) \ No newline at end of file diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index ea78698ede..50b49d4df6 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -31,6 +31,9 @@ import com.tangem.domain.feedback.models.FeedbackEmailType import com.tangem.domain.promo.GetStoryContentUseCase import com.tangem.domain.promo.ShouldShowStoriesUseCase import com.tangem.domain.promo.models.StoryContentIds +import com.tangem.domain.settings.usercountry.GetUserCountryUseCase +import com.tangem.domain.settings.usercountry.models.UserCountry +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.domain.tokens.* import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.CryptoCurrencyStatus @@ -95,6 +98,7 @@ internal class SwapModel @Inject constructor( private val getMinimumTransactionAmountSyncUseCase: GetMinimumTransactionAmountSyncUseCase, private val shouldShowStoriesUseCase: ShouldShowStoriesUseCase, private val getStoryContentUseCase: GetStoryContentUseCase, + private val getUserCountryUseCase: GetUserCountryUseCase, getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, swapInteractorFactory: SwapInteractor.Factory, private val urlOpener: UrlOpener, @@ -145,6 +149,7 @@ internal class SwapModel @Inject constructor( private val lastAmount = mutableStateOf(INITIAL_AMOUNT) private val lastReducedBalanceBy = mutableStateOf(BigDecimal.ZERO) private var swapRouter: SwapRouter = SwapRouter(router = router) + private var userCountry: UserCountry? = null private val isUserResolvableError: (SwapState) -> Boolean = { it is SwapState.SwapError && @@ -163,10 +168,13 @@ internal class SwapModel @Inject constructor( get() = swapRouter.currentScreen init { + userCountry = getUserCountryUseCase.invokeSync().getOrNull() + ?: UserCountry.Other(Locale.getDefault().country) modelScope.launch { initStories() swapRouter.openScreen(SwapNavScreen.PromoStories) } + modelScope.launch(dispatchers.io) { val fromStatus = getCryptoCurrencyStatusUseCase(userWalletId, initialCurrencyFrom.id).getOrNull() val toStatus = initialCurrencyTo?.let { getCryptoCurrencyStatusUseCase(userWalletId, it.id).getOrNull() } @@ -441,6 +449,7 @@ internal class SwapModel @Inject constructor( isNeedBestRateBadge = dataState.lastLoadedSwapStates.consideredProvidersStates().size > 1, selectedFeeType = dataState.selectedFee?.feeType ?: FeeType.NORMAL, isReverseSwapPossible = isReverseSwapPossible(), + needApplyFCARestrictions = userCountry.needApplyFCARestrictions(), ) if (uiState.notifications.any { it is SwapNotificationUM.Error.UnableToCoverFeeWarning }) { analyticsEventHandler.send( diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index f177785284..4be56e4101 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -253,6 +253,7 @@ internal class StateBuilder( isNeedBestRateBadge: Boolean, selectedFeeType: FeeType, isReverseSwapPossible: Boolean, + needApplyFCARestrictions: Boolean, ): SwapStateHolder { if (uiStateHolder.sendCardData !is SwapCardState.SwapCardData) return uiStateHolder if (uiStateHolder.receiveCardData !is SwapCardState.SwapCardData) return uiStateHolder @@ -346,6 +347,7 @@ internal class StateBuilder( ChangeCardsButtonState.DISABLED }, providerState = swapProvider.convertToContentClickableProviderState( + needApplyFCARestrictions = needApplyFCARestrictions, isBestRate = bestRatedProviderId == swapProvider.providerId, fromTokenInfo = quoteModel.fromTokenInfo, toTokenInfo = quoteModel.toTokenInfo, @@ -1138,6 +1140,7 @@ internal class StateBuilder( @Suppress("LongParameterList") private fun SwapProvider.convertToContentClickableProviderState( + needApplyFCARestrictions: Boolean, isBestRate: Boolean, fromTokenInfo: TokenSwapInfo, toTokenInfo: TokenSwapInfo, @@ -1158,7 +1161,7 @@ internal class StateBuilder( // val rateString = "1 $fromCurrencySymbol ≈ $rate $toCurrencySymbol" val badge = if (isRecommended) { ProviderState.AdditionalBadge.Recommended - } else if (isNeedBestRateBadge && isBestRate) { + } else if (isNeedBestRateBadge && isBestRate && !needApplyFCARestrictions) { ProviderState.AdditionalBadge.BestTrade } else { ProviderState.AdditionalBadge.Empty diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/TokenDetailsPreviewData.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/TokenDetailsPreviewData.kt index 7ce2014bc1..375e60ec26 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/TokenDetailsPreviewData.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/TokenDetailsPreviewData.kt @@ -144,10 +144,7 @@ internal object TokenDetailsPreviewData { val stakingLoadingBlock = StakingBlockUM.Loading(iconState) val stakingAvailableBlock = StakingBlockUM.StakeAvailable( - titleText = resourceReference( - id = R.string.token_details_staking_block_title, - formatArgs = wrappedList("3.27%"), - ), + titleText = resourceReference(id = R.string.token_details_staking_block_title), subtitleText = resourceReference( id = R.string.staking_notification_earn_rewards_text_period_day, formatArgs = wrappedList("Solana"), diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt index 0f402c7631..9b5b230751 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt @@ -7,7 +7,6 @@ import com.tangem.core.ui.extensions.wrappedList import com.tangem.core.ui.format.bigdecimal.crypto import com.tangem.core.ui.format.bigdecimal.fiat import com.tangem.core.ui.format.bigdecimal.format -import com.tangem.core.ui.format.bigdecimal.percent import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.staking.model.StakingAvailability import com.tangem.domain.staking.model.StakingEntryInfo @@ -102,12 +101,8 @@ internal class TokenDetailsStakingInfoConverter( iconState: IconState, isEnabled: Boolean, ): StakingBlockUM.StakeAvailable { - val apr = stakingEntryInfo.apr.format { percent() } return StakingBlockUM.StakeAvailable( - titleText = resourceReference( - id = R.string.token_details_staking_block_title, - formatArgs = wrappedList(apr), - ), + titleText = resourceReference(id = R.string.token_details_staking_block_title), subtitleText = resourceReference( id = R.string.staking_notification_earn_rewards_text, formatArgs = wrappedList(stakingEntryInfo.tokenSymbol),