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

WPF实现多语言切换

WPF实现多语言切换完整指南

一、基础实现方案

1. 资源文件准备

首先创建不同语言的资源文件:

Resources/
├── Strings.resx          // 默认语言(英语)
├── Strings.zh-CN.resx    // 简体中文
└── Strings.ja-JP.resx    // 日语

​Strings.resx​​ (默认英语):

 
<data name="WelcomeMessage" xml:space="preserve"><value>Welcome to our application!</value>
</data>
<data name="Exit" xml:space="preserve"><value>Exit</value>
</data>

​Strings.zh-CN.resx​​ (简体中文):

 
<data name="WelcomeMessage" xml:space="preserve"><value>欢迎使用我们的应用程序!</value>
</data>
<data name="Exit" xml:space="preserve"><value>退出</value>
</data>

2. 创建资源管理类

 
// LocalizationManager.cs
using System.Globalization;
using System.Threading;
using System.Windows;public class LocalizationManager
{private static readonly CultureInfo _defaultCulture = new CultureInfo("en-US");public static void Initialize(){// 设置默认语言SetLanguage(_defaultCulture);}public static void SetLanguage(CultureInfo culture){if (culture == null)throw new ArgumentNullException(nameof(culture));Thread.CurrentThread.CurrentUICulture = culture;Thread.CurrentThread.CurrentCulture = culture;// 更新所有已加载的资源字典var mergedDictionaries = Application.Current.Resources.MergedDictionaries;var resourceDict = mergedDictionaries.FirstOrDefault(d => d.Source != null && d.Source.OriginalString.Contains("Resources/Strings."));if (resourceDict != null){mergedDictionaries.Remove(resourceDict);}// 添加新的语言资源var newResourceDict = new ResourceDictionary{Source = new Uri($"/YourAssemblyName;component/Resources/Strings.{culture.Name}.xaml", UriKind.Relative)};mergedDictionaries.Insert(0, newResourceDict);// 更新界面foreach (Window window in Application.Current.Windows){var context = window.DataContext as INotifyPropertyChanged;if (context != null){context.OnPropertyChanged(string.Empty); // 触发所有绑定重新评估}}}public s

相关文章:

  • Java 实用工具类:深入讲解 CollectionUtils
  • CCF CSP 第30次(2023.05)(4_电力网络_C++)
  • C++:string 1
  • 游戏状态管理:用Pygame实现场景切换与暂停功能
  • Java 日志:掌握本地与网络日志技术
  • 6.1腾讯技术岗2025面试趋势前瞻:大模型、云原生与安全隐私新动向
  • HTML与安全性:XSS、防御与最佳实践
  • 华为OD机试真题——二维伞的雨滴效应(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 在WSL2+Ubuntu22.04中通过conda pack导出一个conda环境包,然后尝试导入该环境包
  • 【Linux网络】打造初级网络计算器 - 从协议设计到服务实现
  • 1.4 大模型应用产品与技术架构
  • 静态多态和动态多态的区别
  • 【Tauri】桌面程序exe开发 - Tauri+Vue开发Windows应用 - 比Electron更轻量!8MB!
  • 【高频考点精讲】实现垂直居中的多种CSS方法比较与最佳实践
  • BS架构与CS架构的对比分析:了解两种架构的不同特点与应用
  • 计算机网络 | 应用层(4)--DNS:因特网的目录服务
  • (done) 吴恩达版提示词工程 5. 推理 (情绪分类,控制输出格式,输出 JSON,集成多个任务,文本主题推断和索引,主题内容提醒)
  • 来自 Bisheng 关于微调的内容总结
  • [mysql]约束(上)
  • 19.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--当前项目拆分规划
  • 解放日报:浦东夯实“热带雨林”式科创生态
  • 秦洪看盘|资金切换主线,重构市场风格
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 十四届全国人大常委会第十五次会议在京闭幕
  • 中国人保不再设监事会,国寿集团未再设置监事长职务
  • 2025上海车展 | 当智驾不再让人兴奋,汽车智能化暗战升级