当前位置 : 主页 > 网络编程 > 其它编程 >

.NETCoreAvaloniaUI实现多语言国际化

来源:互联网 收集:自由互联 发布时间:2023-07-02
AvaloniaUI是一个基于.NetCore的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章:这篇文章可以帮助你:根据用户系统设置的语 AvaloniaUI是一个基于.Net
AvaloniaUI是一个基于.NetCore的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章:这篇文章可以帮助你:根据用户系统设置的语

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

这篇文章可以帮助你:

  • 根据用户系统设置的语言改变UI显示的语言
  • 可以在设计器中预览效果
  • 支持TextBox的Watermark属性
  • 支持ContentControl的Content属性
  • 支持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

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

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

     

    第2步:

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

    新建LocalizationAttachedPropertyHolder.cs文件

    1 public class LocalizationAttachedPropertyHolder 2 { 3 public static AvaloniaProperty UidProperty = 4 AvaloniaProperty.RegisterAttached("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=你的程序集名称"

     

    Demo.Localizations是存放刚刚创建的LocalizationAttachedPropertyHolder.cs的命名空间然后就能在控件上使用了:Uid为在AppResources.resx中定义的名称1 2 3 4 5

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

     

    【转自:美国cn2服务器 http://www.558idc.com/mg.html欢迎留下您的宝贵建议】
    网友评论