【I18N】最少的代码实现WPF多语言动态绑定

Antelcat.I18N

给WPF/Avalonia应用程序提供响应式的多语言支持。


Nuget 包 Antelcat.I18N.WPF

Github


样例

Demo


用法

前提

  • 安装包 Antelcat.I18N.WPF

  • 准备一份资源文件
    资源文件
    在这里插入图片描述

  • 设计一个类用来提供资源Key值
    这个类必须是 partial 类,然后标注特性 [ResourceKeysOf(Type)]
    其中的 type 就是资源文件生成的 Resources.Desiginer.cs 中的类

    using Antelcat.Wpf.I18N.Attributes
    namespace Your.Project;
    
    [ReosurceKeysOf(typeof(Resources))]
    public partial class LangKeys{}
    

    这个特性会自动生成另一部分类,包含资源的Key值

静态绑定

完成前面的步骤,接着在 .xaml 文件中就可以绑定了

<TextBlock Text="{I18N {x:Static yP:LangKeys.Language}}" />

切换语言的时候只需要调用

Antelcat.Wpf.I18N.I18NExtension.Culture = new CultureInfo("en");

这时候就能看到文本在动态更换

动态绑定

有时你的源文本并不是在你的应用程序中定义的,而是从其他来源(如网络)接收到的,也可以传递一个绑定来进行翻译

<TextBlock Text="{I18N {Binding Message}}"/> 

内存中的文本更新和语言更新都能实时响应

多个文本组合和格式化

有些情况下,你需要将多个文本组合起来,或者对文本进行格式化,你可以使用I18NLanguageBinding来实现。

如果你已经有了如下翻译的.resx文件:

<data name="Current_is" xml:space="preserve">
    <value>当前的 {0} 是 {1}</value>
</data>
<data name="Language" xml:space="preserve">
    <value>语言</value>
</data>
<data name="Chinese" xml:space="preserve">
    <value>中文</value>
</data>

并且在.xaml

<TextBlock>
    <TextBlock.Text>
        <I18N Key="{x:Static myProject:LangKeys.Current_is}">
            <LanguageBinding Key="{x:Static myProject:LangKeys.Language}"/>
            <Binding Path="Language"/> <!--source text from view model-->
        </I18N>
    </TextBlock.Text>
</TextBlock>

此时 I18N.Key 是字符串的模板,其中的 LanguageBindingBinding 会提供模板的参数,他们会被按顺序格式化成最终的文本。同时保持整体的响应性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值