WPF多语言支持

常见的有四种方案:1.资源字典2.资源文件、

我用的是资源字典。

1.做两个语言资源,如下:

(1)中文资源AppResource_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">
    <!--登录页Start-->
    <sys:String x:Key="lblSignTitle">欢迎登录</sys:String>
    <sys:String x:Key="lblUserNumber">账号</sys:String>
    <sys:String x:Key="lblUserPwd">密码</sys:String>
    <sys:String x:Key="chkRemUserName">记住账户</sys:String>
    <sys:String x:Key="btnSignIn">登录</sys:String>
    <sys:String x:Key="btnGuestSign">游客登录</sys:String>
    <sys:String x:Key="Locked">对不起,该账号已锁定,请联系管理员!</sys:String>
    <sys:String x:Key="NoPass">用户名或密码错误!</sys:String>
    <!--登录页End-->
    <!--主页Start-->
    <sys:String x:Key="txtSearchBox">搜索</sys:String>
    <sys:String x:Key="btnMainPage">主页</sys:String>
    <sys:String x:Key="btnMainPageTag">系统主页</sys:String>
    <sys:String x:Key="txtBarkBg">深色主题</sys:String>
    <sys:String x:Key="lblUStars1">登录</sys:String>
    <sys:String x:Key="lblUStars2">个人信息</sys:String>
    <sys:String x:Key="lblLogout">注销</sys:String>
    <sys:String x:Key="lblMainTitle">B2P主控中心</sys:String>
    <sys:String x:Key="helpBtn">帮助中心</sys:String>
    <sys:String x:Key="minBtn">最小化</sys:String>
    <sys:String x:Key="changeBtn">最大化</sys:String>
    <sys:String x:Key="closeBtn">退出</sys:String>
    <sys:String x:Key="msgSignIn">小主登录成功!~</sys:String>
    <sys:String x:Key="msgSignOut">小主取消了登录!~</sys:String>
    <sys:String x:Key="NoPermission">操作禁止(。・`ω´・)您需要更高权限!~</sys:String>
    <sys:String x:Key="UnknownUrl">按钮链接地址未知!</sys:String>
    <!--主页End-->
</ResourceDictionary>

(2)英文资源AppResource_en_US.xaml,key的个数和名字与中文资源一致,修改key对应的值为英文(这里的例子用中文+En代替了)

<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">
    <!--登录页Start-->
    <sys:String x:Key="lblSignTitle">欢迎登录En</sys:String>
    <sys:String x:Key="lblUserNumber">账号En</sys:String>
    <sys:String x:Key="lblUserPwd">密码En</sys:String>
    <sys:String x:Key="chkRemUserName">记住账户En</sys:String>
    <sys:String x:Key="btnSignIn">登录En</sys:String>
    <sys:String x:Key="btnGuestSign">游客登录En</sys:String>
    <sys:String x:Key="Locked">对不起,该账号已锁定,请联系管理员!En</sys:String>
    <sys:String x:Key="NoPass">用户名或密码错误!En</sys:String>
    <!--登录页End-->
    <!--主页Start-->
    <sys:String x:Key="txtSearchBox">搜索En</sys:String>
    <sys:String x:Key="btnMainPage">主页En</sys:String>
    <sys:String x:Key="btnMainPageTag">系统主页En</sys:String>
    <sys:String x:Key="txtBarkBg">深色主题En</sys:String>
    <sys:String x:Key="lblUStars1">登录En</sys:String>
    <sys:String x:Key="lblUStars2">个人信息En</sys:String>
    <sys:String x:Key="lblLogout">注销En</sys:String>
    <sys:String x:Key="lblMainTitle">B2P主控中心En</sys:String>
    <sys:String x:Key="helpBtn">帮助中心En</sys:String>
    <sys:String x:Key="minBtn">最小化En</sys:String>
    <sys:String x:Key="changeBtn">最大化En</sys:String>
    <sys:String x:Key="closeBtn">退出En</sys:String>
    <sys:String x:Key="msgSignIn">小主登录成功!~En</sys:String>
    <sys:String x:Key="msgSignOut">小主取消了登录!~En</sys:String>
    <sys:String x:Key="NoPermission">操作禁止(。・`ω´・)您需要更高权限!~En</sys:String>
    <sys:String x:Key="UnknownUrl">按钮链接地址未知!En</sys:String>
    <!--主页End-->
</ResourceDictionary>

2.App.xaml添加语言字典资源(添加一个默认的就行,用于项目加载时用)

1     <Application.Resources>
2         <ResourceDictionary>
3             <ResourceDictionary.MergedDictionaries>
4                      <ResourceDictionary x:Name="Language" Source="/HOST_CONTROL_CENTER_APP;component/Dictionarys/AppResource_zh_CN.xaml"/>
5             </ResourceDictionary.MergedDictionaries>
6         </ResourceDictionary>
7     </Application.Resources>

 3.在WPF窗口或者控件xaml代码中调用:

  把原来中文值改成{DynamicResource key}就行了,如下:

<Button Content="主页" x:Name="MainShow" Tag="{DynamicResource btnMainPageTag}" Width="200" Visibility="Visible" Click="BtnPage_Click"/>

改为:

<Button Content="{DynamicResource btnMainPage}" x:Name="MainShow" Tag="{DynamicResource btnMainPageTag}" Width="200" Visibility="Visible" Click="BtnPage_Click"/>

4.创建切换语言的菜单(ComboBox控件):

 后台代码:

   /// <summary>
        /// 改变语言
        /// </summary>
        private void CmbLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.RemovedItems.Count > 0)  // 注掉这一行看看会发生什么 
            {
                string Culture= "/HOST_CONTROL_CENTER_APP;component/Dictionarys/AppResource_{0}.xaml";
                if (e.AddedItems[1].ToString() == "简体中文")
                {
                    Culture = string.Format(Culture, "zh_CN");
                }
                else if ( e.AddedItems[1].ToString() == "English")
                {
                    Culture = string.Format(Culture, "en_US");
                }
                List<string> ll = new List<string>();
                foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
                {
                    if (dictionary.Source != null && dictionary.Source.OriginalString.Contains("AppResource"))
                    {
                        bool b = Application.Current.Resources.MergedDictionaries.Remove(dictionary);
                        dictionary.Source =new Uri(Culture, UriKind.RelativeOrAbsolute);
                        Application.Current.Resources.MergedDictionaries.Add(dictionary);
                        break;
                    }
                }
            }
        }

注:不成功记得把字典资源文件的属性改成“始终复制”。

参考文章(下面的方法都提供了多种方案):

[WPF]本地化入门 

WPF应用程序支持多国语言解决方案 

365个夜晚,我希望做到两天更一篇博客。加油,小白!
原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15789161.html