WPF多语言国际化,中英文切换

通过切换资源文件的形式实现中英文一键切换

在项目中新建Language文件夹,添加资源字典(xaml文件),中文英文各一个。

在资源字典中写上想中英文切换的字符串,需要注意,必须指定key值,并且中英文的Key值需要一一对应(因为到时候是按照Key值替换的)

在前端使用的时候,就不要用固定的字符串了,而是绑定到动态资源,注意一定是动态资源DynamicResource,如果写成静态资源就不能切换了

DynamicResource后面的值就是在资源文件中定义的Key值

首先要先去app.xaml里设置一下初始的语言

这是加载资源文件的意思,后面的Source写你自己想要初始加载的语言xaml文件的路径

然后中英文切换时,是在后台代码里切换资源文件,比如点击切换语言按钮,调用下面的切换语言方法。

需要注意!!!

需要注意!!!

需要注意!!!重要的事情说三遍!我在上面app.xaml里,还载入了一些其他资源文件,可以看到语言资源文件是第三个,所以在下面切换语言时,是

Application.Current.Resources.MergedDictionaries[2].Source

下标为2,意思是将第三个资源文件(即我们的语言资源文件)替换,在使用时需要根据实际情况进行修改

复制代码
    /// <summary>
    /// 语言选项
    /// </summary>
    public enum Language
    {
        Chinese,
        English
    }

        public Language Language { get; set; }

        /// <summary>
        /// 切换语言
        /// </summary>
        private void SwitchLanguage()
        {
            try
            {
                if (Language == Language.Chinese)
                {
                    Language = Language.English;
                    string english = "pack://application:,,,/Language/English.xaml";
                    Application.Current.Resources.MergedDictionaries[2].Source = new Uri(english);
                }
                else
                {
                    Language = Language.Chinese;
                    string chinese = "pack://application:,,,/Language/Chinese.xaml";
                    Application.Current.Resources.MergedDictionaries[2].Source = new Uri(chinese);
                }
            }
            catch (Exception e)
            {
                //错误处理
            }
        }

点击切换语言按钮,调用这个切换语言方法,因为我们页面绑定的是动态的资源,就能发现页面的语言已经实现了切换。

这是界面上直接绑定时的语言切换,有些人可能遇到一些像写日志、弹窗这种没办法动态绑定的情况,那就需要通过后台代码来通过Key值读出资源的字符串了

复制代码
string text = Application.Current.FindResource("想查找资源的Key值") as String;

这样在是英文资源的时候,返回的字符串就是英文,在是中文资源的时候,字符串就是中文的。

就能实现非页面绑定的中英文切换啦。

博主会不定时更新WPF技术,分享技术代码,感兴趣的小伙伴可以关注一波~

相关推荐
源之缘-专注WPF开发2 小时前
全栈开发实战:WPF+FFmpeg+GIS,打造工业级雷达探测终端
ffmpeg·wpf·gis
superman超哥5 小时前
仓颉语言中字符串常用方法的深度剖析与工程实践
开发语言·后端·python·c#·仓颉
bugcome_com5 小时前
C# 中 ref 与 out 参数传递:核心区别与实战解析
c#
用户4488466710606 小时前
.NET 进阶 —— 深入理解线程(3)ThreadPool 与 Task 入门:从手动线程到池化任务的升级
c#·.net
CreasyChan6 小时前
unity四元数 - “处理旋转的大师”
unity·c#·游戏引擎
wuguan_6 小时前
C#索引器
c#·索引器
聪明努力的积极向上6 小时前
【设计】分批查询数据通用方法(基于接口 + 泛型 + 定点复制)
开发语言·设计模式·c#
张人玉7 小时前
C# WPF 折线图制作(可以连接数据库)
数据库·c#·wpf·sugar
kylezhao20197 小时前
C# 中的委托(Delegate)与事件(Event)
c#·c#上位机
lzhdim8 小时前
C#应用程序取得当前目录和退出
开发语言·数据库·microsoft·c#