The manager had only Esc and the scale keys: its list took one Tab stop per row with no arrows, a stack's rename / delete / open-in-tabs buttons existed only on hover, and no action had a key. - Commands (the manager keymap scope, remappable like the rest): new connection with focus in Name, new stack, save, connect — or open the focused stack in tabs — delete the focused row, rename the focused stack, import from WinSCP, close the window. - The list: up/down/Home/End move focus between rows (focus only: loading a connection would discard a half-edited form), Enter opens the focused connection, left/right collapse and expand a stack, and a stack's actions show while the keyboard is in its row. - Enter in a form field connects; Esc leaves a field before it closes the window; Tab is walked by hand (WKWebView skips buttons and radios); focus comes back after a dialog and never stays lost on <body>. - Tooltips show the keys; the Settings → Keyboard fixed-key list gains the manager's. Co-Authored-By: Claude <noreply@anthropic.com>
432 lines
15 KiB
TypeScript
432 lines
15 KiB
TypeScript
// Spanish translations. Missing keys fall back to English (see en.ts / index.ts).
|
|
export const es = {
|
|
common: {
|
|
cancel: "Cancelar",
|
|
save: "Guardar",
|
|
close: "Cerrar",
|
|
delete: "Eliminar",
|
|
rename: "Renombrar",
|
|
create: "Crear",
|
|
apply: "Aplicar",
|
|
choose: "Elegir…",
|
|
connect: "Conectar",
|
|
local: "Local",
|
|
},
|
|
app: {
|
|
notConnectedTitle: "No conectado a la aplicación",
|
|
notConnectedBody: "Esta página se ejecuta en un navegador normal. Abre la aplicación de escritorio para usarla.",
|
|
managerOpen: "El gestor de conexiones está abierto.",
|
|
showConnections: "Mostrar conexiones",
|
|
},
|
|
tabBar: {
|
|
connections: "Conexiones",
|
|
manageConnections: "Gestionar conexiones",
|
|
newTab: "Nueva pestaña",
|
|
closeTab: "Cerrar pestaña",
|
|
options: "Ajustes",
|
|
update: "Actualización disponible",
|
|
updating: "Actualizando",
|
|
restartToUpdate: "Reiniciar para aplicar",
|
|
updateTooltip: "Actualización disponible: miniSCP {version}",
|
|
},
|
|
options: {
|
|
title: "Ajustes",
|
|
sections: {
|
|
appearance: "Apariencia",
|
|
transfers: "Transferencias",
|
|
editor: "Editor",
|
|
fileList: "Lista de archivos",
|
|
keyboard: "Teclado",
|
|
about: "Acerca de",
|
|
},
|
|
columns: "Columnas visibles",
|
|
language: "Idioma",
|
|
system: "Sistema",
|
|
theme: { label: "Tema", system: "Sistema", light: "Claro", dark: "Oscuro" },
|
|
tone: { label: "Tono", dark: "Oscuro", darker: "AMOLED" },
|
|
interface: { label: "Interfaz", smaller: "Más pequeña", larger: "Más grande", reset: "Restablecer al 100%" },
|
|
speedUnit: { label: "Unidad de velocidad" },
|
|
transfers: { label: "Transferencias", single: "Una", multi: "Varias" },
|
|
atOnce: "A la vez",
|
|
editor: { label: "Editor", builtin: "Integrado", custom: "Personalizado" },
|
|
systemDefault: "Predeterminado del sistema",
|
|
resetDefault: "Restablecer al predeterminado",
|
|
finishedTransfers: { label: "Transferencias completadas", autoClear: "Auto-limpiar", keep: "Mantener" },
|
|
openFiles: { label: "Intro / doble clic en un archivo", nothing: "No hacer nada", open: "Abrir", hint: "Los archivos locales se abren con su app predeterminada; las carpetas siempre se abren." },
|
|
},
|
|
kinds: {
|
|
folder: "Carpeta",
|
|
symlink: "Enlace simbólico",
|
|
file: "Archivo",
|
|
image: "Imagen",
|
|
audio: "Audio",
|
|
video: "Vídeo",
|
|
archive: "Archivo comprimido",
|
|
code: "Código",
|
|
document: "Documento",
|
|
},
|
|
columns: {
|
|
name: "Nombre",
|
|
size: "Tamaño",
|
|
mtime: "Modificado",
|
|
kind: "Tipo",
|
|
rights: "Permisos",
|
|
owner: "Propietario",
|
|
group: "Grupo",
|
|
},
|
|
panel: {
|
|
choosePanel: "Elige qué muestra este panel",
|
|
copy: "Enviar",
|
|
copyToRight: "Enviar al panel derecho",
|
|
copyToLeft: "Enviar al panel izquierdo",
|
|
edit: "Editar",
|
|
editFile: "Editar archivo",
|
|
rename: "Renombrar",
|
|
newFolder: "Nueva carpeta",
|
|
newFile: "Nuevo archivo",
|
|
permissions: "Permisos",
|
|
delete: "Eliminar",
|
|
parentDir: "Carpeta superior",
|
|
refresh: "Actualizar",
|
|
clearFilter: "Borrar filtro (Esc)",
|
|
sshConfig: "~/.ssh/config",
|
|
connectingTo: "Conectando con {name}…",
|
|
emptyDir: "Carpeta vacía",
|
|
noMatches: "Sin coincidencias",
|
|
matches: { one: "{count} coincidencia · Esc", other: "{count} coincidencias · Esc" },
|
|
},
|
|
connMgr: {
|
|
title: "Conexiones",
|
|
importWinscp: "Importar de WinSCP…",
|
|
importWinscpHint: "Importar sesiones de una exportación WinSCP.ini",
|
|
newConnection: "Conexión",
|
|
newConnectionHint: "Nueva conexión",
|
|
newStack: "Grupo",
|
|
newStackHint: "Nuevo grupo",
|
|
expand: "Expandir",
|
|
collapse: "Contraer",
|
|
renameStack: "Renombrar grupo",
|
|
deleteStack: "Eliminar grupo",
|
|
openStack: "Abrir grupo en pestañas",
|
|
empty: "vacío",
|
|
connectionsHeader: "Conexiones",
|
|
noneTitle: "Aún no hay conexiones guardadas.",
|
|
noneBody: "Crea una o importa tus sesiones de WinSCP.",
|
|
name: "Nombre",
|
|
namePlaceholder: "mi servidor",
|
|
host: "Servidor",
|
|
port: "Puerto",
|
|
stack: "Grupo",
|
|
stackNone: "(ninguno)",
|
|
username: "Usuario",
|
|
remotePath: "Ruta remota (opcional)",
|
|
remotePathPlaceholder: "carpeta de inicio",
|
|
auth: "Autenticación",
|
|
authPassword: "Contraseña",
|
|
authKey: "Clave privada",
|
|
password: "Contraseña",
|
|
privateKeyFile: "Archivo de clave privada",
|
|
passphrase: "Frase de contraseña (opcional)",
|
|
localDir: "Carpeta local (opcional)",
|
|
localDirPlaceholder: "~/proyectos/mi-servidor",
|
|
localDirHint: "El otro panel se abre aquí cuando está en Local y no se ha navegado.",
|
|
more: "Más…",
|
|
less: "Menos…",
|
|
selectPrompt: "Selecciona una conexión o crea una nueva.",
|
|
newStackTitle: "Nuevo grupo",
|
|
newStackPrompt: "nombre del grupo",
|
|
renameStackTitle: "Renombrar grupo",
|
|
deleteStackTitle: "Eliminar grupo",
|
|
deleteStackBody: '¿Eliminar el grupo "{name}"? Sus conexiones se mantienen, sin agrupar.',
|
|
deleteConnectionTitle: "Eliminar conexión",
|
|
deleteConnectionBody: '¿Eliminar "{name}"?',
|
|
},
|
|
editor: {
|
|
noFileTitle: "Ningún archivo que editar",
|
|
noFileBody: "Esta ventana se abrió sin contexto de editor. Abre archivos desde la aplicación.",
|
|
wrap: "Ajustar",
|
|
wrapHint: "Ajustar líneas largas — oculta los números de línea",
|
|
findHint: "Buscar",
|
|
findPlaceholder: "Buscar en el archivo",
|
|
prevMatch: "Coincidencia anterior",
|
|
nextMatch: "Coincidencia siguiente",
|
|
closeHint: "Cerrar (Esc)",
|
|
disconnected: "Desconectado de {name} — no se podrá guardar, pero tu texto se conserva en esta ventana.",
|
|
cantOpen: "No se puede abrir {name}",
|
|
closeWindow: "Cerrar ventana",
|
|
verbs: { save: "guardar", find: "buscar", close: "cerrar" },
|
|
lines: { one: "{count} línea", other: "{count} líneas" },
|
|
close: "Cerrar",
|
|
save: "Guardar",
|
|
saveChangesTitle: '¿Guardar los cambios en "{name}"?',
|
|
saveChangesBody: "Perderás tus cambios si no los guardas.",
|
|
dontSave: "No guardar",
|
|
countLabel: "{current} de {total}",
|
|
noMatches: "Sin coincidencias",
|
|
},
|
|
transfer: {
|
|
summary: "{active} activas · {finished} completadas",
|
|
clearFinished: "Limpiar completadas",
|
|
cancel: "Cancelar",
|
|
dismiss: "Descartar",
|
|
showDetails: "Ver detalles de transferencias",
|
|
copying: "Copiando {name} · {percent}%{speed}",
|
|
queued: "{count} en cola",
|
|
failed: { one: "{count} transferencia fallida", other: "{count} transferencias fallidas" },
|
|
finished: "Transferencias completadas",
|
|
ready: "Listo",
|
|
items: "{count} elementos",
|
|
selected: "{count} seleccionados",
|
|
queuedState: "En cola",
|
|
scanning: "Analizando…",
|
|
failedState: "Fallida",
|
|
cancelled: "Cancelada",
|
|
completedFiles: { one: "{count} archivo · {size}", other: "{count} archivos · {size}" },
|
|
left: "{eta} restante",
|
|
},
|
|
dialogs: {
|
|
chmodTitle: "Permisos",
|
|
chmodItems: "{count} elementos",
|
|
read: "Lectura",
|
|
write: "Escritura",
|
|
execute: "Ejecución",
|
|
roleOwner: "Propietario",
|
|
roleGroup: "Grupo",
|
|
roleOthers: "Otros",
|
|
octal: "Octal",
|
|
mergeFolder: "Combinar carpeta",
|
|
replace: "Reemplazar",
|
|
merge: "Combinar",
|
|
mergeAll: "Combinar todo",
|
|
replaceAll: "Reemplazar todo",
|
|
skip: "Omitir",
|
|
skipAll: "Omitir todo",
|
|
ofTotal: "{index} de {total}",
|
|
overwriteDirBody: "El destino ya tiene una carpeta con este nombre. Combinar puede reemplazar archivos dentro.",
|
|
overwriteFileBody: "El destino ya tiene un archivo con este nombre.",
|
|
source: "Origen",
|
|
destination: "Destino",
|
|
newer: "más reciente",
|
|
},
|
|
toasts: {
|
|
movedToTrash: 'Se movió "{name}" a la papelera',
|
|
movedManyToTrash: { one: "Se movió {count} elemento a la papelera", other: "Se movieron {count} elementos a la papelera" },
|
|
editingExternal: "Editando {name} — los cambios se suben automáticamente",
|
|
nothingToCopy: "Nada que copiar (los enlaces simbólicos se omiten)",
|
|
nothingToCopyAllSkipped: "Nada que copiar — se omitieron todos los elementos en conflicto",
|
|
sameFolder: "Ambos paneles muestran la misma carpeta",
|
|
sameFile: 'Se omitió "{name}" — es el mismo archivo',
|
|
typeMismatch: 'Se omitió "{name}" — hay otro tipo de elemento en el camino',
|
|
transferFailed: 'La transferencia "{name}" falló: {error}',
|
|
unknownError: "error desconocido",
|
|
saved: "Se guardó {name}",
|
|
disconnectedReason: "{title}: desconectado ({reason})",
|
|
imported: { one: "Se importó {count} conexión", other: "Se importaron {count} conexiones" },
|
|
importedIntoStacks: { one: " en {count} grupo nuevo", other: " en {count} grupos nuevos" },
|
|
importedSkipped: " ({skipped} omitidas)",
|
|
leftoverTitle: "Archivos editados sobrantes",
|
|
leftoverMore: ", +{count} más",
|
|
leftoverBody: {
|
|
one: "Una sesión anterior dejó {count} archivo editado temporal ({names}). ¿Eliminarlo?",
|
|
other: "Una sesión anterior dejó {count} archivos editados temporales ({names}). ¿Eliminarlos?",
|
|
},
|
|
leftoverClear: "Eliminar",
|
|
},
|
|
fileActions: {
|
|
deleteTitle: "Eliminar",
|
|
deleteBody: "¿Eliminar {what}? Las carpetas se eliminan de forma recursiva. Esto no se puede deshacer.",
|
|
deleteConfirm: "Eliminar",
|
|
renameTitle: 'Renombrar "{name}"',
|
|
renameConfirm: "Renombrar",
|
|
newFolderTitle: "Nueva carpeta",
|
|
newFolderPlaceholder: "nombre de la carpeta",
|
|
newFileTitle: "Nuevo archivo",
|
|
newFilePlaceholder: "nombre del archivo",
|
|
createConfirm: "Crear",
|
|
itemsCount: "{count} elementos",
|
|
},
|
|
menu: {
|
|
about: "Acerca de {app}",
|
|
settings: "Ajustes…",
|
|
checkForUpdates: "Buscar actualizaciones…",
|
|
quit: "Salir",
|
|
file: "Archivo",
|
|
newTab: "Nueva pestaña",
|
|
closeTab: "Cerrar pestaña",
|
|
newFolder: "Nueva carpeta",
|
|
newFile: "Nuevo archivo",
|
|
editFile: "Editar archivo",
|
|
connect: "Conectar",
|
|
connectionManager: "Gestor de conexiones…",
|
|
edit: "Edición",
|
|
view: "Ver",
|
|
refresh: "Actualizar",
|
|
window: "Ventana",
|
|
},
|
|
ctx: {
|
|
size: "Tamaño",
|
|
modified: "Modificado",
|
|
kind: "Tipo",
|
|
rights: "Permisos",
|
|
owner: "Propietario",
|
|
group: "Grupo",
|
|
revealFinder: "Mostrar en Finder",
|
|
revealExplorer: "Mostrar en el Explorador",
|
|
revealFileManager: "Mostrar en el gestor de archivos",
|
|
moveToTrash: "Mover a la papelera",
|
|
moveToRecycleBin: "Mover a la papelera de reciclaje",
|
|
newFolder: "Nueva carpeta",
|
|
newFile: "Nuevo archivo",
|
|
refresh: "Actualizar",
|
|
open: "Abrir",
|
|
openDefault: "Abrir con la aplicación predeterminada",
|
|
edit: "Editar",
|
|
copyToOther: "Enviar al otro panel",
|
|
rename: "Renombrar",
|
|
permissions: "Permisos",
|
|
copyPath: "Copiar ruta",
|
|
delete: "Eliminar",
|
|
columns: "Columnas",
|
|
tabNew: "Nueva pestaña",
|
|
tabClose: "Cerrar pestaña",
|
|
tabCloseOthers: "Cerrar las demás pestañas",
|
|
tabCloseRight: "Cerrar pestañas a la derecha",
|
|
tabDisconnect: "Desconectar",
|
|
trashTooltip: "La opción Restaurar de Finder no está disponible para elementos enviados a la papelera desde aquí",
|
|
},
|
|
keys: {
|
|
"cursor-up": "Subir",
|
|
"cursor-down": "Bajar",
|
|
"page-up": "Página arriba",
|
|
"page-down": "Página abajo",
|
|
"cursor-first": "Primer elemento",
|
|
"cursor-last": "Último elemento",
|
|
"toggle-select": "Seleccionar / deseleccionar",
|
|
"select-all": "Seleccionar todo",
|
|
open: "Abrir",
|
|
parent: "Carpeta superior",
|
|
"switch-panel": "Cambiar de panel",
|
|
"row-menu": "Mostrar el menú del elemento",
|
|
send: "Enviar al otro panel",
|
|
edit: "Editar",
|
|
rename: "Renombrar",
|
|
"new-folder": "Nueva carpeta",
|
|
"new-file": "Nuevo archivo",
|
|
chmod: "Permisos",
|
|
delete: "Eliminar",
|
|
trash: "Mover a la papelera",
|
|
"copy-path": "Copiar ruta",
|
|
reveal: "Mostrar en el gestor de archivos",
|
|
"open-default": "Abrir con la app predeterminada",
|
|
refresh: "Actualizar",
|
|
"focus-path": "Ir a la ruta",
|
|
"source-picker": "Elegir qué muestra el panel",
|
|
"sort-name": "Ordenar por nombre",
|
|
"sort-size": "Ordenar por tamaño",
|
|
"sort-mtime": "Ordenar por fecha de modificación",
|
|
"sort-kind": "Ordenar por tipo",
|
|
"sort-rights": "Ordenar por permisos",
|
|
"sort-owner": "Ordenar por propietario",
|
|
"sort-group": "Ordenar por grupo",
|
|
"new-tab": "Nueva pestaña",
|
|
"close-tab": "Cerrar pestaña",
|
|
"close-other-tabs": "Cerrar las demás pestañas",
|
|
"close-tabs-right": "Cerrar las pestañas de la derecha",
|
|
"next-tab": "Pestaña siguiente",
|
|
"prev-tab": "Pestaña anterior",
|
|
"go-to-tab": "Ir a la pestaña {n}",
|
|
"go-to-last-tab": "Ir a la última pestaña",
|
|
"move-tab-left": "Mover la pestaña a la izquierda",
|
|
"move-tab-right": "Mover la pestaña a la derecha",
|
|
"disconnect-tab": "Desconectar la pestaña",
|
|
"open-settings": "Ajustes",
|
|
"connection-manager": "Gestor de conexiones",
|
|
"toggle-transfers": "Mostrar / ocultar transferencias",
|
|
"install-update": "Instalar la actualización",
|
|
"scale-up": "Interfaz más grande",
|
|
"scale-down": "Interfaz más pequeña",
|
|
"scale-reset": "Interfaz al 100 %",
|
|
"close-window": "Cerrar la ventana",
|
|
save: "Guardar",
|
|
find: "Buscar",
|
|
"find-next": "Buscar siguiente",
|
|
"find-prev": "Buscar anterior",
|
|
"toggle-wrap": "Ajustar líneas",
|
|
"conn-new": "Nueva conexión",
|
|
"conn-new-stack": "Nuevo grupo",
|
|
"conn-save": "Guardar la conexión",
|
|
"conn-connect": "Conectar / abrir grupo",
|
|
"conn-delete": "Eliminar conexión o grupo",
|
|
"conn-rename-stack": "Renombrar grupo",
|
|
"conn-import": "Importar de WinSCP",
|
|
groups: {
|
|
panels: "Lista de archivos",
|
|
files: "Archivos",
|
|
sort: "Orden",
|
|
tabs: "Pestañas",
|
|
window: "Ventana",
|
|
editor: "Editor",
|
|
connections: "Gestor de conexiones",
|
|
},
|
|
ui: {
|
|
filter: "Buscar atajos",
|
|
intro: "Pulsa + y teclea las teclas para añadir un atajo. El primero es el que muestran los menús y las pistas.",
|
|
add: "Añadir un atajo",
|
|
remove: "Quitar {key}",
|
|
reset: "Restablecer el predeterminado",
|
|
resetAll: "Restablecer todo",
|
|
resetAllConfirm: "Restablecer todos los atajos",
|
|
press: "Pulsa las teclas… ({esc} cancela)",
|
|
unbound: "Sin atajo",
|
|
reserved: "{key} está reservado por el sistema",
|
|
needsModifier: "En el editor {key} solo escribiría: añade un modificador o usa una tecla F",
|
|
usedBy: "{key} ya lo usa «{action}»",
|
|
replace: "Reemplazar",
|
|
conflict: "Misma tecla que {action}",
|
|
plainLetter: "Teclear {key} en la lista de archivos ya no la filtra",
|
|
noResults: "Ningún atajo coincide",
|
|
fixed: "Teclas fijas",
|
|
},
|
|
fixed: {
|
|
escape: "{esc} cierra menús, diálogos y la barra de búsqueda",
|
|
escList: "{esc} en la lista de archivos borra el filtro, luego cancela una conexión y luego quita la selección",
|
|
dialogs: "{enter} y {esc} confirman o cancelan un diálogo; {tab} y {shiftTab} recorren sus controles",
|
|
menus: "↑ ↓ {home} {end} y {enter} funcionan en todos los menús",
|
|
filter: "Teclear en la lista de archivos la filtra; {backspace} borra el último carácter del filtro",
|
|
shift: "Mayús con una tecla de movimiento selecciona las filas por las que pasa el cursor",
|
|
find: "{enter} y {shiftEnter} recorren las coincidencias de la búsqueda",
|
|
manager: "↑ ↓ ← → y {enter} recorren la lista de conexiones",
|
|
sidebar: "↑ ↓ cambian de sección aquí",
|
|
},
|
|
names: {
|
|
ctrl: "Ctrl",
|
|
alt: "Alt",
|
|
shift: "Mayús",
|
|
enter: "Intro",
|
|
backspace: "Retroceso",
|
|
del: "Supr",
|
|
esc: "Esc",
|
|
space: "Espacio",
|
|
tab: "Tab",
|
|
pgup: "RePág",
|
|
pgdn: "AvPág",
|
|
home: "Inicio",
|
|
end: "Fin",
|
|
ins: "Insert",
|
|
menu: "Menú",
|
|
num: "Num",
|
|
},
|
|
},
|
|
errors: {
|
|
sshAgentUnavailable: "ssh-agent no disponible (SSH_AUTH_SOCK no está definido)",
|
|
identityFileNotFound: "archivo de identidad no encontrado: {path}",
|
|
sessionNotConnected: 'La sesión "{id}" no está conectada',
|
|
localCannotDisconnect: "La sesión local no se puede desconectar",
|
|
notADirectory: '"{path}" existe y no es una carpeta',
|
|
sameFileTransfer: '"{name}": el origen y el destino son el mismo archivo',
|
|
sameFileNoName: "El origen y el destino son el mismo archivo",
|
|
folderOntoItself: "No se puede copiar una carpeta sobre sí misma",
|
|
folderIntoItself: "No se puede copiar una carpeta dentro de sí misma",
|
|
},
|
|
} as const;
|