From a0c455b82c32a0f1e02cb5c82d820289e89e4778 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 21 Oct 2024 23:12:33 +0400 Subject: [PATCH 1/5] Updated on 2026-08-14 --- .../managetokens/ValidateTokenFormUseCase.kt | 21 +++++++++++-------- .../managetokens/model/AddCustomTokenForm.kt | 4 +++- .../CustomTokenFormValidationException.kt | 2 -- .../model/CustomTokenFormModel.kt | 19 ++++++++++------- .../utils/CustomCurrencyValidator.kt | 7 +++++-- .../utils/ui/CustomCurrencyFormOperations.kt | 3 --- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/ValidateTokenFormUseCase.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/ValidateTokenFormUseCase.kt index ffbfa795bf..79a0481bc4 100644 --- a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/ValidateTokenFormUseCase.kt +++ b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/ValidateTokenFormUseCase.kt @@ -16,12 +16,19 @@ class ValidateTokenFormUseCase( networkId: Network.ID, formValues: AddCustomTokenForm.Raw, ): EitherNel = either { - if (formValues.name.isBlank() && formValues.symbol.isBlank() && formValues.decimals.isBlank()) { - val contractAddress = withError({ nonEmptyListOf(it) }) { - ensureIsContractAddressValid(formValues.contractAddress, networkId) - } + if (formValues.name.isBlank() && + formValues.symbol.isBlank() && + formValues.decimals.isBlank() + ) { + if (formValues.contractAddress.isBlank()) { + AddCustomTokenForm.Validated.Empty + } else { + val contractAddress = withError({ nonEmptyListOf(it) }) { + ensureIsContractAddressValid(formValues.contractAddress, networkId) + } - AddCustomTokenForm.Validated.ContractAddress(contractAddress) + AddCustomTokenForm.Validated.ContractAddressOnly(contractAddress) + } } else { zipOrAccumulate( { ensureIsContractAddressValid(formValues.contractAddress, networkId) }, @@ -43,10 +50,6 @@ class ValidateTokenFormUseCase( contractAddress: String, networkId: Network.ID, ): String { - ensure(contractAddress.isNotBlank()) { - CustomTokenFormValidationException.ContractAddress.Empty - } - val isValid = catch({ repository.validateContractAddress(contractAddress, networkId) }) { raise(CustomTokenFormValidationException.DataError(it)) } diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/AddCustomTokenForm.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/AddCustomTokenForm.kt index a5b5dc5bdc..c2cebdb84e 100644 --- a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/AddCustomTokenForm.kt +++ b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/AddCustomTokenForm.kt @@ -11,7 +11,9 @@ sealed class AddCustomTokenForm { sealed class Validated : AddCustomTokenForm() { - data class ContractAddress( + data object Empty : Validated() + + data class ContractAddressOnly( val contractAddress: String, ) : Validated() diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/exceptoin/CustomTokenFormValidationException.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/exceptoin/CustomTokenFormValidationException.kt index a197980215..37781b95e1 100644 --- a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/exceptoin/CustomTokenFormValidationException.kt +++ b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/model/exceptoin/CustomTokenFormValidationException.kt @@ -4,8 +4,6 @@ sealed class CustomTokenFormValidationException { sealed class ContractAddress : CustomTokenFormValidationException() { - data object Empty : ContractAddress() - data object Invalid : ContractAddress() } diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt index c1c6f9922e..a6a587dc8c 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt @@ -61,15 +61,9 @@ internal class CustomTokenFormModel @Inject constructor( if (params.network.canHandleTokens) { observeTokenFormUpdates() - } else { - modelScope.launch { - customCurrencyValidator.createCoin( - userWalletId = params.userWalletId, - networkId = params.network.id, - derivationPath = getDerivationPath(), - ) - } } + + createCoin() } private fun getInitialState(): CustomTokenFormUM { @@ -112,6 +106,7 @@ internal class CustomTokenFormModel @Inject constructor( } .distinctUntilChanged() .sample(periodMillis = 1_000) + .drop(count = 1) // Skip initial state .onEach { formValues -> customCurrencyValidator.validateForm( userWalletId = params.userWalletId, @@ -151,6 +146,14 @@ internal class CustomTokenFormModel @Inject constructor( } } + private fun createCoin() = modelScope.launch { + customCurrencyValidator.createCoin( + userWalletId = params.userWalletId, + networkId = params.network.id, + derivationPath = getDerivationPath(), + ) + } + private fun updateStateWithCurrency( currency: CryptoCurrency, fillForm: Boolean, diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt index 685849ec59..d5ba7409da 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt @@ -75,9 +75,12 @@ internal class CustomCurrencyValidator @Inject constructor( is AddCustomTokenForm.Validated.All -> { findOrCreateCurrency(userWalletId, networkId, derivationPath, validatedForm) } - is AddCustomTokenForm.Validated.ContractAddress -> { + is AddCustomTokenForm.Validated.ContractAddressOnly -> { findToken(userWalletId, networkId, derivationPath, validatedForm) } + is AddCustomTokenForm.Validated.Empty -> { + createCoin(userWalletId, networkId, derivationPath) + } } }.saveInAndJoin(validateFormJobHolder) } @@ -132,7 +135,7 @@ internal class CustomCurrencyValidator @Inject constructor( userWalletId: UserWalletId, networkId: Network.ID, derivationPath: Network.DerivationPath, - validatedForm: AddCustomTokenForm.Validated.ContractAddress, + validatedForm: AddCustomTokenForm.Validated.ContractAddressOnly, ) { updateStatus(Status.SearchingToken) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/ui/CustomCurrencyFormOperations.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/ui/CustomCurrencyFormOperations.kt index d99bb9473b..03c990ab76 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/ui/CustomCurrencyFormOperations.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/ui/CustomCurrencyFormOperations.kt @@ -94,9 +94,6 @@ internal fun CustomTokenFormUM.updateWithContractAddressException( val updatedFields = fields.mutate { it[Field.CONTRACT_ADDRESS] = it.getValue(Field.CONTRACT_ADDRESS).copy( error = when (exception) { - CustomTokenFormValidationException.ContractAddress.Empty -> { - null // Should not display this error - } CustomTokenFormValidationException.ContractAddress.Invalid -> { resourceReference(R.string.custom_token_creation_error_invalid_contract_address) } From 9ba100f0cb645772b509ff68817b66be915c0655 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 21 Oct 2024 21:25:07 +0300 Subject: [PATCH 2/5] Updated on 2026-08-14 --- .../GiveTxPermisssionBottomSheet.kt | 3 +- .../permission/state/GiveTxPermissionState.kt | 1 + core/res/src/main/res/values-de/strings.xml | 39 ++++++++++--------- core/res/src/main/res/values-es/strings.xml | 11 ++++-- core/res/src/main/res/values-fr/strings.xml | 9 ++++- core/res/src/main/res/values-ja/strings.xml | 5 ++- core/res/src/main/res/values-ru/strings.xml | 6 ++- .../src/main/res/values-uk-rUA/strings.xml | 4 +- core/res/src/main/res/values/strings.xml | 6 ++- .../ShowApprovalBottomSheetTransformer.kt | 1 + .../tangem/feature/swap/ui/StateBuilder.kt | 1 + 11 files changed, 53 insertions(+), 33 deletions(-) diff --git a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt index 52398bd178..5d8b37fd46 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt @@ -130,7 +130,7 @@ private fun ApprovalBottomSheetInfo(data: GiveTxPermissionState.ReadyForRequest) } SpacerH16() FooterContainer( - footer = stringResource(id = R.string.give_permission_fee_footer), + footer = data.footerText.resolveReference(), modifier = Modifier.padding(horizontal = TangemTheme.dimens.spacing16), ) { FeeItem(fee = data.fee) @@ -321,6 +321,7 @@ private val previewData = GiveTxPermissionBottomSheetConfig( onChangeApproveType = { ApproveType.LIMITED }, subtitle = resourceReference(R.string.give_permission_staking_subtitle, wrappedList("1")), dialogText = resourceReference(R.string.give_permission_staking_footer), + footerText = resourceReference(R.string.swap_give_permission_fee_footer), ), onCancel = {}, ) \ No newline at end of file diff --git a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/state/GiveTxPermissionState.kt b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/state/GiveTxPermissionState.kt index 9f52bca622..b88bfa47d4 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/state/GiveTxPermissionState.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/state/GiveTxPermissionState.kt @@ -15,6 +15,7 @@ sealed class GiveTxPermissionState { data class ReadyForRequest( val subtitle: TextReference, val dialogText: TextReference, + val footerText: TextReference, val currency: String, val amount: String, val walletAddress: String, diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 91ac04b5bf..66ec0cf56b 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -20,7 +20,7 @@ Gehe zu den Einstellungen, um die biometrische Authentifizierung in der Tangem-App zu aktivieren Biometrische Authentifizierung aktivieren Dadurch werden alle gespeicherten Zugangscodes für die Wallet gelöscht. Jede weitere Operation mit der Wallet erfordert die Übermittlung des Zugangscodes. - Durch das Entfernen der gespeicherten Karte oder Ring werden alle gespeicherten Wallets und deren Zugangscodes aus der App gelöscht. + Durch das Entfernen der gespeicherten Geräte werden alle gespeicherten Wallets und deren Zugangscodes aus der App gelöscht. Zugangscode speichern Bei Interaktionen mit deiner Karte oder Ring wird anstelle des Zugangscodes eine biometrische Authentifizierung abgefragt. Behalte die Wallet in der App @@ -41,8 +41,8 @@ Backup-Prozess starten Verwende eine Bankkarte oder eine andere Zahlungsmethode - %d Karte oder Ring - %d Karten oder Ringe + %d Gerät + %d Geräte Deaktiviere diese Option, wenn du nicht möchtest, dass diese Karte oder Ring zum Zurücksetzen von Zugangscodes auf anderen Karten oder Ringe in dieser Wallets verwendet wird. Bitte beachte, dass du dann auch den Zugangscode auf dieser Karte oder Ring nicht zurücksetzen kannst. Ermöglicht die Verwendung dieser Karte oder Ring zum Zurücksetzen des Zugangscodes auf anderen Karten oder Ringe in dieser Brieftasche @@ -51,15 +51,15 @@ Möchtest du das wirklich tun? Zugangscode ändern Der Zugangscode wird nur auf dieser Karte oder Ring geändert - Alle Karten oder Ringe der ausgewählten Wallet wurden auf die Werkseinstellungen zurückgesetzt. Du kannst nun eine neue Wallet aufsetzen. + Alle Tangem Geräte der ausgewählten Wallet wurden auf die Werkseinstellungen zurückgesetzt. Du kannst nun eine neue Wallet aufsetzen. Komplett zurücksetzen - Möchtest du die nächste Karte oder Ring in dieser Wallet zurücksetzen? + Möchtest du die nächsten geräte in dieser Wallet zurücksetzen? Karte oder Ring zurücksetzen - Wir empfehlen dir, den Zurücksetzungsprozess für alle Karten oder Ringe in dieser Wallet abzuschließen - Du hast nicht alle deine Karten oder Ringe zurückgesetzt + Wir empfehlen dir, den Zurücksetzungsprozess für aller Geräte in dieser Wallet abzuschließen + Du hast nicht alle deine Geräte zurückgesetzt Auf Werkseinstellungen zurücksetzen Sicherheitsmodus - Karten oder Ring-Einstellungen + Geräteeinstellungen Zusätzlich zu den Netzwerkgebühren erhebt das Cardano-Netzwerk %1$s ADA bei Transaktionen mit dem Token %2$s 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). @@ -219,7 +219,7 @@ Empfehlungsprogramm Flippe den Bildschirm deines Geräts nach unten, um Salden schnell ein- und auszublenden %s Hasch - Karten- oder Ring-ID + Geräte-ID Kontakt zum Support Weitere Karten oder Ringe verknüpfen App Währung @@ -298,11 +298,10 @@ Eine Transaktion kann nicht gesendet werden Fehler in der Coinbeschreibung Nur diese - Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen. Gib das Genehmigungslimit für das ausgewählte Token an Betrag %s Die Genehmigungsfunktion ist erforderlich, um einer anderen Adresse die Berechtigung zur Verwendung einer bestimmten Menge Ihrer Token zu erteilen. Standardmäßig können Smart Contracts nicht auf deine Token zugreifen, es sei denn, du stimmen zu. Indem du deine Token \"freischaltest\", autorisierst du den StakeKit Smart Contract, sie zu verwenden. Die Miner des Netzwerks erhalten eine Gasgebühr (von dir bezahlt), um diese Aktion in der Blockchain aufzuzeichnen. Du kannst deine Token einsetzen, nachdem du die Genehmigung erteilt hast. - Um fortzufahren, musst du StakeKit Smart Contract erlauben, deine %s zu verwenden + Um fortzufahren, musst du Polygon Smart Contract erlauben, deine %s zu verwenden Um fortzufahren, erteile %1s Smart Contracts die Berechtigung, dein zu %2s verwenden. Erlaubnis erteilen Unbegrenzt @@ -455,11 +454,11 @@ 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 - Du musst einen einzigen Zugangscode einrichten, um alle deine Karten oder Ringe zu schützen + 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 Personalisieren - Stelle den Zugangscode mit einer verknüpften Karte oder einem Ring wieder her. Bewahre nicht alle Deine Geräte an einem Ort auf. + Stelle den Zugangscode mit einem verknüpften Gerät wieder her. Bewahre nicht alle Deine Geräte an einem Ort auf. Wiederherstellen Wähle ein beliebiges Wort, eine Phrase oder eine Zahl als Zugangscode Zugangscode erstellen @@ -525,16 +524,16 @@ Bereite die primäre Karte oder Ring mit der Nummer %s vor. Bereite den Ring vor und drücke unten die Scan-Taste Deine Tangem-Karte oder Ring ist konfiguriert und einsatzbereit. - Maximale Anzahl an Karten oder Ringe hinzugefügt. Schließe den Sicherungsvorgang ab. + Maximale Anzahl an Geräten hinzugefügt. Schließe den Sicherungsvorgang ab. Karte oder Ring aktivieren Sicherungs-Karte oder Ring Sicherungskarte oder Ring Nr. %d Sicherungs-Ring - Keine Sicherungskarten oder Sicherungsring + Keine Sicherungsgeräte Benachrichtigungen - Eine Backup-Karte oder Ring hinzugefügt + Eine Backupgerät hinzugefügt Bereite deine Karte oder Ring vor - Zwei Backup-Karten oder Ring hinzugefügt + Zweis Backupgerät hinzugefügt Um zu beginnen, lade einfach die wallet mit einem beliebigen Betrag auf Um zu beginnen, lade die Wallet einfach mit mehr als %1$s %2$s auf. Krypto kaufen @@ -609,7 +608,7 @@ Möchtest du Biometrie nutzen? Beachte, dass für Transaktionen mit deinem Guthaben weiterhin deine Karte oder Ring erforderlich ist Karte oder Ring scannen - Scanne die Karte oder Ring, um ihre Einstellungen zu ändern. Die Änderungen wirken sich nur auf die von dir gescannte Karte oder Ring aus und haben keine Auswirkungen auf andere mit deiner Wallet verknüpften Karten oder Ringe. + Scanne die Karte oder Ring, um ihre Einstellungen zu ändern. Die Änderungen wirken sich nur auf die von dir gescannte Karte oder Ring aus und haben keine Auswirkungen auf andere mit deiner Wallet verknüpften Geräte. Halte deine Karte oder Ring bereit! Bereits in der eingegebenen Adresse enthalten Der Provisionsbetrag ist %s mal der empfohlene Betrag. Stelle sicher, dass die benutzerdefinierten Einstellungen korrekt sind. @@ -794,6 +793,7 @@ Lerne Tangem kennen Tausche, kaufen Sie NFTs, vergebe Kredite und tätige Einlagen bei mehr als 100 verschiedenen dezentralen Diensten Web 3.0-kompatibel + Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen. Tausche mehr Token zu besseren Kursen direkt in deiner Brieftasche. Neuer Swap-Anbieter verfügbar! Der Betrag umfasst:\n- Gebühr des Dienstanbieters\n- Netzgebühr für die Rücksendung von %s von der Vermittlungsstelle an die Adresse des Nutzers. @@ -880,6 +880,7 @@ Antrag auf Erstellung einer Transaktion für %1$s\n%2$s\n\nBetrag: %3$s\nGebühr: %4$s\nGesamt: %5$s\nSaldo: %6$s Die Transaktion kann nicht gesendet werden. Nicht genügend Guthaben. WalletConnect Sitzung konnte nicht aufgebaut werden. Bitte versuche es später noch einmal. + Nicht alle Token wurden zu Deiner Liste hinzugefügt. Bitte füge sie zuerst hinzu und versuche es erneut. Fehlende Token: \n Nachricht konnte nicht signiert werden.\nBitte, versuche es erneut WalletConnect-Sitzung konnte nicht aufgebaut werden: Timeout-Fehler. Bitte versuche es später noch einmal. Sitzungsanfrage enthält nicht unterstützte Blockchains für WalletConnect-Verbindung. Nicht unterstützte Blockchains:\n @@ -987,7 +988,7 @@ Du hast eine unterbrochene Sicherung. Möchtest du diese fortsetzen? Ja, fortsetzen Verwerfen - Wenn du das Backup jetzt abbrichst, musst du die Karten oder Ringe auf die Werkseinstellungen zurücksetzen, um von vorne zu beginnen + Wenn du das Backup jetzt abbrichst, musst du die Geräte auf die Werkseinstellungen zurücksetzen, um von vorne zu beginnen Sicherung fortsetzen Dies ist eine unwiderrufliche Aktion Anmelden mit %s diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index ca139eb0a7..c1aba0b90e 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -83,10 +83,12 @@ Ir a %1$s No ha otorgado acceso a su cámara, cambie su configuración de privacidad Cancelar + Cambie Elige una acción Reclamar Reclame recompensas Cerrar + confirme Continuar Copiar Copiar la dirección @@ -148,7 +150,7 @@ Renombrar Guarde Guardar cambios - Buscar en el mercado + Buscar Buscar tokens sec Seed phrase @@ -298,11 +300,10 @@ No se puede completar una transacción Error de descripción de moneda Esta transacción - La red cobrará una tarifa de aprobación de token para verificar que está autorizando el uso de su token para el swap. Especifique el límite aprobado para el token seleccionado. Montante %s La función Aprobar es necesaria para otorgar permiso a otra dirección para usar una cantidad específica de sus tokens. Por diseño, los contratos inteligentes no pueden acceder a sus tokens sin su aprobación. Al \"desbloquear\" sus tokens, autoriza al contrato inteligente de StakeKit a usarlos. Los mineros de la red reciben una tarifa de gas (pagada por usted) por registrar esta acción en la cadena de bloques. Puede apostar su token después de dar su aprobación. - Para continuar, debe autorizar el contrato inteligente de StakeKit para utilizar su %s + Para continuar, debe autorizar el contrato inteligente de Polygon para utilizar su %s Para continuar, de autorización a los smart contracts de %1s para usar su %2s Dar autorización Ilimitado @@ -550,6 +551,9 @@ Restaurar código de acceso Tarjetas idénticas Código de acceso + Nuestros servicios no están disponibles en este país + Cámbielo o confírmelo + Su residencia ha sido identificada como Agrupar Por saldo Organizar tokens @@ -796,6 +800,7 @@ Descubra Tangem Intercambie, compre NFT, haga préstamos y depósitos en más de 100 servicios descentralizados diferentes Compatible con Web 3.0 + La red cobrará una tarifa de aprobación de token para verificar que está autorizando el uso de su token para el swap. Intercambie más tokens a mejores tasas directamente en su billetera. ¡Nuevo proveedor de intercambio disponible! El monto incluye:\n• Tarifas del proveedor de servicios\n• Tarifas de red por enviar %s desde el intercambio a la dirección del usuario. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 23a43e7ff8..90336959da 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -83,10 +83,12 @@ Aller à %1$s Vous n\'avez pas octroyé l\'accès à votre caméra, veuillez modifier vos paramètres de confidentialité Annuler + Changez Choisissez une action Réclamer Réclamez des récompenses Fermer + Confirmez Continuer Copier Copier l\'adresse @@ -298,11 +300,10 @@ Impossible d\'effectuer une transaction Erreur de description de la pièce Cette transaction - Le réseau facturera des frais d\'approbation de jeton pour vérifier que vous autorisez l\'utilisation de votre jeton pour l\'échange. Spécifiez la limite approuvée pour le jeton sélectionné Montant %s La fonction Approuver est nécessaire pour accorder la permission à une autre adresse d\'utiliser une quantité spécifique de vos jetons. De par leur conception, les contrats intelligents ne peuvent pas accéder à vos jetons sans votre approbation. En « déverrouillant » vos jetons, vous autorisez le contrat intelligent StakeKit à les utiliser. Les mineurs du réseau reçoivent des frais de gaz (payés par vous) pour enregistrer cette action sur la blockchain. Vous pouvez staker votre jeton après avoir donné votre approbation. - Pour continuer, vous devez autoriser le contrat intelligent StakeKit à utiliser votre %s + Pour continuer, vous devez autoriser le contrat intelligent Polygon à utiliser votre %s Pour continuer, accordez aux smart contracts de %1s l\'autorisation d\'utiliser votre %2s Donner l\'autorisation Illimité @@ -550,6 +551,9 @@ Restauration du code d\'accès Cartes identiques Code d\'accès + Nos services ne sont pas disponibles dans ce pays + Modifiez-le ou confirmez-le + Votre résidence a été identifiée comme Grouper Par solde Organiser les jetons @@ -796,6 +800,7 @@ 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 Compatible avec Web 3.0 + 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 ! Le montant comprend :\n• les frais du fournisseur de services\n• les frais de réseau pour l\'envoi de %s depuis l\'échange vers l\'adresse de l\'utilisateur. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 9daec072f7..ace404dc50 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -297,11 +297,10 @@ 取引を送信できません コインの説明エラー 取引 - ネットワークは、あなたがトークンのスワップを承認していることを確認するために、トークン承認手数料を請求します。 選択したトークンの承認制限を指定します 金額%s 承認機能は、別のアドレスに特定の量のトークンを使用する許可を与えるために必要です。設計上スマートコントラクトは、承認しない限りトークンにアクセスできません。トークンを「ロック解除」すると、StakeKitスマート コントラクトがトークンを使用する権限が与えられます。ネットワークのマイナーは、このアクションをブロックチェーンに記録するためにガス料金(あなたが支払う)を受け取ります。承認後、トークンをステーキングできます。 - 続行するには、StakeKitスマートコントラクトが%sを使用することを許可する必要があります + 続行するには、Polygonスマートコントラクトが%sを使用することを許可する必要があります 続行するには、%1sスマートコントラクトに%2sを使用する権限を付与してください 許可を与える 無制限 @@ -770,6 +769,7 @@ ステーキング解約中 ロック解除 ロック解除中 + 金額がステーキング残高を超えています ステーキングされていない ステーキング解除 ステーキング解除中の資産%s @@ -791,6 +791,7 @@ Tangemのご紹介 100種類以上の分散型サービスで、NFTの交換・購入や、借入・預金を行うことができます。 Web3.0対応 + ネットワークは、あなたがトークンのスワップを承認していることを確認するために、トークン承認手数料を請求します。 より多くのトークンをより良いレートで、ウォレット内にて直接交換します。 新しいスワッププロバイダーが利用可能になりました! この金額には以下が含まれます:\n- サービスプロバイダーの手数料\n- 取引所からユーザーのアドレスに%s を送り返すためのネットワーク手数料。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 1d7f48e667..398ba31f1e 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -305,11 +305,10 @@ Не могу отправить транзакцию Ошибка в описании монеты Транзакция - Комиссия сети за одобрение токена будет взиматься за подтверждение того, что именно вы разрешаете использовать ваш токен для обмена. Укажите лимит доступа к выбранному токену Количество %s Функция подтверждения необходима для предоставления другому адресу разрешения на использование определенного количества ваших токенов.По замыслу смарт-контракты не могут получить доступ к вашим токенам, если вы не одобрите доступ со своей стороны. «Разблокируя» свои токены, вы даете смарт-контракту StakeKit разрешение использовать ваши активы. Майнеры сети получают компенсацию за газ (оплачиваемый вами) за запись этого действия в блокчейне. Как только разрешение будет предоставлено, вы сможете осуществить стейкинг токена. - Чтобы продолжить, вам необходимо разрешить смарт контракту StakeKit использовать ваш %s + Чтобы продолжить, вам необходимо разрешить смарт контракту Polygon использовать ваш %s Чтобы продолжить, вам нужно разрешить смарт-контракту %1s использовать ваш %2s Дать разрешение Безлимитно @@ -737,6 +736,7 @@ Период, который необходимо подождать после запроса на вывод средств из стейкинга, прежде чем токены станут доступны. Период прогрева Время, необходимое для начала процесса стейкинга и активации процесса начисления наград + Комиссия сети за одобрение токена будет взиматься за подтверждение того, что именно вы разрешаете использовать ваш токен для стейкинга. Пользуясь стейкинг сервисом, вы соглашаетесь с %1$s и %2$s Заблокировано Переместить @@ -794,6 +794,7 @@ Отзыв Разблокировать Разблокировка + Сумма превышает застейканный баланс Вывод из стейкинга Завершение стейкинга Завершение стейкинга %s @@ -815,6 +816,7 @@ Встречайте Tangem Обменивайте, покупайте NFT, получайте займы и делайте вклады в более чем 100 различных децентрализованных сервисах Поддержка Web 3.0 + Комиссия сети за одобрение токена будет взиматься за подтверждение того, что именно вы разрешаете использовать ваш токен для обмена. Обменивайте больше токенов по лучшим курсам прямо в вашем кошельке. Новый провайдер обмена! В сумму включено: \n• комиссия провайдера сервиса\n• комиссия сети за отправку %s от биржи обратно на адрес пользователя. 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 c7e208ecb6..1cf3576b6a 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -304,11 +304,10 @@ Не вдається відправити транзакцію Помилка в описі монети Транзакція - Мережа стягує комісію за схвалення токену за підтвердження, що саме ви дозволяєте використовувати ваш токен для обміну. Вкажіть ліміт доступу для обраного токена Кількість %s Функція підтвердження необхідна для надання дозволу іншій адресі на використання певної кількості ваших токенів. За задумом, смарт-контракти не можуть отримати доступ до ваших токенів без вашого схвалення. \"Розблоковуючи\" свої токени, ви дозволяєте смарт-контракту StakeKit використовувати їх. Майнери мережі отримують плату за газ (сплачену вами), щоб зафіксувати цю дію в блокчейні. Ви зможете застейкати свій токен після того, як дасте дозвіл. - Щоб продовжити, вам потрібно дозволити смарт-контракту StakeKit використовувати ваш %s + Щоб продовжити, вам потрібно дозволити смарт-контракту Polygon використовувати ваш %s Щоб продовжити, вам потрібно дозволити смарт-контракту %1s використовувати ваш %2s Надати дозвіл Необмежено @@ -816,6 +815,7 @@ Зустрічайте Tangem Обмінюйте, купуйте NFT, отримуйте позики та робіть депозити у понад 100 різних децентралізованих сервісах Web 3.0 сумісність + Мережа стягує комісію за схвалення токену за підтвердження, що саме ви дозволяєте використовувати ваш токен для обміну. Обмінюйте більше токенів за вигіднішим курсом прямо у своєму гаманці. З\'явився новий провайдер обмінів! Сума включає: \n• комісію постачальника послуг\n• комісію мережі за відправлення %s з біржі назад на адресу користувача. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 7bb68fb3cf..9b1c743f98 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -300,11 +300,10 @@ Can\'t send a transaction Coin description error Transaction - The network will charge a token approval fee to verify that you are authorizing the use of your token for the swap. Specify the approve limit for the selected token Amount %s The Approve function is needed to grant permission to another address to use a specific amount of your tokens. By design, smart contracts can\'t access your tokens unless you approve. By \"unlocking\" your tokens, you authorize the StakeKit smart contract to use them. The network\'s miners receive a gas fee (paid by you) to record this action on the blockchain. You can stake your token after giving approval. - To continue you need to allow StakeKit smart contract to use your %s + To continue you need to allow Polygon smart contract to use your %s To continue, grant %1s smart contracts permission to use your %2s Give Permission Unlimited @@ -722,6 +721,7 @@ The period you must wait after requesting to withdraw funds from staking before the tokens become available. Warmup period The allocated time for activating participation in staking. + The network will charge a token approval fee to verify that you are authorizing the use of your token for the staking. By using staking functionality, you agree with provider’s %1$s and %2$s Locked Migrate @@ -780,6 +780,7 @@ Unbonding Unlock Unlocking + Amount exceeds staked balance Unstaked Unstaking Unstaking assets %s @@ -801,6 +802,7 @@ Meet Tangem Exchange, buy NFT\'s, make loans and deposits in more than 100 different decentralized services Web 3.0 Compatible + The network will charge a token approval fee to verify that you are authorizing the use of your token for the swap. Exchange more tokens at better rates directly in your wallet. New Swap Provider Available! The amount includes:\n• service provider\'s fee\n• network fee for sending %s from the exchange back to the user\'s address. diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/ShowApprovalBottomSheetTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/ShowApprovalBottomSheetTransformer.kt index 47745c4c89..ecfbc65c33 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/ShowApprovalBottomSheetTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/ShowApprovalBottomSheetTransformer.kt @@ -72,6 +72,7 @@ internal class ShowApprovalBottomSheetTransformer( formatArgs = wrappedList(cryptoCurrency.symbol), ), dialogText = resourceReference(R.string.give_permission_staking_footer), + footerText = resourceReference(R.string.staking_give_permission_fee_footer), onChangeApproveType = prevState.clickIntents::onApproveTypeChange, ), onCancel = onDismiss, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index 96ae124966..1e509b2280 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -1190,6 +1190,7 @@ internal class StateBuilder( formatArgs = wrappedList(providerName, permissionDataState.currency), ), dialogText = resourceReference(R.string.swapping_approve_information_text), + footerText = resourceReference(R.string.swap_give_permission_fee_footer), ) } } From 0d1555d7c684760626657542bae999d5d17e08dd Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 22 Oct 2024 14:23:03 +0300 Subject: [PATCH 3/5] Updated on 2026-08-14 --- .../core/ui/components/currency/fiaticon/FiatIcon.kt | 2 +- core/ui/src/main/res/drawable/ic_shape_circle.xml | 9 --------- core/ui/src/main/res/drawable/ic_shape_circle_40.xml | 9 +++++++++ 3 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 core/ui/src/main/res/drawable/ic_shape_circle.xml create mode 100644 core/ui/src/main/res/drawable/ic_shape_circle_40.xml diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/currency/fiaticon/FiatIcon.kt b/core/ui/src/main/java/com/tangem/core/ui/components/currency/fiaticon/FiatIcon.kt index 13462984c2..0de3e1e864 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/currency/fiaticon/FiatIcon.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/currency/fiaticon/FiatIcon.kt @@ -24,7 +24,7 @@ fun FiatIcon( size: Dp, isGrayscale: Boolean, modifier: Modifier = Modifier, - @DrawableRes fallbackResId: Int = R.drawable.ic_shape_circle, + @DrawableRes fallbackResId: Int = R.drawable.ic_shape_circle_40, ) { val iconData: Any = if (url.isNullOrBlank()) fallbackResId else url val alpha = if (isGrayscale) GRAY_SCALE_ALPHA else 1f diff --git a/core/ui/src/main/res/drawable/ic_shape_circle.xml b/core/ui/src/main/res/drawable/ic_shape_circle.xml deleted file mode 100644 index 59a662d141..0000000000 --- a/core/ui/src/main/res/drawable/ic_shape_circle.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/core/ui/src/main/res/drawable/ic_shape_circle_40.xml b/core/ui/src/main/res/drawable/ic_shape_circle_40.xml new file mode 100644 index 0000000000..d618196f7b --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_shape_circle_40.xml @@ -0,0 +1,9 @@ + + + From 70af9325c315a5a3ce3169b2145b2e3d599ed5c4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 22 Oct 2024 15:33:47 +0300 Subject: [PATCH 4/5] Updated on 2026-08-14 --- .../redux/OnboardingWalletMiddleware.kt | 4 +-- .../wallet/ui/OnboardingWalletFragment.kt | 31 ++++++++++++------- .../res/layout/item_backup_info_adapter.xml | 4 +-- gradle/dependencies.toml | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index b006532804..42ef53fa15 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -660,7 +660,7 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) // All cardIds may already be activated if the backup was skipped before. if (notActivatedCardIds.isEmpty()) { delay(1000) - store.dispatch(BackupAction.BackupFinished(userWallet?.walletId)) + store.dispatchWithMain(BackupAction.BackupFinished(userWallet?.walletId)) return@launch } @@ -669,7 +669,7 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) store.state.globalState.onboardingState.onboardingManager?.finishActivation(notActivatedCardIds) handleFinishBackup(requireNotNull(scanResponse)) delay(1000) - store.dispatch(BackupAction.BackupFinished(userWalletId = userWallet?.walletId)) + store.dispatchWithMain(BackupAction.BackupFinished(userWalletId = userWallet?.walletId)) } } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index 07d83bda21..b80aa53ebb 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.ui.Modifier import androidx.core.view.MenuProvider import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.transition.TransitionManager import by.kirich1409.viewbindingdelegate.viewBinding @@ -574,22 +575,28 @@ class OnboardingWalletFragment : } animator.showSuccess { - flCardsContainer.hide() - imvCardBackground.hide() - showConfetti(true) - imvSuccess.alpha = 0f - imvSuccess.show() - imvSuccess.animate()?.alpha(1f)?.duration = 400 + if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { + flCardsContainer.hide() + imvCardBackground.hide() + showConfetti(true) + imvSuccess.alpha = 0f + imvSuccess.show() + imvSuccess.animate()?.alpha(1f)?.duration = 400 + } } } - internal fun showConfetti(show: Boolean) = with(binding.vConfetti) { - lavConfetti.show(show) + internal fun showConfetti(show: Boolean) { + if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { + with(binding.vConfetti) { + lavConfetti.show(show) - if (show) { - lavConfetti.playAnimation() - } else { - lavConfetti.cancelAnimation() + if (show) { + lavConfetti.playAnimation() + } else { + lavConfetti.cancelAnimation() + } + } } } diff --git a/app/src/main/res/layout/item_backup_info_adapter.xml b/app/src/main/res/layout/item_backup_info_adapter.xml index 469434318b..46b359a8f1 100644 --- a/app/src/main/res/layout/item_backup_info_adapter.xml +++ b/app/src/main/res/layout/item_backup_info_adapter.xml @@ -23,9 +23,9 @@ android:id="@+id/tv_body" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="64dp" + android:layout_marginStart="32dp" android:layout_marginTop="10dp" - android:layout_marginEnd="64dp" + android:layout_marginEnd="32dp" android:textColor="@color/text_secondary" android:textAlignment="center" tools:text="Body" diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 87e70174f7..86575e6cfd 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.17-830" +tangemBlockchainSdk = "release-app_5.17-831" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.17-392" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From ed541901dc7959999d4c5325d695e8f8c153b70e Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 22 Oct 2024 16:00:33 +0300 Subject: [PATCH 5/5] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 2 +- core/res/src/main/res/values-es/strings.xml | 4 +++- core/res/src/main/res/values-fr/strings.xml | 4 +++- core/res/src/main/res/values-ja/strings.xml | 1 + core/res/src/main/res/values-ru/strings.xml | 4 ++-- core/res/src/main/res/values-uk-rUA/strings.xml | 14 +++++++++++--- core/res/src/main/res/values/strings.xml | 2 +- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 66ec0cf56b..e2bb4db22f 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -307,7 +307,7 @@ Unbegrenzt Karte oder Ring bestellen Karte oder Ring scannen - Diese Informationen wurden mithilfe von KI generiert.\n Tippe hier, wenn Du Fehler finden. + Diese Informationen wurden mithilfe von KI generiert.\nTippe hier, wenn Du Fehler finden. Um den Zugangscode zu ändern, halte die Karte oder Ring wie oben gezeigt an das Gerät und entferne sie erst am Ende des Vorgangs. Um den Passcode zu ändern, halte die Karte oder Ring wie oben gezeigt an das Gerät und entferne sie erst am Ende des Vorgangs. Um die Wallet zu erstellen, halte die Karte oder Ring wie oben gezeigt an das Gerät und entferne sie erst am Ende des Vorgangs. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index c1aba0b90e..6703130663 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -714,13 +714,14 @@ Reclamo de recompensa Método para recibir recompensas por apuesta.\nPuede ser automático, donde la recompensa se acredita en tu dirección, o manual, donde debes retirar la recompensa creando una transacción para recibirla. Calendario de recompensas - Este es un cronograma que determina cuándo los participantes reciben sus recompensas. + Este es un cronograma que determina cuándo los participantes reciben sus recompensas. La duración de la distribución de recompensas puede variar ligeramente según el validador y la carga de la red. Recompensas para reclamar: %s Staking %s Periodo de disociación El período que debes esperar después de solicitar el retiro de fondos del staking antes de que los tokens estén disponibles. Periodo de calentamiento El tiempo permitido para activar la participación en la apuesta. + La red cobrará una tarifa de aprobación de token para verificar que usted está autorizando el uso de su token para el staking. Al utilizar la función de staking, usted acepta %1$s y %2$s del proveedor Bloqueado Migrar @@ -779,6 +780,7 @@ Desunión Desbloquear Desbloqueando + El monto excede el saldo apostado Sin staking Unstaking Detenando el staking de activos %s diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 90336959da..80f7d2e337 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -714,13 +714,14 @@ Réclamation de récompense Méthode de réception des récompenses de staking.\nElle peut être automatique, où la récompense est créditée sur votre adresse, ou manuelle, où vous devez retirer la récompense en créant une transaction pour la recevoir. Calendrier de récompenses - Il s\'agit d\'un calendrier qui détermine le moment où les participants au staking reçoivent leurs récompenses. + Il s\'agit d\'un calendrier qui détermine le moment où les participants au staking reçoivent leurs récompenses. La durée de distribution des récompenses peut varier légèrement en fonction du validateur et de la charge du réseau. Récompenses à réclamer: %s Staking %s Période de dissociation La période que vous devez attendre après avoir demandé le retrait des fonds du staking avant que les jetons ne soient disponibles. Période d\'échauffement Le temps imparti pour activer la participation au staking. + Le réseau facturera des frais d’approbation de jeton pour vérifier que vous autorisez l’utilisation de votre jeton pour le jalonnement. En utilisant la fonctionnalité de staking, vous acceptez les %1$s et %2$s du fournisseur Bloqué Migrer @@ -779,6 +780,7 @@ Dissociation Débloquer Déverrouillage + Le montant dépasse le solde misé Non-staké Unstaking En train de destaker les actifs %s diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index ace404dc50..d5ae3921d5 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -711,6 +711,7 @@ ステーキングから資金の引き出しを要求した後、トークンが利用可能になるまでの待機期間。 ウォームアップ期間 ステーキングへの参加を有効にするために割り当てられた時間。 + ネットワークは、ステーキングのためにトークンの使用を承認していることを確認するために、トークン承認手数料を請求します。 ステーキング機能を使用すると、プロバイダーの%1$sと%2$sに同意したことになります ロック中 移行 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 398ba31f1e..c007d49526 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -518,7 +518,7 @@ Ваша seed-фраза - + %d %d слова %d слов %d слов @@ -729,7 +729,7 @@ Способ вознаграждения Способ получения вознаграждений за стейкинг. Оно может зачисляться автоматически на ваш адрес или вручную, когда вознаграждение нужно вывести, создав транзакцию на её получение. Период вознагражения - Это период, определяющий, когда участники стейкинга получат свои вознаграждения. + Это график, который определяет, когда участники стейкинга получают свои награды. Время распределения наград может немного варьироваться в зависимости от валидатора и нагрузки сети. Вознаграждение для получения: %s Стейкинг %s Период отзыва 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 1cf3576b6a..416b3bdb21 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -85,10 +85,12 @@ Перейдіть до %1$s Ви не надали доступ до камери, будь ласка, змініть налаштування конфіденційності Скасувати + Змінити Виберіть дію Отримати Отримати винагороди Закрити + Підтвердити Продовжити Копіювати Скопіювати адресу @@ -343,7 +345,7 @@ Ринкова капіталізація Спочатку був створений блокчейн криптовалюти Основна мережа - Використання неосновних мереж для токенів дозволяє забезпечити крос-блокчейн інтероперабельність, що дає змогу використовувати активи в різноманітних децентралізованих додатках та смарт-контрактах на різних платформах. Однак це часто вимагає наявності кастодіана або смарт-контракту для безпечного зберігання оригінального активу, що вводить централізацію та ризик контрагента. + Використання нерідних мереж для токенів забезпечує сумісність між блокчейнами, дозволяючи використовувати активи в різноманітних децентралізованих програмах і смарт-контрактах на різних платформах. Однак для цього часто використовується зберігач або смарт-контракт для надійного зберігання оригінального активу, вводячи централізацію та ризик контрагента. Не оригінальний або первинний блокчейн, на якому розміщено токен Неосновні мережі Оберіть мережі @@ -518,7 +520,7 @@ Ваша seed-фраза - + %d слово %d слова %d слів %d слів @@ -565,6 +567,9 @@ Відновлення коду доступу Ідентичні картки Код доступу + Наші сервіси недоступні в цій країні + Змінити або підтвердити + Ваше місце проживання визначено як Групами За балансом Сортування токенів @@ -729,13 +734,14 @@ Отримати винагороду Метод отримання винагород за стейкінг.\nВін може зараховуватися автоматично на вашу адресу або вручну, коли винагороду треба вивести, створивши транзакцію на її отримання. Розклад винагород - Це період, який визначає, коли учасники стейкінгу отримують свої винагороди. + Це графік, який визначає, коли учасники стейкінгу отримують свої винагороди. Час розподілу винагород може дещо відрізнятися залежно від валідатора та навантаження на мережу. Нагороди для отримання: %s Стейкінг %s Період розблокування Період, який ви повинні чекати після запиту на виведення коштів зі стейкінгу, перш ніж токени стануть доступними. Період блокування Відведений час для активації участі в стейкінгу. + Комісія мережі за схвалення токену, щоб верифікувати, що саме ви даєте дозвіл на використання вашого токена для стейкінгу. Використовуючи функцію стейкінгу, ви погоджуєтесь з %1$s та %2$s Заблоковано Перемістити @@ -794,6 +800,7 @@ Розблокування Розблокувати Розблокування + Сума перевищує баланс стейкінгу Вивід зі стейкінгу Зняти зі стейкінгу Виведення зі стейкінгу %s @@ -902,6 +909,7 @@ Запит на створення транзакції для %1$s\n%2$s\n\nСума: %3$s\nКомісія: %4$s\nВсього: %5$s\nБаланс: %6$s Неможливо відправити транзакцію. Недостатньо коштів. Не вдалося встановити сеанс WalletConnect. Будь ласка, спробуйте пізніше. + Не всі токени додано до вашого списку. Будь ласка, додайте їх спочатку і спробуйте ще раз. Відсутні токени:\n Не вдалося підписати повідомлення.\nБудь ласка, спробуйте ще раз Не вдалося створити сеанс WalletConnect за відведений час. Будь ласка, спробуйте пізніше. Запит на підключення сеансу WalletConnect містить непідтримувані блокчейни. Непідтримувані блокчейни:\n diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 9b1c743f98..5a6cfa6ddc 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -506,7 +506,7 @@ Your seed phrase - + %d word %d words To import your wallet, enter your seed phrase in the field below