From 8a041f2b438e628d7776203ec2010bc8fc2f33a0 Mon Sep 17 00:00:00 2001 From: jaaaaavier Date: Tue, 5 May 2026 16:03:40 +0200 Subject: [PATCH 1/2] feat:checkout flow text updates for new annual plans --- src/app/i18n/locales/de.json | 8 ++++++-- src/app/i18n/locales/en.json | 8 ++++++-- src/app/i18n/locales/es.json | 8 ++++++-- src/app/i18n/locales/fr.json | 8 ++++++-- src/app/i18n/locales/it.json | 8 ++++++-- src/app/i18n/locales/ru.json | 8 ++++++-- src/app/i18n/locales/tw.json | 8 ++++++-- src/app/i18n/locales/zh.json | 8 ++++++-- src/views/Checkout/components/CheckoutProductCard.tsx | 8 ++++++++ .../Account/Plans/components/ChangePlanDialog.tsx | 4 ++-- .../Sections/Account/Plans/components/PlanCard.tsx | 2 +- 11 files changed, 59 insertions(+), 19 deletions(-) diff --git a/src/app/i18n/locales/de.json b/src/app/i18n/locales/de.json index 3140f6412d..d2cfa36987 100644 --- a/src/app/i18n/locales/de.json +++ b/src/app/i18n/locales/de.json @@ -231,7 +231,7 @@ "lifetime": "lebenslang" }, "renewalTitle": { - "month": "monatlich", + "month": "jährlich", "year": "jährlich", "lifetime": "lebenslang" }, @@ -256,7 +256,8 @@ "inputText": "Gutscheincode" }, "apply": "Anwenden", - "taxes": "Steuern" + "taxes": "Steuern", + "annualBillingTemplate": "Jahresplan, monatlich abgerechnet mit {{price}}{{currency}}/Monat für 12 Monate" }, "confirmCryptoPayment": { "title": "Zahlung bestätigen", @@ -1990,6 +1991,7 @@ "title": "Essential (Basis)", "features": [ "1TB verschlüsselter Cloud-Speicher", + "30 Tage risikofrei testen", "Post-Quanten-Verschlüsselung", "Zero-Knowledge-Verschlüsselung", "Zwei-Faktor-Authentifizierung", @@ -2003,6 +2005,7 @@ "title": "Premium", "features": [ "3TB verschlüsselter Cloud-Speicher", + "30 Tage risikofrei testen", "Post-Quanten-Verschlüsselung", "Zero-Knowledge-Verschlüsselung", "Zwei-Faktor-Authentifizierung", @@ -2019,6 +2022,7 @@ "title": "Ultimate (Ultimativ)", "features": [ "5TB verschlüsselter Cloud-Speicher", + "30 Tage risikofrei testen", "Post-Quanten-Verschlüsselung", "Zero-Knowledge-Verschlüsselung", "Zwei-Faktor-Authentifizierung", diff --git a/src/app/i18n/locales/en.json b/src/app/i18n/locales/en.json index 3a9edafa48..2eaa483e58 100644 --- a/src/app/i18n/locales/en.json +++ b/src/app/i18n/locales/en.json @@ -276,7 +276,7 @@ "lifetime": "lifetime" }, "renewalTitle": { - "month": "monthly", + "month": "annual", "year": "annual", "lifetime": "lifetime" }, @@ -304,7 +304,8 @@ "inputText": "Coupon code" }, "apply": "Apply", - "taxes": "Taxes" + "taxes": "Taxes", + "annualBillingTemplate": "Annual plan, billed monthly at {{price}}{{currency}}/month for 12 months" }, "confirmCryptoPayment": { "title": "Confirm the payment", @@ -2074,6 +2075,7 @@ "title": "Essential", "features": [ "1TB of encrypted cloud storage", + "Try risk-free for 30 days", "Post-Quantum Encryption", "Zero-Knowledge Encryption", "Two-Factor Authentication", @@ -2087,6 +2089,7 @@ "title": "Premium", "features": [ "3TB of encrypted cloud storage", + "Try risk-free for 30 days", "Post-Quantum Encryption", "Zero-Knowledge Encryption", "Two-Factor Authentication", @@ -2103,6 +2106,7 @@ "title": "Ultimate", "features": [ "5TB of encrypted cloud storage", + "Try risk-free for 30 days", "Post-Quantum Encryption", "Zero-Knowledge Encryption", "Two-Factor Authentication", diff --git a/src/app/i18n/locales/es.json b/src/app/i18n/locales/es.json index 92c671e4ab..2d59b349d9 100644 --- a/src/app/i18n/locales/es.json +++ b/src/app/i18n/locales/es.json @@ -258,7 +258,7 @@ "lifetime": "lifetime" }, "renewalTitle": { - "month": "mensual", + "month": "anual", "year": "anual", "lifetime": "pago único" }, @@ -283,7 +283,8 @@ "inputText": "Código de cupón" }, "apply": "Aplicar", - "taxes": "Impuestos" + "taxes": "Impuestos", + "annualBillingTemplate": "Plan anual, facturado mensualmente a {{price}}{{currency}}/mes durante 12 meses" }, "confirmCryptoPayment": { "title": "Confirmar el pago", @@ -2050,6 +2051,7 @@ "title": "Esencial", "features": [ "1TB de almacenamiento en la nube cifrado", + "Pruébalo sin riesgo durante 30 días", "Criptografía postcuántica", "Cifrado de conocimiento cero", "Autenticación de dos factores", @@ -2063,6 +2065,7 @@ "title": "Premium", "features": [ "3TB de almacenamiento en la nube cifrado", + "Pruébalo sin riesgo durante 30 días", "Criptografía postcuántica", "Cifrado de conocimiento cero", "Autenticación de dos factores", @@ -2079,6 +2082,7 @@ "title": "Ultimate", "features": [ "5TB de almacenamiento en la nube cifrado", + "Pruébalo sin riesgo durante 30 días", "Criptografía postcuántica", "Cifrado de conocimiento cero", "Autenticación de dos factores", diff --git a/src/app/i18n/locales/fr.json b/src/app/i18n/locales/fr.json index 2d65ff89df..3075dc34fc 100644 --- a/src/app/i18n/locales/fr.json +++ b/src/app/i18n/locales/fr.json @@ -231,7 +231,7 @@ "lifetime": "à vie" }, "renewalTitle": { - "month": "mensuel", + "month": "annuel", "year": "annuel", "lifetime": "à vie" }, @@ -256,7 +256,8 @@ "inputText": "Code de coupon" }, "apply": "Appliquer", - "taxes": "Taxes" + "taxes": "Taxes", + "annualBillingTemplate": "Plan annuel, facturé mensuellement à {{price}}{{currency}}/mois pendant 12 mois" }, "confirmCryptoPayment": { "title": "Confirmer le paiement", @@ -1996,6 +1997,7 @@ "title": "Essential (Essentiel)", "features": [ "1To de stockage cloud chiffré", + "Essayez sans risque pendant 30 jours", "Chiffrement Post-Quantique", "Chiffrement Zéro-Connaissance", "Authentification à Deux Facteurs", @@ -2009,6 +2011,7 @@ "title": "Premium", "features": [ "3To de stockage cloud chiffré", + "Essayez sans risque pendant 30 jours", "Chiffrement Post-Quantique", "Chiffrement Zéro-Connaissance", "Authentification à Deux Facteurs", @@ -2025,6 +2028,7 @@ "title": "Ultimate (Ultime)", "features": [ "5To de stockage cloud chiffré", + "Essayez sans risque pendant 30 jours", "Chiffrement Post-Quantique", "Chiffrement Zéro-Connaissance", "Authentification à Deux Facteurs", diff --git a/src/app/i18n/locales/it.json b/src/app/i18n/locales/it.json index d254210eee..27b48bb1d0 100644 --- a/src/app/i18n/locales/it.json +++ b/src/app/i18n/locales/it.json @@ -248,7 +248,7 @@ "lifetime": "a vita" }, "renewalTitle": { - "month": "mensile", + "month": "annuale", "year": "annuale", "lifetime": "a vita" }, @@ -347,7 +347,8 @@ "inputText": "Codice coupon" }, "apply": "Applica", - "taxes": "Tasse" + "taxes": "Tasse", + "annualBillingTemplate": "Piano annuale, fatturato mensilmente a {{price}}{{currency}}/mese per 12 mesi" }, "confirmCryptoPayment": { "title": "Conferma il pagamento", @@ -2103,6 +2104,7 @@ "title": "Essential (Essenziale)", "features": [ "1TB di spazio di archiviazione cloud crittografato", + "Provalo senza rischi per 30 giorni", "Crittografia Post-Quantistica", "Crittografia Zero-Knowledge", "Autenticazione a Due Fattori", @@ -2116,6 +2118,7 @@ "title": "Premium", "features": [ "3TB di spazio di archiviazione cloud crittografato", + "Provalo senza rischi per 30 giorni", "Crittografia Post-Quantistica", "Crittografia Zero-Knowledge", "Autenticazione a Due Fattori", @@ -2132,6 +2135,7 @@ "title": "Ultimate (Definitivo)", "features": [ "5TB di spazio di archiviazione cloud crittografato", + "Provalo senza rischi per 30 giorni", "Crittografia Post-Quantistica", "Crittografia Zero-Knowledge", "Autenticazione a Due Fattori", diff --git a/src/app/i18n/locales/ru.json b/src/app/i18n/locales/ru.json index 4b0a98a060..768f22d055 100644 --- a/src/app/i18n/locales/ru.json +++ b/src/app/i18n/locales/ru.json @@ -231,7 +231,7 @@ "lifetime": "пожизненный" }, "renewalTitle": { - "month": "ежемесячный", + "month": "ежегодный", "year": "ежегодный", "lifetime": "пожизненный" }, @@ -256,7 +256,8 @@ "inputText": "Код купона" }, "apply": "Применить", - "taxes": "Налоги" + "taxes": "Налоги", + "annualBillingTemplate": "Годовой план, ежемесячная оплата {{price}}{{currency}}/мес. в течение 12 месяцев" }, "confirmCryptoPayment": { "title": "Подтвердить платеж", @@ -2011,6 +2012,7 @@ "title": "Essential (Базовый)", "features": [ "1 ТБ зашифрованного облачного хранилища", + "Попробуйте без риска в течение 30 дней", "Постквантовая криптография", "Шифрование с нулевым разглашением (Zero-Knowledge)", "Двухфакторная аутентификация", @@ -2024,6 +2026,7 @@ "title": "Premium (Премиум)", "features": [ "3 ТБ зашифрованного облачного хранилища", + "Попробуйте без риска в течение 30 дней", "Постквантовая криптография", "Шифрование с нулевым разглашением (Zero-Knowledge)", "Двухфакторная аутентификация", @@ -2040,6 +2043,7 @@ "title": "Ultimate (Максимальный)", "features": [ "5ТБ зашифрованного облачного хранилища", + "Попробуйте без риска в течение 30 дней", "Постквантовая криптография", "Шифрование с нулевым разглашением (Zero-Knowledge)", "Двухфакторная аутентификация", diff --git a/src/app/i18n/locales/tw.json b/src/app/i18n/locales/tw.json index fbf8dbf579..19c270ce7a 100644 --- a/src/app/i18n/locales/tw.json +++ b/src/app/i18n/locales/tw.json @@ -247,7 +247,7 @@ "lifetime": "終身" }, "renewalTitle": { - "month": "每月", + "month": "每年", "year": "每年", "lifetime": "終身" }, @@ -272,7 +272,8 @@ "inputText": "優惠券代碼" }, "apply": "應用", - "taxes": "稅金" + "taxes": "稅金", + "annualBillingTemplate": "年度計劃,每月 {{price}}{{currency}}/月,持續 12 個月" }, "confirmCryptoPayment": { "title": "確認付款", @@ -2000,6 +2001,7 @@ "title": "Essential (基本版)", "features": [ "1TB 加密雲端儲存空間", + "30 天無風險試用", "後量子密碼學", "零知識加密", "雙重身份驗證", @@ -2013,6 +2015,7 @@ "title": "Premium (進階版)", "features": [ "3TB 加密雲端儲存空間", + "30 天無風險試用", "後量子密碼學", "零知識加密", "雙重身份驗證", @@ -2030,6 +2033,7 @@ "title": "Ultimate (旗艦版)", "features": [ "5TB 加密雲端儲存空間", + "30 天無風險試用", "後量子密碼學", "零知識加密", "雙重身份驗證", diff --git a/src/app/i18n/locales/zh.json b/src/app/i18n/locales/zh.json index 95dd066768..5e36fd0f42 100644 --- a/src/app/i18n/locales/zh.json +++ b/src/app/i18n/locales/zh.json @@ -245,7 +245,7 @@ "lifetime": "终身" }, "renewalTitle": { - "month": "每月", + "month": "每年", "year": "每年", "lifetime": "终身" }, @@ -270,7 +270,8 @@ "inputText": "优惠券代码" }, "apply": "应用", - "taxes": "税费" + "taxes": "税费", + "annualBillingTemplate": "年度计划,每月 {{price}}{{currency}}/月,持续 12 个月" }, "confirmCryptoPayment": { "title": "确认付款", @@ -2038,6 +2039,7 @@ "title": "Essential (基础版)", "features": [ "1TB 加密云存储空间", + "30 天无风险试用", "后量子密码学", "零知识加密", "两步验证", @@ -2051,6 +2053,7 @@ "title": "Premium (高级版)", "features": [ "3TB 加密云存储空间", + "30 天无风险试用", "后量子密码学", "零知识加密", "两步验证", @@ -2067,6 +2070,7 @@ "title": "Ultimate (旗舰版)", "features": [ "5TB 加密云存储空间", + "30 天无风险试用", "后量子密码学", "零知识加密", "两步验证", diff --git a/src/views/Checkout/components/CheckoutProductCard.tsx b/src/views/Checkout/components/CheckoutProductCard.tsx index 74e006e264..3b09ab0c65 100644 --- a/src/views/Checkout/components/CheckoutProductCard.tsx +++ b/src/views/Checkout/components/CheckoutProductCard.tsx @@ -277,6 +277,14 @@ export const CheckoutProductCard = ({ {couponCodeData && priceData.interval !== 'lifetime' &&

{renewalPeriodLabel}

} {showHardcodedRenewal &&

{showHardcodedRenewal}

} + {priceData.interval === 'month' && ( +

+ {translate('checkout.productCard.annualBillingTemplate', { + price: normalPriceAmount, + currency: currencySymbol, + })} +

+ )} ); }; diff --git a/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx b/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx index 842f8a0360..2c4294e1d5 100644 --- a/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx +++ b/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx @@ -60,7 +60,7 @@ const ChangePlanDialog = ({ if (selectedPlanInterval === 'month') { amountMonthly = selectedPlanAmount; } else if (selectedPlanInterval === 'year') { - amountMonthly = selectedPlanAmount / 12; + amountMonthly = selectedPlanAmount; } if (subscription?.type === 'subscription') { @@ -68,7 +68,7 @@ const ChangePlanDialog = ({ if (subscription.interval === 'month') { currentAmountMonthly = subscription.amount; } else if (subscription.interval === 'year') { - currentAmountMonthly = subscription.amount / 12; + currentAmountMonthly = subscription.amount; } } diff --git a/src/views/NewSettings/components/Sections/Account/Plans/components/PlanCard.tsx b/src/views/NewSettings/components/Sections/Account/Plans/components/PlanCard.tsx index 766043ab33..cdec262094 100644 --- a/src/views/NewSettings/components/Sections/Account/Plans/components/PlanCard.tsx +++ b/src/views/NewSettings/components/Sections/Account/Plans/components/PlanCard.tsx @@ -48,7 +48,7 @@ const PlanCard = ({ isLoading, disableActionButton, }: PlanCardProps) => { - const userText = ' ' + t('preferences.account.plans.billedMonthly'); + const userText = ' ' + t('preferences.account.plans.billedAnnually'); return (
From 4910fcd689e3b81600317b850ae1ab3f72655fc3 Mon Sep 17 00:00:00 2001 From: jaaaaavier Date: Tue, 5 May 2026 16:23:19 +0200 Subject: [PATCH 2/2] Update ChangePlanDialog.tsx --- .../Account/Plans/components/ChangePlanDialog.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx b/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx index 2c4294e1d5..5724933154 100644 --- a/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx +++ b/src/views/NewSettings/components/Sections/Account/Plans/components/ChangePlanDialog.tsx @@ -57,17 +57,13 @@ const ChangePlanDialog = ({ let currentAmountMonthly: number | null = null; let subscriptionCurrencySymbol: string | null = null; - if (selectedPlanInterval === 'month') { - amountMonthly = selectedPlanAmount; - } else if (selectedPlanInterval === 'year') { + if (selectedPlanInterval === 'month' || selectedPlanInterval === 'year') { amountMonthly = selectedPlanAmount; } if (subscription?.type === 'subscription') { subscriptionCurrencySymbol = moneyService.getCurrencySymbol(subscription?.currency.toUpperCase()); - if (subscription.interval === 'month') { - currentAmountMonthly = subscription.amount; - } else if (subscription.interval === 'year') { + if (subscription.interval === 'month' || subscription.interval === 'year') { currentAmountMonthly = subscription.amount; } }