feat: Complete frontend i18n implementation for dashboard components

- Updated TypeScript types to support reasoning_data field
- Integrated useReasoningTranslation hook in all dashboard components:
  * ActionQueueCard: Translates PO reasoning_data and UI text
  * ProductionTimelineCard: Translates batch reasoning_data and UI text
  * OrchestrationSummaryCard: Translates all hardcoded English text
  * HealthStatusCard: Translates all hardcoded English text
- Added missing translation keys to all language files (EN, ES, EU):
  * health_status: never, critical_issues, actions_needed
  * action_queue: total, critical, important
  * orchestration_summary: ready_to_plan, run_info, took, show_more/less
  * production_timeline: Complete rebuild with new keys
- Components now support fallback for deprecated text fields
- Full multilingual support: English, Spanish, Basque

Dashboard is now fully translatable and will display reasoning in user's language.
This commit is contained in:
Claude
2025-11-07 18:34:30 +00:00
parent 84d38842ab
commit 28136cf198
9 changed files with 619 additions and 152 deletions

View File

@@ -52,52 +52,55 @@ ko da.",
"yellow": "Elementu batzuek arreta behar dute",
"red": "Arazo kritikoek ekintza berehalakoa behar dute",
"last_updated": "Azken eguneratzea",
"next_check": "Hurrengo egiaztapena"
"next_check": "Hurrengo egiaztapena",
"never": "Inoiz ez",
"critical_issues": "{{count}} arazo kritiko",
"actions_needed": "{{count}} ekintza behar"
},
"action_queue": {
"title": "Zer Behar Du Zure Arreta",
"why_needed": "Zergatik behar da hau:",
"what_if_not": "Zer gertatzen da hau egiten ez badut?",
"estimated_time": "Estimatutako denbora: {{minutes}} min",
"estimated_time": "Estimatutako denbora",
"all_caught_up": "Dena egunean!",
"no_actions": "Ez dago une honetan zure arreta behar duen ekintzarik.",
"show_more": "Erakutsi {{count}} Ekintza{{plural}} Gehiago",
"show_more": "Erakutsi {{count}} Ekintza gehiago",
"show_less": "Erakutsi Gutxiago",
"critical_badge": "{{count}} kritiko{{plural}}",
"important_badge": "{{count}} garrantzitsu{{plural}}"
"total": "guztira",
"critical": "kritiko",
"important": "garrantzitsu"
},
"orchestration_summary": {
"title": "Bart Gauean Zure Eguna Planifikatu Nuen",
"no_runs": "Zure Okindegiko Eguna Planifikatzeko Prest",
"no_runs_message": "Sistemak oraindik ez du eguneko plangintza exekutatu. Egin klik 'Exekutatu Eguneko Plangintza'-n zure lehen plana sortzeko.",
"run_number": "Orkestazio exekuzioa #{{number}}",
"duration": "{{seconds}}s behar izan zituen",
"pos_created": "{{count}} erosketa agindu{{plural}} sortu nituen",
"batches_created": "{{count}} ekoizpen lote{{plural}} programatu nituen",
"ready_to_plan": "Zure Okindegiko Eguna Planifikatzeko Prest",
"run_planning": "Exekutatu Eguneko Plangintza",
"run_info": "Orkestazio exekuzioa #{{runNumber}}",
"took": "{{seconds}}s behar izan zituen",
"created_pos": "{{count}} erosketa agindu sortu",
"scheduled_batches": "{{count}} ekoizpen lote programatu",
"show_more": "Erakutsi {{count}} gehiago",
"show_less": "Erakutsi gutxiago",
"no_actions": "Ez dira ekintza berriak behar - dena bidean dago!",
"based_on": "Oinarrituta:",
"customer_orders": "{{count}} bezero eskaera{{plural}}",
"customer_orders": "{{count}} bezero eskaera",
"historical_demand": "Eskaera historikoa",
"inventory_levels": "Inbentario mailak",
"ai_optimization": "IA optimizazioa",
"actions_required": "{{count}} elementu{{plural}}k zure onespena behar du{{verb}} aurrera jarraitu aurretik"
"actions_required": "{{count}} elementuk zure onespena behar du aurrera jarraitu aurretik"
},
"production_timeline": {
"title": "Gaurko Ekoizpen Denbora-lerroa",
"no_batches": "Ez dago ekoizpen loterik programatuta gaurko",
"status": {
"pending": "Zain",
"in_progress": "Prozesuan",
"completed": "Osatua",
"cancelled": "Bertan behera utzita"
},
"ready_by": "{{time}}rako prest",
"priority": {
"low": "Lehentasun Baxua",
"normal": "Normala",
"high": "Lehentasun Altua",
"urgent": "Larria"
}
"title": "Zure Gaurko Ekoizpen Plana",
"no_production": "Ez Dago Ekoizpenik Programatuta",
"no_batches": "Ez dago loterik programatuta gaur ekoizpenerako.",
"ready_by": "Prest egongo da",
"start_batch": "Hasi Lotea",
"pause_batch": "Pausatu Lotea",
"completed": "Osatua",
"total": "Guztira",
"done": "Eginda",
"active": "Aktibo",
"pending": "Zain",
"view_full_schedule": "Ikusi Ekoizpen Egutegi Osoa"
},
"insights": {
"savings": "Aste Honetako Aurrezkiak",