- 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
40 KiB
JSON
744 lines
40 KiB
JSON
{
|
|
"socialnetwork": {
|
|
"usersearch": {
|
|
"kicker": "Community search",
|
|
"intro": "Find suitable contacts in the community by name, age, and gender.",
|
|
"ageSeparator": "to",
|
|
"resultsCount": "{count} results",
|
|
"openProfile": "Open profile",
|
|
"title": "User Search",
|
|
"username": "Username",
|
|
"age_from": "Age from",
|
|
"age_to": "to",
|
|
"gender": "Gender",
|
|
"search_button": "Search",
|
|
"no_results": "No results found",
|
|
"results_title": "Search Results:",
|
|
"result": {
|
|
"nick": "Nickname",
|
|
"gender": "Gender",
|
|
"age": "Age"
|
|
}
|
|
},
|
|
"profile": {
|
|
"pretitle": "Loading data. Please wait...",
|
|
"error_title": "User not found",
|
|
"title": "Profile of <username>",
|
|
"tab": {
|
|
"general": "General",
|
|
"sexuality": "Sexuality",
|
|
"images": "Gallery",
|
|
"guestbook": "Guestbook"
|
|
},
|
|
"values": {
|
|
"bool": {
|
|
"true": "Yes",
|
|
"false": "No"
|
|
},
|
|
"smokes": {
|
|
"never": "Never",
|
|
"socially": "Socially",
|
|
"often": "Often",
|
|
"daily": "Daily"
|
|
},
|
|
"drinks": {
|
|
"never": "Never",
|
|
"socially": "Socially",
|
|
"often": "Often",
|
|
"daily": "Daily"
|
|
},
|
|
"interestedInGender": {
|
|
"male": "Men",
|
|
"female": "Women"
|
|
},
|
|
"sexualpreference": {
|
|
"straight": "Heterosexual",
|
|
"gay": "Homosexual",
|
|
"bi": "Bisexual",
|
|
"pan": "Pansexual",
|
|
"asexual": "Asexual"
|
|
},
|
|
"pubichair": {
|
|
"none": "None",
|
|
"short": "Short",
|
|
"medium": "Medium",
|
|
"long": "Long",
|
|
"hairy": "Unshaven",
|
|
"waxed": "Waxed",
|
|
"landingstrip": "Landing Strip",
|
|
"other": "Other",
|
|
"bikinizone": "Bikini Zone"
|
|
},
|
|
"gender": {
|
|
"male": "Male",
|
|
"female": "Female",
|
|
"transmale": "Trans-Female",
|
|
"transfemale": "Trans-Male",
|
|
"nonbinary": "Non-binary"
|
|
},
|
|
"language": {
|
|
"de": "German",
|
|
"en": "English"
|
|
},
|
|
"eyecolor": {
|
|
"blue": "Blue",
|
|
"green": "Green",
|
|
"brown": "Brown",
|
|
"black": "Black",
|
|
"grey": "Grey",
|
|
"hazel": "Hazel",
|
|
"amber": "Amber",
|
|
"red": "Red",
|
|
"other": "Other"
|
|
},
|
|
"haircolor": {
|
|
"black": "Black",
|
|
"brown": "Brown",
|
|
"blonde": "Blonde",
|
|
"red": "Red",
|
|
"grey": "Grey",
|
|
"white": "White",
|
|
"other": "Other"
|
|
},
|
|
"hairlength": {
|
|
"short": "Short",
|
|
"medium": "Medium",
|
|
"long": "Long",
|
|
"bald": "Bald",
|
|
"other": "Other"
|
|
},
|
|
"skincolor": {
|
|
"light": "Light",
|
|
"medium": "Medium",
|
|
"dark": "Dark",
|
|
"other": "Other"
|
|
},
|
|
"freckles": {
|
|
"much": "Many",
|
|
"medium": "Medium",
|
|
"less": "Few",
|
|
"none": "None"
|
|
}
|
|
},
|
|
"guestbook": {
|
|
"showInput": "Show new entry",
|
|
"hideInput": "Hide new entry",
|
|
"imageUpload": "Image",
|
|
"submit": "Submit entry",
|
|
"noEntries": "No entries found",
|
|
"entryImageAlt": "Guestbook entry image"
|
|
},
|
|
"interestedInGender": "Interested in",
|
|
"hasChildren": "Has children",
|
|
"smokes": "Smoking",
|
|
"drinks": "Alcohol",
|
|
"willChildren": "Wants children",
|
|
"sexualpreference": "Sexual orientation",
|
|
"pubichair": "Pubic hair",
|
|
"penislength": "Penis length",
|
|
"brasize": "Bra size",
|
|
"piercings": "Piercings",
|
|
"tattoos": "Tattoos",
|
|
"language": "Language",
|
|
"gender": "Gender",
|
|
"eyecolor": "Eye color",
|
|
"haircolor": "Hair color",
|
|
"hairlength": "Hair length",
|
|
"freckles": "Freckles",
|
|
"skincolor": "Skin color",
|
|
"birthdate": "Birthdate",
|
|
"age": "Age",
|
|
"town": "City",
|
|
"bodyheight": "Height",
|
|
"weight": "Weight"
|
|
},
|
|
"gallery": {
|
|
"kicker": "Images and folders",
|
|
"intro": "Organize your own content, control visibility, and structure it in folders.",
|
|
"title": "Gallery",
|
|
"folders": "Folders",
|
|
"create_folder": "Create folder",
|
|
"upload": {
|
|
"title": "Upload image",
|
|
"image_title": "Title",
|
|
"image_file": "File",
|
|
"visibility": "Visible to",
|
|
"upload_button": "Upload",
|
|
"selectvisibility": "Please select"
|
|
},
|
|
"images": "Images",
|
|
"visibility": {
|
|
"everyone": "Everyone",
|
|
"friends": "Friends",
|
|
"adults": "Adults",
|
|
"friends-and-adults": "Friends and adults",
|
|
"selected-users": "Selected users",
|
|
"none": "Nobody"
|
|
},
|
|
"create_folder_dialog": {
|
|
"title": "Create folder",
|
|
"parent_folder": "Will be created in",
|
|
"folder_title": "Folder name",
|
|
"visibility": "Visible to",
|
|
"select_visibility": "Please select"
|
|
},
|
|
"noimages": "There are currently no images in this folder",
|
|
"imagedialog": {
|
|
"image_title": "Title",
|
|
"edit_visibility": "Visible to",
|
|
"save_changes": "Save changes",
|
|
"close": "Close",
|
|
"edit_visibility_placeholder": "Please select"
|
|
},
|
|
"delete_folder_confirmation_title": "Delete folder",
|
|
"delete_folder_confirmation_message": "Do you really want to delete the folder '%%folderName%%'?",
|
|
"edit_image_dialog": {
|
|
"title": "Edit image data"
|
|
},
|
|
"show_image_dialog": {
|
|
"title": "Image"
|
|
},
|
|
"imagePreviewAlt": "Image preview",
|
|
"imageLoadingAlt": "Loading image"
|
|
},
|
|
"guestbook": {
|
|
"kicker": "Guestbook",
|
|
"intro": "Messages, feedback, and small glimpses from your network.",
|
|
"title": "Guestbook",
|
|
"prevPage": "Back",
|
|
"nextPage": "Next",
|
|
"page": "Page"
|
|
},
|
|
"diary": {
|
|
"kicker": "Personal entries",
|
|
"intro": "Thoughts, notes, and short updates in a calm personal view.",
|
|
"placeholder": "Write your diary entry...",
|
|
"title": "Diary",
|
|
"noEntries": "You haven't made any diary entries yet.",
|
|
"newEntry": "New diary entry",
|
|
"editEntry": "Edit diary entry",
|
|
"save": "Save",
|
|
"update": "Update",
|
|
"cancel": "Cancel",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Do you really want to delete the entry?",
|
|
"prevPage": "Back",
|
|
"nextPage": "Next",
|
|
"page": "Page"
|
|
},
|
|
"forum": {
|
|
"kicker": "Community forum",
|
|
"intro": "Topics, discussions, and new posts in one structured place.",
|
|
"createTitle": "Write a new topic",
|
|
"createIntro": "Set the title first, then write the post and publish it directly.",
|
|
"cancelCreation": "Cancel",
|
|
"creationHint": "Title and content must both be filled in.",
|
|
"communityFallback": "Community",
|
|
"topicIntro": "Discussions, replies, and new posts in a focused reading view.",
|
|
"topicCreated": "Topic created successfully.",
|
|
"topicCreateError": "Error creating topic",
|
|
"title": "Forum",
|
|
"showNewTopic": "Create new topic",
|
|
"hideNewTopic": "Cancel creation",
|
|
"noTitles": "No topics available",
|
|
"topic": "Topic",
|
|
"createNewTopic": "Create topic",
|
|
"createdBy": "Created by",
|
|
"createdAt": "Created at",
|
|
"reactions": "Reaction",
|
|
"lastReaction": "Last reaction by",
|
|
"pagination": {
|
|
"first": "First page",
|
|
"previous": "Previous page",
|
|
"next": "Next page",
|
|
"last": "Last page",
|
|
"page": "Page <<page>> of <<of>>"
|
|
},
|
|
"createNewMesssage": "Send reply"
|
|
},
|
|
"friendship": {
|
|
"error": {
|
|
"alreadyexists": "The friendship request already exists"
|
|
},
|
|
"state": {
|
|
"none": "Not friends",
|
|
"waiting": "Friendship request sent but not answered",
|
|
"open": "Friendship was requested",
|
|
"denied": "Friendship request denied",
|
|
"withdrawn": "Friendship request withdrawn",
|
|
"accepted": "Friends"
|
|
},
|
|
"added": "You have sent a friendship request.",
|
|
"withdrawn": "You have withdrawn your friendship request.",
|
|
"denied": "You have denied the friendship request.",
|
|
"accepted": "The friendship has been established."
|
|
},
|
|
"erotic": {
|
|
"eyebrow": "Erotic",
|
|
"accessTitle": "Unlock the erotic area",
|
|
"accessIntro": "Pictures, videos and later chat areas are visible from age 18, but only usable after moderator approval.",
|
|
"lockedShort": "This area becomes usable only after moderator approval.",
|
|
"requestVerification": "Request access",
|
|
"requestSent": "The access request has been submitted.",
|
|
"requestError": "The access request could not be submitted.",
|
|
"requestInfoTitle": "Submitted proof",
|
|
"documentLabel": "Verification document",
|
|
"noteLabel": "Short note for moderation",
|
|
"settingsLink": "Open account settings",
|
|
"verificationHintTitle": "Verification note",
|
|
"verificationHintBody": "You may submit a photo. If your age is not clearly recognizable there, the request will be rejected and you will need to submit an ID instead.",
|
|
"notifications": {
|
|
"approved": "Your erotic area access has been approved by moderation.",
|
|
"rejected": "Your erotic area request was rejected. If your age is not clearly recognizable in photos, please submit an ID."
|
|
},
|
|
"picturesTitle": "Erotic pictures",
|
|
"picturesIntro": "Your content stays strictly separate from the normal gallery. Manage only images for the unlocked erotic area here.",
|
|
"uploadTitle": "Upload erotic picture",
|
|
"noimages": "There are currently no pictures in this erotic folder.",
|
|
"videosTitle": "Erotic videos",
|
|
"videosIntro": "Your own videos are managed separately from the normal social area. Organize uploads, visibility and moderation status here in one place.",
|
|
"videoUploadTitle": "Upload erotic video",
|
|
"videoUploadHint": "Upload videos for your unlocked erotic area here and maintain title and description directly during upload.",
|
|
"videoDescription": "Description",
|
|
"videoFile": "Video file",
|
|
"videoFormats": "MP4, WEBM, OGG, MOV",
|
|
"myVideos": "My videos",
|
|
"sharedVideos": "Shared videos",
|
|
"foreignVideosIntro": "Shared videos from the adult area.",
|
|
"foreignVideosOnlyHint": "You only see videos here that were shared with you for the adult area.",
|
|
"sharedVideosIntro": "Visible videos from shared adult areas.",
|
|
"noSharedVideos": "There are currently no shared videos available for you.",
|
|
"libraryTitle": "Library",
|
|
"libraryIntro": "Your uploads, visibility settings, and reports in one place.",
|
|
"libraryEmptyHint": "Create your first video on the left and manage it here afterwards in the library.",
|
|
"latestUpload": "Latest upload",
|
|
"visibleVideos": "Visible videos",
|
|
"moderationCases": "Moderation cases",
|
|
"notesTitle": "Notes",
|
|
"friendsVisibilityHint": "Friends can only see content if they are adults and unlocked for the adult area.",
|
|
"selectedUsersVisibilityHint": "Specifically shared people must also be adults and unlocked.",
|
|
"selectedUsersPlaceholder": "anna, bert, clara",
|
|
"imagePreviewAlt": "Image preview",
|
|
"imageLoadingAlt": "Loading image",
|
|
"untitled": "Untitled",
|
|
"noUploadYet": "No upload yet",
|
|
"closeEditing": "Close editing",
|
|
"editVisibility": "Edit visibility",
|
|
"noVideos": "You have not uploaded any erotic videos yet.",
|
|
"reportAction": "Report",
|
|
"reportHint": "Use {action} directly on the respective item when content should be reviewed.",
|
|
"reportNote": "Short note for moderation",
|
|
"submitReport": "Submit report",
|
|
"reportSubmitted": "The report has been submitted.",
|
|
"reportError": "The report could not be saved.",
|
|
"moderationHidden": "Hidden by moderation",
|
|
"hiddenByModeration": "This content has been temporarily hidden by moderation.",
|
|
"reportReasons": {
|
|
"suspected_minor": "Suspected minor",
|
|
"non_consensual": "Non-consensual content",
|
|
"violence": "Violence or abuse",
|
|
"harassment": "Harassment or pressure",
|
|
"spam": "Spam or scam",
|
|
"other": "Other"
|
|
},
|
|
"intro": "The area is unlocked. The actual picture and video modules follow in the next step.",
|
|
"enabledTitle": "Access unlocked",
|
|
"enabledBody": "Your account is enabled for the erotic area. The separate picture and video views are built next.",
|
|
"roadmapTitle": "Next up",
|
|
"roadmapModeration": "separate moderation and reporting paths",
|
|
"roadmapUpload": "dedicated upload and management views",
|
|
"roadmapSeparation": "clear separation from the normal gallery",
|
|
"status": {
|
|
"none": {
|
|
"title": "Not unlocked yet",
|
|
"body": "The area is visible, but stays locked until moderator approval."
|
|
},
|
|
"pending": {
|
|
"title": "Review pending",
|
|
"body": "Your request is waiting for moderation review."
|
|
},
|
|
"approved": {
|
|
"title": "Unlocked",
|
|
"body": "The erotic area is already unlocked for your account."
|
|
},
|
|
"rejected": {
|
|
"title": "Request denied",
|
|
"body": "The last request was denied. You can submit a new request."
|
|
}
|
|
}
|
|
},
|
|
"vocab": {
|
|
"title": "Vocabulary trainer",
|
|
"description": "Create languages (or subscribe to them) and share them with friends.",
|
|
"heroEyebrow": "Language learning",
|
|
"summaryTotalLabel": "Languages total",
|
|
"summaryTotalIntro": "All active language areas where you use or manage content.",
|
|
"summaryOwnedLabel": "Owned areas",
|
|
"summaryOwnedIntro": "This is where you actively create content, chapters, and learning material yourself.",
|
|
"summarySubscribedLabel": "Subscribed",
|
|
"summarySubscribedIntro": "These areas are more about learning and progress than administration.",
|
|
"taskCreateEyebrow": "Quick start",
|
|
"taskCreateTitle": "Create new language",
|
|
"taskCreateIntro": "The best starting point if you want to structure and maintain content yourself.",
|
|
"taskContinueEyebrow": "Continue learning",
|
|
"taskContinueTitle": "Open courses and chapters",
|
|
"taskContinueIntro": "Jump straight into existing learning paths and continue with available courses.",
|
|
"ownedSectionTitle": "Owned languages",
|
|
"ownedSectionIntro": "Direct access to editing, chapters, and course management.",
|
|
"ownedHint": "Manage and maintain content",
|
|
"ownedEmpty": "No owned language areas yet.",
|
|
"subscribedSectionTitle": "Subscribed languages",
|
|
"subscribedSectionIntro": "Good for quickly getting back into learning without admin overhead.",
|
|
"subscribedHint": "Learn, practice, and review progress",
|
|
"subscribedEmpty": "No subscribed languages available.",
|
|
"languageHeroEyebrow": "Language",
|
|
"languageHeroIntro": "Chapters, search tools, and sharing for this language in one place.",
|
|
"newLanguageHeroEyebrow": "Vocabulary trainer",
|
|
"newLanguageHeroIntro": "Create a new language, generate a share code, and jump straight into editing.",
|
|
"newLanguageNameHint": "A short, clear language name is enough to get started.",
|
|
"newLanguageNameValidation": "The name should have at least 2 characters.",
|
|
"subscribeHeroEyebrow": "Vocabulary trainer",
|
|
"chapterHeroEyebrow": "Vocabulary trainer",
|
|
"chapterHeroIntro": "Browse chapter content, maintain vocabulary, and jump directly into practice.",
|
|
"newLanguage": "New language",
|
|
"newLanguageTitle": "Create new language",
|
|
"languageName": "Language name",
|
|
"create": "Create",
|
|
"saving": "Saving...",
|
|
"created": "Language created.",
|
|
"createdTitle": "Vocabulary trainer",
|
|
"createdMessage": "Language created. The menu will refresh.",
|
|
"createError": "Could not create language.",
|
|
"openLanguage": "Open",
|
|
"none": "You have no languages yet (created or subscribed).",
|
|
"owner": "Owned",
|
|
"subscribed": "Subscribed",
|
|
"languageTitle": "Vocabulary trainer: {name}",
|
|
"notFound": "Language not found or no access.",
|
|
"shareCode": "Share code",
|
|
"shareHint": "Send this code to friends so they can subscribe to this language.",
|
|
"subscribeByCode": "Subscribe by code",
|
|
"subscribeTitle": "Subscribe to language",
|
|
"subscribeHint": "Enter a share code you received from a friend.",
|
|
"subscribe": "Subscribe",
|
|
"subscribeSuccess": "Subscribed. The menu will refresh.",
|
|
"subscribeError": "Subscribe failed. Invalid code or no access.",
|
|
"trainerPlaceholder": "Trainer features (words/quizzes) will be the next step."
|
|
,
|
|
"chapters": "Chapters",
|
|
"newChapter": "New chapter",
|
|
"createChapter": "Create chapter",
|
|
"createChapterError": "Could not create chapter.",
|
|
"noChapters": "No chapters yet.",
|
|
"chapterTitle": "Chapter: {title}",
|
|
"addVocab": "Add vocabulary",
|
|
"learningWord": "To learn",
|
|
"referenceWord": "Reference",
|
|
"add": "Add",
|
|
"addVocabError": "Could not add vocabulary.",
|
|
"noVocabs": "No vocabulary in this chapter yet."
|
|
,
|
|
"practice": {
|
|
"open": "Practice",
|
|
"title": "Practice vocabulary",
|
|
"allVocabs": "All vocabulary",
|
|
"simple": "Simple practice",
|
|
"noPool": "No vocabulary to practice.",
|
|
"dirLearningToRef": "To learn → Reference",
|
|
"dirRefToLearning": "Reference → To learn",
|
|
"check": "Check",
|
|
"next": "Next",
|
|
"skip": "Skip",
|
|
"correct": "Correct!",
|
|
"wrong": "Wrong.",
|
|
"acceptable": "Acceptable answers:",
|
|
"stats": "Stats",
|
|
"success": "Success",
|
|
"fail": "Fail"
|
|
},
|
|
"search": {
|
|
"open": "Search",
|
|
"title": "Search vocabulary",
|
|
"term": "Search term",
|
|
"motherTongue": "Mother tongue",
|
|
"learningLanguage": "Learning language",
|
|
"lesson": "Lesson",
|
|
"search": "Search",
|
|
"noResults": "No results.",
|
|
"error": "Search failed."
|
|
},
|
|
"courses": {
|
|
"title": "Language Learning Courses",
|
|
"create": "Create Course",
|
|
"myCourses": "My Courses",
|
|
"allCourses": "All Courses",
|
|
"none": "No courses found.",
|
|
"owner": "Owner",
|
|
"enrolled": "Enrolled",
|
|
"public": "Public",
|
|
"difficulty": "Difficulty",
|
|
"lessons": "Lessons",
|
|
"enroll": "Enroll",
|
|
"continue": "Continue",
|
|
"edit": "Edit",
|
|
"addLesson": "Add Lesson",
|
|
"completed": "Completed",
|
|
"score": "Score",
|
|
"review": "Review",
|
|
"start": "Start",
|
|
"resetLessonProgress": "Reset lesson",
|
|
"resetLessonProgressConfirm": "Reset progress for this lesson? Saved state, exercise results, and trainer progress will be cleared. Other lessons stay unchanged.",
|
|
"resetLessonProgressSuccess": "Lesson progress was reset.",
|
|
"resetLessonProgressError": "Could not reset the lesson.",
|
|
"noLessons": "This course has no lessons yet.",
|
|
"lessonNumber": "Lesson Number",
|
|
"chapter": "Chapter",
|
|
"selectChapter": "Select Chapter",
|
|
"selectLanguage": "Select Language",
|
|
"confirmDelete": "Really delete lesson?",
|
|
"titleLabel": "Title",
|
|
"descriptionLabel": "Description",
|
|
"languageLabel": "Language",
|
|
"findByCode": "Find Course by Code",
|
|
"shareCode": "Share Code",
|
|
"searchPlaceholder": "Search courses...",
|
|
"allLanguages": "All Languages",
|
|
"targetLanguage": "Target Language",
|
|
"nativeLanguage": "Native Language",
|
|
"allNativeLanguages": "All Native Languages",
|
|
"myNativeLanguage": "My Native Language",
|
|
"forAllLanguages": "For All Languages",
|
|
"optional": "Optional",
|
|
"invalidCode": "Invalid code",
|
|
"courseNotFound": "Course not found",
|
|
"grammarExercises": "Chapter Test",
|
|
"exerciseFlowIntro": "Work through the tasks in order. Every correct answer moves you closer to completing the lesson.",
|
|
"exerciseProgressLabel": "Progress",
|
|
"exerciseTargetLabel": "Required",
|
|
"exerciseCardLabel": "Task {number}",
|
|
"exerciseStatusOpen": "Open",
|
|
"exerciseStatusCorrect": "Done",
|
|
"exerciseStatusRetry": "Try again",
|
|
"exerciseAnswerAllHint": "Answer all {total} tasks first. Completed so far: {answered}. You need at least {target}% to pass.",
|
|
"exerciseNeedMoreCorrectHint": "You currently have {score}%. You need at least {target}% to complete this lesson.",
|
|
"exercisePassedHint": "Target reached: {score}% out of the required {target}%. Once all tasks have been answered, the chapter test is passed.",
|
|
"exerciseReinforcementHint": "After a mistake, the flow returns briefly to learning mode. Practice {count} more trainer questions and the chapter test will unlock again.",
|
|
"exercisePrepReinforcementHint": "After a mistake, go through the prepared terms once more. Then the chapter test will unlock again.",
|
|
"exerciseGrammarLead": "Key grammar for this test",
|
|
"noExercises": "No test available",
|
|
"enterAnswer": "Enter answer",
|
|
"checkAnswer": "Check Answer",
|
|
"correct": "Correct!",
|
|
"wrong": "Wrong",
|
|
"explanation": "Explanation",
|
|
"learn": "Learn",
|
|
"exercises": "Chapter Test",
|
|
"learnVocabulary": "Learn Vocabulary",
|
|
"lessonOverviewText": "This lesson combines vocabulary, patterns, short grammar impulses, and active speaking practice.",
|
|
"lessonDescription": "Lesson Description",
|
|
"culturalNotes": "Cultural Notes",
|
|
"grammarExplanations": "Grammar Explanations",
|
|
"grammarImpulse": "Grammar Focus",
|
|
"learningGoals": "Learning Goals",
|
|
"corePatterns": "Core Patterns",
|
|
"corePatternsHint": "Read the target language first, then the meaning below — you learn each pattern both ways.",
|
|
"learningGrammarTitle": "Briefly frame the grammar",
|
|
"learningGrammarIntro": "Read these 1-2 hints after the key terms. Then you go into the trainer with better orientation.",
|
|
"vocabPrepTitle": "Preparation before the vocabulary trainer",
|
|
"vocabPrepStep1": "Read through core patterns and the word list (native language ↔ target language) once.",
|
|
"vocabPrepProgress": "Pass {pass}: item {current} of {total}",
|
|
"vocabPrepNextItem": "Next item",
|
|
"vocabPrepConfirm1": "First pass done",
|
|
"vocabPrepStep2": "Go through the same items again (active review, not testing yet).",
|
|
"vocabPrepConfirm2": "Second pass done",
|
|
"vocabPrepReady": "You can start the vocabulary trainer now.",
|
|
"learningPathLabel": "Main path",
|
|
"learningPathTitle": "Your learning flow for this lesson",
|
|
"learningPathIntro": "Work through these steps in order: prepare, review briefly, train, then move to the chapter test.",
|
|
"lessonDetailsToggle": "Show more lesson details",
|
|
"deepenSectionTitle": "Deepen and review",
|
|
"assistantSectionTitle": "Deepen with language assistant",
|
|
"vocabOverviewToggle": "Show full overview of terms",
|
|
"vocabTrainerLockedHint": "Please confirm two preparation steps under “Preparation before the vocabulary trainer” first.",
|
|
"exerciseUnlockHintAfterPrep": "Work through the prepared terms first. The chapter test will unlock afterwards.",
|
|
"speakingTasks": "Speaking Tasks",
|
|
"speakingPrompt": "Speaking Prompt",
|
|
"practicalTasks": "Practical Tasks",
|
|
"importantVocab": "Important Vocabulary",
|
|
"vocabInfoText": "These terms are used in the test. Learn them here passively before switching to the chapter test.",
|
|
"noVocabInfo": "Read the description above and the explanations in the test to learn the most important terms.",
|
|
"vocabTrainer": "Vocabulary Trainer",
|
|
"vocabTrainerDescription": "Practice the most important terms of this lesson interactively.",
|
|
"startVocabTrainer": "Start Vocabulary Trainer",
|
|
"stopTrainer": "Stop Trainer",
|
|
"translateTo": "Translate into Bisaya",
|
|
"translateFrom": "Translate into German",
|
|
"next": "Next",
|
|
"totalAttempts": "Attempts",
|
|
"successRate": "Success Rate",
|
|
"modeMultipleChoice": "Multiple Choice",
|
|
"modeTyping": "Text Input",
|
|
"currentLesson": "Current Lesson",
|
|
"mixedReview": "Review",
|
|
"lessonCompleted": "Lesson completed!",
|
|
"goToNextLesson": "Go to next lesson?",
|
|
"allLessonsCompleted": "All lessons completed!",
|
|
"startExercises": "Start Chapter Test",
|
|
"lessonTypeLabel": "Lesson Type",
|
|
"recommendedDuration": "Recommended Duration",
|
|
"exerciseLoad": "Exercise Load",
|
|
"exercisesShort": "exercises",
|
|
"durationFlexible": "Flexible",
|
|
"durationMinutes": "{minutes} minutes",
|
|
"lessonTypeVocab": "Vocabulary",
|
|
"lessonTypeGrammar": "Grammar",
|
|
"lessonTypeConversation": "Conversation",
|
|
"lessonTypeCulture": "Culture",
|
|
"lessonTypeReview": "Review",
|
|
"correctAnswer": "Correct Answer",
|
|
"alternatives": "Alternative Answers",
|
|
"notStarted": "Not Started",
|
|
"continueCurrentLesson": "Continue Current Lesson",
|
|
"previousLessonRequired": "Please complete the previous lesson first",
|
|
"lessonNumberShort": "#",
|
|
"buildSentencePlaceholder": "Build your sentence here",
|
|
"completeDialogPlaceholder": "Complete the missing dialog line",
|
|
"situationalResponsePlaceholder": "Write your response to the situation",
|
|
"patternDrillPlaceholder": "Create a fitting sentence with the pattern",
|
|
"modelSentence": "Model sentence",
|
|
"modelDialogLine": "Possible dialog line",
|
|
"modelResponse": "Possible response",
|
|
"modelPattern": "Possible pattern example",
|
|
"patternPrompt": "Pattern",
|
|
"readingAloudInstruction": "Read the text aloud. Click 'Start Recording' and begin speaking.",
|
|
"speakingFromMemoryInstruction": "Speak freely from memory. Use the displayed keywords.",
|
|
"startRecording": "Start Recording",
|
|
"stopRecording": "Stop Recording",
|
|
"startSpeaking": "Start Speaking",
|
|
"recording": "Recording...",
|
|
"listening": "Listening...",
|
|
"recordingStopped": "Recording stopped",
|
|
"recordingError": "Recording error",
|
|
"recognizedText": "Recognized Text",
|
|
"speechRecognitionNotSupported": "Speech Recognition is not supported by this browser. Please use Chrome or Edge.",
|
|
"speakingFallbackInstruction": "Your browser does not support speech input here. Write down what you would say instead and check it normally.",
|
|
"speakingFallbackPlaceholder": "Write what you would say here ...",
|
|
"keywords": "Keywords",
|
|
"switchBackToMultipleChoice": "Switch back to Multiple Choice",
|
|
"languageAssistantEyebrow": "Language assistant",
|
|
"languageAssistantCourseTitle": "AI support for this course",
|
|
"languageAssistantCourseReady": "The language assistant is configured and available inside lessons for explanations, corrections, and short dialogue practice.",
|
|
"languageAssistantCourseSetup": "Set up the language assistant so you can ask lesson-specific questions and practice short dialogues.",
|
|
"languageAssistantOpenLesson": "Open in current lesson",
|
|
"languageAssistantTitle": "Practice with the language assistant",
|
|
"languageAssistantIntro": "Use the AI directly inside the current lesson: get grammar explained, practice short dialogues, or have your own sentences corrected.",
|
|
"languageAssistantSettings": "Configure assistant",
|
|
"languageAssistantSetupHint": "The language assistant is not configured yet or is currently disabled. Please save your model and API access in the settings first.",
|
|
"languageAssistantModePractice": "Practice",
|
|
"languageAssistantModeExplain": "Explain",
|
|
"languageAssistantModeCorrect": "Correct",
|
|
"languageAssistantPromptExplain": "Explain grammar",
|
|
"languageAssistantPromptPractice": "Practice mini dialogue",
|
|
"languageAssistantPromptCorrect": "Improve my sentence",
|
|
"languageAssistantSpeakerAi": "Language assistant",
|
|
"languageAssistantSpeakerYou": "You",
|
|
"languageAssistantInputLabel": "Your message",
|
|
"languageAssistantInputPlaceholder": "Ask a lesson question or write your own sentence for correction.",
|
|
"languageAssistantSend": "Send to assistant",
|
|
"languageAssistantSending": "Getting answer ...",
|
|
"languageAssistantError": "The language assistant could not answer right now.",
|
|
"languageAssistantPresetExplainStart": "Please explain the main patterns and grammar in the lesson",
|
|
"languageAssistantPatternHint": "Focus especially on this pattern",
|
|
"languageAssistantPresetPracticeStart": "Let's practice a short everyday dialogue for the lesson \"{lesson}\". Please ask me questions and wait for my answers.",
|
|
"languageAssistantPresetCorrectStart": "I want to write my own sentences for the lesson \"{lesson}\". Please correct my answers briefly and clearly.",
|
|
"thisLesson": "this lesson",
|
|
"courseKicker": "Learning course",
|
|
"courseListKicker": "Courses",
|
|
"courseListIntro": "Filter public and your own learning courses, find the right one, and continue directly.",
|
|
"courseShareCodePlaceholder": "e.g. abc123def456",
|
|
"courseFlowEyebrow": "Daily flow",
|
|
"courseFlowTitle": "Best next step for today",
|
|
"courseFlowIntro": "The order follows the concept: due reviews first, then the current block, then intensive review, and finally free practice.",
|
|
"courseFlowReviewStat": "Due review: {count}",
|
|
"courseFlowBlockStat": "Active block: {block}",
|
|
"courseFlowReviewTitle": "Due review",
|
|
"courseFlowReviewDescription": "Lessons already completed that should come back today.",
|
|
"courseFlowReviewEmpty": "No older lesson is marked as due for review today.",
|
|
"courseFlowBlockTitle": "Current block",
|
|
"courseFlowBlockDescription": "This is where the next regular progress step in the course lives.",
|
|
"courseFlowBlockEmpty": "The current block is already done or there is no open block lesson right now.",
|
|
"courseFlowIntensiveTitle": "Due intensive review",
|
|
"courseFlowIntensiveDescription": "Condensed review once the block before it is mostly stable.",
|
|
"courseFlowIntensiveEmpty": "No new intensive review is unlocked right now.",
|
|
"courseFlowPracticeTitle": "Free practice",
|
|
"courseFlowPracticeDescription": "Completed lessons for relaxed extra practice outside the required path.",
|
|
"courseFlowPracticeEmpty": "As soon as you complete your first lessons, they will appear here for free practice.",
|
|
"practiceInTrainer": "Practice in trainer",
|
|
"lessonsCount": "{count} lessons",
|
|
"lessonBlockLabel": "Block {number}",
|
|
"lessonIntensiveBadge": "Intensive review",
|
|
"addLessonValidation": "Please provide number, title, and chapter.",
|
|
"addLessonSuccess": "Lesson created successfully.",
|
|
"addLessonError": "Could not add the lesson.",
|
|
"createCourseError": "Could not create the course.",
|
|
"deleteLessonTitle": "Delete lesson",
|
|
"deleteLessonSuccess": "Lesson deleted successfully.",
|
|
"deleteLessonError": "Could not delete the lesson.",
|
|
"enrollCourseError": "Could not enroll in the course.",
|
|
"editLessonPending": "Editing individual lessons is still pending.",
|
|
"timeToday": "today",
|
|
"timeSinceOneDay": "since 1 day",
|
|
"timeSinceDays": "since {count} days",
|
|
"reviewDueNow": "due now",
|
|
"reviewDueTomorrow": "due tomorrow",
|
|
"reviewDueInDays": "due in {count} days",
|
|
"reviewDueToday": "due today",
|
|
"reviewDueSinceOneDay": "due since 1 day",
|
|
"reviewDueSinceDays": "due since {count} days",
|
|
"reviewStageDay1": "Day 1",
|
|
"reviewStageDay3": "Day 3",
|
|
"reviewStageDay7": "Day 7",
|
|
"reviewStageCompleted": "Review completed",
|
|
"phaseQuickstart": "Quick start",
|
|
"phaseDailyLife": "Daily life",
|
|
"phaseStabilization": "Stabilization",
|
|
"phaseDefault": "Learning phase",
|
|
"didacticModeCoreInput": "New content",
|
|
"didacticModeGuidedDialogue": "Guided dialogue",
|
|
"didacticModeContrastTraining": "Contrast training",
|
|
"didacticModePatternDrill": "Pattern drill",
|
|
"didacticModeRealLifeScenario": "Real-life scenario",
|
|
"didacticModeIntensiveReview": "Review phase",
|
|
"didacticModeCheckpoint": "Checkpoint",
|
|
"didacticModeDefault": "Learning unit",
|
|
"didacticModeFocusDefault": "Learning focus",
|
|
"lessonMetaFocus": "Focus",
|
|
"lessonMetaPhase": "Phase",
|
|
"lessonMetaNewUnits": "New units",
|
|
"lessonMetaReview": "Review",
|
|
"intensiveReviewTitle": "Intensive review phase",
|
|
"intensiveReviewIntro": "This lesson prioritizes review and consolidation. New material is intentionally reduced so existing patterns can stabilize.",
|
|
"reviewPriorityTitle": "Review is mixed in step by step",
|
|
"reviewPriorityIntro": "The focus starts on the new terms of this lesson. As you progress, older vocabulary is gradually mixed in.",
|
|
"exerciseLockTitle": "Chapter test still locked",
|
|
"trainerStartWithReview": "Start with the new vocabulary from this lesson. As you practice, the trainer will automatically mix in fitting review items.",
|
|
"startLesson": "Start lesson",
|
|
"trainerProgressNewContent": "New content: {current}/{target}",
|
|
"trainerProgressReview": "Review: {count}",
|
|
"trainerProgressMixShare": "Mixed share: {percent}%",
|
|
"unknownExerciseTypeNotice": "This exercise type is not displayed interactively in the current view yet.",
|
|
"unknownExerciseTypeLabel": "Type: {type}",
|
|
"lessonReviewHeadlineDone": "This lesson has reached the free practice stage.",
|
|
"lessonReviewHeadlineDue": "This review wave is due now.",
|
|
"lessonReviewHeadlineScheduled": "This lesson is scheduled for the next review wave.",
|
|
"lessonReviewHintDone": "The 1/3/7-day review cycle is complete. You can now continue practicing this lesson freely.",
|
|
"lessonReviewHintNextDue": "Next due date: {due}.",
|
|
"reviewTimeNow": "now",
|
|
"reviewTimeTomorrow": "tomorrow",
|
|
"reviewTimeInDays": "in {count} days"
|
|
}
|
|
}
|
|
}
|
|
}
|