feat: i18n support with first translations
This commit is contained in:
320
src/renderer/i18n/locales/es.json
Normal file
320
src/renderer/i18n/locales/es.json
Normal file
@@ -0,0 +1,320 @@
|
||||
{
|
||||
"common.save": "Guardar",
|
||||
"common.cancel": "Cancelar",
|
||||
"common.clear": "Limpiar",
|
||||
"common.settings": "Configuración",
|
||||
"common.tasks": "Tareas",
|
||||
"common.running": "en ejecución",
|
||||
"common.pending": "pendiente",
|
||||
"activity.posts": "Entradas",
|
||||
"activity.pages": "Páginas",
|
||||
"activity.media": "Medios",
|
||||
"activity.tags": "Etiquetas",
|
||||
"activity.aiAssistant": "Asistente IA",
|
||||
"activity.import": "Importar",
|
||||
"activity.sourceControl": "Control de código fuente",
|
||||
"activity.toggleHint": "(haz clic de nuevo para alternar la barra lateral)",
|
||||
"tasks.backgroundTasks": "Tareas en segundo plano",
|
||||
"tasks.clearCompleted": "Limpiar completadas",
|
||||
"tasks.recent": "Recientes",
|
||||
"tasks.noActive": "No hay tareas activas",
|
||||
"tasks.cancelTask": "Cancelar tarea",
|
||||
"tasks.triggerTitle": "{running} en ejecución, {pending} pendiente",
|
||||
"app.taskCompleted": "Tarea completada: {message}",
|
||||
"app.taskFailed": "Tarea fallida: {message}",
|
||||
"app.databaseRebuildFailed": "La reconstrucción de la base de datos falló",
|
||||
"app.textReindexFailed": "La reindexación de texto falló",
|
||||
"app.sitemapGenerationFailed": "La generación del sitemap falló",
|
||||
"app.previewOpenFailed": "No se pudo abrir la vista previa de la entrada seleccionada",
|
||||
"app.metadataDiff": "Diferencia de Metadatos",
|
||||
"app.importComplete": "Importación completada: {posts} entradas, {media} archivos multimedia",
|
||||
"settings.language.english": "Inglés",
|
||||
"settings.language.german": "Alemán",
|
||||
"settings.language.french": "Francés",
|
||||
"settings.language.italian": "Italiano",
|
||||
"settings.language.spanish": "Español",
|
||||
"settings.language.portuguese": "Portugués (Português)",
|
||||
"settings.language.dutch": "Neerlandés (Nederlands)",
|
||||
"settings.language.polish": "Polaco (Polski)",
|
||||
"settings.language.russian": "Ruso (Русский)",
|
||||
"settings.language.japanese": "Japonés (日本語)",
|
||||
"settings.language.chinese": "Chino (中文)",
|
||||
"settings.language.korean": "Coreano (한국어)",
|
||||
"settings.language.arabic": "Árabe (العربية)",
|
||||
"settings.language.hindi": "Hindi",
|
||||
"settings.language.turkish": "Turco (Türkçe)",
|
||||
"settings.language.swedish": "Sueco (Svenska)",
|
||||
"settings.language.danish": "Danés (Dansk)",
|
||||
"settings.language.norwegian": "Noruego (Norsk)",
|
||||
"settings.language.finnish": "Finés (Suomi)",
|
||||
"settings.language.czech": "Checo (Čeština)",
|
||||
"settings.project.title": "Proyecto",
|
||||
"settings.project.browse": "Examinar",
|
||||
"settings.project.reset": "Restablecer",
|
||||
"settings.project.resetDefault": "Restablecer por defecto",
|
||||
"settings.project.selectDataFolder": "Seleccionar carpeta de datos del proyecto",
|
||||
"settings.editor.title": "Editor de texto",
|
||||
"settings.editor.mode.wysiwyg": "WYSIWYG (editor visual)",
|
||||
"settings.editor.mode.markdown": "Markdown (fuente)",
|
||||
"settings.editor.mode.preview": "Vista previa (solo lectura)",
|
||||
"settings.editor.diff.inline": "En línea",
|
||||
"settings.editor.diff.sideBySide": "Lado a lado",
|
||||
"settings.content.title": "Categorías de entradas",
|
||||
"settings.content.renderInLists": "Mostrar en listas",
|
||||
"settings.content.showTitles": "Mostrar títulos",
|
||||
"settings.ai.title": "Asistente IA",
|
||||
"settings.ai.noModels": "No hay modelos disponibles",
|
||||
"settings.publishing.ftpTitle": "Publicación FTP",
|
||||
"settings.publishing.sshTitle": "Publicación SSH",
|
||||
"settings.data.title": "Mantenimiento de base de datos",
|
||||
"settings.data.fileSystemTitle": "Sistema de archivos",
|
||||
"settings.search.placeholder": "Buscar configuración...",
|
||||
"settings.search.noResults": "No configuración found matching \"{query}\"",
|
||||
"settings.search.clear": "Limpiar búsqueda",
|
||||
"settings.toast.publishingSaved": "Credenciales de publicación guardadas",
|
||||
"settings.toast.saveCredentialsFailed": "No se pudo save credentials",
|
||||
"settings.toast.credentialsCleared": "Credenciales de {type} borradas",
|
||||
"settings.toast.projectSaved": "Project configuración saved",
|
||||
"settings.toast.projectSaveFailed": "No se pudo save project configuración",
|
||||
"settings.toast.categoryAdded": "Categoría \"{category}\" agregada",
|
||||
"settings.toast.categoryAddFailed": "No se pudo add category",
|
||||
"settings.toast.categoryExists": "La categoría ya existe",
|
||||
"settings.toast.categoryProtected": "No se puede eliminar la categoría estándar \"{category}\"",
|
||||
"settings.toast.categoryAtLeastOne": "Debe haber al menos una categoría",
|
||||
"settings.toast.categoryRemoved": "Categoría \"{category}\" eliminada",
|
||||
"settings.toast.categoryRemoveFailed": "No se pudo remove category",
|
||||
"settings.toast.categoriesReset": "Categorías restablecidas a los valores predeterminados",
|
||||
"settings.toast.categoriesResetFailed": "No se pudo reset categories",
|
||||
"settings.toast.categorySettingsUpdateFailed": "No se pudo update category configuración",
|
||||
"settings.toast.systemPromptSaved": "Prompt del sistema guardado",
|
||||
"settings.toast.systemPromptSaveFailed": "No se pudo save system prompt",
|
||||
"settings.toast.systemPromptReset": "Prompt del sistema restablecido al predeterminado",
|
||||
"settings.toast.systemPromptResetFailed": "No se pudo reset system prompt",
|
||||
"settings.toast.apiKeySaved": "Clave API guardada y validada",
|
||||
"settings.toast.apiKeyInvalid": "Clave API no válida",
|
||||
"settings.toast.apiKeySaveFailed": "No se pudo save API key",
|
||||
"settings.toast.defaultModelUpdated": "Modelo predeterminado actualizado",
|
||||
"settings.toast.defaultModelUpdateFailed": "No se pudo set default model",
|
||||
"settings.toast.rebuildPostsLoading": "Rebuilding entradas database...",
|
||||
"settings.toast.rebuildPostsSuccess": "Base de datos de publicaciones reconstruida",
|
||||
"settings.toast.rebuildPostsFailed": "No se pudo rebuild entradas database",
|
||||
"settings.toast.rebuildMediaLoading": "Rebuilding medios database...",
|
||||
"settings.toast.rebuildMediaSuccess": "Base de datos de medios reconstruida",
|
||||
"settings.toast.rebuildMediaFailed": "No se pudo rebuild medios database",
|
||||
"settings.toast.rebuildLinksLoading": "Rebuilding entrada links...",
|
||||
"settings.toast.rebuildLinksSuccess": "Enlaces de publicaciones reconstruidos",
|
||||
"settings.toast.rebuildLinksFailed": "No se pudo rebuild entrada links",
|
||||
"settings.toast.thumbnailsLoading": "Generando miniaturas...",
|
||||
"settings.toast.thumbnailsGenerated": "Se generaron {count} miniaturas",
|
||||
"settings.toast.thumbnailsAlreadyExist": "Todas las miniaturas ya existen",
|
||||
"settings.toast.thumbnailsComplete": "Generación de miniaturas completa",
|
||||
"settings.toast.thumbnailsFailed": "No se pudo generate thumbnails",
|
||||
"chat.setupTitle": "Configuración de chat IA",
|
||||
"chat.apiKeyRequiredTitle": "Se requiere clave API de OpenCode Zen",
|
||||
"chat.apiKeyRequiredDescription": "Introduce tu clave API de OpenCode para habilitar el chat de IA.",
|
||||
"chat.apiKeyPlaceholder": "Introduce tu clave API...",
|
||||
"chat.apiKeySave": "Guardar clave",
|
||||
"chat.apiKeyValidating": "Validando...",
|
||||
"chat.apiKeyInvalid": "Clave API no válida. Compruébala e inténtalo de nuevo.",
|
||||
"chat.apiKeyValidationFailed": "No se pudo validate API key.",
|
||||
"chat.newChat": "Nuevo chat",
|
||||
"chat.welcomeTitle": "Bienvenido al asistente de IA",
|
||||
"chat.welcomeDescription": "I can help you manage your entradas and medios. Try asking me to:",
|
||||
"chat.welcomeTipSearch": "Buscar for entradas about a specific topic",
|
||||
"chat.welcomeTipDetails": "Get details about a specific entrada",
|
||||
"chat.welcomeTipTags": "Lista todas las etiquetas o categorías de tu blog",
|
||||
"chat.welcomeTipMetadata": "Update metadata for entradas or medios",
|
||||
"chat.welcomeTipImages": "List all images in your medios library",
|
||||
"chat.role.you": "Tú",
|
||||
"chat.role.assistant": "Asistente",
|
||||
"chat.stop": "Detener",
|
||||
"chat.inputPlaceholder": "Escribe un mensaje...",
|
||||
"chat.errorPrefix": "Error del sistema: {error}",
|
||||
"chat.errorNoResponse": "No se pudo get a response. Please try again.",
|
||||
"chat.errorEmptyResponse": "El modelo devolvió una respuesta vacía. Prueba otro modelo o reformula tu pregunta.",
|
||||
"chat.errorGeneric": "Sorry, an error occurred while processing your mensaje.",
|
||||
"chat.cancelledSuffix": "(cancelado)",
|
||||
"aiSuggestions.title": "Análisis de imagen IA",
|
||||
"aiSuggestions.close": "Cerrar",
|
||||
"aiSuggestions.analyzing": "Analizando imagen...",
|
||||
"aiSuggestions.titleField": "Título",
|
||||
"aiSuggestions.altField": "Texto alternativo",
|
||||
"aiSuggestions.captionField": "Pie de foto",
|
||||
"aiSuggestions.hasExisting": "(tiene valor existente)",
|
||||
"aiSuggestions.current": "Actual",
|
||||
"aiSuggestions.intro": "Selecciona qué valores generados por IA aplicar. Los valores existentes se conservan de forma predeterminada.",
|
||||
"aiSuggestions.empty": "No se generaron sugerencias para esta imagen.",
|
||||
"aiSuggestions.wait": "Por favor espera...",
|
||||
"aiSuggestions.applySelected": "Aplicar seleccionados",
|
||||
"insert.title.link": "Insertar enlace",
|
||||
"insert.title.image": "Insertar imagen",
|
||||
"insert.tab.linkInternal": "Enlazar a entrada",
|
||||
"insert.tab.imageInternal": "Biblioteca multimedia",
|
||||
"insert.tab.linkExternal": "URL externa",
|
||||
"insert.tab.imageExternal": "Imagen externa",
|
||||
"insert.searchPlaceholder.link": "Buscar entradas by title or content...",
|
||||
"insert.searchPlaceholder.image": "Buscar medios by name, title, or alt text...",
|
||||
"insert.status.searching": "Buscando...",
|
||||
"insert.status.typeMore": "Escribe al menos 2 caracteres para buscar",
|
||||
"insert.status.noResults": "No se encontró {kind} para \"{query}\"",
|
||||
"insert.label.url": "Dirección URL",
|
||||
"insert.label.linkTextOptional": "Texto del enlace (opcional)",
|
||||
"insert.label.altText": "Texto alternativo",
|
||||
"insert.placeholder.linkUrl": "https://ejemplo.es",
|
||||
"insert.placeholder.imageUrl": "https://ejemplo.es/imagen.jpg",
|
||||
"insert.placeholder.linkText": "Haz clic aquí",
|
||||
"insert.placeholder.imageAlt": "Descripción de la imagen",
|
||||
"insert.submit.link": "Insertar enlace",
|
||||
"insert.submit.image": "Insertar imagen",
|
||||
"insert.hint.internal": "Usa ↑↓ para navegar, Enter para seleccionar, Esc para cerrar",
|
||||
"insert.hint.external": "Introduce la URL y pulsa Enter o haz clic en el botón, Esc para cerrar",
|
||||
"insert.hint.canonicalPost": "Canónico: /YYYY/MM/DD/slug",
|
||||
"insert.hint.canonicalMedia": "Canonical: /medios/YYYY/MM/file.ext",
|
||||
"postLinks.loading": "Cargando enlaces...",
|
||||
"postLinks.link": "enlace",
|
||||
"postLinks.links": "enlaces",
|
||||
"postLinks.linksTo": "Enlaces a ({count})",
|
||||
"postLinks.linkedBy": "Enlazado por ({count})",
|
||||
"postLinks.openTitle": "Abrir: {title}",
|
||||
"docs.title": "Documentación",
|
||||
"docs.subtitle": "Guía de usuario para esta versión instalada de bDS.",
|
||||
"gitDiff.header": "Diferencia: {target}",
|
||||
"gitDiff.noProject": "No hay un proyecto activo seleccionado.",
|
||||
"gitDiff.noProjectPath": "No se pudo resolver la ruta del proyecto.",
|
||||
"gitDiff.loadFailed": "No se pudo load diff.",
|
||||
"gitDiff.loading": "Cargando diff...",
|
||||
"gitDiff.changedFiles": "Archivos modificados",
|
||||
"gitDiff.previousFile": "Archivo anterior",
|
||||
"gitDiff.nextFile": "Archivo siguiente",
|
||||
"errorModal.error": "Error del sistema",
|
||||
"errorModal.stackTrace": "Traza de pila",
|
||||
"errorModal.copyClipboard": "Copiar al portapapeles",
|
||||
"errorModal.copy": "Copiar",
|
||||
"errorModal.noStack": "No hay traza de pila disponible",
|
||||
"confirmDelete.title": "Confirmar eliminación",
|
||||
"confirmDelete.promptPost": "Are you sure you want to delete the entrada",
|
||||
"confirmDelete.promptMedia": "Are you sure you want to delete the medios file",
|
||||
"confirmDelete.warning": "Advertencia:",
|
||||
"confirmDelete.referencedBy": "Este {itemType} está referenciado por los siguientes elementos:",
|
||||
"confirmDelete.note": "Eliminar este {itemType} quitará todas estas referencias.",
|
||||
"confirmDelete.cancel": "Cancelar",
|
||||
"confirmDelete.deletePost": "Eliminar publicación",
|
||||
"confirmDelete.deleteMedia": "Eliminar medio",
|
||||
"confirmDelete.itemType.post": "entrada",
|
||||
"confirmDelete.itemType.media": "medios",
|
||||
"lightbox.close": "Cerrar (Esc)",
|
||||
"lightbox.previous": "Anterior (←)",
|
||||
"lightbox.next": "Siguiente (→)",
|
||||
"credentials.error.load": "No se pudo load credentials:",
|
||||
"credentials.error.save": "No se pudo save credentials:",
|
||||
"credentials.toast.saved": "Credenciales guardadas",
|
||||
"credentials.toast.saveFailed": "No se pudo save credentials",
|
||||
"credentials.toast.testing": "Probando conexión {type}...",
|
||||
"credentials.toast.connectionFailed": "Connection falló - check credentials",
|
||||
"credentials.tab.ftp": "Acceso FTP",
|
||||
"credentials.tab.ssh": "Acceso SSH",
|
||||
"credentials.ftp.title": "Publicación FTP",
|
||||
"credentials.ftp.description": "Configura FTP para publicar tu blog en un servidor web.",
|
||||
"credentials.ssh.title": "Publicación SSH",
|
||||
"credentials.ssh.description": "Configura SSH para publicar de forma segura en tu servidor.",
|
||||
"credentials.field.host": "Servidor",
|
||||
"credentials.field.username": "Nombre de usuario",
|
||||
"credentials.field.password": "Contraseña",
|
||||
"credentials.field.sshKeyPath": "Ruta de clave SSH",
|
||||
"credentials.action.testConnection": "Probar conexión",
|
||||
"credentials.ftp.placeholder.host": "ftp.ejemplo.es",
|
||||
"credentials.ftp.placeholder.username": "usuario-ftp",
|
||||
"credentials.ftp.placeholder.password": "Contraseña",
|
||||
"credentials.ssh.placeholder.host": "servidor.ejemplo.es",
|
||||
"credentials.ssh.placeholder.username": "usuario-ssh",
|
||||
"credentials.ssh.placeholder.keyPath": "~/.ssh/clave_id_rsa",
|
||||
"gitSidebar.header": "CONTROL DE CÓDIGO FUENTE",
|
||||
"gitSidebar.loading": "Cargando...",
|
||||
"gitSidebar.error.fetchRemoteUpdates": "No se pudo fetch remote updates.",
|
||||
"gitSidebar.error.refreshRemoteState": "No se pudo actualizar el estado de seguimiento remoto.",
|
||||
"gitSidebar.error.gitMissing": "No se encontró el ejecutable de Git. Instala Git y reinicia la aplicación.",
|
||||
"gitSidebar.error.noActiveProject": "No hay un proyecto activo seleccionado.",
|
||||
"gitSidebar.error.loadRepoStatus": "No se pudo cargar el estado del repositorio.",
|
||||
"gitSidebar.error.initFailed": "No se pudo initialize git repository.",
|
||||
"gitSidebar.error.actionFailed": "No se pudo {action}.",
|
||||
"gitSidebar.error.commitFailed": "No se pudo commit changes.",
|
||||
"gitSidebar.progress.preparingInit": "Preparando inicialización del repositorio...",
|
||||
"gitSidebar.progress.pushingRemote": "Enviando commits al remoto... esto puede tardar con cargas grandes.",
|
||||
"gitSidebar.progress.fetching": "Obteniendo actualizaciones remotas...",
|
||||
"gitSidebar.progress.pulling": "Extrayendo los últimos cambios...",
|
||||
"gitSidebar.progress.pruningLfs": "Limpiando caché local de Git LFS...",
|
||||
"gitSidebar.progress.committing": "Creando commit...",
|
||||
"gitSidebar.progress.initializingRepo": "Inicializando repositorio...",
|
||||
"gitSidebar.history.synced": "Sincronizado",
|
||||
"gitSidebar.history.localOnly": "Solo local",
|
||||
"gitSidebar.history.remoteOnly": "Solo remoto",
|
||||
"gitSidebar.init.transcript": "Registro de inicialización",
|
||||
"gitSidebar.aria.repoActions": "Acciones del repositorio",
|
||||
"gitSidebar.aria.openChanges": "Cambios abiertos",
|
||||
"gitSidebar.aria.commitStatusLegend": "Leyenda del estado de commit",
|
||||
"gitSidebar.aria.versionHistory": "Historial de versiones",
|
||||
"gitSidebar.action.fetch": "Obtener",
|
||||
"gitSidebar.action.fetching": "Obteniendo...",
|
||||
"gitSidebar.action.pull": "Traer",
|
||||
"gitSidebar.action.pulling": "Trayendo cambios...",
|
||||
"gitSidebar.action.push": "Enviar",
|
||||
"gitSidebar.action.pushing": "Enviando...",
|
||||
"gitSidebar.action.pruneLfs": "Podar LFS",
|
||||
"gitSidebar.action.pruning": "Podando...",
|
||||
"gitSidebar.action.commit": "Realizar commit",
|
||||
"gitSidebar.action.committing": "Haciendo commit...",
|
||||
"gitSidebar.action.initializeGit": "Inicializar Git",
|
||||
"gitSidebar.action.initializing": "Inicializando...",
|
||||
"gitSidebar.openChanges": "Abrir Changes ({count})",
|
||||
"gitSidebar.versionHistory": "Historial de versiones ({count})",
|
||||
"gitSidebar.loadingChanges": "Cargando cambios...",
|
||||
"gitSidebar.noChanges": "Sin cambios",
|
||||
"gitSidebar.loadingHistory": "Cargando historial...",
|
||||
"gitSidebar.noCommits": "Aún no hay commits",
|
||||
"gitSidebar.branch": "Rama: {branch}",
|
||||
"gitSidebar.aheadBehind": "adelante {ahead} / detrás {behind}",
|
||||
"gitSidebar.notRepo": "Este proyecto no es un repositorio git.",
|
||||
"gitSidebar.placeholder.remoteUrl": "URL opcional del repositorio remoto",
|
||||
"gitSidebar.placeholder.commitMessage": "Mensaje de commit",
|
||||
"editor.untitled": "Sin título",
|
||||
"tabBar.style": "Estilo",
|
||||
"tabBar.loading": "Cargando...",
|
||||
"tabBar.unknown": "Desconocido",
|
||||
"tabBar.preview": "Vista previa",
|
||||
"tabBar.modified": "Modificado",
|
||||
"tabBar.closeHint": "Cerrar (Ctrl+W)",
|
||||
"tabBar.scrollLeft": "Desplazar pestañas a la izquierda",
|
||||
"tabBar.scrollRight": "Desplazar pestañas a la derecha",
|
||||
"tabBar.commitTitle": "Confirmación {hash}",
|
||||
"tabBar.error.fetchPostTitle": "No se pudo fetch entrada title:",
|
||||
"tabBar.error.fetchChatTitle": "No se pudo fetch chat title:",
|
||||
"tabBar.error.fetchImportTitle": "No se pudo fetch import definition title:",
|
||||
"tabBar.error.fetchCommitTitle": "No se pudo fetch commit titles:",
|
||||
"metadataDiff.title": "Herramienta diff de metadatos",
|
||||
"metadataDiff.description": "Compare entrada metadata between database and markdown files. Fix inconsistencies caused by bugs or manual edits.",
|
||||
"metadataDiff.error.loadStats": "No se pudo load database statistics",
|
||||
"metadataDiff.error.scan": "No se pudo scan for differences",
|
||||
"metadataDiff.progress.starting": "Iniciando escaneo...",
|
||||
"metadataDiff.progress.scanningPublished": "Scanning published entradas...",
|
||||
"metadataDiff.progress.scanning": "Escaneando...",
|
||||
"metadataDiff.action.scan": "Buscar diferencias",
|
||||
"metadataDiff.action.rescan": "Volver a escanear",
|
||||
"metadataDiff.stats.totalPosts": "Entradas totales",
|
||||
"metadataDiff.stats.published": "Publicadas",
|
||||
"metadataDiff.stats.drafts": "Borradores",
|
||||
"metadataDiff.stats.mediaFiles": "Archivos multimedia",
|
||||
"metadataDiff.summary.noDiffs": "✅ No differences found! All {total} published entradas are in sync.",
|
||||
"metadataDiff.summary.withDiffs": "⚠️ Found {count} entradas with differences out of {total} published entradas.",
|
||||
"metadataDiff.group.differences": "Diferencias de {label}",
|
||||
"metadataDiff.group.postsCount": "{count} entradas",
|
||||
"metadataDiff.sync.failed": "falló",
|
||||
"metadataDiff.sync.dbToFile.title": "Actualizar archivos con valores de la base de datos",
|
||||
"metadataDiff.sync.dbToFile.success": "Synced {success} entradas to files{falló}",
|
||||
"metadataDiff.sync.dbToFile.error": "No se pudo sync to files",
|
||||
"metadataDiff.sync.fileToDb.title": "Actualizar base de datos con valores de archivos",
|
||||
"metadataDiff.sync.fileToDb.success": "Synced {success} files to database{falló}",
|
||||
"metadataDiff.sync.fileToDb.error": "No se pudo sync to database",
|
||||
"metadataDiff.value.database": "Base de datos",
|
||||
"metadataDiff.value.file": "Archivo",
|
||||
"metadataDiff.empty": "Haz clic en \"Buscar diferencias\" para comparar metadatos de base de datos con metadatos de archivos."
|
||||
}
|
||||
Reference in New Issue
Block a user