From 3ead63f9ac4ff0e91b3fdf6094875c913266c6d2 Mon Sep 17 00:00:00 2001 From: yuyu Date: Sun, 23 Oct 2022 22:23:26 +0800 Subject: [PATCH] Handle vanilla `-lang` and `-language` CLI flags for I18n --- TShockAPI/I18n.cs | 24 ++++++++++++++++++++++-- docs/changelog.md | 1 + 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/TShockAPI/I18n.cs b/TShockAPI/I18n.cs index 59f812f4..5d3aef85 100644 --- a/TShockAPI/I18n.cs +++ b/TShockAPI/I18n.cs @@ -21,7 +21,10 @@ global using static TShockAPI.I18n; using System; using System.Globalization; using System.IO; +using System.Linq; using GetText; +using Terraria.Initializers; +using Terraria.Localization; namespace TShockAPI { @@ -29,8 +32,7 @@ namespace TShockAPI static string TranslationsDirectory => Path.Combine(AppContext.BaseDirectory, "i18n"); static CultureInfo TranslationCultureInfo { - get - { + get { // cross-platform mapping of cultureinfos can be a bit screwy, so give our users // the chance to explicitly spell out which translation they would like to use. // this is an environment variable instead of a flag because this needs to be @@ -39,6 +41,24 @@ namespace TShockAPI { return new CultureInfo(overrideLang); } + + static CultureInfo Redirect(CultureInfo cultureInfo) + => cultureInfo.Name == "zh-Hans" ? new CultureInfo("zh-CN") : cultureInfo; + + if (Terraria.Program.LaunchParameters.TryGetValue("-lang", out var langArg) + && int.TryParse(langArg, out var langId)) { + if (GameCulture._legacyCultures.TryGetValue(langId, out var culture)) { + return Redirect(culture.CultureInfo); + } + } + + if (Terraria.Program.LaunchParameters.TryGetValue("-language", out var languageArg)) { + var culture = GameCulture._legacyCultures.Values.SingleOrDefault(c => c.Name == languageArg); + if (culture != null) { + return Redirect(culture.CultureInfo); + } + } + return CultureInfo.CurrentUICulture; } } diff --git a/docs/changelog.md b/docs/changelog.md index 90100cea..344c66f2 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -69,6 +69,7 @@ Use past tense when adding new entries; sign your name off when you add or chang * Check loadout slots for hacked item stacks. (@drunderscore) * Fix players being kicked after using the Flamethrower to apply the `OnFire3` debuff for `1200` ticks. (@BashGuy10) * Fix being kicked for using the new sponge types on liquid. (@BashGuy10) +* Added support of `-lang` and `-language` flags for our i18n system. (@KawaiiYuyu) ## TShock 4.5.18 * Fixed `TSPlayer.GiveItem` not working if the player is in lava. (@PotatoCider)