Die heruntergeladene Datei ist ein Setup: Sprache, Ordner (nur ohne Admin-Rechte beschreibbar), Verknuepfungen, Fortschritt, Fertig-Seite; Ordner steht in der Registry. Deinstallieren loescht im gewaehlten Ordner nur die eigenen Dateien. Beim Start fragt der Launcher nach neuen Updates (Launcher und Mod). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
87 lines
6.0 KiB
C#
87 lines
6.0 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}"),
|
|
("Keine Schreibrechte in diesem Ordner - bitte einen Ordner waehlen, in dem du ohne Admin-Rechte schreiben darfst",
|
|
"No write access to this folder - please choose a folder you can write to without admin rights"),
|
|
("Ordner nicht nutzbar: {0}", "Folder not usable: {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);
|
|
}
|
|
}
|