feat: 添加获取所有可用文化的函数
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user