Improve frontend traslations

This commit is contained in:
Urtzi Alfaro
2025-11-18 22:17:56 +01:00
parent 8c6393ea14
commit bbf6658759
27 changed files with 424 additions and 462 deletions

View File

@@ -282,10 +282,10 @@ const LandingPage: React.FC = () => {
</div>
<div className="flex-1">
<h3 className="text-2xl lg:text-3xl font-bold text-[var(--text-primary)] mb-4">
{t('landing:pillar1.title', '🎯 Predice Demanda con Datos de Tu Zona')}
{t('landing:pillars.pillar1.title', '🎯 Predice Demanda con Datos de Tu Zona')}
</h3>
<p className="text-lg text-[var(--text-secondary)] mb-6">
{t('landing:pillar1.intro', 'IA que conoce tu barrio, no solo el calendario. Sabe que el colegio de al lado cierra en agosto, que los viernes hay mercado en tu plaza, y que abrió otra panadería a 500m.')}
{t('landing:pillars.pillar1.intro', 'IA que conoce tu barrio, no solo el calendario. Sabe que el colegio de al lado cierra en agosto, que los viernes hay mercado en tu plaza, y que abrió otra panadería a 500m.')}
</p>
<div className="grid md:grid-cols-2 gap-4">
@@ -293,44 +293,44 @@ const LandingPage: React.FC = () => {
<div className="flex items-center gap-3 mb-2">
<School className="w-5 h-5 text-blue-600" />
<h4 className="font-bold text-[var(--text-primary)]">
{t('landing:pillar1.schools', 'Colegios y Oficinas Cerca')}
{t('landing:pillars.pillar1.schools', 'Colegios y Oficinas Cerca')}
</h4>
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar1.schools_desc', 'Sabe cuándo hay vacaciones, horarios de oficina, eventos escolares')}
{t('landing:pillars.pillar1.schools_desc', 'Sabe cuándo hay vacaciones, horarios de oficina, eventos escolares')}
</p>
</div>
<div className="bg-[var(--bg-secondary)] rounded-lg p-4">
<div className="flex items-center gap-3 mb-2">
<Building2 className="w-5 h-5 text-purple-600" />
<h4 className="font-bold text-[var(--text-primary)]">
{t('landing:pillar1.competition', 'Tu Competencia')}
{t('landing:pillars.pillar1.competition', 'Tu Competencia')}
</h4>
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar1.competition_desc', 'Detecta nuevas panaderías en tu zona y ajusta predicciones')}
{t('landing:pillars.pillar1.competition_desc', 'Detecta nuevas panaderías en tu zona y ajusta predicciones')}
</p>
</div>
<div className="bg-[var(--bg-secondary)] rounded-lg p-4">
<div className="flex items-center gap-3 mb-2">
<Cloud className="w-5 h-5 text-sky-600" />
<h4 className="font-bold text-[var(--text-primary)]">
{t('landing:pillar1.weather', 'Clima Local (AEMET)')}
{t('landing:pillars.pillar1.weather', 'Clima Local')}
</h4>
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar1.weather_desc', 'Lluvia → menos croissants. Calor → más productos frescos')}
{t('landing:pillars.pillar1.weather_desc', 'Lluvia → menos croissants. Calor → más productos frescos')}
</p>
</div>
<div className="bg-[var(--bg-secondary)] rounded-lg p-4">
<div className="flex items-center gap-3 mb-2">
<Target className="w-5 h-5 text-amber-600" />
<h4 className="font-bold text-[var(--text-primary)]">
{t('landing:pillar1.events', 'Eventos y Festivales')}
{t('landing:pillars.pillar1.events', 'Eventos y Festivales')}
</h4>
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar1.events_desc', 'Fiestas del barrio, mercadillos, partidos importantes')}
{t('landing:pillars.pillar1.events_desc', 'Fiestas del barrio, mercadillos, partidos importantes')}
</p>
</div>
</div>
@@ -352,48 +352,48 @@ const LandingPage: React.FC = () => {
</div>
<div className="flex-1">
<h3 className="text-2xl lg:text-3xl font-bold text-[var(--text-primary)] mb-4">
{t('landing:pillar2.title', '🤖 Sistema Automático Cada Mañana')}
{t('landing:pillars.pillar2.title', '🤖 Sistema Automático Cada Mañana')}
</h3>
<p className="text-lg text-[var(--text-secondary)] mb-6">
{t('landing:pillar2.intro', 'Despierta con todo el trabajo hecho. A las 5:30 AM el sistema ya predijo ventas, planificó producción, gestionó inventario y creó pedidos a proveedores.')}
{t('landing:pillars.pillar2.intro', 'Despierta con todo el trabajo hecho. A las 5:30 AM el sistema ya predijo ventas, planificó producción, gestionó inventario y creó pedidos a proveedores.')}
</p>
<div className="space-y-3">
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<p className="text-[var(--text-secondary)]">
<strong>{t('landing:pillar2.step1', 'Predice ventas de hoy:')}</strong> {t('landing:pillar2.step1_desc', '"Harás 80 croissants, 120 barras"')}
<strong>{t('landing:pillars.pillar2.step1', 'Predice ventas de hoy:')}</strong> {t('landing:pillars.pillar2.step1_desc', '"Harás 80 croissants, 120 barras"')}
</p>
</div>
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<p className="text-[var(--text-secondary)]">
<strong>{t('landing:pillar2.step2', 'Planifica producción:')}</strong> {t('landing:pillar2.step2_desc', 'Lista exacta de lo que hornear')}
<strong>{t('landing:pillars.pillar2.step2', 'Planifica producción:')}</strong> {t('landing:pillars.pillar2.step2_desc', 'Lista exacta de lo que hornear')}
</p>
</div>
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<p className="text-[var(--text-secondary)]">
<strong>{t('landing:pillar2.step3', 'Gestiona inventario:')}</strong> {t('landing:pillar2.step3_desc', 'Proyecta 7 días → "Te quedarás sin harina en 4 días, pide 50kg hoy"')}
<strong>{t('landing:pillars.pillar2.step3', 'Gestiona inventario:')}</strong> {t('landing:pillars.pillar2.step3_desc', 'Proyecta 7 días → "Te quedarás sin harina en 4 días, pide 50kg hoy"')}
</p>
</div>
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<p className="text-[var(--text-secondary)]">
<strong>{t('landing:pillar2.step4', 'Previene desperdicios:')}</strong> {t('landing:pillar2.step4_desc', '"Leche caduca en 5 días, no pidas más de 15L"')}
<strong>{t('landing:pillars.pillar2.step4', 'Previene desperdicios:')}</strong> {t('landing:pillars.pillar2.step4_desc', '"Leche caduca en 5 días, no pidas más de 15L"')}
</p>
</div>
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<p className="text-[var(--text-secondary)]">
<strong>{t('landing:pillar2.step5', 'Crea pedidos:')}</strong> {t('landing:pillar2.step5_desc', 'Listos para aprobar con 1 clic')}
<strong>{t('landing:pillars.pillar2.step5', 'Crea pedidos:')}</strong> {t('landing:pillars.pillar2.step5_desc', 'Listos para aprobar con 1 clic')}
</p>
</div>
</div>
<div className="mt-6 bg-gradient-to-r from-blue-50 to-indigo-50 dark:from-blue-900/20 dark:to-indigo-900/20 rounded-lg p-4 border-l-4 border-blue-600">
<p className="font-bold text-[var(--text-primary)]">
{t('landing:pillar2.key', '🔑 Nunca llegas al punto de quedarte sin stock. El sistema lo previene 7 días antes.')}
{t('landing:pillars.pillar2.key', '🔑 Nunca llegas al punto de quedarte sin stock. El sistema lo previene 7 días antes.')}
</p>
</div>
</div>
@@ -408,45 +408,45 @@ const LandingPage: React.FC = () => {
</div>
<div className="flex-1">
<h3 className="text-2xl lg:text-3xl font-bold text-[var(--text-primary)] mb-4">
{t('landing:pillar3.title', 'Tus Datos, Tu Impacto Ambiental')}
{t('landing:pillars.pillar3.title', 'Tus Datos, Tu Impacto Ambiental')}
</h3>
<p className="text-lg text-[var(--text-secondary)] mb-6">
{t('landing:pillar3.intro', '100% de tus datos te pertenecen. Mide tu impacto ambiental automáticamente y genera informes de sostenibilidad que cumplen con los estándares internacionales.')}
{t('landing:pillars.pillar3.intro', '100% de tus datos te pertenecen. Mide tu impacto ambiental automáticamente y genera informes de sostenibilidad que cumplen con los estándares internacionales.')}
</p>
<div className="grid md:grid-cols-3 gap-4 mb-6">
<div className="bg-[var(--bg-secondary)] rounded-lg p-4 text-center">
<div className="text-3xl font-bold text-green-600 mb-2">
{t('landing:pillar3.data_ownership_value', '100%')}
{t('landing:pillars.pillar3.data_ownership_value', '100%')}
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar3.data_ownership', 'Propiedad de datos')}
{t('landing:pillars.pillar3.data_ownership', 'Propiedad de datos')}
</p>
</div>
<div className="bg-[var(--bg-secondary)] rounded-lg p-4 text-center">
<div className="text-3xl font-bold text-blue-600 mb-2">
{t('landing:pillar3.co2_metric', 'CO₂')}
{t('landing:pillars.pillar3.co2_metric', 'CO₂')}
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar3.co2', 'Medición automática')}
{t('landing:pillars.pillar3.co2', 'Medición automática')}
</p>
</div>
<div className="bg-[var(--bg-secondary)] rounded-lg p-4 text-center">
<div className="text-3xl font-bold text-amber-600 mb-2">
{t('landing:pillar3.sdg_value', 'ODS 12.3')}
{t('landing:pillars.pillar3.sdg_value', 'ODS 12.3')}
</div>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar3.sdg', 'Seguimiento de cumplimiento')}
{t('landing:pillars.pillar3.sdg', 'Seguimiento de cumplimiento')}
</p>
</div>
</div>
<div className="bg-gradient-to-r from-green-50 to-emerald-50 dark:from-green-900/20 dark:to-emerald-900/20 rounded-lg p-4 border-l-4 border-green-600">
<p className="font-bold text-[var(--text-primary)] mb-2">
{t('landing:pillar3.sustainability_title', 'Informes de Sostenibilidad Automatizados')}
{t('landing:pillars.pillar3.sustainability_title', 'Informes de Sostenibilidad Automatizados')}
</p>
<p className="text-sm text-[var(--text-secondary)]">
{t('landing:pillar3.sustainability_desc', 'Genera informes que cumplen con los estándares internacionales de sostenibilidad y reducción de desperdicio alimentario')}
{t('landing:pillars.pillar3.sustainability_desc', 'Genera informes que cumplen con los estándares internacionales de sostenibilidad y reducción de desperdicio alimentario')}
</p>
</div>
</div>
@@ -456,7 +456,7 @@ const LandingPage: React.FC = () => {
{/* Link to Features Page */}
<div className="mt-12 text-center">
<Link to="/features" className="inline-flex items-center gap-2 text-[var(--color-primary)] hover:text-[var(--color-primary-dark)] font-semibold text-lg group">
<Link to="/features" className="inline-flex items-center gap-2 text-[var(--color-primary)] hover:text-white font-semibold text-lg group px-6 py-3 rounded-lg transition-all duration-200 hover:bg-[var(--color-primary)] no-underline">
{t('landing:pillars.see_all', 'Ver todas las funcionalidades en detalle')}
<ChevronRight className="w-5 h-5 group-hover:translate-x-1 transition-transform" />
</Link>
@@ -571,6 +571,10 @@ const LandingPage: React.FC = () => {
<Check className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<span className="text-[var(--text-secondary)]">{t('landing:pilot.we_ask.item2', 'Tarjeta de crédito (sin cargo por 3 meses)')}</span>
</li>
<li className="flex items-start gap-2">
<Check className="w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0" />
<span className="text-[var(--text-secondary)]">{t('landing:pilot.we_ask.item3', 'Comprensión de que es un programa piloto y feedback semanal sobre fallos y mejoras')}</span>
</li>
</ul>
</div>
</div>