using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using System.Globalization; using StabilityMatrix.Core.Helper; namespace StabilityMatrix.Avalonia.Languages; [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] public static class Cultures { public static CultureInfo Default { get; } = new("en-US"); public static CultureInfo? Current => Resources.Culture; public static readonly Dictionary SupportedCulturesByCode = new Dictionary { ["en-US"] = Default, ["ja-JP"] = new("ja-JP"), ["zh-Hans"] = new("zh-Hans"), ["zh-Hant"] = new("zh-Hant"), ["it-IT"] = new("it-IT"), ["fr-FR"] = new("fr-FR"), ["es"] = new("es"), ["ru-RU"] = new("ru-RU"), ["tr-TR"] = new("tr-TR") }; public static IReadOnlyList SupportedCultures => SupportedCulturesByCode.Values.ToImmutableList(); public static CultureInfo GetSupportedCultureOrDefault(string? cultureCode) { if (cultureCode is null || !SupportedCulturesByCode.TryGetValue(cultureCode, out var culture)) { return Default; } return culture; } public static void SetSupportedCultureOrDefault(string? cultureCode) { if (!TrySetSupportedCulture(cultureCode)) { TrySetSupportedCulture(Default); } } public static bool TrySetSupportedCulture(string? cultureCode) { if (cultureCode is null || !SupportedCulturesByCode.TryGetValue(cultureCode, out var culture)) { return false; } if (Current?.Name != culture.Name) { Resources.Culture = culture; EventManager.Instance.OnCultureChanged(culture); } return true; } public static bool TrySetSupportedCulture(CultureInfo? cultureInfo) { return cultureInfo is not null && TrySetSupportedCulture(cultureInfo.Name); } }