- Added `resetUserVocabLessonProgress` method in `AdminController` to allow admins to reset a user's progress for a specific vocab lesson. - Introduced corresponding route in `adminRouter` for the new reset functionality. - Enhanced `VocabService` with methods to purge lesson progress for users, ensuring that only the specified lesson's progress is affected. - Updated UI components in `UsersView` to facilitate the selection of courses and lessons for resetting progress, including confirmation dialogs and loading states. - Added localization support for the new reset functionality across multiple languages. - Implemented reset functionality in `VocabLessonView` for users to reset their own lesson progress.
744 lines
42 KiB
JSON
744 lines
42 KiB
JSON
{
|
|
"socialnetwork": {
|
|
"usersearch": {
|
|
"kicker": "Community-Suche",
|
|
"intro": "Mit Namen, Alter und Geschlecht gezielt passende Kontakte in der Community finden.",
|
|
"ageSeparator": "bis",
|
|
"resultsCount": "{count} Treffer",
|
|
"openProfile": "Profil öffnen",
|
|
"title": "Benutzersuche",
|
|
"username": "Benutzername",
|
|
"age_from": "Alter von",
|
|
"age_to": "bis",
|
|
"gender": "Geschlecht",
|
|
"search_button": "Suchen",
|
|
"no_results": "Keine Ergebnisse gefunden",
|
|
"results_title": "Suchergebnisse:",
|
|
"result": {
|
|
"nick": "Spitzname",
|
|
"gender": "Geschlecht",
|
|
"age": "Alter"
|
|
}
|
|
},
|
|
"profile": {
|
|
"pretitle": "Lade Daten. Bitte warten...",
|
|
"error_title": "User nicht gefunden",
|
|
"title": "Profil von <username>",
|
|
"tab": {
|
|
"general": "Allgemeines",
|
|
"sexuality": "Sexualität",
|
|
"images": "Galerie",
|
|
"guestbook": "Gästebuch"
|
|
},
|
|
"values": {
|
|
"bool": {
|
|
"true": "Ja",
|
|
"false": "Nein"
|
|
},
|
|
"smokes": {
|
|
"never": "Nie",
|
|
"socially": "In Gesellschaft",
|
|
"often": "Oft",
|
|
"daily": "Täglich"
|
|
},
|
|
"drinks": {
|
|
"never": "Nie",
|
|
"socially": "In Gesellschaft",
|
|
"often": "Oft",
|
|
"daily": "Täglich"
|
|
},
|
|
"interestedInGender": {
|
|
"male": "Männern",
|
|
"female": "Frauen"
|
|
},
|
|
"sexualpreference": {
|
|
"straight": "Heterosexuell",
|
|
"gay": "Homosexuell",
|
|
"bi": "Bisexuell",
|
|
"pan": "Pansexuell",
|
|
"asexual": "Asexuell"
|
|
},
|
|
"pubichair": {
|
|
"none": "Keine",
|
|
"short": "Kurz",
|
|
"medium": "Mittel",
|
|
"long": "Lang",
|
|
"hairy": "Unrasiert",
|
|
"waxed": "Gewachst",
|
|
"landingstrip": "Landebahn",
|
|
"other": "Anderes",
|
|
"bikinizone": "Bikinizone"
|
|
},
|
|
"gender": {
|
|
"male": "Männlich",
|
|
"female": "Weiblich",
|
|
"transmale": "Trans-Frau",
|
|
"transfemale": "Trans-Mann",
|
|
"nonbinary": "Nonbinär"
|
|
},
|
|
"language": {
|
|
"de": "Deutsch",
|
|
"en": "Englisch"
|
|
},
|
|
"eyecolor": {
|
|
"blue": "Blau",
|
|
"green": "Grün",
|
|
"brown": "Braun",
|
|
"black": "Schwarz",
|
|
"grey": "Grau",
|
|
"hazel": "Haselnuss",
|
|
"amber": "Bernstein",
|
|
"red": "Rot",
|
|
"other": "Andere"
|
|
},
|
|
"haircolor": {
|
|
"black": "Schwarz",
|
|
"brown": "Braun",
|
|
"blonde": "Blond",
|
|
"red": "Rot",
|
|
"grey": "Grau",
|
|
"white": "Weiß",
|
|
"other": "Andere"
|
|
},
|
|
"hairlength": {
|
|
"short": "Kurz",
|
|
"medium": "Mittel",
|
|
"long": "Lang",
|
|
"bald": "Glatze",
|
|
"other": "Andere"
|
|
},
|
|
"skincolor": {
|
|
"light": "Hell",
|
|
"medium": "Mittel",
|
|
"dark": "Dunkel",
|
|
"other": "Andere"
|
|
},
|
|
"freckles": {
|
|
"much": "Viele",
|
|
"medium": "Mittel",
|
|
"less": "Wenige",
|
|
"none": "Keine"
|
|
}
|
|
},
|
|
"guestbook": {
|
|
"showInput": "Neuer Eintrag anzeigen",
|
|
"hideInput": "Neuer Eintrag verbergen",
|
|
"imageUpload": "Bild",
|
|
"submit": "Eintrag absenden",
|
|
"noEntries": "Keine Einträge gefunden",
|
|
"entryImageAlt": "Bild zum Gästebucheintrag"
|
|
},
|
|
"interestedInGender": "Interessiert an",
|
|
"hasChildren": "Hat Kinder",
|
|
"smokes": "Rauchen",
|
|
"drinks": "Alkohol",
|
|
"willChildren": "Will Kinder",
|
|
"sexualpreference": "Sexuelle Ausrichtung",
|
|
"pubichair": "Schamhaare",
|
|
"penislength": "Penislänge",
|
|
"brasize": "BH-Größe",
|
|
"piercings": "Piercings",
|
|
"tattoos": "Tattoos",
|
|
"language": "Sprache",
|
|
"gender": "Geschlecht",
|
|
"eyecolor": "Augenfarbe",
|
|
"haircolor": "Haarfarbe",
|
|
"hairlength": "Haarlänge",
|
|
"freckles": "Sommersprossen",
|
|
"skincolor": "Hautfarbe",
|
|
"birthdate": "Geburtsdatum",
|
|
"age": "Alter",
|
|
"town": "Stadt",
|
|
"bodyheight": "Größe",
|
|
"weight": "Gewicht"
|
|
},
|
|
"gallery": {
|
|
"kicker": "Bilder und Ordner",
|
|
"intro": "Eigene Inhalte organisieren, sichtbar machen und in Ordnern strukturieren.",
|
|
"title": "Gallerie",
|
|
"folders": "Ordner",
|
|
"create_folder": "Ordner anlegen",
|
|
"upload": {
|
|
"title": "Bild hochladen",
|
|
"image_title": "Titel",
|
|
"image_file": "Datei",
|
|
"visibility": "Sichtbar für",
|
|
"upload_button": "Hochladen",
|
|
"selectvisibility": "Bitte auswählen"
|
|
},
|
|
"images": "Bilder",
|
|
"visibility": {
|
|
"everyone": "Jeden",
|
|
"friends": "Freunde",
|
|
"adults": "Erwachsene",
|
|
"friends-and-adults": "Freunde und Erwachsene",
|
|
"selected-users": "Ausgewählte Benutzer",
|
|
"none": "Niemand"
|
|
},
|
|
"create_folder_dialog": {
|
|
"title": "Ordner anlegen",
|
|
"parent_folder": "Wird angelegt in",
|
|
"folder_title": "Ordnername",
|
|
"visibility": "Sichtbar für",
|
|
"select_visibility": "Bitte auswählen"
|
|
},
|
|
"noimages": "In diesem Ordner befinden sich zur Zeit keine Bilder",
|
|
"imagedialog": {
|
|
"image_title": "Titel",
|
|
"edit_visibility": "Sichtbar für",
|
|
"save_changes": "Änderungen speichern",
|
|
"close": "Schließen",
|
|
"edit_visibility_placeholder": "Bitte auswählen"
|
|
},
|
|
"delete_folder_confirmation_title": "Ordner löschen",
|
|
"delete_folder_confirmation_message": "Soll der Ordner '%%folderName%%' wirklich gelöscht werden?",
|
|
"edit_image_dialog": {
|
|
"title": "Bilddaten editieren"
|
|
},
|
|
"show_image_dialog": {
|
|
"title": "Bild"
|
|
},
|
|
"imagePreviewAlt": "Bildvorschau",
|
|
"imageLoadingAlt": "Bild wird geladen"
|
|
},
|
|
"guestbook": {
|
|
"kicker": "Gästebuch",
|
|
"intro": "Nachrichten, Rückmeldungen und kleine Einblicke aus deinem Netzwerk.",
|
|
"title": "Gästebuch",
|
|
"prevPage": "Zurück",
|
|
"nextPage": "Weiter",
|
|
"page": "Seite"
|
|
},
|
|
"diary": {
|
|
"kicker": "Persönliche Einträge",
|
|
"intro": "Gedanken, Notizen und kurze Updates in einer ruhigen, persönlichen Ansicht.",
|
|
"placeholder": "Schreibe deinen Tagebucheintrag...",
|
|
"title": "Tagebuch",
|
|
"noEntries": "Du hast noch keine Tagebucheinträge gemacht.",
|
|
"newEntry": "Neuer Tagebucheintrag",
|
|
"editEntry": "Tagebucheintrag ändern",
|
|
"save": "Speichern",
|
|
"update": "Ändern",
|
|
"cancel": "Abbrechen",
|
|
"edit": "Ändern",
|
|
"delete": "Löschen",
|
|
"confirmDelete": "Willst Du den Eintrag wirklich löschen?",
|
|
"prevPage": "Zurück",
|
|
"nextPage": "Weiter",
|
|
"page": "Seite"
|
|
},
|
|
"forum": {
|
|
"kicker": "Community-Forum",
|
|
"intro": "Themen, Diskussionen und neue Beiträge an einem strukturierten Ort.",
|
|
"createTitle": "Neues Thema verfassen",
|
|
"createIntro": "Erst Titel setzen, dann den Beitrag schreiben und anschließend direkt veröffentlichen.",
|
|
"cancelCreation": "Abbrechen",
|
|
"creationHint": "Titel und Inhalt müssen beide ausgefüllt sein.",
|
|
"communityFallback": "Community",
|
|
"topicIntro": "Diskussionen, Antworten und neue Beiträge in einer fokussierten Lesefläche.",
|
|
"topicCreated": "Thema erfolgreich erstellt.",
|
|
"topicCreateError": "Fehler beim Erstellen des Themas",
|
|
"title": "Forum",
|
|
"showNewTopic": "Neues Thema erstellen",
|
|
"hideNewTopic": "Erstellen unterbrechen",
|
|
"noTitles": "Keine Themen vorhanden",
|
|
"topic": "Thema",
|
|
"createNewTopic": "Thema anlegen",
|
|
"createdBy": "Erstellt von",
|
|
"createdAt": "Erstellt am",
|
|
"reactions": "Reaktion",
|
|
"lastReaction": "Letzte Reaktion von",
|
|
"pagination": {
|
|
"first": "Erste Seite",
|
|
"previous": "Vorherige Seite",
|
|
"next": "Nächste Seite",
|
|
"last": "Letzte Seite",
|
|
"page": "Seite <<page>> von <<of>>"
|
|
},
|
|
"createNewMesssage": "Antwort senden"
|
|
},
|
|
"friendship": {
|
|
"error": {
|
|
"alreadyexists": "Die Freundschaftsanfrage existiert bereits"
|
|
},
|
|
"state": {
|
|
"none": "Nicht befreundet",
|
|
"waiting": "Freundschaftsanfrage gesendet, aber nicht beantwortet",
|
|
"open": "Freundschaft wurde angefragt",
|
|
"denied": "Freundschaftsanfrage abgelehnt",
|
|
"withdrawn": "Freundschaftsanfrage zurückgezogen",
|
|
"accepted": "Befreundet"
|
|
},
|
|
"added": "Du hast eine Freundschaftsanfrage gestellt.",
|
|
"withdrawn": "Du hast Deine Freundschaftsanfrage zurückgezogen.",
|
|
"denied": "Du hast die Freundschaftsanfrage abgelehnt.",
|
|
"accepted": "Die Freundschaft wurde geschlossen."
|
|
},
|
|
"erotic": {
|
|
"eyebrow": "Erotik",
|
|
"accessTitle": "Freischaltung für den Erotikbereich",
|
|
"accessIntro": "Bilder, Videos und später auch Chatbereiche werden ab 18 angezeigt, aber erst nach Moderationsfreigabe nutzbar.",
|
|
"lockedShort": "Dieser Bereich wird erst nach Moderatorfreigabe nutzbar.",
|
|
"requestVerification": "Freischaltung anfragen",
|
|
"requestSent": "Die Freischaltung wurde angefragt.",
|
|
"requestError": "Die Freischaltung konnte nicht angefragt werden.",
|
|
"requestInfoTitle": "Eingereichter Nachweis",
|
|
"documentLabel": "Nachweisdatei",
|
|
"noteLabel": "Kurze Notiz für die Moderation",
|
|
"settingsLink": "Account-Einstellungen öffnen",
|
|
"verificationHintTitle": "Hinweis zum Nachweis",
|
|
"verificationHintBody": "Du kannst ein Foto senden. Wenn dein Alter darauf nicht eindeutig erkennbar ist, wird der Antrag abgelehnt und du musst stattdessen einen Ausweis einreichen.",
|
|
"notifications": {
|
|
"approved": "Dein Erotikbereich wurde von der Moderation freigeschaltet.",
|
|
"rejected": "Dein Antrag auf den Erotikbereich wurde abgelehnt. Wenn dein Alter auf Fotos nicht eindeutig erkennbar ist, sende bitte einen Ausweis."
|
|
},
|
|
"picturesTitle": "Erotikbilder",
|
|
"picturesIntro": "Eigene Inhalte bleiben strikt vom normalen Galeriebereich getrennt. Hier verwaltest du nur Bilder für den freigeschalteten Erotikbereich.",
|
|
"uploadTitle": "Erotikbild hochladen",
|
|
"noimages": "In diesem Erotikordner befinden sich zur Zeit keine Bilder.",
|
|
"videosTitle": "Erotikvideos",
|
|
"videosIntro": "Eigene Videos werden getrennt vom normalen Social-Bereich verwaltet. Hier organisierst du Uploads, Sichtbarkeit und Moderationsstatus an einem Ort.",
|
|
"videoUploadTitle": "Erotikvideo hochladen",
|
|
"videoUploadHint": "Lade hier Videos für deinen freigeschalteten Erotikbereich hoch und pflege Titel sowie Beschreibung direkt beim Upload.",
|
|
"videoDescription": "Beschreibung",
|
|
"videoFile": "Videodatei",
|
|
"videoFormats": "MP4, WEBM, OGG, MOV",
|
|
"myVideos": "Meine Videos",
|
|
"sharedVideos": "Freigegebene Videos",
|
|
"foreignVideosIntro": "Freigegebene Videos aus dem Erwachsenenbereich.",
|
|
"foreignVideosOnlyHint": "Du siehst hier nur Videos, die dir für den Erwachsenenbereich freigegeben wurden.",
|
|
"sharedVideosIntro": "Sichtbare Videos aus freigegebenen Erwachsenenbereichen.",
|
|
"noSharedVideos": "Für dich sind aktuell keine freigegebenen Videos vorhanden.",
|
|
"libraryTitle": "Bibliothek",
|
|
"libraryIntro": "Eigene Uploads, Freigaben und Meldungen an einem Ort.",
|
|
"libraryEmptyHint": "Lege links dein erstes Video an und verwalte es danach hier in der Bibliothek.",
|
|
"latestUpload": "Letzter Upload",
|
|
"visibleVideos": "Sichtbare Videos",
|
|
"moderationCases": "Moderationsfälle",
|
|
"notesTitle": "Hinweise",
|
|
"friendsVisibilityHint": "Freunde sehen Inhalte nur dann, wenn sie volljährig und für den Erwachsenenbereich freigeschaltet sind.",
|
|
"selectedUsersVisibilityHint": "Gezielt freigegebene Personen müssen ebenfalls volljährig und freigeschaltet sein.",
|
|
"selectedUsersPlaceholder": "anna, bert, clara",
|
|
"imagePreviewAlt": "Bildvorschau",
|
|
"imageLoadingAlt": "Bild wird geladen",
|
|
"untitled": "Ohne Titel",
|
|
"noUploadYet": "Noch kein Upload",
|
|
"closeEditing": "Bearbeitung schließen",
|
|
"editVisibility": "Freigaben bearbeiten",
|
|
"noVideos": "Du hast noch keine Erotikvideos hochgeladen.",
|
|
"reportAction": "Melden",
|
|
"reportHint": "Nutze {action} direkt am jeweiligen Eintrag, wenn Inhalte geprüft werden sollen.",
|
|
"reportNote": "Kurze Notiz für die Moderation",
|
|
"submitReport": "Meldung absenden",
|
|
"reportSubmitted": "Die Meldung wurde aufgenommen.",
|
|
"reportError": "Die Meldung konnte nicht gespeichert werden.",
|
|
"moderationHidden": "Von Moderation verborgen",
|
|
"hiddenByModeration": "Dieser Inhalt wurde vorläufig durch die Moderation verborgen.",
|
|
"reportReasons": {
|
|
"suspected_minor": "Verdacht auf Minderjährigkeit",
|
|
"non_consensual": "Nicht einvernehmlicher Inhalt",
|
|
"violence": "Gewalt oder Missbrauch",
|
|
"harassment": "Belästigung oder Druck",
|
|
"spam": "Spam oder Scam",
|
|
"other": "Sonstiges"
|
|
},
|
|
"intro": "Der Bereich ist freigeschaltet. Die eigentlichen Bilder- und Videomodule folgen im nächsten Schritt.",
|
|
"enabledTitle": "Zugang freigeschaltet",
|
|
"enabledBody": "Dein Account ist für den Erotikbereich freigegeben. Hier entsteht jetzt die getrennte Bilder- und Videoansicht.",
|
|
"roadmapTitle": "Als Nächstes",
|
|
"roadmapModeration": "getrennte Moderation und Meldewege",
|
|
"roadmapUpload": "eigene Upload- und Verwaltungsansichten",
|
|
"roadmapSeparation": "saubere Trennung von normaler Galerie und Erotikbereich",
|
|
"status": {
|
|
"none": {
|
|
"title": "Noch nicht freigeschaltet",
|
|
"body": "Der Bereich ist sichtbar, bleibt aber bis zur Moderatorfreigabe gesperrt."
|
|
},
|
|
"pending": {
|
|
"title": "Prüfung läuft",
|
|
"body": "Deine Anfrage liegt zur Moderationsprüfung vor."
|
|
},
|
|
"approved": {
|
|
"title": "Freigeschaltet",
|
|
"body": "Der Erotikbereich ist für deinen Account bereits freigeschaltet."
|
|
},
|
|
"rejected": {
|
|
"title": "Freischaltung abgelehnt",
|
|
"body": "Die letzte Anfrage wurde abgelehnt. Du kannst eine neue Anfrage stellen."
|
|
}
|
|
}
|
|
},
|
|
"vocab": {
|
|
"title": "Vokabeltrainer",
|
|
"description": "Lege Sprachen an (oder abonniere sie) und teile sie mit Freunden.",
|
|
"heroEyebrow": "Sprachenlernen",
|
|
"summaryTotalLabel": "Sprachen gesamt",
|
|
"summaryTotalIntro": "Alle aktiven Sprachbereiche, in denen du Inhalte nutzt oder verwaltest.",
|
|
"summaryOwnedLabel": "Eigene Bereiche",
|
|
"summaryOwnedIntro": "Hier legst du Inhalte, Kapitel und Lernmaterial aktiv selbst an.",
|
|
"summarySubscribedLabel": "Abonniert",
|
|
"summarySubscribedIntro": "Diese Bereiche sind eher für Lernen und Fortschritt statt Verwaltung gedacht.",
|
|
"taskCreateEyebrow": "Schnellstart",
|
|
"taskCreateTitle": "Neue Sprache anlegen",
|
|
"taskCreateIntro": "Der beste Einstieg, wenn du Inhalte selbst strukturieren und pflegen willst.",
|
|
"taskContinueEyebrow": "Weiterlernen",
|
|
"taskContinueTitle": "Kurse und Kapitel öffnen",
|
|
"taskContinueIntro": "Springe direkt in bestehende Lernpfade und arbeite mit vorhandenen Kursen weiter.",
|
|
"ownedSectionTitle": "Eigene Sprachen",
|
|
"ownedSectionIntro": "Direkter Einstieg in Bearbeitung, Kapitel und Kursverwaltung.",
|
|
"ownedHint": "Verwalten und Inhalte pflegen",
|
|
"ownedEmpty": "Noch keine eigenen Sprachbereiche vorhanden.",
|
|
"subscribedSectionTitle": "Abonnierte Sprachen",
|
|
"subscribedSectionIntro": "Gut für schnellen Wiedereinstieg ins Lernen ohne Verwaltungsaufwand.",
|
|
"subscribedHint": "Lernen, üben und Fortschritt ansehen",
|
|
"subscribedEmpty": "Keine abonnierten Sprachen vorhanden.",
|
|
"languageHeroEyebrow": "Sprache",
|
|
"languageHeroIntro": "Kapitel, Suchfunktionen und Freigaben für diese Sprache an einem Ort.",
|
|
"newLanguageHeroEyebrow": "Vokabeltrainer",
|
|
"newLanguageHeroIntro": "Neue Sprache anlegen, Freigabecode erzeugen und direkt in die Bearbeitung wechseln.",
|
|
"newLanguageNameHint": "Ein kurzer, klarer Sprachname reicht für den Start.",
|
|
"newLanguageNameValidation": "Der Name sollte mindestens 2 Zeichen haben.",
|
|
"subscribeHeroEyebrow": "Vokabeltrainer",
|
|
"chapterHeroEyebrow": "Vokabeltrainer",
|
|
"chapterHeroIntro": "Kapitelinhalt durchsuchen, Vokabeln pflegen und direkt in die Übung wechseln.",
|
|
"newLanguage": "Neue Sprache",
|
|
"newLanguageTitle": "Neue Sprache anlegen",
|
|
"languageName": "Name der Sprache",
|
|
"create": "Anlegen",
|
|
"saving": "Speichere...",
|
|
"created": "Sprache wurde angelegt.",
|
|
"createdTitle": "Vokabeltrainer",
|
|
"createdMessage": "Sprache wurde angelegt. Das Menü wird aktualisiert.",
|
|
"createError": "Konnte die Sprache nicht anlegen.",
|
|
"openLanguage": "Öffnen",
|
|
"none": "Du hast noch keine Sprachen angelegt oder abonniert.",
|
|
"owner": "Eigen",
|
|
"subscribed": "Abonniert",
|
|
"languageTitle": "Vokabeltrainer: {name}",
|
|
"notFound": "Sprache nicht gefunden oder kein Zugriff.",
|
|
"shareCode": "Teilen-Code",
|
|
"shareHint": "Diesen Code kannst du an Freunde weitergeben, damit sie die Sprache abonnieren können.",
|
|
"subscribeByCode": "Per Code abonnieren",
|
|
"subscribeTitle": "Sprache abonnieren",
|
|
"subscribeHint": "Gib den Teilen-Code ein, den du von einem Freund bekommen hast.",
|
|
"subscribe": "Abonnieren",
|
|
"subscribeSuccess": "Abo erfolgreich. Menü wird aktualisiert.",
|
|
"subscribeError": "Abo fehlgeschlagen. Code ungültig oder kein Zugriff.",
|
|
"trainerPlaceholder": "Trainer-Funktionen (Vokabeln/Abfragen) kommen als nächster Schritt."
|
|
,
|
|
"chapters": "Kapitel",
|
|
"newChapter": "Neues Kapitel",
|
|
"createChapter": "Kapitel anlegen",
|
|
"createChapterError": "Konnte Kapitel nicht anlegen.",
|
|
"noChapters": "Noch keine Kapitel vorhanden.",
|
|
"chapterTitle": "Kapitel: {title}",
|
|
"addVocab": "Vokabel hinzufügen",
|
|
"learningWord": "Lernsprache",
|
|
"referenceWord": "Referenz",
|
|
"add": "Hinzufügen",
|
|
"addVocabError": "Konnte Vokabel nicht hinzufügen.",
|
|
"noVocabs": "In diesem Kapitel sind noch keine Vokabeln."
|
|
,
|
|
"practice": {
|
|
"open": "Üben",
|
|
"title": "Vokabeln üben",
|
|
"allVocabs": "Alle Vokabeln",
|
|
"simple": "Einfaches Üben",
|
|
"noPool": "Keine Vokabeln zum Üben vorhanden.",
|
|
"dirLearningToRef": "Lernsprache → Referenz",
|
|
"dirRefToLearning": "Referenz → Lernsprache",
|
|
"check": "Prüfen",
|
|
"next": "Weiter",
|
|
"skip": "Überspringen",
|
|
"correct": "Richtig!",
|
|
"wrong": "Falsch.",
|
|
"acceptable": "Mögliche richtige Übersetzungen:",
|
|
"stats": "Statistik",
|
|
"success": "Erfolg",
|
|
"fail": "Misserfolg"
|
|
},
|
|
"search": {
|
|
"open": "Suche",
|
|
"title": "Vokabeln suchen",
|
|
"term": "Suchbegriff",
|
|
"motherTongue": "Muttersprache",
|
|
"learningLanguage": "Lernsprache",
|
|
"lesson": "Lektion",
|
|
"search": "Suchen",
|
|
"noResults": "Keine Treffer.",
|
|
"error": "Suche fehlgeschlagen."
|
|
},
|
|
"courses": {
|
|
"title": "Sprachlernkurse",
|
|
"create": "Kurs erstellen",
|
|
"myCourses": "Meine Kurse",
|
|
"allCourses": "Alle Kurse",
|
|
"none": "Keine Kurse gefunden.",
|
|
"owner": "Besitzer",
|
|
"enrolled": "Eingeschrieben",
|
|
"public": "Öffentlich",
|
|
"difficulty": "Schwierigkeit",
|
|
"lessons": "Lektionen",
|
|
"enroll": "Einschreiben",
|
|
"continue": "Fortsetzen",
|
|
"edit": "Bearbeiten",
|
|
"addLesson": "Lektion hinzufügen",
|
|
"completed": "Abgeschlossen",
|
|
"score": "Punktzahl",
|
|
"review": "Wiederholen",
|
|
"start": "Starten",
|
|
"resetLessonProgress": "Lektion zurücksetzen",
|
|
"resetLessonProgressConfirm": "Fortschritt dieser Lektion zurücksetzen? Gespeicherter Stand, Übungsergebnisse und Trainer-Zustand werden gelöscht. Andere Lektionen bleiben unverändert.",
|
|
"resetLessonProgressSuccess": "Die Lektion wurde zurückgesetzt.",
|
|
"resetLessonProgressError": "Die Lektion konnte nicht zurückgesetzt werden.",
|
|
"noLessons": "Dieser Kurs hat noch keine Lektionen.",
|
|
"lessonNumber": "Lektionsnummer",
|
|
"chapter": "Kapitel",
|
|
"selectChapter": "Kapitel auswählen",
|
|
"selectLanguage": "Sprache auswählen",
|
|
"confirmDelete": "Lektion wirklich löschen?",
|
|
"titleLabel": "Titel",
|
|
"descriptionLabel": "Beschreibung",
|
|
"languageLabel": "Sprache",
|
|
"findByCode": "Kurs per Code finden",
|
|
"shareCode": "Share-Code",
|
|
"searchPlaceholder": "Kurs suchen...",
|
|
"allLanguages": "Alle Sprachen",
|
|
"targetLanguage": "Zielsprache",
|
|
"nativeLanguage": "Muttersprache",
|
|
"allNativeLanguages": "Alle Muttersprachen",
|
|
"myNativeLanguage": "Meine Muttersprache",
|
|
"forAllLanguages": "Für alle Sprachen",
|
|
"optional": "Optional",
|
|
"invalidCode": "Ungültiger Code",
|
|
"courseNotFound": "Kurs nicht gefunden",
|
|
"grammarExercises": "Grammatik-Prüfung",
|
|
"exerciseFlowIntro": "Arbeite die Aufgaben der Reihe nach durch. Jede korrekt gelöste Aufgabe bringt dich direkt näher zum Abschluss der Lektion.",
|
|
"exerciseProgressLabel": "Fortschritt",
|
|
"exerciseTargetLabel": "Benötigt",
|
|
"exerciseCardLabel": "Aufgabe {number}",
|
|
"exerciseStatusOpen": "Offen",
|
|
"exerciseStatusCorrect": "Erledigt",
|
|
"exerciseStatusRetry": "Nochmal prüfen",
|
|
"exerciseAnswerAllHint": "Beantworte zuerst alle {total} Aufgaben. Aktuell bearbeitet: {answered}. Zum Bestehen brauchst du mindestens {target}%.",
|
|
"exerciseNeedMoreCorrectHint": "Du hast aktuell {score}%. Für den Abschluss dieser Lektion brauchst du mindestens {target}%.",
|
|
"exercisePassedHint": "Ziel erreicht: {score}% von benötigten {target}%. Sobald alle Aufgaben bearbeitet sind, gilt die Prüfung als bestanden.",
|
|
"exerciseReinforcementHint": "Nach einem Fehler geht es kurz zurück in den Lernmodus. Übe noch {count} Trainerfragen, dann wird die Kapitel-Prüfung wieder freigeschaltet.",
|
|
"exercisePrepReinforcementHint": "Nach einem Fehler gehst du noch einmal durch die vorbereiteten Begriffe. Danach wird die Kapitel-Prüfung wieder freigeschaltet.",
|
|
"exerciseGrammarLead": "Wichtige Grammatik für diese Prüfung",
|
|
"noExercises": "Keine Prüfung verfügbar",
|
|
"enterAnswer": "Antwort eingeben",
|
|
"checkAnswer": "Antwort prüfen",
|
|
"correct": "Richtig!",
|
|
"wrong": "Falsch",
|
|
"explanation": "Erklärung",
|
|
"learn": "Lernen",
|
|
"exercises": "Kapitel-Prüfung",
|
|
"learnVocabulary": "Vokabeln lernen",
|
|
"lessonOverviewText": "Diese Lektion verbindet Vokabeln, Muster, kurze Grammatikimpulse und aktive Sprachpraxis.",
|
|
"lessonDescription": "Lektions-Beschreibung",
|
|
"culturalNotes": "Kulturelle Notizen",
|
|
"grammarExplanations": "Grammatik-Erklärungen",
|
|
"grammarImpulse": "Grammatik-Impuls",
|
|
"learningGoals": "Lernziele",
|
|
"corePatterns": "Kernmuster",
|
|
"corePatternsHint": "Zuerst die Zielsprache lesen, darunter die deutsche Bedeutung — so lernst du jedes Muster bewusst in beiden Richtungen.",
|
|
"learningGrammarTitle": "Kurz die Grammatik einordnen",
|
|
"learningGrammarIntro": "Lies diese 1-2 Hinweise nach den Begriffen kurz durch. Danach gehst du mit mehr Orientierung in den Trainer.",
|
|
"vocabPrepTitle": "Vorbereitung vor dem Vokabeltrainer",
|
|
"vocabPrepStep1": "Lies Kernmuster und Wortliste (Deutsch ↔ Zielsprache) einmal in Ruhe durch.",
|
|
"vocabPrepProgress": "Durchgang {pass}: Begriff {current} von {total}",
|
|
"vocabPrepNextItem": "Nächster Begriff",
|
|
"vocabPrepConfirm1": "Erste Durchsicht erledigt",
|
|
"vocabPrepStep2": "Gehe die gleichen Begriffe noch einmal durch (aktive Wiederholung, ohne zu üben).",
|
|
"vocabPrepConfirm2": "Zweite Durchsicht erledigt",
|
|
"vocabPrepReady": "Du kannst jetzt mit dem Vokabeltrainer starten.",
|
|
"learningPathLabel": "Hauptpfad",
|
|
"learningPathTitle": "Dein Lernweg für diese Lektion",
|
|
"learningPathIntro": "Arbeite diese Schritte nacheinander durch: vorbereiten, kurz überblicken, trainieren und dann zur Kapitel-Prüfung wechseln.",
|
|
"lessonDetailsToggle": "Mehr Lektionsdetails anzeigen",
|
|
"deepenSectionTitle": "Vertiefen und nachlesen",
|
|
"assistantSectionTitle": "Mit Sprachassistent vertiefen",
|
|
"vocabOverviewToggle": "Gesamtübersicht der Begriffe anzeigen",
|
|
"vocabTrainerLockedHint": "Bitte bestätige zuerst zwei Lern-Durchgänge bei „Vorbereitung vor dem Vokabeltrainer“.",
|
|
"exerciseUnlockHintAfterPrep": "Arbeite zuerst die vorbereiteten Begriffe durch. Danach wird die Kapitel-Prüfung freigeschaltet.",
|
|
"speakingTasks": "Sprechaufträge",
|
|
"speakingPrompt": "Sprechauftrag",
|
|
"practicalTasks": "Praxisaufgaben",
|
|
"importantVocab": "Wichtige Begriffe",
|
|
"vocabInfoText": "Diese Begriffe werden in der Prüfung verwendet. Lerne sie hier passiv, bevor du zur Kapitel-Prüfung wechselst.",
|
|
"noVocabInfo": "Lies die Beschreibung oben und die Erklärungen in der Prüfung, um die wichtigsten Begriffe zu lernen.",
|
|
"vocabTrainer": "Vokabeltrainer",
|
|
"vocabTrainerDescription": "Übe die wichtigsten Begriffe dieser Lektion interaktiv.",
|
|
"startVocabTrainer": "Vokabeltrainer starten",
|
|
"stopTrainer": "Trainer beenden",
|
|
"translateTo": "Übersetze ins Bisaya",
|
|
"translateFrom": "Übersetze ins Deutsche",
|
|
"next": "Weiter",
|
|
"totalAttempts": "Versuche",
|
|
"successRate": "Erfolgsrate",
|
|
"modeMultipleChoice": "Multiple Choice",
|
|
"modeTyping": "Texteingabe",
|
|
"currentLesson": "Aktuelle Lektion",
|
|
"mixedReview": "Wiederholung",
|
|
"lessonCompleted": "Lektion abgeschlossen!",
|
|
"goToNextLesson": "Zur nächsten Lektion wechseln?",
|
|
"allLessonsCompleted": "Alle Lektionen abgeschlossen!",
|
|
"startExercises": "Zur Kapitel-Prüfung",
|
|
"lessonTypeLabel": "Lektionstyp",
|
|
"recommendedDuration": "Empfohlene Dauer",
|
|
"exerciseLoad": "Übungsmenge",
|
|
"exercisesShort": "Übungen",
|
|
"durationFlexible": "Flexibel",
|
|
"durationMinutes": "{minutes} Minuten",
|
|
"lessonTypeVocab": "Wortschatz",
|
|
"lessonTypeGrammar": "Grammatik",
|
|
"lessonTypeConversation": "Gespräch",
|
|
"lessonTypeCulture": "Kultur",
|
|
"lessonTypeReview": "Wiederholung",
|
|
"correctAnswer": "Richtige Antwort",
|
|
"alternatives": "Alternative Antworten",
|
|
"notStarted": "Nicht begonnen",
|
|
"continueCurrentLesson": "Zur aktuellen Lektion",
|
|
"previousLessonRequired": "Bitte schließe zuerst die vorherige Lektion ab",
|
|
"lessonNumberShort": "#",
|
|
"buildSentencePlaceholder": "Baue hier deinen Satz",
|
|
"completeDialogPlaceholder": "Ergänze die fehlende Dialogzeile",
|
|
"situationalResponsePlaceholder": "Formuliere deine Antwort auf die Situation",
|
|
"patternDrillPlaceholder": "Formuliere einen passenden Satz mit dem Muster",
|
|
"modelSentence": "Modellsatz",
|
|
"modelDialogLine": "Mögliche Dialogzeile",
|
|
"modelResponse": "Mögliche Antwort",
|
|
"modelPattern": "Möglicher Mustersatz",
|
|
"patternPrompt": "Muster",
|
|
"readingAloudInstruction": "Lies den Text laut vor. Klicke auf 'Aufnahme starten' und beginne zu sprechen.",
|
|
"speakingFromMemoryInstruction": "Sprich frei aus dem Kopf. Verwende die angezeigten Schlüsselwörter.",
|
|
"startRecording": "Aufnahme starten",
|
|
"stopRecording": "Aufnahme stoppen",
|
|
"startSpeaking": "Sprechen starten",
|
|
"recording": "Aufnahme läuft",
|
|
"listening": "Höre zu...",
|
|
"recordingStopped": "Aufnahme beendet",
|
|
"recordingError": "Aufnahme-Fehler",
|
|
"recognizedText": "Erkannter Text",
|
|
"speechRecognitionNotSupported": "Speech Recognition wird von diesem Browser nicht unterstützt. Bitte verwende Chrome oder Edge.",
|
|
"speakingFallbackInstruction": "Dein Browser unterstützt hier keine Spracheingabe. Schreibe deine gesprochene Antwort stattdessen als Text auf und prüfe sie dann normal.",
|
|
"speakingFallbackPlaceholder": "Schreibe hier, was du sagen würdest ...",
|
|
"keywords": "Schlüsselwörter",
|
|
"switchBackToMultipleChoice": "Zurück zu Multiple Choice",
|
|
"languageAssistantEyebrow": "Sprachassistent",
|
|
"languageAssistantCourseTitle": "KI-Begleitung für diesen Kurs",
|
|
"languageAssistantCourseReady": "Der Sprachassistent ist eingerichtet und steht in den Lektionen für Erklärungen, Korrekturen und kurze Dialogübungen bereit.",
|
|
"languageAssistantCourseSetup": "Richte den Sprachassistenten ein, damit du in den Lektionen gezielt Fragen stellen und kleine Dialoge üben kannst.",
|
|
"languageAssistantOpenLesson": "In aktueller Lektion öffnen",
|
|
"languageAssistantTitle": "Mit dem Sprachassistenten üben",
|
|
"languageAssistantIntro": "Nutze die KI direkt zur aktuellen Lektion: Grammatik erklären lassen, kurze Dialoge üben oder eigene Sätze korrigieren.",
|
|
"languageAssistantSettings": "Sprachassistent einstellen",
|
|
"languageAssistantSetupHint": "Der Sprachassistent ist noch nicht eingerichtet oder derzeit deaktiviert. Hinterlege zuerst Modell und API-Zugang in den Einstellungen.",
|
|
"languageAssistantModePractice": "Praxis",
|
|
"languageAssistantModeExplain": "Erklären",
|
|
"languageAssistantModeCorrect": "Korrigieren",
|
|
"languageAssistantPromptExplain": "Grammatik erklären",
|
|
"languageAssistantPromptPractice": "Mini-Dialog üben",
|
|
"languageAssistantPromptCorrect": "Meinen Satz verbessern",
|
|
"languageAssistantSpeakerAi": "Sprachassistent",
|
|
"languageAssistantSpeakerYou": "Du",
|
|
"languageAssistantInputLabel": "Deine Nachricht",
|
|
"languageAssistantInputPlaceholder": "Stelle eine Frage zur Lektion oder schreibe einen eigenen Satz zum Korrigieren.",
|
|
"languageAssistantSend": "An Sprachassistent senden",
|
|
"languageAssistantSending": "Antwort wird geholt ...",
|
|
"languageAssistantError": "Der Sprachassistent konnte gerade nicht antworten.",
|
|
"languageAssistantPresetExplainStart": "Erkläre mir bitte die wichtigsten Muster und die Grammatik in der Lektion",
|
|
"languageAssistantPatternHint": "Nutze dabei besonders dieses Muster",
|
|
"languageAssistantPresetPracticeStart": "Lass uns zur Lektion \"{lesson}\" einen kurzen alltagsnahen Dialog üben. Stelle mir bitte Fragen und warte auf meine Antworten.",
|
|
"languageAssistantPresetCorrectStart": "Ich möchte eigene Sätze zur Lektion \"{lesson}\" schreiben. Bitte korrigiere meine Antworten knapp und verständlich.",
|
|
"thisLesson": "dieser Lektion",
|
|
"courseKicker": "Lernkurs",
|
|
"courseListKicker": "Kurse",
|
|
"courseListIntro": "Öffentliche und eigene Lernkurse filtern, finden und direkt weiterlernen.",
|
|
"courseShareCodePlaceholder": "z. B. abc123def456",
|
|
"courseFlowEyebrow": "Tagesfluss",
|
|
"courseFlowTitle": "Heute sinnvoll weitermachen",
|
|
"courseFlowIntro": "Die Reihenfolge folgt dem Konzept: fällige Wiederholung zuerst, dann aktueller Block, danach Intensivphase und freie Vertiefung.",
|
|
"courseFlowReviewStat": "Fällige Wiederholung: {count}",
|
|
"courseFlowBlockStat": "Aktiver Block: {block}",
|
|
"courseFlowReviewTitle": "Fällige Wiederholung",
|
|
"courseFlowReviewDescription": "Bereits abgeschlossene Lektionen, die heute wieder drankommen sollten.",
|
|
"courseFlowReviewEmpty": "Heute ist keine ältere Lektion als fällige Wiederholung markiert.",
|
|
"courseFlowBlockTitle": "Aktueller Block",
|
|
"courseFlowBlockDescription": "Hier liegt der nächste reguläre Fortschritt im Kurs.",
|
|
"courseFlowBlockEmpty": "Der aktuelle Block ist bereits abgeschlossen oder es gibt gerade keine offene Blocklektion.",
|
|
"courseFlowIntensiveTitle": "Fällige Intensivphase",
|
|
"courseFlowIntensiveDescription": "Verdichtete Wiederholung, sobald der Block davor weitgehend sitzt.",
|
|
"courseFlowIntensiveEmpty": "Aktuell ist keine neue Intensivphase freigeschaltet.",
|
|
"courseFlowPracticeTitle": "Freie Vertiefung",
|
|
"courseFlowPracticeDescription": "Abgeschlossene Lektionen für lockeres Nachtrainieren außerhalb des Pflichtpfads.",
|
|
"courseFlowPracticeEmpty": "Sobald du erste Lektionen abgeschlossen hast, erscheinen sie hier für freies Nachtrainieren.",
|
|
"practiceInTrainer": "Im Trainer üben",
|
|
"lessonsCount": "{count} Lektionen",
|
|
"lessonBlockLabel": "Block {number}",
|
|
"lessonIntensiveBadge": "Intensive Wiederholung",
|
|
"addLessonValidation": "Bitte Nummer, Titel und Kapitel vollständig angeben.",
|
|
"addLessonSuccess": "Lektion erfolgreich angelegt.",
|
|
"addLessonError": "Fehler beim Hinzufügen der Lektion.",
|
|
"createCourseError": "Fehler beim Erstellen des Kurses.",
|
|
"deleteLessonTitle": "Lektion löschen",
|
|
"deleteLessonSuccess": "Lektion erfolgreich gelöscht.",
|
|
"deleteLessonError": "Fehler beim Löschen der Lektion.",
|
|
"enrollCourseError": "Fehler beim Einschreiben.",
|
|
"editLessonPending": "Die Bearbeitung einzelner Lektionen folgt noch.",
|
|
"timeToday": "heute",
|
|
"timeSinceOneDay": "seit 1 Tag",
|
|
"timeSinceDays": "seit {count} Tagen",
|
|
"reviewDueNow": "jetzt fällig",
|
|
"reviewDueTomorrow": "morgen fällig",
|
|
"reviewDueInDays": "in {count} Tagen fällig",
|
|
"reviewDueToday": "heute fällig",
|
|
"reviewDueSinceOneDay": "seit 1 Tag fällig",
|
|
"reviewDueSinceDays": "seit {count} Tagen fällig",
|
|
"reviewStageDay1": "Tag 1",
|
|
"reviewStageDay3": "Tag 3",
|
|
"reviewStageDay7": "Tag 7",
|
|
"reviewStageCompleted": "Review abgeschlossen",
|
|
"phaseQuickstart": "Schnellstart",
|
|
"phaseDailyLife": "Alltag",
|
|
"phaseStabilization": "Stabilisierung",
|
|
"phaseDefault": "Lernphase",
|
|
"didacticModeCoreInput": "Neuer Stoff",
|
|
"didacticModeGuidedDialogue": "Geführter Dialog",
|
|
"didacticModeContrastTraining": "Kontrasttraining",
|
|
"didacticModePatternDrill": "Mustertraining",
|
|
"didacticModeRealLifeScenario": "Alltagsszenario",
|
|
"didacticModeIntensiveReview": "Wiederholungsphase",
|
|
"didacticModeCheckpoint": "Checkpoint",
|
|
"didacticModeDefault": "Lerneinheit",
|
|
"didacticModeFocusDefault": "Lernfokus",
|
|
"lessonMetaFocus": "Fokus",
|
|
"lessonMetaPhase": "Phase",
|
|
"lessonMetaNewUnits": "Neue Einheiten",
|
|
"lessonMetaReview": "Wiederholung",
|
|
"intensiveReviewTitle": "Intensive Wiederholungsphase",
|
|
"intensiveReviewIntro": "Diese Lektion priorisiert Wiederholung und Vertiefung. Neuer Stoff wird bewusst reduziert, damit vorhandene Muster stabil werden.",
|
|
"reviewPriorityTitle": "Wiederholung läuft schrittweise mit",
|
|
"reviewPriorityIntro": "Zuerst liegt der Fokus auf den neuen Begriffen dieser Lektion. Mit deinem Fortschritt fließen ältere Vokabeln dann zunehmend mit ein.",
|
|
"exerciseLockTitle": "Kapitel-Prüfung noch gesperrt",
|
|
"trainerStartWithReview": "Starte mit den neuen Vokabeln dieser Lektion. Mit fortschreitendem Üben mischt der Trainer automatisch passende Wiederholungen ein.",
|
|
"startLesson": "Lektion starten",
|
|
"trainerProgressNewContent": "Neue Inhalte: {current}/{target}",
|
|
"trainerProgressReview": "Wiederholung: {count}",
|
|
"trainerProgressMixShare": "Mischanteil: {percent}%",
|
|
"unknownExerciseTypeNotice": "Dieser Übungstyp wird in der aktuellen Ansicht noch nicht interaktiv dargestellt.",
|
|
"unknownExerciseTypeLabel": "Typ: {type}",
|
|
"lessonReviewHeadlineDone": "Diese Lektion ist in der freien Vertiefung angekommen.",
|
|
"lessonReviewHeadlineDue": "Diese Review-Welle ist jetzt fällig.",
|
|
"lessonReviewHeadlineScheduled": "Diese Lektion ist für die nächste Review-Welle vorgemerkt.",
|
|
"lessonReviewHintDone": "Die 1/3/7-Tage-Wiederholung ist abgeschlossen. Du kannst die Lektion jetzt flexibel weitertrainieren.",
|
|
"lessonReviewHintNextDue": "Nächste Fälligkeit: {due}.",
|
|
"reviewTimeNow": "jetzt",
|
|
"reviewTimeTomorrow": "morgen",
|
|
"reviewTimeInDays": "in {count} Tagen"
|
|
}
|
|
}
|
|
}
|
|
}
|