From f9729859fe072eb800be05002bfccd8dcae50ba9 Mon Sep 17 00:00:00 2001 From: Dong Bin <14807942+rabbitism@users.noreply.github.com> Date: Wed, 12 Nov 2025 15:23:40 +0800 Subject: [PATCH] refactor: streamline locale resource handling with SetResources method (#816) --- src/Ursa.Themes.Semi/Index.axaml.cs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Ursa.Themes.Semi/Index.axaml.cs b/src/Ursa.Themes.Semi/Index.axaml.cs index 7fc23f2..98a997a 100644 --- a/src/Ursa.Themes.Semi/Index.axaml.cs +++ b/src/Ursa.Themes.Semi/Index.axaml.cs @@ -46,12 +46,12 @@ public class SemiTheme : Styles if (TryGetLocaleResource(value, out var resource) && resource is not null) { _locale = value; - foreach (var kv in resource) Resources[kv.Key] = kv.Value; + SetResources(this.Resources, resource); } else { _locale = new CultureInfo("zh-CN"); - foreach (var kv in _defaultResource) Resources[kv.Key] = kv.Value; + SetResources(Resources, _defaultResource); } } catch @@ -89,13 +89,25 @@ public class SemiTheme : Styles { if (culture is null) return; if (!_localeToResource.TryGetValue(culture, out var resources)) return; - foreach (var kv in resources) application.Resources[kv.Key] = kv.Value; + SetResources(application.Resources, resources); } public static void OverrideLocaleResources(StyledElement element, CultureInfo? culture) { if (culture is null) return; if (!_localeToResource.TryGetValue(culture, out var resources)) return; - foreach (var kv in resources) element.Resources[kv.Key] = kv.Value; + SetResources(element.Resources, resources); + } + + private static void SetResources(IResourceDictionary source, IResourceDictionary content) + { + if (source is ResourceDictionary resourceDictionary) + { + resourceDictionary.SetItems(content); + } + else + { + foreach (var kv in content) source[kv.Key] = kv.Value; + } } }