feat: 添加获取所有可用文化的函数
This commit is contained in:
@@ -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);
|
||||
}
|
@@ -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<T>(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();
|
||||
}
|
||||
}
|
@@ -13,6 +13,7 @@ public class App : Application
|
||||
public override void Initialize()
|
||||
{
|
||||
I18NManager.Culture = new CultureInfo("zh");
|
||||
var totalCultures = I18NManager.GetCultures();
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user