Sprache Deutsch/Englisch
Umschalter in den Einstellungen und auf der Anmeldeseite; Meldungen des Launchers (Lang.cs) und der Website (Accept-Language) in der gewaehlten Sprache. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace BSO.Launcher;
|
||||
|
||||
/// <summary>
|
||||
/// Sprache der Meldungen, die vom Launcher selbst kommen (Fehler, Fortschritt, Dialoge). Im Code steht Deutsch; T() sucht
|
||||
/// die englische Fassung - auch fuer Texte mit eingesetzten Werten ({0} im Muster). Die Oberflaeche hat ihre eigene Liste
|
||||
/// (ui/i18n.js), Fehler der Website kommen dank Accept-Language schon in der richtigen Sprache.
|
||||
/// </summary>
|
||||
public static class Lang
|
||||
{
|
||||
/// <summary>"de" oder "en" - aus den Einstellungen, beim ersten Start aus der Windows-Sprache.</summary>
|
||||
public static string Current { get; set; } = Default;
|
||||
|
||||
public static string Default => CultureInfo.CurrentUICulture.TwoLetterISOLanguageName == "de" ? "de" : "en";
|
||||
|
||||
static readonly (string de, string en)[] Texts =
|
||||
{
|
||||
("Der BSO Launcher laeuft schon.", "The BSO Launcher is already running."),
|
||||
("Die Microsoft Edge WebView2 Runtime fehlt ({0}).\n\nDownload-Seite oeffnen?", "The Microsoft Edge WebView2 Runtime is missing ({0}).\n\nOpen the download page?"),
|
||||
("Laeuft schon - bitte warten", "Already in progress - please wait"),
|
||||
("Kein Launcher-Update gefunden", "No launcher update found"),
|
||||
("Launcher-Update wird geladen …", "Downloading launcher update …"),
|
||||
("In diesem Ordner ist kein Bus-Simulator 2012 (Bin_High_Win64\\BusSimulator2012.exe fehlt)", "There is no Bus-Simulator 2012 in this folder (Bin_High_Win64\\BusSimulator2012.exe is missing)"),
|
||||
("Unbekannter Befehl: {0}", "Unknown command: {0}"),
|
||||
("Bitte anmelden", "Please sign in"),
|
||||
("Anmeldung abgelaufen - bitte neu anmelden", "Session expired - please sign in again"),
|
||||
("Fehlgeschlagen", "Failed"),
|
||||
("Bus-Simulator 2012 nicht gefunden - in den Einstellungen den Spielordner waehlen", "Bus-Simulator 2012 not found - choose the game folder in the settings"),
|
||||
("Noch keine BSO-Version auf dem Server", "No BSO version on the server yet"),
|
||||
("BSO {0} wird geladen …", "Downloading BSO {0} …"),
|
||||
("Installieren …", "Installing …"),
|
||||
("Fuer BSO fehlt die .NET 10 Runtime (x64) - unter \"Status\" herunterladen", "BSO needs the .NET 10 Runtime (x64) - download it on the Play page"),
|
||||
("Bus-Simulator 2012 laeuft schon", "Bus-Simulator 2012 is already running"),
|
||||
("BSO ist nicht installiert und der BSO-Server ist nicht erreichbar", "BSO is not installed and the BSO server is not reachable"),
|
||||
("{0} {1} ist nicht von BSO signiert - nicht installiert", "{0} {1} is not signed by BSO - not installed"),
|
||||
("Ungueltige Pruefsumme", "Invalid checksum"),
|
||||
("Download abgebrochen (keine Verbindung) - nochmal versuchen, er macht dort weiter", "Download interrupted (no connection) - try again, it continues where it stopped"),
|
||||
("Der Download ist beschaedigt (Pruefsumme passt nicht) - bitte nochmal versuchen", "The download is damaged (checksum mismatch) - please try again"),
|
||||
("BSO-Server nicht erreichbar ({0})", "BSO server not reachable ({0})"),
|
||||
("Erst Bus-Simulator 2012 schliessen - solange es laeuft, sind die Mod-Dateien gesperrt", "Close Bus-Simulator 2012 first - the mod files are locked while it runs"),
|
||||
("Ungueltiger Pfad im Mod-Paket: {0}", "Invalid path in the mod package: {0}"),
|
||||
("Laufenden Launcher schliessen …", "Closing the running launcher …"),
|
||||
("Dateien kopieren …", "Copying files …"),
|
||||
("Verknuepfungen anlegen …", "Creating shortcuts …"),
|
||||
("Registrieren …", "Registering …"),
|
||||
("Fertig", "Done"),
|
||||
("Vorbereiten …", "Preparing …"),
|
||||
("Installation fehlgeschlagen: {0}", "Installation failed: {0}"),
|
||||
("BSO komplett deinstallieren?\n\nDas entfernt den Launcher, BSO aus dem Bus-Simulator-2012-Ordner (dinput8.dll, BSO-Ordner) und deine Anmeldung im Launcher.",
|
||||
"Uninstall BSO completely?\n\nThis removes the launcher, BSO from the Bus-Simulator 2012 folder (dinput8.dll, BSO folder) and your launcher sign-in."),
|
||||
("Erst Bus-Simulator 2012 schliessen - solange es laeuft, sind die Dateien in Benutzung.", "Close Bus-Simulator 2012 first - its files are in use while it runs."),
|
||||
("BSO wurde komplett deinstalliert.", "BSO was uninstalled completely."),
|
||||
("BSO wurde deinstalliert. Einiges liess sich nicht entfernen:\n\n{0}", "BSO was uninstalled. Some things could not be removed:\n\n{0}"),
|
||||
("Neuigkeiten nicht verfuegbar", "News not available"),
|
||||
("Ordner \"Bus-Simulator 2012\" waehlen", "Choose the \"Bus-Simulator 2012\" folder"),
|
||||
("Konto konnte nicht geprueft werden: {0}", "Account could not be checked: {0}")
|
||||
};
|
||||
|
||||
static readonly List<(Regex pattern, string en)> patterns = Texts.Select(x => (new Regex("^" + Regex.Replace(Regex.Escape(x.de), @"\\\{(\d)}", m => $"(?<a{m.Groups[1].Value}>.*?)") + "$", RegexOptions.Singleline), x.en)).ToList();
|
||||
|
||||
/// <summary>Deutschen Text (auch mit eingesetzten Werten) in die aktuelle Sprache. Unbekannt -> unveraendert.</summary>
|
||||
public static string T(string de)
|
||||
{
|
||||
if (Current != "en" || string.IsNullOrEmpty(de)) return de;
|
||||
foreach ((Regex pattern, string en) in patterns)
|
||||
{
|
||||
var m = pattern.Match(de);
|
||||
if (!m.Success) continue;
|
||||
return Regex.Replace(en, @"\{(\d)}", x => m.Groups["a" + x.Groups[1].Value].Value);
|
||||
}
|
||||
return de;
|
||||
}
|
||||
|
||||
/// <summary>Sprache wechseln - auch fuer die Anfragen an die Website (Accept-Language: deren Fehler kommen passend).</summary>
|
||||
public static void Set(string? lang)
|
||||
{
|
||||
Current = lang == "de" || lang == "en" ? lang : Default;
|
||||
Api.Http.DefaultRequestHeaders.AcceptLanguage.Clear();
|
||||
Api.Http.DefaultRequestHeaders.AcceptLanguage.ParseAdd(Current);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user