• 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个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    影响Java EE性能的十大问题
    Android APK加壳技术方案【2】
    动态实时跟踪你的java程序
    ASP.NET MVC载入页面常用方法
    JavaWeb禁用浏览器缓存
    JavaWebresponse两个流
    nslookup命令用法
    GDAL交流 QQ群
    事件(二)——Jquery事件模型
    浅谈meta标签
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15789161.html
Copyright © 2020-2023  润新知