# I18N
**Repository Path**: sunpanowj/I18N
## Basic Information
- **Project Name**: I18N
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-15
- **Last Updated**: 2025-01-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Antelcat.`{I18N}`
给.NET应用程序提供响应式的多语言支持。
---
🇬🇧 [English](./README.en.md)
## 🗔 受支持的平台
+ [WPF](https://github.com/dotnet/wpf)
+ [Avalonia](https://github.com/AvaloniaUI/Avalonia)
## 📖 示例
---
### 静态使用
当你在项目中使用`.resx`文件作为语言文件时,你可以使用`Antelcat.I18N.Attributes.ResourceKeysOfAttribute`来自动生成资源键:
```csharp
using Antelcat.I18N.Attributes;
namespace MyProject
//Auto generated class should be partial
[ResourceKeysOf(typeof(My.Resource.Designer.Type))]
public partial class LangKeys
{
}
```
然后在你的`.xaml`文件中使用`x:Static`来为你的控件提供资源键
如果你已经在你的`.resx`文件中有
```xml
语言
```
你可以像这样使用:
```xaml
```
然后你可以使用这个键来绑定语言源
```xaml
```
当你想要改变语言时,只需要调用
```csharp
using System.Windows;
I18NExtension.Culture = new CultureInfo("language code");
```
你可以看到文本在语言之间变化。
---
### 动态使用
有时你的源文本并不是在你的应用程序中定义的,而是从其他来源(如网络)接收到的,你可以使用`I18N`直接绑定文本。
如果你收到了一个像这样的json:
```json
{
"message": "This is a message"
}
```
并且你已经在`.resx`中将他翻译成了另一种语言
```xml
这是一条消息
```
你肯定会设计一个`ViewModel`并且将他设置到属性`Message`中,你可以像这样绑定:
```xaml
```
每当`Message`属性被改变或者语言源被改变时,文本都会自动更新。
---
### 多个文本组合和格式化
有些情况下,你需要将多个文本组合起来,或者对文本进行格式化,你可以使用`I18N`和`LanguageBinding`来实现。
如果你已经有了如下翻译的`.resx`文件:
```xml
当前的 {0} 是 {1}
语言
中文
```
并且在`.xaml`中
```xaml
```
此时 `I18N.Key` 是字符串的模板,其中的 `LanguageBinding` 和 `Binding` 会提供模板的参数,他们会被按顺序格式化成最终的文本。同时保持整体的响应性。