feat(localization): expand language support and enhance UI for user settings
All checks were successful
Deploy to production / deploy (push) Successful in 3m0s
All checks were successful
Deploy to production / deploy (push) Successful in 3m0s
- Added support for additional UI locales including Cebuano and Spanish, improving accessibility for a broader user base. - Updated language selection components in the AppHeader and SettingsWidget to reflect new language options, enhancing user experience. - Enhanced localization of various UI elements across components, ensuring consistent language representation and improved user engagement. - Implemented logic to synchronize user language preferences with backend settings, providing a seamless experience when changing languages.
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
{
|
||||
"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",
|
||||
@@ -120,7 +125,8 @@
|
||||
"hideInput": "Hide new entry",
|
||||
"imageUpload": "Image",
|
||||
"submit": "Submit entry",
|
||||
"noEntries": "No entries found"
|
||||
"noEntries": "No entries found",
|
||||
"entryImageAlt": "Guestbook entry image"
|
||||
},
|
||||
"interestedInGender": "Interested in",
|
||||
"hasChildren": "Has children",
|
||||
@@ -147,6 +153,8 @@
|
||||
"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",
|
||||
@@ -189,15 +197,22 @@
|
||||
},
|
||||
"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",
|
||||
@@ -213,6 +228,16 @@
|
||||
"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",
|
||||
@@ -277,9 +302,32 @@
|
||||
"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.",
|
||||
@@ -323,6 +371,36 @@
|
||||
"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",
|
||||
@@ -570,7 +648,91 @@
|
||||
"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"
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user