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

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml,分别存储中文模板和英文模板

(1) zh-CN.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"><sys:String x:Key="labelLanguage">语言:</sys:String><sys:String x:Key="comboEnglish">英语</sys:String><sys:String x:Key="comboChinese">中文</sys:String><sys:String x:Key="BtnContent">确定</sys:String><sys:String x:Key="textboxContent">这是语言切换测试文本内容</sys:String>
</ResourceDictionary>

(2) en-US.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"><sys:String x:Key="labelLanguage">Language:</sys:String><sys:String x:Key="comboEnglish">English</sys:String><sys:String x:Key="comboChinese">Chinese</sys:String><sys:String x:Key="BtnContent">OK</sys:String><sys:String x:Key="textboxContent">This is the language switching test text content.</sys:String>
</ResourceDictionary>

2、在App.xaml文件内,引入默认使用的语言对应的资源字典,在此默认语言为中文

<Application x:Class="LanguageChangeDemo.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:LanguageChangeDemo"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="zh-CN.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

3、在MainWindow.xaml中添加中英文单选按钮和切换按钮,以及测试文本;并使用{DynamicResource x:Key}动态引用资源字典

<Window x:Class="LanguageChangeDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:LanguageChangeDemo"mc:Ignorable="d"Title="{DynamicResource International}" Height="250" Width="395" WindowStartupLocation="CenterScreen"><Grid><Label Content="{DynamicResource labelLanguage}"  HorizontalAlignment="Left" Margin="97,54,0,0" VerticalAlignment="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/><RadioButton x:Name="cn" Content="{DynamicResource comboChinese}" GroupName="LanguangeChoice" HorizontalAlignment="Left" Margin="169,60,0,0" VerticalAlignment="Top" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" Checked="RadioButton_Checked" Tag="0"/><RadioButton x:Name="en" Content="{DynamicResource comboEnglish}" GroupName="LanguangeChoice" HorizontalAlignment="Left" Margin="261,60,0,0" VerticalAlignment="Top" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" Checked="RadioButton_Checked" Tag="1"/><Button Visibility="Hidden" Content="{DynamicResource BtnContent}" HorizontalAlignment="Left" Margin="274,54,0,0" VerticalAlignment="Top" Height="25" Width="60" Click="Button_Click"/><TextBox Text="{DynamicResource textboxContent}" HorizontalAlignment="Center" Margin="0,132,0,0" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="395" BorderThickness="0"/></Grid>
</Window>

4、MainWindow.xaml.cs中添加切换逻辑

namespace LanguageChangeDemo
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{string selectItem = "";string languageType = "";public MainWindow(){InitializeComponent();cn.IsChecked = true;}private void RadioButton_Checked(object sender, RoutedEventArgs e){RadioButton radioButton = sender as RadioButton;if (radioButton.IsChecked == true){string tag = radioButton.Tag.ToString().Trim();//selectItem = radioButton.Content.ToString();switch (tag){case "0":languageType = "zh-CN";Change();break;case "1":languageType = "en-US";Change();break;default:break;}}}private void Button_Click(object sender, RoutedEventArgs e){改版前//if (languageType != null)//{//    ResourceDictionary langRd = null;//    try//    {//        //根据名字载入语言文件//        langRd = Application.LoadComponent(new Uri(languageType + ".xaml", UriKind.Relative)) as ResourceDictionary;//    }//    catch (Exception e2)//    {//        MessageBox.Show(e2.Message);//    }//    if (langRd != null)//    {//        //如果已使用其他语言,先清空//        if (this.Resources.MergedDictionaries.Count > 0)//        {//            this.Resources.MergedDictionaries.Clear();//        }//        this.Resources.MergedDictionaries.Add(langRd);//    }//}}public void Change(){if (languageType != null){ResourceDictionary langRd = null;try{//根据名字载入语言文件langRd = Application.LoadComponent(new Uri(languageType + ".xaml", UriKind.Relative)) as ResourceDictionary;}catch (Exception e2){MessageBox.Show(e2.Message);}if (langRd != null){//如果已使用其他语言,先清空if (this.Resources.MergedDictionaries.Count > 0){this.Resources.MergedDictionaries.Clear();}Application.Current.Resources.MergedDictionaries[0] = langRd;}///后台获取资源方式var v = FindResource("BtnContent");}//}}
}

5、效果 

http://www.lryc.cn/news/293040.html

相关文章:

  • Elasticsearch:Geoshape query
  • 安装配置sqoop
  • 数据结构——实验01-线性表的链式存储和操作
  • 十分钟上手vue!
  • day37WEB攻防-通用漏洞XSS跨站权限维持钓鱼捆绑浏览器漏洞
  • 【Java程序设计】【C00215】基于SSM的勤工助学管理系统(论文+PPT)
  • c#的反汇编对抗
  • 设计模式之框架源码剖析(实战+图解)
  • SQL注入:sqli-labs靶场通关(1-37关)
  • 浙政钉(专有钉钉)
  • 【lesson2】定长内存池的实现
  • C++迷宫游戏详解
  • java下载网络文件
  • 大数据信用报告查询费用一般要多少钱?
  • 【操作宝典】IntelliJ IDEA新建maven项目详细教程
  • 【Java程序设计】【C00196】基于(JavaWeb+SSM)的旅游管理系统(论文+PPT)
  • pdmodel从动态模型转成静态onnx
  • git 如何修改仓库地址
  • 基于springboot篮球论坛系统源码和论文
  • 【三维重建】运动恢复结构(SfM)
  • Android Studio非UI线程修改控件——定时器软件
  • canvas的一些基础
  • C++(10)——类与对象(最终篇)
  • NetApp FAS2750 和 FAS2820 简化分布式企业的存储
  • Geogebra设置函数定义域
  • 代码随想录刷题笔记 DAY 18 | 找树左下角的值 No.513 | 路经总和 No.112 | 从中序与后序遍历序列构造二叉树 No.106
  • 【algorithm】一个简单的PID工程 base 用于手生时候快速复习 用于设计模式 cpp语法八股 快速复习校验
  • Python处理图片生成天际线(2024.1.29)
  • jsp服装穿搭推荐系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • Opencv(C++)学习 之RV1126平台的OPENCV交叉编译