mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-08-07 11:09:34 +00:00
MLS-PACK (#355)
## Please complete the following:
- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors
This is commit pack
This PR refactors and improves the language selection experience:
• Centralizes all language-related logic in LangSelector.ts &
LanguageModal.ts
• Redesigns the language selection UI for better UX across devices
• Adds new translations and supports more languages
Changes .w.
• Language selection is now handled entirely inside LangSelector.ts &
LanguageModal.ts
• Prevents background scrolling when open
• Highlights the current language at the top
• Always shows English second
• Shows browser language third (if different from current)
• All other languages are sorted alphabetically by English name
• Debug option is shown at the end when pressing D
• The language list is scrollable when it exceeds screen height
Supported Languages
["en", "ja", "fr", "bg", "nl", "ru", "ua", "de"]
Added Translation Keys
```
"lang": {
"en": "English",
"native": "English",
"svg": "xx"
},
"map": {
"map": "Map"
},
"game_starting_modal": {
"title": "Game is Starting...",
"desc": "Preparing for the lobby to start. Please wait."
},
"difficulty": {
"difficulty": "Difficulty"
}
```
## Please put your Discord username so you can be contacted if a bug or
regression is found:
MLS Representative
- aotumuri
Translation collaborator
- Nikola123 (He was a very big help from setting up the translation site
to adding the json. Thank you so much!)
I don't have permission from my collaborators to display their names
here, so I'll put the discord link here
https://discord.com/channels/1284581928254701718/1352553113612980224/1352553113612980224
- tryout33
Collaborators from other servers.
- CCC Group (This is not Culture Convenience Club. Think of it like a
server where developers of various games are playing.)
- People who fixed the UI and found bugs.
meow02952 (discord id) <- This person also gave me a code suggestion.
Thanks!
moon_spear (discord id)
ww_what_ww (discord id)
Azuna (he doesn't have discord account)
- People who corrected translations, etc.
_kyoyume_ (discord id)
_ultrasuper_ (discord id)
grueg (he doesn't have discord account)
# If I forgot to include your name, or if you’d like your name to be
added, please let me know via Gmail or Discord.
---------
Co-authored-by: Duwibi <86431918+Duwibi@users.noreply.github.com>
This commit is contained in:
+93
-83
@@ -1,103 +1,101 @@
|
||||
{
|
||||
"main": {
|
||||
"join_discord": "Tritt dem Discord bei!",
|
||||
"create_lobby": "Lobby Erstellen",
|
||||
"join_lobby": "Lobby Beitreten",
|
||||
"create_lobby": "Lobby erstellen",
|
||||
"join_lobby": "Lobby beitreten",
|
||||
"single_player": "Einzelspieler",
|
||||
"instructions": "Anleitung",
|
||||
"how_to_play": "Wie man Spielt",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"help_modal": {
|
||||
"hotkeys": "Kurzbefehle",
|
||||
"table_key": "Taste",
|
||||
"hotkeys": "Tastaturbelegungen",
|
||||
"table_key": "Tastenkombination",
|
||||
"table_action": "Aktion",
|
||||
"action_alt_view": "Alternative Sicht (Terrain/Länder)",
|
||||
"action_attack_altclick": "Angreifen (wenn links klick auf Menü öffnen eingestellt ist)",
|
||||
"action_alt_view": "Alternative Ansicht anzeigen (Gebiete/Länder)",
|
||||
"action_attack_altclick": "Angriff ausführen (wenn Linksklick auf \"öffne Menü\" gestellt ist)",
|
||||
"action_build": "Baumenü öffnen",
|
||||
"action_center": "Spieler zentrieren",
|
||||
"action_zoom": "Raus/Rein zoomen",
|
||||
"action_move_camera": "Sichtfeld (Kamera) bewegen",
|
||||
"action_ratio_change": " Angriffsverhältnis verringern/erhöhen",
|
||||
"action_center": "Karte auf Spieler zentrieren",
|
||||
"action_zoom": "Ansicht vergrößern/verkleinern",
|
||||
"action_move_camera": "Karte verschieben",
|
||||
"action_ratio_change": "Angriffsrate verringern/erhöhen",
|
||||
"action_reset_gfx": "Grafik zurücksetzen",
|
||||
"ui_section": "Spiel UI",
|
||||
"ui_section": "Spieloberfläche",
|
||||
"ui_leaderboard": "Bestenliste",
|
||||
"ui_leaderboard_desc": "Zeigt die top-Spieler des Spiels und deren Namen, Landbesitz in % sowie deren Gold",
|
||||
"ui_control": "Bedienfeld",
|
||||
"ui_control_desc": "Das Bedienfeld enthält die folgenden Elemente:",
|
||||
"ui_pop": "Pop - Die Anzahl der eigenen Einheiten, die maximale Bevölkerung und die und die Bevölkerungswachstumsrate.",
|
||||
"ui_gold": "Gold - Die Menge eigenen Golds und die Rate in der es gewonnen wird.",
|
||||
"ui_troops_workers": "Truppen und Arbeiter - Die Menge an zugeteilten Truppen und Arbeitern. Truppen werden genutzt, um anzugreifen oder sich gegen Angriffe zu verteidigen. Arbeiter werden genutzt, um Gold zu generieren. Die Anzahl der Truppen und Arbeiter kann mithilfe des Schiebereglers angepasst werden.",
|
||||
"ui_attack_ratio": "Angriffsverhältnis - Die Menge an Truppen, die zum Angriff verwendet werden. Das Angriffsverhältnis kann mithilfe des Schiebereglers angepasst werden.",
|
||||
"ui_leaderboard_desc": "Zeigt die Namen, % an besetzter Landfläche und Gold der stärksten Spieler im Spiel an.",
|
||||
"ui_control": "Aktionsmenü",
|
||||
"ui_control_desc": "Der Kontrollbereich beinhaltet folgende Elemente:",
|
||||
"ui_pop": "Bevölkerung - Die Anzahl der aktuellen Einheiten, die maximale Bevölkerungszahl und die Geschwindigkeit mit der man neue Einheiten bekommst.",
|
||||
"ui_gold": "Gold - Die aktuelle Menge an Gold, und die Geschwindigkeit mit der man Gold bekommt.",
|
||||
"ui_troops_workers": "Truppen und Arbeiter - Die Menge der zugewiesenen Truppen und Arbeiter. Truppen werden zum Angriff oder zur Verteidigung gegen Angriffe eingesetzt. Arbeiter erzeugen Gold. Die Anzahl der Truppen und Arbeiter kann mit dem Schieberegler eingestellt werden.",
|
||||
"ui_attack_ratio": "Angriffsrate - Die Anzahl der Truppen welche für Angriffe verwendet werden. Die Angriffsrate kann über den Schieberegler eingestellt werden.",
|
||||
"ui_options": "Optionen",
|
||||
"ui_options_desc": "Die folgenden Elemente können in den Optionen gefunden werden:",
|
||||
"option_pause": "Pausieren/Abspielen des Spiels - Nur im Einzelspielermodus verfügbar.",
|
||||
"option_timer": "Timer - Vergangene Zeit seit Beginn des Spiels.",
|
||||
"option_exit": "Exit-Taste.",
|
||||
"option_settings": "Einstellungen - Das Einstellungs-Menü öffnen. Dort kann die Alternative Sichtweise, der Dunkle Modus, Emojis und die Aktion bei einem Linksclick umgeschaltet werden.",
|
||||
"ui_options_desc": "Die folgenden Schaltflächen sind in den Optionen verfügbar:",
|
||||
"option_pause": "Spiel pausieren/fortsetzen - Nur im Einzelspieler möglich.",
|
||||
"option_timer": "Spieluhr - Vergangene Zeit seit Spielbeginn.",
|
||||
"option_exit": "Spiel verlassen.",
|
||||
"option_settings": "Einstellungen - Öffnet die Spieleinstellungen. Dort können die alternative Kartenansicht, der Dunkle Modus, Emojis und Aktion beim Linksklick eingestellt werden",
|
||||
"radial_title": "Radialmenü",
|
||||
"radial_desc": "Ein Rechtsclick (oder tippen auf Mobilgeräten) öffnet das Radialmenü. Dort gibt es folgende Optionen:",
|
||||
"radial_desc": "Rechtsklick (bei Berührung auf Mobilgeräten) öffnet das Aktionsmenü. Von dort kann man:",
|
||||
"radial_build": "Das Baumenü öffnen.",
|
||||
"radial_info": "Das Infomenü offnen",
|
||||
"radial_boat": "Ein Boot zum Angriff des ausgewählten Standortes (nur verfügbar, wenn Wasser zugänglich ist).",
|
||||
"radial_info": "Den Infobereich öffnen.",
|
||||
"radial_boat": "Ein Boot zum Angriff auf das gewählte Gebiet schicken (nur verfügbar bei Zugang zu Wasser).",
|
||||
"radial_close": "Das Menü schließen.",
|
||||
"info_title": "Infomenü",
|
||||
"info_enemy_desc": "Enthält Informationen wie der ausgewählte Spielername, Gold, Truppen, und, ob der Spieler ein Verräter ist. Verräter ist ein Spieler, welcher einen verbündeten Spieler verraten (angegriffen) hat. Die Symbole unten repräsentieren die folgenden Interaktionen:",
|
||||
"info_target": "Eine Zielmarkierung auf einen Spieler setzen, markiert den Spieler für alle verbündeten, zum koordinieren von Angriffen.",
|
||||
"info_alliance": "Eine Verbündungsanfrage an den Spieler senden. Verbündete können Ressourcen und Truppen teilen, aber können sich nicht gegenseitig angreifen.",
|
||||
"info_emoji": "Einen Emoji an den Spieler senden.",
|
||||
"info_ally_panel": "Verbündeten-Infomenü",
|
||||
"info_ally_desc": "Wenn du dich mit einem Spieler verbündest, werden die folgenden neuen Symbole freigeschaltet:",
|
||||
"ally_betray": "Den Verbündeten verraten, beendet das Bündnis. Nun wirst du ein permanentes Symbol neben deinem Namen haben. Bots haben eine geringere Wahrscheinlichkeit, sich mit dir zu verbünden und Spieler denken lieber zweimal nach.",
|
||||
"ally_donate": "Spende einige der eigenen Truppen zu deinem Verbündeten. Wird genutzt, wenn dieser wenige Truppen hat und angregriffen wird, oder wenn dieser die extra-Kraft braucht, um einen Gegner zu zerschlagen.",
|
||||
"info_title": "Infobereich",
|
||||
"info_enemy_desc": "Beinhaltet Informationen wie den Namen, Gold und Truppen für den Spieler. Zeigt zusätzlich an ob der Spieler ein Verräter ist. Ein Verräter ist ein Spieler welcher ein Bündnis gebrochen und seinen Verbündeten angegriffen hat. Die folgenden Icons stehen für folgende Aktionen:",
|
||||
"info_target": "Platziert eine Zielscheibe auf dem Spieler, als Markierung für alle Verbündeten zur Koordination von gemeinsamen Angriffen.",
|
||||
"info_alliance": "Sendet eine Bündnis-Anfrage an den Spieler. Verbündete können Ressourcen und Truppen teilen, sich aber nicht gegenseitig angreifen.",
|
||||
"info_emoji": "Sendet ein Emoji an den Spieler.",
|
||||
"info_ally_panel": "Bündnis Infobereich",
|
||||
"info_ally_desc": "Wenn man sich mit einem Spieler verbündet werden die folgenden Icons sichtbar:",
|
||||
"ally_betray": "Verrät den Verbündeten, was das Bündnis beendet. Hat eine permanente Markierung als Verräter zur Folge. Bots werden seltener Bündnisse mit Verrätern eingehen und menschliche Spieler sich es zweimal überlegen mit einem Verräter verbündet zu sein.",
|
||||
"ally_donate": "Teile einige Truppen mit dem verbündeten Spieler. Kann benutzt werden, um einen angegriffenen Verbündeten mit Truppen zu helfen oder diesem bei einem vernichtenden Schlag gegen einen Feind zu unterstützen.",
|
||||
"build_menu_title": "Baumenü",
|
||||
"build_name": "Name",
|
||||
"build_icon": "Symbol",
|
||||
"build_icon": "Icon",
|
||||
"build_desc": "Beschreibung",
|
||||
"build_city": "Stadt",
|
||||
"build_city_desc": "Erhöht die maximale Bevölkerung. Hilfreich, wenn du nicht mehr expandieren kannst oder kurz davor bist, dein Bevölkerungslimit zu erreichen.",
|
||||
"build_city_desc": "Erhöht die maximale Bevölkerungsanzahl. Nützlich, wenn das eigene Territorium nicht erweitert werden kann oder das Bevölkerungslimit erreicht wird.",
|
||||
"build_defense": "Verteidigungsposten",
|
||||
"build_defense_desc": "Erhöht die Verteidigung an nahe gelegenen Grenzen. Angriffe von Gegnern sind langsamer und haben mehr Verluste.",
|
||||
"build_defense_desc": "Erhöht die Verteidigung von anliegenden Grenzen. Angriffe von Feinden sind langsamer und sorgen für mehr Verluste des Feindes.",
|
||||
"build_port": "Hafen",
|
||||
"build_port_desc": "Sendet automatisch Handelsschiffe zwischen Häfen deines Landes und anderen Ländern (außer wenn du \"Handel beenden\" für den Spieler geclickt hast oder diese den Handel mit dir beendet haben), dabei erhalten beide Seiten Gold. Ermöglicht es, Schlachtschiffe zu bauen. Kann nur nahe am Wasser gebaut werden.",
|
||||
"build_warship": "Schlachtschiff",
|
||||
"build_warship_desc": "Patroulliert in einem Bereich, fängt Handelsschiffe ein und zerstört gegnerische Schlachtschiffe und Boote. Wird vom nächsten Hafen hervorgebracht und patroulliert den Bereich, den du anfangs geclickt hast.",
|
||||
"build_port_desc": "Sendet automatisch Handelsschiffe zwischen eigenen Häfen und denen anderer Länder (außer es wurde bei oder von einem anderen Spieler \"Handel stoppen\" im Infobereich geklickt), welche Gold für beide Seiten einbringen. Ermöglicht den Bau von Kriegsschiffen. Kann nur in der Nähe von Wasser gebaut werden.",
|
||||
"build_warship": "Kriegsschiff",
|
||||
"build_warship_desc": "Patrouilliert einen Bereich, kapert Handelsschiffe und zerstört befeindete Kriegsschiffe sowie Boote. Erscheint beim nächstgelegenen Hafen und patrouilliert anschließend um den Punkt wo es gebaut wurde.",
|
||||
"build_silo": "Raketensilo",
|
||||
"build_silo_desc": "Ermöglicht das Starten von Raketen (Geschossen).",
|
||||
"build_sam": "Flugabwehrrakete (SAM)",
|
||||
"build_sam_desc": "Hat eine 75% Wahrscheinlichkeit, gegenerische Raketen in einem Radius von 100 Pixeln abzufangen. Die Flugabwehrrakete besitzt eine 7,5 Sekunden Abklingzeit und kann keine MIRVs abfangen.",
|
||||
"build_silo_desc": "Ermöglicht das Abfeuern von Raketen und Bomben.",
|
||||
"build_sam": "Flugabwehr",
|
||||
"build_sam_desc": "Hat eine 75% Chance feindliche Raketen und Bomben in einem 100 Pixel Radius abzufangen. Die Flugabwehr hat eine 7,5 Sekunden Abklingzeit und kann keine MIRVs abfangen.",
|
||||
"build_atom": "Atombombe",
|
||||
"build_atom_desc": "Kleine explosive Bombe, die Territorium zerstört, Gebaüde, Schiffe und Boote. Startet vom nächsten Raketensilo und landet in dem Bereich, den du anfangs geclickt hast.",
|
||||
"build_atom_desc": "Bombe für eine kleine Explosion, die Territorium, Gebäude, Schiffe und Boote zerstört. Wird vom nächstgelegenen Raketensilo abgefeuert und schlägt am Punkt wo sie gebaut wurde ein.",
|
||||
"build_hydrogen": "Wasserstoffbombe",
|
||||
"build_hydrogen_desc": "Große explosive Bombe. Startet vom nächsten Raketensilo und landet in dem Bereich, den du anfangs geclickt hast",
|
||||
"build_hydrogen_desc": "Bombe für eine große Explosion. Wird vom nächstgelegenen Raketensilo abgefeuert und schlägt am Punkt wo sie gebaut wurde ein.",
|
||||
"build_mirv": "MIRV",
|
||||
"build_mirv_desc": "Die mächtigste Bombe im Spiel. Zerteilt sich in viele kleine Bomben, die einen großen bereich abdecken. Schadet nur dem Spieler, den du anfangs geclickt hast. Startet vom nächsten Raketensilo und landet in dem Bereich, den du anfangs geclickt hast.",
|
||||
"player_icons": "Spielersymbole",
|
||||
"icon_desc": "Beispiele einiger Symbole, denen du begegnen wirst und was diese bedeuten:",
|
||||
"icon_crown": "Krone - Dies ist der Spieler mit dem meisten Territorium.",
|
||||
"icon_traitor": "Überkreuzte Schwerter - Verräter. Dieser Spieler hat einen Verbündeten angegriffen.",
|
||||
"icon_ally": "Handschlag - Verbündeter. Dieser Spieler ist mit dir verbündet.",
|
||||
"info_enemy_panel": "Gegner-Infomenü"
|
||||
"build_mirv_desc": "Die stärkste Bombe im Spiel. Teilt sich in kleinere Bomben auf, die auf vielen Gebieten einschlagen. Beschädigt nur den Spieler auf den beim Bau der Bombe geklickt wurde. Wird vom nächstgelegenen Raketensilo abgefeuert und schlägt am Punkt wo sie gebaut wurde ein.",
|
||||
"player_icons": "Spieler-Icons",
|
||||
"icon_desc": "Beispiele zu einigen Icons während des Spielens und ihre Bedeutung:",
|
||||
"icon_crown": "Krone - Dieser Spieler ist auf Platz 1 der Bestenliste.",
|
||||
"icon_traitor": "Gekreuzte Schwerter - Verräter. Dieser Spieler hat einen Verbündeten verraten und angegriffen.",
|
||||
"icon_ally": "Handschlag - Verbündeter. Dieser Spieler ist ein Verbündeter.",
|
||||
"info_enemy_panel": "Gegner-Infobereich"
|
||||
},
|
||||
"single_modal": {
|
||||
"title": "Einzelspieler",
|
||||
"map": "Karte",
|
||||
"difficulty": "Schwierigkeit",
|
||||
"allow_alliances": "Bündnisse erlauben",
|
||||
"options_title": "Optionen",
|
||||
"bots": "Bots: ",
|
||||
"bots_disabled": "Deaktiviert",
|
||||
"disable_nations": "Nationen deaktivieren",
|
||||
"instant_build": "Sofortiges Bauen",
|
||||
"infinite_gold": "Unendliches Gold",
|
||||
"infinite_troops": "Unendliche Truppen",
|
||||
"disable_nukes": "Bomben deaktivieren",
|
||||
"infinite_gold": "Unendlich Gold",
|
||||
"infinite_troops": "Unendlich Truppen",
|
||||
"disable_nukes": "Atomwaffen deaktivieren",
|
||||
"start": "Spiel starten"
|
||||
},
|
||||
"map": {
|
||||
"world": "Welt",
|
||||
"europe": "Europa",
|
||||
"mena": "MENA (Nahost und Nordafrika)",
|
||||
"mena": "MENA",
|
||||
"northamerica": "Nordamerika",
|
||||
"oceania": "Ozeanien",
|
||||
"blacksea": "Schwarzes Meer",
|
||||
@@ -110,53 +108,65 @@
|
||||
"australia": "Australien",
|
||||
"random": "Zufällig",
|
||||
"iceland": "Island",
|
||||
"pangaea": "Pangaea"
|
||||
"pangaea": "Pangaea",
|
||||
"map": "Karte",
|
||||
"betweentwoseas": "Zwischen zwei Meeren",
|
||||
"japanandneighbors": "Japan und Nachbarländer"
|
||||
},
|
||||
"private_lobby": {
|
||||
"title": "Privater Lobby beitreten",
|
||||
"enter_id": "Lobby ID eingeben",
|
||||
"player": "Spieler",
|
||||
"players": "Spieler",
|
||||
"join_lobby": "Lobby Beitreten",
|
||||
"checking": "Lobby wird überprüft...",
|
||||
"not_found": "Lobby nicht gefunden. Bitte überprüfe die ID und versuche es erneut.",
|
||||
"error": "Ein Fehler ist aufgetreten. Bitte versuche es erneut.",
|
||||
"joined_waiting": "Erfolgreich beigetreten! Auf den Start des Spiels warten..."
|
||||
"join_lobby": "Lobby beitreten",
|
||||
"checking": "Überprüfe Lobby...",
|
||||
"not_found": "Lobby nicht gefunden. Bitte Lobby ID überprüfen und erneut versuchen.",
|
||||
"error": "Ein Fehler ist aufgetreten. Bitte erneut versuchen.",
|
||||
"joined_waiting": "Erfolgreich beigetreten! Warte auf den Start des Spiels..."
|
||||
},
|
||||
"public_lobby": {
|
||||
"join": "Nächstem Spiel beitreten",
|
||||
"waiting": "spieler warten"
|
||||
"waiting": "wartende Spieler"
|
||||
},
|
||||
"username": {
|
||||
"enter_username": "Gib deinen Benutzernamen ein",
|
||||
"not_string": "Benutzername muss eine Zeichenkette sein.",
|
||||
"too_short": "Benutzername muss mindestens {min} zeichen enthalten.",
|
||||
"too_long": "Benutzername darf maximal {max} zeichen enthalten.",
|
||||
"invalid_chars": "Benutzername kann nur Buchstaben, Zahlen, Leerzeichen, Unterstriche und [eckige Klammern] enthalten."
|
||||
"enter_username": "Benutzernamen eingeben",
|
||||
"not_string": "Benutzername muss ein Text sein.",
|
||||
"too_short": "Benutzername muss mindestens {min} Zeichen lang sein.",
|
||||
"too_long": "Benutzername darf {max} Zeichen nicht überschreiten.",
|
||||
"invalid_chars": "Benutzername darf nur Buchstaben, Zahlen, Leerzeichen, Unterstriche und [eckige Klammer] enthalten."
|
||||
},
|
||||
"host_modal": {
|
||||
"title": "Private Lobby",
|
||||
"map": "Karte",
|
||||
"difficulty": "Schwierigkeit",
|
||||
"mode": "Modus",
|
||||
"options_title": "Optionen",
|
||||
"bots": "Bots: ",
|
||||
"bots": "Bots:",
|
||||
"bots_disabled": "Deaktiviert",
|
||||
"disable_nations": "Nationen deaktivieren",
|
||||
"instant_build": "Sofortiges Bauen",
|
||||
"infinite_gold": "Unendliches Gold",
|
||||
"infinite_troops": "Unendliche Truppen",
|
||||
"disable_nukes": "Bomben deaktivieren",
|
||||
"infinite_gold": "Unendlich Gold",
|
||||
"infinite_troops": "Unendlich Truppen",
|
||||
"disable_nukes": "Atomwaffen deaktivieren",
|
||||
"player": "Spieler",
|
||||
"players": "Spieler",
|
||||
"waiting": "Auf Spieler warten...",
|
||||
"start": "Spiel starten"
|
||||
"waiting": "Warte auf Spieler...",
|
||||
"start": "Spiel starten",
|
||||
"mode": "Modus"
|
||||
},
|
||||
"difficulty": {
|
||||
"Relaxed": "Entspannt",
|
||||
"Balanced": "Ausgewogen",
|
||||
"Intense": "Intensiv",
|
||||
"Impossible": "Unmöglich"
|
||||
"Balanced": "Ausgeglichen",
|
||||
"Intense": "Anspruchsvoll",
|
||||
"Impossible": "Unmöglich",
|
||||
"difficulty": "Schwierigkeitsgrad"
|
||||
},
|
||||
"game_starting_modal": {
|
||||
"title": "Das Spiel startet...",
|
||||
"desc": "Der Start der Lobby wird vorbereitet. Bitte warten."
|
||||
},
|
||||
"lang": {
|
||||
"en": "German",
|
||||
"native": "Deutsch",
|
||||
"svg": "de",
|
||||
"lang_code": "de"
|
||||
},
|
||||
"game_mode": {
|
||||
"ffa": "Free for All",
|
||||
|
||||
Reference in New Issue
Block a user