refactor: implement i18n in core components (phase 1)

Refactored key components to use react-i18next translations:
- ErrorBoundary: error messages and labels
- ProgressStepper: step labels
- DimensionCard: health status labels, descriptions, benchmark text, action buttons
- DashboardTabs: back button, footer, default title

Added translation keys to es.json and en.json:
- dashboard.defaultTitle
- All health status and benchmark keys already existed

Build verified successfully. Remaining 31 components to be refactored in subsequent commits.

https://claude.ai/code/session_4f888c33-8937-4db8-8a9d-ddc9ac51a725
This commit is contained in:
Claude
2026-02-06 18:37:40 +00:00
parent 4be14f1420
commit 9bc1a1c0d3
6 changed files with 57 additions and 41 deletions

View File

@@ -1,6 +1,7 @@
import { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { ArrowLeft } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import { DashboardHeader, TabId } from './DashboardHeader';
import { formatDateMonthYear } from '../utils/formatters';
import { ExecutiveSummaryTab } from './tabs/ExecutiveSummaryTab';
@@ -19,12 +20,15 @@ interface DashboardTabsProps {
export function DashboardTabs({
data,
title = 'CLIENTE DEMO - Beyond CX Analytics',
title,
onBack
}: DashboardTabsProps) {
const { t } = useTranslation();
const [activeTab, setActiveTab] = useState<TabId>('executive');
const [metodologiaOpen, setMetodologiaOpen] = useState(false);
const displayTitle = title || t('dashboard.defaultTitle');
const renderTabContent = () => {
switch (activeTab) {
case 'executive':
@@ -53,8 +57,8 @@ export function DashboardTabs({
className="flex items-center gap-2 text-sm text-slate-600 hover:text-slate-800 transition-colors"
>
<ArrowLeft className="w-4 h-4" />
<span className="hidden sm:inline">Volver al formulario</span>
<span className="sm:hidden">Volver</span>
<span className="hidden sm:inline">{t('dashboard.backToForm')}</span>
<span className="sm:hidden">{t('dashboard.back')}</span>
</button>
</div>
</div>
@@ -62,7 +66,7 @@ export function DashboardTabs({
{/* Sticky Header with Tabs */}
<DashboardHeader
title={title}
title={displayTitle}
activeTab={activeTab}
onTabChange={setActiveTab}
onMetodologiaClick={() => setMetodologiaOpen(true)}
@@ -87,8 +91,8 @@ export function DashboardTabs({
<footer className="border-t border-slate-200 bg-white mt-8">
<div className="max-w-7xl mx-auto px-4 sm:px-6 py-3 sm:py-4">
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3 text-sm text-slate-500">
<span className="hidden sm:inline">Beyond Diagnosis - Contact Center Analytics Platform</span>
<span className="sm:hidden text-xs">Beyond Diagnosis</span>
<span className="hidden sm:inline">{t('dashboard.footer')}</span>
<span className="sm:hidden text-xs">{t('dashboard.footerShort')}</span>
<span className="text-xs sm:text-sm text-slate-400 italic">{formatDateMonthYear()}</span>
</div>
</div>