Files
SnapOtter/packages/shared/src/i18n/es.ts
T
SnapOtterandGitHub 991c981529 fix: make OCR portable and reliable across AMD64 and ARM64 (#519)
* fix: make OCR portable and reliable

* fix: harden OCR installation portability

* fix: pin OCR partials across downloads

* fix: make OCR execution reliably asynchronous

* fix: harden OCR portability and docs routes

* fix: preserve decoder and docs safeguards
2026-07-15 03:34:24 +08:00

4046 lines
146 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const es: TranslationKeys = {
migrationBanner: {
successTitle: "Datos de SnapOtter 1.x importados.",
successBody:
"Se migraron {users} usuarios y {files} archivos guardados de tu versión anterior.",
warningTitle: "Se encontró una base de datos 1.x, pero no se importó.",
warningBody:
"Esta instancia ya tiene datos, por lo que tu base de datos 1.x no se importó. La importación requiere una instancia vacía. Consulta la guía de actualización.",
dismiss: "Descartar",
},
common: {
upload: "Subir desde la computadora",
process: "Procesar",
download: "Descargar",
cancel: "Cancelar",
save: "Guardar",
delete: "Eliminar",
settings: "Configuración",
search: "Buscar herramientas...",
dropFiles: "Arrastra archivos aquí o haz clic en el botón de carga",
loading: "Cargando...",
saving: "Guardando...",
error: "Ocurrió un error",
confirm: "Confirmar",
close: "Cerrar",
back: "Atrás",
next: "Siguiente",
clear: "Limpiar",
copy: "Copiar",
copied: "¡Copiado!",
noResults: "No se encontraron resultados",
showLess: "Mostrar menos",
showMore: "Mostrar {count} más",
experimental: "Experimental",
enabled: "Activado",
disabled: "Desactivado",
rename: "Renombrar",
edit: "Editar",
actions: "Acciones",
create: "Crear",
or: "o",
goHome: "Ir al inicio",
somethingWentWrong: "Algo salió mal",
unexpectedError: "Ocurrió un error inesperado.",
retry: "Reintentar",
privacyPolicy: "Política de privacidad",
pageNotFound: "Página no encontrada",
pageNotFoundDescription: "La página que buscas no existe o ha sido movida.",
},
feedback: {
navLabel: "Compartir comentarios",
navButtonLabel: "Comentarios",
dialogTitle: "Compartir comentarios",
toolDialogTitle: "¿Qué tal funcionó esta herramienta?",
failedDialogTitle: "Reportar un problema con la herramienta",
adminDialogTitle: "¿Qué tal fue la instalación?",
closeLabel: "Cerrar el diálogo de comentarios",
privacyNote:
"Los comentarios solo se envían cuando tú los envías. SnapOtter no incluye tus archivos, su contenido, sus nombres ni tus resultados privados.",
typeLabel: "Tipo de comentario",
sentimentLabel: "Valoración rápida",
messageLabel: "Comentarios",
messagePlaceholder: "Cuéntanos qué funcionó, qué falló o qué haría mejor a SnapOtter.",
improveFirstLabel: "¿Qué deberíamos mejorar primero?",
improveFirstPlaceholder:
"Cuéntanos qué hizo que la instalación fuera más difícil de lo necesario.",
contactOkLabel: "Pueden contactarme sobre estos comentarios.",
emailPlaceholder: "Correo electrónico (opcional)",
namePlaceholder: "Nombre (opcional)",
companyPlaceholder: "Empresa u organización (opcional)",
submit: "Enviar comentarios",
submitting: "Enviando...",
submitFailed: "No se pudieron enviar los comentarios. Inténtalo de nuevo.",
searchMissTitle: "Solicitar una herramienta",
searchMissContext: "Buscaste: {query}",
searchMissDiscussionsFallback: "No pudimos registrarlo. Abre una solicitud en Discussions.",
offlineDescription:
"Esta instancia tiene la analítica desactivada, así que los comentarios no se registran aquí. Aún puedes contactar directamente con el equipo de SnapOtter.",
offlinePublicNote: "Las incidencias de GitHub son públicas.",
offlineGithubButton: "Abrir una incidencia en GitHub",
offlineEmailButton: "Escríbenos",
thanksTitle: "Gracias por tus comentarios.",
thanksDescription: "Nos ayuda a mejorar SnapOtter sin recopilar archivos ni contenido privado.",
quickThanks: "Gracias por avisarnos.",
reportIssue: "Reportar un problema",
toolPromptTitle: "¿Qué tal funcionó esta herramienta?",
toolPromptDescription: "Una señal rápida nos ayuda a mejorar SnapOtter.",
dismissPrompt: "Descartar el aviso de comentarios",
workedWell: "Funcionó bien",
dontAskAgain: "No volver a preguntar",
shareFeedback: "Compartir comentarios",
remindLater: "Recordármelo más tarde",
adminCardTitle: "¿Qué tal fue la instalación?",
adminCardDescription:
"Una nota rápida de los administradores nos ayuda a mejorar Docker, las instalaciones desde el código fuente y la documentación.",
installMethodLabel: "Método de instalación",
frictionAreaLabel: "Parte más difícil de la instalación",
importantAreasLabel: "Áreas más importantes",
sentiments: {
great: "Genial",
okay: "Bien",
issue: "Tuve un problema",
missing: "Falta algo",
bug: "Error",
idea: "Idea",
other: "Otro",
},
types: {
bug: "Error",
feature_request: "Solicitud de función",
confusing_ux: "UX confusa",
performance: "Rendimiento",
other: "Otro",
},
installMethods: {
docker: "Docker",
docker_compose: "Docker Compose",
source: "Compilado desde el código fuente",
cloud: "Nube/demo",
other: "Otro",
},
usageTypes: {
personal: "Solo yo",
team_internal: "Equipo pequeño",
business_workflow: "Empresa u organización",
education: "Educación",
evaluating: "Evaluando",
},
frictionAreas: {
smooth: "Nada, la instalación fue sencilla",
docker: "Configuración de Docker/contenedores",
environment_variables: "Variables de entorno",
auth: "Autenticación/SSO",
storage: "Almacenamiento/cargas",
workers: "Workers/colas",
ai_tools: "Herramientas de IA",
docs: "Documentación",
performance: "Rendimiento/recursos",
other: "Otro",
},
importantAreas: {
images: "Imágenes",
pdf_docs: "PDF/documentos",
video_audio: "Video/audio",
batch_workflows: "Flujos por lotes",
ai_tools: "Herramientas de IA",
},
},
onboarding: {
usageSurveyTitle: "¿Cómo usas SnapOtter?",
usageSurveyToolsLabel: "¿Qué es lo más importante para ti?",
pickAnyHint: "(elige las que quieras)",
continueLabel: "Continuar",
},
categories: {
essentials: "Esenciales",
adjustments: "Ajustes",
enhance: "Mejorar e IA",
watermark: "Marca de agua y superposición",
layout: "Diseño y composición",
utilities: "Utilidades",
optimization: "Optimización",
format: "Formato y conversión",
"video-edit": "Video",
"video-convert": "Convertir",
"video-effects": "Efectos y composición",
"video-subtitles": "Subtítulos",
"video-metadata": "Metadatos",
"audio-edit": "Editar",
"audio-convert": "Convertir",
"audio-effects": "Efectos y composición",
"audio-metadata": "Metadatos",
"pdf-organize": "Organizar",
"pdf-edit": "Editar y anotar",
"pdf-security": "Seguridad",
"pdf-optimize": "Optimizar",
"doc-convert": "Convertir",
data: "Archivos",
archives: "Archivos comprimidos",
},
modalities: {
image: "Imagen",
video: "Video",
audio: "Audio",
documentsAndFiles: "PDF y archivos",
},
tools: {
// BEGIN conversion-presets (generated by scripts/generate-conversion-i18n.mjs)
"jpg-to-png": {
name: "JPG a PNG",
description: "Convierte JPG a PNG en línea. Rápido, gratis y privado.",
},
"png-to-jpg": {
name: "PNG a JPG",
description: "Convierte PNG a JPG en línea. Rápido, gratis y privado.",
},
"jpg-to-webp": {
name: "JPG a WebP",
description: "Convierte JPG a WebP en línea. Rápido, gratis y privado.",
},
"png-to-webp": {
name: "PNG a WebP",
description: "Convierte PNG a WebP en línea. Rápido, gratis y privado.",
},
"webp-to-jpg": {
name: "WebP a JPG",
description: "Convierte WebP a JPG en línea. Rápido, gratis y privado.",
},
"webp-to-png": {
name: "WebP a PNG",
description: "Convierte WebP a PNG en línea. Rápido, gratis y privado.",
},
"jpg-to-avif": {
name: "JPG a AVIF",
description: "Convierte JPG a AVIF en línea. Rápido, gratis y privado.",
},
"png-to-avif": {
name: "PNG a AVIF",
description: "Convierte PNG a AVIF en línea. Rápido, gratis y privado.",
},
"webp-to-avif": {
name: "WebP a AVIF",
description: "Convierte WebP a AVIF en línea. Rápido, gratis y privado.",
},
"heic-to-jpg": {
name: "HEIC a JPG",
description: "Convierte HEIC a JPG en línea. Rápido, gratis y privado.",
},
"heic-to-png": {
name: "HEIC a PNG",
description: "Convierte HEIC a PNG en línea. Rápido, gratis y privado.",
},
"heic-to-avif": {
name: "HEIC a AVIF",
description: "Convierte HEIC a AVIF en línea. Rápido, gratis y privado.",
},
"jpg-to-gif": {
name: "JPG a GIF",
description: "Convierte JPG a GIF en línea. Rápido, gratis y privado.",
},
"png-to-gif": {
name: "PNG a GIF",
description: "Convierte PNG a GIF en línea. Rápido, gratis y privado.",
},
"gif-to-jpg": {
name: "GIF a JPG",
description: "Convierte GIF a JPG en línea. Rápido, gratis y privado.",
},
"gif-to-png": {
name: "GIF a PNG",
description: "Convierte GIF a PNG en línea. Rápido, gratis y privado.",
},
"webp-to-gif": {
name: "WebP a GIF",
description: "Convierte WebP a GIF en línea. Rápido, gratis y privado.",
},
"jpg-to-tiff": {
name: "JPG a TIFF",
description: "Convierte JPG a TIFF en línea. Rápido, gratis y privado.",
},
"png-to-tiff": {
name: "PNG a TIFF",
description: "Convierte PNG a TIFF en línea. Rápido, gratis y privado.",
},
"tiff-to-jpg": {
name: "TIFF a JPG",
description: "Convierte TIFF a JPG en línea. Rápido, gratis y privado.",
},
"tiff-to-png": {
name: "TIFF a PNG",
description: "Convierte TIFF a PNG en línea. Rápido, gratis y privado.",
},
"psd-to-jpg": {
name: "PSD a JPG",
description: "Convierte PSD a JPG en línea. Rápido, gratis y privado.",
},
"psd-to-png": {
name: "PSD a PNG",
description: "Convierte PSD a PNG en línea. Rápido, gratis y privado.",
},
"png-to-eps": {
name: "PNG a EPS",
description: "Convierte PNG a EPS en línea. Rápido, gratis y privado.",
},
"jpg-to-eps": {
name: "JPG a EPS",
description: "Convierte JPG a EPS en línea. Rápido, gratis y privado.",
},
"eps-to-png": {
name: "EPS a PNG",
description: "Convierte EPS a PNG en línea. Rápido, gratis y privado.",
},
"eps-to-jpg": {
name: "EPS a JPG",
description: "Convierte EPS a JPG en línea. Rápido, gratis y privado.",
},
"png-to-svg": {
name: "PNG a SVG",
description: "Convierte PNG a SVG en línea. Rápido, gratis y privado.",
},
"jpg-to-svg": {
name: "JPG a SVG",
description: "Convierte JPG a SVG en línea. Rápido, gratis y privado.",
},
"tiff-to-svg": {
name: "TIFF a SVG",
description: "Convierte TIFF a SVG en línea. Rápido, gratis y privado.",
},
"psd-to-svg": {
name: "PSD a SVG",
description: "Convierte PSD a SVG en línea. Rápido, gratis y privado.",
},
"eps-to-svg": {
name: "EPS a SVG",
description: "Convierte EPS a SVG en línea. Rápido, gratis y privado.",
},
"svg-to-png": {
name: "SVG a PNG",
description: "Convierte SVG a PNG en línea. Rápido, gratis y privado.",
},
"svg-to-jpg": {
name: "SVG a JPG",
description: "Convierte SVG a JPG en línea. Rápido, gratis y privado.",
},
"jpg-to-pdf": {
name: "JPG a PDF",
description: "Convierte JPG a PDF en línea. Rápido, gratis y privado.",
},
"png-to-pdf": {
name: "PNG a PDF",
description: "Convierte PNG a PDF en línea. Rápido, gratis y privado.",
},
"heic-to-pdf": {
name: "HEIC a PDF",
description: "Convierte HEIC a PDF en línea. Rápido, gratis y privado.",
},
"tiff-to-pdf": {
name: "TIFF a PDF",
description: "Convierte TIFF a PDF en línea. Rápido, gratis y privado.",
},
"webp-to-pdf": {
name: "WebP a PDF",
description: "Convierte WebP a PDF en línea. Rápido, gratis y privado.",
},
"gif-to-pdf": {
name: "GIF a PDF",
description: "Convierte GIF a PDF en línea. Rápido, gratis y privado.",
},
"eps-to-pdf": {
name: "EPS a PDF",
description: "Convierte EPS a PDF en línea. Rápido, gratis y privado.",
},
"pdf-to-jpg": {
name: "PDF a JPG",
description: "Convierte PDF a JPG en línea. Rápido, gratis y privado.",
},
"pdf-to-png": {
name: "PDF a PNG",
description: "Convierte PDF a PNG en línea. Rápido, gratis y privado.",
},
"pdf-to-tiff": {
name: "PDF a TIFF",
description: "Convierte PDF a TIFF en línea. Rápido, gratis y privado.",
},
"mov-to-mp4": {
name: "MOV a MP4",
description: "Convierte MOV a MP4 en línea. Rápido, gratis y privado.",
},
"webm-to-mp4": {
name: "WEBM a MP4",
description: "Convierte WEBM a MP4 en línea. Rápido, gratis y privado.",
},
"mkv-to-mp4": {
name: "MKV a MP4",
description: "Convierte MKV a MP4 en línea. Rápido, gratis y privado.",
},
"avi-to-mp4": {
name: "AVI a MP4",
description: "Convierte AVI a MP4 en línea. Rápido, gratis y privado.",
},
"mp4-to-mov": {
name: "MP4 a MOV",
description: "Convierte MP4 a MOV en línea. Rápido, gratis y privado.",
},
"mp4-to-webm": {
name: "MP4 a WEBM",
description: "Convierte MP4 a WEBM en línea. Rápido, gratis y privado.",
},
"webm-to-mov": {
name: "WEBM a MOV",
description: "Convierte WEBM a MOV en línea. Rápido, gratis y privado.",
},
"mkv-to-mov": {
name: "MKV a MOV",
description: "Convierte MKV a MOV en línea. Rápido, gratis y privado.",
},
"avi-to-mov": {
name: "AVI a MOV",
description: "Convierte AVI a MOV en línea. Rápido, gratis y privado.",
},
"mp4-to-avi": {
name: "MP4 a AVI",
description: "Convierte MP4 a AVI en línea. Rápido, gratis y privado.",
},
"mov-to-avi": {
name: "MOV a AVI",
description: "Convierte MOV a AVI en línea. Rápido, gratis y privado.",
},
"mkv-to-avi": {
name: "MKV a AVI",
description: "Convierte MKV a AVI en línea. Rápido, gratis y privado.",
},
"avi-to-mkv": {
name: "AVI a MKV",
description: "Convierte AVI a MKV en línea. Rápido, gratis y privado.",
},
"mp4-to-gif": {
name: "MP4 a GIF",
description: "Convierte MP4 a GIF en línea. Rápido, gratis y privado.",
},
"mov-to-gif": {
name: "MOV a GIF",
description: "Convierte MOV a GIF en línea. Rápido, gratis y privado.",
},
"mkv-to-gif": {
name: "MKV a GIF",
description: "Convierte MKV a GIF en línea. Rápido, gratis y privado.",
},
"avi-to-gif": {
name: "AVI a GIF",
description: "Convierte AVI a GIF en línea. Rápido, gratis y privado.",
},
"gif-to-mp4": {
name: "GIF a MP4",
description: "Convierte GIF a MP4 en línea. Rápido, gratis y privado.",
},
"gif-to-webm": {
name: "GIF a WEBM",
description: "Convierte GIF a WEBM en línea. Rápido, gratis y privado.",
},
"gif-to-mov": {
name: "GIF a MOV",
description: "Convierte GIF a MOV en línea. Rápido, gratis y privado.",
},
"mp4-to-mp3": {
name: "MP4 a MP3",
description: "Convierte MP4 a MP3 en línea. Rápido, gratis y privado.",
},
"mov-to-mp3": {
name: "MOV a MP3",
description: "Convierte MOV a MP3 en línea. Rápido, gratis y privado.",
},
"mkv-to-mp3": {
name: "MKV a MP3",
description: "Convierte MKV a MP3 en línea. Rápido, gratis y privado.",
},
"webm-to-mp3": {
name: "WEBM a MP3",
description: "Convierte WEBM a MP3 en línea. Rápido, gratis y privado.",
},
"avi-to-mp3": {
name: "AVI a MP3",
description: "Convierte AVI a MP3 en línea. Rápido, gratis y privado.",
},
"mp4-to-wav": {
name: "MP4 a WAV",
description: "Convierte MP4 a WAV en línea. Rápido, gratis y privado.",
},
"mov-to-wav": {
name: "MOV a WAV",
description: "Convierte MOV a WAV en línea. Rápido, gratis y privado.",
},
"mp4-to-ogg": {
name: "MP4 a OGG",
description: "Convierte MP4 a OGG en línea. Rápido, gratis y privado.",
},
"m4a-to-mp3": {
name: "M4A a MP3",
description: "Convierte M4A a MP3 en línea. Rápido, gratis y privado.",
},
"m4a-to-wav": {
name: "M4A a WAV",
description: "Convierte M4A a WAV en línea. Rápido, gratis y privado.",
},
"aac-to-mp3": {
name: "AAC a MP3",
description: "Convierte AAC a MP3 en línea. Rápido, gratis y privado.",
},
"aac-to-wav": {
name: "AAC a WAV",
description: "Convierte AAC a WAV en línea. Rápido, gratis y privado.",
},
"aac-to-flac": {
name: "AAC a FLAC",
description: "Convierte AAC a FLAC en línea. Rápido, gratis y privado.",
},
"ogg-to-mp3": {
name: "OGG a MP3",
description: "Convierte OGG a MP3 en línea. Rápido, gratis y privado.",
},
"ogg-to-wav": {
name: "OGG a WAV",
description: "Convierte OGG a WAV en línea. Rápido, gratis y privado.",
},
"wav-to-mp3": {
name: "WAV a MP3",
description: "Convierte WAV a MP3 en línea. Rápido, gratis y privado.",
},
"mp3-to-wav": {
name: "MP3 a WAV",
description: "Convierte MP3 a WAV en línea. Rápido, gratis y privado.",
},
"flac-to-mp3": {
name: "FLAC a MP3",
description: "Convierte FLAC a MP3 en línea. Rápido, gratis y privado.",
},
"excel-to-csv": {
name: "Excel a CSV",
description: "Convierte Excel a CSV en línea. Rápido, gratis y privado.",
},
// END conversion-presets
resize: {
name: "Redimensionar",
description: "Redimensiona por píxeles, porcentaje o presets de redes sociales",
},
crop: {
name: "Recortar",
description: "Recorte libre, relaciones de aspecto, recorte con forma",
},
rotate: { name: "Rotar y voltear", description: "Rota, voltea y endereza imágenes" },
convert: { name: "Convertir", description: "Convierte entre formatos de imagen" },
compress: {
name: "Comprimir",
description: "Reduce el tamaño del archivo por calidad o tamaño objetivo",
},
"optimize-for-web": {
name: "Optimizar para web",
description:
"Optimiza imágenes para web con conversión de formato, control de calidad y vista previa en vivo",
},
"strip-metadata": {
name: "Eliminar metadatos",
description: "Elimina EXIF, GPS e información de la cámara",
},
"edit-metadata": {
name: "Editar metadatos",
description: "Edita EXIF, IPTC, XMP, GPS, palabras clave y fechas",
},
"bulk-rename": {
name: "Renombrado masivo",
description: "Renombra múltiples archivos con patrones",
},
"image-to-pdf": {
name: "Imagen a PDF",
description: "Combina imágenes en un documento PDF",
},
"pdf-to-image": { name: "PDF a imagen", description: "Convierte páginas PDF a imágenes" },
favicon: {
name: "Generador de Favicon",
description: "Genera todos los tamaños de favicon e iconos de app",
},
"adjust-colors": {
name: "Ajustar colores",
description: "Brillo, contraste, exposición, saturación, temperatura, nitidez y efectos",
},
sharpening: {
name: "Enfoque",
description: "Enfoque adaptativo, máscara de desenfoque y paso alto con presets",
},
"replace-color": {
name: "Reemplazar e invertir color",
description: "Reemplaza colores específicos o invierte",
},
"color-blindness": {
name: "Simulación de daltonismo",
description:
"Simula cómo se ven las imágenes con diferentes tipos de deficiencia de visión del color",
},
"remove-background": {
name: "Eliminar fondo",
description: "Eliminación de fondo con AI",
},
upscale: { name: "Escalar imagen", description: "Mejora de super-resolución con AI" },
"erase-object": {
name: "Borrador de objetos",
description: "Elimina objetos no deseados con AI",
},
ocr: {
name: "Extraer texto de imagen (OCR)",
description: "Extrae texto de imágenes con precisión potenciada por AI",
},
"ocr-pdf": {
name: "OCR de PDF",
description: "Extrae texto de documentos PDF con OCR potenciado por IA",
},
"blur-faces": {
name: "Desenfocar rostros / datos sensibles",
description: "Detecta y desenfoca rostros e información sensible automáticamente",
},
"enhance-faces": {
name: "Mejora de rostros",
description: "Restaura y mejora rostros con AI",
},
"smart-crop": {
name: "Recorte inteligente",
description: "Recorte inteligente por sujeto, rostro o bordes",
},
"image-enhancement": {
name: "Mejora de imagen",
description:
"Mejora automática con un clic: exposición, contraste, color y nitidez inteligentes",
},
"noise-removal": {
name: "Eliminación de ruido",
description: "Eliminación de ruido y grano con AI",
},
"red-eye-removal": {
name: "Eliminación de ojos rojos",
description: "Detección y corrección de ojos rojos con AI para fotos con flash",
},
"restore-photo": {
name: "Restauración de fotos",
description: "Repara rasguños, roturas y daños en fotos antiguas con AI",
},
"content-aware-resize": {
name: "Redimensión consciente del contenido",
description: "Redimensiona imágenes de forma inteligente preservando el contenido importante",
},
"ai-canvas-expand": {
name: "Expandir lienzo con AI",
description: "Expande el lienzo con relleno generado por AI",
},
colorize: {
name: "Colorización con AI",
description:
"Convierte fotos en blanco y negro a color usando modelos de aprendizaje profundo con AI",
},
"passport-photo": {
name: "Foto de pasaporte",
description:
"Crea fotos de pasaporte, visa e identificación que cumplen con los requisitos oficiales, con detección automática de rostro",
},
"transcribe-audio": {
name: "Transcribir audio",
description: "Convierte voz a texto con transcripción impulsada por IA",
},
"auto-subtitles": {
name: "Subtítulos automáticos",
description: "Genera archivos de subtítulos a partir de pistas de audio de video",
},
"transparency-fixer": {
name: "Corrector de transparencia PNG",
description: "Corrige PNGs con transparencia falsa en un clic",
},
"background-replace": {
name: "Reemplazar fondo",
description: "Reemplazar el fondo de la imagen con un color sólido",
},
"blur-background": {
name: "Desenfocar fondo",
description: "Desenfocar el fondo manteniendo el sujeto nítido",
},
"watermark-text": {
name: "Marca de agua de texto",
description: "Agrega una marca de agua de texto",
},
"watermark-image": {
name: "Marca de agua de imagen",
description: "Superpone un logo como marca de agua",
},
"text-overlay": {
name: "Texto superpuesto",
description: "Agrega texto con estilo a las imágenes",
},
compose: {
name: "Composición de imagen",
description: "Superpone imágenes con posición y opacidad",
},
"meme-generator": {
name: "Generador de Meme",
description:
"Crea memes con plantillas populares o tus propias imágenes. Texto clásico estilo Impact con fuentes, colores y posición personalizables.",
},
info: {
name: "Info de imagen",
description: "Ve todos los metadatos y propiedades de la imagen",
},
compare: { name: "Comparar imágenes", description: "Comparación lado a lado de dos imágenes" },
"find-duplicates": {
name: "Buscar duplicados",
description: "Detecta imágenes duplicadas y casi duplicadas",
},
"color-palette": {
name: "Paleta de colores",
description: "Extrae los colores dominantes de una imagen",
},
"qr-generate": {
name: "Generador de códigos QR",
description: "Genera códigos QR con estilos, colores personalizados, patrones y logos",
},
"html-to-image": {
name: "HTML a imagen",
description: "Captura páginas web como imágenes de alta calidad",
},
"barcode-read": {
name: "Lector de códigos de barras",
description: "Escanea imágenes en busca de códigos QR, códigos de barras y códigos 2D",
},
collage: {
name: "Collage / Cuadrícula",
description: "Combina imágenes en hermosos collages con más de 25 plantillas",
},
stitch: {
name: "Unir / Combinar",
description: "Une imágenes lado a lado, apiladas o en cuadrícula",
},
split: {
name: "Dividir imagen",
description: "Divide imágenes en cuadrícula o por tamaño en píxeles con vista previa en vivo",
},
border: {
name: "Borde y marco",
description: "Agrega bordes, relleno, esquinas redondeadas y sombras con presets de un clic",
},
beautify: {
name: "Embellecer captura de pantalla",
description:
"Agrega fondos degradados, marcos de dispositivo, sombras y tamaños de redes sociales a capturas de pantalla",
},
"circle-crop": {
name: "Recorte circular",
description: "Recorta la imagen en un círculo centrado con esquinas transparentes",
},
duotone: {
name: "Duotono",
description: "Aplica un efecto duotono con colores personalizados de sombra y resaltado",
},
"image-pad": {
name: "Relleno de imagen",
description:
"Rellena la imagen hasta una relación de aspecto objetivo con un fondo de color sólido",
},
pixelate: {
name: "Pixelar",
description: "Aplica un efecto de pixelado a la imagen completa o a una región específica",
},
vignette: {
name: "Viñeta",
description: "Añade un efecto de viñeta con intensidad y color ajustables",
},
"gif-webp": {
name: "Convertidor GIF/WebP",
description: "Convierte GIF animado a WebP y viceversa, conservando todos los fotogramas",
},
histogram: {
name: "Histograma",
description: "Genera un gráfico de histograma RGB a partir de una imagen",
},
"lqip-placeholder": {
name: "Marcador LQIP",
description: "Genera un marcador de imagen de baja calidad con URI de datos base64",
},
"sprite-sheet": {
name: "Hoja de sprites",
description: "Combina varias imágenes en una cuadrícula de hoja de sprites",
},
"svg-to-raster": {
name: "SVG a raster",
description:
"Convierte SVG a PNG, JPEG, WebP, AVIF, TIFF, GIF o HEIF a escala y DPI personalizados",
},
vectorize: {
name: "Imagen a SVG",
description: "Convierte imágenes a gráficos vectoriales escalables",
},
"gif-tools": {
name: "Herramientas GIF",
description:
"Redimensiona, optimiza, cambia velocidad, invierte, extrae fotogramas y rota GIFs animados",
},
"image-to-base64": {
name: "Imagen a Base64",
description: "Convierte imágenes a cadenas Base64 para incrustar en HTML, CSS y más",
},
"barcode-generate": {
name: "Generador de códigos de barras",
description:
"Genera códigos de barras en Code 128, EAN-13, UPC-A, Code 39, ITF-14 y Data Matrix",
},
"chart-maker": {
name: "Creador de gráficos",
description: "Crea gráficos de barras, líneas o circulares a partir de datos CSV o JSON",
},
"convert-video": {
name: "Convertir vídeo",
description: "Convierte vídeos entre MP4, MOV y WebM",
},
"compress-video": {
name: "Comprimir vídeo",
description: "Reduce el tamaño del archivo de vídeo con control de calidad",
},
"trim-video": {
name: "Cortar vídeo",
description: "Corta un fragmento de un vídeo",
},
"mute-video": {
name: "Silenciar vídeo",
description: "Elimina la pista de audio de un vídeo",
},
"video-to-gif": {
name: "Vídeo a GIF",
description: "Convierte un fragmento de vídeo en un GIF animado",
},
"resize-video": {
name: "Redimensionar vídeo",
description: "Escala un vídeo a una nueva resolución o tamaño predefinido",
},
"crop-video": {
name: "Recortar vídeo",
description: "Recorta una región de un vídeo",
},
"rotate-video": {
name: "Rotar vídeo",
description: "Rota o voltea un vídeo",
},
"change-fps": {
name: "Cambiar FPS",
description: "Cambia la velocidad de fotogramas de un vídeo",
},
"video-color": {
name: "Color de vídeo",
description: "Ajusta brillo, contraste, saturación y gamma",
},
"video-speed": {
name: "Velocidad de vídeo",
description: "Acelera o ralentiza un vídeo",
},
"reverse-video": {
name: "Invertir vídeo",
description: "Reproduce un fragmento de vídeo al revés",
},
"video-loudnorm": {
name: "Normalizar audio",
description: "Normaliza el volumen del audio del vídeo al estándar de emisión",
},
"aspect-pad": {
name: "Relleno de aspecto",
description: "Añade barras de color sólido para ajustar a una relación de aspecto",
},
"blur-pad": {
name: "Relleno difuminado",
description: "Rellena las barras con una copia difuminada del vídeo",
},
"watermark-video": {
name: "Marca de agua en vídeo",
description: "Graba una marca de agua de texto en los fotogramas del vídeo",
},
"stabilize-video": {
name: "Estabilizar vídeo",
description: "Reduce el temblor de cámara con estabilización de dos pasadas",
},
"gif-to-video": {
name: "GIF a vídeo",
description: "Convierte un GIF animado en un vídeo MP4 o WebM",
},
"video-to-webp": {
name: "Vídeo a WebP",
description: "Convierte un fragmento de vídeo en una imagen WebP animada",
},
"video-to-frames": {
name: "Vídeo a fotogramas",
description: "Extrae fotogramas de un vídeo como un ZIP de imágenes",
},
"merge-videos": {
name: "Unir vídeos",
description: "Une varios fragmentos de vídeo en un solo archivo",
},
"replace-audio": {
name: "Reemplazar audio",
description: "Sustituye la pista de audio de un vídeo con otro archivo",
},
"burn-subtitles": {
name: "Grabar subtítulos",
description: "Incrusta subtítulos permanentemente en los fotogramas del vídeo",
},
"embed-subtitles": {
name: "Incrustar subtítulos",
description: "Añade una pista de subtítulos al contenedor de vídeo",
},
"extract-subtitles": {
name: "Extraer subtítulos",
description: "Extrae la pista de subtítulos de un vídeo como archivo SRT",
},
"images-to-video": {
name: "Imágenes a vídeo",
description: "Convierte un conjunto de imágenes en un vídeo de presentación",
},
"video-metadata": {
name: "Limpiar metadatos de vídeo",
description: "Elimina los metadatos de un vídeo e informa de lo encontrado",
},
"convert-audio": {
name: "Convertir audio",
description: "Convierte audio entre MP3, WAV, OGG y más",
},
"trim-audio": {
name: "Cortar audio",
description: "Corta una sección de un archivo de audio",
},
"extract-audio": {
name: "Extraer audio",
description: "Extrae la pista de audio de un vídeo",
},
"volume-adjust": {
name: "Ajustar volumen",
description: "Aumenta o disminuye el volumen de audio con una ganancia fija",
},
"normalize-audio": {
name: "Normalizar audio",
description: "Iguala la sonoridad a niveles estándar de emisión",
},
"fade-audio": {
name: "Fundido de audio",
description: "Añade efectos de fundido de entrada y salida al audio",
},
"reverse-audio": {
name: "Invertir audio",
description: "Reproduce el audio al revés",
},
"audio-speed": {
name: "Velocidad de audio",
description: "Acelera o ralentiza la reproducción de audio",
},
"pitch-shift": {
name: "Cambio de tono",
description: "Sube o baja el tono por semitonos sin cambiar la velocidad",
},
"audio-channels": {
name: "Canales de audio",
description: "Convierte entre mono, estéreo o intercambia canales izquierdo y derecho",
},
"silence-removal": {
name: "Eliminar silencios",
description: "Elimina las secciones silenciosas del audio",
},
"noise-reduction": {
name: "Reducción de ruido",
description: "Reduce el ruido de fondo con eliminación de ruido basada en FFT",
},
"merge-audio": {
name: "Unir audio",
description: "Combina varios archivos de audio en uno",
},
"split-audio": {
name: "Dividir audio",
description: "Divide el audio por tiempo, partes iguales o detección de silencio",
},
"ringtone-maker": {
name: "Creador de tonos",
description: "Crea un tono de llamada a partir de cualquier archivo de audio",
},
"waveform-image": {
name: "Imagen de forma de onda",
description: "Genera una visualización de forma de onda como imagen PNG",
},
"audio-metadata": {
name: "Metadatos de audio",
description: "Ver, editar o eliminar etiquetas de audio (ID3)",
},
"merge-pdf": {
name: "Unir PDFs",
description: "Combina varios PDFs en uno",
},
"split-pdf": {
name: "Dividir PDF",
description: "Extrae páginas o divide en partes",
},
"compress-pdf": {
name: "Comprimir PDF",
description: "Reduce el tamaño del archivo PDF",
},
"rotate-pdf": {
name: "Rotar PDF",
description: "Rota las páginas de un PDF",
},
"convert-document": {
name: "Convertir documento",
description: "Convierte entre formatos Word, OpenDocument, RTF y texto plano",
},
"convert-presentation": {
name: "Convertir presentación",
description: "Convierte entre formatos de presentación PowerPoint y OpenDocument",
},
"convert-spreadsheet": {
name: "Convertir hoja de cálculo",
description:
"Convierte entre formatos Excel, OpenDocument y CSV. Los libros con varias hojas exportan la primera hoja a CSV.",
},
"excel-to-pdf": {
name: "Excel a PDF",
description:
"Convierte hojas de cálculo a PDF. Las hojas anchas pueden paginarse en varias páginas.",
},
"word-to-pdf": {
name: "Word a PDF",
description: "Convierte documentos Word a PDF",
},
"extract-pages": {
name: "Extraer páginas",
description: "Extrae las páginas seleccionadas en un nuevo PDF",
},
"remove-pages": {
name: "Eliminar páginas",
description: "Elimina páginas específicas de un PDF",
},
"organize-pdf": {
name: "Organizar PDF",
description: "Reordena las páginas con un orden explícito",
},
"protect-pdf": {
name: "Proteger PDF",
description: "Añade protección con contraseña (cifrado AES-256)",
},
"unlock-pdf": {
name: "Desbloquear PDF",
description: "Elimina la protección con contraseña de un PDF",
},
"repair-pdf": {
name: "Reparar PDF",
description: "Intenta reparar un PDF dañado o corrupto",
},
"linearize-pdf": {
name: "Optimizar PDF para web",
description: "Linealiza un PDF para una visualización web rápida",
},
"grayscale-pdf": {
name: "PDF en escala de grises",
description: "Convierte todos los colores a escala de grises",
},
"pdfa-convert": {
name: "Convertir a PDF/A",
description: "Convierte a formato de archivo PDF/A-2",
},
"crop-pdf": {
name: "Recortar PDF",
description: "Recorta todas las páginas con un margen uniforme",
},
"nup-pdf": {
name: "PDF N-up",
description: "Dispone varias páginas por hoja",
},
"booklet-pdf": {
name: "PDF en folleto",
description: "Dispone las páginas para plegar en un folleto",
},
"watermark-pdf": {
name: "Marca de agua en PDF",
description: "Añade una marca de agua de texto a cada página",
},
"pdf-page-numbers": {
name: "Números de página PDF",
description: "Añade números de página a cada página",
},
"flatten-pdf": {
name: "Aplanar PDF",
description: "Fija formularios y anotaciones en el contenido de la página",
},
"redact-pdf": {
name: "Censurar PDF",
description: "Elimina permanentemente apariciones de texto (censura verificada)",
},
"pdf-to-text": {
name: "PDF a texto",
description: "Extrae texto plano de un PDF",
},
"pdf-to-word": {
name: "PDF a Word",
description: "Ideal para PDFs con texto; las páginas escaneadas necesitan OCR",
},
"pdf-metadata": {
name: "Metadatos de PDF",
description: "Lee y edita los metadatos del documento PDF",
},
"powerpoint-to-pdf": {
name: "PowerPoint a PDF",
description: "Convierte presentaciones a PDF",
},
"html-to-pdf": {
name: "HTML a PDF",
description:
"Convierte un archivo HTML a PDF. Los recursos remotos están deshabilitados por privacidad.",
},
"markdown-to-docx": {
name: "Markdown a Word",
description: "Convierte un archivo Markdown a un documento Word (DOCX)",
},
"markdown-to-html": {
name: "Markdown a HTML",
description:
"Convierte un archivo Markdown a una página HTML independiente. Las imágenes remotas del origen se mantienen tal cual en la salida.",
},
"markdown-to-pdf": {
name: "Markdown a PDF",
description:
"Convierte un archivo Markdown a un PDF con estilo. Los recursos remotos están deshabilitados por privacidad.",
},
"epub-convert": {
name: "Convertir EPUB",
description:
"Convierte un EPUB a PDF, DOCX, HTML o Markdown. Los recursos remotos dentro del libro no se descargan.",
},
"to-epub": {
name: "Convertir a EPUB",
description: "Convierte archivos Word, Markdown, HTML o texto plano a EPUB",
},
"csv-excel": {
name: "CSV a Excel",
description: "Convierte entre CSV y Excel (XLSX) en ambas direcciones",
},
"csv-json": {
name: "CSV a JSON",
description: "Convierte entre CSV y JSON en ambas direcciones",
},
"json-xml": {
name: "JSON a XML",
description: "Convierte entre JSON y XML en ambas direcciones",
},
"split-csv": {
name: "Dividir CSV",
description: "Divide un CSV en archivos más pequeños por número de filas",
},
"merge-csvs": {
name: "Unir CSVs",
description: "Combina varios archivos CSV o TSV con columnas coincidentes en uno",
},
"yaml-json": {
name: "YAML / JSON",
description: "Convierte entre YAML y JSON en ambas direcciones",
},
"xml-to-csv": {
name: "XML a CSV",
description: "Extrae elementos repetitivos de XML a una tabla CSV",
},
"create-zip": {
name: "Crear ZIP",
description: "Agrupa varios archivos en un solo archivo ZIP",
},
"extract-zip": {
name: "Extraer ZIP",
description:
"Extrae archivos de un ZIP de forma segura con protección contra bombas. Los archivos con un solo elemento devuelven el archivo directamente.",
},
pipeline: {
name: "Constructor de Pipeline",
description: "Encadena múltiples herramientas en un flujo de trabajo",
},
processing: { canceled: "Procesamiento cancelado" },
mediaPlayer: {
unsupported: "Tu navegador no admite este formato de medios.",
},
documentView: {
loadFailed: "Error al cargar el documento.",
previousPage: "Página anterior",
nextPage: "Página siguiente",
inputNotPreviewable: "Vista previa no disponible para este tipo de archivo",
},
},
toolSettings: {
compress: {
compressionMode: "Modo de compresión",
targetSize: "Tamaño objetivo",
quality: "Calidad",
smallestFile: "Archivo más pequeño",
bestQuality: "Mejor calidad",
submit: "Comprimir",
submitBatch: "Comprimir ({count} archivos)",
progressLabel: "Comprimiendo",
original: "Original: {size} KB",
processed: "Procesado: {size} KB",
saved: "Ahorro: {percent}%",
},
resize: {
customSize: "Tamaño personalizado",
scale: "Escala",
presets: "Predefinidos",
contentAware: "Consciente del contenido",
widthPx: "Ancho (px)",
heightPx: "Alto (px)",
fitMode: "Modo de ajuste",
cropToFit: "Recortar para ajustar",
fitInside: "Ajustar dentro",
stretch: "Estirar",
limitToOriginalSize: "Limitar al tamaño original",
limitToOriginalSizeHint:
"Si tu imagen ya es más pequeña que el objetivo, se mantiene como está en lugar de escalarla",
scalePercent: "Escala (%)",
resizeToSquare: "Redimensionar a cuadrado",
protectFaces: "Proteger rostros",
smoothing: "Suavizado",
edgeSensitivity: "Sensibilidad de bordes",
submit: "Redimensionar",
submitBatch: "Redimensionar ({count} archivos)",
progressLabel: "Redimensionando",
},
crop: {
aspectRatio: "Relación de aspecto",
custom: "Personalizado",
positionAndSize: "Posición y tamaño",
ruleOfThirds: "Regla de tercios",
leftOffsetPx: "Desplazamiento izquierdo (px)",
topOffsetPx: "Desplazamiento superior (px)",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
rotate: {
rotate: "Rotar",
angle: "Ángulo",
straighten: "Enderezar",
flip: "Voltear",
horizontal: "Horizontal",
vertical: "Vertical",
resetAllChanges: "Restablecer todos los cambios",
submit: "Aplicar",
submitBatch: "Aplicar ({count} archivos)",
progressLabel: "Aplicando",
},
convert: {
targetFormat: "Formato de destino",
sourceFormat: "Formato de origen",
quality: "Calidad",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"optimize-for-web": {
outputFormat: "Formato de salida",
quality: "Calidad",
smallestFile: "Archivo más pequeño",
bestQuality: "Mejor calidad",
maxDimensions: "Dimensiones máximas",
maxWidth: "Ancho máximo",
maxHeight: "Alto máximo",
stripMetadata: "Eliminar metadatos",
sizeComparison: "Comparación de tamaño",
optimized: "Optimizado:",
smaller: "{percent}% más pequeño",
larger: "{percent}% más grande",
submit: "Procesar y descargar",
submitBatch: "Procesar y descargar ({count} archivos)",
progressLabel: "Optimizando",
},
"strip-metadata": {
currentMetadata: "Metadatos actuales",
readingMetadata: "Leyendo metadatos...",
noMetadataFound: "No se encontraron metadatos en esta imagen.",
removeAllMetadata: "Eliminar todos los metadatos",
selectSpecific: "O selecciona metadatos específicos:",
stripExif: "Eliminar EXIF (info de cámara, fecha, exposición)",
stripGps: "Eliminar GPS (datos de ubicación)",
stripIcc: "Eliminar ICC (perfil de color)",
stripXmp: "Eliminar XMP (metadatos extensibles)",
locationFound: "ubicación encontrada",
viewOnMap: "Ver en el mapa",
locationWarning:
"Esta imagen contiene tu ubicación precisa. Considera eliminar los datos GPS antes de compartirla.",
metadataSections: "{count} sección de metadatos encontrada",
metadataSectionsPlural: "{count} secciones de metadatos encontradas",
metadataRemoved: "Metadatos eliminados: {size} KB",
submit: "Eliminar metadatos",
progressLabel: "Eliminando metadatos",
},
"edit-metadata": {
readingMetadata: "Leyendo metadatos...",
couldNotReadMetadata: "No se pudieron leer los metadatos - los campos comenzarán vacíos.",
basicInfo: "Información básica",
description: "Descripción",
artist: "Artista",
copyright: "Copyright",
software: "Software",
iptc: "IPTC",
title: "Título",
headline: "Titular",
city: "Ciudad",
stateProvince: "Estado/Provincia",
country: "País",
dateAndTime: "Fecha y hora",
editDates: "Editar fechas",
shiftAllDates: "Ajustar todas las fechas",
dateModified: "Fecha de modificación",
dateTaken: "Fecha de captura",
shiftHint:
"Ajusta todos los campos de fecha con un desfase (útil para correcciones de zona horaria)",
direction: "Dirección",
forward: "+ Adelante",
backward: "- Atrás",
hoursMinutes: "Horas:Minutos",
locationGps: "Ubicación (GPS)",
locationDataFound: "Datos de ubicación encontrados",
noGpsData: "Sin datos GPS. Agrega coordenadas abajo.",
latitude: "Latitud",
longitude: "Longitud",
altitudeMeters: "Altitud (metros)",
removeAllGpsData: "Eliminar todos los datos GPS",
keywords: "Palabras clave",
addKeywordPlaceholder: "Agregar palabra clave y presionar Enter",
addToExisting: "Agregar a las existentes",
replaceAll: "Reemplazar todas",
allMetadata: "Todos los metadatos",
templates: "Plantillas",
templateNamePlaceholder: "Nombre de la plantilla",
uploadPrompt: "Sube una imagen para editar sus metadatos.",
changes: "{count} cambios:",
modified: "{count} modificados",
removed: "{count} eliminados",
gpsCleared: "GPS eliminado",
gpsAdded: "GPS agregado",
datesShifted: "fechas ajustadas",
submit: "Aplicar metadatos",
progressLabel: "Escribiendo metadatos",
},
"bulk-rename": {
pattern: "Patrón",
patternHint: "Variables: {{index}}, {{padded}}, {{original}}",
startIndex: "Índice inicial",
preview: "Vista previa",
andMore: "... y {count} más",
renaming: "Renombrando...",
submit: "Renombrar {count} archivos",
zipDownloaded: "ZIP descargado correctamente",
},
"image-to-pdf": {
imageCount: "{count} imagen se convertirá a {mode}",
imageCountPlural: "{count} imágenes se convertirán a {mode}",
singlePdfMode: "un solo PDF, una imagen por página",
separatePdfMode: "PDFs separados, uno por imagen",
combineAllImages: "Combinar todas las imágenes en un PDF",
pageSize: "Tamaño de página",
orientation: "Orientación",
portrait: "Vertical",
landscape: "Horizontal",
margin: "Margen",
targetSizeLabel: "Tamaño de archivo objetivo (opcional)",
targetSizePlaceholder: "ej. 2",
targetSizeHint: "Dejar vacío para calidad máxima",
targetSizeMet: "Objetivo alcanzado",
targetSizeNotMet: "No se pudo alcanzar el objetivo. Archivo comprimido a calidad mínima.",
targetSizeTooSmall: "El objetivo debe ser al menos 50KB",
jpegQualityLabel: "Calidad JPEG utilizada",
noImage: "Sin imagen",
submitCollate: "Crear PDF ({count} páginas)",
submitSeparate: "Crear {count} PDFs",
downloadPdf: "Descargar PDF",
downloadZip: "Descargar ZIP",
progressLabel: "Creando PDF",
uploadingImages: "Subiendo imágenes...",
processingPages: "Procesando {count} páginas...",
},
"pdf-to-image": {
dropPdf: "Arrastra un PDF aquí o haz clic para seleccionar",
readingPdf: "Leyendo PDF...",
pageCount: "{count} página",
pageCountPlural: "{count} páginas",
outputFormat: "Formato de salida",
quality: "Calidad",
resolutionDpi: "Resolución (DPI)",
dpiScreen: "Pantalla",
dpiStandard: "Estándar",
dpiPrint: "Impresión",
dpiHighQuality: "Alta calidad",
colorMode: "Modo de color",
colorModeColor: "Color",
colorModeGrayscale: "Escala de grises",
colorModeBw: "B&N",
pages: "Páginas",
allPages: "Todas las páginas",
pagesHint: "ej. 1-3, 5, 8-10 (el documento tiene {count} páginas)",
converting: "Convirtiendo...",
submit: "Convertir {count} página",
submitPlural: "Convertir {count} páginas",
downloadAllZip: "Descargar todo (ZIP)",
},
favicon: {
uploadHint:
"Sube imágenes cuadradas (se recomienda 512x512 o mayor) para generar todos los tamaños de favicon e iconos de app.",
multipleHint: "Cada una de las {count} imágenes obtiene su propia carpeta en el ZIP.",
generatedSizes: "Tamaños generados (por imagen)",
plusManifest: "+ manifest.json + fragmento HTML",
submit: "Generar Favicons ({count} imagen)",
submitPlural: "Generar Favicons ({count} imágenes)",
downloadZip: "Descargar ZIP de Favicons",
progressLabel: "Generando Favicons",
},
"adjust-colors": {
light: "Luz",
brightness: "Brillo",
contrast: "Contraste",
exposure: "Exposición",
color: "Color",
saturation: "Saturación",
temperature: "Temperatura",
temperatureHint: "frío / cálido",
tint: "Tono",
tintHint: "verde / magenta",
hue: "Matiz",
detail: "Detalle",
sharpness: "Nitidez",
effects: "Efectos",
none: "ninguno",
grayscale: "escala de grises",
sepia: "sepia",
invert: "invertir",
colorChannels: "Canales de color",
channelModified: "modificado",
red: "Rojo",
green: "Verde",
blue: "Azul",
resetAll: "Restablecer todo",
submit: "Aplicar",
submitBatch: "Aplicar ({count} archivos)",
progressLabel: "Ajustando colores",
},
sharpening: {
method: "Método",
adaptive: "Adaptativo",
unsharpMask: "Máscara de desenfoque",
highPass: "Paso alto",
presets: "Predefinidos",
textureAmount: "Cantidad de textura",
amount: "Cantidad",
strength: "Intensidad",
noiseReduction: "Reducción de ruido",
off: "desactivado",
lightDenoise: "ligero",
mediumDenoise: "medio",
strongDenoise: "fuerte",
advancedControls: "Controles avanzados",
radius: "Radio",
flatProtection: "Protección de áreas planas",
detailThreshold: "Umbral de detalle",
haloLimitLight: "Límite de halo (claro)",
haloLimitDark: "Límite de halo (oscuro)",
threshold: "Umbral",
kernelSize: "Tamaño del kernel",
submit: "Enfocar",
submitBatch: "Enfocar ({count} archivos)",
progressLabel: "Enfocando",
},
"replace-color": {
sourceColor: "Color de origen (a reemplazar)",
targetColor: "Color de destino (reemplazo)",
makeTransparent: "Hacer transparente en su lugar",
tolerance: "Tolerancia",
exactMatch: "Coincidencia exacta",
wideRange: "Rango amplio",
submit: "Reemplazar color",
submitBatch: "Reemplazar color ({count} archivos)",
progressLabel: "Reemplazando color",
},
"color-blindness": {
simulationType: "Tipo de simulación",
redGreen: "Rojo-Verde",
blueYellow: "Azul-Amarillo",
monochromatic: "Monocromático",
submit: "Simular",
submitBatch: "Simular ({count} archivos)",
progressLabel: "Simulando daltonismo",
},
"remove-background": {
subject: "Sujeto",
people: "Personas",
products: "Productos",
general: "General",
passportIdPhoto: "Foto de pasaporte / identificación",
quality: "Calidad",
fast: "Rápido",
hd: "HD",
max: "Máx",
ultra: "Ultra",
background: "Fondo",
transparent: "Transparente",
bgColor: "Color",
gradient: "Degradado",
image: "Imagen",
gradientDirection: "Dirección",
chooseBackgroundImage: "Elegir imagen de fondo",
effectsSection: "Efectos",
effectsActive: "activos",
blurBackground: "Desenfocar fondo",
intensity: "Intensidad",
addShadow: "Agregar sombra",
opacity: "Opacidad",
outputFormat: "Formato de salida",
edgeSmoothing: "Suavizado de bordes",
edgeSmoothingOff: "Desactivado",
edgeSmoothingLight: "Ligero",
edgeSmoothingMedium: "Medio",
edgeSmoothingStrong: "Fuerte",
colorDecontamination: "Descontaminación de color",
rendering: "Renderizando...",
submit: "Eliminar fondo",
submitBatch: "Eliminar fondo ({count} archivos)",
progressLabel: "Eliminando fondo",
},
"remove-gif-background": {
quality: "Calidad",
qualityFast: "Rápido",
qualityBalanced: "Equilibrado",
qualityBest: "Mejor",
qualityNote:
"Cada fotograma pasa por el modelo, así que una calidad mayor es mucho más lenta en clips largos.",
outputFormat: "Formato de salida",
formatWebp: "WebP",
formatApng: "APNG",
formatGif: "GIF",
formatWebpHint: "WebP y APNG mantienen una transparencia suave y completa.",
gifCaveat: "GIF solo admite transparencia de 1 bit, así que los bordes se ven duros.",
background: "Fondo",
bgTransparent: "Transparente",
bgColor: "Color",
bgGradient: "Degradado",
bgBlur: "Desenfoque",
bgImage: "Imagen",
gradientStart: "Inicio",
gradientEnd: "Fin",
gradientAngle: "Ángulo ({deg}°)",
blurStrength: "Intensidad del desenfoque ({value})",
shadow: "Agregar sombra",
shadowStrength: "Opacidad de la sombra ({value})",
advanced: "Avanzado",
edgeRefine: "Refinar bordes (nivel {level})",
edgeRefineOff: "Refinar bordes: desactivado",
decontaminate: "Eliminar derrame de color",
uploadBg: "Subir imagen de fondo",
frameNote:
"Procesa cada fotograma, así que las animaciones largas son lentas. Se recomienda una GPU.",
submit: "Eliminar fondo",
submitBatch: "Eliminar fondo ({count} archivos)",
progressLabel: "Eliminando fondo de los fotogramas",
download: "Descargar",
},
upscale: {
scaleFactor: "Factor de escala",
quality: "Calidad",
enhanceFaces: "Mejorar rostros",
noiseReduction: "Reducción de ruido",
noiseReductionHint:
"Suaviza el grano y el ruido. Valores más altos eliminan más ruido pero pueden suavizar los detalles.",
outputFormat: "Formato de salida",
submit: "Escalar {scale}x",
submitBatch: "Escalar {scale}x ({count} archivos)",
progressLabel: "Escalando imagen",
progressLabelBatch: "Escalando {count} imágenes",
},
"erase-object": {
brushMode: "Pincel",
lassoMode: "Lazo",
brushSize: "Tamaño del pincel",
fine: "Fino",
wide: "Ancho",
undo: "Deshacer",
clear: "Limpiar",
outputFormat: "Formato de salida",
quality: "Calidad",
paintHint: "Pinta sobre los objetos que quieras eliminar. Usa Ctrl+Z para deshacer.",
lassoHint:
"Dibuja un lazo alrededor del objeto que quieras eliminar. Usa Ctrl+Z para deshacer.",
submit: "Borrar objeto",
submitBatch: "Borrar todos ({count})",
progressLabel: "Borrando objeto",
},
ocr: {
quality: "Calidad",
enhanceBeforeScanning: "Mejorar antes de escanear",
enhanceHint:
"Mejora el contraste local antes del reconocimiento. Rápido lo aplica directamente; Equilibrado y Óptimo solo conservan la variante si la puntuación calibrada mejora el resultado.",
fastKoreanUnsupported:
"El OCR rápido no admite coreano. Instala el paquete de OCR preciso y elige Equilibrado u Óptimo.",
language: "Idioma",
autoDetect: "Detección automática",
extractedText: "Texto extraído",
noTextDetected: "No se detectó texto en esta imagen",
characters: "{count} caracteres",
submit: "Extraer texto",
submitBatch: "Extraer texto ({count} archivos)",
progressLabel: "Extrayendo texto",
},
"ocr-pdf": {
quality: "Calidad",
language: "Idioma",
autoDetect: "Detectar automáticamente",
pages: "Páginas",
pagesPlaceholder: "todo, 1-3, 5",
pagesHint: "Ingrese números de página o rangos (ej. 1-3, 5, 8-10). Máximo 50 páginas.",
submit: "Extraer texto",
submitBatch: "Extraer texto ({count} archivos)",
progressLabel: "Extrayendo texto del PDF",
},
"blur-faces": {
blurRadius: "Radio de desenfoque",
blurLight: "Ligero",
blurHeavy: "Fuerte",
detectionSensitivity: "Sensibilidad de detección",
moreFaces: "Más rostros",
fewerFaces: "Menos rostros",
submit: "Desenfocar rostros",
progressLabel: "Desenfocando rostros",
},
"enhance-faces": {
quality: "Calidad",
enhancementStrength: "Intensidad de mejora",
onlyCenterFace: "Solo el rostro central",
detectionSensitivity: "Sensibilidad de detección",
submit: "Mejorar rostros",
submitBatch: "Mejorar rostros ({count} archivos)",
progressLabel: "Mejorando rostros",
},
"smart-crop": {
subjectFocus: "Enfoque en sujeto",
faceFocus: "Enfoque en rostro",
autoTrim: "Recorte automático",
customSize: "Tamaño personalizado",
socialPresets: "Presets de redes sociales",
detectionStrategy: "Estrategia de detección",
detectionStrategyHint:
"Atención encuentra la región visualmente más relevante. Entropía encuentra el área con más detalle e información.",
attention: "Atención",
entropy: "Entropía",
padding: "Relleno",
paddingHint: "Espacio extra alrededor del área de enfoque",
outputQuality: "Calidad de salida",
outputQualityHint: "Para salidas JPEG y WebP. PNG siempre es sin pérdida.",
subjectDescription:
"Detecta la región más interesante usando análisis de relevancia y recorta al tamaño deseado.",
framing: "Encuadre",
facePadding: "Espacio alrededor del rostro",
facePaddingHint: "Espacio extra alrededor de los rostros detectados",
fewerFalsePositives: "Menos falsos positivos",
faceDescription:
"Usa detección facial con AI para mantener los rostros bien encuadrados. Si no se detectan rostros, usa el enfoque en sujeto.",
trimTolerance: "Tolerancia",
trimDescription:
"Qué tan diferente puede ser un píxel del borde respecto al color del borde y aún así ser recortado. Mayor = más agresivo.",
padToSquare: "Rellenar a cuadrado",
targetSizePx: "Tamaño objetivo (px)",
padColor: "Color de relleno",
trimHint:
'Elimina bordes de color uniforme alrededor del sujeto. Activa "Rellenar a cuadrado" para imágenes listas para e-commerce.',
submitSubject: "Recorte inteligente",
submitFace: "Recorte facial",
submitTrim: "Recortar bordes",
},
imageEnhancement: {
enhancementMode: "Modo de mejora",
auto: "Automático",
portrait: "Retrato",
landscape: "Paisaje",
lowLight: "Poca luz",
food: "Comida",
document: "Documento",
intensity: "Intensidad",
deepEnhance: "Mejora profunda (AI)",
deepEnhanceDescription: "Elimina ruido y artefactos usando AI",
deepEnhanceRequires: "Requiere el paquete de Escalado y mejora",
analyzingImage: "Analizando imagen...",
detectedIssues: "Problemas detectados",
imageLooksGood: "La imagen se ve bien. Ajusta con el control de intensidad.",
issueUnderexposed: "Baja exposición",
issueOverexposed: "Sobreexpuesta",
issueLowContrast: "Contraste plano",
issueColorCast: "Dominante de color",
issueDesaturated: "Desaturada",
issueSoftFocus: "Enfoque suave",
issueNoisy: "Ruidosa",
submit: "Mejorar",
submitDeep: "Mejora profunda",
submitBatch: "Mejorar ({count} archivos)",
submitDeepBatch: "Mejora profunda ({count} archivos)",
progressLabel: "Mejorando imagen",
progressLabelBatch: "Mejorando {count} imágenes",
},
"noise-removal": {
denoisingTier: "Nivel de eliminación de ruido",
quick: "Rápido",
balanced: "Equilibrado",
quality: "Calidad",
maximum: "Máximo",
quickDesc: "Rápido y ligero",
balancedDesc: "Buena calidad, velocidad moderada",
qualityDesc: "Con AI, lento",
maximumDesc: "Mejor modelo AI, más lento",
strength: "Intensidad",
subtle: "Sutil",
aggressive: "Agresivo",
detailPreservation: "Preservación de detalles",
smooth: "Suave",
sharp: "Nítido",
colorNoise: "Ruido de color",
heavy: "Intenso",
outputFormat: "Formato de salida",
gifAiWarning:
"La eliminación de ruido con AI en archivos GIF procesa solo el primer fotograma. Para GIFs animados, usa el nivel Rápido o Equilibrado.",
submit: "Eliminar ruido",
submitBatch: "Eliminar ruido ({count} archivos)",
progressLabel: "Eliminando ruido",
progressLabelBatch: "Eliminando ruido de {count} imágenes",
},
"red-eye-removal": {
sensitivity: "Sensibilidad",
strict: "Estricta",
aggressive: "Agresiva",
correctionStrength: "Intensidad de corrección",
subtle: "Sutil",
dark: "Oscuro",
outputFormat: "Formato de salida",
quality: "Calidad",
submit: "Corregir ojos rojos",
submitBatch: "Corregir ojos rojos ({count} archivos)",
progressLabel: "Corrigiendo ojos rojos",
progressLabelBatch: "Corrigiendo ojos rojos en {count} imágenes",
},
"restore-photo": {
scratchRemoval: "Eliminación de rasguños",
scratchRemovalDesc: "Detecta y repara rasguños, roturas y manchas",
faceEnhancement: "Mejora de rostros",
faceEnhancementDesc: "Restaura rostros degradados con CodeFormer AI",
faceFidelity: "Fidelidad del rostro",
enhanced: "Mejorado",
faithful: "Fiel",
noiseReduction: "Reducción de ruido",
noiseReductionDesc: "Elimina grano y ruido de fotos antiguas",
denoiseStrength: "Intensidad del eliminador de ruido",
autoColorize: "Colorizar automáticamente",
autoColorizeDesc: "Agrega color a fotos en B&N usando DDColor AI",
colorizeStrength: "Intensidad de colorización",
vivid: "Vívido",
submit: "Restaurar foto",
submitBatch: "Restaurar fotos ({count})",
progressLabel: "Restaurando foto",
progressLabelBatch: "Restaurando {count} fotos",
},
"content-aware-resize": {
widthPx: "Ancho (px)",
heightPx: "Alto (px)",
resizeToSquare: "Redimensionar a cuadrado",
protectFaces: "Proteger rostros",
protectFacesHint:
"Detecta y protege las áreas de rostros de la eliminación de costuras usando detección facial",
smoothing: "Suavizado",
edgeSensitivity: "Sensibilidad de bordes",
submit: "Redimensionar",
submitBatch: "Redimensionar ({count} archivos)",
progressLabel: "Redimensionando con reconocimiento de contenido",
},
"ai-canvas-expand": {
quality: "Calidad",
fast: "Rápido",
balanced: "Equilibrado",
highQuality: "Alta calidad",
fastDesc: "Vista previa rápida, menos pasadas de AI",
balancedDesc: "Buena calidad, velocidad moderada",
highQualityDesc: "Mejores resultados, más lento",
extendToAspectRatio: "Extender a relación de aspecto",
extendByPixels: "Extender por (píxeles)",
top: "Arriba",
right: "Derecha",
bottom: "Abajo",
left: "Izquierda",
newSize: "Nuevo tamaño: {width} x {height}",
submit: "Extender lienzo",
submitBatch: "Extender ({count} archivos)",
progressLabel: "Extendiendo lienzo",
},
colorize: {
aiModel: "Modelo AI",
fast: "Rápido",
fastDesc: "Resultados rápidos",
balanced: "Equilibrado",
balancedDesc: "El mejor disponible",
best: "Mejor",
bestDesc: "La más alta calidad",
colorIntensity: "Intensidad de color",
grayscaleLabel: "Escala de grises",
subtleLabel: "Sutil",
naturalLabel: "Natural",
vividLabel: "Vívido",
intensityHint: "Valores más bajos producen colores más apagados, estilo vintage.",
strength: "Intensidad de colorización",
submit: "Colorizar",
submitBatch: "Colorizar ({count} archivos)",
progressLabel: "Colorizando",
progressLabelBatch: "Colorizando {count} imágenes",
},
"passport-photo": {
country: "País",
searchCountries: "Buscar países...",
noCountriesFound: "No se encontraron países",
customDimensions: "Dimensiones personalizadas",
documentType: "Tipo de documento",
dimensionsMm: "Dimensiones (mm)",
dpi: "DPI",
pixelsPerInch: "píxeles por pulgada",
backgroundColor: "Color de fondo",
maxFileSize: "Tamaño máximo de archivo",
noLimit: "Sin límite",
customKb: "Personalizado KB...",
uploadPortrait: "Sube una foto tipo retrato",
uploadHint:
"Arrastra o sube una imagen en el panel izquierdo para previsualizar tu foto de pasaporte",
analyzingPhoto: "Analizando foto",
detectingLandmarks: "Detectando puntos faciales y eliminando fondo...",
generatePassportPhoto: "Generar foto de pasaporte",
generating: "Generando...",
downloadPhoto: "Descargar foto",
faceCentered: "Rostro centrado",
headLevel: "Cabeza nivelada",
lookingStraight: "Mirando al frente",
faceSize: "Tamaño del rostro",
whatYouSee: "Lo que ves es lo que descargas",
dragToAdjust: "Arrastra para ajustar",
scrollToZoom: "Desplaza para hacer zoom",
photoGenerated: "Foto generada. Descárgala desde el panel izquierdo.",
},
"transcribe-audio": {
language: "Idioma",
autoDetect: "Detección automática",
outputFormat: "Formato de salida",
plainText: "Texto plano",
submit: "Transcribir",
submitBatch: "Transcribir ({count} archivos)",
progressLabel: "Transcribiendo audio",
},
"auto-subtitles": {
language: "Idioma",
autoDetect: "Detección automática",
format: "Formato de subtítulos",
submit: "Generar subtítulos",
submitBatch: "Generar subtítulos ({count} archivos)",
progressLabel: "Generando subtítulos",
},
"transparency-fixer": {
description: "Sube un PNG con fondo transparente falso y lo corregimos en un clic.",
removeWatermark: "Eliminar marca de agua",
removeWatermarkHelp: "Detecta y elimina marcas de agua semitransparentes",
requiresEraser: "Requiere el paquete de Borrador de objetos",
advanced: "Avanzado",
defringe: "Eliminar bordes",
outputFormat: "Formato de salida",
submit: "Corregir transparencia",
submitBatch: "Corregir transparencia ({count} archivos)",
progressLabel: "Corrigiendo transparencia",
},
"background-replace": {
color: "Color de fondo",
submit: "Reemplazar fondo",
submitBatch: "Reemplazar fondo ({count} archivos)",
progressLabel: "Reemplazando fondo",
},
"blur-background": {
intensity: "Intensidad de desenfoque",
submit: "Desenfocar fondo",
submitBatch: "Desenfocar fondo ({count} archivos)",
progressLabel: "Desenfocando fondo",
},
"watermark-text": {
watermarkText: "Texto de marca de agua",
fontSize: "Tamaño de fuente",
color: "Color",
opacity: "Opacidad",
position: "Posición",
rotation: "Rotación",
center: "Centro",
topLeft: "Arriba izquierda",
topRight: "Arriba derecha",
bottomLeft: "Abajo izquierda",
bottomRight: "Abajo derecha",
tiled: "Mosaico",
submit: "Agregar marca de agua",
submitBatch: "Agregar marca de agua ({count} archivos)",
progressLabel: "Agregando marca de agua",
},
"watermark-image": {
uploadWatermark: "Subir imagen de marca de agua",
position: "Posición",
opacity: "Opacidad",
scale: "Escala",
submit: "Aplicar marca de agua",
submitBatch: "Aplicar marca de agua ({count} archivos)",
},
"text-overlay": {
text: "Texto",
fontSize: "Tamaño de fuente",
color: "Color",
position: "Posición",
top: "Arriba",
center: "Centro",
bottom: "Abajo",
backgroundBox: "Caja de fondo",
backgroundColor: "Color de fondo",
shadow: "Sombra",
submit: "Agregar texto",
submitBatch: "Agregar texto ({count} archivos)",
progressLabel: "Agregando texto superpuesto",
download: "Descargar",
defaultText: "Tu texto aquí",
},
compose: {
uploadOverlay: "Subir imagen de superposición",
xPosition: "Posición X",
yPosition: "Posición Y",
opacity: "Opacidad",
blendMode: "Modo de mezcla",
submit: "Componer",
},
"meme-generator": {
selectTemplate:
"Selecciona una plantilla de la galería o sube tu propia imagen para comenzar.",
chooseLayout: "Elige un diseño de texto para tu imagen personalizada.",
textContent: "Contenido del texto",
textStyle: "Estilo del texto",
font: "Fuente",
fontSize: "Tamaño de fuente",
textColor: "Color del texto",
strokeColor: "Color del borde",
allCaps: "MAYÚSCULAS",
generate: "Generar Meme",
generating: "Generando...",
downloadMeme: "Descargar Meme",
backToGallery: "Volver a la galería",
},
info: {
loadingInfo: "Cargando información...",
filename: "Nombre de archivo",
fileSize: "Tamaño de archivo",
dimensions: "Dimensiones",
format: "Formato",
channels: "Canales",
colorSpace: "Espacio de color",
density: "Densidad",
bitDepth: "Profundidad de bits",
progressive: "Progresivo",
pages: "Páginas",
hasAlpha: "Tiene alfa",
hasProfile: "Tiene perfil",
hasExif: "Tiene EXIF",
hasIcc: "Tiene ICC",
hasXmp: "Tiene XMP",
readInfo: "Leer información",
reading: "Leyendo...",
channelStats: "Estadísticas de canal",
yes: "Sí",
no: "No",
na: "N/D",
failedToRead: "Error al leer la información",
},
compare: {
uploadSecondImage: "Subir segunda imagen",
similarity: "Similitud: {percent}%",
submit: "Comparar",
downloadDiff: "Descargar diferencia",
},
"find-duplicates": {
preset: "Preajuste",
exact: "Exacto",
similar: "Similares",
loose: "Amplio",
exactDesc: "Copias idénticas pixel por pixel, misma imagen en diferentes formatos.",
similarDesc: "Copias redimensionadas, recomprimidas o con ediciones leves.",
looseDesc: "Imágenes visualmente relacionadas, recortes leves, diferentes exposiciones.",
threshold: "Umbral",
submit: "Buscar duplicados",
scanning: "Escaneando...",
},
"color-palette": {
submit: "Extraer paleta",
extracting: "Extrayendo...",
dominantColors: "Colores dominantes",
clickToCopy: "Clic para copiar",
},
"qr-generate": {
contentType: "Tipo de contenido",
url: "URL",
text: "Texto",
wifi: "WiFi",
vcard: "vCard",
email: "Correo electrónico",
phone: "Teléfono",
sms: "SMS",
styling: "Estilo",
dotStyle: "Estilo de puntos",
cornerSquareStyle: "Estilo de esquina cuadrada",
cornerDotStyle: "Estilo de punto de esquina",
foregroundColor: "Color de primer plano",
bgColor: "Color de fondo",
logo: "Logo",
downloadFormat: "Formato de descarga",
submit: "Generar código QR",
download: "Descargar código QR",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "Archivo HTML",
htmlFile: "Archivo HTML",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "Formato de salida",
quality: "Calidad",
devicePreset: "Dispositivo",
viewportWidth: "Ancho",
viewportHeight: "Alto",
fullPage: "Página completa",
submit: "Capturar",
download: "Descargar captura",
capturing: "Capturando página web...",
errorTimeout: "La página tardó demasiado en cargar",
errorBlocked: "No se puede capturar esta URL",
errorUnavailable: "El servicio de capturas no está disponible",
errorFailed: "Error al capturar la página",
placeholder: "Ingresa una URL y haz clic en Capturar",
presets: {
desktop: "Escritorio",
tablet: "Tableta",
mobile: "Móvil",
custom: "Personalizado",
},
},
"barcode-read": {
submit: "Escanear códigos de barras",
submitBatch: "Escanear ({count} archivos)",
scanning: "Escaneando...",
noBarcodesFound: "No se encontraron códigos de barras",
barcodesFound: "{count} código de barras encontrado",
barcodesFoundPlural: "{count} códigos de barras encontrados",
},
collage: {
template: "Plantilla",
aspectRatio: "Relación de aspecto",
gap: "Espacio",
cornerRadius: "Radio de esquina",
backgroundColor: "Color de fondo",
outputFormat: "Formato de salida",
quality: "Calidad",
submit: "Crear collage",
downloadCollage: "Descargar collage",
},
stitch: {
direction: "Dirección",
horizontal: "Horizontal",
vertical: "Vertical",
grid: "Cuadrícula",
gridColumns: "Columnas de cuadrícula",
resizeMode: "Modo de redimensión",
fit: "Ajustar",
original: "Original",
stretchMode: "Estirar",
cropMode: "Recortar",
alignment: "Alineación",
start: "Inicio",
center: "Centro",
end: "Fin",
gap: "Espacio",
border: "Borde",
cornerRadius: "Radio de esquina",
backgroundColor: "Color de fondo",
outputFormat: "Formato de salida",
quality: "Calidad",
submit: "Unir imágenes",
},
split: {
modeGrid: "Cuadrícula",
modeTileSize: "Tamaño de mosaico",
presets: "Preajustes",
columns: "Columnas",
rows: "Filas",
tileWidth: "Ancho del mosaico",
tileHeight: "Alto del mosaico",
outputFormat: "Formato de salida",
quality: "Calidad",
submit: "Dividir imagen",
downloadAll: "Descargar todo (ZIP)",
},
border: {
presets: "Preajustes",
borderWidth: "Ancho del borde",
borderColor: "Color del borde",
padding: "Relleno",
paddingColor: "Color del relleno",
cornerRadius: "Radio de esquina",
shadow: "Sombra",
shadowBlur: "Desenfoque de sombra",
shadowOffsetX: "Desplazamiento X de sombra",
shadowOffsetY: "Desplazamiento Y de sombra",
shadowColor: "Color de sombra",
shadowOpacity: "Opacidad de sombra",
submit: "Agregar borde",
submitBatch: "Agregar borde ({count} archivos)",
progressLabel: "Agregando borde",
},
beautify: {
preset: "Preajuste",
backgroundType: "Tipo de fondo",
solidColor: "Color sólido",
linearGradient: "Degradado lineal",
radialGradient: "Degradado radial",
customImage: "Imagen personalizada",
gradientAngle: "Ángulo del degradado",
padding: "Relleno",
borderRadius: "Radio de borde",
shadowPreset: "Preset de sombra",
deviceFrame: "Marco de dispositivo",
submit: "Embellecer",
submitBatch: "Embellecer ({count} archivos)",
progressLabel: "Embelleciendo captura de pantalla",
},
"circle-crop": {
submit: "Recorte circular",
submitBatch: "Recorte circular ({count} archivos)",
progressLabel: "Recortando en círculo",
},
duotone: {
shadow: "Color de sombra",
highlight: "Color de resalte",
submit: "Aplicar duotono",
submitBatch: "Aplicar duotono ({count} archivos)",
progressLabel: "Aplicando duotono",
},
"image-pad": {
target: "Proporción objetivo",
color: "Color de fondo",
submit: "Rellenar imagen",
submitBatch: "Rellenar imagen ({count} archivos)",
progressLabel: "Rellenando imagen",
},
pixelate: {
blockSize: "Tamaño de bloque",
submit: "Pixelar",
submitBatch: "Pixelar ({count} archivos)",
progressLabel: "Pixelando",
},
vignette: {
strength: "Intensidad",
color: "Color de viñeta",
submit: "Aplicar viñeta",
submitBatch: "Aplicar viñeta ({count} archivos)",
progressLabel: "Aplicando viñeta",
},
"gif-webp": {
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo animación",
},
histogram: {
submit: "Generar histograma",
submitBatch: "Generar histograma ({count} archivos)",
progressLabel: "Generando histograma",
},
"lqip-placeholder": {
width: "Ancho",
blur: "Desenfoque",
submit: "Generar marcador",
submitBatch: "Generar marcador ({count} archivos)",
progressLabel: "Generando marcador",
},
"sprite-sheet": {
columns: "Columnas",
padding: "Espaciado",
background: "Color de fondo",
submit: "Crear hoja de sprites",
submitBatch: "Crear hoja de sprites",
progressLabel: "Creando hoja de sprites",
},
"svg-to-raster": {
outputFormat: "Formato de salida",
sizing: "Dimensionado",
scaleMode: "Escala",
customMode: "Personalizado",
scalePresets: "Presets de escala",
dpiPresets: "Presets de DPI",
customWidth: "Ancho (px)",
customHeight: "Alto (px)",
background: "Fondo",
bgTransparent: "Transparente",
bgColor: "Color",
quality: "Calidad",
submit: "Convertir SVG",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo SVG",
},
vectorize: {
preset: "Preajuste",
logo: "Logo",
illustration: "Ilustración",
photo: "Foto",
sketch: "Boceto",
customPreset: "Personalizado",
colorMode: "Modo de color",
bw: "B&N",
colorModeColor: "Color",
threshold: "Umbral",
colorPrecision: "Precisión de color",
layerDifference: "Diferencia de capas",
filterSpeckle: "Filtrar manchas",
pathMode: "Modo de trazo",
cornerThreshold: "Umbral de esquina",
invertColors: "Invertir colores",
submit: "Vectorizar",
submitBatch: "Vectorizar ({count} archivos)",
progressLabel: "Vectorizando",
},
"gif-tools": {
mode: "Modo",
resize: "Redimensionar",
optimize: "Optimizar",
speed: "Velocidad",
reverse: "Invertir",
extract: "Extraer",
rotateMode: "Rotar",
pixel: "Píxel",
percentage: "Porcentaje",
colors: "Colores",
dither: "Difuminado",
effort: "Esfuerzo",
speedFactor: "Factor de velocidad",
loopControl: "Control de bucle",
infinite: "Infinito",
once: "Una vez",
customLoop: "Personalizado",
loopCount: "Cantidad de bucles",
extractSingle: "Individual",
extractRange: "Rango",
extractAll: "Todos",
frameNumber: "Número de fotograma",
frameStart: "Fotograma inicial",
frameEnd: "Fotograma final",
extractFormat: "Formato",
submit: "Procesar GIF",
submitBatch: "Procesar ({count} archivos)",
progressLabel: "Procesando GIF",
},
"image-to-base64": {
outputFormat: "Formato de salida",
keepOriginal: "Mantener original",
quality: "Calidad",
maxWidth: "Ancho máximo",
maxHeight: "Alto máximo",
submit: "Convertir a Base64",
submitBatch: "Convertir ({count} archivos)",
copyBase64: "Copiar Base64",
copyDataUri: "Copiar Data URI",
copyImgTag: "Copiar etiqueta <img>",
copyCssUrl: "Copiar CSS url()",
},
"barcode-generate": {
text: "Texto",
type: "Tipo de código de barras",
scale: "Escala",
includeText: "Incluir texto",
submit: "Generar código de barras",
download: "Descargar código de barras",
},
"chart-maker": {
kind: "Tipo de gráfico",
title: "Título",
width: "Ancho",
height: "Alto",
submit: "Crear gráfico",
submitBatch: "Crear gráfico ({count} archivos)",
progressLabel: "Creando gráfico",
},
"enhance-faces-standalone": {
model: "Modelo",
fast: "Rápido",
balanced: "Equilibrado",
best: "Mejor",
},
"convert-video": {
format: "Formato de salida",
quality: "Calidad",
high: "Alta",
balanced: "Equilibrada",
small: "Mínimo",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"compress-video": {
quality: "Compresión",
light: "Ligera",
balanced: "Equilibrada",
strong: "Fuerte",
resolution: "Resolución",
original: "Original",
submit: "Comprimir",
submitBatch: "Comprimir ({count} archivos)",
progressLabel: "Comprimiendo",
},
"trim-video": {
start: "Inicio (segundos)",
end: "Fin (segundos)",
precise: "Preciso por fotograma (recodifica)",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
"mute-video": {
submit: "Eliminar audio",
submitBatch: "Eliminar audio ({count} archivos)",
progressLabel: "Silenciando",
},
"video-to-gif": {
fps: "Fotogramas por segundo",
width: "Ancho (px)",
start: "Inicio (segundos)",
duration: "Duración (segundos)",
submit: "Crear GIF",
submitBatch: "Crear GIFs ({count} archivos)",
progressLabel: "Creando GIF",
},
"resize-video": {
preset: "Preajuste",
width: "Ancho (px)",
height: "Alto (px)",
hint: "Deja una dimensión vacía para mantener la proporción",
submit: "Redimensionar",
submitBatch: "Redimensionar ({count} archivos)",
progressLabel: "Redimensionando",
},
"crop-video": {
width: "Ancho (px)",
height: "Alto (px)",
x: "Desplazamiento X",
y: "Desplazamiento Y",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
"rotate-video": {
transform: "Transformación",
cw90: "Rotar 90° en sentido horario",
ccw90: "Rotar 90° en sentido antihorario",
rotate180: "Rotar 180°",
hflip: "Voltear horizontalmente",
vflip: "Voltear verticalmente",
submit: "Rotar",
submitBatch: "Rotar ({count} archivos)",
progressLabel: "Rotando",
},
"change-fps": {
fps: "Fotogramas por segundo",
submit: "Cambiar FPS",
submitBatch: "Cambiar FPS ({count} archivos)",
progressLabel: "Cambiando FPS",
},
"video-color": {
brightness: "Brillo",
contrast: "Contraste",
saturation: "Saturación",
gamma: "Gamma",
submit: "Aplicar",
submitBatch: "Aplicar ({count} archivos)",
progressLabel: "Ajustando color",
},
"video-speed": {
factor: "Factor de velocidad",
keepPitch: "Mantener tono original",
submit: "Cambiar velocidad",
submitBatch: "Cambiar velocidad ({count} archivos)",
progressLabel: "Cambiando velocidad",
},
"reverse-video": {
hint: "Limitado a clips de hasta 5 minutos",
submit: "Invertir",
submitBatch: "Invertir ({count} archivos)",
progressLabel: "Invirtiendo",
},
"video-loudnorm": {
hint: "Normaliza el audio al estándar de transmisión EBU R128",
submit: "Normalizar",
submitBatch: "Normalizar ({count} archivos)",
progressLabel: "Normalizando",
},
"aspect-pad": {
target: "Proporción objetivo",
color: "Color de fondo",
colorHint: "Color hexadecimal, ej. #000000",
submit: "Rellenar",
submitBatch: "Rellenar ({count} archivos)",
progressLabel: "Rellenando",
},
"blur-pad": {
target: "Proporción objetivo",
blur: "Intensidad de desenfoque",
submit: "Rellenar",
submitBatch: "Rellenar ({count} archivos)",
progressLabel: "Rellenando",
},
"watermark-video": {
text: "Texto de marca de agua",
position: "Posición",
fontSize: "Tamaño de fuente",
opacity: "Opacidad",
color: "Color",
colorHint: "Color hexadecimal, ej. #ffffff",
submit: "Marca de agua",
submitBatch: "Marca de agua ({count} archivos)",
progressLabel: "Aplicando marca de agua",
},
"stabilize-video": {
smoothing: "Suavizado",
hint: "Ejecuta dos pasadas y tarda más que la mayoría de herramientas",
submit: "Estabilizar",
submitBatch: "Estabilizar ({count} archivos)",
progressLabel: "Estabilizando",
},
"gif-to-video": {
format: "Formato de salida",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"video-to-webp": {
fps: "Fotogramas por segundo",
width: "Ancho (px)",
quality: "Calidad",
loop: "Repetir animación",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"video-to-frames": {
mode: "Modo de extracción",
modeAll: "Todos los fotogramas",
modeNth: "Cada N fotogramas",
modeTimestamps: "Marcas de tiempo específicas",
n: "Tomar cada N fotogramas",
timestamps: "Marcas de tiempo (segundos)",
timestampsHint: "Separados por comas, ej. 0.5, 2, 4.5",
format: "Formato de imagen",
submit: "Extraer fotogramas",
submitBatch: "Extraer fotogramas ({count} archivos)",
progressLabel: "Extrayendo fotogramas",
},
"merge-videos": {
hint: "Los archivos se unen en el orden de subida",
submit: "Fusionar",
submitBatch: "Fusionar ({count} archivos)",
progressLabel: "Fusionando",
},
"replace-audio": {
hint: "Sube primero el video y luego el audio",
submit: "Reemplazar audio",
submitBatch: "Reemplazar audio ({count} archivos)",
progressLabel: "Reemplazando audio",
},
"burn-subtitles": {
fontSize: "Tamaño de fuente",
hint: "Sube un video y un archivo de subtítulos (.srt o .vtt)",
submit: "Incrustar subtítulos",
submitBatch: "Incrustar subtítulos ({count} archivos)",
progressLabel: "Incrustando subtítulos",
},
"embed-subtitles": {
language: "Código de idioma",
languageHint: "Código ISO 639-2 de tres letras, ej. eng, spa, fra",
submit: "Insertar subtítulos",
submitBatch: "Insertar subtítulos ({count} archivos)",
progressLabel: "Insertando subtítulos",
},
"extract-subtitles": {
submit: "Extraer subtítulos",
submitBatch: "Extraer subtítulos ({count} archivos)",
progressLabel: "Extrayendo subtítulos",
},
"images-to-video": {
secondsPerImage: "Segundos por imagen",
resolution: "Resolución",
fps: "Fotogramas por segundo",
submit: "Crear video",
submitBatch: "Crear video ({count} archivos)",
progressLabel: "Creando presentación",
},
"video-metadata": {
hint: "El informe de metadatos aparece en el resultado",
submit: "Eliminar metadatos",
submitBatch: "Eliminar metadatos ({count} archivos)",
progressLabel: "Eliminando metadatos",
},
"convert-audio": {
format: "Formato de salida",
bitrate: "Tasa de bits (kbps)",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"trim-audio": {
start: "Inicio (segundos)",
end: "Fin (segundos)",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
"extract-audio": {
format: "Formato de salida",
submit: "Extraer",
submitBatch: "Extraer ({count} archivos)",
progressLabel: "Extrayendo",
},
"volume-adjust": {
"gain-db": "Ganancia (dB)",
submit: "Ajustar volumen",
submitBatch: "Ajustar volumen ({count} archivos)",
progressLabel: "Ajustando volumen",
},
"normalize-audio": {
hint: "Normalización de sonoridad EBU R128",
submit: "Normalizar",
submitBatch: "Normalizar ({count} archivos)",
progressLabel: "Normalizando",
},
"fade-audio": {
"fade-in-s": "Fundido de entrada (segundos)",
"fade-out-s": "Fundido de salida (segundos)",
submit: "Aplicar fundido",
submitBatch: "Aplicar fundido ({count} archivos)",
progressLabel: "Aplicando fundido",
},
"reverse-audio": {
submit: "Invertir",
submitBatch: "Invertir ({count} archivos)",
progressLabel: "Invirtiendo",
},
"audio-speed": {
factor: "Factor de velocidad",
submit: "Cambiar velocidad",
submitBatch: "Cambiar velocidad ({count} archivos)",
progressLabel: "Cambiando velocidad",
},
"pitch-shift": {
semitones: "Semitonos",
hint: "No se permite 0 semitonos",
submit: "Cambiar tono",
submitBatch: "Cambiar tono ({count} archivos)",
progressLabel: "Cambiando tono",
},
"audio-channels": {
mode: "Modo de canal",
"stereo-to-mono": "Estéreo a mono",
"mono-to-stereo": "Mono a estéreo",
swap: "Intercambiar izquierda/derecha",
submit: "Convertir canales",
submitBatch: "Convertir canales ({count} archivos)",
progressLabel: "Convirtiendo canales",
},
"silence-removal": {
"threshold-db": "Umbral de silencio (dB)",
"min-silence-s": "Duración mínima de silencio (segundos)",
submit: "Eliminar silencio",
submitBatch: "Eliminar silencio ({count} archivos)",
progressLabel: "Eliminando silencio",
},
"noise-reduction": {
strength: "Intensidad",
light: "Ligera",
medium: "Media",
strong: "Fuerte",
submit: "Reducir ruido",
submitBatch: "Reducir ruido ({count} archivos)",
progressLabel: "Reduciendo ruido",
},
"merge-audio": {
format: "Formato de salida",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "Los archivos se unirán en el orden de carga",
submit: "Combinar audio",
submitBatch: "Combinar audio ({count} archivos)",
progressLabel: "Combinando audio",
},
"split-audio": {
mode: "Modo de división",
time: "Por tiempo",
parts: "Partes iguales",
silence: "Por silencio",
"segment-s": "Duración del segmento (segundos)",
"num-parts": "Número de partes",
"threshold-db": "Umbral de silencio (dB)",
"min-silence-s": "Duración mínima de silencio (segundos)",
submit: "Dividir audio",
submitBatch: "Dividir audio ({count} archivos)",
progressLabel: "Dividiendo audio",
},
"ringtone-maker": {
"start-s": "Tiempo de inicio (segundos)",
"duration-s": "Duración (segundos)",
"max-hint": "Máximo 30 segundos",
submit: "Crear tono de llamada",
submitBatch: "Crear tono de llamada ({count} archivos)",
progressLabel: "Creando tono de llamada",
},
"waveform-image": {
width: "Ancho (px)",
height: "Alto (px)",
color: "Color de la onda",
submit: "Generar forma de onda",
submitBatch: "Generar forma de onda ({count} archivos)",
progressLabel: "Generando forma de onda",
},
"audio-metadata": {
strip: "Eliminar todos los metadatos",
title: "Título",
artist: "Artista",
album: "Álbum",
submit: "Aplicar metadatos",
submitBatch: "Aplicar metadatos ({count} archivos)",
progressLabel: "Aplicando metadatos",
},
"merge-pdf": {
addFiles: "Agregar PDF para combinar",
needTwo: "Se requieren al menos dos PDF",
orderHint: "{count} PDF se combinarán en este orden",
submit: "Combinar",
submitBatch: "Combinar ({count} archivos)",
progressLabel: "Combinando",
},
"split-pdf": {
mode: "Modo de división",
range: "Rango de páginas",
rangeHint: "ej. 1-3, 5, 7-z",
everyN: "Páginas por parte",
submit: "Dividir",
submitBatch: "Dividir ({count} archivos)",
progressLabel: "Dividiendo",
},
"compress-pdf": {
preset: "Preajuste de calidad",
screen: "Pantalla (más pequeño)",
ebook: "Ebook (equilibrado)",
printer: "Impresora (mejor calidad)",
submit: "Comprimir",
submitBatch: "Comprimir ({count} archivos)",
progressLabel: "Comprimiendo",
},
"rotate-pdf": {
angle: "Ángulo de rotación",
range: "Rango de páginas",
rangeHint: "ej. 1-3, 5, 1-z (todas las páginas)",
submit: "Rotar",
submitBatch: "Rotar ({count} archivos)",
progressLabel: "Rotando",
},
"convert-document": {
format: "Formato de salida",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"convert-presentation": {
format: "Formato de salida",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"convert-spreadsheet": {
format: "Formato de salida",
hint: "Los libros con varias hojas exportan solo la primera hoja a CSV.",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"excel-to-pdf": {
submit: "Convertir a PDF",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"powerpoint-to-pdf": {
submit: "Convertir a PDF",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"word-to-pdf": {
submit: "Convertir a PDF",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"extract-pages": {
range: "Rango de páginas",
rangeHint: "ej. 1-3, 5, 7-z",
submit: "Extraer",
submitBatch: "Extraer ({count} archivos)",
progressLabel: "Extrayendo",
},
"remove-pages": {
pages: "Páginas a eliminar",
pagesHint: "ej. 2, 4-6, z (última página)",
submit: "Eliminar",
submitBatch: "Eliminar ({count} archivos)",
progressLabel: "Eliminando",
},
"organize-pdf": {
order: "Orden de páginas",
orderHint: "ej. 3,1,2 o 1-z (sin cambios)",
submit: "Reordenar",
submitBatch: "Reordenar ({count} archivos)",
progressLabel: "Reordenando",
},
"protect-pdf": {
userPassword: "Contraseña de usuario",
ownerPassword: "Contraseña del propietario (opcional)",
ownerPasswordHint: "Se usa la contraseña de usuario si se deja vacío",
submit: "Proteger",
submitBatch: "Proteger ({count} archivos)",
progressLabel: "Cifrando",
},
"unlock-pdf": {
password: "Contraseña",
submit: "Desbloquear",
submitBatch: "Desbloquear ({count} archivos)",
progressLabel: "Descifrando",
},
"repair-pdf": {
submit: "Reparar",
submitBatch: "Reparar ({count} archivos)",
progressLabel: "Reparando",
},
"linearize-pdf": {
submit: "Optimizar",
submitBatch: "Optimizar ({count} archivos)",
progressLabel: "Linealizando",
},
"grayscale-pdf": {
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"pdfa-convert": {
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"crop-pdf": {
margin: "Margen (puntos)",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
"nup-pdf": {
perSheet: "Páginas por hoja",
submit: "Organizar",
submitBatch: "Organizar ({count} archivos)",
progressLabel: "Organizando",
},
"booklet-pdf": {
perSheet: "Páginas por hoja",
submit: "Crear cuadernillo",
submitBatch: "Crear cuadernillo ({count} archivos)",
progressLabel: "Creando cuadernillo",
},
"watermark-pdf": {
text: "Texto de marca de agua",
position: "Posición",
fontSize: "Tamaño de fuente",
opacity: "Opacidad",
rotation: "Rotación",
submit: "Marca de agua",
submitBatch: "Marca de agua ({count} archivos)",
progressLabel: "Aplicando marca de agua",
},
"pdf-page-numbers": {
position: "Posición",
fontSize: "Tamaño de fuente",
submit: "Agregar números",
submitBatch: "Agregar números ({count} archivos)",
progressLabel: "Numerando",
},
"flatten-pdf": {
submit: "Aplanar",
submitBatch: "Aplanar ({count} archivos)",
progressLabel: "Aplanando",
},
"sign-pdf": {
yourSignatures: "Tus firmas",
newSignature: "Nueva",
clickToPlace: "Haz clic en una firma para colocarla en la página actual.",
selectedSignature: "Firma seleccionada",
dragToAdjust: "Arrastra los controladores para cambiar el tamaño o rotar.",
disclaimer:
"Añade una imagen de firma visible. No es una firma digital basada en certificado.",
signing: "Firmando…",
signingPercent: "Firmando… {percent}%",
downloadSigned: "Descargar PDF firmado",
addFirst: "Añade al menos una firma antes de descargar.",
pad: {
title: "Crear firma",
draw: "Dibujar",
type: "Escribir",
upload: "Subir",
color: "Color",
pen: "Lápiz",
namePlaceholder: "Escribe tu nombre",
yourName: "Tu nombre",
remember: "Recordar en este dispositivo",
save: "Guardar y colocar",
uploadHint:
"Suelta un PNG / JPG o haz clic para elegir. Un PNG transparente funciona mejor.",
},
},
"redact-pdf": {
terms: "Términos a censurar",
termsHint: "Un término por línea (máx. 50)",
caseSensitive: "Distinguir mayúsculas",
submit: "Censurar",
submitBatch: "Censurar ({count} archivos)",
progressLabel: "Censurando",
},
"pdf-to-text": {
submit: "Extraer texto",
submitBatch: "Extraer texto ({count} archivos)",
progressLabel: "Extrayendo",
},
"pdf-to-word": {
hint: "Ideal para PDF con texto; las páginas escaneadas requieren OCR",
submit: "Convertir a Word",
submitBatch: "Convertir a Word ({count} archivos)",
progressLabel: "Convirtiendo",
},
"pdf-metadata": {
title: "Título",
author: "Autor",
subject: "Asunto",
keywords: "Palabras clave",
submit: "Definir metadatos",
submitBatch: "Definir metadatos ({count} archivos)",
progressLabel: "Configurando metadatos",
},
"html-to-pdf": {
hint: "Los recursos remotos están deshabilitados por privacidad.",
submit: "Convertir a PDF",
submitBatch: "Convertir a PDF ({count} archivos)",
progressLabel: "Convirtiendo",
},
"markdown-to-docx": {
submit: "Convertir a DOCX",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"markdown-to-html": {
hint: "Las imágenes remotas del origen se mantienen tal cual en la salida.",
submit: "Convertir a HTML",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"markdown-to-pdf": {
hint: "Los recursos remotos están deshabilitados por privacidad.",
submit: "Convertir a PDF",
submitBatch: "Convertir a PDF ({count} archivos)",
progressLabel: "Convirtiendo",
},
"epub-convert": {
format: "Formato de salida",
hint: "No se descargan los recursos remotos del libro.",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"to-epub": {
submit: "Convertir a EPUB",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"csv-excel": {
sheet: "Número de hoja",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"csv-json": {
pretty: "Formato legible",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"json-xml": {
pretty: "Formato legible",
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"split-csv": {
rowsPerFile: "Filas por archivo",
keepHeader: "Mantener encabezado en cada archivo",
submit: "Dividir",
submitBatch: "Dividir ({count} archivos)",
progressLabel: "Dividiendo",
},
"merge-csvs": {
submit: "Combinar",
submitBatch: "Combinar ({count} archivos)",
progressLabel: "Combinando",
},
"yaml-json": {
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"xml-to-csv": {
submit: "Convertir",
submitBatch: "Convertir ({count} archivos)",
progressLabel: "Convirtiendo",
},
"create-zip": {
submit: "Crear ZIP",
submitBatch: "Crear ZIP ({count} archivos)",
progressLabel: "Comprimiendo",
},
"extract-zip": {
submit: "Extraer",
submitBatch: "Extraer ({count} archivos)",
progressLabel: "Extrayendo",
},
},
urlImport: {
title: "Importar desde URLs",
placeholder: "Pega URLs de imágenes, una por línea...",
importButton: "Importar URLs",
addButton: "Agregar {count} archivos",
adding: "Agregando...",
retryButton: "Reintentar",
cancelButton: "Cancelar",
readyCount: "{count} listos",
failedStatus: "Error",
},
comparison: {
original: "Original",
processed: "Procesado",
before: "Antes",
after: "Después",
savings: "Ahorro",
},
toolPage: {
emptyPrompt: "Arrastra o sube una imagen para comenzar",
filesCount: "Archivos ({count})",
addMore: "+ Agregar más",
clearAll: "Limpiar todo",
acceptDescription: "Solo archivos {exts}",
notFound: "Herramienta no encontrada",
configureAndGenerate: "Configura los ajustes y genera.",
processingFailed: "Error al procesar este archivo",
conversionComplete: "Conversión completada",
cannotPreviewDownload:
"Los archivos {type} no se pueden previsualizar en el navegador. Usa el botón de descarga para guardar tu archivo.",
generatingPreview: "Generando vista previa...",
cannotPreviewWillProcess:
"Los archivos {ext} no se pueden previsualizar en el navegador. La herramienta procesará este archivo normalmente.",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageCounter: "{current} / {total}",
settingsLabel: "Configuración",
downloadAllZip: "Descargar todo (ZIP)",
hideSettings: "Ocultar configuración",
imageArea: "Área de vista previa",
disabledByAdmin: "Esta herramienta ha sido desactivada por el administrador",
browseOtherTools: "Explorar otras herramientas",
privacyNote: "Los archivos se procesan en tu servidor y nunca salen de tu red",
applyAndDownload: "Aplicar y descargar",
andMore: "y {count} más",
importFromFiles: "Importar desde Archivos",
saveToFiles: "Guardar en Archivos",
savedToFiles: "Guardado en Archivos",
adjustSettings: "Ajustar configuración",
startOver: "Empezar de nuevo con un archivo nuevo",
newFile: "Nuevo archivo",
previewUnavailable: "La vista previa estará disponible después del procesamiento",
generatePreview: "Generar vista previa",
previewFailed: "Error al generar la vista previa",
backToTools: "Volver a herramientas",
original: "Original",
processed: "Procesado",
saved: "Guardado",
noChange: "sin cambios",
download: "Descargar",
settingsSaved: "Tu configuración se ha guardado.",
tryAgain: "Reintentar",
tryDifferentFile: "Probar con otro archivo",
batchPartialSuccess: "{success} de {total} procesados. {failed} fallaron.",
dataResultsHint:
"Resultados mostrados arriba. Usa el botón de copiar en el panel de resultados.",
downloadAsFile: "Descargar como archivo",
downloadAll: "Descargar todo",
downloadFiles: "Descargar {count} archivos",
audioDecodeUnsupported: "Este formato de audio no se puede previsualizar en el navegador",
},
homePage: {
generatingPreview: "Generando vista previa...",
loadingPreview: "Cargando vista previa...",
changeFile: "Cambiar archivo",
quickActions: "Acciones rápidas",
allTools: "Todas las herramientas",
searchPlaceholder: "Buscar en {count} herramientas...",
recent: "Recientes",
pinned: "Fijados",
popular: "Popular",
browseByCategory: "Explorar por categoría",
gettingStarted: "Primeros pasos",
noToolsMatch: "Ninguna herramienta coincide con '{query}'",
clearSearch: "Borrar búsqueda",
requestToolCta: "Solicitar '{query}'",
requestToolBelowResults: "¿No lo encuentras? Solicita una herramienta",
all: "Todas",
documents: "PDF",
data: "Archivos",
pdf: "PDF",
files: "Archivos",
toolCount: "{count} herramientas",
heading: "Herramientas de SnapOtter",
},
fullscreenGrid: {
searchPlaceholder: "Buscar herramientas...",
hideDetails: "Ocultar detalles",
showDetails: "Mostrar detalles",
switchToSidebar: "Cambiar a vista de barra lateral",
sidebarButton: "Barra lateral",
noToolsFound: "No se encontraron herramientas",
tryDifferent: "Intenta con un término de búsqueda diferente",
},
editor: {
menu: {
file: {
label: "Archivo",
new: "Nuevo",
open: "Abrir",
save: "Guardar",
exportAs: "Exportar como...",
quickExportPng: "Exportación rápida como PNG",
close: "Cerrar",
},
edit: {
label: "Editar",
undo: "Deshacer",
redo: "Rehacer",
cut: "Cortar",
copy: "Copiar",
copyMerged: "Copiar combinado",
paste: "Pegar",
pasteInPlace: "Pegar en su lugar",
delete: "Eliminar",
freeTransform: "Transformar libremente",
transform: {
label: "Transformar",
scale: "Escalar",
rotate: "Rotar",
skew: "Sesgar",
flipHorizontal: "Voltear horizontal",
flipVertical: "Voltear vertical",
},
},
image: {
label: "Imagen",
imageSize: "Tamaño de imagen...",
canvasSize: "Tamaño de lienzo...",
rotation: {
label: "Rotación de imagen",
cw90: "90 en sentido horario",
ccw90: "90 en sentido antihorario",
r180: "180",
flipHorizontal: "Voltear horizontal",
flipVertical: "Voltear vertical",
},
trim: "Recortar",
adjustments: {
label: "Ajustes",
brightnessContrast: "Brillo/Contraste",
hueSaturation: "Matiz/Saturación",
colorBalance: "Balance de color",
levels: "Niveles",
curves: "Curvas",
},
},
layer: {
label: "Capa",
newLayer: "Nueva capa",
duplicateLayer: "Duplicar capa",
deleteLayer: "Eliminar capa",
arrange: {
label: "Ordenar",
bringToFront: "Traer al frente",
bringForward: "Traer adelante",
sendBackward: "Enviar atrás",
sendToBack: "Enviar al fondo",
},
mergeDown: "Combinar hacia abajo",
flattenImage: "Aplanar imagen",
},
select: {
label: "Seleccionar",
all: "Todo",
deselect: "Deseleccionar",
inverse: "Invertir",
colorRange: "Rango de color...",
},
filter: {
label: "Filtro",
blur: {
label: "Desenfoque",
gaussian: "Desenfoque gaussiano",
motion: "Desenfoque de movimiento",
radial: "Desenfoque radial",
surface: "Desenfoque de superficie",
},
sharpen: {
label: "Enfocar",
sharpen: "Enfocar",
unsharpMask: "Máscara de desenfoque",
},
noise: {
label: "Ruido",
addNoise: "Agregar ruido",
reduceNoise: "Reducir ruido",
},
pixelate: {
label: "Pixelar",
pixelate: "Pixelar",
mosaic: "Mosaico",
},
stylize: {
label: "Estilizar",
emboss: "Relieve",
solarize: "Solarizar",
posterize: "Posterizar",
},
grayscale: "Escala de grises",
sepia: "Sepia",
invert: "Invertir",
},
view: {
label: "Ver",
zoomIn: "Acercar",
zoomOut: "Alejar",
fitOnScreen: "Ajustar a pantalla",
actualPixels: "Píxeles reales",
rulers: "Reglas",
grid: "Cuadrícula",
guides: "Guías",
snap: "Ajustar",
panels: "Paneles",
},
},
menuBar: {
backTitle: "Volver a SnapOtter",
},
welcome: {
ariaLabel: "Zona de carga de imágenes",
heading: "Editor de imágenes",
dropDescription: "Arrastra una imagen aquí para comenzar",
openImageButton: "Abrir imagen",
newDocumentButton: "Nuevo documento",
pasteHint: "O pega desde el portapapeles (Ctrl+V)",
},
mobile: {
heading: "Se recomienda escritorio",
description:
"El editor de imágenes funciona mejor en pantallas de escritorio. Cambia a un dispositivo con una pantalla más grande para la experiencia de edición completa.",
},
errors: {
serverDecodeFailed: "Error de decodificación del servidor",
},
shapes: {
shape: "Forma",
fill: "Relleno",
stroke: "Trazo",
strokeWidth: "Grosor",
cornerRadius: "Radio",
sides: "Lados",
points: "Puntas",
dashStyle: "Guion",
solid: "Sólido",
dashed: "Discontinuo",
dotted: "Punteado",
none: "Ninguno",
opacity: "Opacidad",
rectangle: "Rectángulo",
ellipse: "Elipse",
line: "Línea",
arrow: "Flecha",
polygon: "Polígono",
star: "Estrella",
},
},
settings: {
heading: "Configuración",
nav: {
general: "General",
systemSettings: "Configuración del sistema",
security: "Seguridad",
people: "Personas",
teams: "Equipos",
roles: "Roles",
auditLog: "Registro de auditoría",
usage: "Uso",
apiKeys: "Claves API",
aiFeatures: "Funciones de AI",
tools: "Herramientas",
about: "Acerca de",
},
general: {
heading: "General",
description: "Preferencias del usuario y configuración de pantalla.",
loading: "Cargando...",
logOut: "Cerrar sesión",
defaultToolViewLabel: "Vista predeterminada de herramientas",
defaultToolViewDescription: "Cómo se muestran las herramientas en la página de inicio",
sidebarOption: "Barra lateral",
fullscreenGridOption: "Cuadrícula de pantalla completa",
appVersionLabel: "Versión de la app",
appVersionDescription: "Versión actual de SnapOtter",
saveButton: "Guardar configuración",
saveSuccess: "Configuración guardada.",
saveFailed: "Error al guardar la configuración.",
},
system: {
heading: "Configuración del sistema",
description: "Configuración del servidor y límites.",
fileUploadLimitLabel: "Límite de carga de archivos (MB)",
fileUploadLimitDescription: "Tamaño máximo de archivo por carga",
defaultThemeLabel: "Tema predeterminado",
defaultThemeDescription: "Tema aplicado para nuevas sesiones",
lightOption: "Claro",
darkOption: "Oscuro",
systemOption: "Sistema",
languageLabel: "Idioma",
languageDescription: "Idioma de la interfaz",
loginAttemptLimitLabel: "Límite de intentos de inicio de sesión",
loginAttemptLimitDescription:
"Intentos fallidos máximos de inicio de sesión por minuto antes del bloqueo",
fileManagementHeading: "Gestión de archivos",
maxFileAgeLabel: "Edad máxima de archivos (horas)",
maxFileAgeDescription:
"Cuánto tiempo se conservan los archivos procesados antes de la limpieza automática",
startupCleanupLabel: "Limpieza al inicio",
startupCleanupDescription: "Limpia archivos temporales antiguos cuando el servidor arranca",
saveButton: "Guardar configuración",
saveSuccess: "Configuración guardada.",
saveFailed: "Error al guardar la configuración.",
limitsAndResources: "Límites y recursos",
maxFileSize: "Tamaño máximo de archivo",
maxBatchSize: "Tamaño máximo de lote",
concurrentJobs: "Trabajos simultáneos",
workerThreads: "Hilos de trabajo",
maxPipelineSteps: "Pasos máximos de Pipeline",
processingTimeout: "Tiempo de espera de procesamiento",
rateLimitPerMin: "Límite de solicitudes (req/min)",
unlimited: "Ilimitado",
auto: "Automático",
envOverride: "Establecido por variable de entorno",
maxCanvasPixels: "Píxeles máximos de lienzo",
maxSvgSize: "Tamaño máximo de SVG",
maxSplitGrid: "Cuadrícula máxima de división",
maxPdfPages: "Páginas máximas de PDF",
sessionDuration: "Duración de la sesión",
supportBundleButton: "Descargar paquete de soporte",
supportBundleDescription:
"Descarga un ZIP de diagnóstico con configuración anonimizada, registros y datos de trabajos para solución de problemas.",
supportBundleFailed: "Error al descargar el paquete de soporte.",
},
privacy: {
title: "Privacidad",
description:
"Las analíticas de producto anónimas ayudan a mejorar SnapOtter. Están activadas de forma predeterminada y un administrador las configura para toda la instancia.",
analyticsLabel: "Analíticas de producto anónimas",
analyticsDescription:
"Comparte datos de uso anónimos (qué herramientas se ejecutan, duraciones, códigos de error) e informes de fallos. Sin dirección IP ni identidad de cuenta. Nunca recopilamos los nombres de tus archivos, su contenido, los resultados de OCR, los metadatos de imágenes ni el texto de los documentos. Desactiva esto para detenerlo todo.",
},
security: {
heading: "Seguridad",
description: "Configuración de contraseña y autenticación.",
changePasswordHeading: "Cambiar contraseña",
currentPasswordPlaceholder: "Contraseña actual",
newPasswordPlaceholder: "Nueva contraseña",
confirmPasswordPlaceholder: "Confirmar nueva contraseña",
passwordsMismatch: "Las contraseñas no coinciden",
passwordTooShort: "La contraseña debe tener al menos 4 caracteres",
changeSuccess: "Contraseña cambiada correctamente",
changeFailed: "Error al cambiar la contraseña",
currentPasswordIncorrect: "La contraseña actual es incorrecta",
changePasswordButton: "Cambiar contraseña",
loginAttemptLimitNote:
"Los límites de intentos de inicio de sesión se pueden configurar en Configuración del sistema.",
adminHeading: "Configuración de seguridad del administrador",
adminDescription:
"Configuración de políticas de seguridad empresarial. Se aplica a todos los usuarios.",
sessionIdleTimeout: "Tiempo de inactividad de sesión (minutos)",
sessionIdleTimeoutDesc: "Cerrar automáticamente las sesiones inactivas. 0 = desactivado.",
maxSessionsPerUser: "Máximo de sesiones por usuario",
maxSessionsPerUserDesc: "Limitar sesiones simultáneas por usuario. 0 = ilimitado.",
mfaPolicy: "Política de MFA",
mfaPolicyDesc: "Requerir autenticación multifactor para los usuarios.",
mfaPolicyOptional: "Opcional",
mfaPolicyAdminsOnly: "Obligatorio para administradores",
mfaPolicyRequired: "Obligatorio para todos los usuarios",
ssoEnforcement: "Aplicación de SSO",
ssoEnforcementDesc:
"Requerir inicio de sesión SSO para todos los usuarios excepto acceso de emergencia.",
ssoBreakGlassUsername: "Usuario administrador de emergencia",
ssoBreakGlassUsernameDesc:
"Este administrador puede iniciar sesión con credenciales locales cuando SSO está activado.",
passwordMinLength: "Longitud mínima de contraseña",
passwordMinLengthDesc: "Número mínimo de caracteres requeridos para las contraseñas.",
passwordRequireUppercase: "Requerir mayúscula",
passwordRequireUppercaseDesc: "Requerir al menos una letra mayúscula.",
passwordRequireNumber: "Requerir número",
passwordRequireNumberDesc: "Requerir al menos un número.",
passwordRequireSpecial: "Requerir carácter especial",
passwordRequireSpecialDesc: "Requerir al menos un carácter especial.",
passwordPolicyHeading: "Política de contraseñas",
securitySettingsSaved: "Configuración de seguridad guardada",
securitySettingsFailed: "Error al guardar la configuración de seguridad",
},
people: {
heading: "Personas",
description: "Administra los miembros del espacio de trabajo y sus permisos",
userCount: "{count} usuario",
userCountPlural: "{count} usuarios",
searchPlaceholder: "Buscar miembros...",
addMembersButton: "Agregar miembros",
newMemberHeading: "Nuevo miembro",
usernamePlaceholder: "Nombre de usuario",
passwordPlaceholder: "Contraseña",
roleUserOption: "Usuario",
roleEditorOption: "Editor",
roleAdminOption: "Administrador",
roleUserDescription: "Acceso básico a herramientas",
roleEditorDescription: "Todos los archivos y pipelines",
roleAdminDescription: "Acceso completo",
noDescription: "Sin descripción",
defaultTeamOption: "Predeterminado",
createButton: "Crear",
cancelButton: "Cancelar",
createSuccess: "Usuario creado correctamente",
createFailed: "Error al crear el usuario",
userLimitReached: "Límite de usuarios alcanzado ({max} máximo)",
deleteConfirm: '¿Eliminar usuario "{username}"? Esta acción no se puede deshacer.',
deleteSuccess: 'Usuario "{username}" eliminado',
deleteFailed: "Error al eliminar el usuario",
editHeading: "Editar {username}",
updateSuccess: "Usuario actualizado",
updateFailed: "Error al actualizar el usuario",
cannotRemoveOwnAdmin: "No puedes eliminar tu propio rol de administrador",
resetPasswordHeading: "Restablecer contraseña para {username}",
newPasswordLabel: "Nueva contraseña (mínimo 8 caracteres)",
resetPasswordButton: "Restablecer contraseña",
resetPasswordWarning: "Esto invalidará todas las sesiones y claves API de este usuario.",
resetSuccess: "Contraseña restablecida correctamente",
resetFailed: "Error al restablecer la contraseña",
tableHeaderUser: "Usuario",
tableHeaderRole: "Rol",
tableHeaderTeam: "Equipo",
noSearchResults: "Ningún miembro coincide con tu búsqueda.",
noUsersFound: "No se encontraron usuarios.",
authBadgeLocalOidc: "Local + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "Editar rol / equipo",
resetPasswordAction: "Restablecer contraseña",
deleteUserAction: "Eliminar usuario",
saveButton: "Guardar",
copyPasswordButton: "Copiar contraseña",
passwordCopied: "¡Copiado!",
copyPasswordWarning:
"Copia esta contraseña ahora. No podrás verla después de crear el usuario.",
},
teams: {
heading: "Equipos",
description: "Organiza a los miembros en equipos para una mejor gestión.",
createButton: "Crear nuevo equipo",
newTeamHeading: "Nuevo equipo",
teamNamePlaceholder: "Nombre del equipo",
createSubmitButton: "Crear",
cancelButton: "Cancelar",
createSuccess: "Equipo creado correctamente",
createFailed: "Error al crear el equipo",
duplicateTeamError: "Ya existe un equipo con ese nombre",
renameSuccess: "Equipo renombrado",
renameFailed: "Error al renombrar el equipo",
deleteConfirm: '¿Eliminar equipo "{name}"? Los miembros serán desasignados.',
deleteSuccess: 'Equipo "{name}" eliminado',
deleteFailed: "Error al eliminar el equipo",
cannotDeleteDefault: "No se puede eliminar el equipo predeterminado o un equipo con miembros",
tableHeaderTeamName: "Nombre del equipo",
tableHeaderMembers: "Miembros",
emptyState: "No se encontraron equipos.",
renameSaveButton: "Guardar",
renameCancelButton: "Cancelar",
renameAction: "Renombrar",
deleteAction: "Eliminar",
totalMembers: "Total de miembros",
nameRequired: "El nombre del equipo es obligatorio",
nameTooLong: "El nombre del equipo debe tener 50 caracteres o menos",
duplicateName: "Ya existe un equipo con este nombre",
teamStorageQuota: "Cuota de almacenamiento (MB)",
teamStorageQuotaDesc:
"Almacenamiento máximo para este equipo en MB. Dejar vacío para sin límite.",
teamRetentionHours: "Retención (horas)",
teamRetentionHoursDesc:
"Retención de archivos procesados para este equipo. Dejar vacío para usar el valor predeterminado global.",
quotaSaved: "Configuración de equipo guardada",
},
roles: {
heading: "Roles",
description:
"Administra roles y sus permisos. Los roles predeterminados no se pueden modificar.",
createButton: "Crear rol personalizado",
newRoleHeading: "Nuevo rol",
roleNamePlaceholder: "Nombre del rol",
descriptionPlaceholder: "Descripción (opcional)",
permissionsLabel: "Permisos",
createSubmitButton: "Crear",
cancelButton: "Cancelar",
createSuccess: "Rol creado correctamente",
createFailed: "Error al crear el rol",
duplicateRoleError: "Ya existe un rol con ese nombre",
editHeading: "Editar rol: {name}",
editSaveButton: "Guardar",
editCancelButton: "Cancelar",
updateSuccess: "Rol actualizado",
updateFailed: "Error al actualizar el rol",
deleteConfirm: '¿Eliminar rol "{name}"? {count} usuario(s) deberán ser reasignados.',
deleteConfirmSimple: '¿Eliminar rol "{name}"?',
deleteSuccess: 'Rol "{name}" eliminado',
deleteFailed: "Error al eliminar el rol",
emptyState: "No se encontraron roles.",
builtInBadge: "Predeterminado",
userCountBadge: "{count} usuario(s)",
editRoleTitle: "Editar rol",
deleteRoleTitle: "Eliminar rol",
permGroup: {
tools: "Herramientas",
files: "Archivos",
apiKeys: "Claves API",
pipelines: "Pipelines",
settings: "Configuración",
users: "Usuarios",
teams: "Equipos",
system: "Sistema",
},
},
auditLog: {
heading: "Registro de auditoría",
allActionsFilter: "Todas las acciones",
emptyState: "No hay entradas en el registro de auditoría.",
tableHeaderTime: "Hora",
tableHeaderUser: "Usuario",
tableHeaderAction: "Acción",
tableHeaderTarget: "Objetivo",
paginationInfo: "Página {page} de {totalPages} ({total} entradas)",
previousButton: "Anterior",
nextButton: "Siguiente",
justNow: "ahora mismo",
minutesAgo: "hace {mins}m",
hoursAgo: "hace {hrs}h",
daysAgo: "hace {days}d",
},
usage: {
heading: "Uso",
description: "Estadísticas de uso local de trabajos y almacenamiento de archivos.",
periodLabel: "Período",
days7: "7 días",
days30: "30 días",
days90: "90 días",
jobsPerDayHeading: "Trabajos por día",
topToolsHeading: "Herramientas más usadas",
perUserHeading: "Volumen por usuario",
durationsHeading: "Percentiles de duración",
noData: "Sin datos para este período.",
dayColumn: "Día",
totalColumn: "Total",
completedColumn: "Completados",
failedColumn: "Fallidos",
toolColumn: "Herramienta",
runsColumn: "Ejecuciones",
userColumn: "Usuario",
bytesInColumn: "Bytes entrada",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Almacenamiento de biblioteca",
storageFiles: "{count} archivos",
unknownUser: "(desconocido)",
storageByTeam: "Almacenamiento por equipo",
teamColumn: "Equipo",
storageColumn: "Almacenamiento",
usersColumn: "Usuarios",
},
apiKeys: {
heading: "Claves API",
description: "Administra las claves API para acceso programático a SnapOtter.",
keyNamePlaceholder: "Nombre de la clave (opcional)",
generateButton: "Generar clave API",
removeScopingLabel: "Eliminar restricción de permisos",
restrictPermissionsLabel: "Restringir permisos (opcional)",
expiresLabel: "Expira:",
clearButton: "Limpiar",
copyTitle: "Copiar",
keyWarning: "Guarda esta clave de forma segura. No se mostrará de nuevo.",
existingKeysHeading: "Claves existentes",
createdPrefix: "Creada {date}",
scopedPrefix: "Alcance:",
expiresPrefix: "Expira {date}",
deleteKeyTitle: "Eliminar clave",
deleteConfirm:
"¿Eliminar esta clave API? Las integraciones que la usen dejarán de funcionar.",
emptyState: "Aún no hay claves API. Genera una para comenzar.",
},
tools: {
heading: "Herramientas",
description:
"Activa o desactiva herramientas individuales. Las herramientas desactivadas se ocultan para todos los usuarios.",
restartBanner: "Se requiere reinicio para que los cambios surtan efecto.",
searchPlaceholder: "Buscar herramientas...",
noSearchResults: "Ninguna herramienta coincide con tu búsqueda.",
loadFailedError:
"Error al cargar la configuración de herramientas. El guardado está desactivado para prevenir pérdida de datos.",
saveButton: "Guardar configuración de herramientas",
disabledCount: "{count} herramienta(s) desactivada(s)",
},
experimental: {
label: "Activar herramientas experimentales",
description: "Muestra herramientas que aún están en desarrollo. Pueden ser inestables.",
},
fileManagement: {
title: "Gestión de archivos",
maxAge: "Edad máxima de archivos (horas)",
maxAgeDescription:
"Cuánto tiempo se conservan los archivos procesados antes de la limpieza automática",
startupCleanup: "Limpieza al inicio",
startupCleanupDescription: "Limpia archivos temporales antiguos cuando el servidor arranca",
},
dataRetention: {
title: "Retención de datos",
fileMaxAgeHours: "Retención de archivos procesados (horas)",
fileMaxAgeHoursDesc:
"Tiempo de conservación de archivos subidos y procesados. Predeterminado: 72 horas.",
jobsRetentionDays: "Retención de registros de trabajos (días)",
jobsRetentionDaysDesc:
"Tiempo de conservación de metadatos de trabajos. 0 = conservar siempre. Predeterminado: 30 días.",
auditRetentionDays: "Retención del registro de auditoría (días)",
auditRetentionDaysDesc:
"Tiempo de conservación de entradas del registro de auditoría. 0 = conservar siempre. Predeterminado: siempre.",
},
aiFeatures: {
title: "Funciones de AI",
description: "Gestiona paquetes de modelos AI para procesamiento avanzado de archivos.",
installAll: "Instalar todo",
diskUsage: "Uso del disco: {size}",
sizeOnDisk: "{size} en disco",
installed: "Instalado",
notInstalled: "No instalado",
queued: "En cola",
install: "Instalar",
repair: "Reparar",
uninstall: "Desinstalar",
installing: "Instalando...",
importBundle: "Importar paquete",
importDescription: "Importa un entorno OCR firmado o un paquete de AI heredado sin conexión.",
importButton: "Importar desde archivo",
importing: "Importando...",
importSuccess: "Paquete importado correctamente.",
importError: "Error al importar el paquete: {error}",
importType: "Tipo de paquete",
importOcr: "Paquete de OCR preciso",
importLegacy: "Paquete de AI heredado",
importOcrIndex: "Índice de OCR firmado (.json)",
importOcrArchive: "Archivo de ejecución de OCR (.tar.gz)",
importLegacyArchive: "Archivo del paquete heredado (.tar.gz)",
resetTitle: "Restablecer entorno de AI",
resetDescription:
"Elimina todas las funciones de AI instaladas y los modelos descargados, y vuelve a empezar desde cero. Utiliza esto si las herramientas de AI se comportan de forma inesperada tras una actualización y reinstalar un paquete no soluciona el problema.",
resetButton: "Restablecer",
resetConfirmMessage:
"Esto elimina todas las funciones y modelos de AI instalados. Tendrás que reinstalarlos desde Hugging Face. Esta acción no se puede deshacer.",
resetFailed: "Error al restablecer: {error}",
},
about: {
heading: "Acerca de",
appName: "SnapOtter",
appDescription:
"Una suite de procesamiento de archivos autoalojada y con privacidad como prioridad, con 200+ herramientas. Convierte, comprime, edita, transcribe, OCR y automatiza flujos de trabajo de imágenes, video, audio, PDF y archivos sin enviar datos a la nube.",
versionLabel: "Versión:",
linksHeading: "Enlaces",
githubLink: "Repositorio en GitHub",
docsLink: "Documentación",
apiRefLink: "Referencia API (Swagger)",
licenseLabel: "Licencia:",
licenseDescription:
"SnapOtter es software de código abierto bajo la licencia GNU Affero General Public License v3 (AGPLv3).",
},
},
auth: {
login: "Iniciar sesión",
logout: "Cerrar sesión",
username: "Nombre de usuario",
password: "Contraseña",
loginButton: "Iniciar sesión",
loggingIn: "Iniciando sesión...",
invalidCredentials: "Nombre de usuario o contraseña inválidos",
connectionError: "Error de conexión",
signInWith: "Iniciar sesión con {provider}",
signInWithSso: "Iniciar sesión con SSO",
or: "o",
methodLocal: "Local",
methodOidc: "OIDC",
methodBoth: "Local + OIDC",
oidcAuthFailed: "La autenticación falló. Intenta de nuevo.",
oidcProviderUnreachable: "No se pudo contactar al proveedor de identidad. Intenta más tarde.",
oidcSessionExpired: "La sesión de inicio de sesión expiró. Intenta de nuevo.",
oidcUserNotAuthorized:
"Tu cuenta no está autorizada para acceder a esta aplicación. Contacta a tu administrador.",
oidcUserLimitReached: "Límite de usuarios alcanzado. Contacta a tu administrador.",
oidcGenericError: "Error de autenticación. Intenta de nuevo.",
samlAuthFailed: "La autenticación SAML falló. Inténtalo de nuevo.",
samlUserNotAuthorized:
"Tu cuenta no tiene autorización para acceder a esta aplicación. Contacta al administrador.",
samlUserLimitReached: "Límite de usuarios alcanzado. Contacta al administrador.",
ssoEnforcedLocalRestricted:
"El inicio de sesión local está restringido a administradores autorizados.",
mfaRequired: "Introduce tu código de autenticación",
mfaRecoveryHint: "También puedes usar un código de recuperación",
verify: "Verificar",
verifying: "Verificando...",
mfaInvalidCode: "Código no válido. Inténtalo de nuevo.",
mfaEnrollmentRequired:
"Tu organización requiere autenticación multifactor. Configura MFA en los ajustes de tu cuenta.",
methodSaml: "SAML",
passwordManagedByProvider:
"Los cambios de contraseña son administrados por tu proveedor de identidad.",
enterUsername: "Ingresa tu nombre de usuario",
enterPassword: "Ingresa tu contraseña",
heroTitle: "Tus archivos. Se quedan contigo.",
heroSubtitle: "Todas las herramientas que necesitas.",
rotatingPhrases: [
"Sin registros. Sin cuentas.",
"Sin subidas a la nube. Nunca.",
"100% procesamiento local.",
"Gratis. Para siempre.",
"Sin límites. Sin topes ocultos.",
"Funciona totalmente sin conexión.",
"Procesamiento por lotes ilimitado.",
"200+ herramientas.",
"15 modelos AI. Tu hardware.",
"Ultra rápido. Construido sobre Sharp.",
"Listo para redes aisladas.",
"Un solo contenedor Docker.",
"Código abierto. Siempre.",
"Cada píxel se queda en tu hardware.",
"Tu servidor. Tus reglas.",
"Se instala con un solo docker pull.",
"La alternativa autoalojada.",
"Redimensiona, comprime, convierte. Localmente.",
"Editor de imágenes gratuito. Sin marcas de agua.",
"Procesamiento masivo de archivos. Ilimitado.",
"Elimina fondos sin conexión.",
"Alternativa autoalojada a Canva.",
"Sin claves API necesarias.",
"Cumplimiento GDPR por diseño.",
"Funciona sin internet.",
],
},
changePassword: {
title: "Cambia tu contraseña",
description:
"Necesitas establecer una nueva contraseña antes de continuar. Tu contraseña debe tener al menos 8 caracteres con mayúsculas, minúsculas y un número.",
usernameLabel: "Nombre de usuario",
currentPasswordLabel: "Contraseña actual",
currentPasswordPlaceholder: "Ingresa la contraseña actual",
newPasswordLabel: "Nueva contraseña",
generateButton: "Generar contraseña segura",
newPasswordPlaceholder: "Al menos 8 caracteres",
confirmPasswordLabel: "Confirmar nueva contraseña",
confirmPasswordPlaceholder: "Repite la nueva contraseña",
passwordsMismatch: "Las contraseñas no coinciden",
failedError: "Error al cambiar la contraseña",
connectionError: "Error de conexión",
changingButton: "Cambiando...",
changeButton: "Cambiar contraseña",
sidebarTitle: "Ya casi",
sidebarDescription: "Establece una contraseña segura para proteger tu cuenta y estarás listo.",
},
automate: {
title: "Automatizar",
invalidPipelineFile: "No es un archivo de Pipeline de SnapOtter válido",
newerVersion: "Este Pipeline fue creado con una versión más reciente de SnapOtter",
missingName: "Al archivo de Pipeline le falta un nombre",
noSteps: "El archivo de Pipeline no tiene pasos",
importFailed: "Error en la importación",
couldNotRead: "No se pudo leer el archivo de Pipeline",
fileCount: "{count} archivo",
fileCountPlural: "{count} archivos",
importFromLibrary: "Importar desde la biblioteca",
addButton: "+ Agregar",
libraryButton: "Biblioteca",
clearButton: "Limpiar",
processingFailed: "Error al procesar este archivo",
processingMultiple: "Procesando {count} archivos...",
processingPipeline: "Procesando Pipeline...",
processButton: "Procesar",
processButtonMultiple: "Procesar ({count})",
processAllButton: "Procesar todo ({count})",
addTool: "Agregar herramienta",
toolPalette: "Paleta de herramientas",
clickToAdd: "Clic para agregar al Pipeline",
savedLabel: "Guardado",
templatesLabel: "Plantillas",
importButton: "Importar",
noSavedPipelines: "No hay Pipelines guardados",
stepCount: "({count} paso)",
stepCountPlural: "({count} pasos)",
exportPipeline: "Exportar Pipeline",
deletePipeline: "Eliminar Pipeline",
moreCount: "+{count} más",
pipelineBuilder: "Constructor de Pipeline",
addToolsPrompt: "Agrega herramientas desde la paleta para comenzar",
stepsConfigured: "{count} paso configurado",
stepsConfiguredPlural: "{count} pasos configurados",
noFilesLoaded: "No hay archivos cargados",
downloadZip: "Descargar ZIP",
saveButton: "Guardar",
pipelineNamePlaceholder: "Nombre del Pipeline",
descriptionPlaceholder: "Descripción",
savingIndicator: "...",
cancelButton: "Cancelar",
preview: "Vista previa",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageCounter: "{current} / {total}",
imageArea: "Área de vista previa",
templateSocialMedia: "Listo para redes sociales",
templatePrivacyClean: "Limpieza de privacidad",
templateWebOptimization: "Optimización web",
templateProfilePicture: "Foto de perfil",
templateWatermarkBatch: "Lote de marcas de agua",
createNew: "Crear nueva automatización",
savedAutomations: "Automatizaciones guardadas",
templates: "Plantillas",
addStep: "Agregar paso",
removeStep: "Eliminar",
moveUp: "Subir",
moveDown: "Bajar",
savePipeline: "Guardar Pipeline",
runPipeline: "Procesar",
pipelineName: "Nombre del Pipeline",
pipelineDescription: "Descripción (opcional)",
noStepsPrompt: "Agrega pasos para construir tu automatización",
noStepsHeading: "Aún no hay pasos",
searchToolsPlaceholder: "Buscar herramientas...",
step: "Paso",
modalityWarning: "Incompatibilidad de modalidad",
modalityWarningTooltip:
"Este paso espera {expected} pero recibe {received}; puede fallar al ejecutar la canalización.",
},
nav: {
tools: "Herramientas",
reader: "Lector",
automate: "Automatizar",
editor: "Editor",
files: "Archivos",
help: "Ayuda",
settings: "Configuración",
grid: "Cuadrícula",
},
files: {
myFiles: "Mis archivos",
recentTab: "Recientes",
uploadTab: "Subir archivos",
fileDetailsAriaLabel: "Detalles del archivo",
fileDetailsHeading: "Detalles del archivo",
searchPlaceholder: "Buscar archivos...",
selectedCount: "{count} seleccionados",
fileCount: "{count} archivos",
fileCountSingular: "{count} archivo",
noFilesFound: "No se encontraron archivos",
selectFilePrompt: "Selecciona un archivo para ver detalles",
openFile: "Abrir archivo",
selectFile: "Seleccionar archivo",
openInPipeline: "Abrir en Pipeline",
dropFilesHere: "Suelta los archivos aquí",
orClickToSelect: "o haz clic para seleccionar archivos",
name: "Nombre",
format: "Formato",
size: "Tamaño",
dimensions: "Dimensiones",
version: "Versión",
toolsUsed: "Herramientas usadas",
none: "Ninguno",
delete: "Eliminar",
pipeline: "Pipeline",
download: "Descargar",
},
dropzone: {
unsupportedFileType: "Este tipo de archivo no es compatible con esta herramienta",
urlFetchFailed: "No se pudo obtener la imagen desde la URL",
ariaLabel: "Zona de carga de archivos",
dropPrompt: "Arrastra tus imágenes aquí",
browseOrPaste: "usa el botón de subida o pega desde el portapapeles",
uploadButton: "Subir",
defaultFormats: "Imágenes, video, audio, PDF, archivos y más de 150 formatos",
orSeparator: "o",
urlPlaceholder: "Pega la URL de la imagen...",
urlLoadingIndicator: "...",
addUrlButton: "Agregar",
importMultipleUrls: "Importar múltiples URLs...",
filesSelected: "{count} archivos seleccionados",
dropToAdd: "Suelta para agregar archivos",
dropToReplace: "Suelta para reemplazar archivo",
},
reviewPanel: {
processedResultAlt: "Resultado procesado",
sizeLabel: "Tamaño: {size}",
typeLabel: "Tipo: {type}",
processedLabel: "Procesado: {time}",
undoButton: "Deshacer",
downloadButton: "Descargar",
openInEditor: "Abrir en el editor",
reviewHeading: "Revisar",
continueEditing: "Continuar editando",
},
features: {
notEnabledTitle: "Función no activada",
notEnabledDescription:
"Esta función no está activada. Pide a tu administrador que la active en Configuración.",
requiresDownload: "Esta función requiere una descarga adicional (~{size})",
retryButton: "Reintentar",
queued: "En cola para instalación...",
enableButton: "Activar {name}",
repairRequired: "Reparación necesaria",
repairDescription:
"Algunos archivos de modelo faltan o están dañados. La reparación los descargará de nuevo.",
repairButton: "Reparar {name}",
lessThanMinute: "Menos de un minuto restante",
oneMinuteLeft: "~1 minuto restante",
minutesLeft: "~{mins} minutos restantes",
progressMessages: [
"Ya casi... probablemente...",
"Las cosas buenas toman tiempo...",
"Más rápido que ver secar la pintura...",
"Tu paciencia es verdaderamente inspiradora...",
"Trabajando más duro de lo que parece...",
"Esta es la parte emocionante, en serio...",
"Haciendo cosas importantes tras bambalinas...",
"Si lees esto, está funcionando...",
"Preparando algo increíble...",
"Vale cada segundo, lo prometo...",
"El suspenso es parte de la experiencia...",
"Enseñándole trucos nuevos a tu computadora...",
"Configurando tus superpoderes...",
"Tus archivos te lo agradecerán después...",
"Cargando... pero con estilo...",
"Buen momento para un café...",
"Roma tampoco se construyó en un día...",
"Shhh... genio trabajando...",
"Haciendo que tus proyectos se pongan celosos...",
"Armando el equipo de ensueño...",
"Desempacando cosas geniales...",
"Ya casi termino de pensar en empezar... es broma...",
"Giro de trama: esto de verdad está haciendo algo...",
"Calentando los motores creativos...",
"Cargando imaginación...",
"No es un protector de pantalla, lo prometemos...",
"El gran arte necesita tiempo para instalarse...",
"Tu yo del futuro te lo agradecerá...",
"Buscando archivos muy inteligentes...",
"Aguanta, lo mejor está por venir...",
],
},
help: {
heading: "Ayuda",
gettingStarted: {
heading: "Primeros pasos",
description:
"Selecciona una herramienta desde la barra lateral o busca una. Sube un archivo arrastándolo a la página o haciendo clic en el área de carga. Ajusta la configuración y descarga tu resultado.",
},
keyboardShortcuts: {
heading: "Atajos de teclado",
focusSearchBar: "Enfocar barra de búsqueda",
goToTools: "Ir a herramientas",
toggleTheme: "Cambiar tema",
goToResize: "Ir a Redimensionar",
goToCrop: "Ir a Recortar",
goToCompress: "Ir a Comprimir",
goToConvert: "Ir a Convertir",
goToRemoveBackground: "Ir a Eliminar fondo",
goToWatermarkText: "Ir a Marca de agua de texto",
goToStripMetadata: "Ir a Eliminar metadatos",
goToImageInfo: "Ir a Info de imagen",
processFile: "Procesar archivo",
downloadResult: "Descargar resultado",
},
resources: {
heading: "Recursos",
githubLink: "Repositorio en GitHub",
reportIssueLink: "Reportar un problema",
docsLink: "Documentación",
apiRefLink: "Referencia API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "Ocurrió un error",
offline: "Estás sin conexión",
reconnecting: "Reconectando al servidor...",
connected: "Conectado",
processingFailed: "Error al procesar este archivo",
timeout:
"La solicitud agotó el tiempo de espera. El servidor puede estar sobrecargado. Intenta de nuevo.",
networkError: "Error de red. Verifica tu conexión.",
invalidCredentials: "Nombre de usuario o contraseña inválidos",
connectionError: "Error de conexión",
},
sidebar: {
sponsor: "Apóyanos",
tools: "Herramientas",
grid: "Cuadrícula",
automate: "Automatizar",
editor: "Editor",
files: "Archivos",
help: "Ayuda",
settings: "Configuración",
},
toolCard: {
pin: "Fijar",
unpin: "Quitar",
},
appLayout: {
mobileNavTools: "Herramientas",
mobileNavAutomate: "Automatizar",
mobileNavEditor: "Editor",
mobileNavFiles: "Archivos",
mobileNavSettings: "Configuración",
},
a11y: {
sponsorLink: "Apoya a SnapOtter en GitHub Sponsors",
skipToContent: "Ir al contenido principal",
openSidebar: "Abrir barra lateral",
closeSidebar: "Cerrar barra lateral",
closeSettings: "Cerrar configuración",
closeHelp: "Cerrar ayuda",
closeDialog: "Cerrar diálogo",
zoomIn: "Acercar",
zoomOut: "Alejar",
fitToView: "Ajustar a la vista",
actualSize: "Tamaño real",
pan: "Desplazar",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageArea: "Área de vista previa",
imageViewer: "Visor de archivos",
fileDropZone: "Zona para soltar archivos",
imageDropZone: "Zona para soltar archivos",
beforeAfterSlider: "Control deslizante de comparación antes/después",
imageControls: "Controles de vista previa",
zoomControls: "Controles de zoom",
dragToReorder: "Arrastrar para reordenar",
whiteBackground: "Fondo blanco",
blackBackground: "Fondo negro",
expandPanel: "Expandir panel",
collapsePanel: "Contraer panel",
swapDimensions: "Intercambiar dimensiones",
applyCrop: "Aplicar recorte",
cancelCrop: "Cancelar recorte",
fontFamily: "Familia tipográfica",
textColor: "Color de texto",
flipHorizontal: "Voltear horizontalmente",
flipVertical: "Voltear verticalmente",
hexColorValue: "Valor de color HEX",
backgroundColor: "Color de fondo",
foregroundColor: "Color de primer plano",
swapColors: "Intercambiar colores de primer plano y fondo",
resetColors: "Restablecer a blanco y negro predeterminado",
foregroundHex: "Valor HEX del color de primer plano",
undo: "Deshacer",
redo: "Rehacer",
layers: "Capas",
addLayer: "Añadir capa",
deleteLayer: "Eliminar capa",
cancelOperation: "Cancelar operación",
fill: "Relleno",
fileDetails: "Detalles del archivo",
language: "Idioma",
selected: "Seleccionado",
deleteKey: "Eliminar clave",
editRole: "Editar rol",
deleteRole: "Eliminar rol",
notInstalled: "No instalado",
queued: "En cola para instalar",
installing: "Instalando",
imageNOfTotal: "Imagen {n} de {total}",
processingComplete: "Imagen procesada correctamente",
processingFailed: "Error en el procesamiento",
settingsDialog: "Configuración",
helpDialog: "Ayuda",
navigationMenu: "Navegación",
homeLink: "Inicio de SnapOtter",
},
pipelineTemplates: {
"web-optimize": {
name: "Optimizar para web",
description:
"Redimensiona, convierte a WebP y comprime una imagen para una carga web rápida.",
},
"email-friendly": {
name: "Apto para correo",
description:
"Reduce una imagen para que sea lo bastante pequeña para adjuntarla a un correo.",
},
"privacy-scrub": {
name: "Limpieza de privacidad",
description: "Elimina los datos EXIF, GPS y otros metadatos, y luego comprime.",
},
"social-square": {
name: "Cuadrado social",
description: "Recorta a un cuadrado 1:1 y comprime para publicaciones en redes sociales.",
},
"watermark-batch": {
name: "Marca de agua por lotes",
description: "Estampa una marca de agua de texto en las imágenes y luego comprime.",
},
"shrink-pdf-email": {
name: "Reducir PDF para correo",
description:
"Aplana y comprime de forma agresiva un PDF para que cumpla los límites del correo.",
},
"podcast-polish": {
name: "Pulido de pódcast",
description: "Elimina los silencios, normaliza el volumen y añade fundidos a una grabación.",
},
"cut-out-subject": {
name: "Recortar el sujeto",
description: "Quita el fondo con IA y comprime el recorte transparente.",
},
"restore-old-photo": {
name: "Restaurar foto antigua",
description: "Repara, colorea y amplía una foto antigua o dañada con IA.",
},
},
} as const;