Projects

Lang.Avalonia

avalonia ui 插件化多語言庫

项目说明

Lang.Avalonia

Lang.Avalonia

Lang.Avalonia 是面向 Avalonia UI 的插件化多语言库。核心包提供 XAML 标记扩展、绑定刷新流程、转换器、I18nManagerILangPlugin 契约;资源加载由 JSON、XML、RESX 插件实现,也可以使用 Source Generator 生成强类型资源 Key。

包線

說明
Lang.Avalonia 核心能力,包含標記擴展、綁定刷新和資源管理。
Lang.Avalonia.Json json 資源提供器。
Lang.Avalonia.Xml xml 資源提供器。
Lang.Avalonia.Resx resx 資源提供器。
Lang.Avalonia.Analysis AdditionalFiles 编译期生成强类型 Key。

功能

  • 統一的 axaml 與 c# 多語言入口。
  • 通过 I18nManager.Instance.Culture 运行时切换语言。
  • JSON、XML、RESX 资源提供器统一实现 ILangPlugin
  • 支持默認文化回退和原始 key 回退。
  • 支持 T4 模板或 Lang.Avalonia.Analysis 生成强类型资源 Key。
  • 支持固定文化預覽、格式化字符串和動態綁定參數。

快速開始

安裝核心包和一個資源提供器:

dotnet add package Lang.Avalonia
dotnet add package Lang.Avalonia.Json

I18n 目录创建语言文件,并将 JSON/XML 文件复制到输出目录:

<ItemGroup>
  <None Update="I18n\*.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

應用啟動時註冊插件:

using Lang.Avalonia;
using Lang.Avalonia.Json;
using System.Globalization;

I18nManager.Instance.Register(new JsonLangPlugin(), new CultureInfo("en-US"), out var error);
if (!string.IsNullOrWhiteSpace(error))
{
    // 记录或展示初始化错误。
}

axaml 中使用生成的常量:

xmlns:c="https://codewf.com"
xmlns:mainLangs="clr-namespace:Localization.Main"

<SelectableTextBlock Text="{c:I18n {x:Static mainLangs:MainView.Title}}" />
<SelectableTextBlock Text="{c:I18n {x:Static mainLangs:MainView.Title}, CultureName=ja-JP}" />

c# 中使用相同 key:

var title = I18nManager.Instance.GetResource(Localization.Main.MainView.Title);
var englishTitle = I18nManager.Instance.GetResource(Localization.Main.MainView.Title, "en-US");

運行時切換語言:

I18nManager.Instance.Culture = new CultureInfo("zh-CN");

適合關注

  • avalonia 項目需要同時支持 json、xml 或 resx 多語言資源。
  • 希望通過統一 api 在 axaml 與 c# 中讀取翻譯字符串。
  • 希望用 t4 或 source generator 生成強類型 key,減少硬編碼字符串。
  • 希望語言切換時界面綁定可以自動刷新。

倉庫