Files
yourpart3/frontend/src/i18n/locales/es/admin.json
Torsten Schulz (local) 3d2ccd620a
All checks were successful
Deploy to production / deploy (push) Successful in 2m52s
feat(localization): enhance course progress and review messaging across multiple languages
- Added new confirmation titles and messages for resetting and marking lessons as complete in admin and user interfaces.
- Expanded course flow and review scheduling messages to improve clarity and user guidance in Cebuano, German, Spanish, and English.
- Introduced a new section in the VocabCourseView to display today's recommended steps for users, enhancing the learning experience.
- Updated localization files to ensure consistent messaging and improved user engagement across all supported languages.
2026-04-02 13:49:59 +02:00

511 lines
24 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"admin": {
"interests": {
"title": "[Admin] - Administrar intereses",
"newinterests": {
"name": "Nombre del interés",
"status": "Aprobado",
"adultonly": "Solo para adultos",
"translations": "Traducciones",
"isactive": "Activado",
"isadult": "Solo para adultos",
"delete": "Eliminar"
}
},
"contacts": {
"title": "[Admin] - Solicitudes de contacto",
"date": "Fecha",
"from": "Remitente",
"actions": "Acciones",
"open": "Editar",
"finished": "Finalizar"
},
"editcontactrequest": {
"title": "[Admin] - Editar solicitud de contacto"
},
"user": {
"name": "Nombre de usuario",
"active": "Activo",
"blocked": "Bloqueado",
"actions": "Acciones",
"search": "Buscar"
},
"vocabLessonReset": {
"title": "Curso de idiomas: progreso de lección",
"intro": "Elimina el progreso, los resultados de ejercicios y el estado guardado de una sola lección (no todo el curso). Solo aparecen los cursos de idiomas en los que está inscrito este usuario.",
"loadCourses": "Cargar cursos inscritos",
"selectCourse": "Curso",
"selectLesson": "Lección",
"reset": "Restablecer lección para este usuario",
"confirmTitle": "Eliminar progreso de la lección",
"confirm": "¿Borrar de verdad el progreso de la lección «{lesson}» para {username}?",
"success": "Se restableció el progreso de la lección.",
"error": "No se pudo restablecer.",
"pickUserFirst": "Primero elige un usuario.",
"noEnrolledCourses": "Este usuario no está inscrito en ningún curso de idiomas.",
"loadCoursesError": "No se pudo cargar la lista de cursos.",
"loadingLessons": "Cargando lecciones…"
},
"vocabLessonMarkComplete": {
"divider": "Reparar progreso (no inventa resultados de ejercicios)",
"throughLabel": "Todas las lecciones hasta el número (incluido)",
"hint": "Marca filas faltantes o abiertas como completadas, con puntuación objetivo y primera ola de repaso. Las ya completadas no se cambian.",
"submit": "Marcar hasta aquí como completadas",
"confirmTitle": "Marcar lecciones como completadas",
"confirm": "¿Marcar todas las lecciones con número ≤ {n} para {username} en este curso como completadas?",
"success": "{marked} lección(es) marcadas como completadas ({unchanged} ya estaban hechas).",
"successNone": "Sin cambios: todas las lecciones afectadas ({unchanged}) ya estaban completadas.",
"error": "No se pudo marcar como completadas."
},
"adultVerification": {
"title": "[Admin] - Aprobaciones eróticas",
"intro": "Los usuarios adultos pueden solicitar acceso al área erótica. Aquí se revisan, aprueban o rechazan las solicitudes.",
"username": "Usuario",
"age": "Edad",
"statusLabel": "Estado",
"requestLabel": "Prueba",
"actions": "Acciones",
"approve": "Aprobar",
"reject": "Rechazar",
"resetPending": "Poner en revisión",
"openDocument": "Abrir documento",
"previewTitle": "Vista previa de la prueba",
"closePreview": "Cerrar vista previa",
"previewUnavailable": "No hay vista previa integrada para este tipo de archivo.",
"documentMissing": "El archivo de verificación no se encontró en el servidor.",
"empty": "No se han encontrado solicitudes.",
"loadError": "No se pudieron cargar las aprobaciones.",
"updateError": "No se pudo actualizar el estado.",
"documentError": "No se pudo abrir el documento.",
"filters": {
"pending": "Pendientes",
"approved": "Aprobadas",
"rejected": "Rechazadas",
"all": "Todas"
},
"status": {
"none": "No solicitada",
"pending": "En revisión",
"approved": "Aprobada",
"rejected": "Rechazada"
},
"messages": {
"approved": "Aprobación concedida.",
"rejected": "Aprobación rechazada.",
"pending": "La solicitud se ha vuelto a poner en revisión."
}
},
"eroticModeration": {
"title": "[Admin] - Moderación erótica",
"intro": "Aquí se pueden revisar, ocultar, eliminar o escalar imágenes y vídeos eróticos denunciados.",
"empty": "No se encontraron denuncias.",
"loadError": "No se pudieron cargar las denuncias.",
"actionError": "No se pudo ejecutar la acción de moderación.",
"actionSuccess": "La acción de moderación fue guardada.",
"target": "Objetivo",
"owner": "Propietario",
"reporter": "Denunciante",
"reason": "Motivo",
"statusLabel": "Estado",
"meta": "Hora / acción",
"actions": "Acciones",
"image": "Imagen",
"video": "Vídeo",
"hidden": "Oculto",
"preview": "Vista previa",
"previewError": "No se pudo cargar la vista previa.",
"dismiss": "Descartar",
"hide": "Ocultar",
"restore": "Restaurar",
"delete": "Eliminar",
"blockUploads": "Bloquear subidas",
"revokeAccess": "Retirar acceso erótico",
"notePrompt": "Nota para esta decisión de moderación",
"actionLabels": {
"dismiss": "Descartado",
"hide_content": "Oculto",
"restore_content": "Restaurado",
"delete_content": "Eliminado",
"block_uploads": "Subidas bloqueadas",
"revoke_access": "Acceso retirado"
},
"filters": {
"open": "Abierto",
"actioned": "Procesado",
"dismissed": "Descartado",
"all": "Todos"
},
"status": {
"open": "Abierto",
"actioned": "Procesado",
"dismissed": "Descartado"
}
},
"rights": {
"add": "Añadir permiso",
"select": "Por favor, selecciona",
"current": "Permisos actuales"
},
"forum": {
"title": "[Admin] - Forum",
"currentForums": "Foros existentes",
"edit": "Editar",
"delete": "Eliminar",
"createForum": "Crear",
"forumName": "Titel",
"create": "Crear",
"permissions": {
"label": "Berechtigungen",
"all": "Jeder",
"admin": "Nur Admins",
"teammember": "Nur Teammitglieder",
"user": "Nur bestimmte Benutzer",
"age": "Nur ab Alter 14"
},
"selectPermissions": "Por favor, selecciona",
"confirmDeleteMessage": "¿De verdad quieres eliminar el foro?",
"confirmDeleteTitle": "Eliminar foro"
},
"falukant": {
"edituser": {
"title": "Editar usuario de Falukant",
"username": "Nombre de usuario",
"characterName": "Nombre del personaje",
"user": "Usuario",
"success": "Los cambios se han guardado.",
"error": "No se pudieron guardar los cambios.",
"errorLoadingBranches": "Error al cargar las sucursales.",
"errorUpdatingStock": "Error al actualizar el almacén.",
"stockUpdated": "Almacén actualizado correctamente.",
"search": "Buscar",
"tabs": {
"userdata": "Datos del usuario",
"branches": "Sucursales"
},
"branches": {
"title": "Sucursales y almacén",
"noStocks": "No hay almacén",
"noBranches": "No se han encontrado sucursales",
"addStock": "Añadir almacén",
"stockType": "Tipo de almacén",
"selectStockType": "Seleccionar tipo de almacén",
"quantity": "Cantidad",
"allStocksAdded": "Todos los tipos de almacén disponibles ya existen"
},
"errorLoadingStockTypes": "Error al cargar los tipos de almacén.",
"errorAddingStock": "Error al añadir el almacén.",
"stockAdded": "Almacén añadido correctamente.",
"invalidStockData": "Por favor, introduce un tipo de almacén y una cantidad válidos.",
"pregnancy": {
"title": "Embarazo (admin)",
"characterId": "ID de personaje",
"status": "Estado",
"statusActive": "Embarazo hasta",
"statusNone": "No embarazada",
"fatherId": "ID del padre (opcional)",
"fatherSelect": "Padre (cónyuge / prometido / amante)",
"fatherNone": "— sin padre guardado —",
"fatherHintList": "Según las relaciones de este personaje (matrimonio, prometido, amante activo).",
"fatherHintManual": "Sin pareja adecuada en la base de datos: introduce manualmente el ID del padre.",
"fatherManualPlaceholder": "ID de personaje",
"dueDays": "Días hasta el parto previsto",
"dueDaysHint": "0 = parto previsto hoy (el nacimiento puede seguir según la lógica del juego).",
"force": "Establecer embarazo",
"clear": "Quitar embarazo",
"successForce": "Embarazo establecido.",
"successClear": "Embarazo eliminado.",
"error": "La acción ha fallado.",
"relationship": {
"married": "Cónyuge",
"engaged": "Prometido",
"lover": "Amante"
}
},
"birth": {
"title": "Forzar nacimiento (admin)",
"motherHint": "Se usa el personaje indicado arriba como madre.",
"fatherId": "ID del padre",
"fatherSelect": "Padre (cónyuge / prometido / amante)",
"fatherChoose": "— elegir padre —",
"fatherHintList": "Según las relaciones de este personaje.",
"fatherHintManual": "Sin pareja en la lista: introduce el ID del padre manualmente.",
"fatherRequired": "Elige un padre o introduce el ID de personaje.",
"context": "Contexto",
"contextMarriage": "Matrimonio",
"contextLover": "Amante",
"legitimacy": "Legitimidad",
"legitimate": "Legítimo",
"ackBastard": "Bastardo reconocido",
"hiddenBastard": "Bastardo oculto",
"gender": "Sexo del niño",
"genderRandom": "Aleatorio",
"male": "Masculino",
"female": "Femenino",
"force": "Provocar nacimiento",
"success": "Niño creado (bautizo pendiente).",
"error": "No se pudo provocar el nacimiento."
}
},
"map": {
"title": "Editor de mapas de Falukant (regiones)",
"description": "Dibuja rectángulos en el mapa de Falukant y asígnalos a ciudades.",
"tabs": {
"regions": "Posiciones",
"distances": "Distancias"
},
"regionList": "Ciudades",
"noCoords": "No se han establecido coordenadas",
"currentRect": "Rectángulo actual",
"hintDraw": "Elige una ciudad y dibuja un rectángulo con el ratón sobre el mapa para definir la posición.",
"saveAll": "Guardar todas las ciudades modificadas",
"connectionsTitle": "Conexiones (region_distance)",
"source": "Desde",
"target": "Hacia",
"selectSource": "Elegir ciudad origen",
"selectTarget": "Elegir ciudad destino",
"mode": "Transportart",
"modeLand": "Land",
"modeWater": "Wasser",
"modeAir": "Luft",
"distance": "Distancia",
"saveConnection": "Guardar conexión",
"pickOnMap": "Seleccionar en el mapa",
"errorSaveConnection": "No se pudo guardar la conexión.",
"errorDeleteConnection": "No se pudo eliminar la conexión.",
"confirmDeleteConnection": "¿Eliminar la conexión?"
},
"createNPC": {
"title": "Crear NPC",
"region": "Ciudad",
"allRegions": "Todas las ciudades",
"ageRange": "Rango de edad",
"to": "hasta",
"years": "años",
"titleRange": "Rango de títulos",
"count": "Cantidad por combinación ciudad-título",
"countHelp": "Esta cantidad se crea para cada combinación de ciudad y título seleccionados.",
"create": "Crear NPC",
"creating": "Creando...",
"result": "Resultado",
"createdCount": "Se han creado {count} NPC.",
"combinationInfo": "{perCombination} NPC por combinación × {combinations} combinaciones = {count} NPC en total",
"age": "Edad",
"errorLoadingRegions": "Error al cargar las ciudades.",
"errorLoadingTitles": "Error al cargar los títulos.",
"errorCreating": "Error al crear los NPC.",
"invalidAgeRange": "Rango de edad no válido.",
"invalidTitleRange": "Rango de títulos no válido.",
"invalidCount": "Cantidad no válida (1-500).",
"progress": "Progreso",
"progressDetails": "{current} de {total} NPC creados",
"timeRemainingSeconds": "Tiempo restante: {seconds} segundos",
"timeRemainingMinutes": "Tiempo restante: {minutes} minutos {seconds} segundos",
"almostDone": "Casi listo...",
"jobNotFound": "Trabajo no encontrado o caducado."
}
},
"chatrooms": {
"title": "[Admin] - Administrar salas de chat",
"roomName": "Nombre de la sala",
"create": "Crear sala de chat",
"edit": "Editar sala de chat",
"type": "Typ",
"isPublic": "Visible públicamente",
"isAdultOnly": "Solo área erótica",
"actions": "Acciones",
"genderRestriction": {
"show": "Activar restricción de género",
"label": "Restricción de género"
},
"minAge": {
"show": "Indicar edad mínima",
"label": "Edad mínima"
},
"maxAge": {
"show": "Indicar edad máxima",
"label": "Edad máxima"
},
"password": {
"show": "Activar protección con contraseña",
"label": "Contraseña"
},
"friendsOfOwnerOnly": "Nur Freunde des Besitzers",
"requiredUserRight": {
"show": "Indicar permiso de usuario requerido",
"label": "Permiso de usuario requerido"
},
"roomtype": {
"chat": "Chat",
"dice": "Dados",
"poker": "Poker",
"hangman": "Hangman"
},
"rights": {
"talk": "Hablar",
"scream": "Gritar",
"whisper": "Susurrar",
"start game": "Iniciar juego",
"open room": "Abrir sala",
"systemmessage": "Mensaje del sistema"
},
"confirmDelete": "¿De verdad quieres eliminar esta sala de chat?"
},
"match3": {
"title": "Administrar niveles de Match3",
"newLevel": "Crear nuevo nivel",
"editLevel": "Editar nivel",
"deleteLevel": "Eliminar nivel",
"confirmDelete": "¿De verdad quieres eliminar este nivel?",
"levelName": "Name",
"levelDescription": "Descripción",
"boardWidth": "Breite",
"boardHeight": "Altura",
"moveLimit": "Zug-Limit",
"levelOrder": "Reihenfolge",
"boardLayout": "Board-Layout",
"tileTypes": "Tipos de fichas disponibles",
"actions": "Acciones",
"edit": "Editar",
"delete": "Eliminar",
"save": "Guardar",
"cancel": "Cancelar",
"update": "Actualizar",
"create": "Crear",
"boardControls": {
"fillAll": "Activar todo",
"clearAll": "Desactivar todo",
"invert": "Invertir"
},
"loading": "Cargando niveles...",
"retry": "Reintentar",
"availableLevels": "Niveles disponibles: {count}",
"levelFormat": "Level {number}: {name}",
"levelObjectives": "Level-Objekte",
"objectivesTitle": "Siegvoraussetzungen",
"addObjective": "Añadir objetivo",
"removeObjective": "Eliminar",
"objectiveType": "Typ",
"objectiveTypeScore": "Punkte sammeln",
"objectiveTypeMatches": "Matches machen",
"objectiveTypeMoves": "Usar movimientos",
"objectiveTypeTime": "Zeit einhalten",
"objectiveTypeSpecial": "Spezialziel",
"objectiveOperator": "Operator",
"operatorGreaterEqual": "Mayor o igual (≥)",
"operatorLessEqual": "Menor o igual (≤)",
"operatorEqual": "Gleich (=)",
"operatorGreater": "Mayor que (>)",
"operatorLess": "Menor que (<)",
"objectiveTarget": "Zielwert",
"objectiveTargetPlaceholder": "z.B. 100",
"objectiveOrder": "Reihenfolge",
"objectiveOrderPlaceholder": "1, 2, 3...",
"objectiveDescription": "Descripción",
"objectiveDescriptionPlaceholder": "z.B. Sammle 100 Punkte",
"objectiveRequired": "Requerido para completar el nivel",
"noObjectives": "No hay condiciones de victoria definidas. Haz clic en 'Añadir objetivo' para crear una."
},
"userStatistics": {
"title": "[Admin] - Estadísticas de usuarios",
"totalUsers": "Total de usuarios",
"genderDistribution": "Distribución por género",
"ageDistribution": "Distribución por edad"
},
"taxiTools": {
"title": "Taxi-Tools",
"description": "Administra mapas, niveles y configuraciones de Taxi",
"mapEditor": {
"title": "Editar mapa",
"availableMaps": "Mapas disponibles: {count}",
"newMap": "Crear nuevo mapa",
"mapFormat": "{name} (Position: {x},{y})",
"mapName": "Map-Name",
"mapDescription": "Descripción",
"mapWidth": "Breite",
"mapHeight": "Altura",
"tileSize": "Tamaño de las fichas",
"positionX": "X-Position",
"positionY": "Y-Position",
"mapType": "Map-Typ",
"mapLayout": "Map-Layout",
"tilePalette": "Tile-Palette",
"streetNames": "Nombres de calles",
"extraElements": "Elementos adicionales",
"streetNameHorizontal": "Nombre de calle (horizontal)",
"streetNameVertical": "Nombre de calle (vertical)",
"continueHorizontal": "Continuar en otra dirección (→)",
"continueVertical": "Continuar en otra dirección (↓)",
"continueOther": "Continuar en otra dirección",
"position": "Position",
"fillAllRoads": "Todas las calles",
"clearAll": "Borrar todo",
"generateRandom": "Generar aleatoriamente",
"delete": "Eliminar",
"update": "Actualizar",
"cancel": "Cancelar",
"create": "Crear",
"createSuccess": "¡El mapa se ha creado correctamente!",
"updateSuccess": "¡El mapa se ha actualizado correctamente!",
"deleteSuccess": "¡El mapa se ha eliminado correctamente!"
}
},
"servicesStatus": {
"title": "Service-Status",
"description": "Supervisa el estado del backend, el chat y el daemon",
"status": {
"connected": "Conectado",
"connecting": "Conectando...",
"disconnected": "Desconectado",
"error": "Error",
"unknown": "Desconocido"
},
"backend": {
"title": "Backend",
"connected": "El servicio de backend está accesible y conectado"
},
"chat": {
"title": "Chat",
"connected": "El servicio de chat está accesible y conectado"
},
"daemon": {
"title": "Daemon",
"connected": "El servicio daemon está accesible y conectado",
"connections": {
"title": "Aktive Verbindungen",
"none": "No hay conexiones activas",
"userId": "Benutzer-ID",
"username": "Benutzername",
"connections": "Verbindungen",
"duration": "Verbindungsdauer",
"lastPong": "Zeit seit letztem Pong",
"pingTimeouts": "Ping-Timeouts",
"pongReceived": "Pong empfangen",
"yes": "Ja",
"no": "Nein",
"notConnected": "Daemon no conectado",
"sendError": "Error al enviar la solicitud",
"error": "Error al obtener las conexiones"
},
"websocketLog": {
"title": "WebSocket-Log",
"showLog": "WebSocket-Log anzeigen",
"refresh": "Aktualisieren",
"loading": "Cargando...",
"close": "Cerrar",
"entryCount": "{count} entradas",
"noEntries": "No hay entradas de registro",
"notConnected": "Daemon no conectado",
"sendError": "Error al enviar la solicitud",
"parseError": "Error al procesar la respuesta",
"timestamp": "Zeitstempel",
"direction": "Richtung",
"peer": "Peer",
"connUser": "Verbindungs-User",
"targetUser": "Ziel-User",
"event": "Event"
}
}
}
}
}