feat: dashboard Second Brain, essai 7 jours et vérification e-mail
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m14s
CI / Deploy production (on server) (push) Successful in 1m25s

Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-08-30 07:19:36 +00:00
parent 69c99e4f4f
commit 80ccc1f6de
95 changed files with 4158 additions and 618 deletions

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — الخصوصية · الشروط",
"sessionExpired": "يتم إنشاء موقعك مع التنقل وجدول المحتويات",
"welcomeBack": "مرحبًا بعودتك",
"welcomeBackSubtitle": "أدخل بيانات الاعتماد للوصول إلى ملاحظاتك."
"welcomeBackSubtitle": "أدخل بيانات الاعتماد للوصول إلى ملاحظاتك.",
"checkEmailTitle": "تحقق من بريدك الإلكتروني",
"checkEmailDescription": "أرسلنا رابط تأكيد إلى {email}. افتحه لتفعيل حسابك قبل تسجيل الدخول.",
"checkEmailDescriptionGeneric": "أرسلنا رابط تأكيد إلى بريدك. افتحه لتفعيل حسابك قبل تسجيل الدخول.",
"resendVerification": "إعادة إرسال رسالة التأكيد",
"verifyResent": "تم إرسال رسالة التأكيد. تحقق من صندوق الوارد.",
"verifyResendFailed": "تعذّر إرسال رسالة التأكيد. حاول لاحقًا.",
"verifyMissingEmail": "أدخل عنوان بريدك الإلكتروني.",
"verifyLoading": "جارٍ تأكيد بريدك…",
"verifySuccessTitle": "تم تأكيد البريد",
"verifySuccessDescription": "حسابك جاهز. يمكنك تسجيل الدخول الآن.",
"verifyExpiredTitle": "انتهت صلاحية الرابط",
"verifyExpiredDescription": "انتهت صلاحية رابط التأكيد. اطلب رابطًا جديدًا.",
"verifyInvalidTitle": "رابط غير صالح",
"verifyInvalidDescription": "رابط التأكيد غير صالح أو سبق استخدامه.",
"emailNotVerified": "يرجى تأكيد بريدك قبل تسجيل الدخول.",
"emailVerifiedBanner": "تم تأكيد البريد. يمكنك تسجيل الدخول الآن.",
"invalidCredentials": "البريد أو كلمة المرور غير صحيحة."
},
"sidebar": {
"notes": "الملاحظات",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "حزمة مكثفة",
"buyPack": "شراء",
"packCheckoutSuccess": "تمت إضافة حزمة الأرصدة إلى رصيدك!",
"packCheckoutFailed": "تعذّر بدء الشراء. تحقق من إعدادات Stripe أو أعد المحاولة."
"packCheckoutFailed": "تعذّر بدء الشراء. تحقق من إعدادات Stripe أو أعد المحاولة.",
"startTrialCta": "جرّب مجانًا لمدة {days} أيام",
"trialFeature": "تجربة مجانية لمدة {days} أيام (بطاقة مطلوبة)",
"trialEndsOn": "تنتهي فترتك التجريبية المجانية في {date}. سيتم تحصيل الرسوم تلقائيًا بعد ذلك.",
"trialEndsLabel": "نهاية التجربة"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "دعم مخصص",
"feature5": "إعداد مباشر"
},
"basicPrice": "مجاني"
"basicPrice": "مجاني",
"savePercent": "وفّر حوالي 17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "حسب الطلب",
"trialBadge": "تجربة مجانية لمدة {days} أيام",
"trialFeature": "تجربة مجانية لمدة {days} أيام (بطاقة مطلوبة)",
"trialCta": "جرّب مجانًا لمدة {days} أيام"
},
"cta": {
"title": "توقف عن فقدان أفضل أفكارك.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Datenschutz · AGB",
"sessionExpired": "Ihre Seite wird mit Navigation und Inhaltsverzeichnis generiert",
"welcomeBack": "Willkommen zurück",
"welcomeBackSubtitle": "Geben Sie Ihre Anmeldedaten ein, um auf Ihre Notizen zuzugreifen."
"welcomeBackSubtitle": "Geben Sie Ihre Anmeldedaten ein, um auf Ihre Notizen zuzugreifen.",
"checkEmailTitle": "E-Mail prüfen",
"checkEmailDescription": "Wir haben einen Bestätigungslink an {email} gesendet. Öffnen Sie ihn, um Ihr Konto zu aktivieren.",
"checkEmailDescriptionGeneric": "Wir haben einen Bestätigungslink an Ihre E-Mail gesendet. Öffnen Sie ihn, um Ihr Konto zu aktivieren.",
"resendVerification": "Bestätigungs-E-Mail erneut senden",
"verifyResent": "Bestätigungs-E-Mail gesendet. Prüfen Sie Ihren Posteingang.",
"verifyResendFailed": "Bestätigungs-E-Mail konnte nicht gesendet werden. Später erneut versuchen.",
"verifyMissingEmail": "Geben Sie Ihre E-Mail-Adresse ein.",
"verifyLoading": "E-Mail wird bestätigt…",
"verifySuccessTitle": "E-Mail bestätigt",
"verifySuccessDescription": "Ihr Konto ist bereit. Sie können sich jetzt anmelden.",
"verifyExpiredTitle": "Link abgelaufen",
"verifyExpiredDescription": "Dieser Bestätigungslink ist abgelaufen. Fordern Sie einen neuen an.",
"verifyInvalidTitle": "Ungültiger Link",
"verifyInvalidDescription": "Dieser Bestätigungslink ist ungültig oder wurde bereits verwendet.",
"emailNotVerified": "Bitte bestätigen Sie Ihre E-Mail, bevor Sie sich anmelden.",
"emailVerifiedBanner": "E-Mail bestätigt. Sie können sich jetzt anmelden.",
"invalidCredentials": "Ungültige E-Mail oder Passwort."
},
"sidebar": {
"notes": "Notizen",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Power-Paket",
"buyPack": "Kaufen",
"packCheckoutSuccess": "Credit-Paket Ihrem Guthaben hinzugefügt!",
"packCheckoutFailed": "Paketkauf fehlgeschlagen. Stripe-Konfiguration prüfen oder erneut versuchen."
"packCheckoutFailed": "Paketkauf fehlgeschlagen. Stripe-Konfiguration prüfen oder erneut versuchen.",
"startTrialCta": "{days} Tage kostenlos starten",
"trialFeature": "{days} Tage gratis testen (Karte erforderlich)",
"trialEndsOn": "Ihre kostenlose Testphase endet am {date}. Danach werden Sie automatisch belastet.",
"trialEndsLabel": "Testende"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Dedizierter Support",
"feature5": "Live-Onboarding"
},
"basicPrice": "Kostenlos"
"basicPrice": "Kostenlos",
"savePercent": "~17% sparen",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "Individuell",
"trialBadge": "{days} Tage gratis testen",
"trialFeature": "{days} Tage gratis testen (Karte erforderlich)",
"trialCta": "{days} Tage kostenlos starten"
},
"cta": {
"title": "Hören Sie auf, Ihre besten Ideen zu verlieren.",

View File

@@ -321,6 +321,7 @@
"switchType": "Switch to {type}",
"saveNow": "Save now",
"backToCollection": "Back to collection",
"backToDashboard": "Back to dashboard",
"markdownEditingTitle": "Return to editing",
"markdownPreviewTitle": "Preview",
"brainstormThisIdea": "Brainstorm this idea",
@@ -4288,6 +4289,8 @@
"toReview": "To review",
"allCaughtUp": "All caught up.",
"toOrganize": "to organize",
"inboxSeeAll": "See all {count}",
"inboxEmpty": "Inbox is empty.",
"review": "Review",
"cardsDue": "cards due",
"reminders": "Reminders",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Privacidad · Términos",
"sessionExpired": "Tu sitio se genera con navegación y tabla de contenidos",
"welcomeBack": "Bienvenido de nuevo",
"welcomeBackSubtitle": "Introduce tus credenciales para acceder a tus notas."
"welcomeBackSubtitle": "Introduce tus credenciales para acceder a tus notas.",
"checkEmailTitle": "Revisa tu correo",
"checkEmailDescription": "Enviamos un enlace de confirmación a {email}. Ábrelo para activar tu cuenta antes de iniciar sesión.",
"checkEmailDescriptionGeneric": "Enviamos un enlace de confirmación a tu correo. Ábrelo para activar tu cuenta antes de iniciar sesión.",
"resendVerification": "Reenviar correo de confirmación",
"verifyResent": "Correo de confirmación enviado. Revisa tu bandeja de entrada.",
"verifyResendFailed": "No se pudo enviar el correo de confirmación. Inténtalo más tarde.",
"verifyMissingEmail": "Introduce tu dirección de correo.",
"verifyLoading": "Confirmando tu correo…",
"verifySuccessTitle": "Correo confirmado",
"verifySuccessDescription": "Tu cuenta está lista. Ya puedes iniciar sesión.",
"verifyExpiredTitle": "Enlace caducado",
"verifyExpiredDescription": "Este enlace de confirmación ha caducado. Solicita uno nuevo.",
"verifyInvalidTitle": "Enlace no válido",
"verifyInvalidDescription": "Este enlace de confirmación no es válido o ya se usó.",
"emailNotVerified": "Confirma tu correo antes de iniciar sesión.",
"emailVerifiedBanner": "Correo confirmado. Ya puedes iniciar sesión.",
"invalidCredentials": "Correo o contraseña incorrectos."
},
"sidebar": {
"notes": "Notas",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Paquete intensivo",
"buyPack": "Comprar",
"packCheckoutSuccess": "¡Paquete de créditos añadido a su saldo!",
"packCheckoutFailed": "No se pudo iniciar la compra. Compruebe la config de Stripe o inténtelo de nuevo."
"packCheckoutFailed": "No se pudo iniciar la compra. Compruebe la config de Stripe o inténtelo de nuevo.",
"startTrialCta": "Probar {days} días gratis",
"trialFeature": "Prueba gratis de {days} días (tarjeta requerida)",
"trialEndsOn": "Tu prueba gratuita termina el {date}. Después se te cobrará automáticamente.",
"trialEndsLabel": "Fin de la prueba"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Soporte dedicado",
"feature5": "Onboarding en vivo"
},
"basicPrice": "Gratis"
"basicPrice": "Gratis",
"savePercent": "Ahorra ~17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "A medida",
"trialBadge": "Prueba gratis {days} días",
"trialFeature": "Prueba gratis de {days} días (tarjeta requerida)",
"trialCta": "Probar {days} días gratis"
},
"cta": {
"title": "Deja de perder tus mejores ideas.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© ۲۰۲۵ Memento Labs — حریم خصوصی · شرایط",
"sessionExpired": "سایت شما با ناوبری و فهرست مطالب تولید می‌شود",
"welcomeBack": "خوش آمدید",
"welcomeBackSubtitle": "اعتبارنامه‌های خود را برای دسترسی به یادداشت‌هایتان وارد کنید."
"welcomeBackSubtitle": "اعتبارنامه‌های خود را برای دسترسی به یادداشت‌هایتان وارد کنید.",
"checkEmailTitle": "ایمیل خود را بررسی کنید",
"checkEmailDescription": "لینک تأیید را به {email} فرستادیم. قبل از ورود آن را باز کنید تا حساب فعال شود.",
"checkEmailDescriptionGeneric": "لینک تأیید را به ایمیل شما فرستادیم. قبل از ورود آن را باز کنید تا حساب فعال شود.",
"resendVerification": "ارسال دوباره ایمیل تأیید",
"verifyResent": "ایمیل تأیید ارسال شد. صندوق ورودی را بررسی کنید.",
"verifyResendFailed": "ارسال ایمیل تأیید ممکن نشد. بعداً دوباره تلاش کنید.",
"verifyMissingEmail": "آدرس ایمیل خود را وارد کنید.",
"verifyLoading": "در حال تأیید ایمیل…",
"verifySuccessTitle": "ایمیل تأیید شد",
"verifySuccessDescription": "حساب شما آماده است. اکنون می‌توانید وارد شوید.",
"verifyExpiredTitle": "لینک منقضی شده",
"verifyExpiredDescription": "این لینک تأیید منقضی شده است. یک لینک جدید درخواست کنید.",
"verifyInvalidTitle": "لینک نامعتبر",
"verifyInvalidDescription": "این لینک تأیید نامعتبر است یا قبلاً استفاده شده.",
"emailNotVerified": "قبل از ورود ایمیل خود را تأیید کنید.",
"emailVerifiedBanner": "ایمیل تأیید شد. اکنون می‌توانید وارد شوید.",
"invalidCredentials": "ایمیل یا رمز عبور نادرست است."
},
"sidebar": {
"notes": "یادداشت‌ها",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "بسته قدرتمند",
"buyPack": "خرید",
"packCheckoutSuccess": "بسته اعتبار به موجودی شما اضافه شد!",
"packCheckoutFailed": "شروع خرید ممکن نشد. پیکربندی Stripe را بررسی کنید یا دوباره تلاش کنید."
"packCheckoutFailed": "شروع خرید ممکن نشد. پیکربندی Stripe را بررسی کنید یا دوباره تلاش کنید.",
"startTrialCta": "شروع آزمایش رایگان {days} روزه",
"trialFeature": "آزمایش رایگان {days} روزه (نیاز به کارت)",
"trialEndsOn": "آزمایش رایگان شما در {date} تمام می‌شود. سپس به‌طور خودکار صورتحساب صادر می‌شود.",
"trialEndsLabel": "پایان آزمایش"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "پشتیبانی اختصاصی",
"feature5": "آنبوردینگ زنده"
},
"basicPrice": "رایگان"
"basicPrice": "رایگان",
"savePercent": "حدود ۱۷٪ صرفه‌جویی",
"proMonthly": "۹٫۹۰€",
"proAnnualMonthly": "۸٫۲۵€",
"businessMonthly": "۲۹٫۹۰€",
"businessAnnualMonthly": "۲۴٫۹۲€",
"enterprisePrice": "قیمت سفارشی",
"trialBadge": "آزمایش رایگان {days} روزه",
"trialFeature": "آزمایش رایگان {days} روزه (نیاز به کارت)",
"trialCta": "شروع آزمایش رایگان {days} روزه"
},
"cta": {
"title": "از دست دادن بهترین ایده‌ها را متوقف کنید.",

View File

@@ -323,6 +323,7 @@
"switchType": "Passer en {type}",
"saveNow": "Enregistrer maintenant",
"backToCollection": "Retour à la collection",
"backToDashboard": "Retour au dashboard",
"markdownEditingTitle": "Revenir à l'édition",
"markdownPreviewTitle": "Aperçu",
"brainstormThisIdea": "Brainstormer cette idée",
@@ -4294,6 +4295,8 @@
"toReview": "À traiter",
"allCaughtUp": "Tout est à jour.",
"toOrganize": "à organiser",
"inboxSeeAll": "Voir les {count}",
"inboxEmpty": "Rien à classer.",
"review": "Révisions",
"cardsDue": "cartes dues",
"reminders": "Rappels",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — गोपनीयता · शर्तें",
"sessionExpired": "आपकी साइट नेविगेशन और विषय-सूची के साथ बनाई जाती है",
"welcomeBack": "वापसी पर स्वागत है",
"welcomeBackSubtitle": "अपने नोट्स तक पहुँचने के लिए अपनी प्रमाणीकरण जानकारी दर्ज करें।"
"welcomeBackSubtitle": "अपने नोट्स तक पहुँचने के लिए अपनी प्रमाणीकरण जानकारी दर्ज करें।",
"checkEmailTitle": "अपना ईमेल देखें",
"checkEmailDescription": "हमने {email} पर पुष्टि लिंक भेजा है। साइन इन से पहले खाता सक्रिय करने के लिए इसे खोलें।",
"checkEmailDescriptionGeneric": "हमने आपके ईमेल पर पुष्टि लिंक भेजा है। साइन इन से पहले खाता सक्रिय करने के लिए इसे खोलें।",
"resendVerification": "पुष्टि ईमेल फिर से भेजें",
"verifyResent": "पुष्टि ईमेल भेजा गया। इनबॉक्स देखें।",
"verifyResendFailed": "पुष्टि ईमेल नहीं भेजा जा सका। बाद में फिर कोशिश करें।",
"verifyMissingEmail": "अपना ईमेल पता दर्ज करें।",
"verifyLoading": "ईमेल की पुष्टि हो रही है…",
"verifySuccessTitle": "ईमेल पुष्टि हो गई",
"verifySuccessDescription": "आपका खाता तैयार है। अब साइन इन कर सकते हैं।",
"verifyExpiredTitle": "लिंक समाप्त",
"verifyExpiredDescription": "यह पुष्टि लिंक समाप्त हो गया है। नया लिंक माँगें।",
"verifyInvalidTitle": "अमान्य लिंक",
"verifyInvalidDescription": "यह पुष्टि लिंक अमान्य है या पहले ही उपयोग हो चुका है।",
"emailNotVerified": "साइन इन से पहले अपना ईमेल पुष्टि करें।",
"emailVerifiedBanner": "ईमेल पुष्टि हो गई। अब साइन इन करें।",
"invalidCredentials": "ईमेल या पासवर्ड गलत है।"
},
"sidebar": {
"notes": "नोट्स",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "पावर पैक",
"buyPack": "खरीदें",
"packCheckoutSuccess": "क्रेडिट पैक आपके शेष में जोड़ा गया!",
"packCheckoutFailed": "खरीद शुरू नहीं हो सकी। Stripe कॉन्फ़िग जांचें या पुनः प्रयास करें।"
"packCheckoutFailed": "खरीद शुरू नहीं हो सकी। Stripe कॉन्फ़िग जांचें या पुनः प्रयास करें।",
"startTrialCta": "{days} दिन मुफ़्त आज़माएँ",
"trialFeature": "{days} दिन का मुफ़्त ट्रायल (कार्ड आवश्यक)",
"trialEndsOn": "आपका मुफ़्त ट्रायल {date} को समाप्त होता है। उसके बाद स्वचालित रूप से शुल्क लगेगा।",
"trialEndsLabel": "ट्रायल समाप्त"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "समर्पित सपोर्ट",
"feature5": "लाइव ऑनबोर्डिंग"
},
"basicPrice": "मुफ़्त"
"basicPrice": "मुफ़्त",
"savePercent": "~17% बचाएँ",
"proMonthly": "€9.90",
"proAnnualMonthly": "€8.25",
"businessMonthly": "€29.90",
"businessAnnualMonthly": "€24.92",
"enterprisePrice": "कस्टम",
"trialBadge": "{days} दिन का मुफ़्त ट्रायल",
"trialFeature": "{days} दिन का मुफ़्त ट्रायल (कार्ड आवश्यक)",
"trialCta": "{days} दिन मुफ़्त आज़माएँ"
},
"cta": {
"title": "अपने सबसे अच्छे विचारों को खोना बंद करें।",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Privacy · Termini",
"sessionExpired": "Il tuo sito viene generato con navigazione e sommario",
"welcomeBack": "Bentornato",
"welcomeBackSubtitle": "Inserisci le tue credenziali per accedere alle tue note."
"welcomeBackSubtitle": "Inserisci le tue credenziali per accedere alle tue note.",
"checkEmailTitle": "Controlla la tua e-mail",
"checkEmailDescription": "Abbiamo inviato un link di conferma a {email}. Aprilo per attivare laccount prima di accedere.",
"checkEmailDescriptionGeneric": "Abbiamo inviato un link di conferma alla tua e-mail. Aprilo per attivare laccount prima di accedere.",
"resendVerification": "Reinvia e-mail di conferma",
"verifyResent": "E-mail di conferma inviata. Controlla la posta in arrivo.",
"verifyResendFailed": "Impossibile inviare le-mail di conferma. Riprova più tardi.",
"verifyMissingEmail": "Inserisci il tuo indirizzo e-mail.",
"verifyLoading": "Conferma delle-mail in corso…",
"verifySuccessTitle": "E-mail confermata",
"verifySuccessDescription": "Il tuo account è pronto. Ora puoi accedere.",
"verifyExpiredTitle": "Link scaduto",
"verifyExpiredDescription": "Questo link di conferma è scaduto. Richiedine uno nuovo.",
"verifyInvalidTitle": "Link non valido",
"verifyInvalidDescription": "Questo link di conferma non è valido o è già stato usato.",
"emailNotVerified": "Conferma la tua e-mail prima di accedere.",
"emailVerifiedBanner": "E-mail confermata. Ora puoi accedere.",
"invalidCredentials": "E-mail o password non validi."
},
"sidebar": {
"notes": "Note",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Pacchetto power",
"buyPack": "Acquista",
"packCheckoutSuccess": "Pacchetto crediti aggiunto al saldo!",
"packCheckoutFailed": "Acquisto del pacchetto non riuscito. Verifica la config Stripe o riprova."
"packCheckoutFailed": "Acquisto del pacchetto non riuscito. Verifica la config Stripe o riprova.",
"startTrialCta": "Prova {days} giorni gratis",
"trialFeature": "Prova gratuita di {days} giorni (carta richiesta)",
"trialEndsOn": "La prova gratuita termina il {date}. Poi verrai addebitato automaticamente.",
"trialEndsLabel": "Fine prova"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Supporto dedicato",
"feature5": "Onboarding live"
},
"basicPrice": "Gratis"
"basicPrice": "Gratis",
"savePercent": "Risparmia ~17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "Su preventivo",
"trialBadge": "Prova gratuita {days} giorni",
"trialFeature": "Prova gratuita di {days} giorni (carta richiesta)",
"trialCta": "Prova {days} giorni gratis"
},
"cta": {
"title": "Smetti di perdere le tue idee migliori.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — プライバシー · 利用規約",
"sessionExpired": "サイトはナビゲーションと目次付きで生成されます",
"welcomeBack": "おかえりなさい",
"welcomeBackSubtitle": "ノートにアクセスするには認証情報を入力してください。"
"welcomeBackSubtitle": "ノートにアクセスするには認証情報を入力してください。",
"checkEmailTitle": "メールを確認してください",
"checkEmailDescription": "{email} に確認リンクを送信しました。ログイン前に開いてアカウントを有効化してください。",
"checkEmailDescriptionGeneric": "確認リンクをメールで送信しました。ログイン前に開いてアカウントを有効化してください。",
"resendVerification": "確認メールを再送信",
"verifyResent": "確認メールを送信しました。受信箱を確認してください。",
"verifyResendFailed": "確認メールを送信できませんでした。後でもう一度お試しください。",
"verifyMissingEmail": "メールアドレスを入力してください。",
"verifyLoading": "メールを確認しています…",
"verifySuccessTitle": "メール確認完了",
"verifySuccessDescription": "アカウントの準備ができました。ログインできます。",
"verifyExpiredTitle": "リンクの期限切れ",
"verifyExpiredDescription": "この確認リンクは期限切れです。新しいリンクをリクエストしてください。",
"verifyInvalidTitle": "無効なリンク",
"verifyInvalidDescription": "この確認リンクは無効か、すでに使用されています。",
"emailNotVerified": "ログイン前にメールを確認してください。",
"emailVerifiedBanner": "メール確認済みです。ログインできます。",
"invalidCredentials": "メールまたはパスワードが正しくありません。"
},
"sidebar": {
"notes": "ノート",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "パワーパック",
"buyPack": "購入",
"packCheckoutSuccess": "クレジットパックが残高に追加されました!",
"packCheckoutFailed": "購入を開始できませんでした。Stripe設定を確認するか再試行してください。"
"packCheckoutFailed": "購入を開始できませんでした。Stripe設定を確認するか再試行してください。",
"startTrialCta": "{days}日間無料で試す",
"trialFeature": "{days}日間無料トライアル(カード登録が必要)",
"trialEndsOn": "無料トライアルは {date} に終了します。その後、自動的に請求されます。",
"trialEndsLabel": "トライアル終了"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "専任サポート",
"feature5": "ライブオンボーディング"
},
"basicPrice": "無料"
"basicPrice": "無料",
"savePercent": "約17%お得",
"proMonthly": "€9.90",
"proAnnualMonthly": "€8.25",
"businessMonthly": "€29.90",
"businessAnnualMonthly": "€24.92",
"enterprisePrice": "お問い合わせ",
"trialBadge": "{days}日間無料トライアル",
"trialFeature": "{days}日間無料トライアル(カード登録が必要)",
"trialCta": "{days}日間無料で試す"
},
"cta": {
"title": "最高のアイデアを失うのをやめる。",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — 개인정보 · 약관",
"sessionExpired": "사이트가 탐색 및 목차와 함께 생성됩니다",
"welcomeBack": "다시 오신 것을 환영합니다",
"welcomeBackSubtitle": "노트에 액세스하려면 자격 증명을 입력하세요."
"welcomeBackSubtitle": "노트에 액세스하려면 자격 증명을 입력하세요.",
"checkEmailTitle": "이메일을 확인하세요",
"checkEmailDescription": "{email}(으)로 확인 링크를 보냈습니다. 로그인하기 전에 열어 계정을 활성화하세요.",
"checkEmailDescriptionGeneric": "확인 링크를 이메일로 보냈습니다. 로그인하기 전에 열어 계정을 활성화하세요.",
"resendVerification": "확인 이메일 다시 보내기",
"verifyResent": "확인 이메일을 보냈습니다. 받은편지함을 확인하세요.",
"verifyResendFailed": "확인 이메일을 보낼 수 없습니다. 나중에 다시 시도하세요.",
"verifyMissingEmail": "이메일 주소를 입력하세요.",
"verifyLoading": "이메일을 확인하는 중…",
"verifySuccessTitle": "이메일 확인 완료",
"verifySuccessDescription": "계정이 준비되었습니다. 이제 로그인할 수 있습니다.",
"verifyExpiredTitle": "링크 만료",
"verifyExpiredDescription": "이 확인 링크는 만료되었습니다. 새 링크를 요청하세요.",
"verifyInvalidTitle": "유효하지 않은 링크",
"verifyInvalidDescription": "이 확인 링크는 유효하지 않거나 이미 사용되었습니다.",
"emailNotVerified": "로그인하기 전에 이메일을 확인하세요.",
"emailVerifiedBanner": "이메일이 확인되었습니다. 이제 로그인할 수 있습니다.",
"invalidCredentials": "이메일 또는 비밀번호가 올바르지 않습니다."
},
"sidebar": {
"notes": "노트",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "파워 팩",
"buyPack": "구매",
"packCheckoutSuccess": "크레딧 팩이 잔액에 추가되었습니다!",
"packCheckoutFailed": "구매를 시작할 수 없습니다. Stripe 설정을 확인하거나 다시 시도하세요."
"packCheckoutFailed": "구매를 시작할 수 없습니다. Stripe 설정을 확인하거나 다시 시도하세요.",
"startTrialCta": "{days}일 무료로 시작",
"trialFeature": "{days}일 무료 체험 (카드 등록 필요)",
"trialEndsOn": "무료 체험이 {date}에 종료됩니다. 이후 자동으로 결제됩니다.",
"trialEndsLabel": "체험 종료"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "전담 지원",
"feature5": "라이브 온보딩"
},
"basicPrice": "무료"
"basicPrice": "무료",
"savePercent": "약 17% 절약",
"proMonthly": "€9.90",
"proAnnualMonthly": "€8.25",
"businessMonthly": "€29.90",
"businessAnnualMonthly": "€24.92",
"enterprisePrice": "맞춤 견적",
"trialBadge": "{days}일 무료 체험",
"trialFeature": "{days}일 무료 체험 (카드 등록 필요)",
"trialCta": "{days}일 무료로 시작"
},
"cta": {
"title": "최고의 아이디어를 잃는 일을 멈추세요.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Privacy · Voorwaarden",
"sessionExpired": "Uw site wordt gegenereerd met navigatie en inhoudsopgave",
"welcomeBack": "Welkom terug",
"welcomeBackSubtitle": "Voer uw inloggegevens in om toegang te krijgen tot uw notities."
"welcomeBackSubtitle": "Voer uw inloggegevens in om toegang te krijgen tot uw notities.",
"checkEmailTitle": "Controleer je e-mail",
"checkEmailDescription": "We hebben een bevestigingslink naar {email} gestuurd. Open die om je account te activeren voordat je inlogt.",
"checkEmailDescriptionGeneric": "We hebben een bevestigingslink naar je e-mail gestuurd. Open die om je account te activeren voordat je inlogt.",
"resendVerification": "Bevestigingsmail opnieuw versturen",
"verifyResent": "Bevestigingsmail verzonden. Controleer je inbox.",
"verifyResendFailed": "Bevestigingsmail kon niet worden verzonden. Probeer later opnieuw.",
"verifyMissingEmail": "Voer je e-mailadres in.",
"verifyLoading": "E-mail wordt bevestigd…",
"verifySuccessTitle": "E-mail bevestigd",
"verifySuccessDescription": "Je account is klaar. Je kunt nu inloggen.",
"verifyExpiredTitle": "Link verlopen",
"verifyExpiredDescription": "Deze bevestigingslink is verlopen. Vraag een nieuwe aan.",
"verifyInvalidTitle": "Ongeldige link",
"verifyInvalidDescription": "Deze bevestigingslink is ongeldig of al gebruikt.",
"emailNotVerified": "Bevestig je e-mail voordat je inlogt.",
"emailVerifiedBanner": "E-mail bevestigd. Je kunt nu inloggen.",
"invalidCredentials": "Ongeldig e-mailadres of wachtwoord."
},
"sidebar": {
"notes": "Notities",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Powerpakket",
"buyPack": "Kopen",
"packCheckoutSuccess": "Creditpakket toegevoegd aan je saldo!",
"packCheckoutFailed": "Aankoop mislukt. Controleer de Stripe-config of probeer opnieuw."
"packCheckoutFailed": "Aankoop mislukt. Controleer de Stripe-config of probeer opnieuw.",
"startTrialCta": "{days} dagen gratis starten",
"trialFeature": "{days} dagen gratis proberen (kaart vereist)",
"trialEndsOn": "Je gratis proefperiode eindigt op {date}. Daarna word je automatisch gefactureerd.",
"trialEndsLabel": "Einde proefperiode"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Dedicated support",
"feature5": "Live onboarding"
},
"basicPrice": "Gratis"
"basicPrice": "Gratis",
"savePercent": "Bespaar ~17%",
"proMonthly": "€9,90",
"proAnnualMonthly": "€8,25",
"businessMonthly": "€29,90",
"businessAnnualMonthly": "€24,92",
"enterprisePrice": "Op maat",
"trialBadge": "{days} dagen gratis proberen",
"trialFeature": "{days} dagen gratis proberen (kaart vereist)",
"trialCta": "{days} dagen gratis starten"
},
"cta": {
"title": "Stop met het verliezen van je beste ideeën.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Prywatność · Warunki",
"sessionExpired": "Twoja strona jest generowana z nawigacją i spisem treści",
"welcomeBack": "Witamy ponownie",
"welcomeBackSubtitle": "Wprowadź swoje dane logowania, aby uzyskać dostęp do notatek."
"welcomeBackSubtitle": "Wprowadź swoje dane logowania, aby uzyskać dostęp do notatek.",
"checkEmailTitle": "Sprawdź e-mail",
"checkEmailDescription": "Wysłaliśmy link potwierdzający na {email}. Otwórz go, aby aktywować konto przed logowaniem.",
"checkEmailDescriptionGeneric": "Wysłaliśmy link potwierdzający na Twój e-mail. Otwórz go, aby aktywować konto przed logowaniem.",
"resendVerification": "Wyślij ponownie e-mail potwierdzający",
"verifyResent": "Wysłano e-mail potwierdzający. Sprawdź skrzynkę.",
"verifyResendFailed": "Nie udało się wysłać e-maila potwierdzającego. Spróbuj później.",
"verifyMissingEmail": "Podaj adres e-mail.",
"verifyLoading": "Potwierdzanie e-maila…",
"verifySuccessTitle": "E-mail potwierdzony",
"verifySuccessDescription": "Konto jest gotowe. Możesz się zalogować.",
"verifyExpiredTitle": "Link wygasł",
"verifyExpiredDescription": "Ten link potwierdzający wygasł. Poproś o nowy.",
"verifyInvalidTitle": "Nieprawidłowy link",
"verifyInvalidDescription": "Ten link potwierdzający jest nieprawidłowy lub został już użyty.",
"emailNotVerified": "Potwierdź e-mail przed zalogowaniem.",
"emailVerifiedBanner": "E-mail potwierdzony. Możesz się zalogować.",
"invalidCredentials": "Nieprawidłowy e-mail lub hasło."
},
"sidebar": {
"notes": "Notatki",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Pakiet power",
"buyPack": "Kup",
"packCheckoutSuccess": "Pakiet kredytów dodany do salda!",
"packCheckoutFailed": "Nie udało się rozpocząć zakupu. Sprawdź konfigurację Stripe lub spróbuj ponownie."
"packCheckoutFailed": "Nie udało się rozpocząć zakupu. Sprawdź konfigurację Stripe lub spróbuj ponownie.",
"startTrialCta": "Wypróbuj {days} dni za darmo",
"trialFeature": "{days}-dniowy okres próbny (wymagana karta)",
"trialEndsOn": "Twój okres próbny kończy się {date}. Potem nastąpi automatyczne obciążenie.",
"trialEndsLabel": "Koniec okresu próbnego"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Dedykowane wsparcie",
"feature5": "Onboarding na żywo"
},
"basicPrice": "Za darmo"
"basicPrice": "Za darmo",
"savePercent": "Oszczędź ~17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "Indywidualnie",
"trialBadge": "{days} dni za darmo",
"trialFeature": "{days}-dniowy okres próbny (wymagana karta)",
"trialCta": "Wypróbuj {days} dni za darmo"
},
"cta": {
"title": "Przestań tracić najlepsze pomysły.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Privacidade · Termos",
"sessionExpired": "Seu site é gerado com navegação e sumário",
"welcomeBack": "Bem-vindo de volta",
"welcomeBackSubtitle": "Digite suas credenciais para acessar suas notas."
"welcomeBackSubtitle": "Digite suas credenciais para acessar suas notas.",
"checkEmailTitle": "Verifique o seu e-mail",
"checkEmailDescription": "Enviámos um link de confirmação para {email}. Abra-o para ativar a conta antes de entrar.",
"checkEmailDescriptionGeneric": "Enviámos um link de confirmação para o seu e-mail. Abra-o para ativar a conta antes de entrar.",
"resendVerification": "Reenviar e-mail de confirmação",
"verifyResent": "E-mail de confirmação enviado. Verifique a caixa de entrada.",
"verifyResendFailed": "Não foi possível enviar o e-mail de confirmação. Tente mais tarde.",
"verifyMissingEmail": "Introduza o seu endereço de e-mail.",
"verifyLoading": "A confirmar o seu e-mail…",
"verifySuccessTitle": "E-mail confirmado",
"verifySuccessDescription": "A sua conta está pronta. Já pode iniciar sessão.",
"verifyExpiredTitle": "Link expirado",
"verifyExpiredDescription": "Este link de confirmação expirou. Peça um novo.",
"verifyInvalidTitle": "Link inválido",
"verifyInvalidDescription": "Este link de confirmação é inválido ou já foi usado.",
"emailNotVerified": "Confirme o seu e-mail antes de iniciar sessão.",
"emailVerifiedBanner": "E-mail confirmado. Já pode iniciar sessão.",
"invalidCredentials": "E-mail ou palavra-passe incorretos."
},
"sidebar": {
"notes": "Notas",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Pacote intensivo",
"buyPack": "Comprar",
"packCheckoutSuccess": "Pacote de créditos adicionado ao saldo!",
"packCheckoutFailed": "Falha ao iniciar a compra. Verifique a config Stripe ou tente de novo."
"packCheckoutFailed": "Falha ao iniciar a compra. Verifique a config Stripe ou tente de novo.",
"startTrialCta": "Experimentar {days} dias grátis",
"trialFeature": "Teste grátis de {days} dias (cartão necessário)",
"trialEndsOn": "O seu teste gratuito termina em {date}. Depois será cobrado automaticamente.",
"trialEndsLabel": "Fim do teste"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Suporte dedicado",
"feature5": "Onboarding ao vivo"
},
"basicPrice": "Grátis"
"basicPrice": "Grátis",
"savePercent": "Economize ~17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "Sob consulta",
"trialBadge": "Teste grátis {days} dias",
"trialFeature": "Teste grátis de {days} dias (cartão necessário)",
"trialCta": "Experimentar {days} dias grátis"
},
"cta": {
"title": "Pare de perder suas melhores ideias.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — Конфиденциальность · Условия",
"sessionExpired": "Ваш сайт создаётся с навигацией и оглавлением",
"welcomeBack": "С возвращением",
"welcomeBackSubtitle": "Введите свои учётные данные для доступа к заметкам."
"welcomeBackSubtitle": "Введите свои учётные данные для доступа к заметкам.",
"checkEmailTitle": "Проверьте почту",
"checkEmailDescription": "Мы отправили ссылку подтверждения на {email}. Откройте её, чтобы активировать аккаунт перед входом.",
"checkEmailDescriptionGeneric": "Мы отправили ссылку подтверждения на вашу почту. Откройте её, чтобы активировать аккаунт перед входом.",
"resendVerification": "Отправить письмо ещё раз",
"verifyResent": "Письмо подтверждения отправлено. Проверьте входящие.",
"verifyResendFailed": "Не удалось отправить письмо подтверждения. Попробуйте позже.",
"verifyMissingEmail": "Введите адрес электронной почты.",
"verifyLoading": "Подтверждение почты…",
"verifySuccessTitle": "Почта подтверждена",
"verifySuccessDescription": "Аккаунт готов. Теперь можно войти.",
"verifyExpiredTitle": "Ссылка устарела",
"verifyExpiredDescription": "Срок действия ссылки истёк. Запросите новую.",
"verifyInvalidTitle": "Недействительная ссылка",
"verifyInvalidDescription": "Эта ссылка недействительна или уже использована.",
"emailNotVerified": "Подтвердите почту перед входом.",
"emailVerifiedBanner": "Почта подтверждена. Можно войти.",
"invalidCredentials": "Неверный e-mail или пароль."
},
"sidebar": {
"notes": "Заметки",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "Мощный пакет",
"buyPack": "Купить",
"packCheckoutSuccess": "Пакет кредитов добавлен на баланс!",
"packCheckoutFailed": "Не удалось начать покупку. Проверьте настройки Stripe или повторите попытку."
"packCheckoutFailed": "Не удалось начать покупку. Проверьте настройки Stripe или повторите попытку.",
"startTrialCta": "Попробовать {days} дней бесплатно",
"trialFeature": "Бесплатный период {days} дней (нужна карта)",
"trialEndsOn": "Ваш пробный период заканчивается {date}. Затем списание произойдёт автоматически.",
"trialEndsLabel": "Конец пробного периода"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "Выделенная поддержка",
"feature5": "Live-онбординг"
},
"basicPrice": "Бесплатно"
"basicPrice": "Бесплатно",
"savePercent": "Экономия ~17%",
"proMonthly": "9,90€",
"proAnnualMonthly": "8,25€",
"businessMonthly": "29,90€",
"businessAnnualMonthly": "24,92€",
"enterprisePrice": "По запросу",
"trialBadge": "{days} дней бесплатно",
"trialFeature": "Бесплатный период {days} дней (нужна карта)",
"trialCta": "Попробовать {days} дней бесплатно"
},
"cta": {
"title": "Хватит терять лучшие идеи.",

View File

@@ -38,7 +38,24 @@
"privacyTerms": "© 2025 Memento Labs — 隐私 · 条款",
"sessionExpired": "您的网站将包含导航和目录地生成",
"welcomeBack": "欢迎回来",
"welcomeBackSubtitle": "输入你的凭据以访问笔记。"
"welcomeBackSubtitle": "输入你的凭据以访问笔记。",
"checkEmailTitle": "请查收邮件",
"checkEmailDescription": "我们已向 {email} 发送确认链接。请打开链接以激活账户后再登录。",
"checkEmailDescriptionGeneric": "我们已向您的邮箱发送确认链接。请打开链接以激活账户后再登录。",
"resendVerification": "重新发送确认邮件",
"verifyResent": "确认邮件已发送,请检查收件箱。",
"verifyResendFailed": "无法发送确认邮件,请稍后再试。",
"verifyMissingEmail": "请输入电子邮箱地址。",
"verifyLoading": "正在确认邮箱…",
"verifySuccessTitle": "邮箱已确认",
"verifySuccessDescription": "账户已就绪,现在可以登录。",
"verifyExpiredTitle": "链接已过期",
"verifyExpiredDescription": "此确认链接已过期,请重新申请。",
"verifyInvalidTitle": "无效链接",
"verifyInvalidDescription": "此确认链接无效或已被使用。",
"emailNotVerified": "登录前请先确认邮箱。",
"emailVerifiedBanner": "邮箱已确认,现在可以登录。",
"invalidCredentials": "邮箱或密码不正确。"
},
"sidebar": {
"notes": "笔记",
@@ -1580,7 +1597,58 @@
"STRIPE_PRICE_CREDITS_S": "Pack S — 100 credits (price ID)",
"STRIPE_PRICE_CREDITS_M": "Pack M — 500 credits (price ID)",
"STRIPE_PRICE_CREDITS_L": "Pack L — 2,000 credits (price ID)",
"packsCatalogTitle": "Pack catalogue (code)"
"packsCatalogTitle": "Pack catalogue (code)",
"healthTitle": "Stripe health check",
"healthDescription": "Runtime status of keys, webhooks, price IDs and billing flag (secrets are never shown).",
"healthSecret": "Secret key (server)",
"healthPublishable": "Publishable key",
"healthWebhook": "Webhook secret",
"healthBillingFlag": "Billing enabled",
"healthTrial": "Free trial",
"trialDaysValue": "{days} days on first checkout",
"modeTest": "Test mode (sk_test_…)",
"modeLive": "Live mode (sk_live_…)",
"modePlaceholder": "Placeholder / invalid key",
"modeMissing": "Not configured",
"configured": "Configured",
"missing": "Missing",
"enabled": "Enabled",
"disabled": "Disabled",
"priceStatusTitle": "Price IDs vs Stripe",
"colKey": "Plan",
"colPriceId": "Price ID",
"colSource": "Source",
"colStripe": "Stripe amount",
"priceError": "Lookup failed",
"inactive": "inactive",
"notChecked": "Not checked (no Stripe key)",
"subsTitle": "Subscriptions overview",
"subsDescription": "Counts from the local database (synced via Stripe webhooks).",
"statPaid": "Active + trial",
"statTrialing": "On trial",
"statPastDue": "Past due",
"statCanceling": "Cancel at period end",
"byTier": "By tier",
"byStatus": "By status",
"usersWithoutSub": "Users with no Subscription row",
"noSubs": "No subscriptions yet",
"recentSubs": "Recent paid / trial accounts",
"colUser": "User",
"colTier": "Tier",
"colStatus": "Status",
"colPeriod": "Period / trial end",
"canceling": "canceling",
"manualTier": "manual (no Stripe sub)",
"trialUntil": "Trial until {date}",
"testGuideTitle": "How to test Stripe locally",
"testGuideDescription": "Checklist to validate checkout, webhooks and trial.",
"testStep1": "Stripe Dashboard → Test mode ON. Create Pro/Business products + monthly/annual prices + credit packs.",
"testStep2": "Put sk_test_…, pk_test_… in .env. Put price_… IDs in Admin → Billing (or env) and enable billing.",
"testStep3": "Copy the whsec_… into STRIPE_WEBHOOK_SECRET and restart the app.",
"testStep4": "npm run dev → open /settings/billing as a BASIC user.",
"testStep5": "Start Pro checkout. Card: 4242 4242 4242 4242, any future expiry, any CVC. Expect a 7-day trial.",
"testStep6": "Confirm Admin → Billing shows TRIALING, and /settings/billing shows the trial end date.",
"testCardHint": "Other cards: 4000000000009995 = payment fails · 4000002500003155 = 3D Secure. Never use real cards in test mode."
}
},
"about": {
@@ -3113,7 +3181,11 @@
"packLName": "加强包",
"buyPack": "购买",
"packCheckoutSuccess": "积分包已加入余额!",
"packCheckoutFailed": "无法开始购买。请检查 Stripe 配置或重试。"
"packCheckoutFailed": "无法开始购买。请检查 Stripe 配置或重试。",
"startTrialCta": "免费试用 {days} 天",
"trialFeature": "{days} 天免费试用(需绑定支付方式)",
"trialEndsOn": "您的免费试用将于 {date} 结束,之后将自动扣费。",
"trialEndsLabel": "试用结束"
},
"landing": {
"nav": {
@@ -3295,7 +3367,16 @@
"feature4": "专属支持",
"feature5": "现场入职"
},
"basicPrice": "免费"
"basicPrice": "免费",
"savePercent": "节省约 17%",
"proMonthly": "€9.90",
"proAnnualMonthly": "€8.25",
"businessMonthly": "€29.90",
"businessAnnualMonthly": "€24.92",
"enterprisePrice": "定制方案",
"trialBadge": "{days} 天免费试用",
"trialFeature": "{days} 天免费试用(需绑定支付方式)",
"trialCta": "免费试用 {days} 天"
},
"cta": {
"title": "别再丢掉最好的想法。",