diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml
index 0b971535c9..65cca8211d 100644
--- a/core/res/src/main/res/values-de/strings.xml
+++ b/core/res/src/main/res/values-de/strings.xml
@@ -303,7 +303,7 @@
Importieren
In Arbeit
Später
- Mehr erfahren
+ Mehr erfahren
%1$s übrig
Legacy Bitcoin
Gesperrt
@@ -627,8 +627,8 @@
Backup anzeigen
Entferne Deine Wallet für immer!
Trotzdem entfernen!
- Für diese Wallet existiert ein Backup. Überprüfe dieses bitte, bevor Du sie entfernst, um sicherzustellen, dass Du sie später wiederherstellen kannst.
- Wenn Du diese Wallet ohne Backup entfernst, verlierst Du dauerhaft den Zugriff auf Deine Assets.
+ Diese Wallet verfügt über ein Backup. Stelle sicher, dass Du es wiederherstellen kannst, bevor die Wallet resettet wird.
+ Wenn Du diese Wallet ohne Backup löschst, verlierst Du dauerhaft den Zugriff auf Dein Guthaben.
Bist du sicher, dass du diese Wallet vergessen willst?
Mir ist bewusst, dass ich den Zugriff auf meine Wallet verlieren kann, wenn ich sie vor der Entfernung nicht gesichert habe.
Mir ist bewusst, dass durch das Entfernen meiner Wallet diese nicht gelöscht, sondern lediglich von meinem Gerät entfernt wird.
@@ -2016,7 +2016,7 @@
Deine Gelder werden derzeit dem Aave-Protokoll bereitgestellt, Du kannst sie jedoch jederzeit verwalten.
Deine%s ist in Aave hinterlegt
Chart konnte nicht geladen werden...
- Das Bereitstellen von %1$s %2$s bei Aave steht aus.
+ Lieferung %1$s %2$s nach Aave.
Deaktiviere den Yield-Modus
APY %1$s%%
Verfügbar
@@ -2082,7 +2082,7 @@
Angebot
Effektiver Jahreszins für Versorgung
Effektiver Jahreszins
- Die Zinsen fallen automatisch an.
+ Zinsen fallen automatisch an.
Zinsen fallen automatisch an
Ertragsmodus
Bearbeitung Deiner Einzahlung
diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml
index aad8904c38..fdd6015419 100644
--- a/core/res/src/main/res/values-es/strings.xml
+++ b/core/res/src/main/res/values-es/strings.xml
@@ -16,12 +16,53 @@
Establezca un código de acceso de %sdígitos para desbloquear su billetera.
Crear código de acceso
Código de acceso
+ No puede crear más de %1$s cuentas. Archive una para añadir una nueva.
+ No se puede agregar una nueva cuenta
+ Cuenta archivada
+ Cuentas archivadas
+ Recuperar
+ Está a punto de recuperar \"%1$s\".
+ Recuperar cuenta
+ Ha alcanzado el límite de 20 cuentas activas. Archive una cuenta para recuperar esta.
+ No se puede recuperar la cuenta
+ Archivado
+ No hemos podido archivar la cuenta. Vuelva a intentarlo más tarde.
+ Esta cuenta está participando en el programa de referidos.
+ Esta cuenta no se puede archivar
+ No se ha podido crear la cuenta. Por favor, inténtelo más tarde.
+ Cuenta creada
Archivar cuenta
Archivar
Estás archivando esta cuenta, pero siempre puede recuperarla.
+ Archivando...
Cuenta
No se puede editar la cuenta
+ Cuenta guardada
+ Cuenta para recompensas
+ Cuenta #%s - utilizada para la derivación de la dirección.
+ Añadir cuenta
+ Guardar
+ Nombre de la cuenta
+ Ya existe una cuenta con este nombre. Por favor, elija un nombre diferente.
+ Nombre de cuenta ya utilizado
+ Cuenta
+ Nueva cuenta
+ Añadir cuenta
+ Editar cuenta
+ Vuelva a intentarlo más tarde. Si el problema persiste, póngase en contacto con el servicio de asistencia y le ayudaremos a resolverlo.
+ %1$s en %2$s
+ Cuenta principal
+ Ya ha superado el límite de %1$s cuentas activas. Archive una para recuperarla
+ No se puede recuperar la cuenta
+ Cuenta recuperada
+ Pulse prolongadamente sobre una cuenta para reordenarla
+ Seguir editando
+ Descartar
+ ¿Seguro que quieres descartar la cuenta nueva?
+ ¿Seguro que deseas descartar las ediciones?
+ Cambios no guardados
Algunos tokens personalizados se moverán automáticamente de \"%1$s\" a \"%2$s\" ya que su derivación pertenece a esa cuenta.
+ Algunos tokens personalizados se moverán automáticamente
¿No encuentra el token en su billetera? Consulte la sección de Mercados para encontrarlo y añadirlo a la compra
¿No encuentra el token en su billetera? Consulte los mercados para encontrarlo y añadirlo a la venta
Vender
@@ -81,6 +122,11 @@
Agregar billetera
Seleccione una billetera para iniciar sesión
¡Bienvenido de nuevo!
+
+ - %d tarjeta
+ - %d tarjetas
+
+ Billetera Móvil
Realizó una copia de seguridad de su billetera correctamente.
Estas palabras son irrecuperables si se pierden. Guárdelas en un lugar seguro.
Copia de seguridad completada
@@ -341,6 +387,7 @@
Transferencia
No se pueden cargar los datos…
Entiendo
+ Entiendo, continuar
Hubo un error. Por favor inténtelo de nuevo.
Inaccesible
Termine el staking
@@ -352,6 +399,9 @@
Modo de rendimiento
Dirección de contrato copiada
Redes disponibles
+ La derivación de su token coincide con la derivación de %1$s. Su token se añadirá a esta cuenta.
+ La derivación pertenece a otra cuenta.
+ Token añadido a la cuenta %1$s
Dirección de contrato
La dirección de contrato es incorrecta
Por favor, seleccione la red
@@ -413,6 +463,7 @@
Error de WalletConnect
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.
+ Intercambie cualquier activo de su cartera por este token
Mis tokens
Aún no ha añadido ningún token. Agregue tokens a través de Mercados para hacer intercambios
No se puede intercambiar por %s
@@ -488,6 +539,12 @@
ID : %s
ID de transacción copiado
Convierta una de sus activos de su portafolio por este token
+ Una mayor velocidad significa una confirmación más rápida y una tarifa de red más alta. %s
+ Elija la velocidad
+ Elija qué token utilizar para pagar la tarifa de red. %s
+ Elija token
+ Mercado y noticias
+ De actualidad
La siguiente información es opcional. Puede borrarla si no quiere compartirla.
Cuéntenos qué funciones echa de menos y trataremos de ayudarle.
Por favor, díganos qué tarjeta o anillo tiene
@@ -640,6 +697,7 @@
El token seleccionado no está disponible actualmente para acciones dentro de la billetera cripto. Pero no se preocupa, puede expresar su interés votando a favor.
Votar a favor
La billetera no admite más de una red
+ Sobre la moneda
Para comprar, intercambiar o recibir este activo, agréguelo a su portafolio
Este activo no está disponible en la billetera
Este activo no está disponible para esta billetera
@@ -675,8 +733,10 @@
Top Ganadores
Top Perdedores
Tendencias
+ Modo Rendimiento
Staking es la forma más fácil de recibir recompensas por sus criptomonedas. %s
Gana hasta %s APY
+ Token añadido
Acerca de %s
- %d intercambio
@@ -747,6 +807,21 @@
Activar Modo Rendimiento
Debes actualizar a %1$s para crear una mobile wallet
Mobile Wallet requiere %1$s o posterior
+ Todas las noticias
+ Me Gusta
+
+ - Hace %dh
+ - Hace %dh
+
+
+ - Hace %d minuto
+ - Hace %d minutos
+
+ Resumen rápido
+ Noticias relacionadas
+ Tokens relacionados
+ Fuentes
+ Manténgase informado
NFC no está disponible en su dispositivo
Acerca de NFT
Activo NFT
@@ -852,12 +927,14 @@
Generar claves de forma privada
Su tarjeta está activada y lista para usar
¡Éxito!
+ ¡Su billetera está configurada y lista para usar!
En este caso, necesitará empezar desde el principio.
¿Quiere salir del proceso de activación?
Inicializando
Ya se ha creado otra billetera en la tarjeta que está intentando agregar. Si tiene fondos en esta billetera, por favor retírelos y luego reinicie esta tarjeta y agréguela como backup.
Guardar su billetera
Creando un backup
+ Biometría
Leer más sobre seed phrase
@@ -911,6 +988,7 @@
Restaurar código de acceso
Tarjetas idénticas
Código de acceso
+ Todas las ofertas
Disponible con %s
La compra de criptomonedas en Tangem se lleva a cabo utilizando proveedores externos.
Buscar por país
@@ -918,13 +996,26 @@
Otras monedas
Monedas fiduciarias populares
Buscar por moneda
+ Esta transacción ya ha sido procesada. No se requiere ninguna otra acción.
+ Obteniendo las mejores tarifas...
+ Instantáneo
Al utilizar la funcionalidad onramp, acepta %1$s y %2$s del proveedor.
+ El servicio es proporcionado por un proveedor externo. \nTangem no es responsable.
El monto de la compra no debe ser mayor a %s
La cantidad a comprar debe ser como mínimo %s
No hay proveedores disponibles para esta moneda
+ Más rápido
Pagar con
+ Método de pago
Disponible hasta %s
Disponible desde %s
+
+ - %d proveedor
+ - %d proveedores
+
+ Proveedores
+ Utilizado recientemente
+ Recomendado
Podrá completar su transacción en el proveedor externo, %s
Redirigiendo a %s...
Nuestros servicios no están disponibles en este país
@@ -933,8 +1024,19 @@
Seleccione el país correcto para garantizar opciones de pago y servicios precisos.
Ajustes
Puede comprobar el estado de la transacción desde la página del token.
+
+ - hasta %d día
+ - hasta %d días
+
+ %s mín.
+ Disponible desde
+ Disponible hasta
+ Obtiene
+ El servicio es proporcionado por un proveedor externo. \nTangem no es responsable.
Puede comprobar el estado de la transacción desde la página detallada del token
+ Hasta
Vía
+ Pagará
Agrupar
Por saldo
Organizar tokens
@@ -958,6 +1060,7 @@
Envíe solo %s a esta dirección. Enviar cualquier otra moneda resultará en su pérdida irreversible.
Envíe solo %1$s en la red %2$s
Transfiera fondos desde otra billetera o exchange
+ Dirección para recompensas
Participar
Error al cargar la información sobre el programa de referidos. Por favor, inténtelo de nuevo más tarde.
Error al cargar la información sobre el programa de referidos. Código de error: %s. Por favor, inténtelo de nuevo más tarde.
@@ -990,8 +1093,13 @@
Resetear la tarjeta
Entiendo que después de realizar esta acción, ya no tendré acceso a la billetera actual
Entiendo que no puedo usar esta tarjeta para recuperar mi código de acceso en las otras tarjetas de la wallet actual
+ Entiendo que perderé completamente el acceso a mi tarjeta Tangem Pay y a todos los fondos que contenga sin posibilidad de recuperación
El restablecimiento de fábrica eliminará completamente la billetera de la tarjeta seleccionada. No podrá restaurar la billetera actual ni usar la tarjeta para recuperar el código de acceso.
El reseteo a valores de fábrica eliminará completamente la billetera de la tarjeta/anillo seleccionado y lo eliminará de la app. No podrá restaurar la billetera actual.
+ Se han restablecido todos los dispositivos Tangem.
+ Hubo un problema con la activación. Por favor, restablezca las tarjetas una a una.
+ Error en la verificación de la tarjeta
+ Por favor, reinicie el siguiente dispositivo para continuar
Si tiene un Anillo Tangem, ¡3 swaps sin comisión en Changelly hasta el 15/11!
¡Intercambia con 0% de comisión!
Los dispositivos con jailbreak se consideran menos seguros. Sus datos podrían estar expuestos a riesgos adicionales.
@@ -1070,6 +1178,7 @@
Los aranceles aduaneros son altos
Debido a las peculiaridades de la red %1$s, la tarifa por transferir el saldo completo es más alta. Para reducir la comisión, puedes dejar %2$s.
La tarifa es más alta
+ La cuenta del beneficiario no está activada. El importe mínimo de la transferencia debe ser igual o superior al saldo exento de alquiler: %1$s.
Su saldo no puede ser inferior al monto del alquiler. Mantenga al menos %1$s en su cuenta o retire todos los fondos.
La comisión incluida excede el monto de la transferencia, lo que resulta en un valor negativo
Cantidad no válida
@@ -1135,15 +1244,21 @@
Esto eliminará la wallet de la aplicación. La wallet en sí puede\nañadirse de nuevo.
Nombre
Haga que su token trabaje para Ud.
+ Una tarifa de red es un pequeño pago necesario para procesar y confirmar su transacción en la blockchain.
Para comenzar a hacer staking, debe activar su cuenta TON con una auto-transacción de 1 TON. Los fondos permanecerán en su billetera; este paso solo es necesario para habilitar su cuenta para staking.
+ Activación de cuenta
+ La tarifa de red ha cambiado. Por favor, revise el nuevo importe antes de continuar.
+ Tarifa de red actualizada
La cantidad del staking debe ser al menos %s
La cantidad de staking se redondeará a %1$s TRX debido a las reglas de la red.
La cantidad de unstaking se redondeará a %1$s TRX debido a las reglas de la red.
+ APR %1$s%%
Reclamar lo que no está en staking
Tarifa de staking de la cuenta
Una cuenta de staking es una cuenta especial donde se almacenan los tokens SOL de staking. Se crea cuando delegas sus tokens a un validador para participar en la validación de transacciones y ganar recompensas. Se cobra una pequeña tarifa por crear la cuenta de staking, que se devuelve una vez que se completa el staking.
Porcentaje de rendimiento anual
APR: Muestra el interés que podrías ganar en un año sin capitalización. Los intereses ganados no se añaden a tu saldo, por lo que no ganas intereses adicionales sobre ellos.
+ Porcentaje de rendimiento anual
APY: Muestra el total de intereses que podrías ganar en un año con capitalización. La capitalización significa que los intereses ganados se añaden a tu saldo, por lo que también ganas intereses sobre esos intereses.
APR
APY
@@ -1172,6 +1287,7 @@
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
+ Importe máximo: %s
Migrar
Staking nativo
No hay validadores activos disponibles para hacer staking en este momento. Por favor, inténtalo de nuevo más tarde.
@@ -1202,6 +1318,7 @@
La opción de volver a staking le permite mover sus fondos de un validador a otro sin necesidad de retirarlos.
Está a punto de hacer staking con todo su saldo. Recomendamos dejar una pequeña cantidad para cubrir las tarifas de red para hacer unstaking o reclamar recompensas.
Para empezar a hacer staking, primero debes activar tu cuenta de TON.
+ Activación de cuenta
Para empezar a hacer staking en TON, realice primero una transacción de salida de cualquier importe - esto activará su billetera.
Es posible que se requieran hasta 0.2 TON además de la tarifa de red para completar la transacción. Cualquier cantidad no utilizada será reembolsada.
Se requieren 0.2 TON para realizar esta operación, además de la tarifa de red. Por favor, recargue su saldo.
@@ -1300,6 +1417,7 @@
Error en la estimación de la tarifa. Envíe sus comentarios al servicio de asistencia.
Usted intercambia
Hacer un intercambio de esta cantidad del token seleccionado causará un impacto significativo en el precio y reducirá su resultado.
+ Alto impacto en los precios
Fondos insuficientes
Dar autorización
Intercambiar
@@ -1322,6 +1440,7 @@
Tu tarjeta está congelada.
Obtener ayuda
Otro
+ No se puede usar en dispositivos rooteados
Completado
Rechazado
Pendiente
@@ -1334,6 +1453,8 @@
No se pudo descongelar la tarjeta. Inténtalo de nuevo más tarde.
Tu tarjeta está descongelada.
Retirada
+ No se puede usar en un dispositivo rooteado
+ Cancelar KYC
Agregar fondos
Opciones de recarga
Número de tarjeta
@@ -1361,19 +1482,24 @@
¡Todo listo! Tu tarjeta está lista para usar.
Añadir tarjeta a Google Pay
Añade tu tarjeta a Apple Pay
+ Código PIN
Comparte tu dirección o muestra el código QR
+ Se detectaron problemas técnicos. Inténtelo de nuevo más tarde o póngase en contacto con el servicio de asistencia.
Recepción no disponible ahora
Mostrar
Mostrar detalles
Intercambia cualquier activo de tu portafolio por una tarjeta
Detalles de la tarjeta
Descongelar tarjeta
+ Vuelva a la aplicación si lo olvida.
+ Su código PIN
Retirar
Retiro no disponible ahora
No puedes iniciar un intercambio o un nuevo retiro hasta que el actual finalice.
Retiro en progreso
Cambiar código PIN
Vuelve a la app si lo olvidas.
+ Entiendo que perderé completamente el acceso a mi tarjeta Tangem Pay y a todos los fondos que contenga sin posibilidad de recuperación
Error al emitir la tarjeta
Ha ocurrido un error técnico, por favor inténtalo de nuevo haciendo clic en el botón de abajo
Ha ocurrido un error técnico, por favor contacta con el soporte
@@ -1385,11 +1511,14 @@
Emisión de su tarjeta
Estamos preparando tu tarjeta. Esto puede llevar un poco de tiempo.
Tangem Pay
+ Confirmar cancelación
+ ¿Seguro que desea detener el proceso KYC? Puede retomarlo en cualquier momento.
No pudimos verificar tu perfil. Si tienes alguna pregunta, contacta con el soporte.
Lamentablemente, no pudimos verificar tu identidad
KYC en curso
Ver estado
KYC en progreso para Tangem Pay
+ Utilice los botones a continuación para ver su estado KYC actual o cancelarlo.
Obtén tu tarjeta virtual Tangem Visa gratuita
Usa USDC para pagos cotidianos
Obtener tarjeta
@@ -1406,7 +1535,9 @@
Estamos solucionando un problema técnico. Por favor, inténtelo de nuevo más tarde.
Servicio temporalmente no disponible
No es posible mostrar los datos en este momento, pero los pagos con tarjeta siguen funcionando.
+ Establecer \nCódigo PIN
Sincronización necesaria
+ Restablecer acceso
Usa USDC para pagos cotidianos
Tangem Pay temporalmente no disponible
Tangem Pay
@@ -1440,6 +1571,7 @@
Token en la red %%image%% %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
No se puede ocultar %s
+ Mostrar código QR
Cambie este token por otro por una tarifa de servicio de %1$s del %2$s al %3$s de febrero.
Intercambie con Changelly, %s comisiones
Intercambie ahora
@@ -1454,6 +1586,7 @@
Múltiples direcciones
El historial de transacciones no está soportado actualmente para esta blockchain. Pero no se preocupe, ¡estamos trabajando en ello! Mientras tanto, puede consultarlo en el explorador.
Operación
+ para: %s
desde: %s
a: %s
validador: %s
@@ -1500,11 +1633,81 @@
Renombrar la billetera
Desbloquear todo
Desbloquear todo con %s
+ AML verificado
+ Disponible
+ Bloqueado
+ Deuda
+ Límites
+ Otros (no-otp)
+ Transacción única
+ Total
+
+ - disponible por %d día
+ - disponible por %d días
+
+ El saldo disponible son los fondos reales disponibles, teniendo en cuenta las operaciones pendientes, los importes bloqueados y el saldo deudor para evitar descubiertos.
+ Disponible hasta %1$s
+ Saldos y límites
+ Falta información de la cuenta de pago. Contacte con el soporte técnico.
+ No se puede cargar información sobre el token
+ La información aún se está cargando, por favor espere.
+ Los límites son necesarios para controlar los costes, mejorar la seguridad y gestionar el riesgo. Puede gastar %1$s durante el periodo para pagos con tarjeta en comercios y %2$s para otras transacciones, por ejemplo, suscripciones o deudas.
+ El código de acceso se utilizará para gestionar su cuenta de pago y protegerla de accesos no autorizados
+ Código de acceso
+ Activación de cuenta
+ Por favor, seleccione la billetera con la que inició el proceso de registro para firmar la transacción de creación de su cuenta en Blockchain.
+ Cancelar Activación
+ ¿Seguro que quiere salir? Puede continuar más tarde desde donde lo dejó.
+ Esto no tardará mucho. Estamos configurando tu cuenta.
+ Esto no tardará mucho. Estamos completando la activación.
+ ¡Preparando todo!
+ Otra billetera
Configure un código de 4 dígitos.\nSe utilizará para los pagos.
+ Código PIN
Crear código PIN
No se aceptó el PIN. Inténtalo de nuevo o usa un código diferente.
PIN no válido: evitar secuencias o repeticiones
+ ¡Está listo para empezar!
+ Prepare la tarjeta Tangem y toque para aprobar
+ Prepare su Billetera Tangem
+ Podrá completar su conexión \n en un sitio web de terceros \n y volver a la aplicación Tangem
+ Ir al sitio web
+ Conexión de billetera
+ Elija su billetera
+ Continuar Activación
+ Continuemos configurando su cuenta.
+ ¡Bienvenido de nuevo!
+ Iniciar Activación
+ Siga los pasos para configurar su cuenta.
+ ¡Bienvenido!
+ Cantidad en blockchain
+ Código de moneda
+ Fecha
+ Código de error
+ Detalles de la transacción
+ Código de categoría de comerciante
+ Ciudad del comercio
+ Código de país del comercio
+ Nombre del comercio
+ ID Solicitud
+ Estado
+ Transacción
+ Importe de la transacción
+ Hash de la transacción
+ Solicitud de transacción
+ Estado de la transacción
+ Tipo
+ Impugnar esta transacción
+ Desbloquear
+ Escanee su tarjeta para desbloquear el acceso
+ Desbloqueo necesario
Elija cómo agregar su billetera
+ Escanee su tarjeta o anillo Tangem para restaurarlo o importarlo desde otra billetera.
+ Crear una billetera de hardware
+ ¿Quiere comprar una Billetera Tangem?
+ Importar seed phrase
+ Restaure su billetera en su teléfono o impórtela desde otra aplicación: cómodo, pero menos seguro que una tarjeta Tangem.
+ ¿Qué elegir?
La blockchain está Inaccesible. Inténtelo más tarde
Escanee la tarjeta o el anillo
Esta billetera ya ha sido activada anteriormente.\nSi no fue usted quien lo hizo, comuníquese con el servicio de asistencia.\nTangem nunca vende billeteras con un código de acceso pre generado.
@@ -1525,6 +1728,8 @@
Tarjeta/anillo incorrecta (o) seleccionada en Tangem App
Error al crear la transacción a partir de los datos de la dApp. Código: %s
Hemos encontrado un error desconocido. Mensaje de error: %d. Si el problema persiste, contacte con nuestro soporte
+ Transacción en varias partes
+ Para que se procese correctamente, su transacción se dividirá en varias partes. Tendrá que tocar su tarjeta varias veces para completarla.
No hay sesiones abiertas de WalletConnect
¡Qué lástima! No hay sesiones.
Error al emparejar la sesión de WalletConnect: %1$s
@@ -1536,11 +1741,22 @@
Esta tarjeta no se puede usar para establecer una sesión de WalletConnect
Esta red no es compatible. Por favor, seleccione otra red.
Seleccione una red
+ La transacción se está procesando. Toque su tarjeta varias veces para completarla.
+ Transacción en curso
Sesiones de WalletConnect
Conectar a dApps
WalletConnect
La conexión puede tardar unos segundos.
Crear una billetera Tangem
+ Desde %s
+ Compre Tangem Wallet, un dispositivo físico que almacena de forma segura su clave privada sin conexión a internet.
+ Billetera de hardware
+ Crea una billetera segura en su teléfono en segundos.
+ Billetera Móvil
+ ¿Qué elegir?
+ ¿Ya está usando una Billetera Tangem?
+ Escanear ahora
+ Elija un método de configuración de billetera
¿Quiere comprar Tangem Wallet?
Comprar ahora
Recuperar una billetera existente mediante copia de seguridad de Google Drive
@@ -1607,6 +1823,7 @@
Esto puede suceder porque el proveedor actualmente no puede operar con el par que usted seleccionó. Espere un momento e inténtelo de nuevo. (Código %s)
El par seleccionado no está disponible temporalmente
Algunos proveedores no están autorizados por la Autoridad de Conducta Financiera del Reino Unido. Debe evitar tratar con ellos.
+ Lista de advertencias de la FCA
Servicio no disponible temporalmente
La cantidad de tokens a intercambiar no debe exceder %s
El monto a cambiar debe ser de al menos %s
diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml
index 16ebbde2fe..58a8d7eb70 100644
--- a/core/res/src/main/res/values-fr/strings.xml
+++ b/core/res/src/main/res/values-fr/strings.xml
@@ -16,6 +16,52 @@
Définissez un code d\'accès à %s chiffres pour déverrouiller votre portefeuille.
Créer un code d\'accès
Code d\'accès
+ Vous ne pouvez pas créer plus de %1$s comptes. Archivez-en un pour en ajouter un nouveau.
+ Impossible d\'ajouter un nouveau compte
+ Compte archivé
+ Comptes archivés
+ Récupérer
+ Vous êtes sur le point de récupérer « %1$s ».
+ Récupérer le compte
+ Vous avez atteint la limite de 20 comptes actifs. Archivez un compte pour récupérer celui-ci.
+ Impossible de récupérer le compte
+ Archivé
+ Nous n\'avons pas pu archiver le compte. Veuillez réessayer plus tard.
+ Ce compte participe au programme de parrainage.
+ Ce compte ne peut pas être archivé.
+ Nous n\'avons pas pu créer de compte. Veuillez réessayer plus tard.
+ Compte créé
+ Compte archivé
+ Archives
+ Vous archivez ce compte, mais vous pouvez toujours le récupérer.
+ Archivage...
+ Compte
+ Impossible de modifier le compte
+ Compte enregistré
+ Compte pour les récompenses
+ Compte n° %s — utilisé pour la dérivation d\'adresse.
+ Ajouter un compte
+ Enregistrer
+ Nom du compte
+ Nom de compte déjà utilisé
+ Compte
+ Nouveau compte
+ Ajouter un compte
+ Modifier le compte
+ Veuillez réessayer plus tard. Si le problème persiste, contactez le service d\'assistance et nous vous aiderons à le résoudre.
+ %1$s dans %2$s
+ Compte principal
+ Vous avez déjà dépassé la limite de %1$s comptes actifs. Archivez-en un pour en récupérer un autre.
+ Impossible de récupérer le compte
+ Compte récupéré
+ Appuyez longuement sur un compte pour réorganiser les comptes.
+ Continuer à modifier
+ Supprimer
+ Êtes-vous sûr de vouloir supprimer le nouveau compte ?
+ Êtes-vous sûr de vouloir supprimer les modifications ?
+ Modifications non enregistrées
+ Certains jetons personnalisés seront automatiquement déplacés de « %1$s » vers « %2$s », car leur dérivation appartient à ce compte.
+ Certains jetons personnalisés seront automatiquement déplacés.
Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à l\'achat
Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à la vente
Vendre
@@ -51,14 +97,17 @@
Avez-vous des difficultés à scanner votre carte ?
Cette carte n\'est pas conçue pour fonctionner avec Tangem
Définissez d\'abord un code d\'accès pour activer la biométrie.
+ Utilisez %1$s pour déverrouiller votre portefeuille et approuver les actions sensibles, telles que la signature de transactions. Pour les portefeuilles matériels, une carte ou une bague est toujours nécessaire pour signer.
Frais par défaut
Activez les frais par défaut pour définir automatiquement les frais de transaction et ignorer la page Frais lors de l\'envoi de fonds. Vous pouvez toujours revenir sur cette page si nécessaire.
Accédez aux paramètres pour activer l\'authentification biométrique dans l\'application Tangem
Activer l\'authentification biométrique
+ La désactivation de %1$s vous obligera à saisir votre code d\'accès pour déverrouiller l\'application et interagir avec votre portefeuille.
Le code d\'accès à votre portefeuille vous sera demandé ultérieurement afin que nous puissions le stocker en toute sécurité pour une utilisation future.
Cela supprimera tous les codes d\'accès des portefeuilles enregistrés. Toute opération ultérieure avec le portefeuille nécessitera la soumission du code d\'accès.
La suppression de la carte enregistrée supprime de l\'application tous les portefeuilles enregistrés et leurs codes d\'accès.
Cela supprimera tous les codes d\'accès enregistrés pour le portefeuille. Toute interaction ultérieure avec le portefeuille nécessitera la saisie du code d\'accès.
+ Code d\'accès requis
Cette option désactive la biométrie pour les actions sensibles. Vous devrez saisir votre code d\'accès à chaque fois que vous signerez une transaction.
Enregistrer le code d\'accès
L\'authentification biométrique sera demandée à la place du code d\'accès pour les interactions avec votre carte.
@@ -72,6 +121,11 @@
Ajouter un wallet
Sélectionnez un wallet pour vous connecter
Heureux de te revoir!
+
+ - %d carte
+ - %d cartes
+
+ Mobile Wallet
Vous avez sauvegardé votre portefeuille avec succès.
Ces mots ne peuvent pas être récupérés en cas de perte. Assurez-vous de les conserver en lieu sûr.
Sauvegarde terminée
@@ -332,6 +386,7 @@
Fourniture
Impossible de charger les données…
Je comprends
+ Je comprends, continuer.
Il y avait une erreur. Veuillez réessayer.
Inaccessible
Unstakez
@@ -343,6 +398,7 @@
Mode Rendement
Adresse du contrat copiée !
Réseaux disponibles
+ Jeton ajouté au compte %1$s
Adresse du contrat
L\'adresse du contrat n\'est pas valide
Veuillez sélectionner le réseau
@@ -404,6 +460,7 @@
Erreur WalletConnect
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.
+ Échangez n\'importe quel actif de votre portefeuille contre ce jeton.
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
@@ -442,6 +499,7 @@
En attente du dépôt
En attente du dépôt
Remboursé
+ En attente de remboursement
Transfert à votre compte
En cours d\'envoi
Envoyé
@@ -459,6 +517,7 @@
Meilleur taux
Liste d’avertissement de la FCA
Meilleur choix
+ Fournisseur figurant sur la liste d\'avertissement de la FCA
Disponible jusqu\'à %s
Disponible à partir de %s
Indisponible pour cette paire
@@ -477,6 +536,12 @@
ID : %s
ID de transaction copié
Convertissez une de vos devises en une autre
+ Une vitesse plus élevée signifie une confirmation plus rapide et des frais de réseau plus élevés. %s
+ Choisissez la vitesse
+ Choisissez le token à utiliser pour payer les frais de réseau. %s
+ Choisissez un token
+ Marché et actualités
+ Tendances actuelles
Les informations suivantes sont facultatives. Vous pouvez les effacer si vous ne souhaitez pas les partager.
Dites-nous quelles fonctions vous manquent, et nous essaierons de vous aider.
Veuillez nous dire quelle carte vous avez
@@ -629,6 +694,7 @@
Le jeton sélectionné n\'est actuellement pas disponible pour des actions dans le portefeuille crypto. Mais ne vous inquiétez pas, vous pouvez exprimer votre intérêt en votant positivement.
Vote positif
Le portefeuille ne prend pas en charge plus d\'un réseau
+ À propos de la crypto
Pour acheter, échanger ou recevoir cet actif, ajoutez-le à votre portefeuille
Cet actif n\'est pas pris en charge dans le portefeuille
Cet actif n\'est pas disponible pour ce portefeuille
@@ -664,8 +730,10 @@
Meilleurs Gagnants
Top Perdants
Tendances
+ Mode rendement
Le staking est le moyen le plus simple de recevoir des récompenses sur votre crypto. %s
Gagnez jusqu\'à %s APY
+ Jeton ajouté
À propos de %s
- %d échange
@@ -736,6 +804,21 @@
Activer le mode rendement
Vous devez effectuer la mise à jour %1$s afin de créer un portefeuille mobile.
Le portefeuille mobile nécessite %1$s ou une version supérieure.
+ Toutes les actualités
+ Like
+
+ - Il y a %dh
+ - Il y a %dh
+
+
+ - Il y a %d minute
+ - Il y a %d minutes
+
+ Récapitulatif rapide
+ Actualités similaires
+ Tokens associés
+ Sources
+ Restez informé
NFC n\'est pas disponible sur votre appareil
À propos des NFT
Actif NFT
@@ -841,20 +924,22 @@
Générer des clés de manière privée
Votre carte est activée et prête à être utilisée
Succès !
+ Votre portefeuille est configuré et prêt à être utilisé !
Dans ce cas, vous devrez recommencer depuis le début.
Voulez-vous quitter le processus d\'activation ?
Initialisation en cours
Un autre portefeuille a déjà été créé sur la carte que vous essayez d\'ajouter. Si vous avez des fonds dans ce portefeuille, veuillez les retirer, puis réinitialiser cette carte et l\'ajouter comme sauvegarde.
Enregistrer votre portefeuille
Sauvegarde en cours
+ Biométrie
En savoir plus sur les seed phrases
-
+ - Vide
- Écrivez ces %d mots dans l\'ordre indiqué ci-dessous et conservez-les dans un endroit sûr et secret.
Votre seed phrase
-
+ - Vide
- %d mots
Pour importer votre portefeuille, entrez votre seed phrase dans le champ ci-dessous
@@ -900,6 +985,7 @@
Restauration du code d\'accès
Cartes identiques
Code d\'accès
+ Toutes les offres
Disponible avec %s
L\'achat de crypto-monnaies sur Tangem est assuré par des fournisseurs tiers selon leurs conditions.
Recherche par pays
@@ -907,13 +993,26 @@
Autres devises
Devises Fiats Populaires
Recherche par devise
+ Cette transaction a déjà été traitée. Aucune autre action n\'est requise.
+ Recherche des meilleurs tarifs...
+ Instantané
En utilisant la fonctionnalité onramp, vous acceptez %1$s et %2$s du fournisseur
+ Le service est fourni par un prestataire externe. Tangem n\'est pas responsable.
Le montant de l\'achat ne doit pas dépasser %s
Le montant à acheter doit être au moins %s
Aucun fournisseur disponible pour cette devise
+ Le plus rapide
Payer avec
+ Mode de paiement
Disponible jusqu\'à %s
Disponible à partir de %s
+
+ - %d fournisseur
+ - %d fournisseurs
+
+ Fournisseurs
+ Récemment utilisé
+ Recommandé
Vous pourrez finaliser votre transaction sur le fournisseur tiers, %s
Redirection vers %s...
Nos services ne sont pas disponibles dans ce pays
@@ -922,8 +1021,18 @@
Veuillez sélectionner le bon pays pour garantir des options de paiement et des services précis.
Paramètres
Vous pouvez vérifier l\'état de la transaction à partir de la page du jeton.
+
+ - jusqu\'à %d jour
+ - jusqu\'à %d jours
+
+ %s min
+ Disponible auprès de
+ Disponible jusqu\'à
+ Vous obtenez
Vous pouvez vérifier l\'état de la transaction à partir de la page du jeton
+ Jusqu\'à
Via
+ Vous paierez
Grouper
Par solde
Organiser les jetons
@@ -947,6 +1056,7 @@
Envoyez uniquement %s à cette adresse. L\'envoi de toute autre devise entraînera sa perte irréversible.
Envoyez uniquement %1$s sur le réseau %2$s
Transférez des fonds depuis un autre portefeuille ou une autre bourse
+ Adresse pour les récompenses
Participer
Échec du chargement des informations sur le programme de parrainage. Veuillez réessayer plus tard.
Échec du chargement des informations sur le programme de parrainage. Code d\'erreur : %s. Veuillez réessayer plus tard.
@@ -979,8 +1089,13 @@
Réinitialiser la carte
Je comprends qu\'après avoir effectué cette action, je n\'aurai plus accès au portefeuille actuel
Je comprends que je ne peux pas utiliser cette carte pour récupérer mon code d\'accès sur les autres cartes du portefeuille actuel
+ Je comprends que je perdrai complètement l\'accès à ma carte Tangem Pay et à tous les fonds qui s\'y trouvent, sans possibilité de récupération.
La réinitialisation aux paramètres d\'usine supprimera complètement le portefeuille de la carte sélectionnée. Vous ne pourrez pas restaurer le portefeuille actuel ni utiliser la carte pour récupérer le code d\'accès.
La réinitialisation aux paramètres d\'usine supprimera complètement le portefeuille de la carte sélectionnée et le supprimera de l\'application. Vous ne pourrez pas restaurer le portefeuille actuel.
+ Tous les appareils Tangem ont été réinitialisés.
+ Une erreur s\'est produite lors du processus d\'activation. Veuillez réinitialiser les cartes une par une.
+ Échec de la vérification de la carte
+ Veuillez réinitialiser l\'appareil suivant pour continuer.
Les propriétaires du Tangem Ring ont droit à 3 swap gratis sur Changelly jusqu\'au 15/11 !
Échangez avec 0 % de frais !
Les appareils disposant d\'un accès root sont considérés comme moins sécurisés. Vos données peuvent être exposées à des risques supplémentaires.
@@ -1126,14 +1241,18 @@
Nom
Faites travailler votre jeton pour vous
Pour commencer à staker, votre compte TON doit être activé avec une transaction de 1 TON. Les fonds restent sur votre compte, car cette étape sert uniquement à l\'activer pour le staking.
+ Les frais de réseau ont changé. Veuillez vérifier le nouveau montant avant de continuer.
+ Frais de réseau mis à jour
Le montant à staker doit être au moins %s
Le montant du staking sera arrondi à %1$s TRX en raison des règles du réseau.
Le montant d\'annulation du staking sera arrondi à %1$s TRX en raison des règles du réseau.
+ TAEG %1$s%%
Réclamation déstakée
Frais de staking du compte
Un compte de staking est un compte spécial où sont stockés les jetons SOL stakés. Il est créé lorsque vous déléguez vos jetons à un validateur pour participer à la validation des transactions et gagner des récompenses. Des frais minimes sont facturés pour la création du compte de staking, qui sont restitués une fois le staking terminé.
Pourcentage de rendement annuel
APR : Montre le taux d’intérêt que vous pourriez gagner en un an sans capitalisation. Les intérêts gagnés ne sont pas ajoutés à votre solde, donc vous ne gagnez pas d’intérêts supplémentaires dessus.
+ Taux de rendement annuel
APY : Montre le total des intérêts que vous pourriez gagner en un an avec capitalisation. La capitalisation signifie que les intérêts gagnés sont ajoutés à votre solde, et vous gagnez également des intérêts sur ces intérêts.
APR
APY
@@ -1162,6 +1281,7 @@
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é
+ Montant maximal : %s
Migrer
Native staking
Aucun validateur actif n\'est disponible pour le staking pour le moment. Veuillez réessayer plus tard.
@@ -1290,6 +1410,7 @@
Erreur d\'estimation des frais. Veuillez envoyer vos commentaires à l\'équide de support.
Vous échangez
Échanger ce montant de jetons sélectionnés aura un impact significatif sur les prix et réduira votre résultat.
+ Impact élevé sur les prix
Fonds insuffisants
Donner l\'autorisation
Échanger
@@ -1312,6 +1433,7 @@
Votre carte est gelée.
Obtenir de l\'aide
Autre
+ Impossible à utiliser sur les appareils rootés
Terminé
Refusé
En attente
@@ -1324,6 +1446,8 @@
Échec du dégel de la carte. Réessayez plus tard.
Votre carte est dégelée.
Retrait
+ Impossible à utiliser sur un appareil rooté
+ Annuler KYC
Ajouter des fonds
Options de recharge
Numéro de carte
@@ -1351,19 +1475,24 @@
Tout est prêt ! Votre carte est prête à l\'emploi.
Ajouter une carte à Google Pay
Ajouter la carte à Apple Pay
+ code PIN
Partagez votre adresse ou montrez le QR code
+ Problèmes techniques détectés. Veuillez réessayer plus tard ou contacter le service d\'assistance.
Réception indisponible pour le moment
Révéler
Afficher les détails
Échangez n\'importe quel actif de votre portefeuille contre une carte
Détails de la carte
Dégeler la carte
+ Revenez à l\'application si vous l\'oubliez.
+ Votre code PIN
Retirer
Retrait indisponible pour le moment
Vous ne pouvez pas lancer d\'échange ou de nouveau retrait tant que le retrait actuel n\'est pas terminé.
Retrait en cours
Modifier le code PIN
Revenez dans l\'application si vous l\'oubliez.
+ Je comprends que je perdrai complètement l\'accès à ma carte Tangem Pay et à tous les fonds qui s\'y trouvent, sans possibilité de récupération.
Échec de l\'émission de la carte
Une erreur technique s\'est produite, veuillez réessayer en cliquant sur le bouton ci-dessous
Une erreur technique s\'est produite, veuillez contacter le support
@@ -1375,11 +1504,14 @@
Émission de votre carte
Nous préparons votre carte. Cela peut prendre un peu de temps.
Tangem Pay
+ Confirmer l\'annulation
+ Êtes-vous sûr de vouloir interrompre le processus KYC ? Vous pouvez y revenir à tout moment.
Nous n\'avons pas pu vérifier votre profil. Pour toute question, veuillez contacter le support.
Malheureusement, nous n\'avons pas pu vérifier votre identité
KYC en cours
Voir le statut
KYC en cours pour Tangem Pay
+ Utilisez les boutons ci-dessous pour consulter votre statut KYC actuel ou l\'annuler.
Obtenez votre carte virtuelle Tangem Visa gratuite
Utilisez USDC pour les paiements quotidiens
Obtenir la carte
@@ -1396,7 +1528,9 @@
Nous réparons un problème technique. Veuillez réessayer plus tard.
Service temporairement indisponible
Les données ne peuvent pas être affichées pour le moment, mais les paiements par carte fonctionnent toujours.
+ Définir le \ncode PIN
Synchronisation requise
+ Restaurer l\'accès
Utilisez USDC pour les paiements quotidiens
Tangem Pay est temporairement indisponible
Tangem Pay
@@ -1408,6 +1542,7 @@
Annuler
Cette opération est actuellement indisponible. Veuillez réessayer plus tard.
L\'achat de %s n\'est pas pris en charge par les fournisseurs actuels mais nous travaillons à ajouter davantage d\'options.
+ L\'action n\'est pas disponible pour les jetons personnalisés.
Vous n\'avez pas de fonds à vendre. Renflouez votre compte pour pouvoir vendre des fonds à partir de celui-ci.
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.
@@ -1443,6 +1578,7 @@
Adresses multiples
L\'historique des transactions n\'est actuellement pas pris en charge pour cette blockchain. Mais ne vous inquiétez pas, nous y travaillons ! En attendant, vous pouvez le vérifier dans l\'explorateur.
Opération
+ pour : %s
de : %s
à : %s
validateur : %s
@@ -1489,26 +1625,71 @@
Renommer le portefeuille
Tout déverrouiller
Tout déverrouiller avec %s
+ AML vérifié
+ Disponible
+ Bloqué
+ Dette
+ Limites
+ Autre (sans mot de passe)
+ Transaction unique
+ Total
- disponible pour %d jour
- disponible pour %d jours
+ Le solde disponible correspond aux fonds réellement disponibles, en tenant compte des transactions en attente, des montants bloqués et du solde débiteur afin d\'éviter les découverts.
+ Disponible jusqu\'au %1$s
Soldes et Limites
+ Informations de paiement manquantes. Veuillez contacter le service d\'assistance.
+ Impossible de charger les informations relatives au jeton
+ Les informations sont en cours de chargement, veuillez patienter.
+ Des limites sont nécessaires pour contrôler les coûts, améliorer la sécurité et gérer les risques. Vous pouvez dépenser %1$s pendant la période pour les paiements par carte dans les magasins et %2$s pour les autres transactions, par exemple les abonnements ou les dettes.
Le code d\'accès sera utilisé pour gérer votre compte de paiement et le protéger contre tout accès non autorisé.
Code d\'accès
+ Activation du compte
+ Veuillez choisir le portefeuille avec lequel vous avez commencé le processus d\'inscription afin de signer la transaction pour créer votre compte sur la blockchain.
+ Annuler l\'activation
Ê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 !
+ Autre portefeuille
Créez un code à 4 chiffres. Il servira pour les paiements.
+ code PIN
Créer un code PIN
Le code PIN n\'a pas été accepté. Veuillez réessayer ou utiliser un autre code.
Code PIN invalide : évitez les séquences ou les répétitions
+ Vous êtes prêt à partir !
+ Préparez la carte Tangem et appuyez pour approuver.
+ Préparez votre Tangem Wallet
+ Vous pourrez terminer votre connexion \n sur le site Web tiers \n et revenir à l\'application Tangem.
Accéder le site Web
+ Connexion au portefeuille
+ Choisissez un portefeuille
+ Continuer l\'activation
Continuons la configuration de votre compte.
Content de vous revoir !
+ Lancer l\'activation
Suivez les étapes pour configurer votre compte.
Bienvenue !
+ Montant de la blockchain
+ Code monétaire
+ Date
+ Code d\'erreur
+ Détails de la transaction
+ Code de catégorie de commerçant
+ Cité marchande
+ Code pays du commerçant
+ Nom du commerçant
+ Identifiant de la demande
+ Statut
+ Transaction
+ Montant de la transaction
+ Hash de la transaction
+ Demande de transaction
+ Statut de la transaction
+ Type
+ Contester cette transaction
Déverrouiller
Scannez votre carte pour déverrouiller l\'accès
Déverrouillage nécessaire
@@ -1533,6 +1714,8 @@
Mauvaise carte/bague sélectionnée dans le Tangem App
Échec de la création de la transaction à partir des données de la Dapp. Code: %s
Nous avons rencontré une erreur inconnue. Code d\'erreur : %d. Si le problème persiste, n\'hésitez pas à contacter notre support
+ Transaction en plusieurs parties
+ Pour que le traitement soit effectué correctement, votre transaction sera divisée en plusieurs parties. Vous devrez passer votre carte plusieurs fois pour la finaliser.
Aucune session WalletConnect ouverte
Oups. Aucune session.
Échec de l\'appairage de la session WalletConnect : %1$s
@@ -1544,11 +1727,22 @@
Cette carte ne peut pas être utilisée pour établir une session WalletConnect
Ce réseau n\'est pas pris en charge. Veuillez sélectionner un autre réseau.
Sélectionnez un réseau
+ La transaction est en cours de traitement. Veuillez taper plusieurs fois votre carte pour la terminer.
+ Transaction en cours
Sessions WalletConnect
Se connecter aux dApps
WalletConnect
La connexion peut prendre quelques secondes
Créer un Tangem Wallet
+ À partir de %s
+ Achetez Tangem Wallet, un dispositif physique qui stocke votre clé privée hors ligne en toute sécurité.
+ Hardware Wallet
+ Créez un portefeuille sécurisé sur votre téléphone en quelques secondes.
+ Mobile Wallet
+ Quoi choisir ?
+ Vous utilisez déjà un Tangem Wallet ?
+ Scanner maintenant
+ Choisissez une méthode de configuration du portefeuille
Vous souhaitez acheter le Tangem Wallet ?
Acheter maintenant
Récupérer un portefeuille existant via la sauvegarde Google Drive
@@ -1727,6 +1921,7 @@
Connexions
Contenu
Copier les données
+ Allocation personnalisée
dApp déconnectée
Déconnecter tout
Toutes les sessions dApp seront déconnectées. Votre portefeuille ne sera plus lié à aucune dApp.
@@ -1739,6 +1934,8 @@
La proposition de connexion a expiré
Modifications estimées du portefeuille
La transaction n\'a pas pu être simulée. Veuillez procéder avec prudence.
+ L\'estimation n\'est pas prise en charge pour %s.
+ Suggéré par %s
Rechargez votre solde pour couvrir les frais de réseau.
%1$s Insuffisant
Transaction malveillante
@@ -1752,6 +1949,7 @@
Risque de sécurité connu
Ouvrez l\'application Web3 et sélectionnez l\'option WalletConnect.
Demande de
+ Signer quand même
Type de signature
Au moins un réseau est requis pour la connexion à une dApp.
Spécifier les réseaux sélectionnés
@@ -1760,7 +1958,10 @@
Demande de transaction
Demande de transaction
Montant illimité
+ Assurez-vous que chaque tentative d\'appairage utilise un URI unique et nouveau.
+ URI déjà utilisé
WalletConnect
+ Transaction suspecte
Vous avez déjà un portefeuille Tangem ?
Des milliers d\'actifs
Le meilleur hardware wallet de sa catégorie
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index aa04e8ffcf..2f51bfad1e 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -546,6 +546,7 @@
ID: %s
ID транзакции скопирован
Обменяйте любой актив в вашем портфеле на этот токен
+ Выбрать токен
Рынок и Новости
В тренде
Информация ниже не является обязательной. Вы можете стереть её, если хотите.
@@ -602,7 +603,7 @@
Создать новый кошелек
Повысьте уровень безопасности с помощью продвинутого аппаратного кошелька Tangem.
Аппаратный кошелёк
- Перенести текущий кошелёк в Tangem Wallet.
+ Перенесите свой текущий кошелек в холодный кошелек Tangem.
Улучшить текущий кошелёк
Перейти к бэкапу
Пожалуйста, создайте резервную копию вашего кошелька перед установкой кода доступа.
@@ -627,7 +628,7 @@
Вы уверены, что хотите выполнить эту операцию?
Забыть кошелек
Перейти к резервному копированию
- Посмотреть резервное копирование
+ Показать фразу восстановления
Забыть кошелек
Забыть всё равно
Резервная копия этого кошелька существует. Проверьте её перед удалением, чтобы убедиться, что сможете восстановить кошелёк позже.
@@ -1479,6 +1480,7 @@
Карта разморожена
Вывести
Запрещено использовать на root-устройствах
+ Отменить KYC
Пополнить
Способы пополнения
Номер
@@ -1534,6 +1536,8 @@
Выпускаем карту
Выпускаем карту, это займет немного времени.
Tangem Pay
+ Подтвердите отмену
+ Если вы отмените KYC сейчас, вы сможете потом начать его заново
Не удалось подтвердить ваш профиль. Если у вас есть вопросы, обратитесь в службу поддержки.
К сожалению, нам не удалось подтвердить вашу личность
KYC в процессе
@@ -1659,7 +1663,9 @@
Установить ПИН-код
ПИН не принят. Попробуйте ещё раз или введите другой код.
Слабый ПИН: не используйте повторы или последовательности.
+ Код валюты
Разблокировать
+ Отсканируйте свою карту, чтобы разблокировать доступ
Выберите тип кошелька
Отсканируйте вашу карту или кольцо Tangem, чтобы восстановить её или импортировать из другого кошелька.
Создать аппаратный кошелёк
@@ -1740,8 +1746,8 @@
Откройте Tangem Wallet
Код доступа защищает кошелёк и нужен для входа и подписания транзакций.
Установить/изменить код доступа
- Изменить Код Доступа
- Получайте уведомления о входящих транзакциях в кошельке и обновлениях Tangem.
+ Изменить код доступа
+ Получайте push-уведомления о входящих транзакциях в кошелек.
В настоящий момент push-уведомления могут не работать на устройствах Huawei. Мы уже работаем над решением этой проблемы и планируем исправление в ближайших обновлениях. Спасибо за понимание!
Уведомления о транзакциях
Установить Код Доступа
@@ -1781,6 +1787,7 @@
Сумма получения не может быть менее %s
Это может произойти из-за того, что провайдер временно не предоставляет обмен выбранной вами пары. Пожалуйста, подождите некоторое время и попробуйте снова. (Код %s)
Выбранная пара временно недоступна
+ Предупреждающий список FCA
Сервис временно недоступен
Сумма для обмена должна быть не более %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 016bb09e5e..fbf1149a65 100644
--- a/core/res/src/main/res/values-uk-rUA/strings.xml
+++ b/core/res/src/main/res/values-uk-rUA/strings.xml
@@ -607,7 +607,7 @@
Створити новий гаманець
Підвищіть рівень своєї безпеки за допомогою просунутого апаратного гаманця Tangem.
Апаратний гаманець
- Перенесіть свій поточний гаманець у Tangem.
+ Перетворіть поточний гаманець на холодний гаманець Tangem.
Оновіть поточний гаманець
Перейти до бекапу
Будь ласка, створіть резервну копію свого гаманця, перш ніж створювати код доступу.
@@ -1767,7 +1767,7 @@
Цей код доступу захищає ваш гаманець і використовується для входу та підписання транзакцій.
Встановити/Змінити код доступу
Змінити код доступу
- Отримуйте сповіщення про вхідні транзакції в гаманці та оновлення Tangem.
+ Отримуйте сповіщення про вхідні транзакції в гаманці.
Push-повідомлення наразі можуть не працювати на пристроях Huawei. Ми активно працюємо над розв\'язанням цієї проблеми та плануємо випустити виправлення в наступному оновленні. Дякуємо за розуміння!
Сповіщення про транзакції
Встановити код доступу
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 4833e76320..d5b33d94e7 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -539,9 +539,9 @@
ID: %s
Transaction ID copied
Swap any asset in your portfolio for this token
- Higher speed means faster confirmation and a higher network fee. %s
+ Higher speed means faster confirmation\nand a higher network fee. %s
Choose speed
- Choose which token to use to pay the network fee. %s
+ Choose which token to use to pay\nthe network fee. %s
Choose token
Market & News
Tangem AI
@@ -600,7 +600,7 @@
Create new wallet
Level up your security with the superior Tangem hardware wallet.
Hardware wallet
- Move your current wallet into Tangem.
+ Convert your current mobile wallet into a Tangem cold wallet.
Upgrade current wallet
Go to backup
Please back up your wallet before creating an access code.
@@ -625,7 +625,7 @@
Are you sure you want to do this?
Forget wallet
Go to backup
- View backup
+ View recovery phrase
Forget wallet
Forget anyway
This wallet has a backup. Ensure you can recover it before forgetting the wallet.
@@ -1264,6 +1264,7 @@
APR
APY
Rewards automatically accumulate in your staking balance daily.
+ Rewards are compounded to your staking balance. Funds earned: %s
Available
Average Reward Rate
How Staking Works?
@@ -1516,10 +1517,15 @@
Are you sure you want to stop the KYC process? You can return to it anytime.
We could not verify your profile. If you have any questions, please contact support.
Unfortunately, we couldn\'t verify your identity
+ KYC has failed
KYC in progress
View Status
KYC in progress for Tangem Pay
Use the buttons below to view your current KYC status or cancel it.
+ KYC rejected
+ Hide KYC block
+ Sorry, we couldn\'t verify
+ your profile.
Get your free Tangem Visa virtual card
Use USDC for everyday payments
Get card
@@ -1783,7 +1789,7 @@
This access code protects your wallet and is used to log in and sign transactions.
Set/Change access code
Change access code
- Stay notified on wallet incoming transactions and Tangem updates.
+ Get push notifications for incoming wallet transactions.
Push notifications may currently not work on Huawei devices. We\'re actively working on a solution and will release a fix in an upcoming update. Thank you for your understanding!
Transaction notifications
Set access code
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/message/MessageBottomSheetV2.kt b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/message/MessageBottomSheetV2.kt
index 7b3ab2dd0b..ab89d9ede7 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/message/MessageBottomSheetV2.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/message/MessageBottomSheetV2.kt
@@ -27,6 +27,7 @@ import com.tangem.core.ui.components.buttons.common.TangemButtonIconPosition
import com.tangem.core.ui.components.buttons.common.TangemButtonsDefaults
import com.tangem.core.ui.components.icons.HighlightedIcon
import com.tangem.core.ui.extensions.TextReference
+import com.tangem.core.ui.extensions.resolveAnnotatedReference
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@@ -109,7 +110,7 @@ private fun ContentContainer(state: MessageBottomSheetUMV2.InfoBlock, modifier:
modifier = Modifier
.fillMaxWidth()
.padding(top = TangemTheme.dimens.spacing8),
- text = body.resolveReference(),
+ text = body.resolveAnnotatedReference(),
style = TangemTheme.typography.body2,
color = TangemTheme.colors.text.secondary,
textAlign = TextAlign.Center,
diff --git a/core/ui/src/main/java/com/tangem/core/ui/extensions/TextReference.kt b/core/ui/src/main/java/com/tangem/core/ui/extensions/TextReference.kt
index 9997470e8c..e771427974 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/extensions/TextReference.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/extensions/TextReference.kt
@@ -14,11 +14,8 @@ import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
-import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.*
import androidx.compose.ui.text.AnnotatedString.Builder
-import androidx.compose.ui.text.LinkAnnotation
-import androidx.compose.ui.text.buildAnnotatedString
-import androidx.compose.ui.text.withLink
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
@@ -399,6 +396,7 @@ private fun createStyledText(
link = LinkAnnotation.Clickable(
tag = text,
linkInteractionListener = { onClick() },
+ styles = TextLinkStyles(style = spanStyleReference()),
),
block = {
appendStyled(
diff --git a/core/ui/src/main/res/drawable/ic_heart_broken_32.xml b/core/ui/src/main/res/drawable/ic_heart_broken_32.xml
new file mode 100644
index 0000000000..2d9d8aad75
--- /dev/null
+++ b/core/ui/src/main/res/drawable/ic_heart_broken_32.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt
index d877f0f1f3..aac0e1c218 100644
--- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt
+++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt
@@ -29,7 +29,9 @@ import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
private const val VALID_STATUS = "valid"
-private const val APPROVED_KYC_STATUS = "APPROVED"
+private const val APPROVED_KYC_STATUS = "approved"
+private const val IN_PROGRESS_KYC_STATUS = "in_progress"
+private const val DECLINED_KYC_STATUS = "declined"
private const val TAG = "TangemPay: OnboardingRepository"
@Suppress("LongParameterList")
@@ -168,8 +170,9 @@ internal class DefaultOnboardingRepository @Inject constructor(
ProductInstance(id = instance.id, cardId = instance.cardId, cardFrozenState = cardFrozenState)
}
return CustomerInfo(
+ customerId = response?.id,
productInstance = productInstance,
- isKycApproved = response?.kyc?.status == APPROVED_KYC_STATUS,
+ kycStatus = getKycStatus(status = response?.kyc?.status),
cardInfo = cardInfo,
).also {
lastFetchedCustomerInfoMap[userWalletId] = it
@@ -236,4 +239,13 @@ internal class DefaultOnboardingRepository @Inject constructor(
setHideMainOnboardingBanner(userWalletId)
}
}
+
+ private fun getKycStatus(status: String?): CustomerInfo.KycStatus {
+ return when (status?.lowercase()) {
+ IN_PROGRESS_KYC_STATUS -> CustomerInfo.KycStatus.PENDING
+ DECLINED_KYC_STATUS -> CustomerInfo.KycStatus.REJECTED
+ APPROVED_KYC_STATUS -> CustomerInfo.KycStatus.APPROVED
+ else -> CustomerInfo.KycStatus.INIT
+ }
+ }
}
\ No newline at end of file
diff --git a/domain/feedback/models/src/main/kotlin/com/tangem/domain/feedback/models/FeedbackEmailType.kt b/domain/feedback/models/src/main/kotlin/com/tangem/domain/feedback/models/FeedbackEmailType.kt
index 81aaaffd7a..1dae5fb656 100644
--- a/domain/feedback/models/src/main/kotlin/com/tangem/domain/feedback/models/FeedbackEmailType.kt
+++ b/domain/feedback/models/src/main/kotlin/com/tangem/domain/feedback/models/FeedbackEmailType.kt
@@ -84,5 +84,7 @@ sealed interface FeedbackEmailType {
) : Visa()
data class FeatureIsBeta(override val walletMetaInfo: WalletMetaInfo) : Visa()
+
+ data class KycRejected(override val walletMetaInfo: WalletMetaInfo, val customerId: String) : Visa()
}
}
\ No newline at end of file
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt
index 00815bea99..d10954f517 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt
@@ -54,6 +54,10 @@ internal class FeedbackDataBuilder {
builder.appendKeyValue("User Wallet ID", userWalletId)
}
+ fun addCustomerId(customerId: String) {
+ builder.appendKeyValue("ID: ", customerId)
+ }
+
fun addUserWalletMetaInfo(walletMetaInfo: WalletMetaInfo) {
builder.appendKeyValue("Mobile Wallet is backed up", walletMetaInfo.hotWalletIsBackedUp?.toString())
builder.appendKeyValue("Card ID", walletMetaInfo.cardId)
@@ -116,6 +120,7 @@ internal class FeedbackDataBuilder {
is FeedbackEmailType.Visa.Dispute,
is FeedbackEmailType.Visa.FeatureIsBeta,
is FeedbackEmailType.Visa.Withdrawal,
+ is FeedbackEmailType.Visa.KycRejected,
-> return
is FeedbackEmailType.Visa.DisputeV2 -> when (type.item) {
is TangemPayTxHistoryItem.Collateral -> "Receive/Withdraw"
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt
index 7bc3d5342a..f1228c50c6 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt
@@ -48,6 +48,7 @@ class SendFeedbackEmailUseCase(
private fun getAddress(type: FeedbackEmailType): String {
return when {
+ type is FeedbackEmailType.Visa.KycRejected -> PAERA_SUPPORT_EMAIL
type.isVisaEmail() -> TANGEM_VISA_SUPPORT_EMAIL
type.walletMetaInfo?.isStart2Coin == true -> START2COIN_SUPPORT_EMAIL
else -> TANGEM_SUPPORT_EMAIL
@@ -95,6 +96,7 @@ class SendFeedbackEmailUseCase(
is FeedbackEmailType.Visa.Dispute,
is FeedbackEmailType.Visa.DisputeV2,
is FeedbackEmailType.Visa.FeatureIsBeta,
+ is FeedbackEmailType.Visa.KycRejected,
-> this
is FeedbackEmailType.DirectUserRequest,
is FeedbackEmailType.BackupProblem,
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageBodyResolver.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageBodyResolver.kt
index 998110b7b7..ec9d994636 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageBodyResolver.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageBodyResolver.kt
@@ -39,6 +39,7 @@ internal class EmailMessageBodyResolver(
is FeedbackEmailType.Visa.DisputeV2 -> addTangemPayDisputeRequestBody(type)
is FeedbackEmailType.Visa.Withdrawal -> addTangemPayWithdrawalRequestBody(type)
is FeedbackEmailType.Visa.FeatureIsBeta -> addTangemPayBetaRequestBody(type)
+ is FeedbackEmailType.Visa.KycRejected -> addTangemPayKycRejectedRequestBody(type)
}
return build()
@@ -70,6 +71,12 @@ internal class EmailMessageBodyResolver(
}
}
+ private fun FeedbackDataBuilder.addTangemPayKycRejectedRequestBody(type: FeedbackEmailType.Visa.KycRejected) {
+ addTangemPayPhoneInfoBody(type)
+ addDelimiter()
+ addCustomerId(customerId = type.customerId)
+ }
+
private suspend fun FeedbackDataBuilder.addTangemPayWithdrawalRequestBody(
type: FeedbackEmailType.Visa.Withdrawal,
) {
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageTitleResolver.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageTitleResolver.kt
index 03d304ddb7..4064444636 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageTitleResolver.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailMessageTitleResolver.kt
@@ -27,6 +27,7 @@ internal class EmailMessageTitleResolver(private val resources: Resources) {
is FeedbackEmailType.Visa.FailedIssueCard,
is FeedbackEmailType.Visa.Withdrawal,
is FeedbackEmailType.Visa.FeatureIsBeta,
+ is FeedbackEmailType.Visa.KycRejected,
is FeedbackEmailType.PreActivatedWallet,
is FeedbackEmailType.BackupProblem,
-> R.string.feedback_preface_support
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailSubjectResolver.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailSubjectResolver.kt
index ad9330b4bc..451c9a1beb 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailSubjectResolver.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/EmailSubjectResolver.kt
@@ -47,6 +47,7 @@ internal class EmailSubjectResolver(private val resources: Resources) {
-> "[Visa] [DISPUTE] {auto-filled subject}"
is FeedbackEmailType.Visa.Withdrawal -> "[Visa] [WITHDRAWAL] {auto-filled subject}"
is FeedbackEmailType.Visa.FeatureIsBeta -> "[VISA] [FEEDBACK]"
+ is FeedbackEmailType.Visa.KycRejected -> "Tangem Pay - [VISA] [KYC REJECTED]"
}
}
}
\ No newline at end of file
diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/FeedbackConstants.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/FeedbackConstants.kt
index e1ec372cc9..c1bc6d1043 100644
--- a/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/FeedbackConstants.kt
+++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/utils/FeedbackConstants.kt
@@ -4,4 +4,5 @@ internal const val GMAIL_MAX_FILE_SIZE = 24_900_000 // ≈ 25 MB
internal const val START2COIN_SUPPORT_EMAIL = "cardsupport@start2coin.com"
internal const val TANGEM_SUPPORT_EMAIL = "support@tangem.com"
-internal const val TANGEM_VISA_SUPPORT_EMAIL = "pay@tangem.com"
\ No newline at end of file
+internal const val TANGEM_VISA_SUPPORT_EMAIL = "pay@tangem.com"
+internal const val PAERA_SUPPORT_EMAIL = "support@paera.com"
\ No newline at end of file
diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt
index 234366b079..baac6c4f75 100644
--- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt
+++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt
@@ -15,11 +15,26 @@ data class MainScreenCustomerInfo(
)
data class CustomerInfo(
+ val customerId: String?,
val productInstance: ProductInstance?,
- val isKycApproved: Boolean,
+ val kycStatus: KycStatus,
val cardInfo: CardInfo?,
) {
+ enum class KycStatus {
+ /** Initial state */
+ INIT,
+
+ /** Performing the check */
+ PENDING,
+
+ /** SumSub approved */
+ APPROVED,
+
+ /** The check failed, documents rejected */
+ REJECTED,
+ }
+
data class ProductInstance(
val id: String,
val cardId: String,
diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt
index 6cf5c28a6f..33ddcff4c8 100644
--- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt
+++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt
@@ -128,7 +128,7 @@ class TangemPayMainScreenCustomerInfoUseCase(
}
.map { customerInfo ->
Timber.tag(TAG).i("customerInfo")
- if (customerInfo.cardInfo == null && customerInfo.isKycApproved) {
+ if (customerInfo.cardInfo == null && customerInfo.kycStatus == CustomerInfo.KycStatus.APPROVED) {
// If order id wasn't saved -> start order creation and get customer info
onboardingRepository.createOrder(userWalletId)
}
@@ -151,7 +151,12 @@ class TangemPayMainScreenCustomerInfoUseCase(
OrderStatus.NEW,
OrderStatus.PROCESSING,
-> MainScreenCustomerInfo(
- info = CustomerInfo(productInstance = null, isKycApproved = true, cardInfo = null),
+ info = CustomerInfo(
+ customerId = null,
+ productInstance = null,
+ kycStatus = CustomerInfo.KycStatus.APPROVED,
+ cardInfo = null,
+ ),
orderStatus = orderStatus,
).right()
diff --git a/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt b/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt
index 83700ab313..1c484af706 100644
--- a/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt
+++ b/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt
@@ -13,6 +13,7 @@ import com.tangem.core.decompose.navigation.Router
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.pay.TangemPayEligibilityManager
+import com.tangem.domain.pay.model.CustomerInfo.KycStatus
import com.tangem.domain.pay.repository.OnboardingRepository
import com.tangem.domain.pay.usecase.ProduceTangemPayInitialDataUseCase
import com.tangem.domain.tangempay.TangemPayAnalyticsEvents
@@ -95,7 +96,7 @@ internal class TangemPayOnboardingModel @Inject constructor(
.onRight { customerInfo ->
uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = false))
when {
- !customerInfo.isKycApproved -> {
+ customerInfo.kycStatus != KycStatus.APPROVED -> {
when (params) {
is TangemPayOnboardingComponent.Params.ContinueOnboarding -> openKyc(userWalletId)
else -> startOnboarding(userWalletId)
@@ -171,7 +172,7 @@ internal class TangemPayOnboardingModel @Inject constructor(
uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = false))
},
ifRight = { customerInfo ->
- if (customerInfo.isKycApproved) {
+ if (customerInfo.kycStatus == KycStatus.APPROVED) {
back()
} else {
openKyc(userWalletId)
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/WalletComponent.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/WalletComponent.kt
index a48d9edade..8d96777c9e 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/WalletComponent.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/WalletComponent.kt
@@ -23,6 +23,7 @@ import com.tangem.feature.wallet.child.wallet.model.WalletModel
import com.tangem.feature.wallet.navigation.WalletRoute
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletDialogConfig
import com.tangem.feature.wallet.presentation.wallet.ui.WalletScreen
+import com.tangem.feature.wallet.presentation.wallet.ui.components.visa.KycRejectedComponent
import com.tangem.feature.walletsettings.component.RenameWalletComponent
import com.tangem.features.biometry.AskBiometryComponent
import com.tangem.features.feed.entry.components.FeedEntryComponent
@@ -126,6 +127,17 @@ internal class WalletComponent @AssistedInject constructor(
),
)
}
+ is WalletDialogConfig.KycRejected -> {
+ KycRejectedComponent(
+ appComponentContext = childByContext(componentContext),
+ params = KycRejectedComponent.Params(
+ walletId = dialogConfig.walletId,
+ customerId = dialogConfig.customerId,
+ callbacks = model.tangemPayKycRejectedCallbacks,
+ onDismiss = model.innerWalletRouter.dialogNavigation::dismiss,
+ ),
+ )
+ }
}
},
)
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt
index 6759eefd27..2e9816c24a 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt
@@ -39,6 +39,7 @@ import com.tangem.feature.wallet.presentation.wallet.state.model.WalletEvent.Dem
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletScreenState
import com.tangem.feature.wallet.presentation.wallet.state.transformers.*
import com.tangem.feature.wallet.presentation.wallet.state.utils.WalletEventSender
+import com.tangem.feature.wallet.presentation.wallet.ui.components.visa.KycRejectedCallbacks
import com.tangem.feature.wallet.presentation.wallet.utils.ScreenLifecycleProvider
import com.tangem.features.biometry.AskBiometryComponent
import com.tangem.features.feed.entry.featuretoggle.FeedFeatureToggle
@@ -107,6 +108,7 @@ internal class WalletModel @Inject constructor(
) : Model() {
val askBiometryModelCallbacks = AskBiometryModelCallbacks()
+ val tangemPayKycRejectedCallbacks = TangemPayKycRejectedCallbacks()
val askForPushNotificationsModelCallbacks = AskForPushNotificationsCallbacks()
val uiState: StateFlow = stateHolder.uiState
@@ -769,6 +771,20 @@ internal class WalletModel @Inject constructor(
}
}
+ inner class TangemPayKycRejectedCallbacks : KycRejectedCallbacks {
+ override fun onClickYourProfile(userWalletId: UserWalletId) {
+ clickIntents.onKycRejectedOpenProfileClicked(userWalletId)
+ }
+
+ override fun onClickGoToSupport(customerId: String) {
+ clickIntents.onKycRejectedGoToSupportClicked(customerId)
+ }
+
+ override fun onClickHideKyc(userWalletId: UserWalletId) {
+ clickIntents.onKycRejectedHideKycClicked(userWalletId)
+ }
+ }
+
inner class AskForPushNotificationsCallbacks : PushNotificationsModelCallbacks {
override fun onAllowSystemPermission() {
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt
index e7a6f9325e..f157783abb 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt
@@ -1,5 +1,6 @@
package com.tangem.feature.wallet.child.wallet.model.intents
+import com.arkivanov.decompose.router.slot.activate
import com.tangem.common.routing.AppRoute
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.ui.UiMessageSender
@@ -13,6 +14,7 @@ import com.tangem.core.ui.message.bottomSheetMessage
import com.tangem.domain.feedback.GetWalletMetaInfoUseCase
import com.tangem.domain.feedback.SendFeedbackEmailUseCase
import com.tangem.domain.feedback.models.FeedbackEmailType
+import com.tangem.domain.feedback.models.WalletMetaInfo
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.pay.TangemPayDetailsConfig
@@ -21,6 +23,7 @@ import com.tangem.domain.pay.repository.OnboardingRepository
import com.tangem.domain.pay.usecase.ProduceTangemPayInitialDataUseCase
import com.tangem.domain.pay.usecase.TangemPayMainScreenCustomerInfoUseCase
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController
+import com.tangem.feature.wallet.presentation.wallet.state.model.WalletDialogConfig
import com.tangem.feature.wallet.presentation.wallet.state.transformers.TangemPayHideOnboardingStateTransformer
import com.tangem.feature.wallet.presentation.wallet.state.transformers.TangemPayRefreshNeededStateTransformer
import com.tangem.feature.wallet.presentation.wallet.state.transformers.TangemPayRefreshShowProgressTransformer
@@ -38,6 +41,14 @@ internal interface TangemPayIntents {
fun onKycProgressClicked(userWalletId: UserWalletId)
+ fun onKycRejectedClicked(userWalletId: UserWalletId, customerId: String)
+
+ fun onKycRejectedOpenProfileClicked(userWalletId: UserWalletId)
+
+ fun onKycRejectedGoToSupportClicked(customerId: String)
+
+ fun onKycRejectedHideKycClicked(userWalletId: UserWalletId)
+
fun onIssuingCardClicked()
fun onIssuingFailedClicked()
@@ -137,6 +148,42 @@ internal class TangemPayClickIntentsImplementor @Inject constructor(
uiMessageSender.send(kycInfoBottomSheet)
}
+ override fun onKycRejectedOpenProfileClicked(userWalletId: UserWalletId) {
+ router.openTangemPayOnboarding(
+ mode = AppRoute.TangemPayOnboarding.Mode.ContinueOnboarding(userWalletId),
+ )
+ }
+
+ override fun onKycRejectedGoToSupportClicked(customerId: String) {
+ goToSupportForRejectKyc(customerId)
+ }
+
+ override fun onKycRejectedHideKycClicked(userWalletId: UserWalletId) {
+ disableTangemPay(userWalletId)
+ }
+
+ override fun onKycRejectedClicked(userWalletId: UserWalletId, customerId: String) {
+ router.dialogNavigation.activate(
+ configuration = WalletDialogConfig.KycRejected(
+ walletId = userWalletId,
+ customerId = customerId,
+ ),
+ )
+ }
+
+ private fun goToSupportForRejectKyc(customerId: String) {
+ modelScope.launch {
+ sendFeedbackEmailUseCase(
+ type = FeedbackEmailType.Visa.KycRejected(
+ walletMetaInfo = WalletMetaInfo(
+ userWalletId = stateHolder.getSelectedWalletId(),
+ ),
+ customerId = customerId,
+ ),
+ )
+ }
+ }
+
override fun onIssuingCardClicked() {
val issuingBottomSheet = bottomSheetMessage {
infoBlock {
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/di/WalletFeatureModule.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/di/WalletFeatureModule.kt
index 1a925f467e..913e1262d2 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/di/WalletFeatureModule.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/di/WalletFeatureModule.kt
@@ -4,6 +4,7 @@ import com.tangem.core.decompose.model.Model
import com.tangem.feature.wallet.DefaultWalletEntryComponent
import com.tangem.feature.wallet.child.organizetokens.model.OrganizeTokensModel
import com.tangem.feature.wallet.child.wallet.model.WalletModel
+import com.tangem.feature.wallet.presentation.wallet.ui.components.visa.KycRejectedModel
import com.tangem.feature.wallet.utils.DefaultUserWalletImageFetcher
import com.tangem.feature.wallet.utils.DefaultUserWalletsFetcher
import com.tangem.features.wallet.WalletEntryComponent
@@ -36,6 +37,11 @@ internal interface WalletFeatureModule {
@ClassKey(WalletModel::class)
fun bindWalletModel(model: WalletModel): Model
+ @Binds
+ @IntoMap
+ @ClassKey(KycRejectedModel::class)
+ fun bindKycRejectedModel(model: KycRejectedModel): Model
+
@Binds
@IntoMap
@ClassKey(OrganizeTokensModel::class)
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
index e2df7c8cca..5e65dfb36a 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
@@ -2,6 +2,7 @@ package com.tangem.feature.wallet.presentation.wallet.analytics.utils
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped
+import com.tangem.domain.pay.model.CustomerInfo
import com.tangem.domain.pay.model.MainScreenCustomerInfo
import com.tangem.domain.pay.model.OrderStatus
import com.tangem.domain.tangempay.TangemPayAnalyticsEvents
@@ -25,8 +26,10 @@ internal class WalletTangemPayAnalyticsEventSender @Inject constructor(
// TODO: TangemPay refactor analytics
// when statement copied from TangemPayUpdateInfoStateTransformer. Be careful when editing
val event = when {
- customerInfo.orderStatus == OrderStatus.CANCELED -> return // ignore cancelled state on analytics
- !customerInfo.info.isKycApproved -> return // ignore kyc not approved state on analytics
+ // ignore cancelled state on analytics
+ customerInfo.orderStatus == OrderStatus.CANCELED -> return
+ // ignore kyc not approved state on analytics
+ customerInfo.info.kycStatus != CustomerInfo.KycStatus.APPROVED -> return
cardInfo != null && productInstance != null -> return
else -> TangemPayAnalyticsEvents.IssuingBannerDisplayed()
}
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletDialogConfig.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletDialogConfig.kt
index 4042c8b37e..a482dc420f 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletDialogConfig.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletDialogConfig.kt
@@ -32,4 +32,7 @@ internal sealed interface WalletDialogConfig {
val tokenAction: TokenAction,
val onWarningAcknowledged: (TokenAction) -> Unit,
) : WalletDialogConfig
+
+ @Serializable
+ data class KycRejected(val walletId: UserWalletId, val customerId: String) : WalletDialogConfig
}
\ No newline at end of file
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt
index b6ad2482ff..9a9ce4feee 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt
@@ -16,6 +16,8 @@ import com.tangem.feature.wallet.child.wallet.model.intents.TangemPayIntents
import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState
import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState.Progress
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletState
+import com.tangem.domain.pay.model.CustomerInfo.KycStatus.APPROVED
+import com.tangem.domain.pay.model.CustomerInfo
import java.util.Currency
/**
@@ -43,11 +45,13 @@ internal class TangemPayUpdateInfoStateTransformer(
private fun createInitialState(): TangemPayState {
val cardInfo = value.info.cardInfo
val productInstance = value.info.productInstance
+ val customerId = value.info.customerId
// when statement copied to WalletTangemPayAnalyticsEventSender. Be careful when editing.
return when {
value.orderStatus == OrderStatus.CANCELED -> createCancelledState()
- !value.info.isKycApproved -> createKycInProgressState()
+ value.info.kycStatus != APPROVED && !customerId.isNullOrEmpty() ->
+ createKycInProgressState(kycStatus = value.info.kycStatus, customerId = customerId)
cardInfo != null && productInstance != null -> getCardInfoState(cardInfo, productInstance)
else -> createIssueProgressState()
}
@@ -80,13 +84,25 @@ internal class TangemPayUpdateInfoStateTransformer(
}
}
- private fun createKycInProgressState(): TangemPayState = Progress(
- title = TextReference.Res(R.string.tangempay_payment_account),
- description = TextReference.Res(R.string.tangempay_kyc_in_progress),
- buttonText = TextReference.Res(R.string.tangempay_kyc_in_progress_notification_button),
- iconRes = R.drawable.ic_promo_kyc_36,
- onButtonClick = { tangemPayClickIntents.onKycProgressClicked(userWalletId) },
- )
+ private fun createKycInProgressState(kycStatus: CustomerInfo.KycStatus, customerId: String): TangemPayState =
+ Progress(
+ title = TextReference.Res(R.string.tangempay_payment_account),
+ description = when (kycStatus) {
+ CustomerInfo.KycStatus.REJECTED -> TextReference.Res(R.string.tangempay_kyc_has_failed)
+ else -> TextReference.Res(R.string.tangempay_kyc_in_progress)
+ },
+ buttonText = TextReference.Res(R.string.tangempay_kyc_in_progress_notification_button),
+ iconRes = R.drawable.ic_promo_kyc_36,
+ onButtonClick = {
+ when (kycStatus) {
+ CustomerInfo.KycStatus.REJECTED -> tangemPayClickIntents.onKycRejectedClicked(
+ userWalletId = userWalletId,
+ customerId = customerId,
+ )
+ else -> tangemPayClickIntents.onKycProgressClicked(userWalletId)
+ }
+ },
+ )
private fun createIssueProgressState(): TangemPayState = Progress(
title = TextReference.Res(R.string.tangempay_payment_account),
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedComponent.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedComponent.kt
new file mode 100644
index 0000000000..5cccb5d97a
--- /dev/null
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedComponent.kt
@@ -0,0 +1,49 @@
+package com.tangem.feature.wallet.presentation.wallet.ui.components.visa
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.tangem.core.decompose.context.AppComponentContext
+import com.tangem.core.decompose.model.getOrCreateModel
+import com.tangem.core.ui.components.bottomsheets.message.MessageBottomSheetV2
+import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
+import com.tangem.domain.models.wallet.UserWalletId
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+
+internal class KycRejectedComponent @AssistedInject constructor(
+ @Assisted appComponentContext: AppComponentContext,
+ @Assisted params: Params,
+) : ComposableBottomSheetComponent, AppComponentContext by appComponentContext {
+
+ private val model: KycRejectedModel = getOrCreateModel(params = params)
+
+ override fun dismiss() {
+ model.onDismiss()
+ }
+
+ @Composable
+ override fun BottomSheet() {
+ val state by model.uiState.collectAsStateWithLifecycle()
+ MessageBottomSheetV2(state = state, onDismissRequest = ::dismiss)
+ }
+
+ data class Params(
+ val callbacks: KycRejectedCallbacks,
+ val walletId: UserWalletId,
+ val customerId: String,
+ val onDismiss: () -> Unit,
+ )
+
+ @AssistedFactory
+ interface Factory {
+ fun create(appComponentContext: AppComponentContext, params: Params): KycRejectedComponent
+ }
+}
+
+internal interface KycRejectedCallbacks {
+ fun onClickYourProfile(userWalletId: UserWalletId)
+ fun onClickGoToSupport(customerId: String)
+ fun onClickHideKyc(userWalletId: UserWalletId)
+}
\ No newline at end of file
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedModel.kt
new file mode 100644
index 0000000000..40e010fd56
--- /dev/null
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/KycRejectedModel.kt
@@ -0,0 +1,77 @@
+package com.tangem.feature.wallet.presentation.wallet.ui.components.visa
+
+import androidx.compose.runtime.Stable
+import androidx.compose.ui.text.style.TextDecoration
+import com.tangem.core.decompose.di.ModelScoped
+import com.tangem.core.decompose.model.Model
+import com.tangem.core.decompose.model.ParamsContainer
+import com.tangem.core.res.R
+import com.tangem.core.ui.components.bottomsheets.message.*
+import com.tangem.core.ui.extensions.combinedReference
+import com.tangem.core.ui.extensions.resourceReference
+import com.tangem.core.ui.extensions.stringReference
+import com.tangem.core.ui.extensions.styledResourceReference
+import com.tangem.core.ui.message.bottomSheetMessage
+import com.tangem.core.ui.res.TangemTheme
+import com.tangem.utils.coroutines.CoroutineDispatcherProvider
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import javax.inject.Inject
+
+@Stable
+@ModelScoped
+internal class KycRejectedModel @Inject constructor(
+ paramsContainer: ParamsContainer,
+ override val dispatchers: CoroutineDispatcherProvider,
+) : Model() {
+
+ private val params = paramsContainer.require()
+
+ val uiState: StateFlow
+ field = MutableStateFlow(getInitialState())
+
+ private fun getInitialState(): MessageBottomSheetUMV2 {
+ return bottomSheetMessage {
+ infoBlock {
+ icon(com.tangem.core.ui.R.drawable.ic_heart_broken_32) {
+ type = MessageBottomSheetUMV2.Icon.Type.Warning
+ backgroundType = MessageBottomSheetUMV2.Icon.BackgroundType.Warning
+ }
+ title = resourceReference(R.string.tangempay_kyc_rejected)
+ body = combinedReference(
+ resourceReference(R.string.tangempay_kyc_rejected_description),
+ stringReference(" "),
+ styledResourceReference(
+ id = R.string.tangempay_kyc_rejected_description_span,
+ spanStyleReference = {
+ TangemTheme.typography.body2.copy(TangemTheme.colors.text.accent).toSpanStyle()
+ .copy(textDecoration = TextDecoration.None)
+ },
+ onClick = {
+ params.callbacks.onClickYourProfile(userWalletId = params.walletId)
+ onDismiss()
+ },
+ ),
+ )
+ }
+ primaryButton {
+ text = resourceReference(R.string.tangempay_go_to_support)
+ onClick = {
+ params.callbacks.onClickGoToSupport(customerId = params.customerId)
+ onDismiss()
+ }
+ }
+ secondaryButton {
+ text = resourceReference(R.string.tangempay_kyc_rejected_button_text)
+ onClick = {
+ params.callbacks.onClickHideKyc(userWalletId = params.walletId)
+ onDismiss()
+ }
+ }
+ }.messageBottomSheetUMV2
+ }
+
+ fun onDismiss() {
+ params.onDismiss()
+ }
+}
\ No newline at end of file