.NET Core AvaloniaUI实现多语言国际化

AvaloniaUI是一个基于.Net Core的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章:

这篇文章可以帮助你:

  1. 根据用户系统设置的语言改变UI显示的语言
  2. 可以在设计器中预览效果
  3. 支持TextBox的Watermark属性
  4. 支持ContentControl的Content属性
  5. 支持TextBlock的的Text属性

第1步:

在项目目录中新建一个文件夹(此处示例名为Localizations)用于存放AppResources.resx文件:

这文件有的名称、值、注释,其中的名称就是下面要附加要控件属性的值

这里默认AppResources.resx是英语,假如我要添加简体中文;则新建一个AppResources.zh-Hans.resx文件,如果要添加更多语言请参考:

https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/localization/text?tabs=windows

注意:新建的资源文件顶部访问修饰符不能选择“无代码生成”

 

第2步:

新建控件的依赖属性,原理就是当控件的显示文本属性更改时查找Uid并更换为指定的多语言文本,Uid为在AppResources.resx中定义的名称

新建LocalizationAttachedPropertyHolder.cs文件

 1     public class LocalizationAttachedPropertyHolder
 2     {
 3         public static AvaloniaProperty<string> UidProperty =
 4             AvaloniaProperty.RegisterAttached<LocalizationAttachedPropertyHolder, AvaloniaObject, string>("Uid");
 5 
 6         static LocalizationAttachedPropertyHolder()
 7         {
 8             TextBlock.TextProperty.Changed.Subscribe(next =>
 9             {
10                 var uid = GetUid(next.Sender);
11                 if (uid != null)
12                 {
13                     next.Sender.SetValue(TextBlock.TextProperty, AppResources.ResourceManager.GetString(uid.ToString()));
14                 }
15             });
16 
17             ContentControl.ContentProperty.Changed.Subscribe(next =>
18             {
19                 var uid = GetUid(next.Sender);
20                 if (uid != null)
21                 {
22                     next.Sender.SetValue(ContentControl.ContentProperty, AppResources.ResourceManager.GetString(uid.ToString()));
23                 }
24             });
25 
26             TextBox.WatermarkProperty.Changed.Subscribe(next =>
27             {
28                 var uid = GetUid(next.Sender);
29                 if (uid != null)
30                 {
31                     next.Sender.SetValue(TextBox.WatermarkProperty, AppResources.ResourceManager.GetString(uid.ToString()));
32                 }
33             });
34         }
35 
36         public static void SetUid(AvaloniaObject target, string value)
37         {
38             target.SetValue(UidProperty, value);
39         }
40 
41         public static string GetUid(AvaloniaObject target)
42         {
43             return (string)target.GetValue(UidProperty);
44         }
45     }

我取名为Uid,这里你可以自己自定义

 第3步:

在xaml中引用:

 

xmlns:localizations="clr-namespace:Demo.Localizations;assembly=SpockWallet"

 

Demo.Localizations是存放刚刚创建的LocalizationAttachedPropertyHolder.cs的命名空间

然后就能在控件上使用了:
Uid为在AppResources.resx中定义的名称
1 <TextBlock localizations:LocalizationAttachedPropertyHolder.Uid="CreateWallet" Text="Create Wallet"/>
2 
3 <Button localizations:LocalizationAttachedPropertyHolder.Uid="CreateYourWallet" Content="Create Your Wallet" />
4 
5 <TextBox localizations:LocalizationAttachedPropertyHolder.Uid="DeleteWallet" Watermark="Delete Wallet" />

重新生成一下AvaloniaUI的设计器就能显示你在AppResources.resxxaml控件中定义的文本了

 

转载于:https://www.cnblogs.com/myhalo/p/11417374.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此文档是从实际项目中总结出来的,互联网上只有“在单一页面进行语言切换”的教程, 没有“一键切换”的解决方案,更没有同时把5种读取资源文件总结在一起的demo。 本文档重点 1.多种读取方式 2.一键全站切换 步骤 一:新建一个asp.net 空 web应用程序“Internationalization”(图1) 二:右键“Internationalization”--->添加--->添加ASP.NET文件夹--->App_GlobalResources 三:右键“App_GlobalResources”--->添加--->新建项--->资源文件--->GlobalLanguage.resx 四:在GlobalLanguage.resx里添加键值对.(图二) 五:连续复制“GlobalLanguage.resx”两次到“App_GlobalResources”下面,并修改名称为 GlobalLanguage.en-US.resx GlobalLanguage.zh-CN.resx 说明:(为什么会有三个文件呢?系统必须有一个默认文件“GlobalLanguage.resx”,两种语言两个文件.) 六:修改英文和中文资源文件里的键值对。 说明(网上大多做法都是把语言设置为浏览器自动识别语言, 这种方式在实际项目中一般不用,所以直接讲解用程序来控制) 七:添加language1.aspx (图3,4) 八:添加language2.aspx (图5),在设计模式下“工具”--->“生成本地资源”,会自动添加一个“App_LocalResources” 和第五步一样,添加再添加两个资源文件。 language2.aspx.zh-CN.resx language2.aspx.en-US.resx 说明(一键全站切换的实现方法有多种,这里只讲最有效的,编写一个基类,在里面设置一个全局变量lan,所有 页面都继承这个基类,再通过程序修改变量lan,用Session最简单,但是用户过多时对内存的消耗很大, 还可以用数据库和配置文件,但是最好用Cookie,所以下面以Cookie为例子) 九:新建一个母板页“language.Master”(图6,7) 十:添加language3.aspx (图8,9),必须继承Base类 十一:添加language4.aspx (图10),必须继承Base类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值