Files
yourpart3/frontend/src/i18n/locales/de/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] - Interessen verwalten",
"newinterests": {
"name": "Name des Interesses",
"status": "Freigegeben",
"adultonly": "Nur für Erwachsene",
"translations": "Übersetzungen",
"isactive": "Aktiviert",
"isadult": "Nur für Erwachsene",
"delete": "Löschen"
}
},
"contacts": {
"title": "[Admin] - Kontaktanfragen",
"date": "Datum",
"from": "Absender",
"actions": "Aktionen",
"open": "Bearbeiten",
"finished": "Abschließen"
},
"editcontactrequest": {
"title": "[Admin] - Kontaktanfrage bearbeiten"
},
"user": {
"name": "Benutzername",
"active": "Aktiv",
"blocked": "Gesperrt",
"actions": "Aktionen",
"search": "Suchen"
},
"vocabLessonReset": {
"title": "Sprachkurs: Lektionsfortschritt",
"intro": "Fortschritt, Übungsergebnisse und gespeicherter Lektionszustand für eine einzelne Lektion löschen (nicht der ganze Kurs). Es werden nur Sprachkurse gelistet, in die dieser Benutzer eingeschrieben ist.",
"loadCourses": "Eingeschriebene Kurse laden",
"selectCourse": "Kurs",
"selectLesson": "Lektion",
"reset": "Lektion für diesen Nutzer zurücksetzen",
"confirmTitle": "Lektionsfortschritt löschen",
"confirm": "Fortschritt der Lektion „{lesson}“ für {username} wirklich löschen?",
"success": "Lektionsfortschritt wurde zurückgesetzt.",
"error": "Zurücksetzen fehlgeschlagen.",
"pickUserFirst": "Zuerst einen Benutzer auswählen.",
"noEnrolledCourses": "Dieser Benutzer ist in keinem Sprachkurs eingeschrieben.",
"loadCoursesError": "Die Kursliste konnte nicht geladen werden.",
"loadingLessons": "Lektionen werden geladen …"
},
"vocabLessonMarkComplete": {
"divider": "Fortschritt reparieren (ohne Übungsergebnisse zu fälschen)",
"throughLabel": "Alle Lektionen bis Lektionsnummer (einschließlich)",
"hint": "Setzt fehlende oder offene Einträge auf „abgeschlossen“, inkl. Ziel-Score und erster Review-Welle. Bereits abgeschlossene Lektionen bleiben unverändert.",
"submit": "Bis hier als abgeschlossen markieren",
"confirmTitle": "Lektionen als abgeschlossen markieren",
"confirm": "Alle Lektionen mit Nummer ≤ {n} für {username} in diesem Kurs als abgeschlossen markieren?",
"success": "{marked} Lektion(en) neu als abgeschlossen gesetzt ({unchanged} waren bereits erledigt).",
"successNone": "Keine Änderung: alle betroffenen Lektionen ({unchanged}) waren bereits abgeschlossen.",
"error": "Markieren fehlgeschlagen."
},
"adultVerification": {
"title": "[Admin] - Erotik-Freigaben",
"intro": "Volljährige Nutzer können den Erotikbereich beantragen. Hier werden Anfragen geprüft und freigegeben oder abgelehnt.",
"username": "Benutzer",
"age": "Alter",
"statusLabel": "Status",
"requestLabel": "Nachweis",
"actions": "Aktionen",
"approve": "Freigeben",
"reject": "Ablehnen",
"resetPending": "Auf Prüfung setzen",
"openDocument": "Dokument ansehen",
"previewTitle": "Nachweis-Vorschau",
"closePreview": "Vorschau schließen",
"previewUnavailable": "Für diesen Dateityp ist hier keine Vorschau verfügbar.",
"documentMissing": "Die Nachweisdatei wurde auf dem Server nicht gefunden.",
"empty": "Keine passenden Anfragen gefunden.",
"loadError": "Die Freigaben konnten nicht geladen werden.",
"updateError": "Der Status konnte nicht geändert werden.",
"documentError": "Das Dokument konnte nicht geöffnet werden.",
"filters": {
"pending": "Offen",
"approved": "Freigegeben",
"rejected": "Abgelehnt",
"all": "Alle"
},
"status": {
"none": "Nicht angefragt",
"pending": "In Prüfung",
"approved": "Freigegeben",
"rejected": "Abgelehnt"
},
"messages": {
"approved": "Freigabe erteilt.",
"rejected": "Freigabe abgelehnt.",
"pending": "Anfrage wieder auf Prüfung gesetzt."
}
},
"eroticModeration": {
"title": "[Admin] - Erotik-Moderation",
"intro": "Gemeldete Erotikbilder und -videos können hier geprüft, verborgen, gelöscht oder gegen den Account eskaliert werden.",
"empty": "Keine passenden Meldungen gefunden.",
"loadError": "Die Meldungen konnten nicht geladen werden.",
"actionError": "Die Moderationsaktion konnte nicht ausgeführt werden.",
"actionSuccess": "Die Moderationsaktion wurde gespeichert.",
"target": "Ziel",
"owner": "Besitzer",
"reporter": "Meldender",
"reason": "Grund",
"statusLabel": "Status",
"meta": "Zeit / Maßnahme",
"actions": "Aktionen",
"image": "Bild",
"video": "Video",
"hidden": "Verborgen",
"preview": "Vorschau",
"previewError": "Die Vorschau konnte nicht geladen werden.",
"dismiss": "Zurückweisen",
"hide": "Verbergen",
"restore": "Wieder freigeben",
"delete": "Löschen",
"blockUploads": "Uploads sperren",
"revokeAccess": "Erotikzugang entziehen",
"notePrompt": "Notiz zur Moderationsentscheidung",
"actionLabels": {
"dismiss": "Zurückgewiesen",
"hide_content": "Verborgen",
"restore_content": "Freigegeben",
"delete_content": "Gelöscht",
"block_uploads": "Uploads gesperrt",
"revoke_access": "Zugang entzogen"
},
"filters": {
"open": "Offen",
"actioned": "Bearbeitet",
"dismissed": "Zurückgewiesen",
"all": "Alle"
},
"status": {
"open": "Offen",
"actioned": "Bearbeitet",
"dismissed": "Zurückgewiesen"
}
},
"rights": {
"add": "Recht hinzufügen",
"select": "Bitte wählen",
"current": "Aktuelle Rechte"
},
"forum": {
"title": "[Admin] - Forum",
"currentForums": "Existierende Foren",
"edit": "Ändern",
"delete": "Löschen",
"createForum": "Anlegen",
"forumName": "Titel",
"create": "Anlegen",
"permissions": {
"label": "Berechtigungen",
"all": "Jeder",
"admin": "Nur Admins",
"teammember": "Nur Teammitglieder",
"user": "Nur bestimmte Benutzer",
"age": "Nur ab Alter 14"
},
"selectPermissions": "Bitte auswählen",
"confirmDeleteMessage": "Soll das Forum wirklich gelöscht werden?",
"confirmDeleteTitle": "Forum löschen"
},
"falukant": {
"edituser": {
"title": "Falukant Benutzer bearbeiten",
"username": "Benutzername",
"characterName": "Charaktername",
"user": "Benutzer",
"success": "Die Änderungen wurden gespeichert.",
"error": "Die Änderungen konnten nicht gespeichert werden.",
"errorLoadingBranches": "Fehler beim Laden der Niederlassungen.",
"errorUpdatingStock": "Fehler beim Aktualisieren des Lagers.",
"stockUpdated": "Lager erfolgreich aktualisiert.",
"search": "Suchen",
"tabs": {
"userdata": "Benutzerdaten",
"branches": "Niederlassungen"
},
"branches": {
"title": "Niederlassungen & Lager",
"noStocks": "Kein Lager vorhanden",
"noBranches": "Keine Niederlassungen gefunden",
"addStock": "Lager hinzufügen",
"stockType": "Lagertyp",
"selectStockType": "Lagertyp auswählen",
"quantity": "Menge",
"allStocksAdded": "Alle verfügbaren Lagertypen sind bereits vorhanden"
},
"errorLoadingStockTypes": "Fehler beim Laden der Lagertypen.",
"errorAddingStock": "Fehler beim Hinzufügen des Lagers.",
"stockAdded": "Lager erfolgreich hinzugefügt.",
"invalidStockData": "Bitte gültige Lagertyp- und Mengenangaben eingeben.",
"pregnancy": {
"title": "Schwangerschaft (Admin)",
"characterId": "Charakter-ID",
"status": "Status",
"statusActive": "Schwanger bis",
"statusNone": "Nicht schwanger",
"fatherId": "Vater-Charakter-ID (optional)",
"fatherSelect": "Vater (Ehepartner / Verlobter / Liebhaber)",
"fatherNone": "— kein Vater gespeichert —",
"fatherHintList": "Liste aus Beziehungen dieses Charakters (Ehe, Verlobung, aktive Liebschaft).",
"fatherHintManual": "Kein passender Partner in der Datenbank: Vater-Charakter-ID manuell eintragen.",
"fatherManualPlaceholder": "Charakter-ID",
"dueDays": "Tage bis zum Termin",
"dueDaysHint": "0 = Termin heute (Geburt kann je nach Spiel-Logik zeitnah anstehen).",
"force": "Schwangerschaft setzen",
"clear": "Schwangerschaft entfernen",
"successForce": "Schwangerschaft wurde gesetzt.",
"successClear": "Schwangerschaft wurde entfernt.",
"error": "Aktion fehlgeschlagen.",
"relationship": {
"married": "Ehepartner",
"engaged": "Verlobter",
"lover": "Liebhaber"
}
},
"birth": {
"title": "Geburt erzwingen (Admin)",
"motherHint": "Es wird der oben genannte Charakter (Mutter) verwendet.",
"fatherId": "Vater-Charakter-ID",
"fatherSelect": "Vater (Ehepartner / Verlobter / Liebhaber)",
"fatherChoose": "— Vater wählen —",
"fatherHintList": "Liste aus Beziehungen dieses Charakters.",
"fatherHintManual": "Kein Partner in der Liste: Vater-Charakter-ID manuell eintragen.",
"fatherRequired": "Bitte einen Vater auswählen oder die Charakter-ID angeben.",
"context": "Kontext",
"contextMarriage": "Ehe",
"contextLover": "Liebschaft",
"legitimacy": "Legitimität",
"legitimate": "Legitim",
"ackBastard": "Anerkannt unehelich",
"hiddenBastard": "Verborgen unehelich",
"gender": "Kind-Geschlecht",
"genderRandom": "Zufällig",
"male": "Männlich",
"female": "Weiblich",
"force": "Geburt auslösen",
"success": "Kind wurde angelegt (Taufe ausstehend).",
"error": "Geburt konnte nicht ausgelöst werden."
}
},
"map": {
"title": "Falukant Karten-Editor (Regionen)",
"description": "Zeichne Rechtecke auf der Falukant-Karte und weise sie Städten zu.",
"tabs": {
"regions": "Positionen",
"distances": "Entfernungen"
},
"regionList": "Städte",
"noCoords": "Keine Koordinaten gesetzt",
"currentRect": "Aktuelles Rechteck",
"hintDraw": "Wähle eine Stadt und ziehe mit der Maus ein Rechteck auf der Karte, um die Position festzulegen.",
"saveAll": "Alle geänderten Städte speichern",
"connectionsTitle": "Verbindungen (region_distance)",
"source": "Von",
"target": "Nach",
"selectSource": "Quellstadt wählen",
"selectTarget": "Zielstadt wählen",
"mode": "Transportart",
"modeLand": "Land",
"modeWater": "Wasser",
"modeAir": "Luft",
"distance": "Entfernung",
"saveConnection": "Verbindung speichern",
"pickOnMap": "Auf Karte wählen",
"errorSaveConnection": "Die Verbindung konnte nicht gespeichert werden.",
"errorDeleteConnection": "Die Verbindung konnte nicht gelöscht werden.",
"confirmDeleteConnection": "Verbindung wirklich löschen?"
},
"createNPC": {
"title": "NPCs erstellen",
"region": "Stadt",
"allRegions": "Alle Städte",
"ageRange": "Altersbereich",
"to": "bis",
"years": "Jahre",
"titleRange": "Titel-Bereich",
"count": "Anzahl pro Stadt-Titel-Kombination",
"countHelp": "Diese Anzahl wird für jede Kombination aus gewählter Stadt und Titel erstellt.",
"create": "NPCs erstellen",
"creating": "Erstelle...",
"result": "Ergebnis",
"createdCount": "{count} NPCs wurden erstellt.",
"combinationInfo": "{perCombination} NPCs pro Kombination × {combinations} Kombinationen = {count} NPCs insgesamt",
"age": "Alter",
"errorLoadingRegions": "Fehler beim Laden der Städte.",
"errorLoadingTitles": "Fehler beim Laden der Titel.",
"errorCreating": "Fehler beim Erstellen der NPCs.",
"invalidAgeRange": "Ungültiger Altersbereich.",
"invalidTitleRange": "Ungültiger Titel-Bereich.",
"invalidCount": "Ungültige Anzahl (1-500).",
"progress": "Fortschritt",
"progressDetails": "{current} von {total} NPCs erstellt",
"timeRemainingSeconds": "Verbleibende Zeit: {seconds} Sekunden",
"timeRemainingMinutes": "Verbleibende Zeit: {minutes} Minuten {seconds} Sekunden",
"almostDone": "Fast fertig...",
"jobNotFound": "Job nicht gefunden oder abgelaufen."
}
},
"chatrooms": {
"title": "[Admin] - Chaträume verwalten",
"roomName": "Raumname",
"create": "Chatraum anlegen",
"edit": "Chatraum bearbeiten",
"type": "Typ",
"isPublic": "Öffentlich sichtbar",
"isAdultOnly": "Nur Erotikbereich",
"actions": "Aktionen",
"genderRestriction": {
"show": "Geschlechtsbeschränkung aktivieren",
"label": "Geschlechtsbeschränkung"
},
"minAge": {
"show": "Mindestalter angeben",
"label": "Mindestalter"
},
"maxAge": {
"show": "Höchstalter angeben",
"label": "Höchstalter"
},
"password": {
"show": "Passwortschutz aktivieren",
"label": "Passwort"
},
"friendsOfOwnerOnly": "Nur Freunde des Besitzers",
"requiredUserRight": {
"show": "Benötigtes Benutzerrecht angeben",
"label": "Benötigtes Benutzerrecht"
},
"roomtype": {
"chat": "Reden",
"dice": "Würfeln",
"poker": "Poker",
"hangman": "Hangman"
},
"rights": {
"talk": "Reden",
"scream": "Schreien",
"whisper": "Flüstern",
"start game": "Spiel starten",
"open room": "Raum öffnen",
"systemmessage": "Systemnachricht"
},
"confirmDelete": "Soll dieser Chatraum wirklich gelöscht werden?"
},
"match3": {
"title": "Match3 Level verwalten",
"newLevel": "Neues Level erstellen",
"editLevel": "Level bearbeiten",
"deleteLevel": "Level löschen",
"confirmDelete": "Möchtest du dieses Level wirklich löschen?",
"levelName": "Name",
"levelDescription": "Beschreibung",
"boardWidth": "Breite",
"boardHeight": "Höhe",
"moveLimit": "Zug-Limit",
"levelOrder": "Reihenfolge",
"boardLayout": "Board-Layout",
"tileTypes": "Verfügbare Tile-Typen",
"actions": "Aktionen",
"edit": "Bearbeiten",
"delete": "Löschen",
"save": "Speichern",
"cancel": "Abbrechen",
"update": "Aktualisieren",
"create": "Erstellen",
"boardControls": {
"fillAll": "Alle aktivieren",
"clearAll": "Alle deaktivieren",
"invert": "Invertieren"
},
"loading": "Lade Level...",
"retry": "Erneut versuchen",
"availableLevels": "Verfügbare Level: {count}",
"levelFormat": "Level {number}: {name}",
"levelObjectives": "Level-Objekte",
"objectivesTitle": "Siegvoraussetzungen",
"addObjective": "Objektiv hinzufügen",
"removeObjective": "Entfernen",
"objectiveType": "Typ",
"objectiveTypeScore": "Punkte sammeln",
"objectiveTypeMatches": "Matches machen",
"objectiveTypeMoves": "Züge verwenden",
"objectiveTypeTime": "Zeit einhalten",
"objectiveTypeSpecial": "Spezialziel",
"objectiveOperator": "Operator",
"operatorGreaterEqual": "Größer oder gleich (≥)",
"operatorLessEqual": "Kleiner oder gleich (≤)",
"operatorEqual": "Gleich (=)",
"operatorGreater": "Größer als (>)",
"operatorLess": "Kleiner als (<)",
"objectiveTarget": "Zielwert",
"objectiveTargetPlaceholder": "z.B. 100",
"objectiveOrder": "Reihenfolge",
"objectiveOrderPlaceholder": "1, 2, 3...",
"objectiveDescription": "Beschreibung",
"objectiveDescriptionPlaceholder": "z.B. Sammle 100 Punkte",
"objectiveRequired": "Erforderlich für Level-Abschluss",
"noObjectives": "Keine Siegvoraussetzungen definiert. Klicke auf 'Objektiv hinzufügen' um welche zu erstellen."
},
"userStatistics": {
"title": "[Admin] - Benutzerstatistiken",
"totalUsers": "Gesamtanzahl Benutzer",
"genderDistribution": "Geschlechterverteilung",
"ageDistribution": "Altersverteilung"
},
"taxiTools": {
"title": "Taxi-Tools",
"description": "Verwalte Taxi-Maps, Level und Konfigurationen",
"mapEditor": {
"title": "Map bearbeiten",
"availableMaps": "Verfügbare Maps: {count}",
"newMap": "Neue Map erstellen",
"mapFormat": "{name} (Position: {x},{y})",
"mapName": "Map-Name",
"mapDescription": "Beschreibung",
"mapWidth": "Breite",
"mapHeight": "Höhe",
"tileSize": "Tile-Größe",
"positionX": "X-Position",
"positionY": "Y-Position",
"mapType": "Map-Typ",
"mapLayout": "Map-Layout",
"tilePalette": "Tile-Palette",
"streetNames": "Straßennamen",
"extraElements": "Zusätzliche Elemente",
"streetNameHorizontal": "Straßenname (horizontal)",
"streetNameVertical": "Straßenname (vertikal)",
"continueHorizontal": "In anderer Richtung fortführen (→)",
"continueVertical": "In anderer Richtung fortführen (↓)",
"continueOther": "In anderer Richtung fortführen",
"position": "Position",
"fillAllRoads": "Alle Straßen",
"clearAll": "Alle löschen",
"generateRandom": "Zufällig generieren",
"delete": "Löschen",
"update": "Aktualisieren",
"cancel": "Abbrechen",
"create": "Erstellen",
"createSuccess": "Map wurde erfolgreich erstellt!",
"updateSuccess": "Map wurde erfolgreich aktualisiert!",
"deleteSuccess": "Map wurde erfolgreich gelöscht!"
}
},
"servicesStatus": {
"title": "Service-Status",
"description": "Überwache den Status von Backend, Chat und Daemon",
"status": {
"connected": "Verbunden",
"connecting": "Verbinde...",
"disconnected": "Nicht verbunden",
"error": "Fehler",
"unknown": "Unbekannt"
},
"backend": {
"title": "Backend",
"connected": "Backend-Service ist erreichbar und verbunden"
},
"chat": {
"title": "Chat",
"connected": "Chat-Service ist erreichbar und verbunden"
},
"daemon": {
"title": "Daemon",
"connected": "Daemon-Service ist erreichbar und verbunden",
"connections": {
"title": "Aktive Verbindungen",
"none": "Keine aktiven Verbindungen",
"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 nicht verbunden",
"sendError": "Fehler beim Senden der Anfrage",
"error": "Fehler beim Abrufen der Verbindungen"
},
"websocketLog": {
"title": "WebSocket-Log",
"showLog": "WebSocket-Log anzeigen",
"refresh": "Aktualisieren",
"loading": "Lädt...",
"close": "Schließen",
"entryCount": "{count} Einträge",
"noEntries": "Keine Log-Einträge vorhanden",
"notConnected": "Daemon nicht verbunden",
"sendError": "Fehler beim Senden der Anfrage",
"parseError": "Fehler beim Verarbeiten der Antwort",
"timestamp": "Zeitstempel",
"direction": "Richtung",
"peer": "Peer",
"connUser": "Verbindungs-User",
"targetUser": "Ziel-User",
"event": "Event"
}
}
}
}
}