.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

时间: 2024-09-29 04:58:35

.NET Core AvaloniaUI实现多语言国际化的相关文章

asp.net core 实现支持多语言

asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一些实践 国际化/本地化介绍 国际化(Globalization)和本地化(Localization)是要实现的多语言支持的基础 Globalization is the process of designing and developing applications that function fo

iOS App多语言国际化

/*************************************1*******************************************/ /*************************************2*******************************************/ /*************************************3*******************************************

i18next-页面层语言国际化js框架介绍

因为工作需要,最近研究了下网站语言国际化的问题,根据当前项目架构,寻求一种较好的解决方案.首先总结下项目中语言切换实现方式大概有以下几种: 1,一种语言一套页面,如:index_CN.html,index_TN.html,index_EN.html   根据用户当前使用语言来展示对应的页面.   这种方式比较常用,也比较理想,性能不错,但是开发使用的时间就多,每个页面要多做几遍. 2,后台定义变量,根据当前语言返回对应语言信息   这种方式不好使,麻烦,页面所有静态显示文本处都需要定义变量,从后

Winform下的语言国际化,几行代码轻松实现

最近做了一些关于winform的项目,需要用到winform的语言国际化,在初使化的时候用起来非常方便.可以参考一下: 核心逻辑: 预览效果演示: OK,以下是核心代码和操作流程 一,添加LanguageHelper类 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks;

Android 语言国际化

前言 我们在使用Android手机系统的时候经常在"设置"项里面会提供用户多种系统语言选择,比如:中文.英语-- 大家或许已经发现这些语言显示顺序都是"从左往右":但是有一些语言是"从右往左"显示的,比如阿拉伯语.希伯来语等语言,当在这种语言环境下时,我们需要怎么来处理布局文件呢?接下来的时间我们就来讨论处理阿拉伯语等"从右往左"显示语言的问题. 布局 首先我们先讲解布局问题,在Android系统中为了支持不同语言显示,可以定

iOS开发-进阶:语言国际化及代码切换语言

语言国际化和使用代码切换语言是很多APP都有的功能, 实现起来也很简单, 没有什么技术难题, 网上有很多相关的资料, 在实现了功能后, 打算把整个过程写在这里.(例子均为中英文, 替换其他语言原理相同, 只需记录保存该语言的key值即可) 需求: 1.应用名跟随系统切换 2.应用内容跟随系统切换 3.使用代码切换应用内容的语言(含后台返回数据切换语言) 实现: 1.应用名跟随系统切换 首先在Project下选择Info, 然后在Localizations中添加程序需要使用的语言,中文. 然后创建

使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)

使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有自身的语言国际化,两者是不同的. 先来看最终效果: 前期准备: 这次创建一个 main window 在 menu bar 加一个 language 的 menu: 我们还要对 action 进行一些设置,如下: 生成 .py 文件: 生成代码: 1 # -*- coding: utf-8 -*-

.net core 3.1简体中文语言包,英文智能提示变成中文!

.net core 3.1简体中文语言包,英文智能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了 由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文提示,中文提示在英文提示下面.有需要的可以联系我的QQ11392301, 由于是劳力翻译的,挺辛苦,一个个文件处理的,需要的会收点手续费! 以下是汉化后的智能提示截图. 视图提示也汉化了.都是谷歌翻译的. 中英文参考,参数也翻译了! 有需要的可以联系QQ:11392301 微软可能不会出.net c

体验 ASP.NET Core 中的多语言支持(Localization)

首先在 Startup 的 ConfigureServices 中添加 AddLocalization 与 AddViewLocalization 以及配置 RequestLocalizationOptions (这里假设使用英文与中文): public void ConfigureServices(IServiceCollection services) { services.AddLocalization(options => options.ResourcesPath = "Reso