Files
SnapOtter/packages/shared/src/i18n/es.ts
T

3459 lines
120 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: "Configuracion",
search: "Buscar herramientas...",
dropFiles: "Arrastra archivos aqui o haz clic en el boton de carga",
loading: "Cargando...",
saving: "Saving...",
error: "Ocurrio un error",
confirm: "Confirmar",
close: "Cerrar",
back: "Atras",
next: "Siguiente",
clear: "Limpiar",
copy: "Copiar",
copied: "Copiado!",
noResults: "No se encontraron resultados",
showLess: "Mostrar menos",
showMore: "Mostrar {count} mas",
experimental: "Experimental",
enabled: "Activado",
disabled: "Desactivado",
rename: "Renombrar",
edit: "Editar",
actions: "Acciones",
create: "Crear",
or: "o",
goHome: "Ir al inicio",
somethingWentWrong: "Algo salio mal",
unexpectedError: "Ocurrio un error inesperado.",
retry: "Reintentar",
privacyPolicy: "Politica de privacidad",
pageNotFound: "Page not found",
pageNotFoundDescription: "The page you are looking for does not exist or has been moved.",
},
categories: {
essentials: "Esenciales",
adjustments: "Ajustes",
enhance: "Enhance & AI",
watermark: "Marca de agua y superposicion",
layout: "Diseno y composicion",
utilities: "Utilidades",
optimization: "Optimizacion",
format: "Formato y conversion",
"video-edit": "Video",
"video-convert": "Convert",
"video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files",
archives: "Archives",
},
modalities: {
image: "Image",
video: "Video",
audio: "Audio",
documentsAndFiles: "Documents & Files",
},
tools: {
resize: {
name: "Redimensionar",
description: "Redimensiona por pixeles, 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 imagenes" },
convert: { name: "Convertir", description: "Convierte entre formatos de imagen" },
compress: {
name: "Comprimir",
description: "Reduce el tamano del archivo por calidad o tamano objetivo",
},
"optimize-for-web": {
name: "Optimizar para web",
description:
"Optimiza imagenes para web con conversion de formato, control de calidad y vista previa en vivo",
},
"strip-metadata": {
name: "Eliminar metadatos",
description: "Elimina EXIF, GPS e informacion de la camara",
},
"edit-metadata": {
name: "Editar metadatos",
description: "Edita EXIF, IPTC, XMP, GPS, palabras clave y fechas",
},
"bulk-rename": {
name: "Renombrado masivo",
description: "Renombra multiples archivos con patrones",
},
"image-to-pdf": {
name: "Imagen a PDF",
description: "Combina imagenes en un documento PDF",
},
"pdf-to-image": { name: "PDF a imagen", description: "Convierte paginas PDF a imagenes" },
favicon: {
name: "Generador de Favicon",
description: "Genera todos los tamanos de favicon e iconos de app",
},
"adjust-colors": {
name: "Ajustar colores",
description: "Brillo, contraste, exposicion, saturacion, temperatura, nitidez y efectos",
},
sharpening: {
name: "Enfoque",
description: "Enfoque adaptativo, mascara de desenfoque y paso alto con presets",
},
"replace-color": {
name: "Reemplazar e invertir color",
description: "Reemplaza colores especificos o invierte",
},
"color-blindness": {
name: "Simulacion de daltonismo",
description:
"Simula como se ven las imagenes con diferentes tipos de deficiencia de vision del color",
},
"remove-background": {
name: "Eliminar fondo",
description: "Eliminacion de fondo con AI",
},
upscale: { name: "Escalar imagen", description: "Mejora de super-resolucion con AI" },
"erase-object": {
name: "Borrador de objetos",
description: "Elimina objetos no deseados con AI",
},
ocr: {
name: "OCR / Extraccion de texto",
description: "Extrae texto de imagenes con precision 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 informacion sensible automaticamente",
},
"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 automatica con un clic: exposicion, contraste, color y nitidez inteligentes",
},
"noise-removal": {
name: "Eliminacion de ruido",
description: "Eliminacion de ruido y grano con AI",
},
"red-eye-removal": {
name: "Eliminacion de ojos rojos",
description: "Deteccion y correccion de ojos rojos con AI para fotos con flash",
},
"restore-photo": {
name: "Restauracion de fotos",
description: "Repara rasguños, roturas y daños en fotos antiguas con AI",
},
"content-aware-resize": {
name: "Redimension consciente del contenido",
description: "Redimensiona imagenes 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: "Colorizacion 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 identificacion que cumplen con los requisitos oficiales, con deteccion automatica de rostro",
},
"transcribe-audio": {
name: "Transcribir audio",
description: "Convierte voz a texto con transcripcion impulsada por IA",
},
"auto-subtitles": {
name: "Subtitulos automaticos",
description: "Genera archivos de subtitulos 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 solido",
},
"blur-background": {
name: "Desenfocar fondo",
description: "Desenfocar el fondo manteniendo el sujeto nitido",
},
"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 imagenes",
},
compose: {
name: "Composicion de imagen",
description: "Superpone imagenes con posicion y opacidad",
},
"meme-generator": {
name: "Generador de Meme",
description:
"Crea memes con plantillas populares o tus propias imagenes. Texto clasico estilo Impact con fuentes, colores y posicion personalizables.",
},
info: {
name: "Info de imagen",
description: "Ve todos los metadatos y propiedades de la imagen",
},
compare: { name: "Comparar imagenes", description: "Comparacion lado a lado de dos imagenes" },
"find-duplicates": {
name: "Buscar duplicados",
description: "Detecta imagenes duplicadas y casi duplicadas",
},
"color-palette": {
name: "Paleta de colores",
description: "Extrae los colores dominantes de una imagen",
},
"qr-generate": {
name: "Generador de codigos QR",
description: "Genera codigos QR con estilos, colores personalizados, patrones y logos",
},
"html-to-image": {
name: "HTML to Image",
description: "Capture webpages as high-quality images",
},
"barcode-read": {
name: "Lector de codigos de barras",
description: "Escanea imagenes en busca de codigos QR, codigos de barras y codigos 2D",
},
collage: {
name: "Collage / Cuadricula",
description: "Combina imagenes en hermosos collages con mas de 25 plantillas",
},
stitch: {
name: "Unir / Combinar",
description: "Une imagenes lado a lado, apiladas o en cuadricula",
},
split: {
name: "Dividir imagen",
description: "Divide imagenes en cuadricula o por tamano en pixeles 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 tamanos de redes sociales a capturas de pantalla",
},
"circle-crop": {
name: "Circle Crop",
description: "Crop image to a centered circle with transparent corners",
},
duotone: {
name: "Duotone",
description: "Apply a two-color duotone effect with custom shadow and highlight colors",
},
"image-pad": {
name: "Image Pad",
description: "Pad image to a target aspect ratio with a solid color background",
},
pixelate: {
name: "Pixelate",
description: "Apply a pixelation effect to the full image or a specific region",
},
vignette: {
name: "Vignette",
description: "Add a vignette effect with adjustable strength and color",
},
"gif-webp": {
name: "GIF/WebP Converter",
description: "Convert animated GIF to WebP and vice versa, preserving all frames",
},
histogram: {
name: "Histogram",
description: "Generate an RGB histogram chart from an image",
},
"lqip-placeholder": {
name: "LQIP Placeholder",
description: "Generate a tiny low-quality image placeholder with base64 data URI",
},
"sprite-sheet": {
name: "Sprite Sheet",
description: "Combine multiple images into a single sprite sheet grid",
},
"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 imagenes a graficos 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 imagenes a cadenas Base64 para incrustar en HTML, CSS y mas",
},
"barcode-generate": {
name: "Barcode Generator",
description: "Generate barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14, and Data Matrix",
},
"chart-maker": {
name: "Chart Maker",
description: "Create bar, line, or pie charts from CSV or JSON data",
},
"convert-video": {
name: "Convert Video",
description: "Convert videos between MP4, MOV, and WebM",
},
"compress-video": {
name: "Compress Video",
description: "Shrink video file size with quality control",
},
"trim-video": {
name: "Trim Video",
description: "Cut a clip out of a video",
},
"mute-video": {
name: "Mute Video",
description: "Remove the audio track from a video",
},
"video-to-gif": {
name: "Video to GIF",
description: "Turn a video clip into an animated GIF",
},
"resize-video": {
name: "Resize Video",
description: "Scale a video to a new resolution or preset size",
},
"crop-video": {
name: "Crop Video",
description: "Crop a region out of a video",
},
"rotate-video": {
name: "Rotate Video",
description: "Rotate or flip a video",
},
"change-fps": {
name: "Change FPS",
description: "Change the frame rate of a video",
},
"video-color": {
name: "Video Color",
description: "Adjust brightness, contrast, saturation, and gamma",
},
"video-speed": {
name: "Video Speed",
description: "Speed up or slow down a video",
},
"reverse-video": {
name: "Reverse Video",
description: "Play a video clip backwards",
},
"video-loudnorm": {
name: "Normalize Audio",
description: "Normalize video audio volume to broadcast standard",
},
"aspect-pad": {
name: "Aspect Pad",
description: "Add solid-color bars to fit a target aspect ratio",
},
"blur-pad": {
name: "Blur Pad",
description: "Fill bars with a blurred copy of the video",
},
"watermark-video": {
name: "Watermark Video",
description: "Burn a text watermark onto video frames",
},
"stabilize-video": {
name: "Stabilize Video",
description: "Reduce camera shake with two-pass stabilization",
},
"gif-to-video": {
name: "GIF to Video",
description: "Convert an animated GIF into an MP4 or WebM video",
},
"video-to-webp": {
name: "Video to WebP",
description: "Convert a video clip into an animated WebP image",
},
"video-to-frames": {
name: "Video to Frames",
description: "Extract frames from a video as a ZIP of images",
},
"merge-videos": {
name: "Merge Videos",
description: "Join multiple video clips into one file",
},
"replace-audio": {
name: "Replace Audio",
description: "Swap the audio track of a video with another file",
},
"burn-subtitles": {
name: "Burn Subtitles",
description: "Permanently render subtitles onto video frames",
},
"embed-subtitles": {
name: "Embed Subtitles",
description: "Mux a subtitle track into the video container",
},
"extract-subtitles": {
name: "Extract Subtitles",
description: "Pull the subtitle track out of a video as an SRT file",
},
"images-to-video": {
name: "Images to Video",
description: "Turn a set of images into a slideshow video",
},
"video-metadata": {
name: "Clean Video Metadata",
description: "Strip metadata from a video and report what was found",
},
"convert-audio": {
name: "Convert Audio",
description: "Convert audio between MP3, WAV, OGG, and more",
},
"trim-audio": {
name: "Trim Audio",
description: "Cut a section out of an audio file",
},
"extract-audio": {
name: "Extract Audio",
description: "Pull the audio track out of a video",
},
"volume-adjust": {
name: "Volume Adjust",
description: "Increase or decrease audio volume by a fixed gain",
},
"normalize-audio": {
name: "Normalize Audio",
description: "Even out loudness to broadcast standard levels",
},
"fade-audio": {
name: "Fade Audio",
description: "Add fade-in and fade-out effects to audio",
},
"reverse-audio": {
name: "Reverse Audio",
description: "Play audio backwards",
},
"audio-speed": {
name: "Audio Speed",
description: "Speed up or slow down audio playback",
},
"pitch-shift": {
name: "Pitch Shift",
description: "Raise or lower pitch by semitones without changing speed",
},
"audio-channels": {
name: "Audio Channels",
description: "Convert between mono, stereo, or swap left and right channels",
},
"silence-removal": {
name: "Silence Removal",
description: "Strip silent sections from audio",
},
"noise-reduction": {
name: "Noise Reduction",
description: "Reduce background noise with FFT-based denoising",
},
"merge-audio": {
name: "Merge Audio",
description: "Combine multiple audio files into one",
},
"split-audio": {
name: "Split Audio",
description: "Split audio by time, equal parts, or silence detection",
},
"ringtone-maker": {
name: "Ringtone Maker",
description: "Create a ringtone clip from any audio file",
},
"waveform-image": {
name: "Waveform Image",
description: "Generate a waveform visualization as a PNG image",
},
"audio-metadata": {
name: "Audio Metadata",
description: "View, edit, or strip audio tags (ID3)",
},
"merge-pdf": {
name: "Merge PDFs",
description: "Combine multiple PDFs into one",
},
"split-pdf": {
name: "Split PDF",
description: "Extract pages or split into parts",
},
"compress-pdf": {
name: "Compress PDF",
description: "Shrink PDF file size",
},
"rotate-pdf": {
name: "Rotate PDF",
description: "Rotate pages in a PDF",
},
"convert-document": {
name: "Convert Document",
description: "Convert between Word, OpenDocument, RTF, and plain text formats",
},
"convert-presentation": {
name: "Convert Presentation",
description: "Convert between PowerPoint and OpenDocument presentation formats",
},
"convert-spreadsheet": {
name: "Convert Spreadsheet",
description:
"Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.",
},
"excel-to-pdf": {
name: "Excel to PDF",
description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.",
},
"word-to-pdf": {
name: "Word to PDF",
description: "Convert Word documents to PDF",
},
"extract-pages": {
name: "Extract Pages",
description: "Pull selected pages into a new PDF",
},
"remove-pages": {
name: "Remove Pages",
description: "Delete specific pages from a PDF",
},
"organize-pdf": {
name: "Organize PDF",
description: "Reorder pages with an explicit page order",
},
"protect-pdf": {
name: "Protect PDF",
description: "Add password protection (AES-256 encryption)",
},
"unlock-pdf": {
name: "Unlock PDF",
description: "Remove password protection from a PDF",
},
"repair-pdf": {
name: "Repair PDF",
description: "Attempt to repair a damaged or corrupted PDF",
},
"linearize-pdf": {
name: "Web-Optimize PDF",
description: "Linearize a PDF for fast web viewing",
},
"grayscale-pdf": {
name: "Grayscale PDF",
description: "Convert all colors to grayscale",
},
"pdfa-convert": {
name: "PDF/A Convert",
description: "Convert to archival PDF/A-2",
},
"crop-pdf": {
name: "Crop PDF",
description: "Crop all pages with a uniform margin",
},
"nup-pdf": {
name: "N-up PDF",
description: "Arrange multiple pages per sheet",
},
"booklet-pdf": {
name: "Booklet PDF",
description: "Arrange pages for folding into a booklet",
},
"watermark-pdf": {
name: "Watermark PDF",
description: "Add a text watermark to every page",
},
"pdf-page-numbers": {
name: "PDF Page Numbers",
description: "Add page numbers to every page",
},
"flatten-pdf": {
name: "Flatten PDF",
description: "Bake forms and annotations into page content",
},
"redact-pdf": {
name: "Redact PDF",
description: "Permanently remove text occurrences (verified true redaction)",
},
"pdf-to-text": {
name: "PDF to Text",
description: "Extract plain text from a PDF",
},
"pdf-to-word": {
name: "PDF to Word",
description: "Best for text-based PDFs; scanned pages need OCR",
},
"pdf-metadata": {
name: "PDF Metadata",
description: "Read and write PDF document metadata",
},
"powerpoint-to-pdf": {
name: "PowerPoint to PDF",
description: "Convert presentations to PDF",
},
"html-to-pdf": {
name: "HTML to PDF",
description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.",
},
"markdown-to-docx": {
name: "Markdown to Word",
description: "Convert a Markdown file to a Word document (DOCX)",
},
"markdown-to-html": {
name: "Markdown to HTML",
description:
"Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.",
},
"markdown-to-pdf": {
name: "Markdown to PDF",
description:
"Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.",
},
"epub-convert": {
name: "Convert EPUB",
description:
"Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.",
},
"to-epub": {
name: "Convert to EPUB",
description: "Convert Word, Markdown, HTML, or plain text files to EPUB",
},
"csv-excel": {
name: "CSV to Excel",
description: "Convert between CSV and Excel (XLSX), both directions",
},
"csv-json": {
name: "CSV to JSON",
description: "Convert between CSV and JSON, both directions",
},
"json-xml": {
name: "JSON to XML",
description: "Convert between JSON and XML, both directions",
},
"split-csv": {
name: "Split CSV",
description: "Split a CSV into smaller files by row count",
},
"merge-csvs": {
name: "Merge CSVs",
description: "Combine multiple CSV or TSV files with matching columns into one",
},
"yaml-json": {
name: "YAML / JSON",
description: "Convert between YAML and JSON, both directions",
},
"xml-to-csv": {
name: "XML to CSV",
description: "Extract repeating elements from XML into a CSV table",
},
"create-zip": {
name: "Create ZIP",
description: "Bundle multiple files into a single ZIP archive",
},
"extract-zip": {
name: "Extract ZIP",
description:
"Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.",
},
pipeline: {
name: "Constructor de Pipeline",
description: "Encadena multiples herramientas en un flujo de trabajo",
},
processing: { canceled: "Processing canceled" },
mediaPlayer: {
unsupported: "Your browser does not support this media format.",
},
documentView: {
loadFailed: "Failed to load document.",
previousPage: "Previous page",
nextPage: "Next page",
},
},
toolSettings: {
compress: {
compressionMode: "Modo de compresion",
targetSize: "Tamano objetivo",
quality: "Calidad",
smallestFile: "Archivo mas pequeno",
bestQuality: "Mejor calidad",
submit: "Comprimir",
submitBatch: "Comprimir ({count} archivos)",
progressLabel: "Comprimiendo",
original: "Original: {size} KB",
processed: "Procesado: {size} KB",
saved: "Ahorro: {percent}%",
},
resize: {
customSize: "Tamano personalizado",
scale: "Escala",
presets: "Presets",
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 tamano original",
limitToOriginalSizeHint:
"Si tu imagen ya es mas pequena que el objetivo, se mantiene como esta 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: "Relacion de aspecto",
custom: "Personalizado",
positionAndSize: "Posicion y tamano",
ruleOfThirds: "Regla de tercios",
leftOffsetPx: "Desplazamiento izquierdo (px)",
topOffsetPx: "Desplazamiento superior (px)",
submit: "Recortar",
submitBatch: "Recortar ({count} archivos)",
progressLabel: "Recortando",
},
rotate: {
rotate: "Rotar",
angle: "Angulo",
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 mas pequeno",
bestQuality: "Mejor calidad",
maxDimensions: "Dimensiones maximas",
maxWidth: "Ancho maximo",
maxHeight: "Alto maximo",
stripMetadata: "Eliminar metadatos",
sizeComparison: "Comparacion de tamano",
optimized: "Optimizado:",
smaller: "{percent}% mas pequeno",
larger: "{percent}% mas 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 especificos:",
stripExif: "Eliminar EXIF (info de camara, fecha, exposicion)",
stripGps: "Eliminar GPS (datos de ubicacion)",
stripIcc: "Eliminar ICC (perfil de color)",
stripXmp: "Eliminar XMP (metadatos extensibles)",
locationFound: "ubicacion encontrada",
locationWarning:
"Esta imagen contiene tu ubicacion precisa. Considera eliminar los datos GPS antes de compartirla.",
metadataSections: "{count} seccion 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 comenzaran vacios.",
basicInfo: "Informacion basica",
description: "Descripcion",
artist: "Artista",
copyright: "Copyright",
software: "Software",
iptc: "IPTC",
title: "Titulo",
headline: "Titular",
city: "Ciudad",
stateProvince: "Estado/Provincia",
country: "Pais",
dateAndTime: "Fecha y hora",
editDates: "Editar fechas",
shiftAllDates: "Ajustar todas las fechas",
dateModified: "Fecha de modificacion",
dateTaken: "Fecha de captura",
shiftHint:
"Ajusta todos los campos de fecha con un desfase (util para correcciones de zona horaria)",
direction: "Direccion",
forward: "+ Adelante",
backward: "- Atras",
hoursMinutes: "Horas:Minutos",
locationGps: "Ubicacion (GPS)",
locationDataFound: "Datos de ubicacion 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: "Patron",
patternHint: "Variables: {{index}}, {{padded}}, {{original}}",
startIndex: "Indice inicial",
preview: "Vista previa",
andMore: "... y {count} mas",
renaming: "Renombrando...",
submit: "Renombrar {count} archivos",
zipDownloaded: "ZIP descargado correctamente",
},
"image-to-pdf": {
imageCount: "{count} imagen se convertira a {mode}",
imageCountPlural: "{count} imagenes se convertiran a {mode}",
singlePdfMode: "un solo PDF, una imagen por pagina",
separatePdfMode: "PDFs separados, uno por imagen",
combineAllImages: "Combinar todas las imagenes en un PDF",
pageSize: "Tamano de pagina",
orientation: "Orientacion",
portrait: "Vertical",
landscape: "Horizontal",
margin: "Margen",
targetSizeLabel: "Tamano de archivo objetivo (opcional)",
targetSizePlaceholder: "ej. 2",
targetSizeHint: "Dejar vacio para calidad maxima",
targetSizeMet: "Objetivo alcanzado",
targetSizeNotMet: "No se pudo alcanzar el objetivo. Archivo comprimido a calidad minima.",
targetSizeTooSmall: "El objetivo debe ser al menos 50KB",
jpegQualityLabel: "Calidad JPEG utilizada",
noImage: "Sin imagen",
submitCollate: "Crear PDF ({count} paginas)",
submitSeparate: "Crear {count} PDFs",
downloadPdf: "Descargar PDF",
downloadZip: "Descargar ZIP",
progressLabel: "Creando PDF",
uploadingImages: "Subiendo imagenes...",
processingPages: "Procesando {count} paginas...",
},
"pdf-to-image": {
dropPdf: "Arrastra un PDF aqui o haz clic para seleccionar",
readingPdf: "Leyendo PDF...",
pageCount: "{count} pagina",
pageCountPlural: "{count} paginas",
outputFormat: "Formato de salida",
quality: "Calidad",
resolutionDpi: "Resolucion (DPI)",
dpiScreen: "Pantalla",
dpiStandard: "Estandar",
dpiPrint: "Impresion",
dpiHighQuality: "Alta calidad",
colorMode: "Modo de color",
colorModeColor: "Color",
colorModeGrayscale: "Escala de grises",
colorModeBw: "B&N",
pages: "Paginas",
allPages: "Todas las paginas",
pagesHint: "ej. 1-3, 5, 8-10 (el documento tiene {count} paginas)",
converting: "Convirtiendo...",
submit: "Convertir {count} pagina",
submitPlural: "Convertir {count} paginas",
downloadAllZip: "Descargar todo (ZIP)",
},
favicon: {
uploadHint:
"Sube imagenes cuadradas (se recomienda 512x512 o mayor) para generar todos los tamanos de favicon e iconos de app.",
multipleHint: "Cada una de las {count} imagenes obtiene su propia carpeta en el ZIP.",
generatedSizes: "Tamanos generados (por imagen)",
plusManifest: "+ manifest.json + fragmento HTML",
submit: "Generar Favicons ({count} imagen)",
submitPlural: "Generar Favicons ({count} imagenes)",
downloadZip: "Descargar ZIP de Favicons",
progressLabel: "Generando Favicons",
},
"adjust-colors": {
light: "Luz",
brightness: "Brillo",
contrast: "Contraste",
exposure: "Exposicion",
color: "Color",
saturation: "Saturacion",
temperature: "Temperatura",
temperatureHint: "frio / calido",
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: "Metodo",
adaptive: "Adaptativo",
unsharpMask: "Mascara de desenfoque",
highPass: "Paso alto",
presets: "Presets",
textureAmount: "Cantidad de textura",
amount: "Cantidad",
strength: "Intensidad",
noiseReduction: "Reduccion de ruido",
off: "desactivado",
lightDenoise: "ligero",
mediumDenoise: "medio",
strongDenoise: "fuerte",
advancedControls: "Controles avanzados",
radius: "Radio",
flatProtection: "Proteccion de areas planas",
detailThreshold: "Umbral de detalle",
haloLimitLight: "Limite de halo (claro)",
haloLimitDark: "Limite de halo (oscuro)",
threshold: "Umbral",
kernelSize: "Tamano 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 simulacion",
redGreen: "Rojo-Verde",
blueYellow: "Azul-Amarillo",
monochromatic: "Monocromatico",
submit: "Simular",
submitBatch: "Simular ({count} archivos)",
progressLabel: "Simulando daltonismo",
},
"remove-background": {
subject: "Sujeto",
people: "Personas",
products: "Productos",
general: "General",
passportIdPhoto: "Foto de pasaporte / identificacion",
quality: "Calidad",
fast: "Rapido",
hd: "HD",
max: "Max",
ultra: "Ultra",
background: "Fondo",
transparent: "Transparente",
bgColor: "Color",
gradient: "Degradado",
image: "Imagen",
gradientDirection: "Direccion",
chooseBackgroundImage: "Elegir imagen de fondo",
effectsSection: "Efectos",
effectsActive: "activos",
blurBackground: "Desenfocar fondo",
intensity: "Intensidad",
addShadow: "Agregar sombra",
opacity: "Opacidad",
outputFormat: "Output Format",
edgeSmoothing: "Edge Smoothing",
edgeSmoothingOff: "Off",
edgeSmoothingLight: "Light",
edgeSmoothingMedium: "Medium",
edgeSmoothingStrong: "Strong",
colorDecontamination: "Color Decontamination",
rendering: "Renderizando...",
submit: "Eliminar fondo",
submitBatch: "Eliminar fondo ({count} archivos)",
progressLabel: "Eliminando fondo",
},
upscale: {
scaleFactor: "Factor de escala",
quality: "Calidad",
enhanceFaces: "Mejorar rostros",
noiseReduction: "Reduccion de ruido",
noiseReductionHint:
"Suaviza el grano y el ruido. Valores mas altos eliminan mas 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} imagenes",
},
"erase-object": {
brushSize: "Tamano 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 automaticamente antes del escaneo para mayor precision.",
language: "Idioma",
autoDetect: "Deteccion automatica",
extractedText: "Texto extraido",
noTextDetected: "No se detecto 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 automaticamente",
pages: "Paginas",
pagesPlaceholder: "all, 1-3, 5",
pagesHint: "Ingrese numeros de pagina o rangos (ej. 1-3, 5, 8-10). Maximo 50 paginas.",
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 deteccion",
moreFaces: "Mas 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 deteccion",
submit: "Mejorar rostros",
submitBatch: "Mejorar rostros ({count} archivos)",
progressLabel: "Mejorando rostros",
},
"smart-crop": {
subjectFocus: "Enfoque en sujeto",
faceFocus: "Enfoque en rostro",
autoTrim: "Recorte automatico",
customSize: "Tamano personalizado",
socialPresets: "Presets de redes sociales",
detectionStrategy: "Estrategia de deteccion",
detectionStrategyHint:
"Atencion encuentra la region visualmente mas relevante. Entropia encuentra el area con mas detalle e informacion.",
attention: "Atencion",
entropy: "Entropia",
padding: "Relleno",
paddingHint: "Espacio extra alrededor del area de enfoque",
outputQuality: "Calidad de salida",
outputQualityHint: "Para salidas JPEG y WebP. PNG siempre es sin perdida.",
subjectDescription:
"Detecta la region mas interesante usando analisis de relevancia y recorta al tamano deseado.",
framing: "Encuadre",
facePadding: "Espacio alrededor del rostro",
facePaddingHint: "Espacio extra alrededor de los rostros detectados",
fewerFalsePositives: "Menos falsos positivos",
faceDescription:
"Usa deteccion facial con AI para mantener los rostros bien encuadrados. Si no se detectan rostros, usa el enfoque en sujeto.",
trimTolerance: "Tolerancia",
trimDescription:
"Que tan diferente puede ser un pixel del borde respecto al color del borde y aun asi ser recortado. Mayor = mas agresivo.",
padToSquare: "Rellenar a cuadrado",
targetSizePx: "Tamano objetivo (px)",
padColor: "Color de relleno",
trimHint:
'Elimina bordes de color uniforme alrededor del sujeto. Activa "Rellenar a cuadrado" para imagenes listas para e-commerce.',
submitSubject: "Recorte inteligente",
submitFace: "Recorte facial",
submitTrim: "Recortar bordes",
},
imageEnhancement: {
enhancementMode: "Modo de mejora",
auto: "Automatico",
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 exposicion",
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} imagenes",
},
"noise-removal": {
denoisingTier: "Nivel de eliminacion de ruido",
quick: "Rapido",
balanced: "Equilibrado",
quality: "Calidad",
maximum: "Maximo",
quickDesc: "Rapido y ligero",
balancedDesc: "Buena calidad, velocidad moderada",
qualityDesc: "Con AI, lento",
maximumDesc: "Mejor modelo AI, mas lento",
strength: "Intensidad",
subtle: "Sutil",
aggressive: "Agresivo",
detailPreservation: "Preservacion de detalles",
smooth: "Suave",
sharp: "Nitido",
colorNoise: "Ruido de color",
heavy: "Intenso",
outputFormat: "Formato de salida",
gifAiWarning:
"La eliminacion de ruido con AI en archivos GIF procesa solo el primer fotograma. Para GIFs animados, usa el nivel Rapido o Equilibrado.",
submit: "Eliminar ruido",
submitBatch: "Eliminar ruido ({count} archivos)",
progressLabel: "Eliminando ruido",
progressLabelBatch: "Eliminando ruido de {count} imagenes",
},
"red-eye-removal": {
sensitivity: "Sensibilidad",
strict: "Estricta",
aggressive: "Agresiva",
correctionStrength: "Intensidad de correccion",
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} imagenes",
},
"restore-photo": {
scratchRemoval: "Eliminacion 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: "Reduccion de ruido",
noiseReductionDesc: "Elimina grano y ruido de fotos antiguas",
denoiseStrength: "Intensidad del eliminador de ruido",
autoColorize: "Colorizar automaticamente",
autoColorizeDesc: "Agrega color a fotos en B&N usando DDColor AI",
colorizeStrength: "Intensidad de colorizacion",
vivid: "Vivido",
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 areas de rostros de la eliminacion de costuras usando deteccion 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: "Rapido",
balanced: "Equilibrado",
highQuality: "Alta calidad",
fastDesc: "Vista previa rapida, menos pasadas de AI",
balancedDesc: "Buena calidad, velocidad moderada",
highQualityDesc: "Mejores resultados, mas lento",
extendToAspectRatio: "Extender a relacion de aspecto",
extendByPixels: "Extender por (pixeles)",
top: "Arriba",
right: "Derecha",
bottom: "Abajo",
left: "Izquierda",
newSize: "Nuevo tamano: {width} x {height}",
submit: "Extender lienzo",
submitBatch: "Extender ({count} archivos)",
progressLabel: "Extendiendo lienzo",
},
colorize: {
aiModel: "Modelo AI",
fast: "Rapido",
fastDesc: "Resultados rapidos",
balanced: "Equilibrado",
balancedDesc: "El mejor disponible",
best: "Mejor",
bestDesc: "La mas alta calidad",
colorIntensity: "Intensidad de color",
grayscaleLabel: "Escala de grises",
subtleLabel: "Sutil",
naturalLabel: "Natural",
vividLabel: "Vivido",
intensityHint: "Valores mas bajos producen colores mas apagados, estilo vintage.",
strength: "Intensidad de colorizacion",
submit: "Colorizar",
submitBatch: "Colorizar ({count} archivos)",
progressLabel: "Colorizando",
progressLabelBatch: "Colorizando {count} imagenes",
},
"passport-photo": {
country: "Pais",
searchCountries: "Buscar paises...",
noCountriesFound: "No se encontraron paises",
customDimensions: "Dimensiones personalizadas",
documentType: "Tipo de documento",
dimensionsMm: "Dimensiones (mm)",
dpi: "DPI",
pixelsPerInch: "pixeles por pulgada",
backgroundColor: "Color de fondo",
maxFileSize: "Tamano maximo de archivo",
noLimit: "Sin limite",
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: "Tamano del rostro",
whatYouSee: "Lo que ves es lo que descargas",
dragToAdjust: "Arrastra para ajustar",
scrollToZoom: "Desplaza para hacer zoom",
photoGenerated: "Foto generada. Descargala desde el panel izquierdo.",
},
"transcribe-audio": {
language: "Idioma",
autoDetect: "Deteccion automatica",
outputFormat: "Formato de salida",
plainText: "Texto plano",
submit: "Transcribir",
submitBatch: "Transcribir ({count} archivos)",
progressLabel: "Transcribiendo audio",
},
"auto-subtitles": {
language: "Idioma",
autoDetect: "Deteccion automatica",
format: "Formato de subtitulos",
submit: "Generar subtitulos",
submitBatch: "Generar subtitulos ({count} archivos)",
progressLabel: "Generando subtitulos",
},
"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: "Tamano de fuente",
color: "Color",
opacity: "Opacidad",
position: "Posicion",
rotation: "Rotacion",
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: "Posicion",
opacity: "Opacidad",
scale: "Escala",
submit: "Aplicar marca de agua",
submitBatch: "Aplicar marca de agua ({count} archivos)",
},
"text-overlay": {
text: "Texto",
fontSize: "Tamano de fuente",
color: "Color",
position: "Posicion",
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: "Download",
defaultText: "Your Text Here",
},
compose: {
uploadOverlay: "Subir imagen de superposicion",
xPosition: "Posicion X",
yPosition: "Posicion Y",
opacity: "Opacidad",
blendMode: "Modo de mezcla",
submit: "Componer",
},
"meme-generator": {
selectTemplate:
"Selecciona una plantilla de la galeria o sube tu propia imagen para comenzar.",
chooseLayout: "Elige un diseno de texto para tu imagen personalizada.",
textContent: "Contenido del texto",
textStyle: "Estilo del texto",
font: "Fuente",
fontSize: "Tamano de fuente",
textColor: "Color del texto",
strokeColor: "Color del borde",
allCaps: "MAYUSCULAS",
generate: "Generar Meme",
generating: "Generando...",
downloadMeme: "Descargar Meme",
backToGallery: "Volver a la galeria",
},
info: {
loadingInfo: "Cargando informacion...",
filename: "Nombre de archivo",
fileSize: "Tamano de archivo",
dimensions: "Dimensiones",
format: "Formato",
channels: "Canales",
colorSpace: "Espacio de color",
density: "Densidad",
bitDepth: "Profundidad de bits",
progressive: "Progresivo",
pages: "Paginas",
hasAlpha: "Tiene alfa",
hasProfile: "Tiene perfil",
hasExif: "Tiene EXIF",
hasIcc: "Tiene ICC",
hasXmp: "Tiene XMP",
readInfo: "Read Info",
reading: "Reading...",
channelStats: "Channel Stats",
yes: "Yes",
no: "No",
na: "N/A",
failedToRead: "Failed to read info",
},
compare: {
uploadSecondImage: "Subir segunda imagen",
similarity: "Similitud: {percent}%",
submit: "Comparar",
downloadDiff: "Descargar diferencia",
},
"find-duplicates": {
preset: "Preset",
exact: "Exacto",
similar: "Similar",
loose: "Amplio",
exactDesc: "Copias identicas pixel por pixel, misma imagen en diferentes formatos.",
similarDesc: "Copias redimensionadas, recomprimidas o con ediciones leves.",
looseDesc: "Imagenes 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: "Email",
phone: "Telefono",
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 codigo QR",
download: "Descargar codigo QR",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "HTML File",
htmlFile: "HTML File",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "Output Format",
quality: "Quality",
devicePreset: "Device",
viewportWidth: "Width",
viewportHeight: "Height",
fullPage: "Full Page",
submit: "Capture",
download: "Download Screenshot",
capturing: "Capturing webpage...",
errorTimeout: "Page took too long to load",
errorBlocked: "This URL cannot be captured",
errorUnavailable: "Screenshot service is not available",
errorFailed: "Failed to capture the page",
placeholder: "Enter a URL and click Capture",
presets: {
desktop: "Desktop",
tablet: "Tablet",
mobile: "Mobile",
custom: "Custom",
},
},
"barcode-read": {
submit: "Escanear codigos de barras",
submitBatch: "Escanear ({count} archivos)",
scanning: "Escaneando...",
noBarcodesFound: "No se encontraron codigos de barras",
barcodesFound: "{count} codigo de barras encontrado",
barcodesFoundPlural: "{count} codigos de barras encontrados",
},
collage: {
template: "Plantilla",
aspectRatio: "Relacion 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: "Direccion",
horizontal: "Horizontal",
vertical: "Vertical",
grid: "Cuadricula",
gridColumns: "Columnas de cuadricula",
resizeMode: "Modo de redimension",
fit: "Ajustar",
original: "Original",
stretchMode: "Estirar",
cropMode: "Recortar",
alignment: "Alineacion",
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 imagenes",
},
split: {
modeGrid: "Cuadricula",
modeTileSize: "Tamano de mosaico",
presets: "Presets",
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: "Presets",
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: "Preset",
backgroundType: "Tipo de fondo",
solidColor: "Color solido",
linearGradient: "Degradado lineal",
radialGradient: "Degradado radial",
customImage: "Imagen personalizada",
gradientAngle: "Angulo 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: "Circle Crop",
submitBatch: "Circle Crop ({count} files)",
progressLabel: "Cropping to circle",
},
duotone: {
shadow: "Shadow Color",
highlight: "Highlight Color",
submit: "Apply Duotone",
submitBatch: "Apply Duotone ({count} files)",
progressLabel: "Applying duotone",
},
"image-pad": {
target: "Target Ratio",
color: "Background Color",
submit: "Pad Image",
submitBatch: "Pad Image ({count} files)",
progressLabel: "Padding image",
},
pixelate: {
blockSize: "Block Size",
submit: "Pixelate",
submitBatch: "Pixelate ({count} files)",
progressLabel: "Pixelating",
},
vignette: {
strength: "Strength",
color: "Vignette Color",
submit: "Apply Vignette",
submitBatch: "Apply Vignette ({count} files)",
progressLabel: "Applying vignette",
},
"gif-webp": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting animation",
},
histogram: {
submit: "Generate Histogram",
submitBatch: "Generate Histogram ({count} files)",
progressLabel: "Generating histogram",
},
"lqip-placeholder": {
width: "Width",
blur: "Blur",
submit: "Generate Placeholder",
submitBatch: "Generate Placeholder ({count} files)",
progressLabel: "Generating placeholder",
},
"sprite-sheet": {
columns: "Columns",
padding: "Padding",
background: "Background Color",
submit: "Create Sprite Sheet",
submitBatch: "Create Sprite Sheet",
progressLabel: "Creating sprite sheet",
},
"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: "Preset",
logo: "Logo",
illustration: "Ilustracion",
photo: "Foto",
sketch: "Boceto",
customPreset: "Personalizado",
colorMode: "Modo de color",
bw: "B&N",
colorModeColor: "Color",
threshold: "Umbral",
colorPrecision: "Precision 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: "Pixel",
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: "Numero 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 maximo",
maxHeight: "Alto maximo",
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: "Text",
type: "Barcode Type",
scale: "Scale",
includeText: "Include Text",
submit: "Generate Barcode",
download: "Download Barcode",
},
"chart-maker": {
kind: "Chart Type",
title: "Title",
width: "Width",
height: "Height",
submit: "Create Chart",
submitBatch: "Create Chart ({count} files)",
progressLabel: "Creating chart",
},
"enhance-faces-standalone": {
model: "Modelo",
fast: "Rapido",
balanced: "Equilibrado",
best: "Mejor",
},
"convert-video": {
format: "Output format",
quality: "Quality",
high: "High",
balanced: "Balanced",
small: "Smallest",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"compress-video": {
quality: "Compression",
light: "Light",
balanced: "Balanced",
strong: "Strong",
resolution: "Resolution",
original: "Original",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"trim-video": {
start: "Start (seconds)",
end: "End (seconds)",
precise: "Frame-accurate (re-encodes)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"mute-video": {
submit: "Remove audio",
submitBatch: "Remove audio ({count} files)",
progressLabel: "Muting",
},
"video-to-gif": {
fps: "Frames per second",
width: "Width (px)",
start: "Start (seconds)",
duration: "Duration (seconds)",
submit: "Create GIF",
submitBatch: "Create GIFs ({count} files)",
progressLabel: "Creating GIF",
},
"resize-video": {
preset: "Preset",
width: "Width (px)",
height: "Height (px)",
hint: "Leave one dimension empty to keep aspect ratio",
submit: "Resize",
submitBatch: "Resize ({count} files)",
progressLabel: "Resizing",
},
"crop-video": {
width: "Width (px)",
height: "Height (px)",
x: "X offset",
y: "Y offset",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"rotate-video": {
transform: "Transform",
cw90: "Rotate 90 clockwise",
ccw90: "Rotate 90 counter-clockwise",
rotate180: "Rotate 180",
hflip: "Flip horizontal",
vflip: "Flip vertical",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"change-fps": {
fps: "Frames per second",
submit: "Change FPS",
submitBatch: "Change FPS ({count} files)",
progressLabel: "Changing FPS",
},
"video-color": {
brightness: "Brightness",
contrast: "Contrast",
saturation: "Saturation",
gamma: "Gamma",
submit: "Apply",
submitBatch: "Apply ({count} files)",
progressLabel: "Adjusting color",
},
"video-speed": {
factor: "Speed factor",
keepPitch: "Keep original pitch",
submit: "Change speed",
submitBatch: "Change speed ({count} files)",
progressLabel: "Changing speed",
},
"reverse-video": {
hint: "Limited to clips up to 5 minutes",
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"video-loudnorm": {
hint: "Normalizes audio to EBU R128 broadcast standard",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"aspect-pad": {
target: "Target ratio",
color: "Background color",
colorHint: "Hex color, e.g. #000000",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"blur-pad": {
target: "Target ratio",
blur: "Blur strength",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"watermark-video": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
color: "Color",
colorHint: "Hex color, e.g. #ffffff",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"stabilize-video": {
smoothing: "Smoothing",
hint: "Runs two passes and takes longer than most tools",
submit: "Stabilize",
submitBatch: "Stabilize ({count} files)",
progressLabel: "Stabilizing",
},
"gif-to-video": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-webp": {
fps: "Frames per second",
width: "Width (px)",
quality: "Quality",
loop: "Loop animation",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-frames": {
mode: "Extraction mode",
modeAll: "All frames",
modeNth: "Every Nth frame",
modeTimestamps: "Specific timestamps",
n: "Take every Nth frame",
timestamps: "Timestamps (seconds)",
timestampsHint: "Comma-separated, e.g. 0.5, 2, 4.5",
format: "Image format",
submit: "Extract Frames",
submitBatch: "Extract Frames ({count} files)",
progressLabel: "Extracting frames",
},
"merge-videos": {
hint: "Files are joined in upload order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"replace-audio": {
hint: "Upload the video first, then the audio",
submit: "Replace Audio",
submitBatch: "Replace Audio ({count} files)",
progressLabel: "Replacing audio",
},
"burn-subtitles": {
fontSize: "Font size",
hint: "Upload a video and a subtitle file (.srt or .vtt)",
submit: "Burn Subtitles",
submitBatch: "Burn Subtitles ({count} files)",
progressLabel: "Burning subtitles",
},
"embed-subtitles": {
language: "Language code",
languageHint: "Three-letter ISO 639-2 code, e.g. eng, spa, fra",
submit: "Embed Subtitles",
submitBatch: "Embed Subtitles ({count} files)",
progressLabel: "Embedding subtitles",
},
"extract-subtitles": {
submit: "Extract Subtitles",
submitBatch: "Extract Subtitles ({count} files)",
progressLabel: "Extracting subtitles",
},
"images-to-video": {
secondsPerImage: "Seconds per image",
resolution: "Resolution",
fps: "Frames per second",
submit: "Create Video",
submitBatch: "Create Video ({count} files)",
progressLabel: "Creating slideshow",
},
"video-metadata": {
hint: "Metadata report appears in the result",
submit: "Strip Metadata",
submitBatch: "Strip Metadata ({count} files)",
progressLabel: "Stripping metadata",
},
"convert-audio": {
format: "Output format",
bitrate: "Bitrate (kbps)",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"trim-audio": {
start: "Start (seconds)",
end: "End (seconds)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"extract-audio": {
format: "Output format",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"volume-adjust": {
"gain-db": "Gain (dB)",
submit: "Adjust Volume",
submitBatch: "Adjust Volume ({count} files)",
progressLabel: "Adjusting volume",
},
"normalize-audio": {
hint: "EBU R128 loudness normalization",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"fade-audio": {
"fade-in-s": "Fade in (seconds)",
"fade-out-s": "Fade out (seconds)",
submit: "Apply Fade",
submitBatch: "Apply Fade ({count} files)",
progressLabel: "Applying fade",
},
"reverse-audio": {
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"audio-speed": {
factor: "Speed factor",
submit: "Change Speed",
submitBatch: "Change Speed ({count} files)",
progressLabel: "Changing speed",
},
"pitch-shift": {
semitones: "Semitones",
hint: "0 semitones is not allowed",
submit: "Shift Pitch",
submitBatch: "Shift Pitch ({count} files)",
progressLabel: "Shifting pitch",
},
"audio-channels": {
mode: "Channel mode",
"stereo-to-mono": "Stereo to mono",
"mono-to-stereo": "Mono to stereo",
swap: "Swap left/right",
submit: "Convert Channels",
submitBatch: "Convert Channels ({count} files)",
progressLabel: "Converting channels",
},
"silence-removal": {
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Remove Silence",
submitBatch: "Remove Silence ({count} files)",
progressLabel: "Removing silence",
},
"noise-reduction": {
strength: "Strength",
light: "Light",
medium: "Medium",
strong: "Strong",
submit: "Reduce Noise",
submitBatch: "Reduce Noise ({count} files)",
progressLabel: "Reducing noise",
},
"merge-audio": {
format: "Output format",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "Files will be joined in upload order",
submit: "Merge Audio",
submitBatch: "Merge Audio ({count} files)",
progressLabel: "Merging audio",
},
"split-audio": {
mode: "Split mode",
time: "By time",
parts: "Equal parts",
silence: "By silence",
"segment-s": "Segment length (seconds)",
"num-parts": "Number of parts",
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Split Audio",
submitBatch: "Split Audio ({count} files)",
progressLabel: "Splitting audio",
},
"ringtone-maker": {
"start-s": "Start time (seconds)",
"duration-s": "Duration (seconds)",
"max-hint": "Maximum 30 seconds",
submit: "Create Ringtone",
submitBatch: "Create Ringtone ({count} files)",
progressLabel: "Creating ringtone",
},
"waveform-image": {
width: "Width (px)",
height: "Height (px)",
color: "Waveform color",
submit: "Generate Waveform",
submitBatch: "Generate Waveform ({count} files)",
progressLabel: "Generating waveform",
},
"audio-metadata": {
strip: "Strip all metadata",
title: "Title",
artist: "Artist",
album: "Album",
submit: "Apply Metadata",
submitBatch: "Apply Metadata ({count} files)",
progressLabel: "Applying metadata",
},
"merge-pdf": {
addFiles: "Add PDFs to merge",
needTwo: "At least two PDFs are required",
orderHint: "{count} PDFs will merge in this order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"split-pdf": {
mode: "Split mode",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
everyN: "Pages per part",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"compress-pdf": {
preset: "Quality preset",
screen: "Screen (smallest)",
ebook: "Ebook (balanced)",
printer: "Printer (best quality)",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"rotate-pdf": {
angle: "Rotation angle",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 1-z (all pages)",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"convert-document": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-presentation": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-spreadsheet": {
format: "Output format",
hint: "Multi-sheet workbooks export the first sheet to CSV.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"excel-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"powerpoint-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"word-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"extract-pages": {
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"remove-pages": {
pages: "Pages to remove",
pagesHint: "e.g. 2, 4-6, z (last page)",
submit: "Remove",
submitBatch: "Remove ({count} files)",
progressLabel: "Removing",
},
"organize-pdf": {
order: "Page order",
orderHint: "e.g. 3,1,2 or 1-z (identity)",
submit: "Reorder",
submitBatch: "Reorder ({count} files)",
progressLabel: "Reordering",
},
"protect-pdf": {
userPassword: "User password",
ownerPassword: "Owner password (optional)",
ownerPasswordHint: "Defaults to user password if empty",
submit: "Protect",
submitBatch: "Protect ({count} files)",
progressLabel: "Encrypting",
},
"unlock-pdf": {
password: "Password",
submit: "Unlock",
submitBatch: "Unlock ({count} files)",
progressLabel: "Decrypting",
},
"repair-pdf": {
submit: "Repair",
submitBatch: "Repair ({count} files)",
progressLabel: "Repairing",
},
"linearize-pdf": {
submit: "Optimize",
submitBatch: "Optimize ({count} files)",
progressLabel: "Linearizing",
},
"grayscale-pdf": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"pdfa-convert": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"crop-pdf": {
margin: "Margin (points)",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"nup-pdf": {
perSheet: "Pages per sheet",
submit: "Arrange",
submitBatch: "Arrange ({count} files)",
progressLabel: "Arranging",
},
"booklet-pdf": {
perSheet: "Pages per sheet",
submit: "Create Booklet",
submitBatch: "Create Booklet ({count} files)",
progressLabel: "Creating booklet",
},
"watermark-pdf": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
rotation: "Rotation",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"pdf-page-numbers": {
position: "Position",
fontSize: "Font size",
submit: "Add Numbers",
submitBatch: "Add Numbers ({count} files)",
progressLabel: "Numbering",
},
"flatten-pdf": {
submit: "Flatten",
submitBatch: "Flatten ({count} files)",
progressLabel: "Flattening",
},
"redact-pdf": {
terms: "Terms to redact",
termsHint: "One term per line (max 50)",
caseSensitive: "Case sensitive",
submit: "Redact",
submitBatch: "Redact ({count} files)",
progressLabel: "Redacting",
},
"pdf-to-text": {
submit: "Extract Text",
submitBatch: "Extract Text ({count} files)",
progressLabel: "Extracting",
},
"pdf-to-word": {
hint: "Best for text-based PDFs; scanned pages need OCR",
submit: "Convert to Word",
submitBatch: "Convert to Word ({count} files)",
progressLabel: "Converting",
},
"pdf-metadata": {
title: "Title",
author: "Author",
subject: "Subject",
keywords: "Keywords",
submit: "Set Metadata",
submitBatch: "Set Metadata ({count} files)",
progressLabel: "Setting metadata",
},
"html-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"markdown-to-docx": {
submit: "Convert to DOCX",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-html": {
hint: "Remote images in the source are left as-is in the output.",
submit: "Convert to HTML",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"epub-convert": {
format: "Output format",
hint: "Remote resources inside the book are not fetched.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"to-epub": {
submit: "Convert to EPUB",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-excel": {
sheet: "Worksheet number",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-json": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"json-xml": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"split-csv": {
rowsPerFile: "Rows per file",
keepHeader: "Keep header in each file",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"merge-csvs": {
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"yaml-json": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"xml-to-csv": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"create-zip": {
submit: "Create ZIP",
submitBatch: "Create ZIP ({count} files)",
progressLabel: "Zipping",
},
"extract-zip": {
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
},
urlImport: {
title: "Importar desde URLs",
placeholder: "Pega URLs de imagenes, una por linea...",
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: "Despues",
savings: "Ahorro",
},
toolPage: {
emptyPrompt: "Arrastra o sube una imagen para comenzar",
filesCount: "Archivos ({count})",
addMore: "+ Agregar mas",
clearAll: "Limpiar todo",
acceptDescription: "Solo archivos {exts}",
notFound: "Herramienta no encontrada",
configureAndGenerate: "Configura los ajustes y genera.",
processingFailed: "Error al procesar este archivo",
conversionComplete: "Conversion completada",
cannotPreviewDownload:
"Los archivos {type} no se pueden previsualizar en el navegador. Usa el boton de descarga para guardar tu archivo.",
generatingPreview: "Generando vista previa...",
cannotPreviewWillProcess:
"Los archivos {ext} no se pueden previsualizar en el navegador. La herramienta procesara este archivo normalmente.",
previousImage: "Imagen anterior",
nextImage: "Siguiente imagen",
imageCounter: "{current} / {total}",
settingsLabel: "Configuracion",
downloadAllZip: "Descargar todo (ZIP)",
hideSettings: "Ocultar configuracion",
imageArea: "Area de imagen",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
applyAndDownload: "Aplicar y descargar",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
newFile: "New file",
previewUnavailable: "Preview will be available after processing",
generatePreview: "Generate Preview",
previewFailed: "Preview generation failed",
backToTools: "Back to Tools",
original: "Original",
processed: "Processed",
saved: "Saved",
noChange: "no change",
download: "Download",
settingsSaved: "Tu configuracion se ha guardado.",
tryAgain: "Reintentar",
tryDifferentFile: "Probar con otro archivo",
batchPartialSuccess: "{success} of {total} processed. {failed} failed.",
dataResultsHint: "Results shown above. Use the copy button in the results panel.",
downloadAsFile: "Download as file",
downloadAll: "Download All",
downloadFiles: "Download {count} files",
},
homePage: {
generatingPreview: "Generando vista previa...",
loadingPreview: "Cargando vista previa...",
changeFile: "Cambiar archivo",
quickActions: "Acciones rapidas",
allTools: "Todas las herramientas",
searchPlaceholder: "Search {count} tools...",
recent: "Recent",
popular: "Popular",
browseByCategory: "Browse by Category",
gettingStarted: "Getting Started",
noToolsMatch: "No tools match '{query}'",
clearSearch: "Clear search",
all: "All",
documents: "Documents",
data: "Data",
toolCount: "{count} tools",
},
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 termino de busqueda diferente",
},
editor: {
menu: {
file: {
label: "Archivo",
new: "Nuevo",
open: "Abrir",
save: "Guardar",
exportAs: "Exportar como...",
quickExportPng: "Exportacion rapida 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: "Tamano de imagen...",
canvasSize: "Tamano de lienzo...",
rotation: {
label: "Rotacion 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/Saturacion",
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 atras",
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: "Mascara 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: "Pixeles reales",
rulers: "Reglas",
grid: "Cuadricula",
guides: "Guias",
snap: "Ajustar",
panels: "Paneles",
},
},
menuBar: {
backTitle: "Volver a SnapOtter",
},
welcome: {
ariaLabel: "Zona de carga de imagenes",
heading: "Editor de imagenes",
dropDescription: "Arrastra una imagen aqui 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 imagenes funciona mejor en pantallas de escritorio. Cambia a un dispositivo con una pantalla mas grande para la experiencia de edicion completa.",
},
errors: {
serverDecodeFailed: "Error de decodificacion del servidor",
},
shapes: {
shape: "Shape",
fill: "Fill",
stroke: "Stroke",
strokeWidth: "Width",
cornerRadius: "Radius",
sides: "Sides",
points: "Points",
dashStyle: "Dash",
solid: "Solid",
dashed: "Dashed",
dotted: "Dotted",
none: "None",
opacity: "Opacity",
rectangle: "Rectangle",
ellipse: "Ellipse",
line: "Line",
arrow: "Arrow",
polygon: "Polygon",
star: "Star",
},
},
settings: {
heading: "Configuracion",
nav: {
general: "General",
systemSettings: "Configuracion del sistema",
security: "Seguridad",
people: "Personas",
teams: "Equipos",
roles: "Roles",
auditLog: "Registro de auditoria",
usage: "Usage",
apiKeys: "Claves API",
aiFeatures: "Funciones de AI",
tools: "Herramientas",
productAnalytics: "Analitica del producto",
about: "Acerca de",
},
general: {
heading: "General",
description: "Preferencias del usuario y configuracion de pantalla.",
loading: "Cargando...",
logOut: "Cerrar sesion",
defaultToolViewLabel: "Vista predeterminada de herramientas",
defaultToolViewDescription: "Como se muestran las herramientas en la pagina de inicio",
sidebarOption: "Barra lateral",
fullscreenGridOption: "Cuadricula de pantalla completa",
appVersionLabel: "Version de la app",
appVersionDescription: "Version actual de SnapOtter",
saveButton: "Guardar configuracion",
saveSuccess: "Configuracion guardada.",
saveFailed: "Error al guardar la configuracion.",
},
system: {
heading: "Configuracion del sistema",
description: "Configuracion del servidor y limites.",
fileUploadLimitLabel: "Limite de carga de archivos (MB)",
fileUploadLimitDescription: "Tamano maximo 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: "Limite de intentos de inicio de sesion",
loginAttemptLimitDescription:
"Intentos fallidos maximos de inicio de sesion por minuto antes del bloqueo",
fileManagementHeading: "Gestion de archivos",
maxFileAgeLabel: "Edad maxima de archivos (horas)",
maxFileAgeDescription:
"Cuanto tiempo se conservan los archivos procesados antes de la limpieza automatica",
startupCleanupLabel: "Limpieza al inicio",
startupCleanupDescription: "Limpia archivos temporales antiguos cuando el servidor arranca",
saveButton: "Guardar configuracion",
saveSuccess: "Configuracion guardada.",
saveFailed: "Error al guardar la configuracion.",
limitsAndResources: "Limites y recursos",
maxFileSize: "Tamano maximo de archivo",
maxBatchSize: "Tamano maximo de lote",
concurrentJobs: "Trabajos simultaneos",
workerThreads: "Hilos de trabajo",
maxPipelineSteps: "Pasos maximos de Pipeline",
processingTimeout: "Tiempo de espera de procesamiento",
rateLimitPerMin: "Limite de solicitudes (req/min)",
unlimited: "Ilimitado",
auto: "Automatico",
envOverride: "Establecido por variable de entorno",
maxCanvasPixels: "Pixeles maximos de lienzo",
maxSvgSize: "Tamano maximo de SVG",
maxSplitGrid: "Cuadricula maxima de division",
maxPdfPages: "Paginas maximas de PDF",
sessionDuration: "Duracion de la sesion",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Seguridad",
description: "Configuracion de contrasena y autenticacion.",
changePasswordHeading: "Cambiar contrasena",
currentPasswordPlaceholder: "Contrasena actual",
newPasswordPlaceholder: "Nueva contrasena",
confirmPasswordPlaceholder: "Confirmar nueva contrasena",
passwordsMismatch: "Las contrasenas no coinciden",
passwordTooShort: "La contrasena debe tener al menos 4 caracteres",
changeSuccess: "Contrasena cambiada correctamente",
changeFailed: "Error al cambiar la contrasena",
currentPasswordIncorrect: "La contrasena actual es incorrecta",
changePasswordButton: "Cambiar contrasena",
loginAttemptLimitNote:
"Los limites de intentos de inicio de sesion se pueden configurar en Configuracion del sistema.",
adminHeading: "Admin Security Settings",
adminDescription: "Enterprise security policy settings. These apply to all users.",
sessionIdleTimeout: "Session Idle Timeout (minutes)",
sessionIdleTimeoutDesc: "Automatically log out idle sessions. 0 = disabled.",
maxSessionsPerUser: "Max Sessions Per User",
maxSessionsPerUserDesc: "Limit concurrent sessions per user. 0 = unlimited.",
mfaPolicy: "MFA Policy",
mfaPolicyDesc: "Require multi-factor authentication for users.",
mfaPolicyOptional: "Optional",
mfaPolicyAdminsOnly: "Required for admins",
mfaPolicyRequired: "Required for all users",
ssoEnforcement: "SSO Enforcement",
ssoEnforcementDesc: "Require SSO login for all non-break-glass users.",
ssoBreakGlassUsername: "Break Glass Admin Username",
ssoBreakGlassUsernameDesc:
"This admin can still log in with local credentials when SSO is enforced.",
passwordMinLength: "Minimum Password Length",
passwordMinLengthDesc: "Minimum number of characters required for passwords.",
passwordRequireUppercase: "Require Uppercase",
passwordRequireUppercaseDesc: "Require at least one uppercase letter.",
passwordRequireNumber: "Require Number",
passwordRequireNumberDesc: "Require at least one number.",
passwordRequireSpecial: "Require Special Character",
passwordRequireSpecialDesc: "Require at least one special character.",
passwordPolicyHeading: "Password Policy",
securitySettingsSaved: "Security settings saved",
securitySettingsFailed: "Failed to save security settings",
},
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: "Contrasena",
roleUserOption: "Usuario",
roleEditorOption: "Editor",
roleAdminOption: "Admin",
roleUserDescription: "Acceso basico a herramientas",
roleEditorDescription: "Todos los archivos y pipelines",
roleAdminDescription: "Acceso completo",
noDescription: "Sin descripcion",
defaultTeamOption: "Predeterminado",
createButton: "Crear",
cancelButton: "Cancelar",
createSuccess: "Usuario creado correctamente",
createFailed: "Error al crear el usuario",
userLimitReached: "Limite de usuarios alcanzado ({max} maximo)",
deleteConfirm: 'Eliminar usuario "{username}"? Esta accion 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 contrasena para {username}",
newPasswordLabel: "Nueva contrasena (minimo 8 caracteres)",
resetPasswordButton: "Restablecer contrasena",
resetPasswordWarning: "Esto invalidara todas las sesiones y claves API de este usuario.",
resetSuccess: "Contrasena restablecida correctamente",
resetFailed: "Error al restablecer la contrasena",
tableHeaderUser: "Usuario",
tableHeaderRole: "Rol",
tableHeaderTeam: "Equipo",
noSearchResults: "Ningun miembro coincide con tu busqueda.",
noUsersFound: "No se encontraron usuarios.",
authBadgeLocalOidc: "Local + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "Editar rol / equipo",
resetPasswordAction: "Restablecer contrasena",
deleteUserAction: "Eliminar usuario",
saveButton: "Guardar",
copyPasswordButton: "Copiar contrasena",
passwordCopied: "Copiado!",
copyPasswordWarning:
"Copia esta contrasena ahora. No podras verla despues de crear el usuario.",
},
teams: {
heading: "Equipos",
description: "Organiza a los miembros en equipos para una mejor gestion.",
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 seran 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: "Storage Quota (MB)",
teamStorageQuotaDesc: "Maximum storage for this team in MB. Leave empty for no limit.",
teamRetentionHours: "Retention (hours)",
teamRetentionHoursDesc:
"Processing file retention for this team. Leave empty to use global default.",
quotaSaved: "Team settings saved",
},
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: "Descripcion (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) deberan 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: "Configuracion",
users: "Usuarios",
teams: "Equipos",
system: "Sistema",
},
},
auditLog: {
heading: "Registro de auditoria",
allActionsFilter: "Todas las acciones",
emptyState: "No hay entradas en el registro de auditoria.",
tableHeaderTime: "Hora",
tableHeaderUser: "Usuario",
tableHeaderAction: "Accion",
tableHeaderTarget: "Objetivo",
paginationInfo: "Pagina {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: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
storageByTeam: "Storage by Team",
teamColumn: "Team",
storageColumn: "Storage",
usersColumn: "Users",
},
apiKeys: {
heading: "Claves API",
description: "Administra las claves API para acceso programatico a SnapOtter.",
keyNamePlaceholder: "Nombre de la clave (opcional)",
generateButton: "Generar clave API",
removeScopingLabel: "Eliminar restriccion de permisos",
restrictPermissionsLabel: "Restringir permisos (opcional)",
expiresLabel: "Expira:",
clearButton: "Limpiar",
copyTitle: "Copiar",
keyWarning: "Guarda esta clave de forma segura. No se mostrara 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 dejaran de funcionar.",
emptyState: "Aun 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 busqueda.",
loadFailedError:
"Error al cargar la configuracion de herramientas. El guardado esta desactivado para prevenir perdida de datos.",
saveButton: "Guardar configuracion de herramientas",
disabledCount: "{count} herramienta(s) desactivada(s)",
},
experimental: {
label: "Activar herramientas experimentales",
description: "Muestra herramientas que aun estan en desarrollo. Pueden ser inestables.",
},
fileManagement: {
title: "Gestion de archivos",
maxAge: "Edad maxima de archivos (horas)",
maxAgeDescription:
"Cuanto tiempo se conservan los archivos procesados antes de la limpieza automatica",
startupCleanup: "Limpieza al inicio",
startupCleanupDescription: "Limpia archivos temporales antiguos cuando el servidor arranca",
},
dataRetention: {
title: "Data Retention",
fileMaxAgeHours: "Processing file retention (hours)",
fileMaxAgeHoursDesc: "How long to keep uploaded and processed files. Default: 72 hours.",
jobsRetentionDays: "Job record retention (days)",
jobsRetentionDaysDesc: "How long to keep job metadata. 0 = keep forever. Default: 30 days.",
auditRetentionDays: "Audit log retention (days)",
auditRetentionDaysDesc:
"How long to keep audit log entries. 0 = keep forever. Default: forever.",
},
analytics: {
heading: "Analitica del producto",
description: "Comparte datos de uso anonimos para ayudar a mejorar SnapOtter.",
privacyNote: "Tus imagenes nunca salen de tu equipo.",
disabledByAdmin:
"La analitica del producto ha sido desactivada por el administrador del servidor.",
enabledLabel: "Analitica activada",
disabledLabel: "Analitica desactivada",
learnMore: "Mas informacion",
},
aiFeatures: {
title: "AI Features",
description: "Manage AI model bundles for advanced image processing.",
installAll: "Install All",
diskUsage: "Disk usage:",
installed: "Installed",
notInstalled: "Not installed",
queued: "Queued",
install: "Install",
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Acerca de",
appName: "SnapOtter",
appDescription:
"Una suite de procesamiento de imagenes autoalojada y con privacidad como prioridad, con 70+ herramientas. Redimensiona, comprime, convierte, agrega marcas de agua y automatiza tus flujos de trabajo de imagenes sin enviar datos a la nube.",
versionLabel: "Version:",
linksHeading: "Enlaces",
githubLink: "Repositorio en GitHub",
docsLink: "Documentacion",
apiRefLink: "Referencia API (Swagger)",
licenseLabel: "License:",
licenseDescription:
"SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3).",
},
},
auth: {
login: "Iniciar sesion",
logout: "Cerrar sesion",
username: "Nombre de usuario",
password: "Contrasena",
loginButton: "Iniciar sesion",
loggingIn: "Iniciando sesion...",
invalidCredentials: "Nombre de usuario o contrasena invalidos",
connectionError: "Error de conexion",
signInWith: "Iniciar sesion con {provider}",
signInWithSso: "Iniciar sesion con SSO",
or: "o",
methodLocal: "Local",
methodOidc: "OIDC",
methodBoth: "Local + OIDC",
oidcAuthFailed: "La autenticacion fallo. Intenta de nuevo.",
oidcProviderUnreachable: "No se pudo contactar al proveedor de identidad. Intenta mas tarde.",
oidcSessionExpired: "La sesion de inicio de sesion expiro. Intenta de nuevo.",
oidcUserNotAuthorized:
"Tu cuenta no esta autorizada para acceder a esta aplicacion. Contacta a tu administrador.",
oidcUserLimitReached: "Limite de usuarios alcanzado. Contacta a tu administrador.",
oidcGenericError: "Error de autenticacion. Intenta de nuevo.",
samlAuthFailed: "SAML authentication failed. Please try again.",
samlUserNotAuthorized:
"Your account is not authorized to access this application. Contact your administrator.",
samlUserLimitReached: "User limit reached. Contact your administrator.",
ssoEnforcedLocalRestricted: "Local login is restricted to authorized administrators.",
mfaRequired: "Enter your authentication code",
mfaRecoveryHint: "You can also use a recovery code",
verify: "Verify",
verifying: "Verifying...",
mfaInvalidCode: "Invalid code. Please try again.",
mfaEnrollmentRequired:
"Your organization requires multi-factor authentication. Please set up MFA in your account settings.",
methodSaml: "SAML",
passwordManagedByProvider:
"Los cambios de contrasena son administrados por tu proveedor de identidad.",
enterUsername: "Ingresa tu nombre de usuario",
enterPassword: "Ingresa tu contrasena",
heroTitle: "Tus imagenes. Se quedan contigo.",
heroSubtitle: "Todas las herramientas de imagen que necesitas.",
rotatingPhrases: [
"Sin registros. Sin cuentas.",
"Sin subidas a la nube. Nunca.",
"100% procesamiento local.",
"Gratis. Para siempre.",
"Sin limites. Sin topes ocultos.",
"Funciona totalmente sin conexion.",
"Procesamiento por lotes ilimitado.",
"70+ herramientas de imagen.",
"15 modelos AI. Tu hardware.",
"Ultra rapido. Construido sobre Sharp.",
"Listo para redes aisladas.",
"Un solo contenedor Docker.",
"Codigo abierto. Siempre.",
"Cada pixel 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 imagenes gratuito. Sin marcas de agua.",
"Procesamiento masivo de imagenes. Ilimitado.",
"Elimina fondos sin conexion.",
"Alternativa autoalojada a Canva.",
"Sin claves API necesarias.",
"Cumplimiento GDPR por diseno.",
"Funciona sin internet.",
],
},
changePassword: {
title: "Cambia tu contrasena",
description:
"Necesitas establecer una nueva contrasena antes de continuar. Tu contrasena debe tener al menos 8 caracteres con mayusculas, minusculas y un numero.",
usernameLabel: "Nombre de usuario",
currentPasswordLabel: "Contrasena actual",
currentPasswordPlaceholder: "Ingresa la contrasena actual",
newPasswordLabel: "Nueva contrasena",
generateButton: "Generar contrasena segura",
newPasswordPlaceholder: "Al menos 8 caracteres",
confirmPasswordLabel: "Confirmar nueva contrasena",
confirmPasswordPlaceholder: "Repite la nueva contrasena",
passwordsMismatch: "Las contrasenas no coinciden",
failedError: "Error al cambiar la contrasena",
connectionError: "Error de conexion",
changingButton: "Cambiando...",
changeButton: "Cambiar contrasena",
sidebarTitle: "Ya casi",
sidebarDescription: "Establece una contrasena segura para proteger tu cuenta y estaras listo.",
},
automate: {
title: "Automatizar",
invalidPipelineFile: "No es un archivo de Pipeline de SnapOtter valido",
newerVersion: "Este Pipeline fue creado con una version mas reciente de SnapOtter",
missingName: "Al archivo de Pipeline le falta un nombre",
noSteps: "El archivo de Pipeline no tiene pasos",
importFailed: "Error en la importacion",
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} mas",
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: "Descripcion",
savingIndicator: "...",
cancelButton: "Cancelar",
preview: "Vista previa",
previousImage: "Imagen anterior",
nextImage: "Siguiente imagen",
imageCounter: "{current} / {total}",
imageArea: "Area de imagen",
templateSocialMedia: "Listo para redes sociales",
templatePrivacyClean: "Limpieza de privacidad",
templateWebOptimization: "Optimizacion web",
templateProfilePicture: "Foto de perfil",
templateWatermarkBatch: "Lote de marcas de agua",
createNew: "Crear nueva automatizacion",
savedAutomations: "Automatizaciones guardadas",
templates: "Plantillas",
addStep: "Agregar paso",
removeStep: "Eliminar",
moveUp: "Subir",
moveDown: "Bajar",
savePipeline: "Guardar Pipeline",
runPipeline: "Procesar",
pipelineName: "Nombre del Pipeline",
pipelineDescription: "Descripcion (opcional)",
noStepsPrompt: "Agrega pasos para construir tu automatizacion",
noStepsHeading: "No steps yet",
searchToolsPlaceholder: "Search tools...",
step: "Paso",
},
nav: {
tools: "Herramientas",
reader: "Lector",
automate: "Automatizar",
editor: "Editor",
files: "Archivos",
help: "Ayuda",
settings: "Configuracion",
grid: "Cuadricula",
},
files: {
myFiles: "My Files",
recentTab: "Recent",
uploadTab: "Upload Files",
fileDetailsAriaLabel: "File Details",
fileDetailsHeading: "File Details",
searchPlaceholder: "Search files...",
selectedCount: "{count} selected",
fileCount: "{count} files",
fileCountSingular: "{count} file",
noFilesFound: "No files found",
selectFilePrompt: "Select a file to view details",
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
dimensions: "Dimensions",
version: "Version",
toolsUsed: "Tools Used",
none: "None",
delete: "Delete",
pipeline: "Pipeline",
download: "Download",
},
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 imagenes aqui",
browseOrPaste: "haz clic en cualquier lugar para explorar, o pega desde el portapapeles",
uploadButton: "Subir",
defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD y mas de 65 formatos",
orSeparator: "o",
urlPlaceholder: "Pega la URL de la imagen...",
urlLoadingIndicator: "...",
addUrlButton: "Agregar",
importMultipleUrls: "Importar multiples URLs...",
filesSelected: "{count} archivos seleccionados",
dropToAdd: "Suelta para agregar archivos",
dropToReplace: "Suelta para reemplazar archivo",
},
reviewPanel: {
processedResultAlt: "Resultado procesado",
sizeLabel: "Tamano: {size}",
typeLabel: "Tipo: {type}",
processedLabel: "Procesado: {time}",
undoButton: "Deshacer",
downloadButton: "Descargar",
openInEditor: "Abrir en el editor",
reviewHeading: "Revisar",
continueEditing: "Continuar editando",
},
features: {
notEnabledTitle: "Funcion no activada",
notEnabledDescription:
"Esta funcion no esta activada. Pide a tu administrador que la active en Configuracion.",
requiresDownload: "Esta funcion requiere una descarga adicional (~{size})",
retryButton: "Reintentar",
queued: "En cola para instalacion...",
enableButton: "Activar {name}",
repairRequired: "Repair Required",
repairDescription: "Some model files are missing or corrupted. Repair will re-download them.",
repairButton: "Repair {name}",
lessThanMinute: "Menos de un minuto restante",
oneMinuteLeft: "~1 minuto restante",
minutesLeft: "~{mins} minutos restantes",
progressMessages: [
"Ya casi... probablemente...",
"Las cosas buenas toman tiempo...",
"Mas rapido que ver secar la pintura...",
"Tu paciencia es verdaderamente inspiradora...",
"Trabajando mas duro de lo que parece...",
"Esta es la parte emocionante, en serio...",
"Haciendo cosas importantes tras bambalinas...",
"Si lees esto, esta funcionando...",
"Preparando algo increible...",
"Vale cada segundo, lo prometo...",
"El suspenso es parte de la experiencia...",
"Ensenandole trucos nuevos a tu computadora...",
"Configurando tus superpoderes...",
"Tus imagenes te lo agradeceran despues...",
"Cargando... pero con estilo...",
"Buen momento para un cafe...",
"Roma tampoco se construyo en un dia...",
"Shhh... genio trabajando...",
"Haciendo que tus fotos se pongan celosas...",
"Armando el equipo de ensueño...",
"Desempacando cosas geniales...",
"Ya casi termino de pensar en empezar... es broma...",
"Giro de trama: esto de verdad esta haciendo algo...",
"Calentando los motores creativos...",
"Cargando imaginacion...",
"No es un protector de pantalla, lo prometemos...",
"El gran arte necesita tiempo para instalarse...",
"Tu yo del futuro te lo agradecera...",
"Buscando archivos muy inteligentes...",
"Aguanta, lo mejor esta por venir...",
],
},
help: {
heading: "Ayuda",
gettingStarted: {
heading: "Primeros pasos",
description:
"Selecciona una herramienta desde la barra lateral o busca una. Sube una imagen arrastandola a la pagina o haciendo clic en el area de carga. Ajusta la configuracion y descarga tu resultado.",
},
keyboardShortcuts: {
heading: "Atajos de teclado",
focusSearchBar: "Enfocar barra de busqueda",
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: "Documentacion",
apiRefLink: "Referencia API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "Ocurrio un error",
offline: "Estas sin conexion",
reconnecting: "Reconectando al servidor...",
connected: "Conectado",
processingFailed: "Error al procesar este archivo",
timeout:
"La solicitud agoto el tiempo de espera. El servidor puede estar sobrecargado. Intenta de nuevo.",
networkError: "Error de red. Verifica tu conexion.",
invalidCredentials: "Nombre de usuario o contrasena invalidos",
connectionError: "Error de conexion",
},
analytics: {
consentTitle: "Ayuda a mejorar SnapOtter",
consentDescription:
"Las estadisticas de uso anonimas nos ayudan a corregir errores y crear las herramientas que realmente necesitas. Tus imagenes y archivos se quedan en tu equipo.",
consentChangeable: "Puedes desactivar esto en cualquier momento en Configuracion.",
acceptButton: "Claro, me parece bien",
declineButton: "Ahora no",
settingsTitle: "Analitica del producto",
settingsDescription: "Comparte datos de uso anonimos para ayudar a mejorar SnapOtter.",
settingsPrivacy: "Tus imagenes nunca salen de tu equipo.",
settingsDisabledByAdmin:
"La analitica del producto ha sido desactivada por el administrador del servidor.",
learnMore: "Mas informacion",
},
sidebar: {
tools: "Herramientas",
grid: "Cuadricula",
automate: "Automatizar",
editor: "Editor",
files: "Archivos",
help: "Ayuda",
settings: "Configuracion",
},
toolCard: {
addToFavourites: "Agregar a favoritos",
},
appLayout: {
mobileNavTools: "Herramientas",
mobileNavAutomate: "Automatizar",
mobileNavEditor: "Editor",
mobileNavFiles: "Archivos",
mobileNavSettings: "Configuracion",
},
a11y: {
skipToContent: "Skip to main content",
openSidebar: "Open sidebar",
closeSidebar: "Close sidebar",
closeSettings: "Close settings",
closeHelp: "Close help",
closeDialog: "Close dialog",
zoomIn: "Zoom in",
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
blackBackground: "Black background",
expandPanel: "Expand panel",
collapsePanel: "Collapse panel",
swapDimensions: "Swap dimensions",
applyCrop: "Apply crop",
cancelCrop: "Cancel crop",
fontFamily: "Font family",
textColor: "Text color",
flipHorizontal: "Flip horizontal",
flipVertical: "Flip vertical",
hexColorValue: "Hex color value",
backgroundColor: "Background color",
foregroundColor: "Foreground color",
swapColors: "Swap foreground and background colors",
resetColors: "Reset to default black and white",
foregroundHex: "Foreground color hex value",
undo: "Undo",
redo: "Redo",
layers: "Layers",
addLayer: "Add layer",
deleteLayer: "Delete layer",
cancelOperation: "Cancel operation",
fill: "Fill",
fileDetails: "File details",
language: "Language",
selected: "Selected",
deleteKey: "Delete key",
editRole: "Edit role",
deleteRole: "Delete role",
notInstalled: "Not installed",
queued: "Queued for install",
installing: "Installing",
imageNOfTotal: "Image {n} of {total}",
processingComplete: "Image processed successfully",
processingFailed: "Processing failed",
settingsDialog: "Settings",
helpDialog: "Help",
navigationMenu: "Navigation",
},
} as const;