diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 768170187f..51b0328c1d 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -561,10 +561,7 @@ NFT senden Eigenschaften Unbetitelte Sammlung - - - %1$d NFTs in der %2$d Sammlung - + %1$d NFTs in der %2$d Sammlung Tippe hier, um das erste NFT zu erhalten NFT-Sammlungen Die Daten konnten nicht geladen werden diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 10fafd2e79..ab1c626b51 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -191,6 +191,7 @@ El servidor no está disponible, por favor inténtelo de nuevo más tarde Compartir Compartir enlace + Mostrar más Firme Firme y envíe Stake diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index e26fb2f165..6758225e1c 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -191,6 +191,7 @@ Le serveur n\'est pas disponible, veuillez réessayer plus tard Partager Partager le lien + Afficher plus Signez Signez et envoyez Stake @@ -518,10 +519,7 @@ Collections NFT Certaines données peuvent ne pas se charger Problèmes de chargement temporaires - - - %1$d NFT dans la collection %2$d - + %1$d NFT dans la collection %2$d Appuyez ici pour recevoir le premier NFT Collections NFT Impossible de charger les données diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 5abe91349d..10a640eece 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -64,6 +64,9 @@ %d デバイス + + %1$dトークン + このカードを使用して、このウォレット内の他のカードまたはリングのアクセスコードをリセットしたくない場合は、このオプションを無効にしてください。これにより、このカードのアクセスコードもリセットできなくなりますのでご注意ください。 このカードを使用して、このウォレット内の他のカードのアクセスコードをリセットできます。 アクセスコードの復元 @@ -148,6 +151,7 @@ アドレスを同期する プロバイダーへ移動 トークンへ移動 + わかりました 非表示 時間 インポート @@ -202,6 +206,7 @@ 送信 成功 サポート + 対応ネットワーク スワップ 利用規約 利用規約 @@ -554,9 +559,7 @@ NFTを送信する 特徴 無題のコレクション - - %1$dコレクションの%2$dNFT - + %2$dコレクションの%1$dNFT ここをタップして最初のNFTを受け取ります NFTコレクション データを読み込めません @@ -695,6 +698,8 @@ 後で有効にする 設定 通知を有効にする + 対応ネットワーク上の受信取引の通知を受け取る + 取引通知 ギャラリーから選択 設定 カメラへのアクセスを許可していません。 @@ -1075,6 +1080,7 @@ Tangemツイン この操作は元に戻せません。古いウォレットにはアクセスできなくなります。 番号%sのツインカードをタップし、操作が終了するまで取り外さないでください。 + 問題が発生しました。 エラーが発生しました。エラー コード:%s。サポートにお問い合わせください。 %sを使用するか、カード / リングをスキャンしてウォレットにアクセスしてください 接続に失敗しました:このdAppは、サポートされていないWallet Connectバージョン1.0を使用しています。正常に接続するには、dAppがWallet Connectバージョン2.0をサポートしていることを確認してください。 @@ -1154,7 +1160,7 @@ 1.3万種類以上の暗号資産にアクセス。ワンタップで買付、売却、スワップ、ステーキングが可能です。\nバックアップ用に最大3枚のカードを連携できます。 Tangemウォレットを見る ウォレットの受信取引とTangemの更新について通知を受け取る。 - プッシュ通知 + 取引通知 ウォレット設定 Tangem %sを使用するか、カード / リングをスキャンしてウォレットにアクセスしてください diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 4c2a4c1617..45c1636058 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -199,7 +199,7 @@ Сервер недоступен, повторите попытку позднее Поделиться Поделиться ссылкой - Показать больше + Подробнее Подписать Подписать и отправить Застейкать @@ -568,12 +568,7 @@ Не добавлено Отправить NFT Черты - - %1$d NFTs в %2$d коллекции - %1$d NFTs в %2$d коллекциях - %1$d NFTs в %2$d коллекциях - %1$d NFTs в %2$d коллекциях - + %1$d NFTs в %2$d коллекциях Нажмите здесь, чтобы получить первую NFT NFT коллекции Невозможно загрузить данные 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 46d6b20fe8..b78180a0ac 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -197,6 +197,7 @@ Сервер недоступний, спробуйте пізніше Поширити Поділитися посиланням + Показати більше Підписати Підписати та надіслати Застейкати @@ -451,6 +452,8 @@ Лідери росту Лідери падіння В тренді + Стейкінг — простий спосіб отримувати дохід з вашої криптовалюти. %s + Отримуйте до %s APY Про %s %d біржа @@ -658,6 +661,8 @@ За балансом Сортування токенів Список + Більше + Увімкнути сповіщення Виберіть з галереї Налаштування Ви не надали доступ до своєї камери @@ -884,6 +889,11 @@ Рестейк дозволяє вам перемістити ваші кошти від одного валідатора до іншого без необхідності виводити кошти зі стейкінгу Ви збираєтеся застейкати весь свій баланс. Ми рекомендуємо залишити невелику суму, щоб покрити комісію мережі за зняття коштів або отримання винагороди. Щоб почати стейкінг в TON, спочатку здійсніть вихідну транзакцію на будь-яку суму — це активує ваш гаманець. + До 0.2 TON може знадобитися додатково мережевої комісії для завершення транзакції. Невикористана частина буде повернута. + Для виконання операції потребується додатково 0.2 TON, крім мережевої комісії. Будь ласка, поповніть баланс. + Зарезервовано 0.2 TON + Ця дія закриє інші позиції або переведе їх у статус виведення, відповідно до правил мережі. + Статус позицій Розблокуйте свої кошти, щоб вивести їх зі стейкінгу. Розблокування займе %s. Ваші кошти будуть доступні для використання після закінчення 21-денного періоду розблокування. Винагорода буде отримана разом з вашими незастейканими коштами. Ваші кошти будуть доступні після %s періоду розблокування. @@ -1094,6 +1104,7 @@ Отримати з 10% знижкою Доступ до 13,000+ криптовалют. Купуйте, продавайте, обмінюйте та стейкайте одним дотиком.\nЗ’єднайте до трьох карток для бекапу. Відкрийте Tangem Wallet + Сповіщення про транзакції Налаштування гаманця Tangem Використовуйте %s або відскануйте картку/кільце, щоб розблокувати доступ до вашого гаманця @@ -1183,6 +1194,8 @@ Це картка Testnet. Вона не може обробляти транзакції і повинна використовуватися лише для тестування та розробки. Лише для цілей тестування Баланс може бути застарілим. Оновіть сторінку. + Адреса + Вміст Відмовитися Ви не завершили резервне копіювання. Бажаєте продовжити? Так, поновити diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 4e052d6444..79c00174e1 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -155,6 +155,7 @@ Synchronize addresses Go to provider Go to token + Got it Hide hour Import @@ -209,6 +210,7 @@ Submit Success Support + Supported networks Swap Tangem Wallet terms and conditions @@ -566,10 +568,7 @@ Send NFT Traits Untitled collection - - %1$d NFTs in %2$d collection - %1$d NFTs in %2$d collections - + %1$d NFTs in %2$d collections Tap here to receive first NFT NFT collections Unable to load the data @@ -710,6 +709,8 @@ Enable Later Settings Enable Notifications + Receive alerts for incoming transactions on supported networks + Transaction Notifications Select from the gallery Settings You have not given access to your camera @@ -1092,6 +1093,8 @@ Tangem Twin This action is irreversible. You will not have access to the old wallet. Tap the twin card with number %s and do not remove until the end of the operation + Please try again later. If the issue persists, please contact support. + Something went wrong! We\'ve encountered an error. Error code: %s. Please contact our support. Use %s or scan a card/ring to have access to your wallet Connection failed: This dApp uses Wallet Connect version 1.0, which is not supported. Please ensure the dApp supports Wallet Connect version 2.0 to connect successfully. diff --git a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt index 028e2901a0..cbef876b7a 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt @@ -184,7 +184,7 @@ data class BottomSheetMessageV2( val messageBottomSheetUMV2: MessageBottomSheetUMV2, ) : EventMessage -internal fun bottomSheetMessage(init: @MessageBottomSheetV2Dsl MessageBottomSheetUMV2.() -> Unit) = +fun bottomSheetMessage(init: @MessageBottomSheetV2Dsl MessageBottomSheetUMV2.() -> Unit) = BottomSheetMessageV2(messageBottomSheetUM(init)) /** diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/accesscode/model/OnboardingVisaAccessCodeModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/accesscode/model/OnboardingVisaAccessCodeModel.kt index c04c38dd80..15c3b08a41 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/accesscode/model/OnboardingVisaAccessCodeModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/accesscode/model/OnboardingVisaAccessCodeModel.kt @@ -13,6 +13,7 @@ import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.error.UniversalError import com.tangem.core.error.ext.universalError import com.tangem.core.ui.utils.showErrorDialog +import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.VisaCardActivationStatus import com.tangem.domain.visa.model.VisaCardId import com.tangem.domain.visa.model.VisaCustomerWalletDataToSignRequest @@ -23,6 +24,7 @@ import com.tangem.features.onboarding.v2.visa.impl.child.accesscode.ui.state.Onb import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.OnboardingVisaAnalyticsEvent import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.VisaAnalyticsEvent import com.tangem.features.onboarding.v2.visa.impl.common.ActivationReadyEvent +import com.tangem.features.onboarding.v2.visa.impl.common.unexpectedErrorAlertBS import com.tangem.sdk.api.TangemSdkManager import com.tangem.sdk.api.visa.VisaCardActivationTaskMode import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -206,7 +208,11 @@ internal class OnboardingVisaAccessCodeModel @Inject constructor( private fun onError(error: UniversalError) { loading(false) - uiMessageSender.showErrorDialog(error) + if (error is VisaApiError && error.isUnknown()) { + uiMessageSender.send(unexpectedErrorAlertBS) + } else { + uiMessageSender.showErrorDialog(error) + } analyticsEventsHandler.send(VisaAnalyticsEvent.ErrorOnboarding(error)) } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/approve/model/OnboardingVisaApproveModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/approve/model/OnboardingVisaApproveModel.kt index e6da4d698e..ba23fac765 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/approve/model/OnboardingVisaApproveModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/approve/model/OnboardingVisaApproveModel.kt @@ -12,6 +12,7 @@ import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.error.UniversalError import com.tangem.core.error.ext.universalError import com.tangem.core.ui.utils.showErrorDialog +import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.VisaCardId import com.tangem.domain.visa.model.VisaDataForApprove import com.tangem.domain.visa.repository.VisaActivationRepository @@ -19,6 +20,7 @@ import com.tangem.features.onboarding.v2.visa.impl.child.approve.OnboardingVisaA import com.tangem.features.onboarding.v2.visa.impl.child.approve.ui.state.OnboardingVisaApproveUM import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.OnboardingVisaAnalyticsEvent import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.VisaAnalyticsEvent +import com.tangem.features.onboarding.v2.visa.impl.common.unexpectedErrorAlertBS import com.tangem.sdk.api.TangemSdkManager import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableSharedFlow @@ -103,7 +105,11 @@ internal class OnboardingVisaApproveModel @Inject constructor( private fun onError(error: UniversalError) { loading(false) - uiMessageSender.showErrorDialog(error) + if (error is VisaApiError && error.isUnknown()) { + uiMessageSender.send(unexpectedErrorAlertBS) + } else { + uiMessageSender.showErrorDialog(error) + } analyticsEventHandler.send(VisaAnalyticsEvent.ErrorOnboarding(error)) } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/inprogress/model/OnboardingVisaInProgressModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/inprogress/model/OnboardingVisaInProgressModel.kt index fe81644d9d..fcb3d8d159 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/inprogress/model/OnboardingVisaInProgressModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/inprogress/model/OnboardingVisaInProgressModel.kt @@ -26,6 +26,7 @@ import com.tangem.features.onboarding.v2.visa.impl.child.inprogress.OnboardingVi import com.tangem.features.onboarding.v2.visa.impl.child.inprogress.OnboardingVisaInProgressComponent.Params import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.OnboardingVisaAnalyticsEvent import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.VisaAnalyticsEvent +import com.tangem.features.onboarding.v2.visa.impl.common.unexpectedErrorAlertBS import com.tangem.features.onboarding.v2.visa.impl.route.OnboardingVisaRoute import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.delay @@ -69,7 +70,12 @@ internal class OnboardingVisaInProgressModel @Inject constructor( while (true) { val result = visaActivationRepository.getActivationRemoteState() .getOrElse { - uiMessageSender.showErrorDialog(it) + if (it.isUnknown()) { + uiMessageSender.send(unexpectedErrorAlertBS) + } else { + uiMessageSender.showErrorDialog(it) + } + analyticsEventHandler.send(VisaAnalyticsEvent.ErrorOnboarding(it)) delay(timeMillis = 2000) runShortPolling() return@launch diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/pincode/model/OnboardingVisaPinCodeModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/pincode/model/OnboardingVisaPinCodeModel.kt index eed9850228..5ba1dd3aee 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/pincode/model/OnboardingVisaPinCodeModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/pincode/model/OnboardingVisaPinCodeModel.kt @@ -10,11 +10,13 @@ import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.utils.showErrorDialog import com.tangem.domain.visa.SetVisaPinCodeUseCase +import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.VisaCardId import com.tangem.features.onboarding.v2.impl.R import com.tangem.features.onboarding.v2.visa.impl.child.pincode.OnboardingVisaPinCodeComponent import com.tangem.features.onboarding.v2.visa.impl.child.pincode.ui.state.OnboardingVisaPinCodeUM import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.OnboardingVisaAnalyticsEvent +import com.tangem.features.onboarding.v2.visa.impl.common.unexpectedErrorAlertBS import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -92,9 +94,12 @@ internal class OnboardingVisaPinCodeModel @Inject constructor( pinCode = pinCode, visaCardId = visaCardId, activationOrderId = params.activationOrderInfo.orderId, - ).onLeft { - loading(false) - uiMessageSender.showErrorDialog(it) + ).onLeft { error -> + if (error is VisaApiError && error.isUnknown()) { + uiMessageSender.send(unexpectedErrorAlertBS) + } else { + uiMessageSender.showErrorDialog(error) + } return@launch } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/welcome/model/OnboardingVisaWelcomeModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/welcome/model/OnboardingVisaWelcomeModel.kt index fc349134d4..9e63e68fc3 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/welcome/model/OnboardingVisaWelcomeModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/child/welcome/model/OnboardingVisaWelcomeModel.kt @@ -11,6 +11,7 @@ import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.error.UniversalError import com.tangem.core.error.ext.universalError import com.tangem.core.ui.utils.showErrorDialog +import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.VisaCardId import com.tangem.domain.visa.model.VisaCustomerWalletDataToSignRequest import com.tangem.domain.visa.repository.VisaActivationRepository @@ -20,6 +21,7 @@ import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics import com.tangem.features.onboarding.v2.visa.impl.child.welcome.model.analytics.VisaAnalyticsEvent import com.tangem.features.onboarding.v2.visa.impl.child.welcome.ui.state.OnboardingVisaWelcomeUM import com.tangem.features.onboarding.v2.visa.impl.common.ActivationReadyEvent +import com.tangem.features.onboarding.v2.visa.impl.common.unexpectedErrorAlertBS import com.tangem.sdk.api.TangemSdkManager import com.tangem.sdk.api.visa.VisaCardActivationTaskMode import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -129,7 +131,11 @@ internal class OnboardingVisaWelcomeModel @Inject constructor( private fun onError(error: UniversalError) { loading(false) - uiMessageSender.showErrorDialog(error) + if (error is VisaApiError && error.isUnknown()) { + uiMessageSender.send(unexpectedErrorAlertBS) + } else { + uiMessageSender.showErrorDialog(error) + } analyticsEventsHandler.send(VisaAnalyticsEvent.ErrorOnboarding(error)) } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/common/Alerts.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/common/Alerts.kt new file mode 100644 index 0000000000..544d28b1fb --- /dev/null +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/visa/impl/common/Alerts.kt @@ -0,0 +1,22 @@ +package com.tangem.features.onboarding.v2.visa.impl.common + +import com.tangem.core.ui.R +import com.tangem.core.ui.components.bottomsheets.message.* +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.message.bottomSheetMessage + +val unexpectedErrorAlertBS + get() = bottomSheetMessage { + infoBlock { + icon(R.drawable.img_knight_shield_32) { + type = MessageBottomSheetUMV2.Icon.Type.Attention + backgroundType = MessageBottomSheetUMV2.Icon.BackgroundType.SameAsTint + } + title = resourceReference(R.string.unexpected_error_title) + body = resourceReference(R.string.unexpected_error_description) + } + secondaryButton { + text = resourceReference(R.string.common_got_it) + onClick { closeBs() } + } + } \ No newline at end of file