Files
srbhr--resume-matcher/apps/frontend/messages/es.json
T
wehub-resource-sync 5bdf4cc89a
Publish Docker Image / publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:36 +08:00

1039 lines
46 KiB
JSON

{
"common": {
"save": "Guardar",
"saving": "Guardando...",
"cancel": "Cancelar",
"delete": "Eliminar",
"edit": "Editar",
"download": "Descargar",
"loading": "Cargando...",
"uploading": "Subiendo...",
"checking": "Comprobando...",
"processing": "Procesando...",
"generating": "Generando...",
"error": "Error",
"success": "Éxito",
"confirm": "Confirmar",
"back": "Atrás",
"retry": "Reintentar",
"next": "Siguiente",
"continue": "Continuar",
"finish": "Finalizar",
"optional": "Opcional",
"close": "Cerrar",
"ok": "OK",
"search": "Buscar",
"filter": "Filtrar",
"reset": "Restablecer",
"apply": "Aplicar",
"selectOption": "Selecciona una opción...",
"unknown": "Desconocido",
"keysCleared": "Claves API borradas con éxito",
"databaseReset": "Base de datos restablecida con éxito",
"popupBlocked": "Se bloqueó la ventana emergente. Permite las ventanas emergentes o abre manualmente esta URL: {url}"
},
"home": {
"brandLine1": "Currículum",
"brandLine2": "Matcher",
"docs": "Guía de uso",
"launchApp": "Iniciar app"
},
"nav": {
"dashboard": "Panel",
"builder": "Constructor de CV",
"tailor": "Personalizar CV",
"settings": "Configuración",
"backToDashboard": "Volver al Panel",
"goToSettings": "Ir a Configuración",
"applicationTracker": "Seguimiento de candidaturas"
},
"dashboard": {
"title": "Panel",
"subtitle": "Gestiona tus currículums y solicitudes de empleo",
"myResumes": "Mis Currículums",
"noResumes": "Sin currículums aún",
"noResumesDescription": "Sube tu primer currículum para comenzar",
"uploadResume": "Subir Currículum",
"createNew": "Crear Nuevo",
"lastModified": "Última modificación",
"actions": "Acciones",
"preview": "Vista previa",
"viewResume": "Ver Currículum",
"editResume": "Editar Currículum",
"deleteResume": "Eliminar Currículum",
"downloadPdf": "Descargar PDF",
"tailorResume": "Personalizar para Empleo",
"selectModule": "Seleccionar módulo",
"masterResume": "Currículum maestro",
"tailoredResume": "Currículum personalizado",
"initializeMasterResume": "Inicializar currículum maestro",
"initializeSequence": "Secuencia de inicialización",
"refreshStatus": "Actualizar estado",
"retryProcessing": "Reintentar procesamiento",
"retryingProcessing": "Reintentando...",
"deleteAndReupload": "Eliminar y volver a subir",
"processingFailedHint": "No pudimos leer este archivo. Reintenta o sube otro.",
"retrySuccess": "¡Procesamiento completado!",
"retryFailed": "El reintento falló. Prueba a subir otro archivo.",
"createResume": "Crear currículum",
"edited": "Editado {date}",
"statusLine": "ESTADO: {status}",
"status": {
"checking": "Comprobando...",
"processing": "Procesando...",
"ready": "Listo",
"failed": "Falló el procesamiento",
"pending": "Pendiente"
},
"llmNotConfiguredTitle": "[ LLM NO CONFIGURADO ]",
"llmNotConfiguredMessage": "> Faltan claves API. La personalización del currículum está deshabilitada hasta configurarlo en Ajustes.",
"setupRequiredTitle": "[ CONFIGURACIÓN REQUERIDA ]",
"setupRequiredMessage": "> Configura la clave API en Ajustes para habilitar la personalización del currículum.",
"uploadDialog": {
"success": "Currículum subido con éxito.",
"successMaster": "Currículum subido y establecido como maestro.",
"successMissingId": "La subida fue exitosa pero no se devolvió el ID del currículum.",
"parsingFailed": "Currículum subido pero el análisis de IA falló. Aún puedes personalizarlo manualmente.",
"failed": "La subida falló.",
"dropzoneTitle": "Haz clic o arrastra un archivo",
"dropzoneSubtitle": "PDF, DOC, DOCX (Máx. 4MB)",
"tryDifferentFile": "Probar otro archivo",
"parsingFailedKeepOpen": "El análisis de IA falló. Prueba otro archivo o cierra este diálogo."
}
},
"builder": {
"title": "Constructor de CV",
"editMode": "Modo Edición",
"previewMode": "Modo Vista Previa",
"createAndPreview": "Crear y previsualizar",
"unsavedDraft": "Borrador sin guardar",
"personalInfo": "Información Personal",
"summary": "Resumen",
"experience": "Experiencia",
"education": "Educación",
"skills": "Habilidades",
"projects": "Proyectos",
"certifications": "Certificaciones",
"languages": "Idiomas",
"awards": "Premios",
"addSection": "Agregar Sección",
"removeSection": "Eliminar Sección",
"saveChanges": "Guardar Cambios",
"discardChanges": "Descartar Cambios",
"placeholders": {
"summary": "Describe brevemente tu experiencia profesional..."
},
"contentStats": {
"wordsChars": "{wordCount} palabras / {charCount} caracteres"
},
"additionalForm": {
"instructions": "Introduce elementos separados por saltos de línea (pulsa Enter para cada elemento).",
"placeholders": {
"technicalSkills": "React\nTypeScript\nNode.js",
"languages": "Español\nInglés",
"certifications": "AWS Solution Architect\nGoogle Analytics",
"awards": "Empleado del mes\nGanador de hackathon"
}
},
"customSections": {
"dialogTitle": "Agregar sección personalizada",
"dialogDescription": "Crea una nueva sección con un nombre y tipo personalizados.",
"sectionNameLabel": "Nombre de la sección",
"sectionNamePlaceholder": "p. ej., Publicaciones, Voluntariado, Certificaciones",
"sectionTypeLabel": "Tipo de sección",
"addCustomSectionButton": "Agregar sección personalizada",
"sectionTypes": {
"textBlockLabel": "Bloque de texto",
"textBlockDescription": "Área de texto única (como Resumen)",
"itemListLabel": "Lista de entradas",
"itemListDescription": "Múltiples entradas con detalles (como Experiencia)",
"stringListLabel": "Lista simple",
"stringListDescription": "Lista simple de elementos (como Habilidades)"
},
"contentLabel": "Contenido",
"contentPlaceholder": "Introduce contenido para {name}...",
"defaultTextPlaceholder": "Introduce el contenido...",
"entryLabel": "Entrada",
"addEntryLabel": "Agregar entrada",
"itemsLabel": "Elementos",
"itemsPlaceholder": "Introduce elementos, uno por línea",
"unknownSectionType": "Tipo de sección desconocido: {type}",
"unknownDefaultSection": "Sección predeterminada desconocida: {section}"
},
"sectionHeader": {
"renameSection": "Renombrar sección",
"customTag": "Personalizada",
"hiddenFromPdfTag": "Oculta en PDF",
"hideSection": "Ocultar sección",
"showSection": "Mostrar sección",
"moveUp": "Mover arriba",
"moveDown": "Mover abajo",
"deleteSection": "Eliminar sección",
"deleteTitle": "Eliminar sección",
"deleteDescription": "¿Seguro que quieres eliminar \"{name}\"? Esta acción no se puede deshacer."
},
"previewTabs": {
"resume": "CURRÍCULUM",
"coverLetter": "CARTA",
"outreach": "MENSAJE",
"jdMatch": "COINCIDENCIA JD",
"interviewPrep": "PREPARACIÓN"
},
"footer": {
"moduleLabel": "Módulo del constructor",
"singleColumn": "Una columna",
"twoColumn": "Dos columnas"
},
"pageSize": {
"usLetter": "Carta (EE. UU.)"
},
"generatePrompt": {
"notAvailableTitle": "{title} no disponible",
"notAvailableDescription": "Para generar {title}, primero adapta tu currículum con una descripción del puesto.",
"goToDashboard": "Ir al panel",
"generateTitle": "Generar {title}",
"coverLetterDescription": "Genera una carta de presentación adaptada según tu currículum y la descripción del puesto.",
"outreachDescription": "Genera un mensaje de contacto breve para LinkedIn o email según tu currículum y la descripción del puesto.",
"generateButton": "Generar {title}",
"coverLetterFooter": "Consejo: adapta primero para mejores resultados.",
"outreachFooter": "Consejo: manténlo breve y personalizado.",
"interviewPrepDescription": "Genera preparación para entrevistas según tu currículum adaptado y la descripción del puesto.",
"interviewPrepFooter": "Consejo: úsalo después de adaptar el currículum para preparar respuestas veraces basadas en evidencia."
},
"regenerateDialog": {
"title": "¿Regenerar {title}?",
"description": "Esto reemplazará tu {title} actual por una nueva generación. Se perderán las ediciones que hayas hecho."
},
"regenerate": {
"buttonLabel": "Regenerar con IA",
"selectDialog": {
"title": "Selecciona elementos para regenerar",
"subtitle": "Elige qué partes de tu currículum quieres mejorar",
"experience": "Experiencia laboral",
"projects": "Proyectos",
"skills": "Habilidades técnicas",
"noItemsSelected": "Selecciona al menos un elemento",
"noItemsAvailable": "No hay elementos disponibles para regenerar. Agrega experiencia, proyectos o habilidades primero.",
"itemCount": {
"one": "{count} elemento",
"other": "{count} elementos"
},
"continueButton": "Continuar"
},
"instructionDialog": {
"title": "¿Qué te gustaría mejorar?",
"subtitle": "Proporciona comentarios específicos para guiar a la IA",
"defaultInstruction": "Mejora el contenido con verbos de acción más fuertes e impacto cuantificable cuando sea posible.",
"selectedItems": "Elementos seleccionados",
"placeholder": "Ejemplo: Añade más métricas cuantificables, enfatiza habilidades de liderazgo, usa más verbos de acción...",
"hint": "Sé específico sobre lo que no te satisface",
"backButton": "Atrás",
"generateButton": "Generar"
},
"diffPreview": {
"title": "Vista previa de cambios",
"subtitle": "Revisa el contenido regenerado antes de aplicarlo",
"expandItem": "Expandir {item}",
"collapseItem": "Contraer {item}",
"partialFailures": "No se pudieron regenerar algunos elementos ({count}). Aún puedes revisar y aplicar los que se generaron correctamente.",
"changesCount": "{count} elementos modificados",
"rejectButton": "Rechazar y regenerar",
"acceptButton": "Aceptar cambios",
"originalLabel": "Original",
"newLabel": "Nuevo",
"noContent": "Sin contenido",
"applying": "Aplicando...",
"loading": "Generando contenido mejorado..."
},
"errors": {
"generationFailed": "No se pudo generar el contenido. Inténtalo de nuevo.",
"applyFailed": "No se pudieron aplicar los cambios. Inténtalo de nuevo.",
"resumeChanged": "El contenido del currículum cambió desde la regeneración. Vuelve a regenerar e inténtalo de nuevo.",
"noChangesToApply": "No hay cambios para aplicar.",
"networkError": "Error de red. Verifica tu conexión."
}
},
"jdMatch": {
"yourResume": "Tu currículum",
"matchingKeywordsHighlighted": "(palabras clave resaltadas)",
"jobDescriptionTitle": "Descripción del puesto",
"at": "en",
"atSeparator": " en ",
"roleSeparator": "-",
"aboutTitle": "Sobre la coincidencia JD",
"aboutDescription": "Esta vista muestra cómo de bien tu currículum coincide con la descripción del puesto. Las palabras clave de la JD se resaltan en amarillo para ayudarte a ver qué habilidades y términos ya están cubiertos.",
"highlightedKeywordsTitle": "Palabras clave resaltadas",
"highlightedKeywordsDescriptionPrefix": "Las palabras resaltadas en",
"highlightColor": "amarillo",
"highlightedKeywordsDescriptionSuffix": "aparecen tanto en la descripción del puesto como en tu currículum. Una mayor coincidencia sugiere mejor alineación con los requisitos.",
"highlightedKeywordsDescriptionTemplate": "Las palabras resaltadas en __COLOR__ aparecen tanto en la descripción del puesto como en tu currículum. Una mayor coincidencia sugiere mejor alineación con los requisitos.",
"tipsTitle": "Consejos",
"tips": {
"items": {
"addMissingKeywords": "Usa la pestaña del currículum para añadir palabras clave faltantes",
"focusTechnicalSkills": "Enfócate en habilidades técnicas y herramientas mencionadas en la JD",
"matchActionVerbs": "Haz coincidir verbos de acción de los requisitos"
}
},
"stats": {
"keywordsExtracted": "{count} palabras clave extraídas",
"matchesFound": "{count} coincidencias encontradas",
"matchRateLabel": "Tasa de coincidencia:"
}
},
"genericItemForm": {
"itemLabel": "Elemento",
"addItemLabel": "Agregar {label}",
"fields": {
"title": "Título",
"organization": "Organización",
"location": "Ubicación",
"years": "Fechas",
"descriptionPoints": "Puntos de descripción"
},
"actions": {
"addPoint": "Agregar punto"
},
"placeholders": {
"title": "Título",
"organization": "Organización",
"location": "Ubicación",
"years": "Ene 2020 - Actualidad",
"description": "Describe tu aportación..."
},
"noEntries": "// SIN {label}",
"addFirstItem": "Agregar primer {label}"
},
"forms": {
"experience": {
"addJob": "Agregar trabajo",
"addFirstJob": "Agregar primer trabajo",
"fields": {
"jobTitle": "Puesto",
"company": "Empresa"
},
"placeholders": {
"jobTitle": "Desarrollador senior",
"company": "Tech Corp",
"location": "Remoto / Ciudad",
"years": "Ene 2020 - Actualidad",
"description": "Describe tu logro..."
}
},
"education": {
"addSchool": "Agregar estudios",
"addFirstSchool": "Agregar primeros estudios",
"fields": {
"institution": "Institución",
"degree": "Título",
"description": "Descripción",
"descriptionOptional": "Descripción (opcional)"
},
"placeholders": {
"institution": "Nombre de la universidad",
"degree": "Grado en ...",
"years": "Ago 2016 - May 2020",
"description": "Detalles adicionales..."
}
},
"projects": {
"addProject": "Agregar proyecto",
"addFirstProject": "Agregar primer proyecto",
"fields": {
"projectName": "Nombre del proyecto",
"role": "Rol",
"website": "Sitio web"
},
"placeholders": {
"projectName": "Resume Matcher",
"role": "Creador",
"years": "Mar 2023",
"github": "github.com/usuario/proyecto",
"website": "https://demo-proyecto.com",
"description": "Detalle del proyecto..."
}
}
},
"formatting": {
"panelTitle": "Plantilla y formato",
"template": "Plantilla",
"templates": {
"swissSingle": {
"name": "Una columna",
"description": "Diseño tradicional de ancho completo con máxima densidad de contenido"
},
"swissTwoColumn": {
"name": "Dos columnas",
"description": "Columna principal centrada en experiencia con barra lateral para habilidades"
},
"modern": {
"name": "Moderno",
"description": "Acentos coloridos con colores de tema personalizables"
},
"modernTwoColumn": {
"name": "Moderno de dos columnas",
"description": "Diseño de dos columnas moderno con acentos coloridos y temas"
},
"latex": {
"name": "LaTeX",
"description": "Diseño académico clásico con tipografía serif y encabezados con líneas"
},
"clean": {
"name": "Limpio",
"description": "Diseño minimalista sans con encabezados grandes y sobrios"
},
"vivid": {
"name": "Vívido",
"description": "Diseño de dos columnas colorido con encabezados de acento y viñetas de flecha"
}
},
"accentColor": "Color de acento",
"accentColors": {
"blue": "Azul",
"green": "Verde",
"orange": "Naranja",
"red": "Rojo"
},
"pageSize": "Tamaño de página",
"margins": "Márgenes (mm)",
"margin": {
"top": "Superior",
"bottom": "Inferior",
"left": "Izquierdo",
"right": "Derecho"
},
"spacing": "Espaciado",
"spacingSection": "Sección",
"spacingItems": "Elementos",
"spacingLines": "Líneas",
"fontSize": "Tamaño de fuente",
"baseFontSize": "Base",
"headerScale": "Encabezados",
"headerFontFamily": "Encabezados",
"bodyFontFamily": "Cuerpo",
"fontNames": {
"serif": "Serif",
"sans": "Sans",
"mono": "Mono"
},
"options": "Opciones",
"compactMode": "Modo compacto",
"contactIcons": "Iconos de contacto",
"effectiveOutput": "Salida efectiva",
"effectiveMargins": "Márgenes (mm): S{top} I{bottom} Izq{left} Der{right}",
"effectiveSectionGap": "Espacio entre secciones",
"effectiveItemGap": "Espacio entre elementos",
"effectiveLineHeight": "Interlineado",
"effectiveBaseFont": "Fuente base",
"effectiveHeaderScale": "Escala de encabezados",
"effectiveHeaderFont": "Fuente de encabezados",
"effectiveBodyFont": "Fuente del cuerpo",
"compactHint": "El modo compacto reduce el espaciado y el interlineado. Los márgenes y la fuente base se mantienen.",
"resetDefaults": "Restablecer valores"
},
"personalInfoForm": {
"placeholders": {
"name": "Juan Pérez",
"title": "Ingeniero de software",
"email": "juan@example.com",
"phone": "+34 600 000 000",
"location": "Ciudad, País",
"website": "portfolio.com",
"linkedin": "linkedin.com/in/juan",
"github": "github.com/juan"
}
},
"leftPanel": {
"editorPanel": "Panel de edición",
"coverLetterEditor": "Editor de carta",
"outreachEditor": "Editor de mensaje",
"jdMatchAnalysis": "Análisis de coincidencia JD",
"interviewPrep": "Preparación de entrevista"
},
"alerts": {
"saveNotAvailable": "Guardar solo está disponible al editar un currículum existente.",
"saveFailed": "No se pudo guardar el currículum. Por favor, inténtalo de nuevo.",
"coverLetterSaveSuccess": "Carta de presentación guardada",
"outreachSaveSuccess": "Mensaje de contacto guardado",
"downloadSuccess": "Currículum descargado",
"reloadFailed": "Se aplicaron los cambios, pero no se pudo recargar el currículum. Actualiza la página.",
"downloadNotAvailable": "La descarga solo está disponible para currículums guardados.",
"downloadFailed": "No se pudo descargar el currículum. Por favor, inténtalo de nuevo.",
"coverLetterSaveFailed": "No se pudo guardar la carta de presentación. Por favor, inténtalo de nuevo.",
"coverLetterDownloadRequiresResume": "Guarda el currículum antes de descargar la carta de presentación.",
"coverLetterMissing": "No hay carta disponible. Activa la generación de cartas en Ajustes y luego adapta un currículum.",
"coverLetterDownloadFailed": "No se pudo descargar la carta de presentación: {error}",
"outreachSaveFailed": "No se pudo guardar el mensaje de contacto. Por favor, inténtalo de nuevo.",
"coverLetterGenerateFailed": "No se pudo generar la carta de presentación: {error}",
"outreachGenerateFailed": "No se pudo generar el mensaje de contacto: {error}",
"interviewPrepGenerateFailed": "No se pudo generar la preparación de entrevista: {error}"
}
},
"enrichment": {
"title": "Mejora del Currículum",
"loading": {
"analyzingTitle": "Analizando tu currículum...",
"analyzingDescription": "Identificando áreas que podrían tener más detalle",
"generatingTitle": "Creando descripciones mejoradas...",
"generatingDescription": "Usando tus respuestas para mejorar tu currículum",
"applyingTitle": "Aplicando mejoras...",
"applyingDescription": "Actualizando tu currículum maestro"
},
"questionProgress": "Pregunta {current} de {total}",
"itemType": {
"experience": "Experiencia",
"project": "Proyecto"
},
"shortcutHint": "Shift+Enter para nueva línea, Cmd/Ctrl+Enter para continuar",
"preview": {
"title": "Revisar nuevo contenido",
"description": "Revisa los nuevos puntos que se agregarán a tu currículum",
"applyButton": "Agregar al currículum",
"keepingLabel": "Mantener",
"addingLabel": "Agregar",
"existingCount": "({count} existentes)",
"newCount": "({count} nuevos)",
"noExistingDescription": "Sin descripción existente"
},
"complete": {
"title": "¡Currículum mejorado!",
"updatedCountSingular": "{count} elemento actualizado correctamente",
"updatedCountPlural": "{count} elementos actualizados correctamente",
"updatedFallback": "Tu currículum se actualizó con descripciones mejoradas",
"doneButton": "Listo"
},
"noImprovements": {
"title": "¡Tu currículum se ve genial!",
"defaultDescription": "No encontramos elementos que necesiten mejoras. Tus descripciones ya son detalladas."
},
"error": {
"title": "Algo salió mal",
"unexpected": "Ocurrió un error inesperado"
}
},
"tailor": {
"title": "Personalizar CV",
"subtitle": "Optimiza tu currículum para un trabajo específico",
"heroTitle": "Personaliza tu currículum",
"selectResume": "Seleccionar Currículum",
"pasteJobDescription": "Pegar Descripción del Trabajo",
"pasteJobDescriptionBelow": "Pega la descripción del trabajo abajo",
"jobDescriptionPlaceholder": "Pega la descripción del trabajo aquí...",
"promptLabel": "Intensidad de ajuste",
"promptDescription": "Elige qué tanto alinear tu currículum con la descripción del puesto.",
"promptOptions": {
"nudge": {
"label": "Ajuste leve",
"description": "Cambios mínimos para alinear tu experiencia existente."
},
"keywords": {
"label": "Mejora de palabras clave",
"description": "Integra palabras clave relevantes sin cambiar rol ni alcance."
},
"full": {
"label": "Ajuste completo",
"description": "Ajuste integral usando la descripción del puesto."
}
},
"analyzeJob": "Analizar Trabajo",
"generateTailored": "Generar CV Personalizado",
"matchScore": "Puntuación de Coincidencia",
"suggestions": "Sugerencias",
"keywords": "Palabras Clave a Incluir",
"setupRequiredTitle": "[ CONFIGURACIÓN REQUERIDA ]",
"noApiKeyMessage": "> No hay clave API configurada. La personalización requiere un proveedor LLM.",
"configureApiKey": "Configurar clave API",
"configureApiKeyFirst": "Configura primero la clave API",
"charactersCount": "{count} caracteres",
"footerTagline": "MOTOR DE OPTIMIZACIÓN CON IA",
"diffModal": {
"title": "Revisar resultados de ajuste de IA",
"subtitle": "Revisa cuidadosamente los cambios para asegurar que no se haya agregado información falsa",
"summary": "Resumen de cambios",
"skillsAdded": "Habilidades agregadas",
"skillsRemoved": "Habilidades eliminadas",
"descriptionsModified": "Descripciones modificadas",
"certificationsAdded": "Certificaciones agregadas",
"highRiskChanges": "Cambios de alto riesgo",
"warningTitle": "Se detectaron {count} habilidad(es) completamente nueva(s)",
"warningMessage": "Por favor, confirma que estas habilidades realmente existen en tu currículum original o se reflejan en tus descripciones",
"summaryChanges": "Cambios en resumen",
"skillChanges": "Cambios en habilidades",
"descriptionChanges": "Cambios en descripciones de experiencia",
"experienceChanges": "Cambios en experiencia",
"educationChanges": "Cambios en educación",
"projectChanges": "Cambios en proyectos",
"certificationChanges": "Cambios en certificaciones",
"languageChanges": "Cambios en idiomas",
"awardChanges": "Cambios en premios",
"rejectButton": "Rechazar y regenerar",
"confirmButton": "Confirmar y guardar"
},
"regenerateDialog": {
"title": "¿Regenerar el currículum personalizado?",
"description": "Esto descartará la vista previa actual y solicitará un nuevo resultado de personalización con IA.",
"confirmLabel": "Regenerar"
},
"missingDiffDialog": {
"title": "No se pudieron calcular los cambios",
"description": "No pudimos calcular un diff para este currículum. Esto puede ocurrir con currículums antiguos sin datos estructurados. Puedes continuar para guardar el currículum personalizado o cancelar para revisarlo más tarde.",
"confirmLabel": "Continuar sin diff"
},
"errors": {
"jobDescriptionTooShort": "La descripción del trabajo es demasiado corta. Añade más detalles e inténtalo de nuevo.",
"apiKeyError": "Tu clave API no funciona. Revísala en Configuración.",
"rateLimit": "Se alcanzó el límite de tasa. Espera aproximadamente un minuto e inténtalo de nuevo.",
"failedToGenerate": "No se pudo generar el currículum. Revisa tu clave API en Configuración e inténtalo de nuevo.",
"timeout": "La solicitud agotó el tiempo de espera. Inténtalo de nuevo con una descripción del trabajo más corta o comprueba tu conexión.",
"failedToPreview": "No se pudo previsualizar el currículum. Revisa tu clave API en Configuración e inténtalo de nuevo.",
"failedToConfirm": "No se pudieron aplicar los cambios. Inténtalo de nuevo."
}
},
"settings": {
"title": "Configuración",
"subtitle": "Configura tus preferencias",
"aiProvider": "Proveedor de IA",
"aiProviderDescription": "Selecciona tu proveedor de IA preferido para el análisis de CV",
"apiKey": "Clave API",
"apiKeyPlaceholder": "Ingresa tu clave API",
"saveApiKey": "Guardar Clave API",
"contentLanguage": "Idioma del Contenido",
"contentLanguageDescription": "Idioma para contenido generado (currículums, cartas de presentación)",
"uiLanguage": "Idioma de la Interfaz",
"uiLanguageDescription": "Idioma para la interfaz de usuario",
"theme": "Tema",
"themeDescription": "Elige tu tema de color preferido",
"lightMode": "Claro",
"darkMode": "Oscuro",
"systemMode": "Sistema",
"dangerZone": "Zona de Peligro",
"clearApiKeys": "Borrar Claves API",
"clearApiKeysDescription": "Elimina todas las claves API guardadas de la configuración. Esta acción no se puede deshacer.",
"resetDatabase": "Restablecer Base de Datos",
"resetDatabaseDescription": "Elimina TODOS los datos, incluyendo currículums, trabajos y contenido generado. Esta acción no se puede deshacer.",
"llmConfigurationTitle": "Configuración de LLM",
"providerLabel": "Proveedor",
"statusCards": {
"llm": "LLM",
"database": "Base de datos",
"resumes": "Currículums",
"jobs": "Empleos",
"improvements": "Mejoras",
"masterResume": "Currículum maestro"
},
"statusValues": {
"healthy": "Saludable",
"offline": "Sin conexión",
"connected": "Conectado",
"configured": "Configurado",
"notSet": "No configurado"
},
"apiKeyMenu": {
"buttonLabel": "API de LLM",
"title": "Clave API de OpenAI",
"description": "Proporciona tu clave para habilitar modelos alojados de OpenAI.",
"savedMessage": "Clave API guardada.",
"loadError": "No se pudo cargar la clave API",
"updateError": "No se pudo actualizar la clave API"
},
"setupRequired": {
"title": "[ CONFIGURACIÓN REQUERIDA ]",
"description": "> No hay clave API configurada. Añade la clave API de tu proveedor LLM abajo para habilitar la personalización del currículum."
},
"systemStatus": {
"title": "Estado del sistema",
"refresh": "Actualizar",
"unableToConnect": "No se puede acceder al servidor",
"expectedAt": "Se esperaba en: {apiUrl}",
"lastFetched": {
"never": "Nunca",
"justNow": "Justo ahora",
"minutesAgo": "hace {minutes} min",
"hoursAgo": "hace {hours} h"
}
},
"llmConfiguration": {
"selectedProvider": "SELECCIONADO: {provider}",
"modelLabel": "Modelo",
"defaultModel": "PREDETERMINADO: {model}",
"apiKeyLabel": "Clave API",
"apiKeyOptionalForOllama": "(Opcional para Ollama)",
"apiKeyOptional": "(Opcional)",
"apiKeyPlaceholder": "sk-...",
"apiKeyNotRequiredPlaceholder": "No se requiere para modelos locales",
"apiKeyOptionalPlaceholder": "Déjalo en blanco si tu servidor no requiere autenticación",
"leaveBlankToKeepExistingKey": "DEJA EN BLANCO PARA MANTENER LA CLAVE EXISTENTE",
"baseUrlLabel": "URL base (opcional)",
"baseUrlPlaceholder": "p. ej. https://api.openai.com/v1",
"baseUrlDescription": "Sobrescribe la URL base para usar un proxy/agregador. Déjalo en blanco para usar la URL predeterminada del proveedor.",
"ollamaServerUrl": "URL del servidor Ollama",
"ollamaServerUrlPlaceholder": "http://localhost:11434",
"reasoningEffortLabel": "Esfuerzo de razonamiento",
"reasoningEffortAuto": "Automático",
"reasoningEffortAutoDesc": "No enviar reasoning_effort — valor por defecto para máxima compatibilidad",
"reasoningEffortMinimal": "Mínimo",
"reasoningEffortLow": "Bajo",
"reasoningEffortMedium": "Medio",
"reasoningEffortHigh": "Alto",
"reasoningEffortDescription": "Solo afecta a modelos con capacidad de razonamiento (familia gpt-5, Claude 3.7+, DeepSeek R1, OpenAI o1/o3). Los proveedores no compatibles descartan este valor automáticamente.",
"testConnection": "Probar conexión",
"errorPrefix": "ERROR: {error}",
"connectionSuccessful": "CONEXIÓN EXITOSA",
"connectionFailed": "CONEXIÓN FALLIDA",
"connectionDetails": "Proveedor: {provider} | Modelo: {model}",
"testPromptLabel": "TEXTO DE PRUEBA",
"modelOutputLabel": "SALIDA DEL MODELO",
"reasoningContentLabel": "RAZONAMIENTO DEL MODELO",
"errorDetailLabel": "DETALLE DEL ERROR",
"healthErrors": {
"api_key_missing": "La clave API no está configurada. Añádela en Configuración.",
"health_check_failed": "La verificación falló.",
"duplicate_v1_path": "La verificación falló. La URL base puede contener un /v1 duplicado.",
"not_found_404": "La verificación falló. 404 No encontrado: comprueba que la URL base coincide con el proveedor.",
"html_response": "La verificación falló. La URL base devolvió HTML; puede ser la URL de consola o una ruta de puerta de enlace no compatible."
},
"healthWarnings": {
"empty_content": "El LLM devolvió contenido vacío en la verificación de salud."
}
},
"contentGeneration": {
"title": "Generación de contenido",
"description": "Habilita la generación de contenido adicional durante la personalización del currículum. Cuando está habilitado, estos documentos se generarán automáticamente junto con tu currículum personalizado.",
"coverLetter": {
"label": "Carta de presentación",
"description": "Genera una carta de presentación personalizada junto con tu currículum"
},
"outreachMessage": {
"label": "Mensaje de acercamiento en frío",
"description": "Genera un mensaje de networking para LinkedIn o correo electrónico"
},
"customPromptLabel": "Prompt personalizado (opcional)",
"customPromptHelp": "Debe incluir estos marcadores (cada uno entre llaves): job_description, resume_data, output_language. Déjalo en blanco para usar el prompt por defecto.",
"customPromptResetButton": "Restablecer al predeterminado",
"customPromptErrorMissing": "Faltan marcadores requeridos: {missing}",
"interviewPrep": {
"label": "Preparación de entrevista",
"description": "Genera automáticamente preparación de entrevista junto con los currículums adaptados guardados"
}
},
"promptSettings": {
"title": "Configuración de Prompts",
"description": "Elige el prompt predeterminado para personalizar el currículum.",
"defaultLabel": "Prompt de personalización predeterminado"
},
"footer": {
"status": {
"checking": "Comprobando...",
"ready": "ESTADO: LISTO",
"setupRequired": "ESTADO: CONFIGURACIÓN REQUERIDA",
"offline": "ESTADO: SIN CONEXIÓN"
}
},
"errors": {
"unableToConnectBackend": "No se puede acceder al servidor. Asegúrate de que esté en ejecución.",
"apiKeyRequired": "Se requiere una clave API para el proveedor seleccionado.",
"unknownProvider": "Proveedor desconocido devuelto por el backend: {provider}",
"unableToSaveConfiguration": "No se pudo guardar la configuración",
"failedToClearApiKeys": "No se pudieron borrar las claves API. Inténtalo de nuevo.",
"failedToResetDatabase": "No se pudo restablecer la base de datos. Inténtalo de nuevo."
},
"apiKeys": {
"savedTitle": "Claves de API guardadas",
"deleteAria": "Eliminar la clave de {provider}",
"deleteConfirmTitle": "¿Eliminar clave de API?",
"deleteConfirmDescription": "¿Eliminar la clave de API de {provider} guardada? Puedes volver a añadirla más tarde."
}
},
"resumeViewer": {
"resumeNotFound": "Currículum no encontrado",
"loading": "Cargando el currículum...",
"useTailorFeature": "Usar función de personalización",
"retryProcessing": "Reintentar procesamiento",
"deleteAndStartOver": "Eliminar y empezar de nuevo",
"returnToDashboard": "Volver al Panel",
"enhanceResume": "Mejorar currículum",
"downloadResume": "Descargar currículum",
"deletedTitle": "Currículum eliminado",
"deletedDescriptionMaster": "Tu currículum maestro se ha eliminado permanentemente del sistema.",
"deletedDescriptionRegular": "El currículum se ha eliminado permanentemente del sistema.",
"deleteFailedTitle": "Error al eliminar",
"errors": {
"processingFailed": "No pudimos leer tu currículum. Reintenta el procesamiento, o elimínalo y sube otro archivo.",
"stillProcessing": "Tu currículum todavía se está procesando. Espera unos segundos y actualiza la página.",
"notProcessedYet": "El currículum aún no se ha procesado. Usa la función de personalización para generar un currículum estructurado.",
"noDataAvailable": "No hay datos de currículum disponibles.",
"failedToLoad": "No se pudieron cargar los datos del currículum.",
"failedToDelete": "No se pudo eliminar el currículum. Inténtalo de nuevo."
},
"titlePlaceholder": "Ingrese el título del currículum..."
},
"preview": {
"margins": "Márgenes",
"calculating": "Calculando...",
"pageBreak": "Salto de página",
"pageCountSingular": "{count} página",
"pageCountPlural": "{count} páginas",
"zoomIn": "Acercar",
"zoomOut": "Alejar"
},
"resume": {
"personalInfo": {
"name": "Nombre Completo",
"title": "Título del Puesto",
"email": "Correo Electrónico",
"phone": "Teléfono",
"location": "Ubicación",
"website": "Sitio Web",
"linkedin": "LinkedIn",
"github": "GitHub"
},
"sections": {
"personalInfo": "Información Personal",
"summary": "Resumen",
"experience": "Experiencia",
"education": "Educación",
"projects": "Proyectos",
"skills": "Habilidades y Premios",
"skillsOnly": "Habilidades",
"certifications": "Formación y Certificaciones",
"languages": "Idiomas",
"awards": "Premios",
"links": "Enlaces"
},
"defaults": {
"name": "Tu nombre"
},
"additional": {
"technicalSkills": "Habilidades técnicas"
},
"additionalLabels": {
"technicalSkills": "Habilidades técnicas:",
"languages": "Idiomas:",
"certifications": "Certificaciones:",
"awards": "Premios:"
}
},
"coverLetter": {
"title": "Carta de Presentación",
"generate": "Generar Carta de Presentación",
"regenerate": "Regenerar",
"copyToClipboard": "Copiar al Portapapeles",
"editor": {
"placeholder": "Tu carta de presentación aparecerá aquí después de adaptar tu currículum con la generación de carta activada...",
"tip": "CONSEJO: Una buena carta suele tener 300-400 palabras. Edita para personalizar."
},
"preview": {
"defaultName": "Tu nombre",
"emptyTitle": "Todavía no hay contenido de carta.",
"emptyDescription": "Activa la generación de carta en Ajustes y luego adapta un currículum."
},
"print": {
"emptyContent": "No hay contenido de carta de presentación."
},
"copied": "¡Copiado!"
},
"outreach": {
"title": "Mensaje de Contacto",
"generate": "Generar Mensaje de Contacto",
"regenerate": "Regenerar",
"copy": "Copiar",
"copyToClipboard": "Copiar al Portapapeles",
"copied": "¡Copiado!",
"editor": {
"placeholder": "Tu mensaje de contacto en frío aparecerá aquí después de adaptar tu currículum con la generación de mensajes activada...",
"tip": "CONSEJO: Mantén el mensaje breve (100-150 palabras). Copia y pega en LinkedIn o email."
},
"preview": {
"channels": {
"linkedin": "LinkedIn",
"email": "Email"
},
"howToUseTitle": "Cómo usar:",
"steps": {
"step1": "1. Copia el mensaje usando el botón de arriba",
"step2": "2. Abre LinkedIn o tu cliente de email",
"step3": "3. Pega y personaliza según sea necesario",
"step4": "4. Envíalo a recruiters o responsables de contratación"
},
"emptyTitle": "Todavía no hay mensaje de contacto.",
"emptyDescription": "Activa la generación de mensajes en Ajustes y luego adapta un currículum."
}
},
"errors": {
"generic": "Algo salió mal. Por favor, inténtalo de nuevo.",
"networkError": "Error de red. Por favor, verifica tu conexión.",
"unauthorized": "Por favor, inicia sesión para continuar.",
"notFound": "El recurso solicitado no fue encontrado.",
"validationError": "Algunos campos necesitan atención. Revisa los campos marcados e inténtalo de nuevo.",
"boundary": {
"title": "Algo salió mal",
"description": "Algo inesperado se rompió. Intenta recargar la página — si sigue ocurriendo, avísanos.",
"tryAgain": "Reintentar",
"reloadPage": "Recargar página"
}
},
"a11y": {
"removeItem": "Eliminar elemento",
"removeDescription": "Eliminar esta línea",
"removeFile": "Eliminar archivo"
},
"confirmations": {
"deleteResume": "¿Eliminar este currículum?",
"deleteResumeDescription": "El currículum se eliminará permanentemente.",
"deleteMasterResumeTitle": "Eliminar currículum maestro",
"deleteMasterResumeDescription": "Tu currículum maestro se eliminará permanentemente.",
"deleteResumeFromSystemDescription": "El currículum se eliminará permanentemente.",
"deleteResumeConfirmLabel": "Eliminar currículum",
"keepResumeCancelLabel": "Conservar currículum",
"discardChanges": "¿Descartar los cambios sin guardar?",
"discardChangesDescription": "Perderás cualquier trabajo que no hayas guardado.",
"clearApiKeys": "¿Borrar Todas las Claves API?",
"clearApiKeysDescription": "Tendrás que volver a ingresarlas antes de usar las funciones de IA de nuevo.",
"resetDatabase": "¿Restablecer todo y empezar de nuevo?",
"resetDatabaseDescription": "Esto eliminará permanentemente cada currículum, descripción de trabajo y documento generado."
},
"resumeWizard": {
"title": "Asistente de currículum",
"answerLabel": "Tu respuesta",
"keepAddingPrompt": "¿Qué te gustaría añadir o cambiar?",
"readyHint": "Ya tienes suficiente para un currículum sólido: revísalo y termínalo cuando quieras.",
"sections": {
"intro": "Primeros pasos",
"contact": "Datos de contacto",
"summary": "Resumen profesional",
"workExperience": "Experiencia laboral",
"internships": "Prácticas",
"education": "Educación",
"personalProjects": "Proyectos",
"skills": "Habilidades",
"review": "Revisión"
},
"actions": {
"continue": "Continuar",
"skip": "Omitir",
"back": "Atrás",
"review": "Revisar y finalizar",
"create": "Crear currículum maestro",
"keepAdding": "Seguir añadiendo",
"backToDashboard": "Volver al panel"
},
"preview": {
"label": "Borrador en vivo",
"empty": "Tu currículum aparece aquí a medida que respondes.",
"unnamed": "Currículum sin nombre",
"experience": "Experiencia",
"education": "Educación",
"projects": "Proyectos",
"skills": "Habilidades"
},
"errors": {
"turnFailed": "El asistente no pudo guardar esa respuesta. Inténtalo de nuevo.",
"finalizeFailed": "El asistente no pudo crear tu currículum maestro. Inténtalo de nuevo."
},
"entry": {
"kicker": "Configuración del currículum maestro",
"title": "Elige tu punto de partida",
"description": "Crea tu currículum maestro a partir de un documento existente o constrúyelo paso a paso con ayuda de IA.",
"upload": {
"kicker": "Archivo existente",
"title": "Subir un currículum",
"description": "Empieza con un archivo PDF, DOC o DOCX y deja que Resume Matcher lo convierta en tu perfil maestro.",
"action": "Subir currículum"
},
"wizard": {
"kicker": "Guiado por IA",
"title": "Construir con el asistente de IA",
"description": "Responde preguntas enfocadas y deja que el asistente arme un primer borrador sólido de tu currículum maestro.",
"action": "Iniciar asistente"
}
}
},
"tracker": {
"scroll": {
"prev": "Desplazar a la izquierda",
"next": "Desplazar a la derecha",
"hint": "Desplázate para ver más etapas"
},
"title": "Seguimiento de candidaturas",
"subtitle": "Controla en qué punto está cada currículum adaptado de tu proceso.",
"addApplication": "Añadir candidatura",
"columns": {
"saved": "Guardado",
"applied": "Enviado",
"no_response": "Sin respuesta",
"response": "Respuesta",
"interview": "Entrevista",
"accepted": "Aceptado",
"rejected": "Rechazado",
"empty": "Aún no hay nada aquí"
},
"empty": {
"title": "Aún no hay candidaturas",
"description": "Adapta un currículum a un empleo o añade uno manualmente para empezar."
},
"card": {
"companyUnknown": "Empresa desconocida",
"roleUnknown": "Puesto sin título",
"sharedResume": "Currículum compartido",
"selectAria": "Seleccionar candidatura",
"dragAria": "Arrastra para reordenar"
},
"modal": {
"jobDescription": "Descripción del empleo",
"noJobDescription": "No hay descripción del empleo.",
"notes": "Notas",
"notesPlaceholder": "Añade notas sobre esta candidatura…",
"saveNotes": "Guardar notas",
"resumeUnavailable": "El currículum enviado ya no está disponible.",
"loadFailed": "No se pudo cargar esta candidatura.",
"editResume": "Editar currículum"
},
"bulk": {
"selected": "{count} seleccionadas",
"moveTo": "Mover a…",
"clear": "Limpiar",
"deleteConfirmTitle": "¿Eliminar candidaturas?",
"deleteConfirmDescription": "¿Eliminar {count} candidatura(s) seleccionada(s)? Esto no se puede deshacer."
},
"manualAdd": {
"title": "Añadir candidatura",
"description": "Haz seguimiento de una candidatura pegando su descripción.",
"resume": "Currículum",
"untitledResume": "Currículum sin título",
"jobDescription": "Descripción del empleo",
"jobDescriptionPlaceholder": "Pega aquí la descripción del empleo…",
"company": "Empresa",
"role": "Puesto",
"optional": "Opcional",
"status": "Estado",
"submit": "Añadir",
"validation": "Elige un currículum y pega una descripción del empleo.",
"failed": "No se pudo crear la candidatura."
},
"errors": {
"loadFailed": "No se pudieron cargar las candidaturas.",
"moveFailed": "No se pudo mover la candidatura.",
"deleteFailed": "No se pudieron eliminar las candidaturas."
}
},
"interviewPrep": {
"title": "Preparación de entrevista",
"regenerate": "Regenerar",
"unavailableTitle": "Preparación no disponible",
"loadingContextDescription": "Comprobando el contexto del puesto para este currículum adaptado antes de generar.",
"missingContextDescription": "Este currículum adaptado no tiene el contexto del puesto guardado que se necesita para generar preparación de entrevista. Vuelve a adaptar el currículum con una descripción del puesto.",
"saveRequiredDescription": "Guarda este currículum adaptado antes de generar preparación de entrevista.",
"focusArea": "Área de enfoque",
"suggestedAnswerPoints": "Puntos sugeridos para responder",
"whyItMatters": "Por qué importa",
"preparationSuggestion": "Sugerencia de preparación",
"sections": {
"roleFit": "Análisis de encaje",
"resumeQuestions": "Preguntas basadas en el currículum",
"projectFollowUps": "Seguimiento de proyectos",
"skillGaps": "Brechas de habilidades",
"talkingPoints": "Puntos clave"
}
}
}