Add Spanish (ES) language support to i18n system (#795)

* Add Spanish (ES) language support to i18n system

- Added Es variant to UiLanguage enum in Rust backend
- Regenerated TypeScript types to include Spanish support
- Created complete Spanish translation files for all UI components
- Updated i18n configuration to include Spanish resources
- Added Spanish option to language selector in settings
- Updated existing language files to include Spanish in options

All major UI areas now support Spanish including navigation,
settings, project management, and status messages.

* Fix formatting for Spanish translation files

Run Prettier to ensure consistent JSON formatting
This commit is contained in:
Alcibíades Cabral Díaz
2025-09-22 18:21:05 +01:00
committed by GitHub
parent 603e70215f
commit d69efffd54
9 changed files with 226 additions and 1 deletions

View File

@@ -9,6 +9,9 @@ import enProjects from './locales/en/projects.json';
import jaCommon from './locales/ja/common.json';
import jaSettings from './locales/ja/settings.json';
import jaProjects from './locales/ja/projects.json';
import esCommon from './locales/es/common.json';
import esSettings from './locales/es/settings.json';
import esProjects from './locales/es/projects.json';
const resources = {
en: {
@@ -21,6 +24,11 @@ const resources = {
settings: jaSettings,
projects: jaProjects,
},
es: {
common: esCommon,
settings: esSettings,
projects: esProjects,
},
};
i18n

View File

@@ -20,6 +20,7 @@
"language": {
"en": "English",
"ja": "日本語",
"es": "Español",
"browserDefault": "Browser Default"
},
"conversation": {

View File

@@ -0,0 +1,26 @@
{
"buttons": {
"save": "Guardar",
"cancel": "Cancelar",
"delete": "Eliminar",
"edit": "Editar",
"create": "Crear",
"continue": "Continuar",
"reset": "Restablecer",
"manage": "Gestionar",
"connect": "Conectar",
"disconnect": "Desconectar"
},
"states": {
"loading": "Cargando...",
"saving": "Guardando...",
"error": "Error",
"success": "Éxito"
},
"language": {
"en": "English",
"ja": "日本語",
"es": "Español",
"browserDefault": "Predeterminado del navegador"
}
}

View File

@@ -0,0 +1,14 @@
{
"title": "Proyectos",
"subtitle": "Gestiona tus proyectos y sigue su progreso",
"createProject": "Crear Proyecto",
"loading": "Cargando proyectos...",
"errors": {
"fetchFailed": "Error al cargar proyectos"
},
"empty": {
"title": "Aún no hay proyectos",
"description": "Comienza creando tu primer proyecto.",
"createFirst": "Crear tu primer proyecto"
}
}

View File

@@ -0,0 +1,171 @@
{
"settings": {
"layout": {
"nav": {
"title": "Configuración",
"general": "General",
"generalDesc": "Tema, notificaciones y preferencias",
"agents": "Agentes",
"agentsDesc": "Configuraciones de agentes",
"mcp": "Servidores MCP",
"mcpDesc": "Servidores de Protocolo de Contexto de Modelo (MCP)"
}
},
"general": {
"loading": "Cargando configuración...",
"loadError": "Error al cargar la configuración.",
"save": {
"button": "Guardar Configuración",
"success": "✓ ¡Configuración guardada!",
"error": "Error al guardar la configuración"
},
"appearance": {
"title": "Apariencia",
"description": "Personaliza cómo se ve la aplicación.",
"theme": {
"label": "Tema",
"placeholder": "Seleccionar tema",
"helper": "Elige tus colores preferidos."
},
"language": {
"label": "Idioma",
"placeholder": "Selecciona tu idioma",
"helper": "Elige tu idioma preferido. El predeterminado del navegador sigue el idioma de tu sistema."
}
},
"taskExecution": {
"title": "Ejecución de Tareas",
"description": "Configura cómo se ejecutan y procesan las tareas.",
"executor": {
"label": "Configuración predeterminada del Agente",
"placeholder": "Seleccionar perfil",
"helper": "Define la configuración predeterminada del agente que se usará al iniciar una tarea."
},
"variant": "PREDETERMINADO"
},
"editor": {
"title": "Editor",
"description": "Configura cómo quieres editar tu código.",
"type": {
"label": "Tipo de Editor",
"placeholder": "Seleccionar editor",
"helper": "Elige tu editor de código preferido."
}
},
"github": {
"title": "Integración con GitHub",
"connected": "Conectado como {{username}}",
"connectButton": "Conectar Cuenta de GitHub",
"manage": "Gestionar",
"disconnect": "Desconectar",
"helper": "Conecta tu cuenta de GitHub para acceder a repositorios privados y habilitar acciones avanzadas de Git."
},
"notifications": {
"title": "Notificaciones",
"description": "Controla cuándo y cómo recibes notificaciones.",
"sound": {
"label": "Notificaciones de Sonido",
"helper": "Reproduce un sonido cuando una tarea termina de ejecutarse.",
"fileLabel": "Sonido",
"filePlaceholder": "Seleccionar sonido",
"fileHelper": "Elige el sonido que se reproducirá al completar las tareas. Haz clic en el botón de volumen para escucharlo."
},
"push": {
"label": "Notificaciones Push",
"helper": "Muestra notificaciones del sistema cuando las tareas terminan de ejecutarse."
}
},
"privacy": {
"title": "Privacidad",
"description": "Ayuda a mejorar Vibe-Kanban compartiendo datos de uso anónimos.",
"telemetry": {
"label": "Habilitar Telemetría",
"helper": "Habilita el seguimiento anónimo para ayudar a mejorar la aplicación. No se recopilan prompts ni información del proyecto."
}
},
"taskTemplates": {
"title": "Plantillas de Tareas",
"description": "Gestiona las plantillas globales que se pueden usar en todos los proyectos."
},
"safety": {
"title": "Avisos legales y de seguridad",
"description": "Reinicia las confirmaciones de seguridad y de introducción.",
"disclaimer": {
"title": "Confirmación de Descargo",
"description": "Restablecer el aviso de seguridad.",
"button": "Restablecer"
},
"onboarding": {
"title": "Introducción",
"description": "Restablece el flujo de Introducción.",
"button": "Restablecer"
}
}
},
"agents": {
"title": "Configuraciones de Agentes de Código",
"description": "Personaliza el comportamiento de los agentes con diferentes configuraciones.",
"loading": "Cargando configuraciones de agentes...",
"save": {
"button": "Guardar Configuraciones de Agentes",
"success": "✓ ¡Configuración guardada con éxito”!"
},
"editor": {
"formLabel": "Editar JSON",
"agentLabel": "Agente",
"agentPlaceholder": "Seleccionar tipo",
"configLabel": "Configuración",
"configPlaceholder": "Seleccionar configuración",
"createNew": "Crear nuevo...",
"deleteTitle": "No se puede eliminar la última configuración",
"deleteButton": "Eliminar {{name}}",
"deleteText": "Eliminar",
"jsonLabel": "Configuración de Agente (JSON)",
"jsonPlaceholder": "Cargando perfiles...",
"jsonLoading": "Cargando...",
"pathLabel": "Ubicación del archivo de configuración:"
},
"errors": {
"deleteFailed": "Error al eliminar la configuración. Por favor, inténtalo de nuevo.",
"saveFailed": "Error al guardar la configuración de los agentes. Por favor, inténtalo de nuevo.",
"saveConfigFailed": "Error al guardar la configuración. Por favor, inténtalo de nuevo."
}
},
"mcp": {
"title": "Configuración de Servidor MCP",
"description": "Configura los servidores del Protocolo de Contexto de Modelos (MCP) para ampliar las capacidades del agente de codificación con herramientas y recursos personalizados.",
"loading": "Cargando configuración MCP...",
"applying": "Aplicando configuración...",
"labels": {
"agent": "Agente",
"agentPlaceholder": "Seleccionar",
"agentHelper": "Elige para qué agente configurar los servidores MCP.",
"serverConfig": "Configuración de Servidor (JSON)",
"popularServers": "Servidores populares",
"serverHelper": "Haz clic en una tarjeta para insertar ese Servidor MCP en el JSON de arriba.",
"saveLocation": "Los cambios se guardarán en:"
},
"loading": {
"jsonEditor": "Cargando...",
"configuration": "Cargando configuración actual del servidor MCP..."
},
"errors": {
"loadFailed": "Error al cargar la configuración.",
"invalidJson": "Formato JSON inválido",
"validationError": "Error de validación",
"saveFailed": "Error al guardar servidores MCP",
"applyFailed": "Error al aplicar la configuración del servidor MCP",
"addServerFailed": "Error al agregar servidor preconfigurado",
"mcpError": "Error de Configuración MCP: {{error}}",
"notSupported": "MCP No Soportado",
"supportMessage": "Para usar servidores MCP, por favor selecciona un agente diferente que soporte MCP (Claude, Amp, Gemini, Codex, o Opencode) arriba."
},
"save": {
"button": "Guardar Configuración MCP",
"success": "¡Configuración Guardada!",
"successMessage": "✓ ¡Configuración MCP guardada exitosamente!",
"loading": "Cargando configuración actual del servidor MCP..."
}
}
}
}

View File

@@ -20,6 +20,7 @@
"language": {
"en": "English",
"ja": "日本語",
"es": "Español",
"browserDefault": "ブラウザ設定"
},
"conversation": {

View File

@@ -218,6 +218,9 @@ export function GeneralSettings() {
<SelectItem value="JA">
{t('language.ja', { ns: 'common', defaultValue: '日本語' })}
</SelectItem>
<SelectItem value="ES">
{t('language.es', { ns: 'common', defaultValue: 'Español' })}
</SelectItem>
</SelectContent>
</Select>
<p className="text-sm text-muted-foreground">