Jack e25d4639de feat(i18n): 支持绑定表达式作为国际化键值
- 将 I18NBinding 构造函数的 key 参数从 string 类型改为 object 类型
- 添加对 BindingBase 类型键值的支持,允许动态绑定国际化键
- 为 I18NExtension 添加多个构造函数重载以支持 BindingBase 键值
- 更新资源文件添加新的测试键值对
- 修改视图模型属性访问修饰符并添加测试属性
- 在主窗口视图中添加绑定表达式的国际化使用示例
2026-01-19 03:21:26 +08:00
2025-01-23 18:55:08 +08:00
2025-01-24 01:18:31 +08:00

JackCraft.I18N

一个适用于 Avalonia 的自己觉得怎么好用怎么写的 I18N 库

使用方法

安装

在 Avalonia 组件完全加载完成前的任意地方声明一个 I18NManager

public class App : Application
{
    // 例子: (不包含文件扩展名)
    // Test.Resources
    // TestAvaloniaProject.Assets.Languages.Resources
    public static I18NManager I18NManager { get; } = new("程序命名空间.路径.语言资源文件名");

    public override void Initialize()
    ...
}

使用

切换语言/文化

I18NManager.Culture = new CultureInfo("zh-cn");

获取当前存在的语言/文化

var totalCultures = I18NManager.GetCultures();

从资源文件中获取特定类型的资源

// 标准示例: var value = I18NManager.Get<类型>("资源名称", 文化信息, ...如果是字符串且需要格式化的话需要传入的格式化参数);
// 假设 Hello 的中文资源为 "你好, {0}",默认资源为 "Hello, {0}"Username 为 "User"
var value = I18NManager.Get<string>("Hello", new CultureInfo("zh-cn"), Username);   // value = "你好, User"
var value = I18NManager.Get<string>("Hello", CultureInfo.InvariantCulture, Username);   // value = "Hello, User"

Avalonia 中的使用

<Window xmlns="https://github.com/avaloniaui"
        xmlns:i18N="clr-namespace:JackCraft.I18N;assembly=JackCraft.I18N">
    <StackPanel>
        <TextBlock Text="{i18N:I18N Test}" /> <!-- 输出: 测试 -->
        <TextBlock Text="{i18N:I18N Hello, User}" /> <!-- 输出: 你好, User -->
        <!-- ViewModel: public string User { get; set; } = "User"; -->
        <TextBlock Text="{i18N:I18N Hello, {Binding User}}" /> <!-- 输出: 你好, User -->
    </StackPanel>
</Window>
Description
一个适用于 Avalonia 的自己觉得怎么好用怎么写的 I18N 库
Readme LGPL-3.0 176 KiB
Languages
C# 100%