Files
BSO-Launcher/Services/Lang.cs
T
MrMahoandClaude Opus 5.5 07da29ab94 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>
2026-10-28 19:44:07 +01:00

84 lines
5.7 KiB
C#

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);
}
}