mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-03-03 00:00:55 +08:00
fix: fix potential issue when assigning invalid culture at runtime.
This commit is contained in:
@@ -16,6 +16,8 @@ public class SemiTheme : Styles
|
||||
public static ThemeVariant Dusk => new ThemeVariant(nameof(Dusk), ThemeVariant.Dark);
|
||||
public static ThemeVariant NightSky => new ThemeVariant(nameof(NightSky), ThemeVariant.Dark);
|
||||
|
||||
private static readonly ResourceDictionary _defaultResource = new zh_cn();
|
||||
|
||||
private static readonly Dictionary<CultureInfo, ResourceDictionary> _localeToResource = new()
|
||||
{
|
||||
{ new CultureInfo("zh-cn"), new zh_cn() },
|
||||
@@ -40,27 +42,48 @@ public class SemiTheme : Styles
|
||||
get => _locale;
|
||||
set
|
||||
{
|
||||
_locale = value;
|
||||
var resource = TryGetLocaleResource(value);
|
||||
if (resource is null) return;
|
||||
foreach (var kv in resource)
|
||||
try
|
||||
{
|
||||
this.Resources.Add(kv);
|
||||
if (TryGetLocaleResource(value, out var resource) && resource is not null)
|
||||
{
|
||||
_locale = value;
|
||||
foreach (var kv in resource) Resources[kv.Key] = kv.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_locale = new CultureInfo("zh-CN");
|
||||
foreach (var kv in _defaultResource) Resources[kv.Key] = kv.Value;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
_locale = CultureInfo.InvariantCulture;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static ResourceDictionary? TryGetLocaleResource(CultureInfo? locale)
|
||||
private static bool TryGetLocaleResource(CultureInfo? locale, out ResourceDictionary? resourceDictionary)
|
||||
{
|
||||
if (Equals(locale, CultureInfo.InvariantCulture))
|
||||
{
|
||||
resourceDictionary = _defaultResource;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (locale is null)
|
||||
{
|
||||
return _localeToResource[new CultureInfo("zh-cn")];
|
||||
resourceDictionary = _defaultResource;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_localeToResource.TryGetValue(locale, out var resource))
|
||||
{
|
||||
return resource;
|
||||
resourceDictionary = resource;
|
||||
return true;
|
||||
}
|
||||
return _localeToResource[new CultureInfo("zh-cn")];
|
||||
|
||||
resourceDictionary = _defaultResource;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void OverrideLocaleResources(Application application, CultureInfo? culture)
|
||||
|
||||
Reference in New Issue
Block a user