i18n: locales completas (es+en) + LoginView traducido

This commit is contained in:
2026-05-27 18:32:56 -05:00
parent 023d4694bd
commit b49437514c
3 changed files with 379 additions and 7 deletions
+186 -1
View File
@@ -29,5 +29,190 @@
"about": "About", "about": "About",
"documentation": "Documentation", "documentation": "Documentation",
"logout": "Log out" "logout": "Log out"
},
"login": {
"title": "Sign in",
"email": "Email",
"password": "Password",
"rememberMe": "Remember me",
"loggingIn": "Signing in...",
"submit": "Sign in"
},
"common": {
"loading": "Loading...",
"retry": "Retry",
"backToProjects": "← Back to Projects",
"noDescription": "No description"
},
"sidebar": {
"navigation": "Navigation",
"diagnosis": "Diagnosis",
"calendar": "Calendar",
"scheduler": "Scheduler",
"projectsGroup": "Projects ({count})",
"unnamedProject": "Project {id}",
"projectId": "Project {id}",
"userAlt": "User",
"userFallback": "User",
"logout": "Log out"
},
"dashboard": {
"epics": "Epics",
"epicsSubtitle": "Timeline activities",
"hus": "User Stories",
"husSubtitle": "User stories",
"inProgress": "In progress",
"activeHus": "Active stories",
"sessions": "Sessions",
"sessionsSubtitle": "Logbooks",
"description": "Description",
"noDescription": "No description",
"epicsCount": "Epics · {count}",
"epicFallback": "Epic {id}",
"userStoriesTitle": "User Stories",
"husCount": "{count} stories",
"code": "Code",
"title": "Title",
"status": "Status",
"priority": "Priority",
"noUserStories": "No user stories",
"selectProject": "Select a project from the sidebar"
},
"status": {
"backlog": "Backlog",
"todo": "To do",
"inProgress": "In progress",
"doing": "Doing",
"wip": "WIP",
"done": "Done",
"completed": "Completed",
"blocked": "Blocked",
"review": "Review",
"testing": "Testing"
},
"projects": {
"title": "Projects",
"subtitle": "Projects assigned in KAPPA",
"countLabel": "{count} project | {count} projects",
"loadError": "Error loading projects",
"emptyTitle": "No assigned projects",
"emptyDescription": "You have no active projects in KAPPA.",
"noDescription": "No description",
"unnamedFallback": "Project {id}"
},
"users": {
"teamTitle": "Team",
"teamSubtitle": "{users} members · {emps} assignments in KAPPA",
"activeCount": "{count} active",
"loadError": "Error loading users",
"emptyTitle": "No users",
"emptyDescription": "No users found in KAPPA.",
"teamMembers": "Team members · {count}",
"projectCount": "{count} project | {count} projects",
"allUsers": "All users",
"name": "Name",
"email": "Email",
"role": "Role",
"cell": "Cell",
"seniority": "Seniority",
"projects": "Projects",
"assignments": "Assignments",
"solo": "Unassigned"
},
"holidays": {
"newYear": "New Year",
"threeKings": "Epiphany",
"stJoseph": "St. Joseph",
"maundyThursday": "Maundy Thursday",
"goodFriday": "Good Friday",
"easterSunday": "Easter Sunday",
"laborDay": "Labor Day",
"ascension": "Ascension",
"corpusChristi": "Corpus Christi",
"sacredHeart": "Sacred Heart",
"stPeterPaul": "St. Peter & Paul",
"independenceDay": "Independence Day",
"boyacaBattle": "Battle of Boyacá",
"assumption": "Assumption",
"columbusDay": "Columbus Day",
"allSaints": "All Saints",
"cartagenaIndependence": "Cartagena Independence",
"immaculateConception": "Immaculate Conception",
"christmas": "Christmas"
},
"calendar": {
"today": "Today",
"workday": "Workday",
"weekend": "Weekend",
"holiday": "Holiday",
"holidayLabel": "Holiday: {name}",
"weekendLabel": "Weekend",
"workdayLabel": "Workday",
"months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"weekdaysShort": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
},
"tabs": {
"metrics": "Metrics",
"metricsDesc": "Indicators and general KPIs",
"projects": "Projects",
"projectsDesc": "Projects assigned in KAPPA",
"lifecycle": "Lifecycle",
"lifecycleDesc": "Project lifecycle tracking",
"analytics": "Analytics",
"analyticsDesc": "Metrics and statistics",
"team": "Team",
"teamDesc": "Team members and workload",
"documents": "Documents",
"documentsDesc": "Document library",
"dataLibrary": "Data Library",
"dataLibraryDesc": "Data and resource repository",
"reports": "Reports",
"reportsDesc": "Generated reports",
"wordAssistant": "Word Assistant",
"wordAssistantDesc": "AI-powered document generation",
"templates": "Templates",
"templatesDesc": "Template management"
},
"cards": {
"activeProjects": "Active projects",
"completed": "Completed",
"paused": "Paused",
"pending": "Pending",
"inPlanning": "In planning",
"inDevelopment": "In development",
"inReview": "In review",
"delivered": "Delivered",
"recordedHours": "Recorded hours",
"deliveredHUs": "Delivered stories",
"avgTime": "Average time",
"satisfaction": "Satisfaction",
"members": "Members",
"assigned": "Assigned",
"available": "Available",
"productivity": "Productivity",
"documents": "Documents",
"shared": "Shared",
"drafts": "Drafts",
"templates": "Templates",
"files": "Files",
"databases": "Databases",
"connectedApis": "Connected APIs",
"storageUsed": "Storage used",
"reportsThisMonth": "Reports this month",
"scheduled": "Scheduled",
"exported": "Exported",
"docsCreated": "Documents created",
"templatesUsed": "Templates used",
"tokensConsumed": "Tokens consumed",
"pendingDocs": "Pending docs",
"activeTemplates": "Active templates",
"usedThisMonth": "Used this month",
"categories": "Categories",
"upcoming": "Upcoming",
"trendingUp": "Trending up",
"trendingDown": "Trending down"
},
"workitems": {
"unnamedEpic": "Epic {id}"
} }
} }
+186 -1
View File
@@ -29,5 +29,190 @@
"about": "Acerca de", "about": "Acerca de",
"documentation": "Documentación", "documentation": "Documentación",
"logout": "Cerrar sesión" "logout": "Cerrar sesión"
},
"login": {
"title": "Iniciar sesión",
"email": "Email",
"password": "Contraseña",
"rememberMe": "Recordarme",
"loggingIn": "Ingresando...",
"submit": "Iniciar sesión"
},
"common": {
"loading": "Cargando...",
"retry": "Reintentar",
"backToProjects": "← Volver a Proyectos",
"noDescription": "Sin descripción"
},
"sidebar": {
"navigation": "Navegación",
"diagnosis": "Diagnóstico",
"calendar": "Calendario",
"scheduler": "Recetas",
"projectsGroup": "Proyectos ({count})",
"unnamedProject": "Proyecto {id}",
"projectId": "Proyecto {id}",
"userAlt": "Usuario",
"userFallback": "Usuario",
"logout": "Cerrar sesión"
},
"dashboard": {
"epics": "Épicas",
"epicsSubtitle": "Actividades del cronograma",
"hus": "HUs",
"husSubtitle": "Historias de usuario",
"inProgress": "En progreso",
"activeHus": "HUs activas",
"sessions": "Sesiones",
"sessionsSubtitle": "Bitácoras",
"description": "Descripción",
"noDescription": "Sin descripción",
"epicsCount": "Épicas · {count}",
"epicFallback": "Épica {id}",
"userStoriesTitle": "Historias de Usuario",
"husCount": "{count} HUs",
"code": "Código",
"title": "Título",
"status": "Estado",
"priority": "Prioridad",
"noUserStories": "Sin historias de usuario",
"selectProject": "Seleccioná un proyecto del panel lateral"
},
"status": {
"backlog": "Backlog",
"todo": "Por hacer",
"inProgress": "En progreso",
"doing": "Haciendo",
"wip": "WIP",
"done": "Hecho",
"completed": "Completado",
"blocked": "Bloqueado",
"review": "Revisión",
"testing": "Pruebas"
},
"projects": {
"title": "Proyectos",
"subtitle": "Proyectos asignados en KAPPA",
"countLabel": "{count} proyecto | {count} proyectos",
"loadError": "Error al cargar proyectos",
"emptyTitle": "Sin proyectos asignados",
"emptyDescription": "No tienes proyectos activos en KAPPA.",
"noDescription": "Sin descripción",
"unnamedFallback": "Proyecto {id}"
},
"users": {
"teamTitle": "Equipo",
"teamSubtitle": "{users} miembros · {emps} asignaciones en KAPPA",
"activeCount": "{count} activos",
"loadError": "Error al cargar usuarios",
"emptyTitle": "Sin usuarios",
"emptyDescription": "No se encontraron usuarios en KAPPA.",
"teamMembers": "Miembros del equipo · {count}",
"projectCount": "{count} proyecto | {count} proyectos",
"allUsers": "Todos los usuarios",
"name": "Nombre",
"email": "Email",
"role": "Rol",
"cell": "Célula",
"seniority": "Seniority",
"projects": "Proyectos",
"assignments": "Asignaciones",
"solo": "Sin asignación"
},
"holidays": {
"newYear": "Año Nuevo",
"threeKings": "Reyes Magos",
"stJoseph": "San José",
"maundyThursday": "Jueves Santo",
"goodFriday": "Viernes Santo",
"easterSunday": "Domingo de Pascua",
"laborDay": "Día del Trabajo",
"ascension": "Ascensión del Señor",
"corpusChristi": "Corpus Christi",
"sacredHeart": "Sagrado Corazón",
"stPeterPaul": "San Pedro y San Pablo",
"independenceDay": "Día de la Independencia",
"boyacaBattle": "Batalla de Boyacá",
"assumption": "Asunción de la Virgen",
"columbusDay": "Día de la Raza",
"allSaints": "Todos los Santos",
"cartagenaIndependence": "Indep. de Cartagena",
"immaculateConception": "Inmaculada Concepción",
"christmas": "Navidad"
},
"calendar": {
"today": "Hoy",
"workday": "Laboral",
"weekend": "Fin de semana",
"holiday": "Feriado",
"holidayLabel": "Feriado: {name}",
"weekendLabel": "Fin de semana",
"workdayLabel": "Día laboral",
"months": ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
"weekdaysShort": ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"]
},
"tabs": {
"metrics": "Métricas",
"metricsDesc": "Indicadores y KPIs generales",
"projects": "Proyectos",
"projectsDesc": "Proyectos asignados en KAPPA",
"lifecycle": "Ciclo de Vida",
"lifecycleDesc": "Seguimiento del ciclo de vida de los proyectos",
"analytics": "Analíticas",
"analyticsDesc": "Métricas y estadísticas",
"team": "Equipo",
"teamDesc": "Miembros del equipo y su carga de trabajo",
"documents": "Documentos",
"documentsDesc": "Biblioteca de documentos",
"dataLibrary": "Biblioteca de Datos",
"dataLibraryDesc": "Repositorio de datos y recursos",
"reports": "Reportes",
"reportsDesc": "Reportes generados",
"wordAssistant": "Asistente Word",
"wordAssistantDesc": "Generación de documentos con IA",
"templates": "Plantillas",
"templatesDesc": "Gestión de plantillas"
},
"cards": {
"activeProjects": "Proyectos activos",
"completed": "Completados",
"paused": "En pausa",
"pending": "Por iniciar",
"inPlanning": "En planificación",
"inDevelopment": "En desarrollo",
"inReview": "En revisión",
"delivered": "Entregados",
"recordedHours": "Horas registradas",
"deliveredHUs": "HU entregadas",
"avgTime": "Tiempo promedio",
"satisfaction": "Satisfacción",
"members": "Miembros",
"assigned": "Asignados",
"available": "Disponibles",
"productivity": "Productividad",
"documents": "Documentos",
"shared": "Compartidos",
"drafts": "Borradores",
"templates": "Plantillas",
"files": "Archivos",
"databases": "Bases de datos",
"connectedApis": "APIs conectadas",
"storageUsed": "Storage usado",
"reportsThisMonth": "Reportes este mes",
"scheduled": "Programados",
"exported": "Exportados",
"docsCreated": "Documentos creados",
"templatesUsed": "Plantillas usadas",
"tokensConsumed": "Tokens consumidos",
"pendingDocs": "Docs pendientes",
"activeTemplates": "Plantillas activas",
"usedThisMonth": "Usadas este mes",
"categories": "Categorías",
"upcoming": "Próximas",
"trendingUp": "Tendencia al alza",
"trendingDown": "Tendencia a la baja"
},
"workitems": {
"unnamedEpic": "Épica {id}"
} }
} }
+7 -5
View File
@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input' import { Input } from '@/components/ui/input'
@@ -8,6 +9,7 @@ import { Label } from '@/components/ui/label'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { Eye, EyeOff } from 'lucide-vue-next' import { Eye, EyeOff } from 'lucide-vue-next'
const { t } = useI18n()
const auth = useAuthStore() const auth = useAuthStore()
const email = ref('') const email = ref('')
const password = ref('') const password = ref('')
@@ -41,17 +43,17 @@ async function handleLogin() {
<Card class="w-full max-w-sm bg-gradient-to-t from-primary/5 to-card shadow-xs dark:bg-card"> <Card class="w-full max-w-sm bg-gradient-to-t from-primary/5 to-card shadow-xs dark:bg-card">
<CardHeader> <CardHeader>
<CardTitle class="text-2xl">Iniciar sesión</CardTitle> <CardTitle class="text-2xl">{{ t('login.title') }}</CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<form @submit.prevent="handleLogin" class="grid gap-4"> <form @submit.prevent="handleLogin" class="grid gap-4">
<div class="grid gap-2"> <div class="grid gap-2">
<Label for="email">Email</Label> <Label for="email">{{ t('login.email') }}</Label>
<Input id="email" v-model="email" type="email" placeholder="ricardo@..." autocomplete="email" /> <Input id="email" v-model="email" type="email" placeholder="ricardo@..." autocomplete="email" />
</div> </div>
<div class="grid gap-2"> <div class="grid gap-2">
<Label for="password">Contraseña</Label> <Label for="password">{{ t('login.password') }}</Label>
<div class="relative"> <div class="relative">
<Input <Input
id="password" id="password"
@@ -74,7 +76,7 @@ async function handleLogin() {
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Checkbox id="remember" v-model:checked="rememberMe" /> <Checkbox id="remember" v-model:checked="rememberMe" />
<Label for="remember" class="text-sm font-normal cursor-pointer">Recordarme</Label> <Label for="remember" class="text-sm font-normal cursor-pointer">{{ t('login.rememberMe') }}</Label>
</div> </div>
<div v-if="auth.error" class="text-sm text-destructive bg-destructive/10 rounded-md px-3 py-2"> <div v-if="auth.error" class="text-sm text-destructive bg-destructive/10 rounded-md px-3 py-2">
@@ -82,7 +84,7 @@ async function handleLogin() {
</div> </div>
<Button type="submit" class="w-full" :disabled="auth.loading"> <Button type="submit" class="w-full" :disabled="auth.loading">
{{ auth.loading ? 'Ingresando...' : 'Iniciar sesión' }} {{ auth.loading ? t('login.loggingIn') : t('login.submit') }}
</Button> </Button>
</form> </form>