当前位置: 首页 > 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 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--当前项目拆分规划
  • 一回合摘下“狮心”,张名扬霸气回应观众:再嘘一个我听听
  • 我国对国家发展规划专门立法
  • 甘肃省原副省长赵金云被开除公职,甘肃省委表态:坚决拥护党中央决定
  • 万能险新规落地:保险期限不得低于五年,明确万能险销售“负面清单”
  • 杨荫凯已任浙江省委常委、组织部部长
  • 滁州一交通事故责任认定引质疑:民警和司法鉴定人被处罚,已中止诉讼