translations (#5469)

# Description of Changes

<!--
Please provide a summary of the changes, including:

- What was changed
- Why the change was made
- Any challenges encountered

Closes #(issue_number)
-->

---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### Translations (if applicable)

- [ ] I ran
[`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.
This commit is contained in:
Anthony Stirling
2026-01-14 11:26:45 +00:00
committed by GitHub
parent 72cc4e4963
commit a7945da3b4
40 changed files with 17927 additions and 7525 deletions
+469 -196
View File
@@ -1,8 +1,11 @@
unsavedChanges = "Tiene cambios sin guardar en su PDF. ¿Qué le gustaría hacer?"
pendingRedactionsTitle = "Censuras sin aplicar"
pendingRedactions = "Tienes censuras sin aplicar que se perderán."
areYouSure = "¿Seguro que quieres salir?"
unsavedChangesTitle = "Cambios sin Guardar"
keepWorking = "Seguir trabajando"
discardChanges = "Descartar cambios"
discardRedactions = "Descartar y salir"
applyAndContinue = "Aplicar y continuar"
exportAndContinue = "Exportar y continuar"
cancel = "Cancelar"
@@ -356,7 +359,7 @@ teams = "Equipos"
title = "Configuración"
systemSettings = "Ajustes del sistema"
features = "Funciones"
endpoints = "Puntos de conexión"
endpoints = "Endpoints"
database = "Base de datos"
advanced = "Avanzado"
@@ -364,6 +367,7 @@ advanced = "Avanzado"
title = "Seguridad y autenticación"
security = "Seguridad"
connections = "Conexiones"
telegram = "Telegram"
[settings.licensingAnalytics]
title = "Licencias y analítica"
@@ -438,25 +442,34 @@ currentVersion = "Versión actual"
latestVersion = "Última versión"
checkForUpdates = "Buscar actualizaciones"
viewDetails = "Ver detalles"
serverNeedsUpdate = "El servidor debe ser actualizado por el administrador"
[settings.general.versionInfo]
title = "Información de la versión"
description = "Detalles de la versión de escritorio y del servidor"
desktop = "Versión de escritorio"
server = "Versión del servidor"
[settings.security]
title = "Security"
description = "Update your password to keep your account secure."
title = "Seguridad"
description = "Actualiza tu contraseña para mantener tu cuenta segura."
[settings.security.password]
subtitle = "Change your password. You will be logged out after updating."
required = "All fields are required."
mismatch = "New passwords do not match."
error = "Unable to update password. Please verify your current password and try again."
success = "Password updated successfully. Please sign in again."
ssoDisabled = "Password changes are managed by your identity provider."
current = "Current password"
currentPlaceholder = "Enter your current password"
new = "New password"
newPlaceholder = "Enter a new password"
confirm = "Confirm new password"
confirmPlaceholder = "Re-enter your new password"
update = "Update password"
subtitle = "Cambia tu contraseña. Se cerrará tu sesión tras actualizar."
required = "Todos los campos son obligatorios."
mismatch = "Las contraseñas nuevas no coinciden."
error = "No se puede actualizar la contraseña. Verifica tu contraseña actual e inténtalo de nuevo."
success = "Contraseña actualizada correctamente. Vuelve a iniciar sesión."
ssoDisabled = "Los cambios de contraseña los gestiona tu proveedor de identidad."
current = "Contraseña actual"
currentPlaceholder = "Introduce tu contraseña actual"
new = "Nueva contraseña"
newPlaceholder = "Introduce una nueva contraseña"
confirm = "Confirmar nueva contraseña"
confirmPlaceholder = "Vuelve a introducir tu nueva contraseña"
update = "Actualizar contraseña"
[settings.hotkeys]
title = "Atajos de teclado"
@@ -511,16 +524,16 @@ low = "Baja"
title = "Cambiar Credenciales"
header = "Actualice los detalles de su cuenta"
changePassword = "Está usando las credenciales de inicio de sesión por defecto. Por favor, introduzca una contraseña nueva"
ssoManaged = "Your account is managed by your identity provider."
ssoManaged = "Tu cuenta está gestionada por tu proveedor de identidad."
newUsername = "Nuevo usuario"
oldPassword = "Contraseña actual"
newPassword = "Nueva contraseña"
confirmNewPassword = "Confirme la nueva contraseña"
submit = "Enviar cambios"
credsUpdated = "Account updated"
description = "Changes saved. Please log in again."
error = "Unable to update username. Please verify your password and try again."
changeUsername = "Update your username. You will be logged out after updating."
credsUpdated = "Cuenta actualizada"
description = "Cambios guardados. Vuelve a iniciar sesión."
error = "No se pudo actualizar el nombre de usuario. Verifica tu contraseña e inténtalo de nuevo."
changeUsername = "Actualiza tu nombre de usuario. Se cerrará tu sesión tras actualizar."
[account]
title = "Configuración de la cuenta"
@@ -528,6 +541,8 @@ accountSettings = "Configuración de la cuenta"
adminSettings = "Configuración de Administrador - Ver y Añadir Usuarios"
userControlSettings = "Configuración de control de usuario"
changeUsername = "Cambiar nombre de usuario"
changeUsernameDescription = "Actualiza tu nombre de usuario. Se cerrará tu sesión tras actualizar."
newUsernamePlaceholder = "Introduce tu nuevo nombre de usuario"
newUsername = "nuevo nombre de usuario"
password = "Confirmar contraseña"
oldPassword = "Contraseña anterior"
@@ -737,9 +752,9 @@ title = "Firmar"
desc = "Añadir firma a PDF mediante dibujo, texto o imagen"
[home.annotate]
tags = "annotate,highlight,draw"
title = "Annotate"
desc = "Highlight, draw, add notes and shapes in the viewer"
tags = "anotar,resaltar,dibujar"
title = "Anotar"
desc = "Resalta, dibuja y añade notas y formas en el visor"
[home.flatten]
tags = "simplificar,eliminar,interactivo"
@@ -951,8 +966,8 @@ desc = "Superponer PDFs encima de otro PDF"
title = "Superponer PDFs"
[home.pdfTextEditor]
title = "Editor de texto de PDF"
desc = "Edita texto e imágenes existentes dentro de archivos PDF"
title = "Editor de texto PDF"
desc = "Revise y edite exportaciones JSON de Stirling PDF con edición de texto agrupada y regeneración de PDF"
[home.addText]
tags = "texto,anotación,etiqueta"
@@ -963,6 +978,7 @@ desc = "Añada texto personalizado en cualquier parte del PDF"
addFiles = "Agregar Archivos"
uploadFromComputer = "Cargar desde el ordenador"
openFromComputer = "Abrir desde el ordenador"
mobileUpload = "Subir desde el móvil"
[viewPdf]
tags = "ver,leer,anotar,texto,imagen"
@@ -1278,21 +1294,33 @@ cbzOptions = "Opciones de CBZ a PDF"
optimizeForEbook = "Optimizar PDF para lectores de libros electrónicos (usa Ghostscript)"
cbzOutputOptions = "Opciones de PDF a CBZ"
cbzDpi = "DPI para renderizado de imágenes"
cbrOptions = "CBR Options"
cbrOutputOptions = "PDF to CBR Options"
cbrDpi = "DPI for image rendering"
cbrOptions = "Opciones de CBR"
cbrOutputOptions = "Opciones de PDF a CBR"
cbrDpi = "DPI para el renderizado de imágenes"
[convert.ebookOptions]
ebookOptions = "eBook to PDF Options"
ebookOptionsDesc = "Options for converting eBooks to PDF"
embedAllFonts = "Embed all fonts"
embedAllFontsDesc = "Embed all fonts from the eBook into the generated PDF"
includeTableOfContents = "Include table of contents"
includeTableOfContentsDesc = "Add a generated table of contents to the resulting PDF"
includePageNumbers = "Include page numbers"
includePageNumbersDesc = "Add page numbers to the generated PDF"
optimizeForEbookPdf = "Optimize for ebook readers"
optimizeForEbookPdfDesc = "Optimize the PDF for eBook reading (smaller file size, better rendering on eInk devices)"
ebookOptions = "Opciones de eBook a PDF"
ebookOptionsDesc = "Opciones para convertir eBooks a PDF"
embedAllFonts = "Incrustar todas las fuentes"
embedAllFontsDesc = "Incrustar todas las fuentes del eBook en el PDF generado"
includeTableOfContents = "Incluir tabla de contenidos"
includeTableOfContentsDesc = "Añadir una tabla de contenidos generada al PDF resultante"
includePageNumbers = "Incluir números de página"
includePageNumbersDesc = "Añadir números de página al PDF generado"
optimizeForEbookPdf = "Optimizar para lectores de eBook"
optimizeForEbookPdfDesc = "Optimizar el PDF para lectura en eBook (tamaño de archivo menor, mejor renderizado en dispositivos eInk)"
[convert.epubOptions]
epubOptions = "Opciones de PDF a eBook"
epubOptionsDesc = "Opciones para convertir PDF a EPUB/AZW3"
detectChapters = "Detectar capítulos"
detectChaptersDesc = "Detectar encabezados que parezcan capítulos e insertar saltos de página EPUB"
targetDevice = "Dispositivo de destino"
targetDeviceDesc = "Elige un perfil de salida optimizado para el dispositivo lector"
outputFormat = "Formato de salida"
outputFormatDesc = "Elige el formato de salida para el eBook"
tabletPhone = "Tableta/Teléfono (con imágenes)"
kindleEink = "Kindle e-Ink (texto optimizado)"
[imageToPdf]
tags = "conversión,img,jpg,imagen,fotografía"
@@ -1409,11 +1437,11 @@ header = "Add attachments"
add = "Añadir archivo adjunto"
remove = "Eliminar archivo adjunto"
embed = "Incrustar archivo adjunto"
convertToPdfA3b = "Convert to PDF/A-3b"
convertToPdfA3bDescription = "Creates an archival PDF with embedded attachments"
convertToPdfA3bTooltip = "PDF/A-3b is an archival format ensuring long-term preservation. It allows embedding arbitrary file formats as attachments. Conversion requires Ghostscript and may take longer for large files."
convertToPdfA3bTooltipHeader = "About PDF/A-3b Conversion"
convertToPdfA3bTooltipTitle = "What it does"
convertToPdfA3b = "Convertir a PDF/A-3b"
convertToPdfA3bDescription = "Crea un PDF para archivo con adjuntos incrustados"
convertToPdfA3bTooltip = "PDF/A-3b es un formato para archivo que garantiza la preservación a largo plazo. Permite incrustar formatos de archivo arbitrarios como adjuntos. La conversión requiere Ghostscript y puede tardar más en archivos grandes."
convertToPdfA3bTooltipHeader = "Acerca de la conversión a PDF/A-3b"
convertToPdfA3bTooltipTitle = "Qué hace"
submit = "Add attachments"
[watermark]
@@ -2359,10 +2387,10 @@ saved = "Guardadas"
label = "Cargar imagen de firma"
placeholder = "Seleccionar archivo de imagen"
hint = "Cargue una imagen PNG o JPG de su firma"
removeBackground = "Remove white background (make transparent)"
processing = "Processing image..."
backgroundRemovalFailedTitle = "Background removal failed"
backgroundRemovalFailedMessage = "Could not remove the background from the image. Using original image instead."
removeBackground = "Eliminar fondo blanco (hacer transparente)"
processing = "Procesando imagen..."
backgroundRemovalFailedTitle = "Error al eliminar el fondo"
backgroundRemovalFailedMessage = "No se pudo eliminar el fondo de la imagen. Se usará la imagen original."
[sign.instructions]
title = "Cómo añadir firma"
@@ -2409,9 +2437,9 @@ label = "Aplanar solo formularios"
desc = "Solo aplanar campos de formulario, dejando intactos otros elementos interactivos"
[flatten.renderDpi]
label = "Rendering DPI (optional, recommended 150 DPI)"
help = "Leave blank to use the system default. Higher DPI sharpens output but increases processing time and file size."
placeholder = "e.g. 150"
label = "DPI de renderizado (opcional, recomendado 150 DPI)"
help = "Deja en blanco para usar el valor predeterminado del sistema. Un DPI más alto afila la salida pero aumenta el tiempo de procesamiento y el tamaño del archivo."
placeholder = "p. ej. 150"
[flatten.results]
title = "Resultados de Aplanado"
@@ -2987,7 +3015,7 @@ header = "Recortar PDF"
submit = "Entregar"
noFileSelected = "Seleccione un archivo PDF para comenzar a recortar"
reset = "Restablecer a PDF completo"
autoCrop = "Auto-crop whitespace"
autoCrop = "Recortar automáticamente espacios en blanco"
[crop.preview]
title = "Selección de Área de Recorte"
@@ -3218,6 +3246,7 @@ title = "Método de Censura"
mode = "Modo"
automatic = "Automático"
automaticDesc = "Censurar texto basándose en términos de búsqueda"
automaticDisabledTooltip = "Selecciona archivos en el gestor de archivos para censurar varios archivos a la vez"
manual = "Manual"
manualDesc = "Haga clic y arrastre para censurar áreas específicas"
manualComingSoon = "Censura manual próximamente"
@@ -3288,8 +3317,35 @@ text = "Solo coincide palabras completas, no coincidencias parciales. 'Juan' no
title = "Convertir a PDF-Imagen"
text = "Convierte el PDF a un PDF basado en imagen después de la censura. Esto asegura que el texto detrás de las cajas de censura se elimine completamente y sea irrecuperable."
[redact.tooltip.manual.header]
title = "Controles de censura manual"
[redact.tooltip.manual.markText]
title = "Herramienta Marcar texto"
text = "Selecciona texto directamente en el PDF para marcarlo para censura. Haz clic y arrastra para resaltar el texto específico que quieres censurar."
[redact.tooltip.manual.markArea]
title = "Herramienta Marcar área"
text = "Dibuja áreas rectangulares en el PDF para marcar regiones para censura. Útil para censurar imágenes, firmas o formas irregulares."
[redact.tooltip.manual.apply]
title = "Aplicar censuras"
text = "Tras marcar contenido, haz clic en 'Aplicar' para censurar permanentemente todas las áreas marcadas. El contador de pendientes muestra cuántas censuras están listas para aplicar."
bullet1 = "Marca tantas áreas como necesites antes de aplicar"
bullet2 = "Todas las censuras pendientes se aplican a la vez"
bullet3 = "Las censuras no se pueden deshacer tras aplicarlas"
[redact.manual]
title = "Herramientas de censura"
instructions = "Selecciona texto o dibuja áreas en el PDF para marcar contenido para censura."
markText = "Marcar texto"
markArea = "Marcar área"
pendingLabel = "Pendientes:"
applyWarning = "⚠️ Aplicación permanente, no se puede deshacer y los datos subyacentes se eliminarán"
apply = "Aplicar"
noMarks = "No hay marcas de censura. Usa las herramientas de arriba para marcar contenido para censura."
header = "Censura Manual"
controlsTitle = "Controles de censura manual"
textBasedRedaction = "Censura Basada en Texto"
pageBasedRedaction = "Censura Basada en Páginas"
convertPDFToImageLabel = "Convertir PDF a PDF-Imagen (Usado para eliminar texto detrás de la caja)"
@@ -3406,17 +3462,17 @@ label = "Divisiones Verticales"
placeholder = "Introduzca el número de divisiones verticales"
[split-by-sections.splitMode]
label = "Split Mode"
description = "Choose how to split the pages"
splitAll = "Split all pages"
splitAllExceptFirst = "Split all except first"
splitAllExceptLast = "Split all except last"
splitAllExceptFirstAndLast = "Split all except first and last"
custom = "Custom pages"
label = "Modo de división"
description = "Elige cómo dividir las páginas"
splitAll = "Dividir todas las páginas"
splitAllExceptFirst = "Dividir todas excepto la primera"
splitAllExceptLast = "Dividir todas excepto la última"
splitAllExceptFirstAndLast = "Dividir todas excepto la primera y la última"
custom = "Páginas personalizadas"
[split-by-sections.customPages]
label = "Custom Page Numbers"
placeholder = "e.g. 2,4,6"
label = "Números de página personalizados"
placeholder = "p. ej. 2,4,6"
[AddStampRequest]
tags = "Sello, Añadir imagen, centrar imagen, Marca de agua, PDF, Incrustar, Personalizar"
@@ -3780,17 +3836,17 @@ filesize = "Tamaño de archivo"
label = "Aplicar escala de grises para compresión"
[compress.linearize]
label = "Linearize PDF for fast web viewing"
label = "Linealizar PDF para visualización web rápida"
[compress.lineArt]
label = "Convert images to line art"
description = "Uses ImageMagick to reduce pages to high-contrast black and white for maximum size reduction."
unavailable = "ImageMagick is not installed or enabled on this server"
detailLevel = "Detail level"
edgeEmphasis = "Edge emphasis"
edgeLow = "Gentle"
edgeMedium = "Balanced"
edgeHigh = "Strong"
label = "Convertir imágenes a arte lineal"
description = "Usa ImageMagick para reducir las páginas a blanco y negro de alto contraste para una máxima reducción de tamaño."
unavailable = "ImageMagick no está instalado o habilitado en este servidor"
detailLevel = "Nivel de detalle"
edgeEmphasis = "Énfasis de bordes"
edgeLow = "Suave"
edgeMedium = "Equilibrado"
edgeHigh = "Fuerte"
[compress.tooltip.header]
title = "Resumen de Configuración de Compresión"
@@ -3810,8 +3866,8 @@ title = "Escala de Grises"
text = "Seleccione esta opción para convertir todas las imágenes a blanco y negro, lo que puede reducir significativamente el tamaño del archivo, especialmente para PDFs escaneados o documentos con muchas imágenes."
[compress.tooltip.lineArt]
title = "Line Art"
text = "Convert pages to high-contrast black and white using ImageMagick. Use detail level to control how much content becomes black, and edge emphasis to control how aggressively edges are detected."
title = "Arte lineal"
text = "Convierte las páginas a blanco y negro de alto contraste usando ImageMagick. Usa el nivel de detalle para controlar cuánto contenido se vuelve negro y el énfasis de bordes para controlar cuán agresivamente se detectan los bordes."
[compress.error]
failed = "Ocurrió un error al comprimir el PDF."
@@ -3826,9 +3882,9 @@ _value = "Configuración de Compresión"
1 = "1-3 compresión PDF,</br> 4-6 compresión de imagen suave,</br> 7-9 compresión de imágenes intensa reducirá drásticamente la calidad de imagen"
[compress.compressionLevel]
range1to3 = "Lower values preserve quality but result in larger files"
range4to6 = "Medium compression with moderate quality reduction"
range7to9 = "Higher values reduce file size significantly but may reduce image clarity"
range1to3 = "Valores bajos preservan la calidad pero generan archivos más grandes"
range4to6 = "Compresión media con reducción moderada de calidad"
range7to9 = "Valores altos reducen significativamente el tamaño pero pueden disminuir la claridad de las imágenes"
[decrypt]
passwordPrompt = "Este archivo está protegido con contraseña. Por favor, introduzca la contraseña:"
@@ -4069,7 +4125,7 @@ deleteSelected = "Eliminar Páginas Seleccionadas"
closePdf = "Cerrar PDF"
exportAll = "Exportar PDF"
downloadSelected = "Descargar Archivos Seleccionados"
annotations = "Annotations"
annotations = "Anotaciones"
exportSelected = "Exportar páginas seleccionadas"
saveChanges = "Guardar cambios"
toggleTheme = "Alternar Tema"
@@ -4077,84 +4133,90 @@ language = "Idioma"
toggleAnnotations = "Mostrar/ocultar anotaciones"
search = "Buscar en PDF"
panMode = "Modo de Desplazamiento"
applyRedactionsFirst = "Aplica primero las censuras"
rotateLeft = "Rotar a la Izquierda"
rotateRight = "Rotar a la Derecha"
toggleSidebar = "Alternar Barra Lateral"
toggleBookmarks = "Mostrar/ocultar marcadores"
print = "Imprimir PDF"
draw = "Dibujar"
redact = "Censurar"
exitRedaction = "Salir del modo de censura"
save = "Guardar"
downloadAll = "Descargar Todo"
saveAll = "Guardar todo"
[textAlign]
left = "Left"
center = "Center"
right = "Right"
left = "Izquierda"
center = "Centrado"
right = "Derecha"
[annotation]
title = "Annotate"
desc = "Use highlight, pen, text, and notes. Changes stay live—no flattening required."
highlight = "Highlight"
pen = "Pen"
text = "Text box"
note = "Note"
rectangle = "Rectangle"
ellipse = "Ellipse"
select = "Select"
exit = "Exit annotation mode"
strokeWidth = "Width"
opacity = "Opacity"
strokeOpacity = "Stroke Opacity"
fillOpacity = "Fill Opacity"
fontSize = "Font size"
chooseColor = "Choose colour"
color = "Colour"
strokeColor = "Stroke Colour"
fillColor = "Fill Colour"
underline = "Underline"
strikeout = "Strikeout"
squiggly = "Squiggly"
inkHighlighter = "Freehand Highlighter"
freehandHighlighter = "Freehand Highlighter"
square = "Square"
circle = "Circle"
polygon = "Polygon"
line = "Line"
stamp = "Add Image"
textMarkup = "Text Markup"
drawing = "Drawing"
shapes = "Shapes"
notesStamps = "Notes & Stamps"
settings = "Settings"
borderOn = "Border: On"
borderOff = "Border: Off"
editInk = "Edit Pen"
editLine = "Edit Line"
editNote = "Edit Note"
editText = "Edit Text Box"
editTextMarkup = "Edit Text Markup"
editSelected = "Edit Annotation"
editSquare = "Edit Square"
editCircle = "Edit Circle"
editPolygon = "Edit Polygon"
unsupportedType = "This annotation type is not fully supported for editing."
textAlignment = "Text Alignment"
noteIcon = "Note Icon"
imagePreview = "Preview"
contents = "Text"
backgroundColor = "Background colour"
clearBackground = "Remove background"
noBackground = "No background"
stampSettings = "Stamp Settings"
savingCopy = "Preparing download..."
saveFailed = "Unable to save copy"
saveReady = "Download ready"
selectAndMove = "Select and Edit"
editSelectDescription = "Click an existing annotation to edit its colour, opacity, text, or size."
editStampHint = "To change the image, delete this stamp and add a new one."
editSwitchToSelect = "Switch to Select & Edit to edit this annotation."
undo = "Undo"
redo = "Redo"
applyChanges = "Apply Changes"
title = "Anotar"
desc = "Usa resaltado, lápiz, texto y notas. Los cambios permanecen activos: no es necesario aplanar."
highlight = "Resaltar"
pen = "Lápiz"
text = "Cuadro de texto"
note = "Nota"
rectangle = "Rectángulo"
ellipse = "Elipse"
select = "Seleccionar"
exit = "Salir del modo de anotación"
strokeWidth = "Grosor"
opacity = "Opacidad"
strokeOpacity = "Opacidad del trazo"
fillOpacity = "Opacidad del relleno"
fontSize = "Tamaño de fuente"
chooseColor = "Elegir color"
color = "Color"
strokeColor = "Color del trazo"
fillColor = "Color de relleno"
underline = "Subrayado"
strikeout = "Tachado"
squiggly = "Ondulado"
inkHighlighter = "Resaltador a mano alzada"
freehandHighlighter = "Resaltador a mano alzada"
square = "Cuadrado"
circle = "Círculo"
polygon = "Polígono"
line = "Línea"
stamp = "Añadir imagen"
textMarkup = "Marcado de texto"
drawing = "Dibujo"
shapes = "Formas"
notesStamps = "Notas y sellos"
settings = "Ajustes"
borderOn = "Borde: Activado"
borderOff = "Borde: Desactivado"
editInk = "Editar lápiz"
editLine = "Editar línea"
editNote = "Editar nota"
editText = "Editar cuadro de texto"
editTextMarkup = "Editar marcado de texto"
editSelected = "Editar anotación"
editSquare = "Editar cuadrado"
editCircle = "Editar círculo"
editPolygon = "Editar polígono"
unsupportedType = "Este tipo de anotación no es totalmente compatible con la edición."
textAlignment = "Alineación del texto"
noteIcon = "Icono de nota"
imagePreview = "Vista previa"
contents = "Texto"
backgroundColor = "Color de fondo"
clearBackground = "Eliminar fondo"
noBackground = "Sin fondo"
stampSettings = "Ajustes del sello"
savingCopy = "Preparando descarga..."
saveFailed = "No se pudo guardar la copia"
saveReady = "Descarga lista"
selectAndMove = "Seleccionar y editar"
editSelectDescription = "Haz clic en una anotación existente para editar su color, opacidad, texto o tamaño."
editStampHint = "Para cambiar la imagen, elimina este sello y añade uno nuevo."
editSwitchToSelect = "Cambia a Seleccionar y Editar para editar esta anotación."
undo = "Deshacer"
redo = "Rehacer"
applyChanges = "Aplicar cambios"
saveChanges = "Guardar cambios"
[search]
title = "Buscar PDF"
@@ -4205,20 +4267,20 @@ settings = "Ajustes"
adminSettings = "Ajustes admin"
allTools = "Herram."
reader = "Lector"
tours = "Tours"
showMeAround = "Show me around"
tours = "Recorridos"
showMeAround = "Muéstrame cómo funciona"
[quickAccess.toursTooltip]
admin = "Watch walkthroughs here: Tools tour, New V2 layout tour, and the Admin tour."
user = "Watch walkthroughs here: Tools tour and the New V2 layout tour."
admin = "Mira los recorridos aquí: Recorrido de Herramientas, del nuevo diseño V2 y de Administración."
user = "Mira los recorridos aquí: Recorrido de Herramientas y del nuevo diseño V2."
[quickAccess.helpMenu]
toolsTour = "Recorrido por las herramientas"
toolsTourDesc = "Descubre lo que pueden hacer las herramientas"
adminTour = "Recorrido de administración"
adminTourDesc = "Explora la configuración y las funciones de administración"
whatsNewTour = "See what's new in V2"
whatsNewTourDesc = "Tour the updated layout"
whatsNewTour = "Ver qué hay de nuevo en V2"
whatsNewTourDesc = "Recorre el diseño actualizado"
[admin]
error = "Error"
@@ -4237,6 +4299,8 @@ fetchError = "Error al cargar la configuración"
saveError = "Error al guardar la configuración"
saved = "Configuración guardada correctamente"
saveSuccess = "Configuración guardada correctamente"
success = "Ajustes guardados correctamente"
error = "Error al guardar los ajustes"
save = "Guardar cambios"
discard = "Descartar"
restartRequired = "Se requiere reiniciar"
@@ -4360,6 +4424,13 @@ description = "Ruta al ejecutable de WeasyPrint para la conversión de HTML a PD
label = "Ejecutable de Unoconvert"
description = "Ruta a LibreOffice unoconvert para conversiones de documentos (dejar vacío para el valor predeterminado: /opt/venv/bin/unoconvert)"
[admin.settings.general.frontendUrl]
label = "Frontend URL"
description = "URL base para el frontend (p. ej., https://pdf.example.com). Se usa para enlaces de invitación por correo y subidas por código QR desde el móvil. Déjalo vacío para usar la URL del backend."
[admin.settings.badge]
clickToUpgrade = "Haz clic para ver los detalles del plan"
[admin.settings.security]
title = "Seguridad"
description = "Configura autenticación, comportamiento de inicio de sesión y políticas de seguridad."
@@ -4496,6 +4567,19 @@ connect = "Conectar"
disconnect = "Desconectar"
disconnected = "Proveedor desconectado correctamente"
disconnectError = "No se pudo desconectar el proveedor"
mobileScannerConvertToPdf = "Convertir imágenes a PDF"
mobileScannerConvertToPdfDesc = "Convertir automáticamente las imágenes subidas a formato PDF. Si se desactiva, las imágenes se conservarán tal cual."
mobileScannerImageResolution = "Resolución de imagen"
mobileScannerImageResolutionDesc = "Resolución de las imágenes subidas. \"Reducida\" escala las imágenes a un máximo de 1200px para reducir el tamaño del archivo."
imageResolutionFull = "Completa (tamaño original)"
imageResolutionReduced = "Reducida (máx. 1200px)"
mobileScannerPageFormat = "Formato de página"
mobileScannerPageFormatDesc = "Tamaño de página del PDF para imágenes convertidas. \"Mantener\" usa las dimensiones originales de la imagen."
pageFormatKeep = "Mantener (dimensiones originales)"
pageFormatA4 = "A4 (210×297mm)"
pageFormatLetter = "Letter (8.5×11in)"
mobileScannerStretchToFit = "Ajustar para encajar"
mobileScannerStretchToFitDesc = "Estirar las imágenes para llenar toda la página. Si se desactiva, las imágenes se centran preservando la relación de aspecto."
[admin.settings.connections.ssoAutoLogin]
label = "Inicio de sesión automático SSO"
@@ -4564,6 +4648,122 @@ description = "Crear cuentas de usuario automáticamente en el primer inicio de
label = "Bloquear el registro"
description = "Evitar el registro de nuevos usuarios mediante SAML2"
[admin.settings.connections.mobileScanner]
label = "Subida desde teléfono móvil"
enable = "Habilitar subida por código QR"
description = "Permitir que los usuarios suban archivos desde dispositivos móviles escaneando un código QR"
note = "Nota: Requiere configurar la Frontend URL. "
link = "Configurar en Ajustes del sistema"
mobileScannerConvertToPdf = "Convertir imágenes a PDF"
mobileScannerConvertToPdfDesc = "Convertir automáticamente las imágenes subidas a formato PDF. Si se desactiva, las imágenes se conservarán tal cual."
mobileScannerImageResolution = "Resolución de imagen"
mobileScannerImageResolutionDesc = "Resolución de las imágenes subidas. \"Reducida\" escala las imágenes a un máximo de 1200px para reducir el tamaño del archivo."
imageResolutionFull = "Completa (tamaño original)"
imageResolutionReduced = "Reducida (máx. 1200px)"
mobileScannerPageFormat = "Formato de página"
mobileScannerPageFormatDesc = "Tamaño de página del PDF para imágenes convertidas. \"Mantener\" usa las dimensiones originales de la imagen."
pageFormatKeep = "Mantener (dimensiones originales)"
pageFormatA4 = "A4 (210×297mm)"
pageFormatLetter = "Letter (8.5×11in)"
mobileScannerStretchToFit = "Ajustar para encajar"
mobileScannerStretchToFitDesc = "Estirar las imágenes para llenar toda la página. Si se desactiva, las imágenes se centran preservando la relación de aspecto."
[admin.settings.telegram]
title = "Bot de Telegram"
description = "Configura la conectividad del bot de Telegram, controles de acceso y comportamiento de retroalimentación."
[admin.settings.telegram.enabled]
label = "Habilitar bot de Telegram"
description = "Permite a los usuarios interactuar con Stirling PDF a través de tu bot de Telegram configurado."
[admin.settings.telegram.botUsername]
label = "Nombre de usuario del bot"
description = "El nombre de usuario público de tu bot de Telegram."
[admin.settings.telegram.botToken]
label = "Bot Token"
description = "Token de API proporcionado por BotFather para tu bot de Telegram."
[admin.settings.telegram.pipelineInboxFolder]
label = "Carpeta de entrada"
description = "Carpeta bajo el directorio de pipeline donde se almacenan los archivos entrantes de Telegram."
[admin.settings.telegram.customFolderSuffix]
label = "Usar sufijo de carpeta personalizado"
description = "Agregar el ID del chat a las carpetas de archivos entrantes para aislar subidas por chat."
[admin.settings.telegram.accessControl]
title = "Control de acceso"
description = "Restringe qué usuarios o canales pueden interactuar con el bot."
[admin.settings.telegram.enableAllowUserIDs]
label = "Permitir ID de usuario específicos"
description = "Cuando está habilitado, solo los ID de usuario listados pueden usar el bot."
[admin.settings.telegram.allowUserIDs]
label = "ID de usuario permitidos"
description = "Introduce los ID de usuario de Telegram permitidos para interactuar con el bot."
placeholder = "Añade el ID de usuario y pulsa Enter"
[admin.settings.telegram.enableAllowChannelIDs]
label = "Permitir ID de canal específicos"
description = "Cuando está habilitado, solo los ID de canal listados pueden usar el bot."
[admin.settings.telegram.allowChannelIDs]
label = "ID de canal permitidos"
description = "Introduce los ID de canal de Telegram permitidos para interactuar con el bot."
placeholder = "Añade el ID de canal y pulsa Enter"
[admin.settings.telegram.processing]
title = "Procesamiento"
description = "Controla los intervalos de sondeo y tiempos de espera para subidas de Telegram."
[admin.settings.telegram.processingTimeoutSeconds]
label = "Tiempo de espera de procesamiento (segundos)"
description = "Tiempo máximo de espera para un trabajo de procesamiento antes de informar un error."
[admin.settings.telegram.pollingIntervalMillis]
label = "Intervalo de sondeo (ms)"
description = "Intervalo entre comprobaciones de nuevas actualizaciones de Telegram."
[admin.settings.telegram.feedback]
title = "Mensajes de retroalimentación"
description = "Elige cuándo el bot debe enviar retroalimentación a usuarios y canales."
[admin.settings.telegram.feedback.general.enabled]
label = "Habilitar retroalimentación"
description = "Controla si el bot envía mensajes de retroalimentación en absoluto."
[admin.settings.telegram.feedback.channel]
title = "Reglas de retroalimentación en canales"
[admin.settings.telegram.feedback.channel.noValidDocument]
label = "Mostrar \"Sin documento válido\" (Canal)"
description = "Suprimir la respuesta de sin documento válido para subidas en canales."
[admin.settings.telegram.feedback.channel.errorProcessing]
label = "Mostrar errores de procesamiento (Canal)"
description = "Enviar mensajes de error de procesamiento a los canales."
[admin.settings.telegram.feedback.channel.errorMessage]
label = "Mostrar mensajes de error (Canal)"
description = "Mostrar mensajes de error detallados para los canales."
[admin.settings.telegram.feedback.user]
title = "Reglas de retroalimentación a usuarios"
[admin.settings.telegram.feedback.user.noValidDocument]
label = "Mostrar \"Sin documento válido\" (Usuario)"
description = "Suprimir la respuesta de sin documento válido para subidas de usuarios."
[admin.settings.telegram.feedback.user.errorProcessing]
label = "Mostrar errores de procesamiento (Usuario)"
description = "Enviar mensajes de error de procesamiento a los usuarios."
[admin.settings.telegram.feedback.user.errorMessage]
label = "Mostrar mensajes de error (Usuario)"
description = "Mostrar mensajes de error detallados para los usuarios."
[admin.settings.database]
title = "Base de datos"
description = "Configura ajustes de conexión de base de datos personalizados para despliegues empresariales."
@@ -4745,6 +4945,10 @@ description = "Permitir a los administradores invitar usuarios por correo con co
label = "URL del frontend"
description = "URL base del frontend (p. ej. https://pdf.example.com). Se usa para generar enlaces de invitación en emails. Deja vacío para usar la URL del backend."
[admin.settings.mail.frontendUrlNote]
note = "Nota: Requiere configurar la Frontend URL. "
link = "Configurar en Ajustes del sistema"
[admin.settings.legal]
title = "Documentos legales"
description = "Configura enlaces a documentos y políticas legales."
@@ -4929,6 +5133,9 @@ googleDriveShort = "Drive"
myFiles = "Mis Archivos"
noRecentFiles = "No se encontraron archivos recientes"
googleDriveNotAvailable = "Integración con Google Drive no disponible"
mobileUpload = "Subida desde móvil"
mobileShort = "Móvil"
mobileUploadNotAvailable = "Subida desde móvil no habilitada"
downloadSelected = "Descargar Seleccionados"
saveSelected = "Guardar seleccionados"
openFiles = "Abrir Archivos"
@@ -5244,7 +5451,7 @@ loading = "Cargando..."
back = "Atrás"
continue = "Continuar"
error = "Error"
save = "Save"
save = "Guardar"
[config.overview]
title = "Configuración de la aplicación"
@@ -5307,6 +5514,15 @@ impact = "Cualquier aplicación o servicio que esté utilizando actualmente esta
confirmPrompt = "¿Está seguro de que desea continuar?"
confirmCta = "Actualizar Claves"
[config.apiKeys.alert]
apiKeyErrorTitle = "Error de clave de API"
failedToCreateApiKey = "No se pudo crear la clave de API."
failedToRetrieveApiKey = "No se pudo obtener la clave de API de la respuesta."
failedToFetchApiKey = "No se pudo recuperar la clave de API."
apiKeyRefreshed = "Clave de API actualizada"
apiKeyRefreshedBody = "Tu clave de API se ha actualizado correctamente."
failedToRefreshApiKey = "No se pudo actualizar la clave de API."
[AddAttachmentsRequest]
attachments = "Seleccionar archivos adjuntos"
info = "Seleccione archivos para adjuntar a su PDF. Estos archivos se incrustarán y serán accesibles a través del panel de archivos adjuntos del PDF."
@@ -5412,14 +5628,14 @@ startTour = "Iniciar recorrido"
startTourDescription = "Realiza un recorrido guiado por las funciones clave de Stirling PDF"
[onboarding.whatsNew]
quickAccess = "Start at the <strong>Quick Access</strong> rail to jump between Reader, Automate, your files, and all the tours."
leftPanel = "The left <strong>Tools</strong> panel lists everything you can do. Browse categories or search to find a tool quickly."
fileUpload = "Use the <strong>Files</strong> button to upload or pick a recent PDF. We will load a sample so you can see the workspace."
rightRail = "The <strong>Right Rail</strong> holds quick actions to select files, change theme or language, and download results."
topBar = "The top bar lets you swap between <strong>Viewer</strong>, <strong>Page Editor</strong>, and <strong>Active Files</strong>."
pageEditorView = "Switch to the Page Editor to reorder, rotate, or delete pages."
activeFilesView = "Use Active Files to see everything you have open and pick what to work on."
wrapUp = "That is what is new in V2. Open the <strong>Tours</strong> menu anytime to replay this, the Tools tour, or the Admin tour."
quickAccess = "Empieza en el panel de <strong>Acceso rápido</strong> para cambiar entre Lector, Automatizar, tus archivos y todos los recorridos."
leftPanel = "El panel izquierdo de <strong>Herramientas</strong> lista todo lo que puedes hacer. Explora categorías o busca para encontrar una herramienta rápidamente."
fileUpload = "Usa el botón de <strong>Archivos</strong> para subir o elegir un PDF reciente. Cargaremos un ejemplo para que puedas ver el espacio de trabajo."
rightRail = "El <strong>Panel derecho</strong> contiene acciones rápidas para seleccionar archivos, cambiar el tema o el idioma y descargar resultados."
topBar = "La barra superior te permite cambiar entre <strong>Visor</strong>, <strong>Editor de páginas</strong> y <strong>Archivos activos</strong>."
pageEditorView = "Cambia al Editor de páginas para reordenar, rotar o eliminar páginas."
activeFilesView = "Usa Archivos activos para ver todo lo que tienes abierto y elegir en qué trabajar."
wrapUp = "Eso es lo nuevo en V2. Abre el menú de <strong>Recorridos</strong> en cualquier momento para repetir este, el de Herramientas o el de Administración."
[onboarding.welcomeModal]
title = "¡Bienvenido a Stirling PDF!"
@@ -5442,8 +5658,8 @@ showMeAround = "Muéstreme el recorrido"
skipTheTour = "Saltar el recorrido"
[onboarding.tourOverview]
title = "Tour Overview"
body = "Stirling PDF V2 ships with dozens of tools and a refreshed layout. Take a quick tour to see what changed and where to find the features you need."
title = "Resumen del recorrido"
body = "Stirling PDF V2 incluye decenas de herramientas y un diseño renovado. Haz un recorrido rápido para ver qué cambió y dónde encontrar las funciones que necesitas."
[onboarding.serverLicense]
skip = "Omitir por ahora"
@@ -5452,7 +5668,7 @@ upgrade = "Actualizar ahora →"
freeTitle = "Licencia del servidor"
overLimitTitle = "Se necesita licencia de servidor"
overLimitBody = "Nuestra licencia permite hasta <strong>{{freeTierLimit}}</strong> usuarios gratis por servidor. Tiene <strong>{{overLimitUserCopy}}</strong> usuarios de Stirling. Para continuar sin interrupciones, actualice al plan Stirling Server: <strong>plazas ilimitadas</strong>, edición de texto PDF y control total de administración por 99 $/servidor/mes."
freeBody = "Nuestra licencia <strong>Open-Core</strong> permite hasta <strong>{{freeTierLimit}}</strong> usuarios gratis por servidor. Para escalar sin interrupciones, recomendamos el plan Stirling Server - <strong>plazas ilimitadas</strong> y <strong>soporte SSO</strong> por $99/servidor/mes."
freeBody = "Nuestra licencia <strong>Open-Core</strong> permite hasta <strong>{{freeTierLimit}}</strong> usuarios gratis por servidor. Para escalar sin interrupciones y obtener acceso anticipado a nuestra nueva <strong>herramienta de edición de texto PDF</strong>, recomendamos el plan Stirling Server: edición completa y <strong>plazas ilimitadas</strong> por 99 $/servidor/mes."
[onboarding.desktopInstall]
title = "Descargar"
@@ -5524,7 +5740,7 @@ user = "Usuario"
[workspace.people.addMember]
title = "Añadir miembro"
username = "Nombre de usuario (correo)"
usernamePlaceholder = "usuario@ejemplo.com"
usernamePlaceholder = "user@example.com"
password = "Contraseña"
passwordPlaceholder = "Introduce la contraseña"
role = "Rol"
@@ -5586,7 +5802,7 @@ error = "No se pudo actualizar la contraseña"
tab = "Invitación por correo electrónico"
description = "Escribe o pega correos a continuación, separados por comas. Los usuarios recibirán credenciales de inicio de sesión por correo electrónico."
emails = "Direcciones de correo electrónico"
emailsPlaceholder = "usuario1@ejemplo.com, usuario2@ejemplo.com"
emailsPlaceholder = "user1@example.com, user2@example.com"
emailsRequired = "Se requiere al menos una dirección de correo electrónico"
submit = "Enviar invitaciones"
success = "usuario(s) invitado(s) correctamente"
@@ -5758,28 +5974,28 @@ contactSales = "Contactar con ventas"
contactToUpgrade = "Contacta con nosotros para actualizar o personalizar tu plan"
maxUsers = "Máximo de usuarios"
upTo = "Hasta"
getLicense = "Get Server License"
upgradeToEnterprise = "Upgrade to Enterprise"
selectPeriod = "Select Billing Period"
monthlyBilling = "Monthly Billing"
yearlyBilling = "Yearly Billing"
checkoutOpened = "Checkout Opened"
checkoutInstructions = "Complete your purchase in the Stripe tab. After payment, return here and refresh the page to activate your license. You will also receive an email with your license key."
activateLicense = "Activate Your License"
getLicense = "Obtener licencia de servidor"
upgradeToEnterprise = "Actualizar a Enterprise"
selectPeriod = "Seleccionar período de facturación"
monthlyBilling = "Facturación mensual"
yearlyBilling = "Facturación anual"
checkoutOpened = "Proceso de pago abierto"
checkoutInstructions = "Completa tu compra en la pestaña de Stripe. Después del pago, vuelve aquí y actualiza la página para activar tu licencia. También recibirás un correo con tu clave de licencia."
activateLicense = "Activa tu licencia"
[plan.static.licenseActivation]
checkoutOpened = "Checkout Opened in New Tab"
instructions = "Complete your purchase in the Stripe tab. Once your payment is complete, you will receive an email with your license key."
enterKey = "Enter your license key below to activate your plan:"
keyDescription = "Paste the license key from your email"
activate = "Activate License"
doLater = "I'll do this later"
success = "License Activated!"
successMessage = "Your license has been successfully activated. You can now close this window."
checkoutOpened = "Pago abierto en nueva pestaña"
instructions = "Completa tu compra en la pestaña de Stripe. Una vez completado el pago, recibirás un correo con tu clave de licencia."
enterKey = "Introduce tu clave de licencia a continuación para activar tu plan:"
keyDescription = "Pega la clave de licencia de tu correo"
activate = "Activar licencia"
doLater = "Lo haré más tarde"
success = "¡Licencia activada!"
successMessage = "Tu licencia se ha activado correctamente. Ya puedes cerrar esta ventana."
[plan.static.billingPortal]
title = "Email Verification Required"
message = "You will need to verify your email address in the Stripe billing portal. Check your email for a login link."
title = "Se requiere verificación de correo"
message = "Deberás verificar tu dirección de correo electrónico en el portal de facturación de Stripe. Revisa tu correo para un enlace de inicio de sesión."
[plan.period]
month = "mes"
@@ -5908,7 +6124,7 @@ emailInvalid = "Introduzca una dirección de correo válida"
title = "Introduzca su correo electrónico"
description = "Lo usaremos para enviar su clave de licencia y recibos."
emailLabel = "Dirección de correo electrónico"
emailPlaceholder = "su@email.com"
emailPlaceholder = "your@email.com"
continue = "Continuar"
modalTitle = "Comenzar - {{planName}}"
@@ -5983,8 +6199,8 @@ notAvailable = "Sistema de auditoría no disponible"
notAvailableMessage = "El sistema de auditoría no está configurado o no está disponible."
disabled = "El registro de auditoría está desactivado"
disabledMessage = "Habilita el registro de auditoría en la configuración de tu aplicación para rastrear eventos del sistema."
enterpriseRequired = "Enterprise License Required"
enterpriseRequiredMessage = "The audit logging system is an enterprise feature. Please upgrade to an enterprise license to access audit logs and analytics."
enterpriseRequired = "Se requiere licencia Enterprise"
enterpriseRequiredMessage = "El sistema de registro de auditoría es una función empresarial. Actualiza a una licencia Enterprise para acceder a los registros de auditoría y analíticas."
[audit.error]
title = "Error al cargar el sistema de auditoría"
@@ -6156,6 +6372,7 @@ description = "Introduzca la URL completa de su servidor autoalojado de Stirling
[setup.server.error]
emptyUrl = "Introduzca una URL de servidor"
invalidUrl = "Formato de URL no válido. Introduce una URL válida como https://your-server.com"
unreachable = "No se pudo conectar con el servidor"
testFailed = "Falló la prueba de conexión"
configFetch = "No se pudo obtener la configuración del servidor. Compruebe la URL e inténtelo de nuevo."
@@ -6174,6 +6391,7 @@ connectingTo = "Conectando a:"
submit = "Iniciar sesión"
signInWith = "Iniciar sesión con"
oauthPending = "Abriendo el navegador para autenticación..."
sso = "Inicio de sesión único"
orContinueWith = "O continuar con email"
serverRequirement = "Nota: el servidor debe tener el inicio de sesión habilitado."
showInstructions = "¿Cómo habilitarlo?"
@@ -6188,7 +6406,7 @@ label = "Nombre de usuario"
placeholder = "Introduzca su nombre de usuario"
[setup.login.email]
label = "Correo electrónico"
label = "Email"
placeholder = "Introduzca su email"
[setup.login.password]
@@ -6225,7 +6443,7 @@ paragraph = "Página de párrafos"
sparse = "Texto disperso"
[pdfTextEditor.groupingMode]
auto = "Automático"
auto = "Auto"
paragraph = "Párrafo"
singleLine = "Línea única"
@@ -6239,8 +6457,8 @@ reset = "Restablecer cambios"
downloadJson = "Descargar JSON"
generatePdf = "Generar PDF"
saveChanges = "Guardar cambios"
applyChanges = "Apply Changes"
downloadCopy = "Download Copy"
applyChanges = "Aplicar cambios"
downloadCopy = "Descargar copia"
[pdfTextEditor.options.autoScaleText]
title = "Escalar texto automáticamente para ajustar a las cajas"
@@ -6260,22 +6478,22 @@ title = "Bloquear el texto editado a un único elemento PDF"
description = "Cuando está activado, el editor exporta cada cuadro de texto editado como un único elemento de texto PDF para evitar solapamientos de glifos o fuentes mezcladas."
[pdfTextEditor.options.advanced]
title = "Advanced Settings"
title = "Ajustes avanzados"
[pdfTextEditor.tooltip.header]
title = "Preview Limitations"
title = "Limitaciones de la vista previa"
[pdfTextEditor.tooltip.textFocus]
title = "Text and Image Focus"
text = "This workspace focuses on editing text and repositioning embedded images. Complex page artwork, form widgets, and layered graphics are preserved for export but are not fully editable here."
title = "Enfoque en texto e imagen"
text = "Este espacio de trabajo se centra en editar texto y recolocar imágenes incrustadas. Las ilustraciones de página complejas, widgets de formularios y gráficos por capas se preservan para la exportación pero no son totalmente editables aquí."
[pdfTextEditor.tooltip.previewVariance]
title = "Preview Variance"
text = "Some visuals (such as table borders, shapes, or annotation appearances) may not display exactly in the preview. The exported PDF keeps the original drawing commands whenever possible."
title = "Variaciones de la vista previa"
text = "Algunos elementos visuales (como bordes de tablas, formas o apariencias de anotaciones) pueden no mostrarse exactamente en la vista previa. El PDF exportado mantiene las órdenes de dibujo originales siempre que sea posible."
[pdfTextEditor.tooltip.alpha]
title = "Alpha Viewer"
text = "This alpha viewer is still evolving—certain fonts, colours, transparency effects, and layout details may shift slightly. Please double-check the generated PDF before sharing."
title = "Visor alfa"
text = "Este visor alfa sigue evolucionando—ciertas fuentes, colores, efectos de transparencia y detalles de maquetación pueden variar ligeramente. Verifica el PDF generado antes de compartirlo."
[pdfTextEditor.manual]
mergeTooltip = "Combinar cuadros seleccionados"
@@ -6398,3 +6616,58 @@ title = "Resultados de añadir texto"
[addText.error]
failed = "Se produjo un error al añadir texto al PDF."
[mobileUpload]
title = "Subir desde el móvil"
description = "Escanea para subir fotos. Las imágenes se convierten automáticamente a PDF."
descriptionNoConvert = "Escanea para subir fotos desde tu dispositivo móvil."
error = "Error de conexión"
pollingError = "Error al comprobar archivos"
sessionId = "ID de sesión"
sessionCreateError = "No se pudo crear la sesión"
expiryWarning = "La sesión expirará pronto"
expiryWarningMessage = "Este código QR caducará en {{seconds}} segundos. Se generará un nuevo código automáticamente."
filesReceived = "{{count}} archivo(s) recibido(s)"
connected = "Dispositivo móvil conectado"
instructions = "Escanéalo con la cámara de tu teléfono. Las imágenes se convierten a PDF automáticamente."
instructionsNoConvert = "Escanéalo con la cámara de tu teléfono para subir archivos."
[mobileScanner]
title = "Escáner móvil"
noSession = "Sesión no válida"
noSessionMessage = "Escanea un código QR válido para acceder a esta página."
validating = "Validando la sesión..."
sessionInvalid = "Error de sesión"
sessionExpired = "Esta sesión ha caducado. Actualiza e inténtalo de nuevo."
sessionNotFound = "Sesión no encontrada. Actualiza e inténtalo de nuevo."
sessionValidationError = "No se puede verificar la sesión. Inténtalo de nuevo."
uploadSuccess = "¡Subida correcta!"
uploadSuccessMessage = "Tus imágenes han sido transferidas."
httpsRequired = "El acceso a la cámara requiere HTTPS o localhost. Usa HTTPS o accede vía localhost."
uploadFailed = "La subida ha fallado. Inténtalo de nuevo."
uploading = "Subiendo..."
connected = "Conectado"
connecting = "Conectando..."
chooseMethod = "Elige el método de subida"
chooseMethodDescription = "Selecciona cómo quieres escanear y subir documentos"
camera = "Cámara"
cameraDescription = "Escanea documentos usando la cámara de tu dispositivo con detección automática de bordes"
fileUpload = "Subir archivo"
fileDescription = "Sube fotos o documentos existentes desde tu dispositivo"
cameraAccessDenied = "Acceso a la cámara denegado. Habilita el acceso a la cámara."
back = "Atrás"
settings = "Ajustes"
edgeDetection = "Detección de bordes"
flashlight = "Linterna"
flash = "Flash"
processing = "Procesando..."
capture = "Capturar foto"
selectFilesPrompt = "Selecciona archivos para subir"
selectImage = "Seleccionar imagen"
preview = "Vista previa"
retake = "Volver a tomar"
addToBatch = "Añadir al lote"
upload = "Subir"
batchImages = "Lote"
clearBatch = "Limpiar"
uploadAll = "Subir todo"