当前位置: 首页 > news >正文

实用指南:WPF 国际化ResXManager的使用-梳理

看了几篇WPF 中使用ResXManager的文章:

WPF国际化 - ResXManager 多语言切换https://blog.csdn.net/szy13323042191/article/details/136673807?fromshare=blogdetail&sharetype=blogdetail&sharerId=136673807&sharerefer=PC&sharesource=qq_59062726&sharefrom=from_link

小白请先阅读完毕再接着往下看。有经验的随意。

需要了解的一些类:

CultureInfo:

在代码中表示你的软件使用什么语言以及对应的资源文件。

System.Globalization.CultureInfo 类 - .NET | Microsoft Learn

ResourceManager 

ResourceManager 是资源管理器,在代码中针对某一资源文件,根据键获取对应的值(资源文件就是键值对的形式)

ResourceManager 类 (System.Resources) | Microsoft Learn

大致步骤:

使用到的切换语言助手类大致如下:

 public class LanguageManager : INotifyPropertyChanged{/// /// 资源/// private readonly ResourceManager _resourceManager;/// /// 懒加载/// private static readonly Lazy _lazy = new Lazy(() => new LanguageManager());public static LanguageManager Instance => _lazy.Value;public event PropertyChangedEventHandler PropertyChanged;public LanguageManager(){//获取此命名空间下Resources的Lang的资源,Lang可以修改_resourceManager = new ResourceManager("FluentVision.UI.Lang.lang", typeof(LanguageManager).Assembly);}/// /// 索引器的写法,传入字符串的下标/// /// /// /// public string this[string name]{get{if (name == null){throw new ArgumentNullException(nameof(name));}return _resourceManager.GetString(name);}}public void ChangeLanguage(CultureInfo cultureInfo){CultureInfo.CurrentCulture = cultureInfo;CultureInfo.CurrentUICulture = cultureInfo;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("item[]"));  //字符串集合,对应资源的值}}

语言切换:

LanguageManager.Instance.ChangeLanguage(new CultureInfo("en"));

界面绑定:

代码中使用:

这里说一下几个关键点便于理解:

1.cultrueInfo和资源文件

资源文件命名规则为:文件名(自定义)+cultrueInfo.Name+.resx后缀名

如:

lang.resx   默认资源

lang.en.resx    英语资源

lang.zh-CN.resx   中文资源

这样命名应用程序代码会根据cultureInfo来确定从哪一个文件读取资源,这一部分是.Net内置的功能,确定了cultrueInfo就可以确定程序用到的资源文件。

创建新的对象:new CultureInfo("en"),就相当于宣布使用 lang.en.resx   这个文件。

2.加载默认资源文件

_resourceManager = new ResourceManager("FluentVision.UI.Lang.lang", typeof(LanguageManager).Assembly);

这样不指定CultureInfo的情况下,会使用lang.resx  这个默认资源文件。

3.数据绑定系统

实际上LanguageManager 相当于一个View的一个ViewModel,xaml中使用Binding 绑定了LanguageManager 的属性,然后切换语言的时候,通过PropertyChanged事件实现界面数据刷新,跟平常使用的MVVM思想一致。

索引器是类的有参属性,查看IL发现实际上生成了一个名字是Item的属性:

所以上面代码才会这样写:

// "item[]" 就是指上面的 this[string name] 索引器 名称PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("item[]"));

http://www.jsqmd.com/news/307150/

相关文章:

  • ISBN查询服务技术架构深度解析:如何构建高可用、高性能的图书数据平台
  • springboot文化旅游小程序系统设计实现
  • Java快速开发平台深度评测:若依、芋道、Jeesite、JeecgBoot四剑客全解析
  • 计算机软件著作权(软著)全解析:价值、流程与应用场景
  • springboot图书馆座位预约微信小程序系统设计实现
  • springboot图书捐赠管理系统设计开发实现
  • 测试执行引擎核心模块设计解析
  • 多环境适配测试架构设计:原则与优化策略
  • 配置中心在测试框架中的应用:提升测试效率的关键策略
  • 行为驱动开发(BDD)框架集成指南
  • 微服务架构下的 UI 测试策略
  • 跨平台统一测试框架构建方法论
  • 2026年齿轮式拉丝机供应商排名,口碑好的厂家推荐
  • 测试工具链自定义插件开发指南:从基础到实践
  • 湖南特产渔湘四海/休闲零食批发零售/坚果炒货食品配送服务商综合选购推荐指南(2026年版)
  • 低代码测试平台二次开发实战指南
  • 2025-2026办公鼠标推荐:从新手到资深职场人,这5款让你效率翻倍
  • 2026热门宠物智能舱品牌盘点:从家庭到商业,选对产品不纠结
  • 通蔚生物口碑提升:四大维度的全方位解决方案,il-1β elisa试剂盒/IL-6试剂盒,通蔚生物源头厂家排行
  • 一文读懂软件著作权:申请指南与核心价值
  • 【Matlab】MATLAB rand函数:从随机矩阵生成到实验数据模拟,解锁随机数应用核心
  • 【Matlab】MATLAB randn函数:从正态矩阵生成到噪声数据模拟,掌握随机误差建模核心
  • IT项目商业价值陈述模板(含3种业务场景案例)
  • 【Matlab】MATLAB矩阵单元素索引:从索引规则到元素操作,掌握矩阵精准操控核心
  • 基于PHP、asp.net、java、Springboot、SSM、vue3的即时通讯系统的设计与实现
  • 公网IP证书纯国内验证
  • 亲测好用8个AI论文网站,本科生轻松搞定论文格式规范!
  • Minara:通过对话一站式完成研究、规划与投资 | ProductHunt 今日热榜 - 01月27日
  • 计算机毕业设计Python洪水预测系统 自然灾害预测可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
  • VirtualLab Fusion应用:光路设置