diff --git a/src/BizHawk.Client.DiscoHawk/MultiMessageContext.cs b/src/BizHawk.Client.DiscoHawk/MultiMessageContext.cs index e2002c1336..5394ce3828 100644 --- a/src/BizHawk.Client.DiscoHawk/MultiMessageContext.cs +++ b/src/BizHawk.Client.DiscoHawk/MultiMessageContext.cs @@ -23,6 +23,12 @@ namespace BizHawk.Client.DiscoHawk public readonly struct MultiMessageContext { + public static MultiMessageContext ForCurrentCulture() + { + MultiMessageContext mmc = new(CultureInfo.CurrentUICulture.IetfLanguageTag); + return mmc.Culture is null ? new("en") : mmc; + } + private static IReadOnlyList ReadEmbeddedAndConcat(string lang, MessageContext[] overlays) { MessageContext mc = new(lang, new() { UseIsolating = false }); @@ -44,12 +50,28 @@ namespace BizHawk.Client.DiscoHawk private readonly IReadOnlyList _contexts; - public readonly CultureInfo Culture; + public readonly CultureInfo? Culture; public MultiMessageContext(IReadOnlyList contexts) { _contexts = contexts; - Culture = new(_contexts.FirstOrDefault()?.Locales?.First()); + var langcode = _contexts.FirstOrDefault()?.Locales?.First(); + if (langcode is null) return; + try + { + Culture = new(langcode); + } + catch (Exception) + { + try + { + Culture = new(langcode.SubstringBefore('-')); + } + catch (Exception e) + { + Console.WriteLine(e); + } + } } public MultiMessageContext(string lang, params MessageContext[] overlays) diff --git a/src/BizHawk.Client.DiscoHawk/Program.cs b/src/BizHawk.Client.DiscoHawk/Program.cs index c23dbcc8d0..6824227a64 100644 --- a/src/BizHawk.Client.DiscoHawk/Program.cs +++ b/src/BizHawk.Client.DiscoHawk/Program.cs @@ -120,7 +120,7 @@ namespace BizHawk.Client.DiscoHawk if (args.Length == 0) { - MultiMessageContext i18n = new("en"); + var i18n = MultiMessageContext.ForCurrentCulture(); using MainDiscoForm dialog = new(i18n); dialog.ShowDialog(); } @@ -130,7 +130,7 @@ namespace BizHawk.Client.DiscoHawk args, results => // invoked 0..1 times { - MultiMessageContext i18n = new("en"); + var i18n = MultiMessageContext.ForCurrentCulture(); using ComparisonResults cr = new(i18n) { textBox1 = { Text = results } }; cr.ShowDialog(); });