From d8454bcd652c9e4f8588a3d26b9409d5c94f5af4 Mon Sep 17 00:00:00 2001 From: Jack <3486688394@qq.com> Date: Thu, 23 Jan 2025 23:50:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=89=80=E6=9C=89=E5=8F=AF=E7=94=A8=E6=96=87=E5=8C=96=E7=9A=84?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JackCraft.I18N/I18NConfig.cs | 2 ++ JackCraft.I18N/I18NManager.cs | 12 ++++++++++-- Test/App.axaml.cs | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/JackCraft.I18N/I18NConfig.cs b/JackCraft.I18N/I18NConfig.cs index 4265a8c..8187d4d 100644 --- a/JackCraft.I18N/I18NConfig.cs +++ b/JackCraft.I18N/I18NConfig.cs @@ -1,5 +1,6 @@ using System.Globalization; using System.Reflection; +using System.Resources; namespace JackCraft.I18N; @@ -9,4 +10,5 @@ internal static class I18NConfig public static string BaseName { get; set; } = string.Empty; public static Assembly Assembly { get; set; } = typeof(I18NConfig).Assembly; public static CultureInfo Culture { get; set; } = CultureInfo.InvariantCulture; + public static ResourceManager ResourceManager => new(BaseName, Assembly); } \ No newline at end of file diff --git a/JackCraft.I18N/I18NManager.cs b/JackCraft.I18N/I18NManager.cs index 35842c8..a6265da 100644 --- a/JackCraft.I18N/I18NManager.cs +++ b/JackCraft.I18N/I18NManager.cs @@ -28,6 +28,7 @@ public sealed class I18NManager : INotifyPropertyChanged public static string BaseName => I18NConfig.BaseName; public static Assembly Assembly => I18NConfig.Assembly; + private ResourceManager ResourceManager => I18NConfig.ResourceManager; public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName] string? propertyName = null) @@ -38,11 +39,18 @@ public sealed class I18NManager : INotifyPropertyChanged public T? Get(string key, CultureInfo? culture = null, params object?[] values) { culture ??= Culture; - var resourceManager = new ResourceManager(BaseName, Assembly); - var resourceSet = resourceManager.GetResourceSet(culture, true, true); + var resourceSet = ResourceManager.GetResourceSet(culture, true, true); var obj = resourceSet?.GetObject(key); if (obj is string str && values.Length > 0) return (dynamic)string.Format(str, values); if (obj != null) return (dynamic)obj; return default; } + + public CultureInfo[] GetCultures() + { + var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures) + .Where(culture => ResourceManager.GetResourceSet(culture, true, false) != null) + .ToList(); + return cultures.ToArray(); + } } \ No newline at end of file diff --git a/Test/App.axaml.cs b/Test/App.axaml.cs index 16e17ab..0e3c6ad 100644 --- a/Test/App.axaml.cs +++ b/Test/App.axaml.cs @@ -13,6 +13,7 @@ public class App : Application public override void Initialize() { I18NManager.Culture = new CultureInfo("zh"); + var totalCultures = I18NManager.GetCultures(); AvaloniaXamlLoader.Load(this); }