Updated on 2026-08-14

This commit is contained in:
Tangem 2025-11-10 18:00:43 +05:00
parent 1de582a28c
commit 6d049b8d70
19 changed files with 132 additions and 31 deletions

View file

@ -258,7 +258,7 @@
<string name="common_enable">Aktivieren</string>
<string name="common_enabled">Aktiviert</string>
<string name="common_error">Fehler</string>
<string name="common_estimated_fee">Netzwerkdienstgebühr</string>
<string name="common_estimated_fee">Geschätzte Gebühr</string>
<string name="common_exchange">Umtausch</string>
<string name="common_explore">Erkunden</string>
<string name="common_explore_transaction_history">Transaktionsverlauf einsehen</string>
@ -574,11 +574,14 @@
<string name="hw_backup_need_action">Gehe zum Backup</string>
<string name="hw_backup_need_description">Bitte sicher Deine Wallet, bevor Du einen Zugangscode erstellst.</string>
<string name="hw_backup_need_title">Zuerst die Sicherung abschließen</string>
<string name="hw_backup_no_backup">Unvollständig</string>
<string name="hw_backup_section_other_title">Andere Methoden</string>
<string name="hw_backup_seed_description">Physische Geräte, die Deine privaten Schlüssel sicher offline speichern.</string>
<string name="hw_backup_seed_title">Wiederherstellungs-Phrase</string>
<string name="hw_backup_to_upgrade_description">Um Deine Wallet auf Hardware umzustellen, erstelle vorher ein Backup.</string>
<string name="hw_create_keys_description">Deine privaten Schlüssel sind sicher verschlüsselt und auf Deinem Telefon gespeichert.</string>
<string name="hw_create_keys_title">Schlüssel werden in der App gespeichert</string>
<string name="hw_create_seed_description">Erstelle oder stelle Deine Wallet mithilfe einer Wiederherstellungsphrase wieder her Deinem integrierten Backup.</string>
<string name="hw_create_seed_title">Sicherung der Seed-Phrase</string>
<string name="hw_create_title">Mobile Wallet erstellen</string>
<string name="hw_import_existing_wallet">Vorhandene Wallet importieren</string>
@ -966,6 +969,7 @@
</plurals>
<string name="onramp_timing_minutes">%s min</string>
<string name="onramp_title_available_from">Erhältlich ab</string>
<string name="onramp_title_available_up_to">Verfügbar bis zu</string>
<string name="onramp_title_you_get">Du erhältst</string>
<string name="onramp_tos_external_providers">Der Service wird von einem externen Anbieter bereitgestellt. \n Tangem übernimmt keine Verantwortung.</string>
<string name="onramp_transaction_status_footer_text">Du kannst diesen Bildschirm schließen und den Transaktionsstatus auf dem Bildschirm mit den Token-Details überprüfen.</string>
@ -1188,8 +1192,10 @@
<string name="staking_details_account_fee_info">Ein Staking-Konto ist ein spezielles Konto, auf dem eingesetzte SOL-Token gespeichert werden. Es wird erstellt, indem Sie Ihre Token an einen Validator delegieren, um an der Transaktionsvalidierung teilzunehmen und Belohnungen zu erhalten. Für die Einrichtung des Staking-Kontos wird eine geringe Gebühr erhoben, die nach Abschluss des Stakings zurückerstattet wird.</string>
<string name="staking_details_annual_percentage_rate">Jährliche prozentuale Rendite</string>
<string name="staking_details_annual_percentage_rate_info">Die jährliche prozentuale Rendite, die du durch die Teilnahme am Staking erzielen kannst.</string>
<string name="staking_details_annual_percentage_yield">Jährlicher prozentualer Ertrag</string>
<string name="staking_details_annual_percentage_yield_info">APY zeigt den jährlichen prozentualen Ertrag des Validators basierend auf seiner Leistung</string>
<string name="staking_details_apr">Effektiver Jahreszins</string>
<string name="staking_details_apy">APY</string>
<string name="staking_details_auto_claiming_rewards_daily_text">Belohnungen sammeln sich täglich automatisch in deinem Staking-Konto an.</string>
<string name="staking_details_available">Verfügbar</string>
<string name="staking_details_average_reward_rate">Durchschnittliche Belohnungsquote</string>
@ -1365,6 +1371,8 @@
<string name="tangem_pay_status_pending">Ausstehend</string>
<string name="tangem_pay_transaction_declined_notification_text">Die Bank hat diese Transaktionsanfrage abgelehnt.</string>
<string name="tangem_pay_transaction_fee_notification_text">Diese Gebühr dient zur Deckung der Kosten für die Abwicklung Deiner Überweisung.</string>
<string name="tangem_pay_unfreeze_card_alert_body">Nutze Dein Geld weiterhin. Du kannst es jederzeit einfrieren.</string>
<string name="tangem_pay_unfreeze_card_alert_title">Karte entsperren?</string>
<string name="tangem_pay_withdrawal">Abhebung</string>
<string name="tangempay_card_details_add_funds">Guthaben hinzufügen</string>
<string name="tangempay_card_details_add_funds_subtitle">Aufladeoptionen</string>
@ -1389,6 +1397,7 @@
<string name="tangempay_card_details_reveal_text">Aufdecken</string>
<string name="tangempay_card_details_swap_description">Tausche beliebige Vermögenswerte in Deinem Portfolio gegen eine Karte.</string>
<string name="tangempay_card_details_title">Kartendetails</string>
<string name="tangempay_card_details_unfreeze_card">Karte entsperren</string>
<string name="tangempay_issue_card_notification_title">Konto erstellen und Karte ausstellen</string>
<string name="tangempay_kyc_card_ready_notification_title">Tangem Pay</string>
<string name="tangempay_kyc_in_progress_notification_button">Status anzeigen</string>
@ -1491,20 +1500,37 @@
<string name="user_wallet_list_rename_popup_title">Wallet umbenennen</string>
<string name="user_wallet_list_unlock_all">Alle freischalten</string>
<string name="user_wallet_list_unlock_all_with">Alle mit %s freischalten</string>
<string name="visa_balance_limits_details_aml_verified">AML-geprüft</string>
<string name="visa_balance_limits_details_available">Verfügbar</string>
<string name="visa_balance_limits_details_blocked">Gesperrt</string>
<string name="visa_balance_limits_details_debt">Schulden</string>
<string name="visa_balance_limits_details_limits">Grenzen</string>
<string name="visa_balance_limits_details_no_otp_limit">Andere (kein OTP)</string>
<string name="visa_balance_limits_details_single_transaction">Einzeltransaktion</string>
<string name="visa_balance_limits_details_total">Gesamt</string>
<plurals name="visa_limits_available_for_days_title">
<item quantity="one">Verfügbar für %d Tag</item>
<item quantity="other">Verfügbar für %d Tage</item>
</plurals>
<string name="visa_main_available_balance_alert_message">Das verfügbare Guthaben ist das tatsächlich verfügbare Guthaben unter Berücksichtigung ausstehender Transaktionen, gesperrter Beträge und Sollsaldo, um Überziehungskredite zu vermeiden.</string>
<string name="visa_main_available_till_date">Verfügbar bis %1$s</string>
<string name="visa_main_balances_and_limits">Guthaben und Limits</string>
<string name="visa_main_button_alert_missing_payment_account_info_message">Fehlende Zahlungskontoinformationen. Bitte kontaktiere den Support.</string>
<string name="visa_main_button_alert_missing_token_info">Informationen zum Token konnten nicht geladen werden.</string>
<string name="visa_main_button_alert_still_loading">Die Informationen werden noch geladen, bitte warten.</string>
<string name="visa_main_limits_alert_description_message">Limits sind erforderlich, um Kosten zu kontrollieren, die Sicherheit zu verbessern und Risiken zu managen. Du kannst %1$s ausgeben, während des Zeitraums für Kartenzahlungen in Geschäften und %2$s für andere Transaktionen, z.B. Abos oder Schulden.</string>
<string name="visa_onboarding_access_code_description">Der Zugangscode dient zur Verwaltung Deines Zahlungskontos und zum Schutz vor unbefugtem Zugriff.</string>
<string name="visa_onboarding_access_code_navigation_title">Zugangscode</string>
<string name="visa_onboarding_account_activation_navigation_title">Aktivierung des Kontos</string>
<string name="visa_onboarding_approve_wallet_selector_notification_message">Bitte wähle die Wallet aus, mit der Du den Registrierungsprozess gestartet hast, um die Transaktion zur Erstellung Deines Kontos auf der Blockchain zu signieren</string>
<string name="visa_onboarding_cancel_activation">Aktivierung abbrechen</string>
<string name="visa_onboarding_close_alert_message">Möchtest Du den Vorgang wirklich beenden? Du kannst später dort fortfahren, wo Du aufgehört hast.</string>
<string name="visa_onboarding_in_progress_description">Das wird nicht lange dauern. Wir richten gerade Dein Konto ein.</string>
<string name="visa_onboarding_in_progress_issuer_description">Das wird nicht lange dauern. Wir schließen die Aktivierung ab.</string>
<string name="visa_onboarding_in_progress_title">Alles wird vorbereitet!</string>
<string name="visa_onboarding_other_wallet">Andere Wallet</string>
<string name="visa_onboarding_pin_code_description">Richte einen 4-stelligen Code ein. \n Dieser wird für Zahlungen verwendet.</string>
<string name="visa_onboarding_pin_code_navigation_title">PIN-Code</string>
<string name="visa_onboarding_pin_code_title">PIN-Code erstellen</string>
<string name="visa_onboarding_pin_not_accepted">PIN wurde nicht akzeptiert. Versuche es erneut oder verwende einen anderen Code.</string>
<string name="visa_onboarding_pin_validation_error_message">Ungültige PIN: Sequenzen oder Wiederholungen vermeiden</string>
@ -1513,11 +1539,31 @@
<string name="visa_onboarding_tangem_approve_title">Tangem Wallet vorbereiten</string>
<string name="visa_onboarding_wallet_connect_description">Du kannst Deine Verbindung \n auf der Website des Drittanbieters \n herstellen und zurück zur Tangem-App gelangen</string>
<string name="visa_onboarding_wallet_connect_title">Zur Website gehen</string>
<string name="visa_onboarding_wallet_connection_navigation_title">Wallet-Verbindung</string>
<string name="visa_onboarding_wallet_list_header">Wallet wählen</string>
<string name="visa_onboarding_welcome_back_button_title">Aktivierung fortsetzen</string>
<string name="visa_onboarding_welcome_back_description">Fahren wir mit der Einrichtung Deines Kontos fort.</string>
<string name="visa_onboarding_welcome_back_title">Willkommen zurück!</string>
<string name="visa_onboarding_welcome_button_title">Aktivierung starten</string>
<string name="visa_onboarding_welcome_description">Folge den Schritten, um Dein Konto einzurichten.</string>
<string name="visa_onboarding_welcome_title">Willkommen!</string>
<string name="visa_transaction_details_blockchain_amount">Blockchain Betrag</string>
<string name="visa_transaction_details_currency_code">Währungscode</string>
<string name="visa_transaction_details_date">Datum</string>
<string name="visa_transaction_details_error_code">Fehlercode</string>
<string name="visa_transaction_details_header">Transaktionsdetails</string>
<string name="visa_transaction_details_merchant_category_code">Händlerkategoriecode</string>
<string name="visa_transaction_details_merchant_city">Handelsstadt</string>
<string name="visa_transaction_details_merchant_country_code">Händler-Ländercode</string>
<string name="visa_transaction_details_merchant_name">Händlername</string>
<string name="visa_transaction_details_request_id">ID anfordern</string>
<string name="visa_transaction_details_status">Status</string>
<string name="visa_transaction_details_title">Transaktion</string>
<string name="visa_transaction_details_transaction_amount">Transaktionsbetrag</string>
<string name="visa_transaction_details_transaction_hash">Transaktions-Hash</string>
<string name="visa_transaction_details_transaction_request">Transaktionsanfrage</string>
<string name="visa_transaction_details_transaction_status">Transaktionsstatus</string>
<string name="visa_transaction_details_type">Typ</string>
<string name="visa_tx_dispute_button">Diese Transaktion anfechten</string>
<string name="visa_unlock_notification_button">Freischalten</string>
<string name="visa_unlock_notification_subtitle">Scanne Deine Karte, um den Zugriff freizuschalten</string>

View file

@ -182,6 +182,7 @@
<string name="common_enable">Activar</string>
<string name="common_enabled">Activado</string>
<string name="common_error">Error</string>
<string name="common_estimated_fee">Comisión de red por recarga</string>
<string name="common_exchange">Intercambiar</string>
<string name="common_explore">Explore</string>
<string name="common_explore_transaction_history">Explore historial de transacciones</string>

View file

@ -160,6 +160,7 @@
<string name="common_enable">Activer</string>
<string name="common_enabled">Activé</string>
<string name="common_error">Erreur</string>
<string name="common_estimated_fee">Frais estimés</string>
<string name="common_exchange">Echanger</string>
<string name="common_explore">Explorez</string>
<string name="common_explore_transaction_history">Explorez l\'historique des transactions</string>
@ -1134,6 +1135,7 @@
<string name="token_button_unavailability_reason_pending_transaction_send">L\'envoi de fonds sera disponible une fois la ou les transactions en attente dans le réseau %s terminées.</string>
<string name="token_button_unavailability_reason_sell_unavailable">L\'achat de %s n\'est pas pris en charge par les fournisseurs actuels mais nous travaillons à ajouter plus d\'options.</string>
<string name="token_button_unavailability_reason_staking_unavailable">Le staking de %s n\'est pas pris en charge par les fournisseurs actuels, mais nous travaillons à ajouter plus d\'options.</string>
<string name="token_button_unavailability_reason_yield_supply_approval">Lautorisation a été révoquée. Vos fonds restent en mode rendement. Pour effectuer des actions, accédez au mode rendement et accordez à nouveau lautorisation.</string>
<string name="token_details_generate_xpub">Générer XPUB</string>
<string name="token_details_hide_alert_hide">Masquer</string>
<string name="token_details_hide_alert_message">Vous êtes sur le point de masquer ce jeton de l\'écran principal. Vous pouvez le rajouter à tout moment via la page de gestion des jetons.</string>

View file

@ -253,7 +253,7 @@
<string name="common_enable">有効にする</string>
<string name="common_enabled">有効</string>
<string name="common_error">エラー</string>
<string name="common_estimated_fee">ネットワークサービス手数料</string>
<string name="common_estimated_fee">ネットワーク手数料</string>
<string name="common_exchange">スワップ</string>
<string name="common_explore">移動する</string>
<string name="common_explore_transaction_history">取引履歴を調べる</string>
@ -269,7 +269,7 @@
<string name="common_free">無料</string>
<string name="common_from">送信元</string>
<string name="common_generate_addresses">アドレスを同期する</string>
<string name="common_get_started">はじめる</string>
<string name="common_get_started">もっと詳しく</string>
<string name="common_get_token">トークンを取得</string>
<string name="common_go_to_provider">プロバイダーへ移動</string>
<string name="common_go_to_token">トークンへ移動</string>
@ -565,10 +565,12 @@
<string name="hw_backup_hardware_upgrade_title">現在のウォレットをアップグレードする</string>
<string name="hw_backup_need_action">バックアップへ移動</string>
<string name="hw_backup_need_description">アクセスコードを作成する前にウォレットをバックアップしてください。</string>
<string name="hw_backup_need_finish_first">まずバックアップを完了する</string>
<string name="hw_backup_need_title">まずバックアップを完了する</string>
<string name="hw_backup_section_other_title">その他の方法</string>
<string name="hw_backup_seed_description">秘密鍵をオフラインで安全に保存する物理デバイス。</string>
<string name="hw_backup_seed_title">リカバリーフレーズ</string>
<string name="hw_backup_to_secure_description">アクセスコードを使用してウォレットを保護するには、まずバックアップを完了してください。</string>
<string name="hw_backup_to_upgrade_description">ウォレットをハードウェアにアップグレードするには、まずバックアップしてください。</string>
<string name="hw_create_keys_title">鍵はアプリに保存されます</string>
<string name="hw_create_seed_title">シードフレーズのバックアップ</string>
@ -949,6 +951,7 @@
</plurals>
<string name="onramp_timing_minutes">%s分</string>
<string name="onramp_title_available_from">利用可能:</string>
<string name="onramp_title_available_up_to">利用可能金額</string>
<string name="onramp_title_you_get">以下が手に入ります。</string>
<string name="onramp_tos_external_providers">サービスは外部プロバイダーによって提供されます。 \nTangemは責任を負いません。</string>
<string name="onramp_transaction_status_footer_text">この画面を閉じて、トークンの詳細画面で取引状況を確認できます。</string>
@ -1158,11 +1161,12 @@
<string name="settings_wallet_name_title">名前</string>
<string name="stake_token_description">トークンを活用しよう</string>
<string name="staking_account_initialization_footer">ネットワーク手数料とは、ブロックチェーン上で取引を処理し、承認するために支払う少額の料金です。</string>
<string name="staking_account_initialization_message">ステーキングを始めるには、1 TONの自己取引によってTONアカウントを有効化する必要があります。資金はウォレット内にそのまま残ります。これは、ステーキング有効化のためのステップにすぎません。</string>
<string name="staking_account_initialization_message">ステーキングを始めるには、1 TONを取引してTONアカウントを有効化する必要があります。資金はウォレット内にそのまま残ります。これは、ステーキング有効化のためのステップにすぎません。</string>
<string name="staking_account_initialization_title">アカウントの有効化</string>
<string name="staking_amount_requirement_error">ステーキング金額は %s 以上である必要があります</string>
<string name="staking_amount_tron_integer_error">ネットワークルールにより、ステーキング金額は%1$s TRX に切り上げられます。</string>
<string name="staking_amount_tron_integer_error_unstaking">ネットワークルールにより、ステーキング解除の量は%1$s TRX に切り上げられます。</string>
<string name="staking_apr_earn_badge">APR %1$s%</string>
<string name="staking_claim_unstaked">ステーキング解除分を請求する</string>
<string name="staking_details_account_fee">ステーキングアカウント手数料</string>
<string name="staking_details_account_fee_info">ステーキングアカウントとは、ステーキングされたSOLが保管される特別なアカウントです。トークンをバリデーターに委任し、取引の検証に参加して報酬を受け取る際に作成されます。ステーキングアカウントの作成には少額の手数料がかかりますが、ステーキング完了後に返金されます。</string>
@ -1332,6 +1336,7 @@
<string name="swapping_to_title">受け取る</string>
<string name="swapping_token_list_title">トークンを選択</string>
<string name="swapping_token_not_available">利用不可</string>
<string name="tangem_pay_card_frozen">カードが凍結されています</string>
<string name="tangem_pay_deposit">入金</string>
<string name="tangem_pay_dispute">異議申し立て</string>
<string name="tangem_pay_explore_transaction">取引を表示</string>
@ -1339,13 +1344,19 @@
<string name="tangem_pay_fee_title">手数料</string>
<string name="tangem_pay_freeze_card_alert_body">カードを紛失したり盗まれたりしても、資金を安全に保てます。一時停止はいつでも解除できます。</string>
<string name="tangem_pay_freeze_card_alert_title">カードを一時停止しますか?</string>
<string name="tangem_pay_freeze_card_failed">カードを凍結できませんでした。しばらくしてからもう一度お試しください。</string>
<string name="tangem_pay_freeze_card_freeze">一時停止</string>
<string name="tangem_pay_freeze_card_success">カードが凍結されています</string>
<string name="tangem_pay_get_help">サポートを受ける</string>
<string name="tangem_pay_status_completed">完了</string>
<string name="tangem_pay_status_declined">拒否</string>
<string name="tangem_pay_status_pending">保留中</string>
<string name="tangem_pay_transaction_declined_notification_text">銀行がこの取引リクエストを拒否しました。</string>
<string name="tangem_pay_transaction_fee_notification_text">この手数料は、送金処理にかかるコストをカバーするためのものです。</string>
<string name="tangem_pay_unfreeze_card_alert_body">資金は引き続き使用できます。いつでも一時停止できます。</string>
<string name="tangem_pay_unfreeze_card_alert_title">カードの一時停止を解除しますか?</string>
<string name="tangem_pay_unfreeze_card_failed">カードの凍結解除に失敗しました。しばらくしてからもう一度お試しください。</string>
<string name="tangem_pay_unfreeze_card_success">カードの凍結が解除されました</string>
<string name="tangem_pay_withdrawal">出金</string>
<string name="tangempay_card_details_add_funds">資金を追加</string>
<string name="tangempay_card_details_add_funds_subtitle">入金オプション</string>
@ -1370,6 +1381,7 @@
<string name="tangempay_card_details_reveal_text">表示</string>
<string name="tangempay_card_details_swap_description">ポートフォリオ内のあらゆる資産をカードと交換</string>
<string name="tangempay_card_details_title">カードの詳細</string>
<string name="tangempay_card_details_unfreeze_card">カードの一時停止を解除</string>
<string name="tangempay_issue_card_notification_title">アカウントを作成してカードを発行</string>
<string name="tangempay_kyc_card_ready_notification_title">Tangem Pay</string>
<string name="tangempay_kyc_in_progress_notification_button">ステータスを表示</string>
@ -1825,7 +1837,7 @@
<string name="yield_module_fee_policy_sheet_max_fee_title">最大手数料</string>
<string name="yield_module_fee_policy_sheet_min_amount_note">最小金額は、ネットワーク手数料がチャージ額の4を超えないように現在の手数料に基づいて計算されます。その結果、最小金額は%1$s%2$sとなります。</string>
<string name="yield_module_fee_policy_sheet_min_amount_title">最低入金額</string>
<string name="yield_module_fee_policy_sheet_title">手数料ポリシー</string>
<string name="yield_module_fee_policy_sheet_title">入金手数料ポリシー</string>
<string name="yield_module_fee_policy_tangem_service_fee_title">Tangemはまた、得られた利回りに対して15%のサービス手数料を差し引きます。</string>
<string name="yield_module_high_fee_error">ネットワーク手数料が下がるか、残高が最低必要額に達すると、資金は自動的にAaveに供給されます。</string>
<string name="yield_module_historical_returns">過去のリターン</string>
@ -1852,11 +1864,11 @@
<string name="yield_module_receive_sheet_description">入金すると、資金は自動的にAaveに送金され、利息が付き始めます。%sが取引手数料として差し引かれます。</string>
<string name="yield_module_start_earning">資産を供給する</string>
<string name="yield_module_start_earning_sheet_description">%sはAaveに供給されますが、管理可能な状態のままになります。</string>
<string name="yield_module_start_earning_sheet_fee_policy">手数料ポリシーを見る</string>
<string name="yield_module_start_earning_sheet_fee_policy">入金手数料ポリシーを見る</string>
<string name="yield_module_start_earning_sheet_next_deposits">次回の入金は自動的にAaveに供給されます。</string>
<string name="yield_module_status_active">アクティブ</string>
<string name="yield_module_status_paused">停止中</string>
<string name="yield_module_stop_earning">利回りモードを無効にする</string>
<string name="yield_module_stop_earning">利回りモードを解除中</string>
<string name="yield_module_stop_earning_sheet_description">これをオフにすると、Aaveから資産が引き出され、ウォレット内の%sに変換され、利回りの発生が停止します。</string>
<string name="yield_module_stop_earning_sheet_fee_note">出金金額からネットワーク手数料が差し引かれます。</string>
<string name="yield_module_stop_earning_sheet_title">利回りモードを無効にする</string>

View file

@ -1616,7 +1616,7 @@
<string name="yield_module_fee_policy_sheet_max_fee_title">Максимальная комиссия</string>
<string name="yield_module_fee_policy_sheet_min_amount_note">Минимальная сумма рассчитывается исходя из текущей комиссии сети, чтобы она не превышала 4%% от суммы пополнения, что составляет минимум %1$s (%2$s).</string>
<string name="yield_module_fee_policy_sheet_min_amount_title">Минимальный депозит</string>
<string name="yield_module_fee_policy_sheet_title">Политика комиссий</string>
<string name="yield_module_fee_policy_sheet_title">Политика комиссий за пополнение</string>
<string name="yield_module_fee_policy_tangem_service_fee_title">Tangem взимает комиссию за обслуживание в размере 15% от полученного дохода.</string>
<string name="yield_module_high_fee_error">Ваши средства будут автоматически переведены в Aave, как только комиссия сети снизится или баланс достигнет минимально необходимой суммы.</string>
<string name="yield_module_historical_returns">Историческая доходность</string>

View file

@ -160,6 +160,7 @@
<string name="common_enable">Увімкнути</string>
<string name="common_enabled">Увімкнено</string>
<string name="common_error">Помилка</string>
<string name="common_estimated_fee">Комісія мережі за поповнення</string>
<string name="common_exchange">Обміняти</string>
<string name="common_explore">Оглядач</string>
<string name="common_explore_transaction_history">Переглянути історію транзакцій</string>
@ -1139,6 +1140,7 @@
<string name="token_button_unavailability_reason_pending_transaction_send">Надсилання коштів стане доступним після завершення транзакції(-ій) в мережі %s</string>
<string name="token_button_unavailability_reason_sell_unavailable">Наразі продаж %s недоступний. Слідкуйте за нашими оновленнями.</string>
<string name="token_button_unavailability_reason_staking_unavailable">Стейкінг %s зараз недоступний. Будь ласка, слідкуйте за нашими оновленнями.</string>
<string name="token_button_unavailability_reason_yield_supply_approval">Дозвіл скасовано. Ваші кошти залишаються в режимі прибутковості. Щоб виконати дії, перейдіть у режим прибутковості та надайте дозвіл знову.</string>
<string name="token_details_generate_xpub">Згенерувати XPUB</string>
<string name="token_details_hide_alert_hide">Приховати</string>
<string name="token_details_hide_alert_message">Ви збираєтеся приховати цей токен з головного екрану. Ви можете додати його назад будь-коли на сторінці керування токенами.</string>

View file

@ -378,6 +378,7 @@
<string name="currency_subtitle_expanded">Available networks</string>
<string name="custom_token_another_account_dialog_description">Derivation of your token matches the derivation of %1$s. Your token will be added to this account.</string>
<string name="custom_token_another_account_dialog_title">Derivation belongs to another account.</string>
<string name="custom_token_another_account_snackbar_text">Token added to %1$s account</string>
<string name="custom_token_contract_address_input_title">Contract address</string>
<string name="custom_token_creation_error_invalid_contract_address">Contract address is invalid</string>
<string name="custom_token_creation_error_network_not_selected">Please select the network</string>

View file

@ -2,6 +2,7 @@ package com.tangem.features.managetokens.component
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.domain.models.account.Account
interface AddCustomTokenComponent : ComposableBottomSheetComponent {
@ -9,7 +10,7 @@ interface AddCustomTokenComponent : ComposableBottomSheetComponent {
val mode: AddCustomTokenMode,
val source: ManageTokensSource,
val onDismiss: () -> Unit,
val onCurrencyAdded: () -> Unit,
val onCurrencyAdded: (account: Account?) -> Unit,
)
interface Factory : ComponentFactory<Params, AddCustomTokenComponent>

View file

@ -3,11 +3,13 @@ package com.tangem.features.managetokens.component
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableDialogComponent
import com.tangem.features.managetokens.entity.customtoken.SelectedDerivationPath
import com.tangem.features.managetokens.entity.customtoken.SelectedNetwork
internal interface CustomTokenDerivationInputComponent : ComposableDialogComponent {
data class Params(
val mode: AddCustomTokenMode,
val selectedNetwork: SelectedNetwork,
val onConfirm: (SelectedDerivationPath) -> Unit,
val onDismiss: () -> Unit,
)

View file

@ -2,6 +2,7 @@ package com.tangem.features.managetokens.component
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.domain.models.account.Account
import com.tangem.features.managetokens.entity.customtoken.SelectedDerivationPath
import com.tangem.features.managetokens.entity.customtoken.SelectedNetwork
@ -19,7 +20,7 @@ internal interface CustomTokenSelectorComponent : ComposableContentComponent {
val mode: AddCustomTokenMode,
val selectedNetwork: SelectedNetwork,
val selectedDerivationPath: SelectedDerivationPath?,
val onDerivationPathSelected: (SelectedDerivationPath) -> Unit,
val onDerivationPathSelected: (SelectedDerivationPath, Account?) -> Unit,
) : Params()
}

View file

@ -14,6 +14,7 @@ import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.context.childByContext
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.network.Network
import com.tangem.features.managetokens.analytics.CustomTokenAnalyticsEvent
import com.tangem.features.managetokens.component.AddCustomTokenComponent
@ -42,6 +43,8 @@ internal class DefaultAddCustomTokenComponent @AssistedInject constructor(
step = AddCustomTokenConfig.Step.INITIAL_NETWORK_SELECTOR,
)
private var addedToAccount: Account? = null
private val navigation = StackNavigation<AddCustomTokenConfig>()
private val contentStack = childStack(
key = "add_custom_token_content_stack",
@ -57,6 +60,7 @@ internal class DefaultAddCustomTokenComponent @AssistedInject constructor(
}
override fun dismiss() {
addedToAccount = null
params.onDismiss()
}
@ -163,12 +167,13 @@ internal class DefaultAddCustomTokenComponent @AssistedInject constructor(
showForm(network = network)
}
private fun changeDerivationPath(derivationPath: SelectedDerivationPath) {
private fun changeDerivationPath(derivationPath: SelectedDerivationPath, account: Account?) {
val event = CustomTokenAnalyticsEvent.DerivationSelected(
derivationName = derivationPath.name,
source = params.source,
)
analyticsEventHandler.send(event)
addedToAccount = account
showForm(derivationPath = derivationPath)
}
@ -228,8 +233,8 @@ internal class DefaultAddCustomTokenComponent @AssistedInject constructor(
}
private fun dismissAndNotify() {
params.onCurrencyAdded(addedToAccount)
dismiss()
params.onCurrencyAdded()
}
@AssistedFactory

View file

@ -108,7 +108,7 @@ internal class DefaultCustomTokenDerivationInputComponent @AssistedInject constr
val value = state.value.value.text
val model = SelectedDerivationPath(
id = null,
id = params.selectedNetwork.id,
value = Network.DerivationPath.Custom(value),
name = value,
isDefault = false,

View file

@ -42,6 +42,7 @@ internal class DefaultCustomTokenSelectorComponent @AssistedInject constructor(
context = childByContext(context),
params = CustomTokenDerivationInputComponent.Params(
mode = config.mode,
selectedNetwork = config.network,
onConfirm = model::selectCustomDerivationPath,
onDismiss = model.dialogNavigation::dismiss,
),

View file

@ -12,10 +12,16 @@ import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.context.childByContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.account.AccountName
import com.tangem.features.managetokens.component.AddCustomTokenComponent
import com.tangem.features.managetokens.component.AddCustomTokenMode
import com.tangem.features.managetokens.component.ManageTokensComponent
import com.tangem.features.managetokens.entity.managetokens.ManageTokensBottomSheetConfig
import com.tangem.features.managetokens.impl.R
import com.tangem.features.managetokens.model.ManageTokensModel
import com.tangem.features.managetokens.ui.ManageTokensScreen
import dagger.assisted.Assisted
@ -64,7 +70,20 @@ internal class DefaultManageTokensComponent @AssistedInject constructor(
mode = mode,
source = params.source,
onDismiss = model.bottomSheetNavigation::dismiss,
onCurrencyAdded = model::reloadList,
onCurrencyAdded = { account ->
val accountName = account?.accountName as? AccountName.Custom
if (accountName != null && (account as? Account.CryptoPortfolio)?.isMainAccount == false) {
messageSender.send(
SnackbarMessage(
message = resourceReference(
R.string.custom_token_another_account_snackbar_text,
wrappedList(accountName.value),
),
),
)
}
model.reloadList()
},
),
)
}

View file

@ -63,7 +63,7 @@ internal class PreviewAddCustomTokenComponent(
mode = config.mode,
selectedNetwork = config.selectedNetwork!!,
selectedDerivationPath = config.selectedDerivationPath!!,
onDerivationPathSelected = {},
onDerivationPathSelected = { _, _ -> },
),
).Content(modifier)
}

View file

@ -43,7 +43,7 @@ internal class PreviewCustomTokenSelectorComponent(
value = d.value.value.orEmpty(),
networkName = stringReference(d.name),
isSelected = d.value == params.selectedDerivationPath?.value,
onSelectedStateChange = { params.onDerivationPathSelected(d) },
onSelectedStateChange = { params.onDerivationPathSelected(d, null) },
)
}
is Params.NetworkSelector -> {

View file

@ -9,5 +9,6 @@ internal sealed class CustomTokenSelectorDialogConfig {
@Serializable
data class CustomDerivationInput(
val mode: AddCustomTokenMode,
val network: SelectedNetwork,
) : CustomTokenSelectorDialogConfig()
}

View file

@ -18,6 +18,7 @@ import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier
import com.tangem.domain.managetokens.GetSupportedNetworksUseCase
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.account.AccountStatus
import com.tangem.domain.models.network.Network
import com.tangem.features.managetokens.component.AddCustomTokenMode
@ -126,7 +127,7 @@ internal class CustomTokenSelectorModel @Inject constructor(
isDefault = true,
)
selector.onDerivationPathSelected(model)
selector.onDerivationPathSelected(model, null)
},
)
}
@ -151,7 +152,7 @@ internal class CustomTokenSelectorModel @Inject constructor(
isDefault = false,
)
selector.onDerivationPathSelected(model)
selector.onDerivationPathSelected(model, null)
},
)
}
@ -171,7 +172,10 @@ internal class CustomTokenSelectorModel @Inject constructor(
private fun showCustomDerivationInput() {
val config = when (params) {
is NetworkSelector -> return
is DerivationPathSelector -> CustomTokenSelectorDialogConfig.CustomDerivationInput(params.mode)
is DerivationPathSelector -> CustomTokenSelectorDialogConfig.CustomDerivationInput(
params.mode,
params.selectedNetwork,
)
}
dialogNavigation.activate(config)
@ -183,14 +187,14 @@ internal class CustomTokenSelectorModel @Inject constructor(
is DerivationPathSelector -> if (accountsFeatureToggles.isFeatureEnabled) {
params.checkAccountDerivation(value)
} else {
params.onDerivationPathSelected(value)
params.onDerivationPathSelected(value, null)
}
}
}
private fun DerivationPathSelector.checkAccountDerivation(derivationPath: SelectedDerivationPath) =
modelScope.launch {
val accountName = derivationPath.id
val account = derivationPath.id
?.let { Blockchain.fromId(it.rawId.value) }?.let(::AccountNodeRecognizer)
?.let { recognizer -> derivationPath.value.value?.let { recognizer.recognize(it) } }
?.let { accountNode ->
@ -199,24 +203,27 @@ internal class CustomTokenSelectorModel @Inject constructor(
val accounts = singleAccountStatusListSupplier(mode.userWalletId)
.first().accountStatuses
val account = accounts.find {
val accountStatus = accounts.find {
when (it) {
is AccountStatus.CryptoPortfolio -> it.sameNodeAndNotMain()
}
}
val accountName = when (account) {
is AccountStatus.CryptoPortfolio -> account.account.accountName.toUM()
null -> null
}
accountName
accountStatus?.account
}
val accountName = when (account) {
is Account.CryptoPortfolio -> account.accountName
null -> null
}
if (accountName == null) {
onDerivationPathSelected(derivationPath)
onDerivationPathSelected(derivationPath, null)
} else {
showAccountNameExist(
accountName = accountName.value,
onClick = { onDerivationPathSelected(derivationPath) },
accountName = accountName.toUM().value,
onClick = { onDerivationPathSelected(derivationPath, account) },
)
}
}

View file

@ -288,7 +288,7 @@ private class CustomTokenNetworkSelectorComponentPreviewProvider :
name = "",
isDefault = false,
),
onDerivationPathSelected = {},
onDerivationPathSelected = { _, _ -> },
),
),
PreviewCustomTokenSelectorComponent(