feat: 添加获取所有可用文化的函数

This commit is contained in:
2025-01-23 23:50:42 +08:00
parent 24d1de0b23
commit d8454bcd65
3 changed files with 13 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
using System.Globalization; using System.Globalization;
using System.Reflection; using System.Reflection;
using System.Resources;
namespace JackCraft.I18N; namespace JackCraft.I18N;
@@ -9,4 +10,5 @@ internal static class I18NConfig
public static string BaseName { get; set; } = string.Empty; public static string BaseName { get; set; } = string.Empty;
public static Assembly Assembly { get; set; } = typeof(I18NConfig).Assembly; public static Assembly Assembly { get; set; } = typeof(I18NConfig).Assembly;
public static CultureInfo Culture { get; set; } = CultureInfo.InvariantCulture; public static CultureInfo Culture { get; set; } = CultureInfo.InvariantCulture;
public static ResourceManager ResourceManager => new(BaseName, Assembly);
} }

View File

@@ -28,6 +28,7 @@ public sealed class I18NManager : INotifyPropertyChanged
public static string BaseName => I18NConfig.BaseName; public static string BaseName => I18NConfig.BaseName;
public static Assembly Assembly => I18NConfig.Assembly; public static Assembly Assembly => I18NConfig.Assembly;
private ResourceManager ResourceManager => I18NConfig.ResourceManager;
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string? propertyName = null) private void OnPropertyChanged([CallerMemberName] string? propertyName = null)
@@ -38,11 +39,18 @@ public sealed class I18NManager : INotifyPropertyChanged
public T? Get<T>(string key, CultureInfo? culture = null, params object?[] values) public T? Get<T>(string key, CultureInfo? culture = null, params object?[] values)
{ {
culture ??= Culture; 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); var obj = resourceSet?.GetObject(key);
if (obj is string str && values.Length > 0) return (dynamic)string.Format(str, values); if (obj is string str && values.Length > 0) return (dynamic)string.Format(str, values);
if (obj != null) return (dynamic)obj; if (obj != null) return (dynamic)obj;
return default; return default;
} }
public CultureInfo[] GetCultures()
{
var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Where(culture => ResourceManager.GetResourceSet(culture, true, false) != null)
.ToList();
return cultures.ToArray();
}
} }

View File

@@ -13,6 +13,7 @@ public class App : Application
public override void Initialize() public override void Initialize()
{ {
I18NManager.Culture = new CultureInfo("zh"); I18NManager.Culture = new CultureInfo("zh");
var totalCultures = I18NManager.GetCultures();
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }