All checks were successful
Deploy to production / deploy (push) Successful in 2m52s
- 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.
511 lines
24 KiB
JSON
511 lines
24 KiB
JSON
{
|
||
"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"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|