From 842bde481fb82d792f1181d9fe3fc412f2f13f8d Mon Sep 17 00:00:00 2001 From: "dev.daminik00" Date: Tue, 22 Jul 2025 01:38:43 +0300 Subject: [PATCH] add es and fix translations --- messages/de.json | 2 +- messages/en.json | 2 +- messages/es.json | 217 ++++++++++++++++++ .../SubscriptionTable/SubscriptionTable.tsx | 33 ++- src/i18n/routing.ts | 2 +- 5 files changed, 241 insertions(+), 15 deletions(-) create mode 100644 messages/es.json diff --git a/messages/de.json b/messages/de.json index 8cd816f..053cc8d 100644 --- a/messages/de.json +++ b/messages/de.json @@ -54,7 +54,7 @@ "subscription_status": "Subscription Status", "subscription_status_value": { "ACTIVE": "Active", - "CANCELLED": "Cancels on " + "CANCELLED": "Cancels on {date}" }, "billing_period": "Billing Period", "billing_period_value": { diff --git a/messages/en.json b/messages/en.json index ab6a1c2..0a9fe91 100644 --- a/messages/en.json +++ b/messages/en.json @@ -55,7 +55,7 @@ "subscription_status": "Subscription Status", "subscription_status_value": { "ACTIVE": "Active", - "CANCELLED": "Cancels on ", + "CANCELLED": "Cancels on {date}", "PAST_DUE": "Past due" }, "billing_period": "Billing Period", diff --git a/messages/es.json b/messages/es.json new file mode 100644 index 0000000..45ed41e --- /dev/null +++ b/messages/es.json @@ -0,0 +1,217 @@ +{ + "HomePage": { + "title": "¡Hola mundo!", + "about": "Ir a la página acerca de" + }, + "Profile": { + "profile_information": { + "title": "Información del Perfil", + "description": "Para actualizar tu dirección de correo electrónico, por favor contacta al soporte.", + "email_placeholder": "Correo electrónico", + "name_placeholder": "Nombre" + }, + "billing": { + "title": "Facturación", + "description": "Para acceder a la información de tu suscripción, por favor inicia sesión en tu cuenta de facturación.", + "subscription_type": "Tipo de Suscripción:", + "billing_button": "Facturación", + "credits": { + "title": "Te quedan {credits} créditos", + "description": "Puedes usarlos para chatear con cualquier Experto en la plataforma." + }, + "any_questions": "¿Alguna pregunta? {linkText}", + "any_questions_link": "Contáctanos", + "subscription_update": "{subscriptionUpdateBold}

Si acabas de comprar o cambiar de plan, el estado de tu suscripción cambiará en unas horas.", + "subscription_update_bold": "La información de la suscripción se actualiza cada pocas horas." + }, + "log_out": { + "title": "Cerrar sesión", + "log_out_button": "Cerrar sesión", + "modal": { + "title": "¿Estás seguro de que quieres cerrar sesión?", + "description": "¿Estás seguro de que quieres cerrar sesión?", + "stay_button": "Quedarse", + "log_out_button": "Cerrar sesión" + } + } + }, + "Subscriptions": { + "title": "Gestionar mis suscripciones", + "success_cancel_message": "Tu suscripción ha sido cancelada exitosamente", + "modal": { + "title": "¿Estás seguro de que quieres cancelar tu suscripción?", + "description": "¿Estás seguro de que quieres cancelar tu suscripción?", + "cancel_button": "Cancelar suscripción", + "stay_button": "Quedarse" + }, + "table": { + "subscription_type": "Tipo de Suscripción", + "subscription_type_value": { + "DAY": "Suscripción Diaria", + "WEEK": "Suscripción Semanal", + "MONTH": "Suscripción Mensual", + "YEAR": "Suscripción Anual" + }, + "subscription_status": "Estado de la Suscripción", + "subscription_status_value": { + "ACTIVE": "Activa", + "CANCELLED": "Se cancela el {date}", + "PAST_DUE": "Vencida" + }, + "billing_period": "Período de Facturación", + "billing_period_value": { + "DAY": "Día", + "WEEK": "Semana", + "MONTH": "Mes", + "YEAR": "Año" + }, + "last_payment_on": "Último Pago el", + "renewal_date": "Fecha de Renovación", + "renewal_amount": "Monto de Renovación", + "cancel_subscription": "Cancelar Suscripción" + }, + "no_subscriptions": "No tienes ninguna suscripción", + "error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde.", + "try_again": "Intentar de nuevo" + }, + "CancelSubscription": { + "title": "Lamentamos que te vayas…", + "description": "Muchos se van justo en el momento en que el astrólogo comienza a ver el punto de inflexión en su historia.



Permítenos hacer un par de preguntas para mejorar nuestro servicio - y tal vez ofrecer una solución que se adapte mejor a ti.", + "stay_button": "Quedarse y reducir mi plan en 50%", + "cancel_button": "Cancelar", + "error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "Stay50Done": { + "title": "¡Valoramos tu elección!", + "descriptions": { + "1": "Plan cambiado exitosamente" + }, + "button": "Listo" + }, + "AppreciateChoice": { + "title": "¡Valoramos tu elección!", + "descriptions": { + "1": "Seleccionando la solución óptima...", + "2": "Creando encuesta personalizada...", + "3": "Formando oferta ventajosa..." + }, + "button": "Siguiente" + }, + "WhatReason": { + "title": "¿Cuál fue la razón?", + "answers": { + "no_promised_result": "No obtuve el resultado prometido", + "too_expensive": "Muy caro", + "no_time": "No tengo tiempo", + "technical_issues": "Problemas técnicos", + "dislike_app": "No me gustó la aplicación", + "hard_to_navigate": "Es difícil navegar en la aplicación", + "other": "Otro" + } + }, + "Payment": { + "Success": { + "title": "Pago exitoso", + "button": "Listo" + }, + "Error": { + "title": "Pago fallido", + "button": "Intentar de nuevo" + } + }, + "SecondChance": { + "title": "Danos una segunda oportunidad y obtén el mejor plan GRATIS", + "offers": { + "1": { + "title": "Plan gratuito por

1 mes", + "description": "Usa todo el potencial de AURA y aún más.", + "old-price": "1900", + "new-price": "0" + }, + "2": { + "title": "Plan premium gratuito", + "description": "Consulta gratuita de 30 min con un Asesor premium", + "old-price": "4900", + "new-price": "0" + } + }, + "get_offer": "Obtener plan gratuito", + "cancel": "Cancelar", + "error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "ChangeMind": { + "title": "¿Qué podría cambiar tu opinión?", + "answers": { + "more_chat_time": "Más tiempo de chat", + "more_personal_reports": "Más reportes personalizados", + "individual_plan": "Plan individual", + "other": "Otro" + } + }, + "StopFor30Days": { + "title": "Pausa la suscripción por treinta días. Sin cargos.", + "stop": "Pausar", + "cancel": "Cancelar", + "error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "CancellationOfSubscription": { + "title": "¡La suscripción será cancelada!", + "description": "Para cancelar la suscripción, presiona \"Confirmo mis acciones\"", + "offer": { + "title": "Plan gratuito de 2 meses", + "old-price": "9900", + "new-price": "0" + }, + "offer_button": "Aplicar", + "cancel_button": "Confirmo mis acciones", + "error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde.", + "toast_message": "¡Tu suscripción será cancelada!" + }, + "PlanCancelled": { + "title": "¡Plan Estándar Cancelado!", + "icon": "🥳", + "description": "Transición completada al plan gratuito de treinta días", + "button": "Listo" + }, + "SubscriptionStopped": { + "title": "¡Suscripción pausada exitosamente!", + "icon": "🎉" + }, + "DatePicker": { + "year": "AAAA", + "month": "MM", + "day": "DD" + }, + "TimePicker": { + "hour": "HH", + "minute": "MM", + "period": "AM/PM" + }, + "Compatibility": { + "title": "Tu Tipo de Personalidad", + "description": "Por favor ingresa tus datos para crear el reporte.", + "button": "Continuar", + "error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "CompatibilityResult": { + "title": "Tu Tipo de Personalidad", + "error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "PalmistryResult": { + "title": "Tu Tipo de Personalidad", + "error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde." + }, + "Meditation": { + "title": "Para y respira para ayudarte a relajar y enfocarte en lo que realmente importa.", + "subtitle": "La práctica de respiración ayudará a mejorar tu aura. Inhala la energía positiva, exhala la negativa...", + "button": "COMENZAR" + }, + "MeditationResult": { + "breath_relax": "Respira y Relájate", + "breath_in": "Inhalar", + "breath_out": "Exhalar" + }, + "ActionFieldsForm": { + "required_field": "Este campo es obligatorio" + } +} diff --git a/src/components/domains/profile/subscriptions/SubscriptionTable/SubscriptionTable.tsx b/src/components/domains/profile/subscriptions/SubscriptionTable/SubscriptionTable.tsx index dd569a6..bf55aaa 100644 --- a/src/components/domains/profile/subscriptions/SubscriptionTable/SubscriptionTable.tsx +++ b/src/components/domains/profile/subscriptions/SubscriptionTable/SubscriptionTable.tsx @@ -1,6 +1,6 @@ "use client"; -import { ReactNode, useMemo } from "react"; +import { ReactNode, useCallback, useMemo } from "react"; import { useTranslations } from "next-intl"; import { Button, Typography } from "@/components/ui"; @@ -22,6 +22,24 @@ export default function SubscriptionTable({ subscription }: ITableProps) { const t = useTranslations("Subscriptions"); const { open } = useCancelSubscriptionModal(); + const getSubscriptionStatusText = useCallback(() => { + if (subscription.subscriptionStatus === "CANCELLED") { + if (subscription.cancellationDate) { + const formattedDate = formatDate(subscription.cancellationDate); + if (formattedDate) { + return t( + `table.subscription_status_value.${subscription.subscriptionStatus}`, + { + date: formattedDate, + } + ); + } + } + return "Cancelled"; + } + return t(`table.subscription_status_value.${subscription.subscriptionStatus}`); + }, [subscription.subscriptionStatus, subscription.cancellationDate, t]); + const tableData: ReactNode[][] = useMemo(() => { const data: ReactNode[][] = [ [ @@ -30,16 +48,7 @@ export default function SubscriptionTable({ subscription }: ITableProps) { ], [ t("table.subscription_status"), - subscription.subscriptionStatus === "CANCELLED" && subscription.cancellationDate - ? t( - `table.subscription_status_value.${subscription.subscriptionStatus}`, - { - date: formatDate(subscription.cancellationDate) as string, - } - ) - : subscription.subscriptionStatus === "CANCELLED" - ? "Cancelled" - : t(`table.subscription_status_value.${subscription.subscriptionStatus}`), + getSubscriptionStatusText(), ], [ t("table.billing_period"), @@ -71,7 +80,7 @@ export default function SubscriptionTable({ subscription }: ITableProps) { } return data; - }, [subscription, t, open]); + }, [subscription, t, open, getSubscriptionStatusText]); return ; } diff --git a/src/i18n/routing.ts b/src/i18n/routing.ts index da1c548..8387bce 100644 --- a/src/i18n/routing.ts +++ b/src/i18n/routing.ts @@ -2,7 +2,7 @@ import { defineRouting } from "next-intl/routing"; export const routing = defineRouting({ // A list of all locales that are supported - locales: ["en", "de"], + locales: ["en", "de", "es"], // Used when no locale matches defaultLocale: "en",