chore: Translate the strings missing from every locale

Thirty-three locales were short the same sixty-six keys and had been since
2.2.1. Fifty-six of them are the two-factor setup and the auto-logout
preference; six are the two-factor challenge itself; the rest are the promo
strings the banner rotates through.

The six in `login.js` were the urgent ones. They render during sign-in, before
`core.js` is fetched, so a user with two-factor enabled met the whole challenge
in English — on the one screen they cannot get past without understanding it.
Three of those six exist in `core.js` as well and now read identically in both
files, which nothing checks and which two translators working from two files
would otherwise have got subtly different.

Plural forms follow each language rather than the English pair: Arabic carries
all six CLDR categories with the agreement its counting requires, Czech,
Polish, Russian, Slovak and Ukrainian four with the right case in each, and
Chinese, Japanese, Korean, Vietnamese and Indonesian only `other`, since a
`_one` variant would be a form i18next never reads.

Every file is additions only — no existing line was moved, reworded or
reformatted, so the diff shows what was missing and nothing else. Several
existing mistranslations turned up along the way and were left alone; they are
a separate concern from filling the gaps.
This commit is contained in:
Daniel Hiller
2026-09-08 19:54:41 +02:00
parent 9069b24cfb
commit 26b512193a
66 changed files with 2687 additions and 0 deletions
+76
View File
@@ -97,6 +97,15 @@ export default {
attachment: 'Archivo adjunto',
attachments: 'Archivos adjuntos',
authentication: 'Autenticación',
autoLogout: 'Cierre de sesión automático',
autoLogout_10m: 'Después de 10 minutos',
autoLogout_12h: 'Después de 12 horas',
autoLogout_2m: 'Después de 2 minutos',
autoLogout_30m: 'Después de 30 minutos',
autoLogout_5m: 'Después de 5 minutos',
autoLogout_never: 'Nunca',
autoLogoutWarning_body: 'Se cerrará tu sesión en {{seconds}}s por inactividad.',
autoLogoutWarning_title: 'Tu sesión se cerrará pronto',
background: 'Fondo',
baseCustomFields_title: 'Campos personalizados base',
baseGroup: 'Grupo base',
@@ -130,6 +139,8 @@ export default {
closed: 'Cerrado',
color: 'Color',
comments: 'Comentarios',
confirmCodesSaved: 'He guardado estos códigos en un lugar seguro.',
confirmPassword: 'Confirmar contraseña',
contentExceedsLimit: 'El contenido excede {{limit}}',
contentOfThisAttachmentIsTooBigToDisplay:
'El contenido de este archivo adjunto es demasiado grande para mostrarse.',
@@ -182,6 +193,9 @@ export default {
deleteWebhook_title: 'Eliminar webhook',
deletedUser_title: 'Usuario eliminado',
description: 'Descripción',
disable2fa_title: 'Desactivar la autenticación de dos factores',
disable2faWarning:
'Tendrás que confirmar tu contraseña actual y un código TOTP. Las sesiones existentes seguirán iniciadas.',
display: 'Mostrar',
displayCardAges: 'Mostrar antigüedad de las tarjetas',
dropFileToUpload: 'Arrastra archivo para subir',
@@ -206,14 +220,21 @@ export default {
editors: 'Editores',
email: 'Correo electrónico',
emptyTrash_title: 'Vaciar papelera',
enable2fa_title: 'Activar la autenticación de dos factores',
enabledOn: 'Activada el {{date}}',
enterCardTitle: 'Introduce el título de la tarjeta...',
enterCodeFromApp: 'Introduce el código de 6 dígitos de tu aplicación de autenticación.',
enterDescription: 'Introduce una descripción...',
enterFilename: 'Introduce el nombre del archivo',
enterListTitle: 'Introduce el título de la lista...',
enterPasswordToContinue: 'Confirma tu contraseña actual para continuar.',
enterTaskDescription: 'Introduce la descripción de la tarea...',
enterTotpOrRecoveryCode:
'Introduce el código de 6 dígitos de tu aplicación de autenticación o uno de tus códigos de recuperación (xxxxx-xxxxx).',
events: 'Eventos',
excludedEvents: 'Eventos excluidos',
expandTaskListsByDefault: 'Expandir listas de tareas por defecto',
expires: 'Caduca',
filterByLabels_title: 'Filtrar por etiquetas',
filterByMembers_title: 'Filtrar por miembros',
forPersonalProjects: 'Para proyectos personales.',
@@ -233,9 +254,11 @@ export default {
importBoard_title: 'Importar tablero',
information: 'Información',
invalidCurrentPassword: 'Contraseña actual incorrecta',
invalidTotpCode: 'Código TOTP o de recuperación no válido',
kanban: 'Kanban',
labels: 'Etiquetas',
language: 'Idioma',
lastUsed: 'Último uso',
leaveBoard_title: 'Abandonar tablero',
leaveProject_title: 'Abandonar proyecto',
limitCardTypesToDefaultOne: 'Limitar tipos de tarjeta al predeterminado',
@@ -255,6 +278,7 @@ export default {
moveList_title: 'Mover lista',
myOwn_title: 'Mis propios',
name: 'Nombre',
never: 'Nunca',
newEmail: 'Nuevo correo electrónico',
newPassword: 'Nueva contraseña',
newUsername: 'Nuevo nombre de usuario',
@@ -266,6 +290,7 @@ export default {
noConnectionToServer: 'Sin conexión al servidor',
noLists: 'Sin listas',
noProjects: 'Sin proyectos',
noTrustedDevices: 'No hay dispositivos de confianza.',
noUnreadNotifications: 'Sin notificaciones sin leer.',
notifications: 'Notificaciones',
oldestFirst: 'Más antiguos primero',
@@ -273,6 +298,7 @@ export default {
'Solo debe quedar un gestor para hacer este proyecto privado',
openBoard_title: 'Abrir tablero',
optional_inline: 'opcional',
orEnterSecretManually: 'O introduce esta clave secreta manualmente:',
organization: 'Organización',
others: 'Otros',
passwordIsSet: 'La contraseña está establecida',
@@ -284,16 +310,42 @@ export default {
pressPasteShortcutToAddAttachmentFromClipboard:
'Consejo: pulsa Ctrl-V (Cmd-V en Mac) para añadir un archivo adjunto desde el portapapeles.',
private: 'Privado',
proFeatureDashboard: '✨ Un panel para todos tus proyectos',
proFeatureExport: '✨ Tarjetas en PDF para tus informes',
proFeatureMobile: '✨ PLANKA en móviles y tabletas',
proFeatureSso: '✨ Inicio de sesión con el directorio de tu empresa (SSO)',
proFeatureThemes: '✨ Cinco temas y tu propio color de acento',
proFeatureTimeline: '✨ Cronología: todo un año en un solo eje',
proTrialSelfHosted: '✨ Prueba PLANKA Pro durante 30 días en tu propio servidor',
project: 'Proyecto',
projectNotFound_title: 'Proyecto no encontrado',
projectOwner: 'Propietario del proyecto',
recoveryCodesExhausted:
'Se han usado todos los códigos de recuperación. Genera un conjunto nuevo para conservar una alternativa por si pierdes el acceso a tu aplicación de autenticación.',
recoveryCodesIntro:
'Guarda estos códigos en un lugar seguro — cada uno se puede usar una sola vez si pierdes el acceso a tu aplicación de autenticación.',
recoveryCodesLow_one:
'Solo queda {{count}} código de recuperación. Considera regenerarlos pronto.',
recoveryCodesLow_many:
'Solo quedan {{count}} de códigos de recuperación. Considera regenerarlos pronto.',
recoveryCodesLow_other:
'Solo quedan {{count}} códigos de recuperación. Considera regenerarlos pronto.',
referenceDataAndKnowledgeStorage: 'Almacenamiento de datos de referencia y conocimiento.',
regenerateApiKey_title: 'Regenerar clave API',
regenerateRecoveryCodes_title: 'Regenerar códigos de recuperación',
regenerateRecoveryCodesIntro:
'Al generar códigos nuevos, todos los códigos de recuperación existentes dejarán de ser válidos.',
rejectUnauthorizedTlsCertificates: 'Rechazar certificados TLS no autorizados',
removeManager_title: 'Eliminar gestor',
removeMember_title: 'Eliminar miembro',
reset2fa_title: 'Restablecer 2FA',
reset2faWarning:
'Al restablecer la 2FA se cierran todas las sesiones del usuario y se elimina su configuración de TOTP. Tendrá que configurarla de nuevo en el próximo inicio de sesión.',
role: 'Rol',
saveTheseCodes_title: 'Guardar estos códigos de recuperación',
saveThisKeyItWillNotBeShownAgain: '¡Guarda esta clave, no se mostrará de nuevo!',
scanQrCodeWithApp:
'Escanea este código QR con una aplicación de autenticación como Google Authenticator o Authy.',
searchCards: 'Buscar tarjetas...',
searchCustomFieldGroups: 'Buscar grupos de campos personalizados...',
searchCustomFields: 'Buscar campos personalizados...',
@@ -303,6 +355,7 @@ export default {
searchProjects: 'Buscar proyectos...',
searchUsers: 'Buscar usuarios...',
seconds: 'Segundos',
security_title: 'Seguridad',
selectAssignee_title: 'Seleccionar asignado',
selectBoard: 'Seleccionar tablero',
selectList: 'Seleccionar lista',
@@ -338,11 +391,21 @@ export default {
'No hay vista previa disponible para este archivo adjunto.',
time: 'Hora',
title: 'Título',
totpCode: 'Código TOTP',
totpOrRecoveryCode: 'Código TOTP o de recuperación',
trash: 'Papelera',
trashHasBeenSuccessfullyEmptied: 'La papelera se ha vaciado correctamente.',
trustedDevices_title: 'Navegadores de confianza',
trustedDevicesHint:
'Los navegadores marcados como de confianza omiten el segundo factor durante 30 días. Revoca los que ya no reconozcas.',
turnOffRecentCardHighlighting: 'Desactivar resaltado de tarjetas recientes',
twoFactor_enabled: 'La autenticación de dos factores está activada.',
twoFactor_intro:
'Añade una capa de seguridad adicional a tu cuenta usando un código de un solo uso basado en tiempo de una aplicación de autenticación.',
twoFactorAuthentication: 'Autenticación de dos factores',
typeNameToConfirm: 'Escribe el nombre para confirmar.',
typeTitleToConfirm: 'Escribe el título para confirmar.',
unknownDevice: 'Dispositivo desconocido',
unsavedChanges: 'Cambios sin guardar',
uploadFailedFileIsTooBig: 'Error al subir: El archivo es demasiado grande.',
uploadFailedNotEnoughStorageSpace:
@@ -412,8 +475,11 @@ export default {
archiveCards: 'Archivar tarjetas',
archiveCards_title: 'Archivar tarjetas',
assignAsOwner: 'Asignar como propietario',
back: 'Atrás',
cancel: 'Cancelar',
changePassword: 'Cambiar contraseña',
copy: 'Copiar',
copyAll: 'Copiar todo',
copyCard_title: 'Copiar tarjeta',
createApiKey: 'Crear clave API',
createBoard: 'Crear tablero',
@@ -453,7 +519,9 @@ export default {
deleteUser: 'Eliminar usuario',
deleteUser_title: 'Eliminar usuario',
deleteWebhook: 'Eliminar webhook',
disable2fa: 'Desactivar 2FA',
dismissAll: 'Descartar todo',
done: 'Hecho',
download: 'Descargar',
duplicateCard_title: 'Duplicar tarjeta',
edit: 'Editar',
@@ -473,12 +541,14 @@ export default {
editUsername_title: 'Editar nombre de usuario',
emptyTrash: 'Vaciar papelera',
emptyTrash_title: 'Vaciar papelera',
enable2fa: 'Activar 2FA',
import: 'Importar',
join: 'Unirse',
leave: 'Abandonar',
leaveBoard: 'Abandonar tablero',
leaveProject: 'Abandonar proyecto',
logOut_title: 'Cerrar sesión',
logOutNow: 'Cerrar sesión ahora',
makeCover_title: 'Hacer portada',
makeProjectPrivate: 'Hacer proyecto privado',
makeProjectPrivate_title: 'Hacer proyecto privado',
@@ -487,7 +557,9 @@ export default {
move: 'Mover',
moveCard_title: 'Mover tarjeta',
moveList_title: 'Mover lista',
regenerate: 'Regenerar',
regenerateApiKey: 'Regenerar clave API',
regenerateRecoveryCodes: 'Regenerar códigos de recuperación',
remove: 'Eliminar',
removeAssignee: 'Eliminar asignado',
removeColor: 'Eliminar color',
@@ -496,8 +568,10 @@ export default {
removeFromProject: 'Eliminar del proyecto',
removeManager: 'Eliminar gestor',
removeMember: 'Eliminar miembro',
reset2fa: 'Restablecer 2FA',
restoreToList: 'Restaurar a {{list}}',
returnToBoard: 'Volver al tablero',
revoke: 'Revocar',
save: 'Guardar',
sendTestEmail: 'Enviar correo de prueba',
showActive: 'Mostrar activos',
@@ -509,11 +583,13 @@ export default {
showMore: 'Mostrar más',
sortList_title: 'Ordenar lista',
start: 'Iniciar',
stayLoggedIn: 'Mantener la sesión iniciada',
stop: 'Detener',
subscribe: 'Suscribirse',
unsubscribe: 'Cancelar suscripción',
uploadNewAvatar: 'Subir nuevo avatar',
uploadNewImage: 'Subir nueva imagen',
verify: 'Verificar',
},
},
};