diff --git a/web/app/components/billing/pricing/plans/cloud-plan-item/__tests__/index.spec.tsx b/web/app/components/billing/pricing/plans/cloud-plan-item/__tests__/index.spec.tsx index 568a2656ba..65c710e37e 100644 --- a/web/app/components/billing/pricing/plans/cloud-plan-item/__tests__/index.spec.tsx +++ b/web/app/components/billing/pricing/plans/cloud-plan-item/__tests__/index.spec.tsx @@ -334,7 +334,7 @@ describe('CloudPlanItem', () => { expect(screen.queryByText('education.planNotSupportEducationDiscount')).not.toBeInTheDocument() }) - it('should show education unsupported warning below the button without changing button text or blocking checkout', async () => { + it('should show education unsupported warning and switch checkout to professional annual', async () => { mockUseProviderContext.mockReturnValue({ enableEducationPlan: true, isEducationAccount: true, @@ -355,18 +355,18 @@ describe('CloudPlanItem', () => { fireEvent.click(button) expect(screen.getByText('education.educationPricingConfirm.title'))!.toBeInTheDocument() - expect(screen.getByText(/^education\.educationPricingConfirm\.description/))!.toBeInTheDocument() - expect(screen.queryByRole('button', { name: 'common.operation.close' }))!.not.toBeInTheDocument() + expect(screen.getByText('education.educationPricingConfirm.description'))!.toBeInTheDocument() + expect(screen.getByRole('button', { name: 'common.operation.close' }))!.toBeInTheDocument() expect(screen.getByRole('button', { name: 'education.educationPricingConfirm.cancel' }))!.toBeInTheDocument() fireEvent.click(screen.getByRole('button', { name: 'education.educationPricingConfirm.continue' })) await waitFor(() => { - expect(mockFetchSubscriptionUrls).toHaveBeenCalledWith(Plan.professional, 'month') + expect(mockFetchSubscriptionUrls).toHaveBeenCalledWith(Plan.professional, 'year') expect(assignedHref).toBe('https://subscription.example') }) }) - it('should close the unsupported plan confirm without checkout when canceled', async () => { + it('should continue selected plan checkout when keeping current plan', async () => { mockUseProviderContext.mockReturnValue({ enableEducationPlan: true, isEducationAccount: true, @@ -384,6 +384,31 @@ describe('CloudPlanItem', () => { fireEvent.click(screen.getByRole('button', { name: 'billing.plansCommon.getStarted' })) fireEvent.click(screen.getByRole('button', { name: 'education.educationPricingConfirm.cancel' })) + await waitFor(() => { + expect(screen.queryByText('education.educationPricingConfirm.title'))!.not.toBeInTheDocument() + expect(mockFetchSubscriptionUrls).toHaveBeenCalledWith(Plan.team, 'year') + expect(assignedHref).toBe('https://subscription.example') + }) + }) + + it('should close the unsupported plan confirm without checkout when using the close button', async () => { + mockUseProviderContext.mockReturnValue({ + enableEducationPlan: true, + isEducationAccount: true, + }) + + render( + , + ) + + fireEvent.click(screen.getByRole('button', { name: 'billing.plansCommon.getStarted' })) + fireEvent.click(screen.getByRole('button', { name: 'common.operation.close' })) + await waitFor(() => { expect(screen.queryByText('education.educationPricingConfirm.title'))!.not.toBeInTheDocument() }) diff --git a/web/app/components/billing/pricing/plans/cloud-plan-item/index.tsx b/web/app/components/billing/pricing/plans/cloud-plan-item/index.tsx index e6546a469c..c390385569 100644 --- a/web/app/components/billing/pricing/plans/cloud-plan-item/index.tsx +++ b/web/app/components/billing/pricing/plans/cloud-plan-item/index.tsx @@ -1,15 +1,14 @@ 'use client' import type { FC } from 'react' import type { BasicPlan } from '../../../type' +import { Button } from '@langgenius/dify-ui/button' import { - AlertDialog, - AlertDialogActions, - AlertDialogCancelButton, - AlertDialogConfirmButton, - AlertDialogContent, - AlertDialogDescription, - AlertDialogTitle, -} from '@langgenius/dify-ui/alert-dialog' + Dialog, + DialogCloseButton, + DialogContent, + DialogDescription, + DialogTitle, +} from '@langgenius/dify-ui/dialog' import { toast } from '@langgenius/dify-ui/toast' import * as React from 'react' import { useMemo } from 'react' @@ -24,7 +23,7 @@ import { useEducationDiscount } from '../../../hooks/use-education-discount' import { Plan } from '../../../type' import { Professional, Sandbox, Team } from '../../assets' import { PlanRange } from '../../plan-switcher/plan-range-switcher' -import Button from './button' +import PlanButton from './button' import List from './list' const ICON_MAP = { @@ -33,10 +32,6 @@ const ICON_MAP = { [Plan.team]: , } -type ConfirmType = { - type: 'info' | 'warning' -} - type CloudPlanItemProps = { currentPlan: BasicPlan plan: BasicPlan @@ -64,15 +59,12 @@ const CloudPlanItem: FC = ({ const { enableEducationPlan, isEducationAccount } = useProviderContext() const isEducationDiscountMode = enableEducationPlan && isEducationAccount const isEducationDiscountSupportedPlan = plan === Plan.professional && isYear - const selectedPlanName = t(`${i18nPrefix}.name`, { ns: 'billing' }) - const selectedBillingPeriod = t(`educationPricingConfirm.billingPeriod.${isYear ? 'yearly' : 'monthly'}`, { ns: 'education' }) const educationDiscountWarningText = canPay && isEducationDiscountMode && !isFreePlan && !isEducationDiscountSupportedPlan ? t('planNotSupportEducationDiscount', { ns: 'education' }) : undefined const openAsyncWindow = useAsyncWindowOpen() const { handleEducationDiscount, isEducationDiscountLoading } = useEducationDiscount() const [showEducationPricingConfirm, setShowEducationPricingConfirm] = React.useState(false) - const educationPricingConfirmInfo: ConfirmType = { type: 'warning' } const btnText = useMemo(() => { if (canPay && isEducationDiscountMode && isEducationDiscountSupportedPlan && !isCurrent) @@ -139,16 +131,19 @@ const CloudPlanItem: FC = ({ await handlePayCurrentPlan() } - const handleContinueCurrentPlan = async () => { - setShowEducationPricingConfirm(false) + const handleSwitchToProfessionalAnnual = async () => { + await handleEducationDiscount() + } + const handleKeepCurrentPlan = async () => { await handlePayCurrentPlan() + setShowEducationPricingConfirm(false) } return (
{ICON_MAP[plan]} -
+
{t(`${i18nPrefix}.name`, { ns: 'billing' })}
{ @@ -188,7 +183,7 @@ const CloudPlanItem: FC = ({ )}
-
- - -
- + + +
+ {t('educationPricingConfirm.title', { ns: 'education' })} - - - {t('educationPricingConfirm.description', { - ns: 'education', - planName: selectedPlanName, - billingPeriod: selectedBillingPeriod, - })} - + + + {t('educationPricingConfirm.description', { ns: 'education' })} +
- - setShowEducationPricingConfirm(false)} - disabled={loading} +
+ +
+
+
) } diff --git a/web/i18n/ar-TN/education.json b/web/i18n/ar-TN/education.json index 250e6b7d26..bf8ae1d795 100644 --- a/web/i18n/ar-TN/education.json +++ b/web/i18n/ar-TN/education.json @@ -16,10 +16,10 @@ "currentSigned": "تم تسجيل الدخول حاليًا باسم", "educationPricingConfirm.billingPeriod.monthly": "شهري", "educationPricingConfirm.billingPeriod.yearly": "سنوي", - "educationPricingConfirm.cancel": "إلغاء", - "educationPricingConfirm.continue": "المتابعة بدون خصم", - "educationPricingConfirm.description": "خطتك {{planName}} {{billingPeriod}} لا تدعم الخصم التعليمي. فقط خطة Professional السنوية مؤهلة.", - "educationPricingConfirm.title": "الخصم التعليمي غير متاح", + "educationPricingConfirm.cancel": "الاحتفاظ بالخطة الحالية", + "educationPricingConfirm.continue": "التبديل إلى Professional السنوية", + "educationPricingConfirm.description": "ينطبق الخصم التعليمي على خطة Professional السنوية فقط. الاحتفاظ بخطتك الحالية لن يتضمن الخصم.", + "educationPricingConfirm.title": "الخطة التي اخترتها لا تدعم الخصم التعليمي", "emailLabel": "بريدك الإلكتروني الحالي", "form.schoolName.placeholder": "أدخل الاسم الرسمي الكامل لمدرستك", "form.schoolName.title": "اسم مدرستك", diff --git a/web/i18n/de-DE/education.json b/web/i18n/de-DE/education.json index 32dd76bd46..c5153c7f75 100644 --- a/web/i18n/de-DE/education.json +++ b/web/i18n/de-DE/education.json @@ -16,10 +16,10 @@ "currentSigned": "DERZEIT ANGEMELDET ALS", "educationPricingConfirm.billingPeriod.monthly": "monatlich", "educationPricingConfirm.billingPeriod.yearly": "jährlich", - "educationPricingConfirm.cancel": "Abbrechen", - "educationPricingConfirm.continue": "Ohne Rabatt fortfahren", - "educationPricingConfirm.description": "Ihr {{planName}} {{billingPeriod}} Plan unterstützt den Bildungsrabatt nicht. Nur der Professional-Jahresplan ist berechtigt.", - "educationPricingConfirm.title": "Bildungsrabatt nicht verfügbar", + "educationPricingConfirm.cancel": "Aktuellen Plan behalten", + "educationPricingConfirm.continue": "Zu Professional jährlich wechseln", + "educationPricingConfirm.description": "Der Bildungsrabatt gilt nur für den jährlichen Professional-Plan. Wenn Sie Ihren aktuellen Plan behalten, ist der Rabatt nicht enthalten.", + "educationPricingConfirm.title": "Ihr ausgewählter Plan unterstützt den Bildungsrabatt nicht", "emailLabel": "Ihre aktuelle E-Mail", "form.schoolName.placeholder": "Geben Sie den offiziellen, unabgekürzten Namen Ihrer Schule ein.", "form.schoolName.title": "Ihr Schulname", diff --git a/web/i18n/en-US/education.json b/web/i18n/en-US/education.json index e26b1cc24d..479ea5d28f 100644 --- a/web/i18n/en-US/education.json +++ b/web/i18n/en-US/education.json @@ -16,10 +16,10 @@ "currentSigned": "CURRENTLY SIGNED IN AS", "educationPricingConfirm.billingPeriod.monthly": "monthly", "educationPricingConfirm.billingPeriod.yearly": "annual", - "educationPricingConfirm.cancel": "Cancel", - "educationPricingConfirm.continue": "Continue without discount", - "educationPricingConfirm.description": "Your {{planName}} {{billingPeriod}} plan doesn't support the education discount. Only the Professional annual plan is eligible.", - "educationPricingConfirm.title": "Education discount not available", + "educationPricingConfirm.cancel": "Keep current plan", + "educationPricingConfirm.continue": "Switch to Professional Annual", + "educationPricingConfirm.description": "The education discount applies to the Professional annual plan only. Keeping your current plan won't include the discount.", + "educationPricingConfirm.title": "Your selected plan doesn't support the education discount", "emailLabel": "Your current email", "form.schoolName.placeholder": "Enter the official, unabbreviated name of your school", "form.schoolName.title": "Your School Name", diff --git a/web/i18n/es-ES/education.json b/web/i18n/es-ES/education.json index 0b2ac91b00..5784797977 100644 --- a/web/i18n/es-ES/education.json +++ b/web/i18n/es-ES/education.json @@ -16,10 +16,10 @@ "currentSigned": "ACTUALMENTE CONECTADO COMO", "educationPricingConfirm.billingPeriod.monthly": "mensual", "educationPricingConfirm.billingPeriod.yearly": "anual", - "educationPricingConfirm.cancel": "Cancelar", - "educationPricingConfirm.continue": "Continuar sin descuento", - "educationPricingConfirm.description": "Tu plan {{planName}} {{billingPeriod}} no admite el descuento educativo. Solo el plan Professional anual es elegible.", - "educationPricingConfirm.title": "Descuento educativo no disponible", + "educationPricingConfirm.cancel": "Mantener el plan actual", + "educationPricingConfirm.continue": "Cambiar a Professional anual", + "educationPricingConfirm.description": "El descuento educativo solo se aplica al plan Professional anual. Si mantienes tu plan actual, no se incluirá el descuento.", + "educationPricingConfirm.title": "El plan seleccionado no admite el descuento educativo", "emailLabel": "Tu correo electrónico actual", "form.schoolName.placeholder": "Ingrese el nombre oficial y completo de su escuela", "form.schoolName.title": "El nombre de tu escuela", diff --git a/web/i18n/fa-IR/education.json b/web/i18n/fa-IR/education.json index 63150df78b..ee1e282719 100644 --- a/web/i18n/fa-IR/education.json +++ b/web/i18n/fa-IR/education.json @@ -16,10 +16,10 @@ "currentSigned": "اکنون به عنوان", "educationPricingConfirm.billingPeriod.monthly": "ماهانه", "educationPricingConfirm.billingPeriod.yearly": "سالانه", - "educationPricingConfirm.cancel": "لغو", - "educationPricingConfirm.continue": "ادامه بدون تخفیف", - "educationPricingConfirm.description": "طرح {{planName}} {{billingPeriod}} شما از تخفیف آموزشی پشتیبانی نمی‌کند. فقط طرح سالانه Professional واجد شرایط است.", - "educationPricingConfirm.title": "تخفیف آموزشی در دسترس نیست", + "educationPricingConfirm.cancel": "حفظ طرح فعلی", + "educationPricingConfirm.continue": "تغییر به Professional سالانه", + "educationPricingConfirm.description": "تخفیف آموزشی فقط برای طرح سالانه Professional اعمال می‌شود. با حفظ طرح فعلی، این تخفیف شامل نمی‌شود.", + "educationPricingConfirm.title": "طرح انتخاب‌شده شما از تخفیف آموزشی پشتیبانی نمی‌کند", "emailLabel": "ایمیل فعلی شما", "form.schoolName.placeholder": "نام رسمی و کامل مدرسه خود را وارد کنید", "form.schoolName.title": "نام مدرسه شما", diff --git a/web/i18n/fr-FR/education.json b/web/i18n/fr-FR/education.json index d201b6f031..1757a84911 100644 --- a/web/i18n/fr-FR/education.json +++ b/web/i18n/fr-FR/education.json @@ -16,10 +16,10 @@ "currentSigned": "ACTUELLEMENT CONNECTÉ EN TANT QUE", "educationPricingConfirm.billingPeriod.monthly": "mensuel", "educationPricingConfirm.billingPeriod.yearly": "annuel", - "educationPricingConfirm.cancel": "Annuler", - "educationPricingConfirm.continue": "Continuer sans remise", - "educationPricingConfirm.description": "Votre plan {{planName}} {{billingPeriod}} ne prend pas en charge la remise éducative. Seul le plan Professional annuel est éligible.", - "educationPricingConfirm.title": "Remise éducative non disponible", + "educationPricingConfirm.cancel": "Conserver le plan actuel", + "educationPricingConfirm.continue": "Passer à Professional annuel", + "educationPricingConfirm.description": "La remise éducation s'applique uniquement au plan Professional annuel. En conservant votre plan actuel, la remise ne sera pas incluse.", + "educationPricingConfirm.title": "Le plan sélectionné ne prend pas en charge la remise éducation", "emailLabel": "Votre email actuel", "form.schoolName.placeholder": "Entrez le nom officiel et complet de votre école", "form.schoolName.title": "Le nom de votre école", diff --git a/web/i18n/hi-IN/education.json b/web/i18n/hi-IN/education.json index a580491cb7..3d4df9db51 100644 --- a/web/i18n/hi-IN/education.json +++ b/web/i18n/hi-IN/education.json @@ -16,10 +16,10 @@ "currentSigned": "वर्तमान में साइन इन किया गया है के रूप में", "educationPricingConfirm.billingPeriod.monthly": "मासिक", "educationPricingConfirm.billingPeriod.yearly": "वार्षिक", - "educationPricingConfirm.cancel": "रद्द करें", - "educationPricingConfirm.continue": "छूट के बिना जारी रखें", - "educationPricingConfirm.description": "आपका {{planName}} {{billingPeriod}} प्लान शिक्षा छूट का समर्थन नहीं करता। केवल Professional वार्षिक प्लान पात्र है।", - "educationPricingConfirm.title": "शिक्षा छूट उपलब्ध नहीं", + "educationPricingConfirm.cancel": "वर्तमान प्लान रखें", + "educationPricingConfirm.continue": "Professional वार्षिक पर स्विच करें", + "educationPricingConfirm.description": "शिक्षा छूट केवल Professional वार्षिक प्लान पर लागू होती है। अपना वर्तमान प्लान रखने पर छूट शामिल नहीं होगी।", + "educationPricingConfirm.title": "आपका चुना हुआ प्लान शिक्षा छूट का समर्थन नहीं करता", "emailLabel": "आपका वर्तमान ईमेल", "form.schoolName.placeholder": "अपनी स्कूल का आधिकारिक, बिना संक्षिप्त नाम दर्ज करें", "form.schoolName.title": "आपके स्कूल का नाम", diff --git a/web/i18n/id-ID/education.json b/web/i18n/id-ID/education.json index 3fa6d70a60..6d37be99dd 100644 --- a/web/i18n/id-ID/education.json +++ b/web/i18n/id-ID/education.json @@ -16,10 +16,10 @@ "currentSigned": "SAAT INI MASUK SEBAGAI", "educationPricingConfirm.billingPeriod.monthly": "bulanan", "educationPricingConfirm.billingPeriod.yearly": "tahunan", - "educationPricingConfirm.cancel": "Batal", - "educationPricingConfirm.continue": "Lanjutkan tanpa diskon", - "educationPricingConfirm.description": "Paket {{planName}} {{billingPeriod}} Anda tidak mendukung diskon pendidikan. Hanya paket Professional tahunan yang memenuhi syarat.", - "educationPricingConfirm.title": "Diskon pendidikan tidak tersedia", + "educationPricingConfirm.cancel": "Tetap gunakan paket saat ini", + "educationPricingConfirm.continue": "Beralih ke Professional Tahunan", + "educationPricingConfirm.description": "Diskon pendidikan hanya berlaku untuk paket Professional tahunan. Jika tetap menggunakan paket saat ini, diskon tidak akan disertakan.", + "educationPricingConfirm.title": "Paket yang Anda pilih tidak mendukung diskon pendidikan", "emailLabel": "Email Anda saat ini", "form.schoolName.placeholder": "Masukkan nama resmi sekolah Anda yang tidak disingkat", "form.schoolName.title": "Nama Sekolah Anda", diff --git a/web/i18n/it-IT/education.json b/web/i18n/it-IT/education.json index b1ccc69308..313c9b404b 100644 --- a/web/i18n/it-IT/education.json +++ b/web/i18n/it-IT/education.json @@ -16,10 +16,10 @@ "currentSigned": "ATTUALMENTE ACCEDUTO COME", "educationPricingConfirm.billingPeriod.monthly": "mensile", "educationPricingConfirm.billingPeriod.yearly": "annuale", - "educationPricingConfirm.cancel": "Annulla", - "educationPricingConfirm.continue": "Continua senza sconto", - "educationPricingConfirm.description": "Il tuo piano {{planName}} {{billingPeriod}} non supporta lo sconto educativo. Solo il piano Professional annuale è idoneo.", - "educationPricingConfirm.title": "Sconto educativo non disponibile", + "educationPricingConfirm.cancel": "Mantieni il piano attuale", + "educationPricingConfirm.continue": "Passa a Professional annuale", + "educationPricingConfirm.description": "Lo sconto Education si applica solo al piano Professional annuale. Mantenendo il piano attuale, lo sconto non verrà incluso.", + "educationPricingConfirm.title": "Il piano selezionato non supporta lo sconto Education", "emailLabel": "La tua email attuale", "form.schoolName.placeholder": "Inserisci il nome ufficiale e completo della tua scuola", "form.schoolName.title": "Il Nome della tua Scuola", diff --git a/web/i18n/ja-JP/education.json b/web/i18n/ja-JP/education.json index 978b561ff0..9473f203cd 100644 --- a/web/i18n/ja-JP/education.json +++ b/web/i18n/ja-JP/education.json @@ -16,10 +16,10 @@ "currentSigned": "現在ログイン中のアカウントは", "educationPricingConfirm.billingPeriod.monthly": "月次", "educationPricingConfirm.billingPeriod.yearly": "年次", - "educationPricingConfirm.cancel": "キャンセル", - "educationPricingConfirm.continue": "割引なしで続行", - "educationPricingConfirm.description": "{{planName}} {{billingPeriod}} プランは教育割引に対応していません。Professional 年次プランのみが対象です。", - "educationPricingConfirm.title": "教育割引は利用できません", + "educationPricingConfirm.cancel": "現在のプランを維持", + "educationPricingConfirm.continue": "Professional 年間プランに切り替える", + "educationPricingConfirm.description": "教育割引は Professional 年間プランにのみ適用されます。現在のプランを維持すると、割引は適用されません。", + "educationPricingConfirm.title": "選択したプランは教育割引に対応していません", "emailLabel": "現在のメールアドレス", "form.schoolName.placeholder": "学校の正式名称(省略不可)を入力してください。", "form.schoolName.title": "学校名", diff --git a/web/i18n/ko-KR/education.json b/web/i18n/ko-KR/education.json index c7db9a99b7..1370265ae4 100644 --- a/web/i18n/ko-KR/education.json +++ b/web/i18n/ko-KR/education.json @@ -16,10 +16,10 @@ "currentSigned": "현재 로그인 중입니다", "educationPricingConfirm.billingPeriod.monthly": "월간", "educationPricingConfirm.billingPeriod.yearly": "연간", - "educationPricingConfirm.cancel": "취소", - "educationPricingConfirm.continue": "할인 없이 계속", - "educationPricingConfirm.description": "{{planName}} {{billingPeriod}} 플랜은 교육 할인을 지원하지 않습니다. Professional 연간 플랜만 자격이 있습니다.", - "educationPricingConfirm.title": "교육 할인 불가", + "educationPricingConfirm.cancel": "현재 플랜 유지", + "educationPricingConfirm.continue": "Professional 연간으로 전환", + "educationPricingConfirm.description": "교육 할인은 Professional 연간 플랜에만 적용됩니다. 현재 플랜을 유지하면 할인이 포함되지 않습니다.", + "educationPricingConfirm.title": "선택한 플랜은 교육 할인을 지원하지 않습니다", "emailLabel": "현재 이메일", "form.schoolName.placeholder": "귀하의 학교의 공식 약어가 아닌 전체 이름을 입력하세요.", "form.schoolName.title": "당신의 학교 이름", diff --git a/web/i18n/nl-NL/education.json b/web/i18n/nl-NL/education.json index 6bf16ef619..4a6d14bf0e 100644 --- a/web/i18n/nl-NL/education.json +++ b/web/i18n/nl-NL/education.json @@ -16,10 +16,10 @@ "currentSigned": "CURRENTLY SIGNED IN AS", "educationPricingConfirm.billingPeriod.monthly": "maandelijks", "educationPricingConfirm.billingPeriod.yearly": "jaarlijks", - "educationPricingConfirm.cancel": "Annuleren", - "educationPricingConfirm.continue": "Doorgaan zonder korting", - "educationPricingConfirm.description": "Uw {{planName}} {{billingPeriod}} abonnement ondersteunt de onderwijskorting niet. Alleen het jaarlijkse Professional abonnement komt in aanmerking.", - "educationPricingConfirm.title": "Onderwijskorting niet beschikbaar", + "educationPricingConfirm.cancel": "Huidig abonnement behouden", + "educationPricingConfirm.continue": "Overschakelen naar Professional jaarlijks", + "educationPricingConfirm.description": "De onderwijskorting is alleen van toepassing op het jaarlijkse Professional-abonnement. Als u uw huidige abonnement behoudt, is de korting niet inbegrepen.", + "educationPricingConfirm.title": "Uw geselecteerde abonnement ondersteunt de onderwijskorting niet", "emailLabel": "Your current email", "form.schoolName.placeholder": "Enter the official, unabbreviated name of your school", "form.schoolName.title": "Your School Name", diff --git a/web/i18n/pl-PL/education.json b/web/i18n/pl-PL/education.json index cb71de4572..139d7912dd 100644 --- a/web/i18n/pl-PL/education.json +++ b/web/i18n/pl-PL/education.json @@ -16,10 +16,10 @@ "currentSigned": "AKTUALNIE ZALOGOWANY JAKO", "educationPricingConfirm.billingPeriod.monthly": "miesięcznie", "educationPricingConfirm.billingPeriod.yearly": "rocznie", - "educationPricingConfirm.cancel": "Anuluj", - "educationPricingConfirm.continue": "Kontynuuj bez rabatu", - "educationPricingConfirm.description": "Twój plan {{planName}} {{billingPeriod}} nie obsługuje rabatu edukacyjnego. Tylko roczny plan Professional jest uprawniony.", - "educationPricingConfirm.title": "Rabat edukacyjny niedostępny", + "educationPricingConfirm.cancel": "Zachowaj obecny plan", + "educationPricingConfirm.continue": "Przełącz na Professional roczny", + "educationPricingConfirm.description": "Zniżka edukacyjna dotyczy tylko rocznego planu Professional. Pozostanie przy obecnym planie nie obejmie zniżki.", + "educationPricingConfirm.title": "Wybrany plan nie obsługuje zniżki edukacyjnej", "emailLabel": "Twój aktualny email", "form.schoolName.placeholder": "Wpisz oficjalną, pełną nazwę swojej szkoły", "form.schoolName.title": "Nazwa Twojej Szkoły", diff --git a/web/i18n/pt-BR/education.json b/web/i18n/pt-BR/education.json index c6929f5840..9441542015 100644 --- a/web/i18n/pt-BR/education.json +++ b/web/i18n/pt-BR/education.json @@ -16,10 +16,10 @@ "currentSigned": "ATUALMENTE CONECTADO COMO", "educationPricingConfirm.billingPeriod.monthly": "mensal", "educationPricingConfirm.billingPeriod.yearly": "anual", - "educationPricingConfirm.cancel": "Cancelar", - "educationPricingConfirm.continue": "Continuar sem desconto", - "educationPricingConfirm.description": "Seu plano {{planName}} {{billingPeriod}} não suporta o desconto educacional. Apenas o plano Professional anual é elegível.", - "educationPricingConfirm.title": "Desconto educacional não disponível", + "educationPricingConfirm.cancel": "Manter plano atual", + "educationPricingConfirm.continue": "Mudar para Professional anual", + "educationPricingConfirm.description": "O desconto educacional se aplica apenas ao plano Professional anual. Manter seu plano atual não incluirá o desconto.", + "educationPricingConfirm.title": "O plano selecionado não aceita o desconto educacional", "emailLabel": "Seu e-mail atual", "form.schoolName.placeholder": "Digite o nome oficial e não abreviado da sua escola", "form.schoolName.title": "O nome da sua escola", diff --git a/web/i18n/ro-RO/education.json b/web/i18n/ro-RO/education.json index 61d257f08b..a361ec2bbe 100644 --- a/web/i18n/ro-RO/education.json +++ b/web/i18n/ro-RO/education.json @@ -16,10 +16,10 @@ "currentSigned": "CONEXIUNE ÎN PREZENT CA", "educationPricingConfirm.billingPeriod.monthly": "lunar", "educationPricingConfirm.billingPeriod.yearly": "anual", - "educationPricingConfirm.cancel": "Anulează", - "educationPricingConfirm.continue": "Continuă fără reducere", - "educationPricingConfirm.description": "Planul tău {{planName}} {{billingPeriod}} nu suportă reducerea educațională. Doar planul Professional anual este eligibil.", - "educationPricingConfirm.title": "Reducerea educațională nu este disponibilă", + "educationPricingConfirm.cancel": "Păstrează planul curent", + "educationPricingConfirm.continue": "Treci la Professional anual", + "educationPricingConfirm.description": "Reducerea educațională se aplică doar planului Professional anual. Dacă păstrezi planul curent, reducerea nu va fi inclusă.", + "educationPricingConfirm.title": "Planul selectat nu acceptă reducerea educațională", "emailLabel": "Emailul tău curent", "form.schoolName.placeholder": "Introduceți numele oficial, neabbreviat al școlii dumneavoastră", "form.schoolName.title": "Numele Școlii Tale", diff --git a/web/i18n/ru-RU/education.json b/web/i18n/ru-RU/education.json index ce9300745f..58534dd57e 100644 --- a/web/i18n/ru-RU/education.json +++ b/web/i18n/ru-RU/education.json @@ -16,10 +16,10 @@ "currentSigned": "В ДАННЫЙ МОМЕНТ ВХОД В ПРОФИЛЬ КАК", "educationPricingConfirm.billingPeriod.monthly": "ежемесячно", "educationPricingConfirm.billingPeriod.yearly": "ежегодно", - "educationPricingConfirm.cancel": "Отмена", - "educationPricingConfirm.continue": "Продолжить без скидки", - "educationPricingConfirm.description": "Ваш план {{planName}} {{billingPeriod}} не поддерживает образовательную скидку. Только годовой план Professional имеет право на скидку.", - "educationPricingConfirm.title": "Образовательная скидка недоступна", + "educationPricingConfirm.cancel": "Оставить текущий план", + "educationPricingConfirm.continue": "Перейти на Professional годовой", + "educationPricingConfirm.description": "Образовательная скидка применяется только к годовому плану Professional. Если оставить текущий план, скидка не будет включена.", + "educationPricingConfirm.title": "Выбранный план не поддерживает образовательную скидку", "emailLabel": "Ваш текущий адрес электронной почты", "form.schoolName.placeholder": "Введите официальное, полное название вашей школы", "form.schoolName.title": "Название вашей школы", diff --git a/web/i18n/sl-SI/education.json b/web/i18n/sl-SI/education.json index 94abe1f58d..7855bd3e74 100644 --- a/web/i18n/sl-SI/education.json +++ b/web/i18n/sl-SI/education.json @@ -16,10 +16,10 @@ "currentSigned": "Trenutno prijavljen kot", "educationPricingConfirm.billingPeriod.monthly": "mesečno", "educationPricingConfirm.billingPeriod.yearly": "letno", - "educationPricingConfirm.cancel": "Prekliči", - "educationPricingConfirm.continue": "Nadaljuj brez popusta", - "educationPricingConfirm.description": "Vaš načrt {{planName}} {{billingPeriod}} ne podpira izobraževalnega popusta. Do popusta je upravičen samo letni načrt Professional.", - "educationPricingConfirm.title": "Izobraževalni popust ni na voljo", + "educationPricingConfirm.cancel": "Obdrži trenutni paket", + "educationPricingConfirm.continue": "Preklopi na letni Professional", + "educationPricingConfirm.description": "Izobraževalni popust velja samo za letni paket Professional. Če obdržite trenutni paket, popust ne bo vključen.", + "educationPricingConfirm.title": "Izbrani paket ne podpira izobraževalnega popusta", "emailLabel": "Vaš trenutni elektronski naslov", "form.schoolName.placeholder": "Vpišite uradno, neokrnjeno ime vaše šole", "form.schoolName.title": "Ime vaše šole", diff --git a/web/i18n/th-TH/education.json b/web/i18n/th-TH/education.json index b6b50a9181..830440802a 100644 --- a/web/i18n/th-TH/education.json +++ b/web/i18n/th-TH/education.json @@ -16,10 +16,10 @@ "currentSigned": "ลงชื่อเข้าใช้ในฐานะ", "educationPricingConfirm.billingPeriod.monthly": "รายเดือน", "educationPricingConfirm.billingPeriod.yearly": "รายปี", - "educationPricingConfirm.cancel": "ยกเลิก", - "educationPricingConfirm.continue": "ดำเนินการต่อโดยไม่มีส่วนลด", - "educationPricingConfirm.description": "แผน {{planName}} {{billingPeriod}} ของคุณไม่รองรับส่วนลดการศึกษา เฉพาะแผน Professional รายปีเท่านั้นที่มีสิทธิ์", - "educationPricingConfirm.title": "ส่วนลดการศึกษาไม่พร้อมใช้งาน", + "educationPricingConfirm.cancel": "ใช้แผนปัจจุบันต่อ", + "educationPricingConfirm.continue": "เปลี่ยนเป็น Professional รายปี", + "educationPricingConfirm.description": "ส่วนลดการศึกษาใช้ได้เฉพาะกับแผน Professional รายปีเท่านั้น หากใช้แผนปัจจุบันต่อ จะไม่มีส่วนลดนี้รวมอยู่ด้วย", + "educationPricingConfirm.title": "แผนที่คุณเลือกไม่รองรับส่วนลดการศึกษา", "emailLabel": "อีเมลปัจจุบันของคุณ", "form.schoolName.placeholder": "กรุณาใส่ชื่อของโรงเรียนอย่างเป็นทางการที่ไม่มีการย่อ", "form.schoolName.title": "ชื่อโรงเรียนของคุณ", diff --git a/web/i18n/tr-TR/education.json b/web/i18n/tr-TR/education.json index 61e03379b4..d3b77aad33 100644 --- a/web/i18n/tr-TR/education.json +++ b/web/i18n/tr-TR/education.json @@ -16,10 +16,10 @@ "currentSigned": "ŞU ANDA GİRİŞ YAPILDIĞI KİŞİ", "educationPricingConfirm.billingPeriod.monthly": "aylık", "educationPricingConfirm.billingPeriod.yearly": "yıllık", - "educationPricingConfirm.cancel": "İptal", - "educationPricingConfirm.continue": "İndirim olmadan devam et", - "educationPricingConfirm.description": "{{planName}} {{billingPeriod}} planınız eğitim indirimini desteklemiyor. Yalnızca yıllık Professional planı uygundur.", - "educationPricingConfirm.title": "Eğitim indirimi mevcut değil", + "educationPricingConfirm.cancel": "Mevcut planı koru", + "educationPricingConfirm.continue": "Professional yıllık plana geç", + "educationPricingConfirm.description": "Eğitim indirimi yalnızca yıllık Professional planı için geçerlidir. Mevcut planınızı korursanız indirim dahil edilmez.", + "educationPricingConfirm.title": "Seçtiğiniz plan eğitim indirimini desteklemiyor", "emailLabel": "Şu anki e-posta adresin", "form.schoolName.placeholder": "Okulunuzun resmi, kısaltılmamış adını girin", "form.schoolName.title": "Okulunuzun Adı", diff --git a/web/i18n/uk-UA/education.json b/web/i18n/uk-UA/education.json index d0cf4a77de..6cfa324666 100644 --- a/web/i18n/uk-UA/education.json +++ b/web/i18n/uk-UA/education.json @@ -16,10 +16,10 @@ "currentSigned": "В даний момент ви підписані як", "educationPricingConfirm.billingPeriod.monthly": "щомісячно", "educationPricingConfirm.billingPeriod.yearly": "щорічно", - "educationPricingConfirm.cancel": "Скасувати", - "educationPricingConfirm.continue": "Продовжити без знижки", - "educationPricingConfirm.description": "Ваш план {{planName}} {{billingPeriod}} не підтримує освітню знижку. Лише річний план Professional має право на знижку.", - "educationPricingConfirm.title": "Освітня знижка недоступна", + "educationPricingConfirm.cancel": "Залишити поточний план", + "educationPricingConfirm.continue": "Перейти на Professional річний", + "educationPricingConfirm.description": "Освітня знижка застосовується лише до річного плану Professional. Якщо залишити поточний план, знижку не буде включено.", + "educationPricingConfirm.title": "Вибраний план не підтримує освітню знижку", "emailLabel": "Ваш поточний електронний лист", "form.schoolName.placeholder": "Введіть офіційну, повну назву вашої школи", "form.schoolName.title": "Ваша назва школи", diff --git a/web/i18n/vi-VN/education.json b/web/i18n/vi-VN/education.json index 2edc6965a1..65429bcd8a 100644 --- a/web/i18n/vi-VN/education.json +++ b/web/i18n/vi-VN/education.json @@ -16,10 +16,10 @@ "currentSigned": "HIỆN ĐANG ĐĂNG NHẬP VÀO", "educationPricingConfirm.billingPeriod.monthly": "hàng tháng", "educationPricingConfirm.billingPeriod.yearly": "hàng năm", - "educationPricingConfirm.cancel": "Hủy", - "educationPricingConfirm.continue": "Tiếp tục không có giảm giá", - "educationPricingConfirm.description": "Gói {{planName}} {{billingPeriod}} của bạn không hỗ trợ giảm giá giáo dục. Chỉ gói Professional hàng năm mới được áp dụng.", - "educationPricingConfirm.title": "Giảm giá giáo dục không khả dụng", + "educationPricingConfirm.cancel": "Giữ gói hiện tại", + "educationPricingConfirm.continue": "Chuyển sang Professional hằng năm", + "educationPricingConfirm.description": "Giảm giá giáo dục chỉ áp dụng cho gói Professional hằng năm. Nếu giữ gói hiện tại, giảm giá sẽ không được áp dụng.", + "educationPricingConfirm.title": "Gói bạn chọn không hỗ trợ giảm giá giáo dục", "emailLabel": "Email hiện tại của bạn", "form.schoolName.placeholder": "Nhập tên chính thức, không viết tắt của trường bạn", "form.schoolName.title": "Tên Trường Của Bạn", diff --git a/web/i18n/zh-Hans/education.json b/web/i18n/zh-Hans/education.json index 657d265424..f82c9b3405 100644 --- a/web/i18n/zh-Hans/education.json +++ b/web/i18n/zh-Hans/education.json @@ -16,10 +16,10 @@ "currentSigned": "您当前登录的账户是", "educationPricingConfirm.billingPeriod.monthly": "月付", "educationPricingConfirm.billingPeriod.yearly": "年付", - "educationPricingConfirm.cancel": "取消", - "educationPricingConfirm.continue": "不使用优惠继续", - "educationPricingConfirm.description": "你的 {{planName}} 计划{{billingPeriod}}不支持教育优惠。只有 Professional 的年付计划符合条件。", - "educationPricingConfirm.title": "教育优惠不适用于该计划", + "educationPricingConfirm.cancel": "保留当前计划", + "educationPricingConfirm.continue": "切换到 Professional 年付", + "educationPricingConfirm.description": "教育优惠仅适用于 Professional 年付计划。保留当前计划将不包含该优惠。", + "educationPricingConfirm.title": "你选择的计划不支持教育优惠", "emailLabel": "您当前的邮箱", "form.schoolName.placeholder": "请输入您的学校的官方全称(不得缩写)", "form.schoolName.title": "您的学校名称", diff --git a/web/i18n/zh-Hant/education.json b/web/i18n/zh-Hant/education.json index 7447470a4c..76ce672e14 100644 --- a/web/i18n/zh-Hant/education.json +++ b/web/i18n/zh-Hant/education.json @@ -16,10 +16,10 @@ "currentSigned": "當前以以下身份登入", "educationPricingConfirm.billingPeriod.monthly": "月付", "educationPricingConfirm.billingPeriod.yearly": "年付", - "educationPricingConfirm.cancel": "取消", - "educationPricingConfirm.continue": "不使用優惠繼續", - "educationPricingConfirm.description": "你的 {{planName}} 方案{{billingPeriod}}不支援教育優惠。只有 Professional 的年付方案符合資格。", - "educationPricingConfirm.title": "教育優惠不適用於此方案", + "educationPricingConfirm.cancel": "保留目前方案", + "educationPricingConfirm.continue": "切換到 Professional 年付", + "educationPricingConfirm.description": "教育優惠僅適用於 Professional 年付方案。保留目前方案將不包含此優惠。", + "educationPricingConfirm.title": "你選擇的方案不支援教育優惠", "emailLabel": "您當前的電子郵件", "form.schoolName.placeholder": "請輸入您學校的正式全名", "form.schoolName.title": "你的學校名稱",