From ca13be7165ffc6f39d98b059a1e6a288bffff4ca Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 4 Sep 2025 19:29:10 +0300 Subject: [PATCH 01/17] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 4 +- core/res/src/main/res/values-es/strings.xml | 128 +++++++++--------- core/res/src/main/res/values-fr/strings.xml | 18 ++- core/res/src/main/res/values-ja/strings.xml | 8 +- core/res/src/main/res/values-ru/strings.xml | 49 ++++++- .../src/main/res/values-uk-rUA/strings.xml | 32 ++++- core/res/src/main/res/values/strings.xml | 102 +++++++++++++- 7 files changed, 251 insertions(+), 90 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index d0bb34dd95..b7cc837f73 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -452,7 +452,7 @@ Aktuelle Preise werden abgerufen ... Variabler Zinssatz Durch die Nutzung der Swap-Funktion erklärst du dich mit den folgenden Bedingungen des Anbieters einverstanden %s - Durch die Nutzung der Swap-Funktionalität erklärst du dich mit des Anbieters %1$s und %2$s einverstanden + Durch die Nutzung der Swap-Funktionalität erklärst du dich mit des Anbieters %1$s und %2$s einverstanden. Weitere Anbieter folgen in Kürze Anbieter Bester Preis @@ -1039,7 +1039,7 @@ Senden... Berühre an beliebiger Stelle für Änderungen Versende %s - Du sendest **%1$s** inklusive der Netzwerkgebühr %2$s + Du sendest **%1$s** inklusive der Netzwerkgebühr %2$s. Du sendest **%1$s** und %2$s Du sendest **%1$s** Die Netzwerkgebühr wird durch die Nutzung von %1$s Energieträgern gedeckt. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index d665c40e7f..a3004d282b 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -26,7 +26,7 @@ Gestionar tokens Envíe solo %1$s (%2$s) desde redes como %3$s a esta dirección. Usar otros tokens y redes puede resultar en la pérdida de fondos. Por defecto - Legado + Legacy Cómo escanear Solicitar soporte Inténtelo de nuevo @@ -65,8 +65,8 @@ Guarde estas %s palabras en un lugar seguro, como un administrador de contraseñas, y nunca las comparta con nadie. No se puede restaurar Frase de recuperación - Escriba estas palabras %s en orden y guárdelas en un lugar privado y seguro - La responsabilidad total de la seguridad y la copia de seguridad de la billetera y la frase de recuperación recae en el usuario, no en Tangem. + Escriba estas %s palabras en orden y guárdelas en un lugar privado y seguro + La responsabilidad total sobre la seguridad y copia de seguridad de la billetera y su frase de recuperación recae en el usuario, no en Tangem. Frase de recuperación Para ocultar o mostrar tus saldos, simplemente gira la pantalla de tu dispositivo hacia abajo, o desactívalo en Ajustes No mostrar de nuevo @@ -118,7 +118,7 @@ Requisitos de transacción de Cardano Para realizar una %1$s transacción, deba depositar algo de ADA para cubrir la tarifa de red y el valor mínimo de ADA (se recomiendan 5 ADA) ADA insuficiente para la transferencia de tokens - El monto enviado y el cambio no pueden ser menores a 1 ADA + La cantidad enviada y el cambio no pueden ser menores a 1 ADA Deba mantener algo de ADA porque tiene algunos tokens en la blockchain de Cardano ADA insuficiente Aceptar @@ -147,9 +147,9 @@ Cancelar Cambie Elige una acción - Elegir red - Elige token - Elegir wallet + Elija red + Elija token + Elija wallet Reclamar Reclame recompensas Cerrar @@ -196,7 +196,7 @@ Sincronizar direcciones Ir al proveedor Ir al token - Entiendo + Entendido Ocultar hora Importe @@ -221,7 +221,7 @@ Anillo primario Frase de contraseña Pegar - Política de privacidad + Política de privacidad %1$s-%2$s %1$s — %2$s Leer más @@ -254,10 +254,10 @@ Enviar Con éxito Soporte - Redes compatibles + Redes soportadas Swap términos y condiciones - Condiciones de uso + Condiciones de uso Hoy %d token @@ -271,7 +271,7 @@ Hubo un error. Por favor inténtelo de nuevo. Inaccesible Termine el staking - Debido a limitaciónes sobre %1$s, solos %2$d UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debe reducir la cantidad. + Debido a limitaciones sobre %1$s, solo %2$d UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debe reducir la cantidad. Valor copiado semana con @@ -334,7 +334,8 @@ Recibir activos %s dirección Enviar activos a otras redes resultará en una pérdida permanente. - Envíe fondos utilizando solo + Red de %s + Envíe fondos utilizando solo la Hola equipo de soporte, he encontrado un error con el código: %s Error de WalletConnect Ha usado una tarjeta de otra billetera. Toque la tarjeta asociada con esta billetera @@ -377,7 +378,7 @@ Esperando depósito Esperando depósito Reembolso completado - A la espera del reembolso + Esperando reembolso Transfiriendo a su cuenta Enviando fondos... Fondos enviados @@ -389,12 +390,12 @@ Buscar tarifas actuales... Tasa flotante Al utilizar la función de intercambio, acepta el %s - Al utilizar la función de intercambio, aceptas las condiciones de %1$s y %2$s del proveedor + Al utilizar la función de intercambio, aceptas las condiciones de %1$s y %2$s del proveedor. Pronto habrá más proveedores disponibles Proveedor Mejor tarifa Lista de advertencias de la FCA - Proveedor en la lista de advertencia de la FCA + Proveedor en la lista de advertencias de la FCA Disponible hasta %s Disponible desde %s No disponible para este par @@ -407,7 +408,7 @@ Una vez oculto, el estado de la transacción no se puede volver a ver. En su lugar, basta con deslizar el dedo para descartarla. ¿Ocultar el estado de la transacción? Este token no es compatible. Por favor, elige un token diferente para intercambiar. - %s no es compatible + %s no está soportado Intercambiar con No se encontraron fichas. Por favor intenta con otra solicitud ID : %s @@ -436,8 +437,8 @@ Para continuar, de autorización a los smart contracts de %1s para usar su %2s Dar autorización Ilimitado - Agregar billetera existente - Crear nueva billetera + Agregar Billetera Existente + Crear Nueva Billetera Pedir Tangem Escanee a %s @@ -524,7 +525,7 @@ Top Ganadores Top Perdedores Tendencias - Staking es la forma más fácil de recibir recompensas por tus criptomonedas. %s + Staking es la forma más fácil de recibir recompensas por sus criptomonedas. %s Gana hasta %s APY Acerca de %s @@ -605,14 +606,14 @@ Colecciones de NFT Es posible que algunos datos no se carguen Problemas temporales de carga - Información de base + Información básica Cadena Dirección del contrato Cadena es la blockchain en la que está el NFT. La dirección del contrato es un identificador único para el contrato inteligente que gobierna los tokens en la blockchain Una etiqueta que describe lo raro que es el NFT. Cuanto menor sea el valor, más único será el NFT. La posición de un NFT en el ranking de rareza entre otros tokens. Cuanto más alto sea el ranking, más raro y valioso será el NFT. - La dirección del contrato es un identificador único para el contrato inteligente que gobierna los tokens en la blockchain + La dirección del token es un identificador único del token en la blockchain, que permite el seguimiento de las transacciones y la propiedad El ID del token es un identificador único asignado a cada token, que lo distingue de otros en la colección. El estándar de token define qué tipo de token es y cómo funciona con diferentes billeteras y plataformas Último precio de venta @@ -642,13 +643,13 @@ Pulse aquí para recibir el primer NFT Colecciones de NFT No se pueden cargar los datos - Para utilizar la red %1$s, debe pagar la reserva de cuenta (%2$s%3$s), que bloquea y oculta ese monto indefinidamente + Para utilizar la red %1$s, debe pagar la reserva de cuenta (%2$s%3$s), que bloqueará y ocultará esa cantidad indefinidamente La cuenta de destino no está activa. Envíe %s o más para activar la cuenta. Para crear una cuenta, envíe fondos a esta dirección - La cuenta de destino no tiene una Trustline para el activo que se envía. - Únete ahora - Comparte tu código y gana 5 USDT por venta. Tu amigo obtiene un 10% de descuento. - ¡Obtén RECOMPENSAS por cada amigo! + La cuenta de destino no tiene una Trustline (línea de confianza) para el activo que se envía. + Únase ahora + Comparta su código y gane 5 USDT por venta. Su amigo obtiene un 10% de descuento. + ¡Obtenga RECOMPENSAS por cada amigo! Deba configurar un único código de acceso para proteger todss sus dispositivos. Proteger Puede configurar un código de acceso individual en cada tarjeta más adelante @@ -775,11 +776,11 @@ Organizar tokens Desagrupar Más información - Puedes activar las Notificaciones para Tangem en Ajustes. + Puede activar las Notificaciones para Tangem en Ajustes. Activar más tarde Ajustes Activar notificaciones - Reciba alertas de transacciones entrantes en las redes compatibles + Reciba alertas de transacciones entrantes en las redes soportadas Notificaciones de transacciones Seleccione de la galería Ajustes @@ -869,17 +870,17 @@ Introduce la dirección Nombre ENS o dirección La dirección es la misma que su billetera. - El monto mínimo es %s + La cantidad mínima es %s El cambio mínimo es %s Tarifa no válida El saldo mínimo es %s - No se ha creado la cuenta de destino. El monto a enviar debe ser %s + comisiones o más + No se ha creado la cuenta de destino. La cantidad a enviar debe ser %s + comisiones o más Error desconocido Memo no válido. No se añadirá a la transacción. Memo Compruebe su conexión de red Información de tarifa de red no accesible - Tú envías + Envía Desde De %s Límite de gas @@ -893,7 +894,7 @@ Memo no válido Cobertura de tarifa de red Nonce - Número único para cada transacción. Utilízalo para reenviar o cancelar una transacción pendiente. + Número único para cada transacción. Utilícelo para reenviar o cancelar una transacción pendiente. Introduzca nonce.. Fondos insuficientes para la transferencia, ya que el total de la tarifa y el importe de la transferencia supera el saldo existente El total supera el saldo @@ -934,7 +935,7 @@ Enviando... Toque cualquier campo para editarlo Enviar %s - Está enviando **%1$s** incluida una tarifa de red de %2$s + Está enviando **%1$s** incluida una tarifa de red de %2$s. Está enviando**%1$s** y %2$s Está enviando **%1$s** La tarifa de red se cubrirá al usar %1$s energía @@ -943,19 +944,22 @@ A la dirección La transacción se firmó con éxito y se envió al nodo blockchain. El saldo de la billetera se actualizará después de un tiempo. %1$s es un activo en la red Tron. Para calcular la tarifa y realizar una transacción, deba depositar algo de Tron (TRX) en su cuenta. - El monto excede el saldo + La cantidad excede el saldo Es necesario una etiqueta de destino (memo) para completar esta transacción para la dirección especificada. Etiqueta de destino obligatoria Cantidad no válida La tarifa excede el saldo - El monto total excede el saldo + La cantidad total excede el saldo Intercambiar y enviar ¿Continuar con la conversión? Esto borrará sus datos anteriores. Confirmar Conversión - Envía cualquier token y lo convertiremos en el camino. Su destinatario obtiene exactamente lo que necesita, sin problemas. + El envío de cualquier otra moneda supondrá su pérdida irreversible. + Seleccione la red de destino correcta + Elige cualquier token para recibir. Su destinatario recibirá exactamente lo que seleccionaste, sin problemas. El destinatario recibirá Al destinatario Cantidad a recibir + El destinatario recibe %s ¿Seguro que desea cancelar la conversión? Se borrarán sus datos anteriores. Enviar con swap Transacción enviada @@ -963,7 +967,7 @@ Olvidar la billetera Esto eliminará la wallet de la aplicación. La wallet en sí puede\nañadirse de nuevo. Nombre - Haz que tu token trabaje por ti + Haga que su token trabaje para Ud. El monto del staking debe ser al menos %s El monto del staking se redondeará a %1$s TRX debido a las reglas de la red. El monto de cancelación del staking se redondeará a %1$s TRX debido a las reglas de la red. @@ -1098,7 +1102,7 @@ Compatible con Web 3.0 Se requiere una transacción entrante de al menos %1$s para proceder Fondos insuficientes - Tasa fija + Tasa Fija 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! @@ -1173,12 +1177,12 @@ desde: %s a: %s validador: %s - Las notificaciones están activadas, pero no funcionarán hasta que permitas las notificaciones en la configuración de tu dispositivo. + Las notificaciones están activadas, pero no funcionarán hasta que permita las notificaciones en la configuración de su dispositivo. Notificaciones de transacciones Mínimo %s El monto mínimo para realizar esta transacción es %1$s. - Las tarifas de la red Tron para tokens populares pueden ser más altas. Hacer staking de TRX puede ayudar a reducir los costos de transacción. - Ahorra en las tarifas de la red Tron + Las tarifas de la red Tron para tokens populares pueden ser más altas. Hacer staking de TRX puede ayudar a reducir costes de transacción. + Ahorre en las tarifas de la red Tron Inténtelo de nuevo Ha escaneado la misma tarjeta. Para crear una billetera gemela, necesite escanear la tarjeta con no. %d Ha escaneado la tarjeta gemela incorrecta. Por favor, intente con otra @@ -1191,9 +1195,9 @@ Tangem Twin Esta acción es irreversible. No tendrá acceso la billetera antigua. Toque la tarjeta gemela con el número %s y no la retira hasta el final de la operación - Por favor, inténtelo de nuevo más tarde. Si el problema persiste, póngase en contacto con el servicio de asistencia. + Por favor, inténtelo de nuevo más tarde. Si el problema persiste, póngase en contacto con el servicio de soporte. ¡Algo salió mal! - Hemos encontrado un error. Código de error: %s. Póngase en contacto con nuestro servicio de asistencia. + Hemos encontrado un error. Código de error: %s. Póngase en contacto con nuestro servicio de soporte. Use %s o escanee una tarjeta/anillo para tener acceso a su billetera Error de conexión: Esta dApp utiliza la versión 1.0 de Wallet Connect, que no es compatible. Asegúrese de que la dApp sea compatible con la versión 2.0 de Wallet Connect para conectarse correctamente. Manténgase actualizado con las últimas funciones y noticias @@ -1257,7 +1261,7 @@ Accede a más de 13 000 criptomonedas. Compra, vende, intercambia y realiza staking con un solo toque.\nVincula hasta tres tarjetas para hacer copias de seguridad. Descubre Tangem Wallet Cambiar código de acceso - Manténteinformado sobre las transacciones entrantes de la billetera y las actualizaciones de Tangem. + Manténgase informado sobre las transacciones entrantes de la billetera y las actualizaciones de Tangem. Notificaciones de transacciones Establecer código de acceso Ajustes de la wallet @@ -1294,7 +1298,7 @@ El monto a recibir debe ser de al menos %s 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 (FCA) del Reino Unido. Deberías evitar tratar con ellos. + Algunos proveedores no están autorizados por la Autoridad de Conducta Financiera del Reino Unido. Debe evitar tratar con ellos. Servicio no disponible temporalmente La cantidad de tokens a intercambiar no debe exceder %s El monto a cambiar debe ser de al menos %s @@ -1330,10 +1334,10 @@ Su opinión nos motiva a hacer Tangem Wallet aún mejor ¿Disfrutando de Tangem? Deba asociar su token antes de recibir tokens - Debes abrir una línea de confianza para tu token antes de recibirlo + Debe abrir una trustline (línea de confianza) para su token antes de recibirlo Se requiere tarifa de alquiler de red Acción requerida - ¿Te pusiste en contacto con el servicio de asistencia a través de la aplicación o por correo electrónico en los 7 días posteriores a la creación de la billetera? Si lo hiciste o no estás seguro, sigue y completa las instrucciones. + ¿Se puso en contacto con el servicio de soporte a través de la app en los 7 días posteriores a la creación de la billetera? Si lo hizo o no está seguro, pulse en \"Sí\" y complete las instrucciones. ¡Gracias! ¡Todo listo! No se requieren más acciones. Ahora será redirigido al sitio web oficial de Tangem. Por favor, lea y siga las instrucciones allí indicadas. ¿Alguna vez contactó al equipo de soporte de Tangem directamente desde esta aplicación? @@ -1350,16 +1354,16 @@ Esta es una tarjeta de Testnet. No puede procesar transacciones y solo deba usarse para pruebas y desarrollo. Solo para fines de prueba El saldo podría estar desactualizado. Actualice la página. - No hay suficiente %1$s. Recarga tu %2$s cuenta para asociar este token - Habilitar línea de confianza - Una línea de confianza debe estar habilitada para recibir este token. La red requiere un %1$s %2$s reserva. - Se requiere línea de confianza + No hay suficiente %1$s. Recargue su cuenta %2$s para asociar este token + Habilitar Trustline (línea de confianza) + Una trustline (línea de confianza) debe estar habilitada para recibir este token. La red requiere un %1$s %2$s reserva. + Se requiere trustline (línea de confianza) La red requerida %s no está añadida a su portafolio. Añádala primero y luego continúe con la conexión. Agregue red al portafolio Dominio malicioso Dominio desconocido Conectarse de todas formas - Error de tiempo de espera. Por favor, inténtalo de nuevo más tarde. + Error de tiempo de espera. Por favor, inténtelo de nuevo más tarde. Error al establecer WalletConnect Este dominio no puede ser verificado. Compruebe cuidadosamente la solicitud de aprobación. Para continuar, vuelva a conectar su sesión de dApp con la red requerida %s. @@ -1379,10 +1383,10 @@ Esta red %s no es compatible con Tangem Wallet y no puede conectarse. Red no compatible Actualmente, Tangem no es compatible con una red requerida por %s. - Redes no compatibles + Redes no soportadas Este dominio ha superado las verificaciones y se considera seguro, confiable y libre de amenazas conocidas o actividades sospechosas. Dominio verificado - Se seleccionó una tarjeta o un anillo incorrectos en la app + Se seleccionó una tarjeta o un anillo incorrectos en la App Tenemos algún tipo de problema Todas las dApps desconectadas Permitir gastar @@ -1411,22 +1415,22 @@ Todas las sesiones de dApp se desconectarán. Su billetera ya no estará vinculada a ninguna dApp. Desconectar todas las dApps Intente emparejar nuevamente con una URI nueva - Dominio de dApp no válido + Dominio de dApp incorrecto %s no especifica ninguna blockchain, ni obligatoria ni opcional. Asegúrese de haber utilizado el URI correcto Sin redes Por favor, genere una nueva URI e intente conectarse nuevamente Propuesta de conexión caducada Cambios estimados en la billetera La transacción no ha podido ser simulada. Por favor, proceda con precaución. - La estimación no es compatible con %s + La estimación no está soportada para %s Sugerido por %s Recargue su saldo para cubrir la tarifa de red Insuficiente %1$s Transacción maliciosa - Añada la red %s a su perfil para esta billetera + Añada la red %s a su portafolio para esta billetera La billetera no tiene las redes requeridas Nueva conexión - Conecta tu billetera a diferentes dApps + Conecte su billetera a diferentes dApps Sin sesiones No se han detectado cambios en la billetera Se han detectado riesgos potenciales o comportamiento malicioso. Conectarse o firmar transacciones puede resultar en la pérdida de fondos. @@ -1434,7 +1438,7 @@ Abra la aplicación Web3 y elija la opción WalletConnect Solicitud de Firmar de todos modos - Tipo de firma + Tipo de Firma Se requiere al menos una red para la conexión dApp Especificar las redes seleccionadas Firmado correctamente @@ -1458,6 +1462,6 @@ Use %s o escanee una tarjeta/anillo para acceder a la app ¡Bienvenido de nuevo! No, enviar todo - Réduire de %s XTZ - Para evitar pagar una comisión mayor la próxima vez que recargue su billetera, reduzca el monto en %s + Reducir en %s XTZ + Para evitar pagar una comisión mayor la próxima vez que recargue su billetera, reduzca el importe en %s XTZ diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 228fa133e0..0d2ee7b831 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -198,7 +198,7 @@ Bague principale Passphrase Coller - Politique de confidentialité + Politique de confidentialité %1$s-%2$s %1$s — %2$s En savoir plus @@ -234,7 +234,7 @@ Réseaux pris en charge Échanger termes et conditions - Conditions d\'utilisation + Conditions d\'utilisation Aujourd\'hui %d jeton @@ -311,6 +311,7 @@ Recevoir des actifs %s adresse L’envoi d’actifs sur d’autres réseaux entraînera une perte définitive. + %s réseau Envoyez des fonds en utilisant uniquement Bonjour équipe de support, j’ai rencontré une erreur avec le code : %s Erreur WalletConnect @@ -365,7 +366,7 @@ En cherche des meilleurs taux Taux flottant En utilisant la fonctionnalité d\'échange, vous acceptez les %s - En utilisant la fonctionnalité d\'échange, vous acceptez les conditions %1$s et %2$s du fournisseur + En utilisant la fonctionnalité d\'échange, vous acceptez les conditions %1$s et %2$s du fournisseur. D\'autres fournisseurs arriveront bientôt.\nRestez branchés ! Fournisseur Meilleur taux @@ -908,7 +909,7 @@ En cours d\'envoi Appuyez sur n\'importe quel champ pour le modifier Envoyer %s - Vous envoyez **%1$s** incluant des frais de réseau de %2$s + Vous envoyez **%1$s** incluant des frais de réseau de %2$s. Vous envoyez **%1$s** et %2$s Vous envoyez **%1$s** les frais de réseau seront couverts en utilisant %1$s énergie @@ -923,11 +924,20 @@ Montant invalide Les frais de commissions dépassent le solde Le total dépasse le solde + Êtes-vous sûr de vouloir modifier le token de réception ? Cela réinitialisera les données que vous avez saisies précédemment. + Changement de token Échanger et envoyer + Poursuivre l\'échange ? Cela effacera vos données précédentes. + Confirmer la conversion + L\'envoi de toute autre crypto entraînera sa perte irréversible. + Sélectionnez le réseau destinataire approprié. Envoyez n\'importe quel jeton et nous le convertirons en cours de route. Votre destinataire reçoit exactement ce dont il a besoin, en toute simplicité. Le destinataire recevra Un destinataire sera envoyé Montant à recevoir + Le destinataire reçoit %s + Êtes-vous sûr de vouloir annuler la conversion ? Vos données précédentes seront effacées. + Supprimer la conversion Envoyer avec swap Transaction envoyée Scannez la carte/ bague que vous souhaitez configurer. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 76ddd053e5..ff93a67733 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1043,13 +1043,13 @@ 受信トークンを変更してもよろしいですか? 変更すると、以前入力したデータがリセットされます。 トークンの変更 スワップして送信 - 変換を続行しますか? これにより以前のデータは消去されます。 + スワップを実行しますか?これにより以前のデータは消去されます。 変換を確定 その他の通貨を送信すると、取り返しのつかない損失が発生します。 正しい受信者ネットワークを選択してください - 受け取るトークンを自由に選んでください。受信者は、あなたが選択したトークンをシームレスに受け取ります。 - 受信者は受け取ります - 受取人へ + 受け取るトークンを選んでください。受信者は、あなたが選択したトークンをシームレスに受け取ります。 + 受信者が受け取ります + 受信者へ 受取金額 受信者は%sを取得します 変換をキャンセルしてもよろしいですか?以前のデータは消去されます。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index a3fd7c0d13..611b0ded63 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -1,5 +1,12 @@ + Архив + Вы архивируете свой аккаунт, но в любое время можете вернуть его обратно + Аккаунт + Новый аккаунт + Основной аккаунт + Продолжить редактирование + Несохраненные изменения Не нашли свой токен? Перейдите в раздел «Рынок» на главной странице и добавьте его в свой портфель для покупки. Не нашли свой токен? Перейдите в раздел «Рынок» на главной странице и добавьте его в свой портфель для продажи. Продать @@ -135,6 +142,7 @@ Подтвердить Подключение Продолжить + Конвертировать Копировать Скопировать адрес Создать @@ -198,7 +206,7 @@ Основное кольцо Парольная фраза Вставить - Политикой конфиденциальности + Политикой конфиденциальности %1$s-%2$s %1$s — %2$s Подробнее @@ -229,9 +237,10 @@ Отправить Успешно Поддержка + Поддерживаемые сети Обменять условия участия - Условиями использования + Условиями использования Сегодня %d токен @@ -310,6 +319,7 @@ Получить активы %s адрес Отправка средств в другой сети может повлечь потерю средств. + %s сеть Отправляйте средства, используя только Привет, команда поддержки, у меня возникла ошибка с кодом: %s Ошибка WalletConnect @@ -330,7 +340,7 @@ Обмен через %s Чтобы вернуть ваши деньги, посетите сайт провайдера Операция не выполнена провайдером - Ваш обмен занимает больше времени, чем ожидалось. Пожалуйста, обратитесь в службу поддержки провайдера для уточнения. + Ваш обмен занимает больше времени, чем обычно, но ваши средства полностью в безопасности и будут доставлены. Если возникли вопросы, вы всегда можете связаться с поддержкой провайдера. Отправленные средства были возвращены в %1$s на ваш кошелек в соответствии с правилами OKX или моста обмена. %2$s Сумма была возвращена в %1$s (%2$s сети) Посетите сайт провайдера для проверки @@ -363,7 +373,7 @@ Получение наилучших курсов... Плавающая ставка Пользуясь сервисом, вы соглашаетесь с %s - Пользуясь сервисом, вы соглашаетесь с %1$s и %2$s + Пользуясь сервисом, вы соглашаетесь с %1$s и %2$s. Больше провайдеров на подходе.\nСледите за обновлениями! Провайдер Лучший курс @@ -411,7 +421,16 @@ Сканировать в %s В сети %s + Вы уверены, что хотите прервать процесс создания кода доступа? + Аппаратный кошелёк Будьте в курсе новых функций и новостей + Это устройство не может быть использовано для апгрейда, оно уже содержит другой кошелек. + Во время операции произошла ошибка. + Приватные ключи будут перемещены из приложения в вашу Tangem карту или кольцо + Миграция ключей + Начать апгрейд + Tangem кошелек + Сделать апгрейд кошелька до аппаратной версии. Эта информация была сгенерирована ИИ.\nНажмите здесь, если обнаружили ошибку. Чтобы изменить код доступа, приложите карту или кольцо как показано выше и не убирайте до окончания операции Чтобы изменить пароль, приложите карту как показано выше и не убирайте до окончания операции @@ -726,6 +745,7 @@ Восстановление кода доступа Идентичные карты Код доступа + Все предложения Доступно с %s Tangem предоставляет доступ к покупке через сторонних провайдеров в соответствии с их правилами Поиск по стране @@ -733,13 +753,19 @@ Другие валюты Популярные фиаты Поиск по валюте + Моментально Пользуясь сервисом покупки, вы соглашаетесь с %1$s и %2$s Сумма покупки не может быть больше, чем %s Сумма покупки должна составлять минимум %s Нет доступных провайдеров для выбранной валюты + Быстрейший Оплата с + Платежный метод Доступно до %s Доступно от %s + Провайдеры + Ранее используемый + Рекомендуемый Вы сможете продолжить транзакцию через сервис стороннего провайдера, %s Переход к %s... Наши сервисы недоступны в данной стране @@ -748,6 +774,8 @@ Пожалуйста, укажите правильную страну, чтобы обеспечить точность доступных способов оплаты и услуг. Настройки You can close this screen and check the transaction status on the token details screen. + %s мин + Вы получите Вы можете закрыть этот экран и проверить статус транзакции на экране информации о токене. Через Группы @@ -837,6 +865,7 @@ Вы указали комиссию ниже рекомендуемой, это может привести к задержке исполнения вашей транзакции. Продолжить? Причина: %1$s\nКод: %2$s Транзакция не выполнена + Конвертировать в другой токен Сумма Вы можете установить комиссию за транзакцию, изменив значение в поле Satoshi per vByte. Комиссия, которая будет взята за вашу транзакцию. Вы можете выставить своё собственное значение. @@ -903,6 +932,7 @@ Получатель Неверный адрес Убедитесь, что вы отправляете средства на адрес кошелька %s. Ошибки могут привести к потере ваших токенов. + Убедитесь, что отправляете на адрес в сети %s, ошибки могут привести к потере средств. Отправить Мемо/ Код назначения - это код, разделяющий транзакции к общему получателю в сети криптовалют. Внимание: отсутствие мемо может привести к потере средств. Memo / Destination Tag — это код, разделяющий транзакции, отправляемые одному и тому же получателю в криптовалютной сети. @@ -913,7 +943,7 @@ Отправка Нажмите на любое поле, чтобы изменить его Отправка %s - Вы отправляете **%1$s**, включая комиссию сети %2$s + Вы отправляете **%1$s**, включая комиссию сети %2$s. Вы отправляете **%1$s** и %2$s Вы отправляете **%1$s** Комиссия сети будет покрыта за счет использования %1$s энергии @@ -929,12 +959,15 @@ Вы уверены, что хотите изменить токен для получения? Это действие сбросит ранее введённые данные. Изменение токена Обмен и отправка - Продолжить с конвертацией? Это действие удалит предыдущие данные + Продолжить с обменом? Это действие удалит предыдущие данные Подтвердить конвертацию + Отправка любой другой валюты приведёт к её безвозвратной потере. + Выберите правильную сеть получателя Выберите любой токен к получению. Ваш адресат получит ровно то, что вы выбрали — без лишних сложностей. Будет получено Получателю Сумма к получению + К получению %s Вы уверены, что хотите отменить конвертацию? Ваши предыдущие данные будут удалены. Убрать конвертацию Отправка с обменом @@ -1101,6 +1134,7 @@ Ошибка расчета комиссии. Пожалуйста, отправьте информацию в поддержку. Вы отправляете Обмен этой суммы выбранных токенов может вызвать значительные колебания цены и уменьшить получаемую сумму. + Высокое влияние на цену Недостаточно средств Дать разрешение Обменять @@ -1169,6 +1203,7 @@ Tangem Twin Это действие необратимо. У вас не будет доступа к старому кошельку. Приложите twin-карту с номером %s и не убирайте до окончания операции + Пожалуйста, попробуйте позже. Если проблема сохранится, обратитесь в поддержку. Произошла ошибка. Код ошибки: %s. Попробуйте, пожалуйста, снова. Если проблема будет продолжать возникать — обратитесь в службу поддержки. Используйте %s или отсканируйте карту/кольцо, чтобы получить доступ к своему кошельку Соединение не удалось: это dApp использует Wallet Connect версии 1.0, которая не поддерживается. Убедитесь, что dApp поддерживает Wallet Connect версии 2.0 для успешного подключения. @@ -1229,9 +1264,11 @@ Получить с 10% скидкой Получите доступ к более чем 13 000 криптовалют. Покупайте, продавайте, обменивайте и стейкайте в один клик. Свяжите до трех карт для резервного копирования. Откройте Tangem Wallet + Изменить Код Доступа Получайте уведомления о входящих транзакциях в кошельке и обновлениях Tangem. В настоящий момент push-уведомления могут не работать на устройствах Huawei. Мы уже работаем над решением этой проблемы и планируем исправление в ближайших обновлениях. Спасибо за понимание! Уведомления о транзакциях + Установить Код Доступа Настройки кошелька Tangem Используйте %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 8430c62ce1..9b9ba5f8aa 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -134,6 +134,7 @@ Підтвердити Підключення Продовжити + Конвертувати Копіювати Скопіювати адресу Створити @@ -173,6 +174,7 @@ Синхронізувати адреси Перейти до провайдера Перейти до токену + Зrozуміло Приховати година Імпортувати @@ -196,7 +198,7 @@ Основне кільце Парольна фраза Вставити - Політикою конфіденційності + Політикою конфіденційності %1$s-%2$s %1$s — %2$s Детальніше @@ -230,7 +232,7 @@ Підтримка Обмін умови участі - Умовами використання + Умовами використання Сьогодні %d токен @@ -307,6 +309,7 @@ Отримати активи %s адреса Надсилання активів в інші мережі призведе до безповоротної втрати. + %s мережа Надсилайте кошти, використовуючи лише Привіт, команда підтримки, я зіткнувся з помилкою з кодом: %s Помилка WalletConnect @@ -327,7 +330,7 @@ Обмін через %s Щоб повернути ваші кошти, відвідайте сайт провайдера Операція не виконана провайдером - Ваш обмін триває довше, ніж очікувалося. Будь ласка, зверніться до служби підтримки постачальника послуг, для уточнення. + Ваш обмін триває довше, ніж зазвичай, але ваші кошти повністю в безпеці та будуть доставлені. Якщо ви хвилюєтесь, ви завжди можете звернутися до служби підтримки провайдера. Тривалий час транзакції Сума транзакції була повернута в %1$s на ваш гаманець відповідно до правил OKX або мосту обміну. %2$s Сума була повернута в %1$s (%2$s мережі) @@ -361,7 +364,7 @@ Шукаємо найвигідніший курс... Плаваюча ставка Використовуючи сервіс обміну, ви погоджуєтеся з його %s - Використовуючи сервіс обміну, ви погоджуєтеся з його %1$s та %2$s + Використовуючи сервіс обміну, ви погоджуєтеся з його %1$s та %2$s. Незабаром з\'являться нові провайдери.\nСлідкуйте за новинами! Провайдер Найкращий курс @@ -834,6 +837,7 @@ Ви вказали комісію нижче рекомендованої, це може спричинити затримку вашої транзакції. Продовжити? Причина: %1$s\nКод: %2$s Транзакція не завершена + Конвертувати в інший токен Сума Ви можете встановити розмір комісії за транзакцію, налаштувавши значення в полі Satoshi per vByte. Комісія, яка буде стягнута за вашу транзакцію. Ви можете встановити власне значення. @@ -900,6 +904,7 @@ Одержувач Недійсна адреса Переконайтеся, що адреса гаманця одержувача знаходиться в мережі %s, щоб уникнути втрати ваших токенів + Переконайтеся, що ви надсилаєте на адресу в мережі %s. Помилка може призвести до втрати коштів. Надіслати до Memo/ Тег призначення — це унікальний ідентифікатор для розрізнення транзакцій, надісланих тому самому одержувачу в тій самій мережі. Застереження: відсутність тегу може призвести до втрати коштів. Мемо / Destination Tag — це код, що розділяє транзакції до спільного одержувача в криптовалютній мережі. @@ -910,7 +915,7 @@ Надсилання... Торкніться будь-якого поля, щоб змінити його Надіслати %s - Ви надсилаєте **%1$s**, включно з комісію мережі %2$s + Ви надсилаєте **%1$s**, включно з комісію мережі %2$s. Ви надсилаєте **%1$s** і %2$s Ви надсилаєте **%1$s** комісія мережі буде покрита, використовуючи %1$s енергію @@ -924,7 +929,21 @@ Недопустима сума Комісія перевищує залишок Сума, що відправляється, перевищує залишок + Ви впевнені, що хочете змінити токен отримання? Це призведе до скидання раніше введених даних. + Зміна токену + Обмін та надсилання + Продовжити обмін? Це очистить ваші попередні дані. + Підтвердити конвертацію + Надсилання будь-якої іншої валюти призведе до її незворотної втрати. + Виберіть правильну мережу одержувача Виберіть будь-який токен. Той, кому ви його надішлете, отримає саме те, що ви обрали — без жодних ускладнень. + Буде отримано + Отримувачу + Сума для отримання + До отримання %s + Ви впевнені, що хочете скасувати конвертацію? Ваші попередні дані будуть видалені. + Прибрати конвертацію + Надіслати з обміном Трансакцію надіслано Підготуйтеся до сканування кільця або картки, яку ви хочете налаштувати. Забути гаманець @@ -1157,6 +1176,7 @@ Tangem Twin Ця дія є незворотною. Ви не матимете доступу до старого гаманця. Прикладіть twin-картку з номером %s та не прибирайте її до завершення операції + Спробуйте ще раз пізніше. Якщо проблема залишиться, зверніться до служби підтримки. Виникла помилка. Код помилки: %s. Спробуйте, будь ласка, знову. Якщо проблема знову виникає — зверніться до нашої служби підтримки. Використовуйте %s або відскануйте картку/кільце, щоб отримати доступ до свого гаманця Не вдалося встановити з\'єднання: Цей dApp використовує Wallet Connect версії 1.0, яка не підтримується. Будь ласка, переконайтеся, що dApp підтримує Wallet Connect версії 2.0 для успішного підключення. @@ -1368,6 +1388,7 @@ Будь ласка, згенеруйте новий URI та спробуйте ще раз Термін для з’єднання минув Прогнозовані зміни + Пропоновано %s Поповніть баланс, щоб покрити комісію мережі Недостатньо %1$s Додайте %s мережі до вашого портфелю для цього гаманця @@ -1380,6 +1401,7 @@ Відомий ризик безпеки Відкрийте програму Web3 та виберіть опцію WalletConnect Запит від + Підписати все одно Тип підпису Для підключення dApp потрібна принаймні одна мережа Вкажіть вибрані мережі diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 1d7c55ec0b..abaad31fc0 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -35,6 +35,7 @@ Add account Edit account %1$s in %2$s + Main account Account recovered Long tap on an account to reorder accounts Keep Editing @@ -182,6 +183,7 @@ Allow Amount Analytics + and Apply Approval Approve @@ -255,6 +257,7 @@ Import In progress Later + Learn more %1$s left Legacy Bitcoin Locked @@ -280,7 +283,7 @@ Primary ring Passphrase Paste - Privacy Policy + Privacy Policy %1$s-%2$s %1$s — %2$s Read more @@ -319,7 +322,7 @@ Tangem Tangem Wallet terms and conditions - Terms of Use + Terms of Use Today %d token @@ -419,7 +422,7 @@ Exchange by %s Visit provider’s website to refund your money Operation failed by provider - Your swap is taking longer than expected. Please go to provider support for assistance. + Your swap is taking longer than usual, but your funds are completely safe and will be delivered. For any questions, you can contact the provider’s support team. Long transaction time The transaction amount was refunded in %1$s to your wallet due to OKX or bridge rules. %2$s The amount was refunded in %1$s (%2$s network) @@ -453,7 +456,7 @@ Fetching current rates... Floating rate By using swap functionality, you agree with provider’s %s - By using swap functionality, you agree with provider’s %1$s and %2$s + By using swap functionality, you agree with provider’s %1$s and %2$s. More providers will be available soon Provider Best rate @@ -504,6 +507,7 @@ Create New Wallet Order Tangem Scan Tangem + Do you want to allow “Tangem” to use biometric authentication? To confirm your identity and open the app to %s On %s network Are you sure you want to exit the access code creation process? @@ -800,6 +804,7 @@ Another wallet has already been created on the card you\'re trying to add. If you have funds in this wallet, please withdraw it and then reset this card and add it as a backup. Save your wallet Creating a backup + Use biometrics Read more about seed phrase @@ -853,6 +858,7 @@ Access code restore Identical cards Access code + All offers Available with %s Providers facilitate transactions Search by country @@ -860,13 +866,23 @@ Other currencies Popular Fiats Search by currency + Instant By using onramp functionality, you agree with provider’s %1$s and %2$s The purchase amount should be no more than %s The amount to buy must be at least %s No available providers for this currency + Fastest Pay with + Payment method Available up to %s Available from %s + + %d provider + %d providers + + Providers + Recently used + Recommended You will be able to complete your transaction on the third-party provider, %s Redirecting to %s... Our services are not available in this country @@ -875,7 +891,14 @@ Please select the correct country to ensure accurate payment options and services. Settings You can close this screen and check the transaction status on the token details screen. + + up to %d day + up to %d days + + %s min + You get You can close this screen and check the transaction status on the token details screen. + Up to Via You will pay Group @@ -1032,7 +1055,7 @@ Not a valid address Ensure the receiving wallet address is on **the %s network** to avoid losing your tokens send to %s - Ensure you %s network address, as errors may result in lost transfers + Make sure you are sending to an address on the %s network. An error may result in the loss of funds. Send to A Memo/Destination Tag is a unique ID for differentiating transactions sent to the same recipient on the same network. Caution: Omitting a memo may lead to misplaced funds Memo / Destination Tag is a code separating transactions to a shared recipient in a crypto network. @@ -1043,7 +1066,7 @@ Sending... Tap any field to change it Send %s - You are sending **%1$s** including a network fee of %2$s + You are sending **%1$s** including a network fee of %2$s. You are sending **%1$s** and %2$s You are sending **%1$s** network fee will be covered by using %1$s energy @@ -1061,7 +1084,7 @@ Are you sure you want to change the receiving token? This will reset your previously entered data. Changing token Swap and send - Proceed with conversion? This will clear your previous data. + Proceed with swap? This will clear your previous data. Confirm Conversion Sending any other currency will result in its irreversible loss. Select the correct recipient network @@ -1668,4 +1691,69 @@ No, send all Reduce by %s XTZ To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ + Give Approve + Something went wrong with your previous approval, so we need a new one. Choose how you’d like to proceed. + Approve nedeed + The fee will be taken out, and your assets will be lent again. + To continue earning, approval is required. + Confirm approval + Text about your money in balance + Your %s is deposited in Aave + Earn %s% + Available + Current APY + My Funds + Your %1$s is now deposited in Aave and earning interest. You hold a%2$s token, which represents your balance and grows over time. When you top up, funds go to Aave to earn interest, minus a transaction fee. + Read more + Active + Stop earning + Earn + Total earnings + Automatic + Transfers to Aave + Text explaining that your savings are located in the protocol + Explore Aave + Explore default + Your %s is deposited in Aave + This is the current supply fee on %s. The live cost will be shown on the Receive Screen. + Current fee + All future %s top-ups will be supplied to Aave automatically, with the transaction fee deducted. + If network fees rise above maximum fee, the transaction won’t go through until they decrease. You can change this limit later. + Maximum fee + Fee policy + Write description here. In one, two or three lines will be awesome. + Some token approve needed + Every top-up of your account will be lended to Aave automatically. + Your balance works automatically + Send, swap, or sell your funds instantly, anytime you want. + Cash out instantly + How it works? + Aave is trusted by millions worldwide. Total lended value is $10.4B. + Decentralized and self-custodial + By using service, you agree with provider + Earn %s% yearly + Aave • Variable Interest Rate + Aave + Avg %s + Last year returns + Current interest rate is always variable and automatically computed by AAVE on-chain smart-contract based on real-time supply and demand. + Powered by + Interest rate is variable + When you top up, your funds will be automatically sent to Aave to start earning interest. A small fee equal to %s will be deducted to cover the transaction. + Start earning + Your %s will be supplied to Aave and will stay instantly available + See fee policy + Network fee + Your next deposits will be automatically supplied to Aave. + Start earning + Turning off will withdraw your funds from Aave, return them to %s in your wallet, and stop earning rewards. + The network fee will be deducted from the amount you withdraw. + Stop earning + APY + Make your money work — earn interest on your balance. + Earning on your balance + Processing your deposit + Earn %s% per year + Deposit some %1$s %2$s to cover the network fee for transactions + Unable to cover %s fee From 7f1194067943f6db4e1aa9c3e297918eaf49d117 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 4 Sep 2025 19:55:58 +0300 Subject: [PATCH 02/17] Updated on 2026-08-14 --- .../impl/amount/model/converter/SwapAmountFieldConverter.kt | 6 +----- gradle/tangem_dependencies.toml | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt index 832a1c2a7d..a2a62e6b95 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt @@ -57,11 +57,7 @@ internal class SwapAmountFieldConverter( title = if (isSingleWallet) { resourceReference(R.string.send_from_title) } else { - combinedReference( - resourceReference(R.string.send_from_wallet_android), - stringReference(" "), - stringReference(userWallet.name), - ) + resourceReference(R.string.send_from_wallet_name, wrappedList(userWallet.name)) }, value = "", ), diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 5ebc59103a..05c6c1cb90 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,7 +5,7 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.28-1214" +tangemBlockchainSdk = "releases-5.28-1217" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "releases-5.28-559" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 3c755c60606ff3fa2170c8c79148d290d3733e75 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 4 Sep 2025 19:59:45 +0300 Subject: [PATCH 03/17] Updated on 2026-08-14 --- .../tokendetails/model/TokenDetailsModel.kt | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index 7a368fe134..e22dcb5181 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -57,13 +57,9 @@ import com.tangem.domain.tokens.* import com.tangem.domain.tokens.legacy.TradeCryptoAction import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason import com.tangem.domain.tokens.model.TokenActionsState -import com.tangem.domain.tokens.model.analytics.TokenReceiveAnalyticsEvent -import com.tangem.domain.tokens.model.analytics.TokenReceiveCopyActionSource -import com.tangem.domain.tokens.model.analytics.TokenReceiveNewAnalyticsEvent -import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent +import com.tangem.domain.tokens.model.analytics.* import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent.Companion.toReasonAnalyticsText import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent.DetailsScreenOpened.TokenBalance -import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent import com.tangem.domain.transaction.error.AssociateAssetError import com.tangem.domain.transaction.error.IncompleteTransactionError import com.tangem.domain.transaction.error.OpenTrustlineError @@ -1142,9 +1138,8 @@ internal class TokenDetailsModel @Inject constructor( return } } - is CryptoCurrencyStatus.NoAccount, - is CryptoCurrencyStatus.MissedDerivation, - -> TokenBalance.NoAddress + is CryptoCurrencyStatus.NoAccount -> TokenBalance.Empty + is CryptoCurrencyStatus.MissedDerivation -> TokenBalance.NoAddress is CryptoCurrencyStatus.NoAmount, is CryptoCurrencyStatus.Unreachable, From 974ccb2f918ff3066afccd4986e0917d631b95aa Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 5 Sep 2025 11:39:21 +0500 Subject: [PATCH 04/17] Updated on 2026-08-14 --- .../v2/send/success/ui/SendConfirmSuccessContent.kt | 10 +++------- .../v2/sendnft/success/ui/NFTSendSuccessContent.kt | 2 +- .../success/ui/SendWithSwapSuccessContent.kt | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt index 1d679a3e59..179b28552f 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt @@ -2,10 +2,9 @@ package com.tangem.features.send.v2.send.success.ui import androidx.compose.animation.* import androidx.compose.foundation.background -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.gestures.scrollable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -54,10 +53,7 @@ internal fun SendConfirmSuccessContent(sendUM: SendUM, destinationBlockComponent Column( modifier = Modifier .padding(horizontal = TangemTheme.dimens.spacing16) - .scrollable( - state = rememberScrollState(), - orientation = Orientation.Vertical, - ), + .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(12.dp), ) { if (sendUM.confirmUM is ConfirmUM.Success) { @@ -81,7 +77,7 @@ internal fun SendConfirmSuccessContent(sendUM: SendUM, destinationBlockComponent ) destinationBlockComponent.Content(modifier = Modifier) FeeBlock(feeSelectorUM = sendUM.feeSelectorUM) - Spacer(Modifier.height(60.dp)) + Spacer(Modifier.height(128.dp)) } BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary) NavigationButtonsBlockV2( diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt index 10fa100bc9..5efe65012c 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt @@ -82,7 +82,7 @@ internal fun NFTSendSuccessContent( nftDetailsBlockComponent.Content(modifier = Modifier) destinationBlockComponent.Content(modifier = Modifier) FeeBlock(feeSelectorUM = nftSendUM.feeSelectorUM) - Spacer(Modifier.height(60.dp)) + Spacer(Modifier.height(128.dp)) } BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary) NavigationButtonsBlockV2( diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt index 252e841b90..a3dc753213 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt @@ -101,7 +101,7 @@ internal fun SendWithSwapSuccessContent(sendWithSwapUM: SendWithSwapUM) { ) DestinationBlock(destinationUM.addressTextField) FeeBlock(feeSelectorUM = feeSelectorUM) - Spacer(Modifier.height(60.dp)) + Spacer(Modifier.height(128.dp)) } BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary) NavigationButtonsBlockV2( From a6323c268ca7051d17352756629532a80bc55db8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 5 Sep 2025 14:42:00 +0500 Subject: [PATCH 05/17] Updated on 2026-08-14 --- .../model/SwapChooseTokenNetworkModel.kt | 9 +++++++++ .../analytics/SendWithSwapAnalyticEvents.kt | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt index 45659420c7..0acbedc911 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt @@ -21,6 +21,7 @@ import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.SwapChoo import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.transformers.SwapChooseContentStateTransformer import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.transformers.SwapChooseErrorStateTransformer import com.tangem.features.swap.v2.impl.common.SwapUtils.SEND_WITH_SWAP_PROVIDER_TYPES +import com.tangem.features.swap.v2.impl.sendviaswap.analytics.SendWithSwapAnalyticEvents import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.transformer.update import kotlinx.coroutines.delay @@ -97,6 +98,14 @@ internal class SwapChooseTokenNetworkModel @Inject constructor( return@launch } delay(MINIMUM_LOADING_TIME) + if (pairs.fromGroup.available.isEmpty()) { + analyticsEventHandler.send( + SendWithSwapAnalyticEvents.NoticeCanNotSwapToken( + fromToken = params.initialCurrency, + toTokenSymbol = params.token.symbol, + ), + ) + } uiState.update( SwapChooseContentStateTransformer( pairs = pairs, diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt index 6daa91c3d8..ab38425164 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt @@ -32,4 +32,16 @@ internal sealed class SendWithSwapAnalyticEvents( RECEIVE_BLOCKCHAIN to toToken.network.name, ), ) + + data class NoticeCanNotSwapToken( + val fromToken: CryptoCurrency, + val toTokenSymbol: String, + ) : SendWithSwapAnalyticEvents( + event = "Notice - Can`t Swap This Token", + params = mapOf( + SEND_TOKEN to fromToken.symbol, + RECEIVE_TOKEN to toTokenSymbol, + SEND_BLOCKCHAIN to fromToken.network.name, + ), + ) } \ No newline at end of file From 71dd38f1fdcbbf7077268fc0457e6b3d20b90e2d Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 5 Sep 2025 16:01:22 +0300 Subject: [PATCH 06/17] Updated on 2026-08-14 --- .../tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt | 3 +++ .../com/tangem/domain/walletconnect/model/WcRequestError.kt | 4 ++-- .../com/tangem/domain/walletconnect/WcAnalyticEvents.kt | 2 ++ gradle/tangem_dependencies.toml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt index 814e12788d..e42a93cba3 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt @@ -8,6 +8,7 @@ import com.tangem.data.walletconnect.sign.SignStateConverter.toSigning import com.tangem.domain.walletconnect.WcAnalyticEvents import com.tangem.domain.walletconnect.model.WcRequestError import com.tangem.domain.walletconnect.model.WcRequestError.Companion.code +import com.tangem.domain.walletconnect.model.WcRequestError.Companion.message import com.tangem.domain.walletconnect.usecase.method.WcSignState import com.tangem.domain.walletconnect.usecase.method.WcSignStep import kotlinx.coroutines.Job @@ -65,10 +66,12 @@ internal class WcSignUseCaseDelegate( val step = state.domainStep as? WcSignStep.Result ?: return@onEach val event = step.result.fold( ifLeft = { error -> + val errorMessage = error.message() ?: "" WcAnalyticEvents.SignatureRequestFailed( rawRequest = context.rawSdkRequest, network = context.network, errorCode = error.code() ?: error::class.simpleName.orEmpty(), + errorMessage = errorMessage, ) }, ifRight = { diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt index e0ad853f77..7376048de1 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt @@ -49,8 +49,8 @@ sealed class WcRequestError { is SendTransactionError.NetworkError -> message is SendTransactionError.DataError -> message is SendTransactionError.UnknownError -> ex?.message - is SendTransactionError.TangemSdkError, - SendTransactionError.DemoCardError, + is SendTransactionError.TangemSdkError -> "TangemSdkError code: ${this.code}" + SendTransactionError.DemoCardError -> "DemoCardError" SendTransactionError.UserCancelledError, is SendTransactionError.CreateAccountUnderfunded, -> null diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index 064f349412..e433553996 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -142,6 +142,7 @@ sealed class WcAnalyticEvents( rawRequest: WcSdkSessionRequest, network: Network, errorCode: String, + errorMessage: String, ) : WcAnalyticEvents( event = "Signature Request Failed", params = mapOf( @@ -150,6 +151,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method, AnalyticsParam.Key.BLOCKCHAIN to network.name, AnalyticsParam.Key.ERROR_CODE to errorCode, + AnalyticsParam.Key.ERROR_MESSAGE to errorMessage, ), ) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 05c6c1cb90..2572f02b34 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,7 +5,7 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.28-1217" +tangemBlockchainSdk = "releases-5.28-1218" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "releases-5.28-559" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 983511e08434a5d0773344ecf3d027163bd08707 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 5 Sep 2025 16:23:03 +0300 Subject: [PATCH 07/17] Updated on 2026-08-14 --- .../v2/note/impl/DefaultOnboardingNoteComponent.kt | 12 ++---------- .../v2/note/impl/model/OnboardingNoteModel.kt | 13 +------------ .../v2/note/impl/route/OnboardingNoteRoute.kt | 5 +---- .../features/onboarding/v2/note/impl/route/Step.kt | 1 - 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt index 092e847893..313506dfb3 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt @@ -9,7 +9,6 @@ import com.arkivanov.decompose.extensions.compose.stack.animation.stackAnimation import com.arkivanov.decompose.extensions.compose.subscribeAsState import com.arkivanov.decompose.router.stack.ChildStack import com.arkivanov.decompose.router.stack.childStack -import com.arkivanov.decompose.router.stack.push import com.arkivanov.decompose.value.Value import com.arkivanov.decompose.value.subscribe import com.arkivanov.essenty.instancekeeper.getOrCreateSimple @@ -59,7 +58,7 @@ internal class DefaultOnboardingNoteComponent @AssistedInject constructor( key = "innerStack", source = model.stackNavigation, serializer = null, - initialConfiguration = model.initialRoute, + initialConfiguration = OnboardingNoteRoute.CreateWallet, handleBackButton = true, childFactory = { configuration, factoryContext -> createChild( @@ -99,17 +98,10 @@ internal class DefaultOnboardingNoteComponent @AssistedInject constructor( childParams = childParams, onWalletCreated = { userWallet -> model.onWalletCreated(userWallet) - model.stackNavigation.push(OnboardingNoteRoute.Done) + params.onDone() }, ), ) - OnboardingNoteRoute.Done -> onboardingDoneComponentFactory.create( - context = factoryContext, - params = OnboardingDoneComponent.Params( - mode = OnboardingDoneComponent.Mode.WalletCreated, - onDone = { params.onDone() }, - ), - ) } } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt index ae47a8ab9d..ddfd182953 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt @@ -35,10 +35,8 @@ internal class OnboardingNoteModel @Inject constructor( @Suppress("UnusedPrivateMember") private val params = paramsContainer.require() - val initialRoute = initializeRoute() - private val _innerNavigationState = - MutableStateFlow(OnboardingNoteInnerNavigationState(stackSize = initialRoute.stepNum())) + MutableStateFlow(OnboardingNoteInnerNavigationState(stackSize = OnboardingNoteRoute.CreateWallet.stepNum())) val innerNavigationState = _innerNavigationState.asStateFlow() @@ -79,15 +77,6 @@ internal class OnboardingNoteModel @Inject constructor( } } - private fun initializeRoute(): OnboardingNoteRoute { - val card = params.scanResponse.card - return if (card.wallets.isEmpty()) { - OnboardingNoteRoute.CreateWallet - } else { - OnboardingNoteRoute.Done - } - } - private fun loadArtwork() { modelScope.launch { val cardInfo = params.scanResponse.card diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt index cc8101af19..adfafad870 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt @@ -7,9 +7,6 @@ internal sealed class OnboardingNoteRoute { @Serializable data object CreateWallet : OnboardingNoteRoute() - - @Serializable - data object Done : OnboardingNoteRoute() } -internal const val ONBOARDING_NOTE_STEPS_COUNT = 2 \ No newline at end of file +internal const val ONBOARDING_NOTE_STEPS_COUNT = 1 \ No newline at end of file diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt index 83b41e6d8f..9d6c137388 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt @@ -2,5 +2,4 @@ package com.tangem.features.onboarding.v2.note.impl.route internal fun OnboardingNoteRoute.stepNum() = when (this) { OnboardingNoteRoute.CreateWallet -> 1 - OnboardingNoteRoute.Done -> 2 } \ No newline at end of file From bbb6b383c24d3259302e73c61de8a9b5fb9cf273 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 5 Sep 2025 17:12:45 +0300 Subject: [PATCH 08/17] Updated on 2026-08-14 --- .../kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index e433553996..5dff981b44 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -151,7 +151,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method, AnalyticsParam.Key.BLOCKCHAIN to network.name, AnalyticsParam.Key.ERROR_CODE to errorCode, - AnalyticsParam.Key.ERROR_MESSAGE to errorMessage, + AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage, ), ) From 08edfc4944942cfed1262a54fe61cd7e3b3eb428 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 4 Sep 2025 19:05:08 +0400 Subject: [PATCH 09/17] Updated on 2026-08-14 --- .../api/tangemTech/models/QuotesResponse.kt | 13 +++++- .../multi/DefaultMultiQuoteStatusFetcher.kt | 14 ++++++ .../DefaultMultiQuoteStatusFetcherTest.kt | 44 +++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt index 8c42687aa8..b9b4460255 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt @@ -20,5 +20,16 @@ data class QuotesResponse( val priceChange1w: BigDecimal?, @Json(name = "priceChange30d") val priceChange30d: BigDecimal?, - ) + ) { + + companion object { + + val EMPTY = Quote( + price = null, + priceChange24h = null, + priceChange1w = null, + priceChange30d = null, + ) + } + } } \ No newline at end of file diff --git a/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt b/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt index 618f75178d..4eac6b1927 100644 --- a/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt +++ b/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt @@ -8,6 +8,7 @@ import com.tangem.data.quotes.store.QuotesStatusesStore import com.tangem.data.quotes.store.setSourceAsCache import com.tangem.data.quotes.store.setSourceAsOnlyCache import com.tangem.data.quotes.utils.QuotesUnsupportedCurrenciesIdAdapter +import com.tangem.datasource.api.tangemTech.models.QuotesResponse import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.domain.core.utils.catchOn import com.tangem.domain.models.currency.CryptoCurrency @@ -58,6 +59,7 @@ internal class DefaultMultiQuoteStatusFetcher @Inject constructor( fields = setOf(Field.PRICE, Field.PRICE_CHANGE_24H), ) .getOrElse { error("Cause: $it") } + .addSkippedIfHas(ids = replacementIdsResult.idsForRequest) val updatedResponse = QuotesUnsupportedCurrenciesIdAdapter.getResponseWithUnsupportedCurrencies( response = response, @@ -84,4 +86,16 @@ internal class DefaultMultiQuoteStatusFetcher @Inject constructor( return appCurrencyId } + + private fun QuotesResponse.addSkippedIfHas(ids: Set): QuotesResponse { + val skippedIds = ids.filterNot(quotes.keys::contains).ifEmpty { + return this + } + + Timber.d("Some quotes are missing from the server response: $skippedIds") + + val emptyQuotes = skippedIds.associateWith { QuotesResponse.Quote.EMPTY } + + return copy(quotes = quotes + emptyQuotes) + } } \ No newline at end of file diff --git a/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt b/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt index d522ca5ba9..16d16ee6b0 100644 --- a/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt +++ b/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt @@ -215,6 +215,50 @@ internal class DefaultMultiQuoteStatusFetcherTest { } } + @Test + fun `fetch successfully if not all quotes are fetched`() = runTest { + // Arrange + val params = MultiQuoteStatusFetcher.Params(currenciesIds = currenciesIds, appCurrencyId = null) + + coEvery { appCurrencyResponseStore.getSyncOrNull() } returns usdAppCurrency + + val currenciesIds = setOf("BTC", "ETH") + val response = QuotesResponse( + quotes = mapOf( + "BTC" to MockQuoteResponseFactory.createSinglePrice(value = BigDecimal.ONE), + ), + ) + + coEvery { + quotesFetcher.fetch(fiatCurrencyId = "usd", currenciesIds = currenciesIds, fields = fields) + } returns response.right() + + // Act + val actual = fetcher(params) + + // Assert + val expected = Unit.right() + Truth.assertThat(actual).isEqualTo(expected) + + val storedQuotes = QuotesResponse( + quotes = mapOf( + "BTC" to MockQuoteResponseFactory.createSinglePrice(value = BigDecimal.ONE), + "ETH" to QuotesResponse.Quote.EMPTY, + ), + ) + + coVerifyOrder { + quotesStore.setSourceAsCache(currenciesIds = params.currenciesIds) + appCurrencyResponseStore.getSyncOrNull() + quotesFetcher.fetch(fiatCurrencyId = "usd", currenciesIds = currenciesIds, fields = fields) + quotesStore.store(values = storedQuotes.quotes) + } + + coVerify(inverse = true) { + quotesStore.setSourceAsOnlyCache(currenciesIds = any()) + } + } + private companion object { val currenciesIds = setOf( From 146261c8fcf5170aa821f9b8c597bf6d2cf4e90f Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Sep 2025 11:32:09 +0500 Subject: [PATCH 10/17] Updated on 2026-08-14 --- .../tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt | 4 +++- .../com/tangem/domain/walletconnect/WcAnalyticEvents.kt | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt index 522abbb6e0..6d335571ef 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt @@ -188,8 +188,10 @@ internal class DefaultWcPairUseCase @AssistedInject constructor( .values.map { it.available.plus(it.required) }.flatten().toSet() analytics.send( WcAnalyticEvents.PairRequested( + dAppName = sessionProposal.name, + dAppUrl = sessionProposal.url, network = requestedNetworks, - verificationInfo, + domainVerification = verificationInfo, ), ) val appMetaData = WcAppMetaData( diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index 5dff981b44..145a9abca0 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -37,11 +37,15 @@ sealed class WcAnalyticEvents( ) class PairRequested( + dAppName: String, + dAppUrl: String, network: Set, domainVerification: CheckDAppResult, ) : WcAnalyticEvents( event = "dApp Connection Requested", params = mapOf( + AnalyticsParam.DAPP_NAME to dAppName, + AnalyticsParam.DAPP_URL to dAppUrl, NETWORKS to network.joinToString(",") { it.name }, DOMAIN_VERIFICATION to domainVerification.toAnalyticVerificationStatus(), ), From 8944672bc9da36fafc98c339304f30053fb44c8b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Sep 2025 20:42:32 +0300 Subject: [PATCH 11/17] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 3 +- core/res/src/main/res/values-es/strings.xml | 30 +++--- core/res/src/main/res/values-fr/strings.xml | 3 +- core/res/src/main/res/values-ja/strings.xml | 92 ++++++++++++++++++- core/res/src/main/res/values-ru/strings.xml | 20 +++- .../src/main/res/values-uk-rUA/strings.xml | 3 +- core/res/src/main/res/values/strings.xml | 21 ++--- 7 files changed, 131 insertions(+), 41 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index b7cc837f73..a9bc17a583 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -984,7 +984,6 @@ Überprüfe deine Netzwerkverbindung Informationen zur Netzwerkgebühr nicht erreichbar Sie senden - Von Von %s Grenzwert Gasgebühr Dies ist die maximale Gasgebühr, die für den Abschluss einer Transaktion oder eines Vertrags ausgegeben wird. Ein Gaslimit verhindert unerwartete oder unbegrenzte Gebühren bei der Ausführung einer Transaktion. @@ -1141,7 +1140,7 @@ Um mit dem Staking bei TON zu beginnen, führe zunächst eine ausgehende Transaktion in beliebiger Höhe durch – dadurch wird Deine Wallet aktiviert. Für den Abschluss der Transaktion können zusätzlich zur Netzwerkgebühr bis zu 0,2 TON erforderlich sein. Nicht genutzte Beträge werden zurückerstattet. Für diesen Vorgang sind zusätzlich zur Netzwerkgebühr 0,2 TON erforderlich. Bitte lade Dein Guthaben auf. - 0,2 Ton reserviert + TON-Reserve erforderlich Durch diese Aktion werden andere Positionen geschlossen oder gemäß den Netzwerkregeln in den Auszahlungsstatus versetzt. Positionsstatus Entsperre dein Geld, um es aus dem Staking-Prozess abzuheben. Das Freischalten nimmt %s. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index a3004d282b..31e91c7d59 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -880,8 +880,7 @@ Memo Compruebe su conexión de red Información de tarifa de red no accesible - Envía - Desde + Usted envía De %s Límite de gas Este es el máximo de gas que se gastará para completar una transacción o contrato. Un límite de gas evita cargos inesperados o ilimitados al ejecutar una transacción. @@ -895,7 +894,7 @@ Cobertura de tarifa de red Nonce Número único para cada transacción. Utilícelo para reenviar o cancelar una transacción pendiente. - Introduzca nonce.. + Introduzca nonce... Fondos insuficientes para la transferencia, ya que el total de la tarifa y el importe de la transferencia supera el saldo existente El total supera el saldo Se requiere un saldo de al menos %s para mantener su cuenta en blockchain para evitar riesgos de seguridad. Este monto permanecerá en su saldo y no podrá retirarse. @@ -950,6 +949,8 @@ Cantidad no válida La tarifa excede el saldo La cantidad total excede el saldo + ¿Está seguro que desea cambiar el token a recibir? Esto restablecerá los datos introducidos previamente. + Cambio de token Intercambiar y enviar ¿Continuar con la conversión? Esto borrará sus datos anteriores. Confirmar Conversión @@ -961,6 +962,7 @@ Cantidad a recibir El destinatario recibe %s ¿Seguro que desea cancelar la conversión? Se borrarán sus datos anteriores. + Eliminar conversión Enviar con swap Transacción enviada Escanee la tarjeta/anillo que quiere configurar @@ -968,10 +970,10 @@ 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. - El monto del staking debe ser al menos %s - El monto del staking se redondeará a %1$s TRX debido a las reglas de la red. + 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. El monto de cancelación del staking se redondeará a %1$s TRX debido a las reglas de la red. - Unstaking de la reclamación + 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 @@ -1007,7 +1009,7 @@ No hay validadores activos disponibles para hacer staking en este momento. Por favor, inténtalo de nuevo más tarde. Al hacer staking en la red Cardano, se utiliza todo su saldo. Se reservarán 2 ADA adicionales y se devolverán después del staking. Su ADA permanece desbloqueado mientras hace staking. Detalles del staking de ADA - Recomp. won se le enviará y estará disponible para su uso inmediato + Las recompensas obtenidas se enviarán a su billetera y estarán disponibles para su uso inmediato Haga staking de forma segura y comience a ganar recompensas Tangem permite a los usuarios hacer staking de sus criptomonedas Tangem permite a los usuarios hacer staking de sus criptomonedas @@ -1034,7 +1036,7 @@ 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. - 0.2 Ton Reservado + Se requiere reserva de TON Esta acción cerrará otras posiciones o las cambiará al estado de retiro, de acuerdo con las reglas de la red. Estado de las posiciones Desbloquee su dinero para retirarlo del proceso de staking. El desbloqueo demora %s minuto. @@ -1044,9 +1046,9 @@ Hacer staking en la red Tron con un nuevo validador transferirá automáticamente todos los fondos de staking a este validador. Preparando Listo para retirar - Reunir - Haga el staking de nuevo - Restaking de las recompensas + Volver a unir + Hacer staking de nuevo + Hacer restaking de las recompensas Revocar Revotar Auto @@ -1080,7 +1082,7 @@ La cantidad para el unstaking debe ser al menos %s El monto excede el saldo apostado Sin staking - Unstaking + Deshacer el staking Detenando el staking de activos %s Validador Validadores @@ -1358,8 +1360,8 @@ Habilitar Trustline (línea de confianza) Una trustline (línea de confianza) debe estar habilitada para recibir este token. La red requiere un %1$s %2$s reserva. Se requiere trustline (línea de confianza) - La red requerida %s no está añadida a su portafolio. Añádala primero y luego continúe con la conexión. - Agregue red al portafolio + La red requerida %s no está agregada a su portafolio. Agréguela primero y luego continúe con la conexión. + Agregar red al portafolio Dominio malicioso Dominio desconocido Conectarse de todas formas diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 0d2ee7b831..2b20ddae59 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -854,7 +854,6 @@ Vérifiez votre connexion réseau Informations sur les frais de réseau inaccessibles Vous envoyez - De De %s Limite de gaz Il s\'agit du montant maximal de gaz qui sera dépensé pour effectuer une transaction ou un contrat. Une limite de gaz empêche des frais imprévus ou illimités lors de l\'exécution d\'une transaction. @@ -1011,7 +1010,7 @@ Pour commencer à staker TON, effectuez d\'abord une transaction sortante de n\'importe quel montant — cela activera votre portefeuille. Jusqu\'à 0,2 TON peuvent être requis en plus des frais de réseau pour terminer la transaction. Tout montant non utilisé sera remboursé. 0,2 TON requis pour effectuer cette opération, en plus des frais de réseau. Veuillez recharger votre solde. - 0,2 Ton réservés + Réserve de TON requise Cette action fermera d\'autres positions ou les fera passer au statut de retrait, conformément aux règles du réseau. Statut des positions Débloquez votre argent pour le retirer du processus de staking. Le déverrouillage prend %s. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index ff93a67733..5205787420 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -35,6 +35,7 @@ アカウントを追加 アカウントを編集 %1$s ( %2$s内) + メインアカウント アカウントが回復しました アカウントを長押しして並べ替える 編集を続ける @@ -179,6 +180,7 @@ 許可する 金額 アナリティクス + そして 適用する 承認 承認 @@ -242,6 +244,7 @@ 終了 無料 アドレスを同期する + はじめる プロバイダーへ移動 トークンへ移動 わかりました @@ -250,6 +253,7 @@ インポート 進行中 後で + もっと詳しく 残り%1$s レガシービットコイン ロックされています @@ -387,6 +391,7 @@ デフォルトアドレス レガシーアドレス 資金を受け取る + %sアドレス 他のネットワークで資産を送金すると、永久に失われます。 %sネットワーク 下記のみを使用して資金を送金する @@ -410,7 +415,7 @@ %sによる交換 返金を受けるには、プロバイダーのウェブサイトにアクセスしてください。 プロバイダーによる操作が失敗しました。 - スワップに予想以上の時間がかかっています。プロバイダーサポートにお問い合わせください。 + スワップは通常より時間がかかっておりますが、資金は完全に安全であり、送金されます。ご不明な点がございましたら、プロバイダーのサポートチームまでお問い合わせください。 長い取引時間 OKXまたはブリッジのルールにより、取引金額は%1$sでウォレットに返金されました。%2$s 金額は %1$s(%2$sネットワーク)で返金されました @@ -495,6 +500,7 @@ 新しいウォレットを作成する Tangemを注文 Tangemをスキャン + 「Tangem」に生体認証の使用を許可しますか?\n本人確認とアプリの起動のために使用されます。 %sへ %sネットワーク アクセスコードの作成プロセスを終了してもよろしいですか? @@ -786,6 +792,7 @@ 追加しようとしているカードには、すでに別のウォレットが作成されています。このウォレットに資金がある場合は、それを引き出してからこのカードをリセットし、バックアップとして追加してください。 ウォレットを保存する バックアップの作成 + 生体認証を使用する シードフレーズについてもっと読む これらの %d 単語を以下の順番通りに書き留め、安全かつ秘密の場所に保管してください。 @@ -837,6 +844,7 @@ アクセスコードの復元 同一のカード アクセスコード + すべてのオファー %sで利用可能 プロバイダーが取引を促進します 国で検索 @@ -844,13 +852,22 @@ その他の通貨 人気の法定通貨 通貨で検索 + 即時 オンランプ機能を使用することにより、プロバイダの%1$sおよび%2$sに同意するものとします 買付金額は%s以下にしてください 買付金額は少なくとも%sである必要があります この通貨で利用可能なプロバイダーはありません + 最速 支払う + 支払方法 最大 %s まで使用可能 %s 以上で利用可能 + + %dプロバイダー + + プロバイダー + 最近使用した + 推奨 サードパーティプロバイダー%sで取引を完了できます。 %sにリダイレクトしています... この国では当社のサービスはご利用いただけません @@ -859,7 +876,13 @@ 正確なお支払い方法とサービスを確保するため、正しい国を選択してください。 設定 この画面を閉じて、トークンの詳細画面で取引状況を確認できます。 + + 最大%d日 + + %s分 + 以下が手に入ります。 この画面を閉じて、トークンの詳細画面で取引状況を確認できます。 + 最大 経由 支払い グループ @@ -970,7 +993,6 @@ ネットワーク接続を確認してください ネットワーク手数料についての情報にアクセスできません 送信する - より %sから ガス上限 これは、取引または契約を完了するために使用されるガスの最大額です。ガス上限を設定することで、取引実行時に予期せぬ請求や無制限の請求を防ぐことができます。 @@ -1014,7 +1036,7 @@ 有効なアドレスではありません トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください %s に送信 - %sネットワークアドレスを確認してください。エラーが発生すると転送が失われる可能性があります。 + %sネットワーク上のアドレスに送信していることを確認してください。エラーが発生すると資金が失われる可能性があります。 送金先 メモ/宛先タグは、同じネットワーク上の同じ受信者に送信された取引を区別するためのユニークなIDです。注意:メモを省略すると、資金の行き違いにつながる可能性があります。 メモ / 宛先タグは、暗号資産ネットワーク内の共有受信者への取引を分離するコードです。 @@ -1025,7 +1047,7 @@ 送金中... 変更するには任意の箇所をタップしてください %sを送金する - **%1$s** を送金する (ネットワーク手数料%2$sを含む) + %2$sのネットワーク料を含む**%1$s**を送信しています。 **%1$s** と %2$s を送金しています。 ** %1$s ** を送信しています ネットワーク手数料は%1$sエネルギーを使用してカバーされます @@ -1127,7 +1149,7 @@ TONでステーキングを開始するには、まず任意の金額の送金を行ってください。これにより、ウォレットがアクティブになります。 取引を完了するには、ネットワーク手数料に加えて最大0.2TONが必要になる場合があります。未使用分は返金されます。 この操作を続行するには、ネットワーク手数料に加えて0.2 TONが必要です。残高を補充してください。 - 0.2 TON保留済み + TONの準備金が必要です このアクションは、ネットワークのルールに従って、他のポジションをクローズするか、引き出しステータスに切り替えます。 ポジション状況 資金をステーキングから引き出すには、ロックを解除してください。ロック解除には%sかかります。 @@ -1601,4 +1623,64 @@ いいえ、すべて送信します %s XTZを減らす 次回ウォレットにチャージするときに手数料の増加を避けるには、金額を%s XTZ減らしてください。 + 承認する + 前回の承認に問題があったため、新しい承認が必要です。手続き方法を選択してください。 + 承認が必要 + 手数料が差し引かれ、あなたの資産は再び貸し出されます。 + 引き続き収益を得るには承認が必要です。 + 承認を確定する + 資産残高 + あなたの%sはAaveに預けられています + %s%を獲得 + 利用可能 + 現在のAPY + 私の資金 + あなたの%1$sはAaveに預けられ、利息が付きます。あなたは%2$sトークンを保有しており、これは残高を表し、時間の経過とともに増加します。入金すると、資金はAaveに預け入れられ、取引手数料を差し引いた利息が付きます。 + アクティブ + 利回りを得る + 総収益 + Aaveへの送金 + 資産はプロトコル内に保管されています + Aaveの詳細を見る + あなたの%sはAaveに預けられています + これは%sの現在の供給手数料です。実際のコストは受取画面に表示されます。 + 現在の手数料 + 今後の%sの入金はすべて、取引手数料が差し引かれて自動的にAaveに供給されます。 + ネットワーク手数料が上限手数料を超えた場合、手数料が下がるまで取引は成立しません。この制限は後で変更できます。 + 最大手数料 + 手数料ポリシー + ここに説明文を入力してください。1〜3行が理想的です。 + トークン承認が必要 + アカウントへの入金はすべて自動的にAaveに貸し出されます。 + 残高は自動的に計算されます + いつでも、即座に資金を送信、交換、売却できます。 + すぐに現金化 + 使い方 + Aaveは世界中で何百万人もの人々に信頼されています。総貸付額は104億ドルです。 + 分散型・自己管理型 + サービスを使用することにより、プロバイダーに同意したものとみなされます + 年間%s%の収益 + Aave • 変動金利 + Aave + 平均%s + 昨年のリターン + 現在の金利は常に変動し、リアルタイムの需要と供給に基づいて、AAVEオンチェーンスマートコントラクトによって自動的に計算されます。 + 提供 + 金利は変動します + 入金すると、資金は自動的にAaveに送金され、利息が付き始めます。取引手数料として%s相当の少額の手数料が差し引かれます。 + 利息の獲得を開始 + %sはAaveに供給され、すぐに利用可能になります + 手数料ポリシーを見る + 次回の入金は自動的にAaveに供給されます。 + 収益を停止する + オフにすると、Aaveから資金が引き出され、ウォレットの%sに戻され、報酬の獲得が停止されます。 + 出金金額からネットワーク手数料が差し引かれます。 + APY + あなたの資産を眠らせない — 残高を運用して利息を得ましょう。 + 保有資産から報酬を得る + 入金の処理中 + 年間%1$s%%の収益 + 自動 + 取引のネットワーク手数料をカバーするために、 %1$s %2$sを入金してください + %s手数料を支払えません diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 611b0ded63..58186b2510 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -758,11 +758,17 @@ Сумма покупки не может быть больше, чем %s Сумма покупки должна составлять минимум %s Нет доступных провайдеров для выбранной валюты - Быстрейший + Самый быстрый Оплата с Платежный метод Доступно до %s Доступно от %s + + %d провайдер + %d провайдера + %d провайдеров + %d провайдеров + Провайдеры Ранее используемый Рекомендуемый @@ -774,10 +780,18 @@ Пожалуйста, укажите правильную страну, чтобы обеспечить точность доступных способов оплаты и услуг. Настройки You can close this screen and check the transaction status on the token details screen. + + до %d дня + до %d дней + до %d дней + до %d дней + %s мин Вы получите Вы можете закрыть этот экран и проверить статус транзакции на экране информации о токене. + До Через + Вы заплатите Группы По балансу Упорядочить токены @@ -891,7 +905,7 @@ Проверьте своё интернет соединение Информация о комиссии сети недоступна Вы отправляете - Из + Из %s Лимит газа Это максимальное количество газа, которое будет потрачено на выполнение транзакции или контракта. Лимит газа предотвращает неожиданные или неограниченные расходы при выполнении транзакции. Цена газа @@ -1042,7 +1056,7 @@ Чтобы начать стейкинг в TON, сначала осуществите исходящую транзакцию на любую сумму — это активирует ваш кошелек. До 0.2 TON может потребоваться сверх сетевой комиссии для завершения транзакции. Неиспользованная часть будет возвращена. Для выполнения операции требуется дополнительно 0.2 TON, помимо сетевой комиссии. Пожалуйста, пополните баланс. - Зарезервировано 0.2 TON + Требуется резерв TON Это действие закроет другие позиции или переведёт их в статус вывода средств в соответствии с правилами сети. Статус позиций Разблокируйте свои средства, чтобы вывести их из стейкинга. Разблокировка займёт %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 9b9ba5f8aa..8ef3fe2fc2 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -863,7 +863,6 @@ Перевірте підключення до мережі Інформація щодо комісії в мережі недоступна Ви надсилаєте - Із Ліміт газу Це максимальна кількість газу, яка буде витрачена на здійснення транзакції чи контракту. Ліміт газу запобігає несподіваним або необмеженим стягненням під час виконання транзакції. Вартість газу @@ -1016,7 +1015,7 @@ Щоб почати стейкінг в TON, спочатку здійсніть вихідну транзакцію на будь-яку суму — це активує ваш гаманець. До 0.2 TON може знадобитися додатково мережевої комісії для завершення транзакції. Невикористана частина буде повернута. Для виконання операції потребується додатково 0.2 TON, крім мережевої комісії. Будь ласка, поповніть баланс. - Зарезервовано 0.2 TON + Потрібен резерв TON Ця дія закриє інші позиції або переведе їх у статус виведення, відповідно до правил мережі. Статус позицій Розблокуйте свої кошти, щоб вивести їх зі стейкінгу. Розблокування займе %s. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index abaad31fc0..9640d81013 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -249,6 +249,7 @@ Finish Free Synchronize addresses + Get started Go to provider Go to token Got it @@ -1011,7 +1012,6 @@ Check your network connection Network fee info unreachable You send - From From %s Gas limit This is the maximum amount of gas that will be spent to complete a transaction or contract. A gas limit prevents unexpected or unlimited charges when executing a transaction. @@ -1092,7 +1092,7 @@ Recipient will receive To recipient Amount to receive - Recipient get %s + Recipient gets %s Are you sure you want to cancel the conversion? Your previous data will be cleared. Remove Conversion Send with swap @@ -1168,7 +1168,7 @@ To start staking in TON, first make an outgoing transaction of any amount — this will activate your wallet. Up to 0.2 TON may be required in addition to the network fee to complete the transaction. Any unused amount will be refunded. 0.2 TON is required to proceed with this operation, in addition to the network fee. Please top up your balance. - 0.2 Ton Reserved + TON reserve required This action will close other positions or switch them to withdrawal status, according to network rules. Positions status Unlock your money to withdraw it from staking process. Unlocking takes %s. @@ -1693,7 +1693,7 @@ To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ Give Approve Something went wrong with your previous approval, so we need a new one. Choose how you’d like to proceed. - Approve nedeed + Approve needed The fee will be taken out, and your assets will be lent again. To continue earning, approval is required. Confirm approval @@ -1704,16 +1704,12 @@ Current APY My Funds Your %1$s is now deposited in Aave and earning interest. You hold a%2$s token, which represents your balance and grows over time. When you top up, funds go to Aave to earn interest, minus a transaction fee. - Read more Active - Stop earning Earn Total earnings - Automatic Transfers to Aave Text explaining that your savings are located in the protocol Explore Aave - Explore default Your %s is deposited in Aave This is the current supply fee on %s. The live cost will be shown on the Receive Screen. Current fee @@ -1740,20 +1736,19 @@ Powered by Interest rate is variable When you top up, your funds will be automatically sent to Aave to start earning interest. A small fee equal to %s will be deducted to cover the transaction. - Start earning + Start earning Your %s will be supplied to Aave and will stay instantly available See fee policy - Network fee Your next deposits will be automatically supplied to Aave. - Start earning + Stop earning Turning off will withdraw your funds from Aave, return them to %s in your wallet, and stop earning rewards. The network fee will be deducted from the amount you withdraw. - Stop earning APY Make your money work — earn interest on your balance. Earning on your balance Processing your deposit - Earn %s% per year + Earn %1$s%% per year + Automatic Deposit some %1$s %2$s to cover the network fee for transactions Unable to cover %s fee From 44143fe65207ca196f13b042cff6d4378f4ca03f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 9 Sep 2025 12:12:39 +0300 Subject: [PATCH 12/17] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 2 +- core/res/src/main/res/values-es/strings.xml | 64 +++++++++---------- core/res/src/main/res/values-fr/strings.xml | 2 +- core/res/src/main/res/values-ja/strings.xml | 2 +- core/res/src/main/res/values-ru/strings.xml | 1 + .../src/main/res/values-uk-rUA/strings.xml | 1 + core/res/src/main/res/values/strings.xml | 2 +- 7 files changed, 38 insertions(+), 36 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index a9bc17a583..b0ec162729 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -1026,7 +1026,7 @@ Empfänger Keine gültige Adresse Stelle sicher, dass sich die empfangende Wallet-Adresse im ** %s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden. - senden an %s + %s Netzwerkadresse Stelle sicher, dass Du %s Netzwerkadresse hast, da Fehler zu verlorenen Übertragungen führen können Senden an Ein Memo/Destination Tag ist eine eindeutige ID zur Unterscheidung von Transaktionen, die an denselben Empfänger im selben Netzwerk gesendet werden. Vorsicht! Das Weglassen eines Vermerks kann dazu führen, dass Gelder für immer verloren sind! diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 31e91c7d59..a2cff23d80 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -17,7 +17,7 @@ No hay par disponible Para utilizar la función de intercambio, su billetera debe contener al menos 2 tokens Añada tokens - Sólo tienes 1 token añadido a tu portafolio. Para utilizar la función de intercambio, necesita añadir al menos 2 tokens + Solo tiene 1 token añadido a su portafolio. Para utilizar la función de intercambio, necesita añadir al menos 2 tokens Añada tokens Seleccione el token que desea recibir Seleccione el token que desea intercambiar @@ -114,7 +114,7 @@ Resetear a configuración de fábrica Modo de seguridad Ajustes del dispositivo - Además de la tarifa de red, la red Cardano cobra %1$s ADA al realizar transacciones con el %2$s token + Además de la tarifa de red, la red Cardano cobra %1$s ADA al realizar transacciones con el token %2$s Requisitos de transacción de Cardano Para realizar una %1$s transacción, deba depositar algo de ADA para cubrir la tarifa de red y el valor mínimo de ADA (se recomiendan 5 ADA) ADA insuficiente para la transferencia de tokens @@ -234,7 +234,7 @@ Guardar cambios Buscar Buscar tokens - sec + seg Ver todo Seed phrase Seleccione una acción @@ -335,7 +335,7 @@ %s dirección Enviar activos a otras redes resultará en una pérdida permanente. Red de %s - Envíe fondos utilizando solo la + Envíe fondos utilizando solo Hola equipo de soporte, he encontrado un error con el código: %s Error de WalletConnect Ha usado una tarjeta de otra billetera. Toque la tarjeta asociada con esta billetera @@ -358,7 +358,7 @@ Operación fallida por el proveedor Su intercambio está tardando más de lo esperado. Por favor, consulte al soporte del proveedor para obtener ayuda. Tiempo de transacción prolongado - El monto de la transacción fue reembolsado en %1$s a su billetera debido a OKX o reglas puente. %2$s + La cantidad de la transacción fue reembolsada en %1$s a su billetera debido a OKX o reglas puente. %2$s El monto fue reembolsado en %1$s (red %2$s) Visite el sitio web del proveedor para la verificación Verificación KYC requerida por el proveedor @@ -468,8 +468,8 @@ Gestionar tokens Para acceder a todas las redes necesita escanear la tarjeta Escanee su tarjeta o anillo - Benefíciese de %1$s tarifa de servicio en intercambios a través de Changelly del %2$s al %3$s de febrero - Intercambio con Changelly, %s tarifa + Disfrute de %1$s comisiones de servicio en los swaps a través de Changelly a partir de febrero %2$s-%3$s + Intercambie con Changelly, %s comisiones Tokens Agregar Editar @@ -507,7 +507,7 @@ Acciones rápidas Busque en el mercado Resultado - Ver tokens con una capitalización de mercado inferior a 100,000$ + Ver tokens con marketcap inferior a 100.000$ Mostrar tokens Sin resultado Seleccione una red @@ -752,7 +752,7 @@ Buscar por país Indisponible Otras monedas - Monedas Fiats Populares + Monedas fiduciarias populares Buscar por moneda Al utilizar la funcionalidad onramp, acepta %1$s y %2$s del proveedor. El monto de la compra no debe ser mayor a %s @@ -827,7 +827,7 @@ Entiendo que no puedo usar esta tarjeta para recuperar mi código de acceso en las otras tarjetas de la wallet actual 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. - Si tienes un Anillo Tangem, ¡3 swaps sin comisión en Changelly hasta el 15/11! + Si tiene un Anillo Tangem, ¡3 swaps sin comisión en Changelly hasta el 15/11! ¡Intercambia con 0% de comisión! Inicie sesión en la app y comprueba su saldo sin escanear la tarjeta o el anillo Acceder a la app @@ -857,7 +857,7 @@ Convertir a otro token Montante Se enviará al destinatario - Puede establecer tu tarifa de transacción ajustando el valor en el campo\nSatoshi por vByte. + Puede establecer su tarifa de transacción ajustando el valor en el campo Satoshi por vByte. La tarifa que se cobrará por tu transacción. Puedes establecer tu propio valor. Tarifa máxima Este es el coste que está dispuesto(a) a pagar por cada unidad de gas. Cuanto más alto sea el precio del gas, más rápido se procesará su transacción. (Tarifa prioritaria incluida) @@ -914,7 +914,7 @@ Reducir a %s Tenga en cuenta que su transacción puede experimentar retrasos bajo configuraciones específicas de tarifas Es posible que haya retrasos en las transacciones - Debido a las limitaciones de %1$s, solo %2$s UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Necesitas reducir la cantidad. + Debido a las limitaciones de %1$s solo %2$s UTXO pueden usarse en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debes reducir la cantidad. Limitación de transacciones Opcional Por favor, alinee su código QR con el cuadrado para escanearlo. Asegúrese de escanear la dirección de la red %s. @@ -922,14 +922,14 @@ Destinatario No es una dirección válida Asegúrese de que la dirección de la billetera receptora esté en la red %s para evitar perder sus tokens - enviar a %s + %s dirección de red Asegúrese de que %s dirección de red, ya que los errores pueden resultar en transferencias perdidas Destinatario Un Memo/ID de destino es un ID único para diferenciar transacciones enviadas al mismo destinatario en la misma red. Precaución: Omitir un memo puede llevar a la pérdida de fondos Memo / Destination Tag es un código que separa las transacciones dirigidas a un destinatario compartido en una red de criptomonedas. Atención: La omisión del campo Memo puede provocar la pérdida de fondos. Mis billeteras - Una forma de medir las tarifas de transacción de Bitcoin. Indique el número de la unidad más pequeña de Bitcoin (Satoshi) por cada byte virtual en una transacción. Cuanto más alto sea el número, más rápido procesarán los mineros la transacción. + Una forma de medir las comisiones por transacción de Bitcoin. Indica la cantidad de la unidad de Bitcoin más pequeña (Satoshi) por cada byte virtual en una transacción. Cuanto mayor sea la cantidad, más rápido procesarán la transacción los mineros. Satoshi / vByte Enviando... Toque cualquier campo para editarlo @@ -952,7 +952,7 @@ ¿Está seguro que desea cambiar el token a recibir? Esto restablecerá los datos introducidos previamente. Cambio de token Intercambiar y enviar - ¿Continuar con la conversión? Esto borrará sus datos anteriores. + ¿Continuar con la conversión? Sus datos anteriores se borrarán. Confirmar Conversión El envío de cualquier otra moneda supondrá su pérdida irreversible. Seleccione la red de destino correcta @@ -972,14 +972,14 @@ Haga que su token trabaje para Ud. 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. - El monto de cancelación del 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. 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 El porcentaje de rendimiento anual que podrá ganar como participante en el staking. APR - Las recompensas se acumulan automáticamente en su saldo de apustaking esta cada día. + Las recompensas se acumulan automáticamente en su saldo de staking diariamente. Disponible Tasa de recompensa promedio ¿Cómo funciona el staking? @@ -1032,7 +1032,7 @@ El staking en la red %1$s con un nuevo validador transferirá automáticamente todos los fondos previamente en staking a este validador. Reinvierta las recompensas obtenidas en el monto apostado, aumentando las ganancias potenciales. 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 cantidad para cubrir las tarifas de la red por unstaking o reclamo de recompensas. + 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 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. @@ -1069,21 +1069,21 @@ Hacer más staking Al hacer staking de %1$s, se realiza sobre todo su saldo de %2$s. Cualquier %2$s adicional que deposite en su billetera Tangem también se pondrá en staking automáticamente. Monto del staking - Ud hace el staking de %1$s y recibirá %2$s + Hará staking de %1$s y recibirá recompensas %2$s Toque para desbloquear Pulse para desbloquear o votar Toque para retirar Stake %s - El unstaking de %s + Unstaking de %s ¡La transacción se está procesando! La validación está en curso en la cadena de bloques. Esto puede tardar unos minutos. Desunión Desbloquear Desbloqueando - La cantidad para el unstaking debe ser al menos %s + La cantidad para hacer unstaking debe ser al menos %s El monto excede el saldo apostado Sin staking Deshacer el staking - Detenando el staking de activos %s + Haciendo unstaking de %s Validador Validadores Socio estratégico @@ -1120,9 +1120,9 @@ Simplemente cómodo Intercambio a través del proveedor La cantidad incluye:\n• Tarifas del proveedor de servicios\n• Tarifas de red por enviar %s desde el intercambio a la dirección del usuario. - El monto incluye:\n• tarifas del proveedor de servicios\n• tarifas de red por enviar %1$s desde el intercambio a la dirección del usuario. \n\nEl slippage del proveedor puede alcanzar el %2$s + El importe incluye:\n- comisión del proveedor de servicios\n- comisión de red por el envío de %1$s desde el exchange de vuelta a la dirección del usuario. \n\nEl deslizamiento (slippage) del proveedor es de hasta %2$s El importe incluye los honorarios del proveedor de servicios. - El importe incluye las tarifas del proveedor de servicios. \n\nEl slippage del proveedor puede alcanzar el %s + El importe incluye las tarifas del proveedor de servicios. \n\nEl deslizamiento (slippage) del proveedor puede llegar a %s Información Todos los exchanges descentralizados requieren aprobaciones para evitar que los smart contracts accedan a su billetera sin su permiso. Por diseño, los smart contracts no pueden acceder a tus tokens a menos que lo apruebes. Al \"desbloquear\" sus tokens, autoriza al smart contract de 1-inch a gastarlos. Los mineros de la red reciben una tarifa de gas (pagada por voz) para registrar esta acción en la blockchain. Puede intercambiar su token después de dar la aprobación. Aprobar @@ -1147,8 +1147,8 @@ Los datos aún no se han cargado. Esto puede tardar unos segundos. Por favor, inténtelo de nuevo más tarde. El servicio de intercambio %s no está compatible con los proveedores actuales pero estamos trabajando para agregar más opciones. Es posible que el saldo mostrado esté desactualizado debido al almacenamiento en caché. - La venta de fondos estará disponible una vez que la(s) transacción(es) pendiente(s) en la red %s se complete - El envío de fondos estará disponible una vez que se completen las transacciones pendientes en la red %s. + La venta de fondos estará disponible una vez que la(s) transacción(es) pendiente(s) en la red %s se completen + El envío de fondos estará disponible una vez que se complete(n) la(s) transaccion(es) pendiente(s) en la red %s Vender %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones. El staking de %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones. Generar XPUB @@ -1159,11 +1159,11 @@ El staking le permite ganar %1$s y obtener recompensas cada %2$s días Servicio de Staking Token de %1$s en la red %%image%% %2$s - Token en la %%image%% red %1$s + 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 Cambie este token por otro por una tarifa de servicio de %1$s del %2$s al %3$s de febrero. - Intercambio con Changelly, %s tarifa + Intercambie con Changelly, %s comisiones Intercambie ahora Criptomonedas populares 🔥 No disponible para compra @@ -1260,8 +1260,8 @@ La dirección se copió correctamente Sin conexión a internet Consíguelo ahora con un 10 % de descuento - Accede a más de 13 000 criptomonedas. Compra, vende, intercambia y realiza staking con un solo toque.\nVincula hasta tres tarjetas para hacer copias de seguridad. - Descubre Tangem Wallet + Acceda a más de 13.000 criptomonedas. Compre, venda, intercambie y realice staking con un solo toque.\nVincule hasta tres tarjetas para hacer copias de seguridad. + Descubra Tangem Wallet Cambiar código de acceso Manténgase informado sobre las transacciones entrantes de la billetera y las actualizaciones de Tangem. Notificaciones de transacciones @@ -1308,11 +1308,11 @@ Esta tarjeta podría ser una muestra de producción o una falsificación La verificación de autenticidad falló Asociar - Este token debe estar asociado a tu cuenta de Hedera antes de que pueda recibirlo. Tarifa de asociación ~%1$s %2$s + Este token debe estar asociado a su cuenta de Hedera antes de que pueda recibirlo. Tarifa de asociación ~%1$s %2$s Este token debe estar asociado con su cuenta de Hedera antes de poder recibirlo. Asocie su token No hay suficiente %s. Recargue su cuenta de Hedera para asociar este token - ¿Está seguro(a) de que desea cancelar la transacción? No podrá volver a intentar realizarla. + ¿Está seguro de que desea cancelar la transacción? No podrá volver a reintentarlo. Su transacción con un importe de %1$s %2$s no se ha completado. Puede volver a intentarlo para completarla. Tiene una transacción sin terminar Última actualización hace %s diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 2b20ddae59..5205bd94a9 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -896,7 +896,7 @@ Destinataire Adresse non valide Assurez-vous que l\'adresse du portefeuille de réception est sur le réseau %s pour éviter de perdre vos jetons - envoyer à %s + %s une adresse réseau Assurez-vous de %s une adresse réseau, car des erreurs peuvent entraîner des transferts perdus Envoyer à Un Memo/Destination Tag est un identifiant unique permettant de différencier les transactions envoyées au même destinataire sur le même réseau. Attention : L\'omission d\'un mémo peut entraîner des fonds mal placés diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 5205787420..b4830c3702 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1035,7 +1035,7 @@ 受取人 有効なアドレスではありません トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください - %s に送信 + %s %sネットワーク上のアドレスに送信していることを確認してください。エラーが発生すると資金が失われる可能性があります。 送金先 メモ/宛先タグは、同じネットワーク上の同じ受信者に送信された取引を区別するためのユニークなIDです。注意:メモを省略すると、資金の行き違いにつながる可能性があります。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 58186b2510..3508ababf5 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -946,6 +946,7 @@ Получатель Неверный адрес Убедитесь, что вы отправляете средства на адрес кошелька %s. Ошибки могут привести к потере ваших токенов. + в сети %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 8ef3fe2fc2..31000afc24 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -903,6 +903,7 @@ Одержувач Недійсна адреса Переконайтеся, що адреса гаманця одержувача знаходиться в мережі %s, щоб уникнути втрати ваших токенів + в мережі %s Переконайтеся, що ви надсилаєте на адресу в мережі %s. Помилка може призвести до втрати коштів. Надіслати до Memo/ Тег призначення — це унікальний ідентифікатор для розрізнення транзакцій, надісланих тому самому одержувачу в тій самій мережі. Застереження: відсутність тегу може призвести до втрати коштів. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 9640d81013..0113124055 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1054,7 +1054,7 @@ Recipient Not a valid address Ensure the receiving wallet address is on **the %s network** to avoid losing your tokens - send to %s + %s network Make sure you are sending to an address on the %s network. An error may result in the loss of funds. Send to A Memo/Destination Tag is a unique ID for differentiating transactions sent to the same recipient on the same network. Caution: Omitting a memo may lead to misplaced funds From 0184cf23e9e1b3c650eb4204932ce02ce279f4f6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 11:12:01 +0300 Subject: [PATCH 13/17] Updated on 2026-08-14 --- .../pair/DefaultWcPairUseCase.kt | 21 ++++++++++-- .../request/DefaultWcRequestUseCaseFactory.kt | 1 + .../domain/walletconnect/WcAnalyticEvents.kt | 6 ++++ .../destination/ui/SendDestinationContent.kt | 33 +------------------ 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt index 6d335571ef..3db26641c5 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt @@ -51,7 +51,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor( val pairResult = sdkDelegate.pair(uri) .onLeft { Timber.tag(WC_TAG).e(it, "Failed to call pair $pairRequest") - analytics.send(WcAnalyticEvents.PairFailed(it.code)) + analytics.send( + WcAnalyticEvents.PairFailed( + errorCode = it.code, + errorMessage = it.message, + ), + ) emit(WcPairState.Error(it)) } .getOrNull() ?: return@flow @@ -73,7 +78,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor( val proposalState = buildProposalState(sdkSessionProposal, sdkVerifyContext) .onLeft { - analytics.send(WcAnalyticEvents.PairFailed(it.code)) + analytics.send( + WcAnalyticEvents.PairFailed( + errorCode = it.code, + errorMessage = it.message, + ), + ) emit(WcPairState.Error(it)) } .getOrNull() ?: return@flow @@ -121,7 +131,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor( ) newSession }.onLeft { - analytics.send(WcAnalyticEvents.DAppConnectionFailed(it.code)) + analytics.send( + WcAnalyticEvents.DAppConnectionFailed( + errorCode = it.code, + errorMessage = it.message, + ), + ) sdkDelegate.rejectSession(sdkSessionProposal.proposerPublicKey) Timber.tag(WC_TAG).e(it, "Failed to approve session ${sdkSessionProposal.name}") } diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt index 31791fd91c..9745a0f84f 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt @@ -50,6 +50,7 @@ internal class DefaultWcRequestUseCaseFactory @Inject constructor( rawRequest = request, errorCode = error.code().orEmpty(), blockchain = blockchainName, + errorMessage = error.message, ) analytics.send(event) } diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index 145a9abca0..0801b74dc6 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -53,10 +53,12 @@ sealed class WcAnalyticEvents( class PairFailed( errorCode: String, + errorMessage: String, ) : WcAnalyticEvents( event = "Session Failed", params = mapOf( AnalyticsParam.Key.ERROR_CODE to errorCode, + AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage, ), ) @@ -76,10 +78,12 @@ sealed class WcAnalyticEvents( class DAppConnectionFailed( errorCode: String, + errorMessage: String, ) : WcAnalyticEvents( event = "dApp Connection Failed", params = mapOf( AnalyticsParam.Key.ERROR_CODE to errorCode, + AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage, ), ) @@ -163,6 +167,7 @@ sealed class WcAnalyticEvents( rawRequest: WcSdkSessionRequest, blockchain: String, errorCode: String, + errorMessage: String, ) : WcAnalyticEvents( event = "Signature Request Received with Failed", params = mapOf( @@ -171,6 +176,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method, AnalyticsParam.Key.BLOCKCHAIN to blockchain, AnalyticsParam.Key.ERROR_CODE to errorCode, + AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage, ), ) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt index 6f655f90bf..841793e7a6 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt @@ -121,11 +121,7 @@ private fun LazyListScope.addressItem( ) { item(key = ADDRESS_FIELD_KEY) { FooterContainer( - footer = if (isRedesignEnabled) { - buildHighlightedFooterText(networkName) - } else { - resourceReference(R.string.send_recipient_address_footer, wrappedList(networkName)) - }, + footer = resourceReference(R.string.send_recipient_address_footer, wrappedList(networkName)), ) { InputRowRecipient( value = address.value, @@ -150,33 +146,6 @@ private fun LazyListScope.addressItem( } } -@Composable -private fun buildHighlightedFooterText(networkName: String): TextReference { - return annotatedReference( - buildAnnotatedString { - val styledText = stringResourceSafe( - R.string.send_recipient_address_footer_highlighted_part, - networkName, - ) - val styledColor = TangemTheme.colors.text.secondary - appendWithStyledPlaceholder( - template = stringResourceSafe( - R.string.send_recipient_address_footer_v2, - networkName, - ), - placeholder = networkName, - ) { - withStyle(SpanStyle(fontWeight = FontWeight.Medium)) { - appendColored( - text = styledText, - color = styledColor, - ) - } - } - }, - ) -} - private fun LazyListScope.memoField( memoField: DestinationTextFieldUM.RecipientMemo?, onMemoChange: (String, Boolean) -> Unit, From 755beec9965bbcd01063471a634c653eb16ac2cc Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 11:23:23 +0300 Subject: [PATCH 14/17] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 2 - core/res/src/main/res/values-es/strings.xml | 72 +++++++++---------- core/res/src/main/res/values-fr/strings.xml | 4 +- core/res/src/main/res/values-ja/strings.xml | 2 - core/res/src/main/res/values-ru/strings.xml | 4 +- .../src/main/res/values-uk-rUA/strings.xml | 4 +- core/res/src/main/res/values/strings.xml | 4 +- 7 files changed, 39 insertions(+), 53 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index b0ec162729..1bd987889f 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -1026,8 +1026,6 @@ Empfänger Keine gültige Adresse Stelle sicher, dass sich die empfangende Wallet-Adresse im ** %s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden. - %s Netzwerkadresse - Stelle sicher, dass Du %s Netzwerkadresse hast, da Fehler zu verlorenen Übertragungen führen können Senden an Ein Memo/Destination Tag ist eine eindeutige ID zur Unterscheidung von Transaktionen, die an denselben Empfänger im selben Netzwerk gesendet werden. Vorsicht! Das Weglassen eines Vermerks kann dazu führen, dass Gelder für immer verloren sind! Memo / Destination Tag ist ein Code, der Transaktionen an einen gemeinsamen Empfänger im Kryptonetzwerk voneinander trennt. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index a2cff23d80..327988e301 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -34,7 +34,7 @@ Razón: %s No se puede completar una transacción El seleccionado no admite la red %1$s - Para activar el %1$s cifrado criptográfico de la blockchain, necesitarás reiniciar la billetera a los ajustes de fábrica. Por favor, retire sus fondos antes de hacerlo para asegurarse no perderlos, y luego complete el proceso de reinicio. El acceso a la billetera actual no será posible después del reinicio. + Para activar el cifrado criptográfico de la blockchain %1$s, tendrá que restablecer la configuración de fábrica de la billetera. Por favor, retire tus fondos antes de hacerlo para asegurarse de que no los pierda, y luego complete el proceso de restablecimiento. El acceso a la billetera actual no será posible tras el restablecimiento. Esta tarjeta no admite tokens en la red %1$s debido a una limitación del firmware. ¿Tiene dificultades para escanear su tarjeta/anillo? Esta tarjeta no está diseñada para funcionar con Tangem @@ -185,7 +185,7 @@ Intercambiar Explore Explore historial de transacciones - Explorador(a) + Explorador No se pudo obtener la tarifa Las tarifas de red son cargos que los usuarios pagan para procesar y confirmar transacciones. El importe de la tarifa puede verse afectado por la congestión de la red, el tamaño de la transacción y la prioridad de ejecución. %s Rápido @@ -255,7 +255,7 @@ Con éxito Soporte Redes soportadas - Swap + Intercambiar términos y condiciones Condiciones de uso Hoy @@ -276,23 +276,23 @@ semana con - Dirección del contract copiada + Dirección de contrato copiada Redes disponibles - Dirección del contract - La dirección del contract no es válida + Dirección de contrato + La dirección de contrato es incorrecta Por favor, seleccione la red Este token ya ha sido agregado a la lista Este token ya existe Los decimales deben ser un número entero válido, hasta %d Derivación personalizada Por ejemplo m/00\'/0000\'/0\'/0/0 - Introduzque una derivación personalizada + Introduzca una derivación personalizada Decimales Ruta de derivación Por defecto - Coin de tipo BIP44 + Tipo de moneda BIP44 La ruta de derivación que ha ingresado no es válida - Por ejemplo USD coin + Por ejemplo moneda USD Nombre No elegida Red @@ -341,12 +341,12 @@ Ha usado una tarjeta de otra billetera. Toque la tarjeta asociada con esta billetera No hay fondos suficientes para la transacción. Por favor, recargue su cuenta. Mis tokens - Aún no ha añadido ningún token. Agregue tokens a través de Market para hacer swap + 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 Proporcionado por Estado Elegir proveedor - Tangem ofrece swaps de tokens a través de proveedores externos + Tangem ofrece intercambios de tokens a través de proveedores externos Elija proveedor Ha ocurrido un error. Código: %s Error %1$s. El proveedor seleccionado no puede procesar la transacción especificada. Por favor, redondee el valor a %2$s o cámbielo @@ -389,7 +389,7 @@ Lista de todos los tokens agregados a su billetera Buscar tarifas actuales... Tasa flotante - Al utilizar la función de intercambio, acepta el %s + Al utilizar la función de intercambio, acepta los %s Al utilizar la función de intercambio, aceptas las condiciones de %1$s y %2$s del proveedor. Pronto habrá más proveedores disponibles Proveedor @@ -434,7 +434,7 @@ 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 Polygon para utilizar su %s - Para continuar, de autorización a los smart contracts de %1s para usar su %2s + Para continuar, conceda a los contratos inteligentes de %1s permiso para utilizar su %2s Dar autorización Ilimitado Agregar Billetera Existente @@ -464,7 +464,7 @@ Límite de Mana La red Koinos requiere Mana para las tarifas de red. Tienes %1$s/%2$s Mana Nivel de Mana - Para comenzar a seguir tus activos crypto y transacciones, agregue tokens + Para hacer un seguimiento de sus criptomonedas y transacciones, agregue tokens Gestionar tokens Para acceder a todas las redes necesita escanear la tarjeta Escanee su tarjeta o anillo @@ -476,7 +476,7 @@ Capitalización de mercado de la moneda Blockchain en la que se creó inicialmente la criptomoneda Red nativa - El uso de redes no nativas para tokens permite la interoperabilidad entre blockchains, permitiendo que los activos se utilicen en diversas aplicaciones descentralizadas y smart contracts en diferentes plataformas. Sin embargo, esto a menudo implica un custodio o smart contract para mantener el activo original de forma segura, introduciendo centralización y riesgo de contraparte. + El uso de redes no nativas para tokens permite la interoperabilidad entre cadenas de bloques, lo que permite el uso de activos en diversas aplicaciones descentralizadas y contratos inteligentes en distintas plataformas. Sin embargo, esto suele implicar un custodio o un contrato inteligente que mantenga el activo original de forma segura, lo que introduce centralización y riesgo de contraparte. No es la blockchain original o primaria donde se aloja el token Redes no nativas Elegir redes @@ -555,7 +555,7 @@ Valoración totalmente diluida El valor teórico total de una criptomoneda si todas las monedas que podrían existir estuvieran en circulación, incluidas las que actualmente no circulan. Valoración totalmente diluida - Dato de Genesis + Fecha de génesis Alto Titulares El cambio en el número de poseedores de tokens dentro de un período de tiempo específico @@ -650,11 +650,11 @@ Únase ahora Comparta su código y gane 5 USDT por venta. Su amigo obtiene un 10% de descuento. ¡Obtenga RECOMPENSAS por cada amigo! - Deba configurar un único código de acceso para proteger todss sus dispositivos. + Configure un código de acceso único para proteger todos sus dispositivos. Proteger Puede configurar un código de acceso individual en cada tarjeta más adelante Personalizar - El código de acceso se puede recuperar con una tarjeta o un anillo vinculada(o). No guarde todos los dispositivos en el mismo lugar. + El código de acceso puede restaurarse con una tarjeta o un anillo vinculados. No guarde todos sus dispositivos en el mismo lugar. Restaurar Elige cualquier palabra, frase o número que quieras como su código de acceso Crear un código de acceso @@ -704,19 +704,19 @@ %d palabras - Para importar su billetera, ingrese su seed phrase en el campo de abajo + Para importar su billetera, introduzca su seed phrase en el campo a continuación Generar seed phrase Importe una billetera - Una seed phrase es una serie de palabras que se permite recuperar su billetera. A diferencia de las claves generadas por la tarjeta, las seed phrases no están protegidas y pueden ser copiadas y robadas. Use esta opción bajo su propia responsabilidad. + Una seed phrase (o frase semilla) es una serie de palabras que permite recuperar su billetera. A diferencia de las claves generadas por la tarjeta, las seed phrases no están protegidas y pueden ser copiadas y robadas. Use esta opción bajo su propia responsabilidad. Usar seed phrase - Seed phrase no válida. Por favor, comprueba el orden de las palabras. - Seed phrase no válida. Por favor, comprueba tu ortografía. + Seed phrase incorrecta. Por favor, comprueba el orden de las palabras. + Seed phrase incorrecta. Por favor, compruebe la ortografía. Legado - Para comprobar si has escrito correctamente su seed phrase, por favor introduce las palabras 2ª, 7ª y 11ª + Para comprobar si ha escrito correctamente su seed phrase, por favor introduzca las palabras 2ª, 7ª y 11ª Bien, vamos a comprobar Para iniciar el proceso de backup, agregue hasta dos tarjetas/anillos de backup. Puede agregar una tarjeta/anillo más o finalizar el proceso de backup - Prepare su tarjeta de backup con el no.%s + Prepare su tarjeta de backup con el número %s Escanee la tarjeta principal o el anillo para iniciar el proceso de backup. Prepare la tarjeta principal con el número %s Prepare el anillo y presione el botón de escaneo a continuación @@ -805,7 +805,7 @@ para %d billetera para %d billeteras - Obtendrá ^^%1$s^^ por cada wallet comprada por su amigo en su dirección %3$s de la red %2$s ^^30 días después^^ + Obtendrá ^^%1$s^^ por cada wallet comprada por sus amigos en su dirección %3$s de la red %2$s ^^30 días después^^ de la compra Usted Obtendrá un al comprar una billetera en tangem.com @@ -816,7 +816,7 @@ ¡Compra Tangem Wallet con descuento!\n%s Recomiende Tangem a sus amigos Ha aceptado - Al tocar este botón, ud. acepta + Al pulsar este botón acepta del programa de referidos %d billetera @@ -914,16 +914,14 @@ Reducir a %s Tenga en cuenta que su transacción puede experimentar retrasos bajo configuraciones específicas de tarifas Es posible que haya retrasos en las transacciones - Debido a las limitaciones de %1$s solo %2$s UTXO pueden usarse en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Debes reducir la cantidad. + Debido a las limitaciones de %1$s solo %2$s UTXO pueden usarse en una sola transacción. Esto significa que solo puede enviar %3$s o menos. Debe reducir la cantidad. Limitación de transacciones Opcional Por favor, alinee su código QR con el cuadrado para escanearlo. Asegúrese de escanear la dirección de la red %s. Reciente Destinatario No es una dirección válida - Asegúrese de que la dirección de la billetera receptora esté en la red %s para evitar perder sus tokens - %s dirección de red - Asegúrese de que %s dirección de red, ya que los errores pueden resultar en transferencias perdidas + Asegúrese de que la dirección de la billetera receptora esté en **la red %s** para evitar perder sus tokens Destinatario Un Memo/ID de destino es un ID único para diferenciar transacciones enviadas al mismo destinatario en la misma red. Precaución: Omitir un memo puede llevar a la pérdida de fondos Memo / Destination Tag es un código que separa las transacciones dirigidas a un destinatario compartido en una red de criptomonedas. @@ -1005,7 +1003,7 @@ Al utilizar la función de staking, usted acepta %1$s y %2$s del proveedor Bloqueado Migrar - Native staking + Staking nativo No hay validadores activos disponibles para hacer staking en este momento. Por favor, inténtalo de nuevo más tarde. Al hacer staking en la red Cardano, se utiliza todo su saldo. Se reservarán 2 ADA adicionales y se devolverán después del staking. Su ADA permanece desbloqueado mientras hace staking. Detalles del staking de ADA @@ -1105,7 +1103,7 @@ Se requiere una transacción entrante de al menos %1$s para proceder Fondos insuficientes Tasa Fija - La red cobrará una tarifa de aprobación de token para verificar que está autorizando el uso de su token para el swap. + La red cobrará una tasa de aprobación del token para verificar que usted autoriza el uso de su token para el intercambio. Intercambie más tokens a mejores tasas directamente en su billetera. ¡Nuevo proveedor de intercambio disponible! Siéntase seguro con una asistencia permanente que le ayudará con cualquier problema @@ -1124,11 +1122,11 @@ El importe incluye los honorarios del proveedor de servicios. El importe incluye las tarifas del proveedor de servicios. \n\nEl deslizamiento (slippage) del proveedor puede llegar a %s Información - Todos los exchanges descentralizados requieren aprobaciones para evitar que los smart contracts accedan a su billetera sin su permiso. Por diseño, los smart contracts no pueden acceder a tus tokens a menos que lo apruebes. Al \"desbloquear\" sus tokens, autoriza al smart contract de 1-inch a gastarlos. Los mineros de la red reciben una tarifa de gas (pagada por voz) para registrar esta acción en la blockchain. Puede intercambiar su token después de dar la aprobación. + Todos los intercambios descentralizados requieren aprobaciones para evitar que los contratos inteligentes accedan a su billetera sin su permiso. Por diseño, los contratos inteligentes no pueden acceder a sus tokens a menos que lo apruebe. Al \"desbloquear\" sus tokens, autoriza al contrato inteligente de 1-inch a gastarlos. Los mineros de la red reciben una tarifa de gas (pagada por usted) para registrar esta acción en la blockchain. Puede intercambiar su token después de dar su aprobación. Aprobar Error en la estimación de la tarifa. Envíe sus comentarios al servicio de asistencia. Usted intercambia - Hacer swap de esta cantidad de tokens seleccionados causará un impacto significativo en el precio y reducirá su resultado. + Hacer un intercambio de esta cantidad del token seleccionado causará un impacto significativo en el precio y reducirá su resultado. Fondos insuficientes Dar autorización Intercambiar @@ -1148,7 +1146,7 @@ El servicio de intercambio %s no está compatible con los proveedores actuales pero estamos trabajando para agregar más opciones. Es posible que el saldo mostrado esté desactualizado debido al almacenamiento en caché. La venta de fondos estará disponible una vez que la(s) transacción(es) pendiente(s) en la red %s se completen - El envío de fondos estará disponible una vez que se complete(n) la(s) transaccion(es) pendiente(s) en la red %s + El envío de fondos estará disponible una vez que se complete(n) la(s) transacción(es) pendiente(s) en la red %s Vender %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones. El staking de %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones. Generar XPUB @@ -1353,7 +1351,7 @@ Algunas redes no están disponibles No se han podido actualizar los saldos de algunos tokens No hay suficiente %s. Recargue su cuenta XLM para abrir trustline - Esta es una tarjeta de Testnet. No puede procesar transacciones y solo deba usarse para pruebas y desarrollo. + Esta es una tarjeta de Testnet. No puede procesar transacciones y solo debe usarse para fines de prueba y desarrollo. Solo para fines de prueba El saldo podría estar desactualizado. Actualice la página. No hay suficiente %1$s. Recargue su cuenta %2$s para asociar este token @@ -1373,7 +1371,7 @@ Verifique su conexión de red Tiempo de espera agotado Vuelva a su navegador y vuelva a conectarse a través de WalletConnect. - La sesión de Wallet Connect se desconectó + La sesión de Wallet Connect fue desconectada Firmar de todos modos Código de error: %s. Si el problema persiste - no dude en ponerse en contacto con nuestro soporte. Si el problema persiste, no dude en contactar con nuestro soporte. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 5205bd94a9..22c254f30d 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -895,9 +895,7 @@ Récent Destinataire Adresse non valide - Assurez-vous que l\'adresse du portefeuille de réception est sur le réseau %s pour éviter de perdre vos jetons - %s une adresse réseau - Assurez-vous de %s une adresse réseau, car des erreurs peuvent entraîner des transferts perdus + Assurez-vous que l\'adresse du portefeuille de réception est sur **le réseau %s** pour éviter de perdre vos jetons Envoyer à Un Memo/Destination Tag est un identifiant unique permettant de différencier les transactions envoyées au même destinataire sur le même réseau. Attention : L\'omission d\'un mémo peut entraîner des fonds mal placés Le Memo / Destination Tag est un code qui distingue les transactions envoyées à un destinataire partagé sur un réseau crypto. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index b4830c3702..027134519c 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1035,8 +1035,6 @@ 受取人 有効なアドレスではありません トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください - %s - %sネットワーク上のアドレスに送信していることを確認してください。エラーが発生すると資金が失われる可能性があります。 送金先 メモ/宛先タグは、同じネットワーク上の同じ受信者に送信された取引を区別するためのユニークなIDです。注意:メモを省略すると、資金の行き違いにつながる可能性があります。 メモ / 宛先タグは、暗号資産ネットワーク内の共有受信者への取引を分離するコードです。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 3508ababf5..60ebb679d5 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -945,9 +945,7 @@ Последние Получатель Неверный адрес - Убедитесь, что вы отправляете средства на адрес кошелька %s. Ошибки могут привести к потере ваших токенов. - в сети %s - Убедитесь, что отправляете на адрес в сети %s, ошибки могут привести к потере средств. + Убедитесь, что адрес получателя находится **в сети %s**, чтобы избежать потери отправляемых средств Отправить Мемо/ Код назначения - это код, разделяющий транзакции к общему получателю в сети криптовалют. Внимание: отсутствие мемо может привести к потере средств. Memo / Destination Tag — это код, разделяющий транзакции, отправляемые одному и тому же получателю в криптовалютной сети. 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 31000afc24..0e1658114b 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -902,9 +902,7 @@ Останні Одержувач Недійсна адреса - Переконайтеся, що адреса гаманця одержувача знаходиться в мережі %s, щоб уникнути втрати ваших токенів - в мережі %s - Переконайтеся, що ви надсилаєте на адресу в мережі %s. Помилка може призвести до втрати коштів. + Переконайтеся, що адреса отримувача знаходиться **в мережі %s**, щоб уникнути втрати ваших коштів. Надіслати до Memo/ Тег призначення — це унікальний ідентифікатор для розрізнення транзакцій, надісланих тому самому одержувачу в тій самій мережі. Застереження: відсутність тегу може призвести до втрати коштів. Мемо / Destination Tag — це код, що розділяє транзакції до спільного одержувача в криптовалютній мережі. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 0113124055..d35ab1c6cf 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1053,9 +1053,7 @@ Recent Recipient Not a valid address - Ensure the receiving wallet address is on **the %s network** to avoid losing your tokens - %s network - Make sure you are sending to an address on the %s network. An error may result in the loss of funds. + Ensure the recipient\'s address is on **the %s network** to avoid losing your funds Send to A Memo/Destination Tag is a unique ID for differentiating transactions sent to the same recipient on the same network. Caution: Omitting a memo may lead to misplaced funds Memo / Destination Tag is a code separating transactions to a shared recipient in a crypto network. From 808040cf0c952b971bd7a18954a8b33b442073f9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 13:53:38 +0300 Subject: [PATCH 15/17] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 2 +- core/res/src/main/res/values-ja/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 1bd987889f..e0539d9751 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -1025,7 +1025,7 @@ Jüngste Empfänger Keine gültige Adresse - Stelle sicher, dass sich die empfangende Wallet-Adresse im ** %s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden. + Stelle sicher, dass sich die empfangende Wallet-Adresse im **%s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden. Senden an Ein Memo/Destination Tag ist eine eindeutige ID zur Unterscheidung von Transaktionen, die an denselben Empfänger im selben Netzwerk gesendet werden. Vorsicht! Das Weglassen eines Vermerks kann dazu führen, dass Gelder für immer verloren sind! Memo / Destination Tag ist ein Code, der Transaktionen an einen gemeinsamen Empfänger im Kryptonetzwerk voneinander trennt. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 027134519c..0ec41dbaeb 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1034,7 +1034,7 @@ 最近の取引 受取人 有効なアドレスではありません - トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください + トークンの損失を避けるために、受信ウォレットアドレスが**%sネットワーク**上にあることを確認してください 送金先 メモ/宛先タグは、同じネットワーク上の同じ受信者に送信された取引を区別するためのユニークなIDです。注意:メモを省略すると、資金の行き違いにつながる可能性があります。 メモ / 宛先タグは、暗号資産ネットワーク内の共有受信者への取引を分離するコードです。 From bede92a2dcb141e1d6752a0e79921a2667d36d78 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 14:43:44 +0500 Subject: [PATCH 16/17] Updated on 2026-08-14 --- .../sign/WcSignUseCaseDelegate.kt | 29 +++++++------------ .../domain/walletconnect/WcAnalyticEvents.kt | 4 +-- .../transaction/model/WcAddNetworkModel.kt | 3 +- .../model/WcSendTransactionModel.kt | 24 ++++++++++++++- .../model/WcSignTransactionModel.kt | 9 +++++- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt index e42a93cba3..b2ea1d5c4a 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt @@ -64,25 +64,16 @@ internal class WcSignUseCaseDelegate( } .onEach { state -> val step = state.domainStep as? WcSignStep.Result ?: return@onEach - val event = step.result.fold( - ifLeft = { error -> - val errorMessage = error.message() ?: "" - WcAnalyticEvents.SignatureRequestFailed( - rawRequest = context.rawSdkRequest, - network = context.network, - errorCode = error.code() ?: error::class.simpleName.orEmpty(), - errorMessage = errorMessage, - ) - }, - ifRight = { - WcAnalyticEvents.SignatureRequestHandled( - rawRequest = context.rawSdkRequest, - network = context.network, - securityStatus = context.session.securityStatus, - ) - }, - ) - analytics.send(event) + step.result.leftOrNull()?.let { error -> + val errorMessage = error.message() ?: "" + val event = WcAnalyticEvents.SignatureRequestFailed( + rawRequest = context.rawSdkRequest, + network = context.network, + errorCode = error.code() ?: error::class.simpleName.orEmpty(), + errorMessage = errorMessage, + ) + analytics.send(event) + } } var signJob: Job? = null diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index 0801b74dc6..b7228f2980 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -112,7 +112,7 @@ sealed class WcAnalyticEvents( rawRequest: WcSdkSessionRequest, network: Network, emulationStatus: EmulationStatus?, - securityStatus: CheckDAppResult?, + securityStatus: CheckDAppResult, ) : WcAnalyticEvents( event = "Signature Request Received", params = mapOf( @@ -121,7 +121,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method, AnalyticsParam.Key.BLOCKCHAIN to network.name, AnalyticsParam.Key.EMULATION_STATUS to emulationStatus?.status, - AnalyticsParam.Key.TYPE to securityStatus?.toAnalyticVerificationStatus(), + AnalyticsParam.Key.TYPE to securityStatus.toAnalyticVerificationStatus(), ).mapNotNullValues { it.value }, ) { enum class EmulationStatus(val status: String) { diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt index e15ce42f95..af17a13db3 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt @@ -3,6 +3,7 @@ package com.tangem.features.walletconnect.transaction.model import androidx.compose.runtime.Stable import com.arkivanov.decompose.router.stack.StackNavigation import com.arkivanov.decompose.router.stack.pushNew +import com.domain.blockaid.models.dapp.CheckDAppResult import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model @@ -132,7 +133,7 @@ internal class WcAddNetworkModel @Inject constructor( rawRequest = useCase.rawSdkRequest, network = useCase.network, emulationStatus = null, - securityStatus = null, + securityStatus = CheckDAppResult.FAILED_TO_VERIFY, ), ) diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt index ebda2cb59a..8b5afff900 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt @@ -5,6 +5,7 @@ import arrow.core.Either import com.arkivanov.decompose.router.stack.StackNavigation import com.arkivanov.decompose.router.stack.pop import com.arkivanov.decompose.router.stack.pushNew +import com.domain.blockaid.models.dapp.CheckDAppResult import com.domain.blockaid.models.transaction.SimulationResult import com.domain.blockaid.models.transaction.ValidationResult import com.tangem.blockchain.common.TransactionData @@ -94,6 +95,8 @@ internal class WcSendTransactionModel @Inject constructor( private var sign: () -> Unit = {} private val feeReloadState = MutableStateFlow(false) private val signatureReceivedAnalyticsSendState = MutableStateFlow(false) + private val securityStatusState = + MutableStateFlow>(Lce.Loading(partialContent = null)) init { @Suppress("UnusedPrivateMember") @@ -130,6 +133,7 @@ internal class WcSendTransactionModel @Inject constructor( .collectLatest { (signState, securityCheck) -> if (signingIsDone(signState, useCase)) return@collectLatest + securityStatusState.value = securityCheck sendSignatureReceivedAnalytics(useCase, securityCheck) this@WcSendTransactionModel.signState = signState @@ -372,6 +376,12 @@ internal class WcSendTransactionModel @Inject constructor( false } is Either.Right -> { + val event = WcAnalyticEvents.SignatureRequestHandled( + rawRequest = useCase.rawSdkRequest, + network = useCase.network, + securityStatus = securityStatusState.value.toCheckDAppResult(), + ) + analytics.send(event) showSuccessSignMessage() router.pop() true @@ -408,10 +418,22 @@ internal class WcSendTransactionModel @Inject constructor( rawRequest = useCase.rawSdkRequest, network = useCase.network, emulationStatus = emulationStatus, - securityStatus = useCase.session.securityStatus, + securityStatus = securityCheck.toCheckDAppResult(), ), ) signatureReceivedAnalyticsSendState.value = true } + + private fun Lce.toCheckDAppResult(): CheckDAppResult { + return when (this) { + is Lce.Content -> when (this.content.result.validation) { + ValidationResult.SAFE -> CheckDAppResult.SAFE + ValidationResult.UNSAFE, ValidationResult.WARNING -> CheckDAppResult.UNSAFE + ValidationResult.FAILED_TO_VALIDATE -> CheckDAppResult.FAILED_TO_VERIFY + } + is Lce.Error -> CheckDAppResult.FAILED_TO_VERIFY + is Lce.Loading -> CheckDAppResult.FAILED_TO_VERIFY + } + } } \ No newline at end of file diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt index 28b294640d..3d41876dbb 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Stable import com.arkivanov.decompose.router.stack.StackNavigation import com.arkivanov.decompose.router.stack.pop import com.arkivanov.decompose.router.stack.pushNew +import com.domain.blockaid.models.dapp.CheckDAppResult import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model @@ -133,6 +134,12 @@ internal class WcSignTransactionModel @Inject constructor( private fun signingIsDone(signState: WcSignState<*>): Boolean { (signState.domainStep as? WcSignStep.Result)?.result?.let { result -> if (result.isRight()) { + val event = WcAnalyticEvents.SignatureRequestHandled( + rawRequest = useCase.rawSdkRequest, + network = useCase.network, + securityStatus = CheckDAppResult.FAILED_TO_VERIFY, + ) + analytics.send(event) showSuccessSignMessage() } router.pop() @@ -158,7 +165,7 @@ internal class WcSignTransactionModel @Inject constructor( rawRequest = useCase.rawSdkRequest, network = useCase.network, emulationStatus = null, - securityStatus = null, + securityStatus = CheckDAppResult.FAILED_TO_VERIFY, ), ) From dec40f34731273b3b3dd1a41c4d3ed4785d2e770 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 10:54:56 +0000 Subject: [PATCH 17/17] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 2572f02b34..4829355867 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,13 +5,13 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.28-1218" +tangemBlockchainSdk = "develop-1216" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.28-559" +tangemCardSdk = "develop-561" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ -tangemHotSdk = "develop-461" +tangemHotSdk = "develop-527" #tangemHotSdk = "0.0.1" # Keep it! - used for local builds ^