diff --git a/frontend/src/locales/index.ts b/frontend/src/locales/index.ts index 6b9758fb..01755f7f 100644 --- a/frontend/src/locales/index.ts +++ b/frontend/src/locales/index.ts @@ -17,6 +17,7 @@ import reasoningEs from './es/reasoning.json'; import wizardsEs from './es/wizards.json'; import subscriptionEs from './es/subscription.json'; import purchaseOrdersEs from './es/purchase_orders.json'; +import helpEs from './es/help.json'; // English translations import commonEn from './en/common.json'; @@ -37,6 +38,7 @@ import reasoningEn from './en/reasoning.json'; import wizardsEn from './en/wizards.json'; import subscriptionEn from './en/subscription.json'; import purchaseOrdersEn from './en/purchase_orders.json'; +import helpEn from './en/help.json'; // Basque translations import commonEu from './eu/common.json'; @@ -57,6 +59,7 @@ import reasoningEu from './eu/reasoning.json'; import wizardsEu from './eu/wizards.json'; import subscriptionEu from './eu/subscription.json'; import purchaseOrdersEu from './eu/purchase_orders.json'; +import helpEu from './eu/help.json'; // Translation resources by language export const resources = { @@ -79,6 +82,7 @@ export const resources = { wizards: wizardsEs, subscription: subscriptionEs, purchase_orders: purchaseOrdersEs, + help: helpEs, }, en: { common: commonEn, @@ -99,6 +103,7 @@ export const resources = { wizards: wizardsEn, subscription: subscriptionEn, purchase_orders: purchaseOrdersEn, + help: helpEn, }, eu: { common: commonEu, @@ -119,6 +124,7 @@ export const resources = { wizards: wizardsEu, subscription: subscriptionEu, purchase_orders: purchaseOrdersEu, + help: helpEu, }, }; @@ -155,7 +161,7 @@ export const languageConfig = { }; // Namespaces available in translations -export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders'] as const; +export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders', 'help'] as const; export type Namespace = typeof namespaces[number]; // Helper function to get language display name @@ -169,7 +175,7 @@ export const isSupportedLanguage = (language: string): language is SupportedLang }; // Export individual language modules for direct imports -export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu }; +export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu, helpEs, helpEn, helpEu }; // Default export with all translations export default resources; diff --git a/frontend/src/pages/public/DocumentationPage.tsx b/frontend/src/pages/public/DocumentationPage.tsx index 72a54609..673b49c5 100644 --- a/frontend/src/pages/public/DocumentationPage.tsx +++ b/frontend/src/pages/public/DocumentationPage.tsx @@ -39,129 +39,129 @@ interface DocArticle { } const DocumentationPage: React.FC = () => { - const { t } = useTranslation(); + const { t } = useTranslation('help'); const [activeSection, setActiveSection] = useState('getting-started'); const sections: DocSection[] = [ { id: 'getting-started', - title: 'Primeros Pasos', - description: 'Todo lo que necesitas para comenzar', + title: t('categories.gettingStarted.title'), + description: t('categories.gettingStarted.description'), icon: Rocket, articles: [ { id: 'quick-start', - title: 'Guía de Inicio Rápido', - description: 'Configura tu cuenta en 10 minutos', - readTime: '5 min', + title: t('articles.gettingStarted.quickStart.title'), + description: t('articles.gettingStarted.quickStart.description'), + readTime: `${t('articles.gettingStarted.quickStart.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'import-data', - title: 'Importar Datos Históricos', - description: 'Cómo subir tu historial de ventas desde Excel o TPV', - readTime: '8 min', + title: t('articles.gettingStarted.importData.title'), + description: t('articles.gettingStarted.importData.description'), + readTime: `${t('articles.gettingStarted.importData.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'products-catalog', - title: 'Configurar Catálogo de Productos', - description: 'Añade tus productos, recetas e ingredientes', - readTime: '6 min', + title: t('articles.gettingStarted.productsCatalog.title'), + description: t('articles.gettingStarted.productsCatalog.description'), + readTime: `${t('articles.gettingStarted.productsCatalog.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'first-prediction', - title: 'Tu Primera Predicción', - description: 'Interpreta y ajusta las predicciones de demanda', - readTime: '10 min', + title: t('articles.gettingStarted.firstPrediction.title'), + description: t('articles.gettingStarted.firstPrediction.description'), + readTime: `${t('articles.gettingStarted.firstPrediction.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, ], }, { id: 'features', - title: 'Funcionalidades', - description: 'Guías detalladas de cada módulo', + title: t('categories.features.title'), + description: t('categories.features.description'), icon: Package, articles: [ { id: 'demand-forecasting', - title: 'Predicción de Demanda con IA', - description: 'Cómo funciona el algoritmo y cómo sacarle el máximo partido', - readTime: '12 min', + title: t('articles.features.demandForecasting.title'), + description: t('articles.features.demandForecasting.description'), + readTime: `${t('articles.features.demandForecasting.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'production-planning', - title: 'Planificación de Producción', - description: 'Optimiza tu horneado diario basándote en predicciones', - readTime: '10 min', + title: t('articles.features.productionPlanning.title'), + description: t('articles.features.productionPlanning.description'), + readTime: `${t('articles.features.productionPlanning.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'inventory-management', - title: 'Gestión de Inventario', - description: 'Controla stock, proveedores y compras', - readTime: '9 min', + title: t('articles.features.inventoryManagement.title'), + description: t('articles.features.inventoryManagement.description'), + readTime: `${t('articles.features.inventoryManagement.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'pos-integration', - title: 'Punto de Venta (TPV)', - description: 'Registra ventas y sincroniza con predicciones', - readTime: '8 min', + title: t('articles.features.posIntegration.title'), + description: t('articles.features.posIntegration.description'), + readTime: `${t('articles.features.posIntegration.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'waste-tracking', - title: 'Seguimiento de Desperdicios', - description: 'Mide, analiza y reduce el desperdicio alimentario', - readTime: '7 min', + title: t('articles.features.wasteTracking.title'), + description: t('articles.features.wasteTracking.description'), + readTime: `${t('articles.features.wasteTracking.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, ], }, { id: 'analytics', - title: 'Análisis e Insights', - description: 'Interpreta tus datos y métricas', + title: t('categories.analytics.title'), + description: t('categories.analytics.description'), icon: BarChart3, articles: [ { id: 'dashboard-overview', - title: 'Panel de Control', - description: 'Entiende todas las métricas clave de un vistazo', - readTime: '8 min', + title: t('articles.analytics.dashboardOverview.title'), + description: t('articles.analytics.dashboardOverview.description'), + readTime: `${t('articles.analytics.dashboardOverview.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'reports', - title: 'Informes y Reportes', - description: 'Genera y exporta informes personalizados', - readTime: '10 min', + title: t('articles.analytics.reports.title'), + description: t('articles.analytics.reports.description'), + readTime: `${t('articles.analytics.reports.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'ai-insights', - title: 'Insights de IA', - description: 'Descubre patrones y oportunidades automáticamente', - readTime: '12 min', + title: t('articles.analytics.aiInsights.title'), + description: t('articles.analytics.aiInsights.description'), + readTime: `${t('articles.analytics.aiInsights.readTime')} ${t('docs.readTime')}`, difficulty: 'advanced', }, { id: 'performance-metrics', - title: 'Métricas de Rendimiento', - description: 'KPIs clave: márgenes, rotación, precisión de predicciones', - readTime: '15 min', + title: t('articles.analytics.performanceMetrics.title'), + description: t('articles.analytics.performanceMetrics.description'), + readTime: `${t('articles.analytics.performanceMetrics.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, ], }, { id: 'account', - title: 'Gestión de Cuenta', - description: 'Administra tu perfil y equipo', + title: t('categories.account.title'), + description: t('categories.account.description'), icon: Settings, articles: [ { @@ -196,8 +196,8 @@ const DocumentationPage: React.FC = () => { }, { id: 'billing', - title: 'Facturación y Planes', - description: 'Suscripciones, pagos y facturas', + title: t('categories.billing.title'), + description: t('categories.billing.description'), icon: CreditCard, articles: [ { @@ -232,8 +232,8 @@ const DocumentationPage: React.FC = () => { }, { id: 'privacy', - title: 'Privacidad y Seguridad', - description: 'RGPD, datos y cumplimiento', + title: t('categories.privacy.title'), + description: t('categories.privacy.description'), icon: Shield, articles: [ { @@ -284,16 +284,7 @@ const DocumentationPage: React.FC = () => { }; const getDifficultyLabel = (difficulty: string) => { - switch (difficulty) { - case 'beginner': - return 'Principiante'; - case 'intermediate': - return 'Intermedio'; - case 'advanced': - return 'Avanzado'; - default: - return difficulty; - } + return t(`difficulty.${difficulty}` as any) || difficulty; }; return ( @@ -313,14 +304,13 @@ const DocumentationPage: React.FC = () => {
- Documentación + {t('docs.subtitle')}

- Guías Completas Para - Dominar Panadería IA + {t('docs.title')}

- Tutoriales paso a paso, mejores prácticas y trucos para aprovechar al máximo la plataforma + {t('docs.description')}

{/* Quick Actions */} @@ -331,14 +321,14 @@ const DocumentationPage: React.FC = () => { className="inline-flex items-center gap-2 px-6 py-3 bg-[var(--color-primary)] text-white rounded-xl font-bold hover:shadow-xl transition-all hover:scale-105" > - Comenzar + {t('docs.getStarted')} - Centro de Ayuda + {t('docs.backToHelp')}
@@ -353,7 +343,7 @@ const DocumentationPage: React.FC = () => {

- Secciones + {t('docs.sectionsTitle')}

@@ -384,7 +374,7 @@ const DocumentationPage: React.FC = () => { {/* Quick Links */}

- Enlaces Rápidos + {t('docs.quickLinks')}

{ className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary)] transition-colors" > - Centro de Ayuda + {t('docs.backToHelp')} - Contactar Soporte + {t('docs.contactSupport')} - Descargar PDF + {t('docs.downloadPdf')}
@@ -473,10 +463,10 @@ const DocumentationPage: React.FC = () => {

- Tutoriales en Vídeo + {t('docs.videoTutorialsTitle')}

- Aprende viendo (próximamente) + {t('docs.videoTutorialsSubtitle')}

@@ -524,7 +514,7 @@ const DocumentationPage: React.FC = () => {

- Recursos Adicionales + {t('docs.additionalResourcesTitle')}

@@ -532,39 +522,39 @@ const DocumentationPage: React.FC = () => {

- Glosario de Términos + {t('resources.glossary.title')}

- Definiciones de conceptos clave y terminología técnica + {t('resources.glossary.description')}

- Ver Glosario → + {t('resources.glossary.action')} →

- Solución de Problemas + {t('resources.troubleshooting.title')}

- Errores comunes y cómo resolverlos rápidamente + {t('resources.troubleshooting.description')}

- Ver Soluciones → + {t('resources.troubleshooting.action')} →

- Mejores Prácticas + {t('resources.bestPractices.title')}

- Tips y consejos de expertos para optimizar tu uso + {t('resources.bestPractices.description')}

- Leer Tips → + {t('resources.bestPractices.action')} →
@@ -575,16 +565,16 @@ const DocumentationPage: React.FC = () => {

- ¿Listo Para Empezar? + {t('docs.ctaTitle')}

- Regístrate en el programa piloto y obtén 3 meses gratis + {t('docs.ctaSubtitle')}

- Crear Cuenta Gratis + {t('docs.ctaButton')}
diff --git a/frontend/src/pages/public/HelpCenterPage.tsx b/frontend/src/pages/public/HelpCenterPage.tsx index 54c86293..52fecbf5 100644 --- a/frontend/src/pages/public/HelpCenterPage.tsx +++ b/frontend/src/pages/public/HelpCenterPage.tsx @@ -37,132 +37,56 @@ interface HelpCategory { } const HelpCenterPage: React.FC = () => { - const { t } = useTranslation(); + const { t } = useTranslation('help'); const [searchQuery, setSearchQuery] = useState(''); const [expandedFAQ, setExpandedFAQ] = useState(null); const categories: HelpCategory[] = [ { id: 'getting-started', - title: 'Primeros Pasos', - description: 'Configura tu cuenta y aprende los conceptos básicos', + title: t('categories.gettingStarted.title'), + description: t('categories.gettingStarted.description'), icon: BookOpen, link: '/help/docs#getting-started', }, { id: 'features', - title: 'Funcionalidades', - description: 'Guías completas sobre todas las características', + title: t('categories.features.title'), + description: t('categories.features.description'), icon: Package, link: '/help/docs#features', }, { id: 'billing', - title: 'Facturación y Planes', - description: 'Información sobre precios, pagos y suscripciones', + title: t('categories.billing.title'), + description: t('categories.billing.description'), icon: CreditCard, link: '/help/docs#billing', }, { id: 'account', - title: 'Gestión de Cuenta', - description: 'Administra tu perfil, equipo y configuración', + title: t('categories.account.title'), + description: t('categories.account.description'), icon: Settings, link: '/help/docs#account', }, { id: 'privacy', - title: 'Privacidad y Seguridad', - description: 'RGPD, seguridad de datos y cumplimiento', + title: t('categories.privacy.title'), + description: t('categories.privacy.description'), icon: Shield, link: '/help/docs#privacy', }, { id: 'analytics', - title: 'Análisis y Predicciones', - description: 'Interpreta datos e insights de IA', + title: t('categories.analytics.title'), + description: t('categories.analytics.description'), icon: TrendingUp, link: '/help/docs#analytics', }, ]; - const faqs: FAQItem[] = [ - { - category: 'general', - question: '¿Qué es Panadería IA y cómo funciona?', - answer: 'Panadería IA es una plataforma de gestión inteligente para panaderías. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas.', - }, - { - category: 'general', - question: '¿Cuánto tiempo toma configurar el sistema?', - answer: 'La configuración inicial toma entre 10-15 minutos. Necesitas: 1) Crear tu cuenta, 2) Subir tu catálogo de productos, 3) Importar historial de ventas (opcional pero recomendado), 4) Configurar preferencias básicas. El sistema empieza a generar predicciones desde el primer día, mejorando su precisión con el tiempo.', - }, - { - category: 'general', - question: '¿Necesito conocimientos técnicos para usarlo?', - answer: 'No. Panadería IA está diseñado para panaderos, no para ingenieros. La interfaz es intuitiva, con tutoriales paso a paso. Si sabes usar WhatsApp o un correo electrónico, puedes usar nuestra plataforma. Además, ofrecemos soporte 24/7 en español.', - }, - { - category: 'pricing', - question: '¿Cuánto cuesta el programa piloto?', - answer: 'El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras. Las primeras 20 panaderías obtienen este beneficio.', - }, - { - category: 'pricing', - question: '¿Necesito tarjeta de crédito para empezar el piloto?', - answer: 'SÍ, necesitas registrar una tarjeta, pero NO se te cobrará durante los 3 meses de prueba gratuita. Esto nos ayuda a asegurar que solo participan panaderías realmente interesadas. Puedes cancelar antes de que termine el periodo gratuito sin ningún cargo.', - }, - { - category: 'pricing', - question: '¿Qué pasa después de los 3 meses gratis?', - answer: 'Tienes 3 opciones: 1) Continuar con el plan Basic (€49/mes con tu descuento del 20%), 2) Actualizar a un plan superior, 3) Cancelar sin penalización. Te avisaremos 7 días antes de que termine tu periodo gratuito.', - }, - { - category: 'technical', - question: '¿Cómo importo mis datos históricos de ventas?', - answer: 'Aceptamos varios formatos: Excel (.xlsx), CSV, o exportaciones directas de tu TPV si es compatible. También puedes introducir datos manualmente si prefieres. Cuanto más historial proporciones (recomendamos mínimo 3 meses), más precisas serán las predicciones.', - }, - { - category: 'technical', - question: '¿El sistema se integra con mi TPV actual?', - answer: 'Actualmente estamos trabajando en integraciones directas con los principales TPV del mercado español. Por ahora, puedes exportar datos de tu TPV e importarlos manualmente (es más fácil de lo que suena). Las integraciones automáticas llegarán en Q2 2025.', - }, - { - category: 'technical', - question: '¿Qué pasa si mis predicciones no son precisas?', - answer: 'El sistema mejora con el tiempo. Las primeras semanas puede tener un margen de error del 15-20%. Después del primer mes, esto baja al 10%. Con 3+ meses de datos, alcanzamos >90% de precisión. Puedes ajustar manualmente las predicciones y el sistema aprende de tus correcciones.', - }, - { - category: 'privacy', - question: '¿Dónde se almacenan mis datos?', - answer: 'TODOS tus datos se almacenan en servidores físicamente ubicados en España (Barcelona y Madrid), cumpliendo 100% con RGPD. Nunca compartimos, vendemos ni transferimos tus datos fuera de la UE. Tienes control total y puedes exportar o eliminar tus datos en cualquier momento.', - }, - { - category: 'privacy', - question: '¿Quién puede ver mis datos de ventas?', - answer: 'Solo TÚ y los miembros de tu equipo que tú autorices. Ni siquiera nuestro equipo técnico puede acceder a tus datos sin tu permiso explícito (y solo lo haríamos para soporte técnico con tu aprobación). Los datos están encriptados end-to-end.', - }, - { - category: 'support', - question: '¿Qué tipo de soporte ofrecen?', - answer: 'Soporte 24/7 en español por: Email (respuesta en <4h), Chat en vivo (9:00-21:00), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp. Además, biblioteca completa de tutoriales en vídeo.', - }, - { - category: 'support', - question: '¿Puedo hablar con alguien antes de registrarme?', - answer: 'Por supuesto. Agenda una videollamada de 15 minutos con nuestro equipo para ver el producto en acción, hacer todas tus preguntas y confirmar que es adecuado para tu panadería. Sin compromiso. Contacto: hola@panaderia-ia.com o el formulario de contacto.', - }, - { - category: 'general', - question: '¿Funciona para obradores centrales con múltiples puntos de venta?', - answer: 'SÍ. Nuestro sistema está diseñado para adaptarse a ambos modelos: producción local (un solo punto) y obrador central con distribución a múltiples puntos de venta. Para obradores centrales, ofrecemos predicción de demanda agregada y granular por cada POS, gestión de distribución multi-ubicación, y un dashboard centralizado con visibilidad por punto de venta. La IA optimiza tanto la producción total como la distribución entre ubicaciones.', - }, - { - category: 'general', - question: '¿Qué modelo de negocio es mejor para mi panadería?', - answer: 'Depende de tus objetivos. Producción Local es ideal si valoras máximo control, flexibilidad y frescura instantánea, o si estás empezando. Obrador Central + Puntos de Venta es mejor si quieres escalar a múltiples ubicaciones, aprovechar economías de escala, o tener presencia en varios barrios/ciudades. Lo bueno: nuestro sistema funciona para ambos modelos y puede evolucionar contigo si decides cambiar o crecer.', - }, - ]; + const faqs: FAQItem[] = t('faqs', { returnObjects: true }) as FAQItem[]; const filteredFAQs = searchQuery ? faqs.filter( @@ -193,14 +117,13 @@ const HelpCenterPage: React.FC = () => {
- Centro de Ayuda + {t('helpCenter.subtitle')}

- ¿Cómo Podemos - Ayudarte Hoy? + {t('helpCenter.title')}

- Encuentra respuestas rápidas, guías completas y contacto directo con nuestro equipo + {t('helpCenter.description')}

{/* Search Bar */} @@ -209,7 +132,7 @@ const HelpCenterPage: React.FC = () => { setSearchQuery(e.target.value)} className="w-full pl-12 pr-4 py-4 bg-[var(--bg-primary)] border-2 border-[var(--border-primary)] rounded-xl text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] focus:outline-none focus:border-[var(--color-primary)] transition-colors" @@ -225,10 +148,10 @@ const HelpCenterPage: React.FC = () => {

- Explora por Categoría + {t('helpCenter.categoriesTitle')}

- Encuentra lo que necesitas más rápido + {t('helpCenter.categoriesSubtitle')}

@@ -261,11 +184,11 @@ const HelpCenterPage: React.FC = () => {

- Preguntas Frecuentes + {t('helpCenter.faqTitle')}

- {filteredFAQs.length} {filteredFAQs.length === 1 ? 'respuesta' : 'respuestas'}{' '} - {searchQuery && 'encontradas'} + {t('helpCenter.faqResultsCount', { count: filteredFAQs.length })}{' '} + {searchQuery && t('helpCenter.faqFound')}

@@ -301,9 +224,9 @@ const HelpCenterPage: React.FC = () => {

- No encontramos resultados para "{searchQuery}".{' '} + {t('helpCenter.noResultsTitle')} "{searchQuery}".{' '} - Contacta con soporte + {t('helpCenter.noResultsAction')}

@@ -316,10 +239,10 @@ const HelpCenterPage: React.FC = () => {

- ¿No Encuentras lo Que Buscas? + {t('helpCenter.contactTitle')}

- Nuestro equipo está aquí para ayudarte + {t('helpCenter.contactSubtitle')}

@@ -332,31 +255,31 @@ const HelpCenterPage: React.FC = () => {

- Chat en Vivo + {t('contact.liveChat.title')}

- Respuesta inmediata de 9:00 a 21:00 + {t('contact.liveChat.description')}

- Iniciar Chat → + {t('contact.liveChat.action')} →

- Email + {t('contact.email.title')}

- Respuesta en menos de 4 horas + {t('contact.email.description')}

- Enviar Email → + {t('contact.email.action')} →
@@ -368,13 +291,13 @@ const HelpCenterPage: React.FC = () => {

- Documentación + {t('contact.documentation.title')}

- Guías completas y tutoriales + {t('contact.documentation.description')}

- Ver Docs → + {t('contact.documentation.action')} →
@@ -389,12 +312,12 @@ const HelpCenterPage: React.FC = () => {

- Horario de Atención + {t('helpCenter.contactHours')}

-

Chat en Vivo: Lunes a Viernes 9:00 - 21:00, Sábados 10:00 - 18:00

-

Email: 24/7 (respuesta en menos de 4 horas en horario laboral)

-

Teléfono: Lunes a Viernes 10:00 - 19:00 (solo para clientes activos)

+

{t('contact.liveChat.title')}: {t('contact.hours.liveChat')}

+

{t('contact.email.title')}: {t('contact.hours.email')}

+

Teléfono: {t('contact.hours.phone')}