feat(i18n): add French language support and enhance localization
All checks were successful
Deploy to production / deploy (push) Successful in 2m48s

- Introduced French as a supported language across the application, updating locale files and adding translations for various components.
- Enhanced language handling logic to accommodate French, ensuring proper detection and fallback mechanisms.
- Updated UI elements to include French language options, improving accessibility for French-speaking users.
- Refactored SEO handling to include French in hreflang links, enhancing search engine indexing for multilingual content.
- Added new scripts for managing French translations and ensuring consistency across language files.
This commit is contained in:
Torsten Schulz (local)
2026-04-07 18:04:03 +02:00
parent f715c6125d
commit f7030bbabe
56 changed files with 5220 additions and 175 deletions

View File

@@ -10,6 +10,16 @@
"windy": "Windy",
"clear": "Clear"
},
"conditionBand": {
"excellent": "Excellent",
"veryGood": "Very good",
"good": "Good",
"moderate": "Fair",
"bad": "Poor",
"veryBad": "Very poor",
"catastrophic": "Critical",
"unknown": "Unknown"
},
"debtorsPrison": {
"actionBlocked": "This action is blocked while you are in debtors' prison.",
"globalWarning": "Your credit delinquency is already restricting your actions. Forced measures may follow soon.",
@@ -110,7 +120,8 @@
"loading": "Loading potential heirs…",
"noHeirs": "No heirs available.",
"select": "Select as play character",
"error": "Error selecting heir."
"error": "Error selecting heir.",
"success": "You are now playing as the selected heir."
},
"metadata": {
"title": "Personal",
@@ -175,6 +186,32 @@
"stock": "Storage positions",
"stockHint": "Condensed view of goods across all regions.",
"open": "Open"
},
"routine": {
"branch": {
"kicker": "Routine",
"title": "Open a branch",
"description": "The fastest route to production, storage, sales and transport.",
"cta": "Go to operations"
},
"finance": {
"kicker": "Overview",
"title": "Review finances",
"description": "Account balance, history and economic development without a long search.",
"cta": "Money history"
},
"family": {
"kicker": "Character",
"title": "Family and succession",
"description": "Important personal decisions and household status in one place.",
"cta": "Open family"
},
"house": {
"kicker": "Property",
"title": "House and surroundings",
"description": "Residence and everyday status as its own work area.",
"cta": "Go to house"
}
}
},
"health": {
@@ -464,20 +501,58 @@
}
},
"nobility": {
"title": "Noble status",
"tabs": {
"overview": "Overview",
"advance": "Advance"
},
"highestPoliticalOffice": "Highest political office",
"highestOfficeAny": "Highest office overall",
"none": "none",
"nextTitle": "Next possible title",
"advanceNoNext": "Error: No information on the next title is available. Please reload the page.",
"requirement": {
"money": "Wealth at least {amount}",
"cost": "Cost: {amount}",
"branches": "At least {amount} branches",
"reputation": "Popularity at least {amount}",
"house_position": "House status at least level {amount}",
"house_condition": "House condition at least {amount}",
"house_position": "Household at least: {label}",
"house_condition": "House condition at least {quality}",
"office_rank_any": "Highest political or church office at least rank {amount}",
"office_rank_political": "Highest political office at least rank {amount}",
"lover_count_min": "At least {amount} lovers or favorites",
"lover_count_max": "At most {amount} lovers or favorites"
"lover_count_max": "At most {amount} lovers or favorites",
"unknown": "{type}: {amount}"
},
"housePosition": {
"1": "Living under a bridge",
"2": "A straw hut",
"3": "A wooden house",
"4": "A backyard room",
"5": "A small family house",
"6": "A townhouse",
"7": "A villa",
"8": "A manor house",
"9": "A castle",
"fallback": "House tier {level}"
},
"houseConditionQuality": {
"nearPerfect": "near-flawless",
"veryGood": "very good",
"good": "good",
"decent": "decent",
"usable": "adequate"
},
"houseConditionPercent": "{pct}%",
"officeWithRank": "{label} (rank {rank})",
"advance": {
"confirm": "Request advancement",
"processing": "Processing…"
},
"errors": {
"tooSoon": "You cannot advance yet.",
"unmet": "Requirements not yet met:",
"generic": "Something went wrong."
},
"cooldown": "You can only advance again on {date}."
},
@@ -572,6 +647,9 @@
"elections": "Elections"
},
"bookmarkCandidate": "Bookmark this candidacy",
"voteSuccess": "Vote submitted successfully.",
"voteAllSuccess": "All votes submitted successfully.",
"applyBookmarkSuccess": "Candidacies saved successfully.",
"voteError": "Error while submitting the vote",
"voteAllError": "Error while submitting the votes",
"applyError": "Application could not be submitted.",