feat(bisaya-course): enhance German course content and localization support
All checks were successful
Deploy to production / deploy (push) Successful in 2m47s

- Updated the create-german-for-bisaya-course-content.js script to improve lesson pattern retrieval by introducing a new function for generating a lesson pattern pool.
- Added new exercises for various topics including 'Wohnung & Nachbarn', 'Besuch empfangen', 'Arzt, Apotheke, Termin', and 'Amt, Dokumente, Anmeldung', enhancing practical language skills for learners.
- Improved localization by integrating translation keys for various UI elements and error messages across multiple components, ensuring a consistent user experience in both German and Bisaya.
- Enhanced the main.js file to recognize Bisaya language preferences in browser settings, improving accessibility for users.
This commit is contained in:
Torsten Schulz (local)
2026-03-31 17:40:03 +02:00
parent b1990334b9
commit c6caeefb5f
49 changed files with 3468 additions and 262 deletions

View File

@@ -6,6 +6,56 @@
"title": "Title",
"publish": "Publish",
"pickImage": "Pick an image",
"uploadImage": "Upload image"
"uploadImage": "Upload image",
"list": {
"eyebrow": "Community blogs",
"title": "Blogs",
"intro": "Articles, project updates and personal insights from the YourPart community.",
"create": "Create new blog",
"loading": "Loading…",
"empty": "No blogs found.",
"by": "by",
"unknownAuthor": "Unknown",
"open": "Open blog",
"fallbackExcerpt": "Public entries, thoughts and project updates from the community."
},
"view": {
"loading": "Loading…",
"edit": "Edit",
"entriesCount": "{count} entries",
"empty": "No entries available.",
"fallbackDescription": "Public community blog on YourPart.",
"notFoundTitle": "Blog not found | YourPart",
"notFoundDescription": "The requested blog could not be loaded."
},
"editor": {
"createTitle": "Create blog",
"editTitle": "Edit blog",
"description": "Description",
"visibility": "Visibility",
"visibilityPublic": "Public",
"visibilityLoggedIn": "Logged-in users only",
"ageRange": "Age range",
"gender": "Gender",
"genderMale": "Male",
"genderFemale": "Female",
"save": "Save",
"newPostTitle": "New post",
"addPost": "Add post",
"shareTitle": "Share blog",
"url": "URL",
"copyLink": "Copy link",
"shareToFriends": "Send to friends",
"emailAddresses": "Email addresses (comma-separated)",
"send": "Send",
"restrictedHint": "Note: This blog is not public. Recipients may need a login and matching age/gender permissions.",
"invalidAgeRange": "Invalid age range",
"copySuccess": "Link copied",
"copyError": "Copy failed",
"shareError": "Sharing failed",
"emailError": "Email sending failed",
"friendsSent": "Sent to {count} friend(s).",
"emailsSent": "{count} email(s) sent."
}
}
}

View File

@@ -103,6 +103,7 @@
},
"overview": {
"title": "Falukant - Overview",
"heroIntro": "Your status in economy, family and property in a condensed overview.",
"heirSelection": {
"title": "Heir Selection",
"description": "Your previous character is no longer available. Choose an heir from the list to continue playing.",
@@ -151,6 +152,16 @@
"one_of": "At least one status condition",
"two_of": "At least two status conditions"
}
},
"summary": {
"certificateHint": "Determines which product categories you may currently produce.",
"branches": "Branches",
"branchesHint": "Direct access to your most important business locations.",
"productions": "Active productions",
"productionsHint": "Ongoing productions that will soon need completion or review.",
"stock": "Storage positions",
"stockHint": "Condensed view of goods across all regions.",
"open": "Open"
}
},
"health": {
@@ -312,6 +323,9 @@
"noProposals": "No director candidates available."
},
"branch": {
"title": "Branch",
"heroEyebrow": "Branch",
"heroIntro": "Production, storage, sales and transport in one world-related control area.",
"debtorsPrison": {
"branchLocked": "While in debtors' prison, new economic steps are blocked. Closed or seized branches will also become visible here.",
"branchRisk": "Your delinquency puts branches, vehicles and stored goods at risk.",
@@ -539,6 +553,10 @@
"upcoming": "Upcoming Positions",
"elections": "Elections"
},
"bookmarkCandidate": "Bookmark this candidacy",
"voteError": "Error while submitting the vote",
"voteAllError": "Error while submitting the votes",
"applyError": "Application could not be submitted.",
"current": {
"office": "Office",
"region": "Region",

View File

@@ -58,5 +58,71 @@
"cancel": "Cancel",
"yes": "Yes",
"no": "No"
},
"sectionBar": {
"sections": {
"default": "Section",
"falukant": "Falukant",
"vocab": "Vocabulary trainer",
"forum": "Forum",
"community": "Community",
"settings": "Settings",
"administration": "Administration",
"minigames": "Minigames",
"personal": "Personal",
"blog": "Blog"
},
"titles": {
"friends": "Friends",
"guestbook": "Guestbook",
"search": "Search",
"gallery": "Gallery",
"forum": "Forum",
"topic": "Topic",
"diary": "Diary",
"languages": "Languages",
"newLanguage": "New language",
"subscribeLanguage": "Subscribe to language",
"language": "Language",
"chapter": "Chapter",
"courses": "Courses",
"course": "Course",
"lesson": "Lesson",
"createCharacter": "Create character",
"overview": "Overview",
"branch": "Branch",
"moneyHistory": "Money history",
"family": "Family",
"house": "House",
"nobility": "Nobility",
"reputation": "Reputation",
"church": "Church",
"education": "Education",
"bank": "Bank",
"directors": "Directors",
"health": "Health",
"politics": "Politics",
"underground": "Underground",
"personalSettings": "Personal data",
"viewSettings": "View",
"sexualitySettings": "Sexuality",
"flirtSettings": "Flirt",
"accountSettings": "Account",
"languageAssistantSettings": "Language assistant",
"interests": "Interests",
"adminInterests": "Interest administration",
"adminUsers": "Users",
"adminUserStatistics": "User statistics",
"adminContacts": "Contact requests",
"adminUserRights": "Rights",
"adminForums": "Forum administration",
"adminChatRooms": "Chat rooms",
"adminFalukantUsers": "Falukant users",
"adminFalukantMap": "Falukant map",
"adminCreateNpc": "Create NPC",
"adminMinigames": "Match3 administration",
"adminTaxiTools": "Taxi tools",
"adminServicesStatus": "Service status"
}
}
}
}

View File

@@ -32,7 +32,13 @@
"totalScore": "Total Score",
"totalStars": "Total Stars",
"levelsCompleted": "Levels Completed",
"restartCampaign": "Restart Campaign"
"restartCampaign": "Restart Campaign",
"nextStep": "Next step",
"objectivesCollapse": "Collapse objectives",
"objectivesShow": "Show objectives",
"objectives": "Objectives",
"loadingBoard": "Preparing game board...",
"loadingHint": "Level data, objectives and board layout are being synchronized."
},
"taxi": {
"title": "Taxi Simulator",
@@ -64,6 +70,34 @@
"refuel": "Refuel",
"startEngine": "Start Engine",
"stopEngine": "Stop Engine",
"controls": "Controls",
"accelerate": "Accelerate",
"brake": "Brake",
"steerRight": "Steer right",
"steerLeft": "Steer left",
"goals": "Goals",
"avoidCollisions": "Avoid collisions with other vehicles",
"streetNames": "Street names",
"remainingVehicles": "Remaining vehicles",
"fuelTitle": "Fuel",
"pointsTitle": "Points",
"speedViolations": "Speed violations",
"redLightsPassed": "Red lights crossed",
"highscore": "Highscore",
"topPlayers": "Top 20 players",
"loadingHighscore": "Loading highscore...",
"noHighscore": "No highscores yet",
"pointsShort": "pts",
"backToGame": "Back to game",
"minimap": "Minimap",
"loadedPassengers": "Loaded passengers",
"waitingPassengers": "Waiting passengers",
"noPassengersInTaxi": "No passengers in the taxi",
"noWaitingPassengers": "No waiting passengers",
"name": "Name",
"destination": "Destination",
"bonus": "Bonus",
"time": "Time",
"crash": {
"title": "Crash!",
"message": "You had an accident! Crashes: {crashes}"

View File

@@ -4,6 +4,10 @@
"email": "Email",
"reset": "Reset",
"success": "If the email exists, we've sent reset instructions.",
"failure": "Password reset failed. Please try again later."
"failure": "Password reset failed. Please try again later.",
"emailHint": "We send the link to the stored email address.",
"validation": {
"invalidEmail": "Please enter a valid email address."
}
}
}

View File

@@ -8,7 +8,8 @@
"language": "Language",
"languages": {
"en": "English",
"de": "German"
"de": "German",
"ceb": "Bisaya"
},
"register": "Register",
"close": "Close",
@@ -16,6 +17,12 @@
"success": "You have been successfully registered. Please check your email to activate your account.",
"passwordMismatch": "The passwords do not match.",
"emailinuse": "The email address is already in use.",
"usernameinuse": "The username is not available."
"usernameinuse": "The username is not available.",
"validation": {
"invalidEmail": "Please enter a valid email address.",
"usernameTooShort": "The username should have at least 3 characters.",
"passwordHint": "At least 8 characters.",
"passwordTooShort": "The password is still too short."
}
}
}
}

View File

@@ -56,7 +56,8 @@
},
"language": {
"de": "German",
"en": "English"
"en": "English",
"ceb": "Bisaya"
},
"eyecolor": {
"blue": "Blue",
@@ -140,6 +141,8 @@
},
"account": {
"title": "Account",
"heroEyebrow": "Settings",
"heroIntro": "Manage username, email, password and visibility in one place.",
"username": "Username",
"email": "Email Address",
"newpassword": "Password",
@@ -149,6 +152,15 @@
"showinsearch": "Show in User Search",
"changeaction": "Change User Data",
"oldpassword": "Old Password (required)",
"validation": {
"newPasswordTooShort": "The new password should have at least 8 characters.",
"passwordMismatch": "The passwords do not match.",
"oldPasswordRequired": "To change the password, the current password is required."
},
"feedback": {
"saved": "Account settings saved successfully.",
"saveError": "An error occurred while saving the account settings."
},
"adultAccessTitle": "Erotic area",
"adultAccessIntro": "The erotic area is intended only for adult users and also requires moderator approval.",
"requestAdultVerification": "Request access",
@@ -216,6 +228,10 @@
"AdultsOnly": "Show only to adults",
"All": "Show to everyone"
},
"feedback": {
"updateError": "The change could not be saved.",
"visibilityUpdateError": "The visibility could not be updated."
},
"flirt": {
"title": "Flirt"
},