Files
SnapOtter/packages/shared/src/i18n/es.ts
T
SnapOtterandGitHub ffbf4f9e10 feat(i18n): raise translation coverage across all 20 locales (#332)
Close genuinely-untranslated UI strings and fix orthography/diacritic
errors across every non-English locale, while keeping legitimate cognates,
loanwords, and technical tokens (OIDC, SAML, PDF, YAML, brand names) as-is.

- Untranslated strings closed: 225 (976 -> 751 remaining; the remainder are
  legit cognates / brand / format tokens that natives keep in English)
- Orthography: Italian 52 accent fixes (verb forms, a/e/i finals), Vietnamese
  41 strings with restored tone marks, Turkish 35, Polish 42, Dutch 17 (trema),
  plus smaller passes in es/fr/sv/pt-BR
- Biggest gap wins: Indonesian 102 -> 72; every CJK/Cyrillic/Arabic/Indic
  locale roughly halved its English leftovers

Cross-locale key parity preserved exactly; all placeholders intact.

Verified: pnpm typecheck, i18n parity/locale/tool-i18n tests (43/43),
placeholder-integrity check (0 mismatches), Biome.
2026-06-23 00:10:13 +08:00

3479 lines
125 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const es: TranslationKeys = {
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.",
},
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: {
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: "OCR / Extracción de texto",
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",
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",
},
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": {
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.",
submit: "Borrar objeto",
submitBatch: "Borrar todos ({count})",
progressLabel: "Borrando objeto",
},
ocr: {
quality: "Calidad",
enhanceBeforeScanning: "Mejorar antes de escanear",
enhanceHint:
"Endereza, mejora el contraste, elimina el ruido y escala la imagen automáticamente antes del escaneo para mayor precisión.",
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",
},
"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",
popular: "Popular",
browseByCategory: "Explorar por categoría",
gettingStarted: "Primeros pasos",
noToolsMatch: "Ninguna herramienta coincide con '{query}'",
clearSearch: "Borrar búsqueda",
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",
productAnalytics: "Analítica del producto",
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.",
},
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.",
},
analytics: {
heading: "Analítica del producto",
description: "Comparte datos de uso anónimos para ayudar a mejorar SnapOtter.",
privacyNote: "Tus archivos nunca salen de tu red.",
disabledByAdmin:
"La analítica del producto ha sido desactivada por el administrador del servidor.",
enabledLabel: "Analítica activada",
disabledLabel: "Analítica desactivada",
learnMore: "Más información",
},
aiFeatures: {
title: "Funciones de AI",
description: "Gestiona paquetes de modelos AI para procesamiento avanzado de archivos.",
installAll: "Instalar todo",
diskUsage: "Uso del disco: {size}",
installed: "Instalado",
notInstalled: "No instalado",
queued: "En cola",
install: "Instalar",
repair: "Reparar",
uninstall: "Desinstalar",
installing: "Instalando...",
importBundle: "Importar paquete",
importDescription: "Sube un archivo .tar.gz exportado desde otra instalación.",
importButton: "Importar desde archivo",
importing: "Importando...",
importSuccess: "Paquete importado correctamente.",
importError: "Error al importar el paquete: {error}",
},
about: {
heading: "Acerca de",
appName: "SnapOtter",
appDescription:
"Una suite de procesamiento de archivos autoalojada y con privacidad como prioridad, con 157 herramientas. Convierte, comprime, edita, transcribe, OCR y automatiza flujos de trabajo de imágenes, video, audio, documentos y datos 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.",
"157 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",
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",
},
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: "haz clic en cualquier lugar para explorar, o pega desde el portapapeles",
uploadButton: "Subir",
defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD y más de 65 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",
},
analytics: {
consentTitle: "Ayuda a mejorar SnapOtter",
consentDescription:
"Las estadísticas de uso anónimas nos ayudan a corregir errores y crear las herramientas que realmente necesitas. Tus archivos se quedan en tu red.",
consentChangeable: "Puedes desactivar esto en cualquier momento en Configuración.",
acceptButton: "Claro, me parece bien",
declineButton: "Ahora no",
settingsTitle: "Analítica del producto",
settingsDescription: "Comparte datos de uso anónimos para ayudar a mejorar SnapOtter.",
settingsPrivacy: "Tus archivos nunca salen de tu red.",
settingsDisabledByAdmin:
"La analítica del producto ha sido desactivada por el administrador del servidor.",
learnMore: "Más información",
},
sidebar: {
tools: "Herramientas",
grid: "Cuadrícula",
automate: "Automatizar",
editor: "Editor",
files: "Archivos",
help: "Ayuda",
settings: "Configuración",
},
toolCard: {
addToFavourites: "Agregar a favoritos",
},
appLayout: {
mobileNavTools: "Herramientas",
mobileNavAutomate: "Automatizar",
mobileNavEditor: "Editor",
mobileNavFiles: "Archivos",
mobileNavSettings: "Configuración",
},
a11y: {
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",
},
} as const;