- 添加资源定义示例表格说明 - 补充 ViewModel 属性绑定示例代码 - 修正 Hello 文本绑定示例为 UserName - 增加绑定语法使用示例 - 完善国际化标签使用说明
70 lines
2.2 KiB
Markdown
70 lines
2.2 KiB
Markdown
# JackCraft.I18N
|
||
|
||
一个适用于 Avalonia 的自己觉得怎么好用怎么写的 I18N 库
|
||
|
||
## 使用方法
|
||
|
||
### 安装
|
||
|
||
在 Avalonia 组件完全加载完成前的任意地方声明一个 `I18NManager`
|
||
|
||
```csharp
|
||
public class App : Application
|
||
{
|
||
// 例子: (不包含文件扩展名)
|
||
// Test.Resources
|
||
// TestAvaloniaProject.Assets.Languages.Resources
|
||
public static I18NManager I18NManager { get; } = new("程序命名空间.路径.语言资源文件名");
|
||
|
||
public override void Initialize()
|
||
...
|
||
}
|
||
```
|
||
|
||
### 使用
|
||
|
||
#### 切换语言/文化
|
||
|
||
```csharp
|
||
I18NManager.Culture = new CultureInfo("zh-cn");
|
||
```
|
||
|
||
#### 获取当前存在的语言/文化
|
||
|
||
```csharp
|
||
var totalCultures = I18NManager.GetCultures();
|
||
```
|
||
|
||
#### 从资源文件中获取特定类型的资源
|
||
|
||
```csharp
|
||
// 标准示例: 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 中的使用
|
||
|
||
```xml
|
||
<Window xmlns="https://github.com/avaloniaui"
|
||
xmlns:i18N="clr-namespace:JackCraft.I18N;assembly=JackCraft.I18N">
|
||
<StackPanel>
|
||
<!-- Resources:
|
||
资源名称 | 默认值 | 中文
|
||
Test | Test | 测试
|
||
Hello | Hello, {0} | 你好, {0}
|
||
-->
|
||
<!-- ViewModel:
|
||
public string UserText { get; set; } = "UserName";
|
||
public string TestKey { get; set; } = "Test";
|
||
public string HelloKey { get; set; } = "Hello";
|
||
-->
|
||
<TextBlock Text="{i18N:I18N Test}" /> <!-- 输出: 测试 -->
|
||
<TextBlock Text="{i18N:I18N Hello, UserName}" /> <!-- 输出: 你好, UserName -->
|
||
<TextBlock Text="{i18N:I18N Hello, {Binding UserText}}" /> <!-- 输出: 你好, UserName -->
|
||
<TextBlock Text="{i18N:I18N {Binding Test}}" /> <!-- 输出: 测试 -->
|
||
<TextBlock Text="{i18N:I18N {Binding HelloKey}, {Binding HelloKey}}" /> <!-- 输出: 你好, Hello -->
|
||
</StackPanel>
|
||
</Window>
|
||
``` |