zoukankan      html  css  js  c++  java
  • C# ResourceManager和RESX文件 概述及 Winform切换中英文语言功能实现

    1.resx简介

                   winform/wpf里,如果想切换中英文,可以通过自己定义key-value数据(xml,json,数据库,txt,xaml等形式),来遍历控件(winform)或者修改资源引用(wpf)等方法来实现。

        但是对winform来说,系统提供了rest资源文件,通过rest资源文件来保存key-value对应关系似乎更方便。

        详细请参考文档:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/y99d1cd3(v=vs.100)?redirectedfrom=MSDN

        resx根据创建形式分为两种:form-based和手动添加。

    2.form-based resx创建步骤

        默认form自身带有resx,当我们修改控件属性的时候,此文件会变化,此文件本身是xml格式文件。

    选中form,修改Localizable为true,修改language为某一个地区为【中国】, 这时候,并且修改button1 和button2的名称分别:英文,中文

    再次选中form,修改language为【英语】,并且修改button1 和button2的名称分别:english,chinese

    这个时候,就建立了两个语言包,在form1前面的三角点击一下,可以看到文件大概如下:

     其中:form1.resx是默认的,form1.en-us.resx是英文语言包,form1.zh-cn.resx是中文语言包。

    我们可以看到 资源包的名称是这样的:【form1.zh-cn.resx】即【文件名】+【.语言-地区】+【.resx】

    在button1和button2的事件里,切换语言:

                var culture = new CultureInfo("en-US");
                Thread.CurrentThread.CurrentCulture = culture;
                Thread.CurrentThread.CurrentUICulture = culture;
                ResourceManager r = new ResourceManager("winform_通过地区文化语言切换.Form1", typeof(Form1).Assembly);
                button1.Text = r.GetString("button1.Text");
                button2.Text = r.GetString("button2.Text");

    其中 resourceManager的第一个参数是:【名称空间.文件名】

    效果就是点击【语言按钮】后 ,各个控件的Text变为对应的语言,如下图:

    点击英文:

    点击chinese后

     

    3.手动添加语言包

    手动添加的方法是:类库上,右键,添加,新建项,找到资源文件,然后命名:【文件名】+【.语言-地区】+【.resx】

    比如我新建了两个文件:language.en-US.resx和language.zh-CN.resx,

    双击资源文件,我们可以编辑资源文件的key-value值。

    编辑完成后,就可以代码来调用了

            ResourceManager rm = new ResourceManager("winform_通过地区文化语言切换.language", typeof(Form1).Assembly);
    
                MessageBox.Show(rm.GetString("String1", culture));

     同样 ResourceManager的第一个参数是:【名称空间】+【资源文件名】 ,第二个参数是:assemble。rm.GetString的参数是:key名称,culture

    这样,就可以取得资源里面的内容,实现语言切换了。

    另外可以用resx2word工具编辑resx文件:

    http://resx.sourceforge.net/

    另行参考:

    https://limitedcode.blogspot.com/2016/09/c-globalization.html

    4.源码下载

    https://files.cnblogs.com/files/lizhijian/20201026winform%E9%80%9A%E8%BF%87%E5%9C%B0%E5%8C%BA%E6%96%87%E5%8C%96%E8%AF%AD%E8%A8%80%E5%88%87%E6%8D%A2.rar

  • 相关阅读:
    微信浏览器 video
    css 日常
    input file 上传文件类型控制
    JS的一些日常
    使用canvas时, 如何用相对单位(rem, rpx)来适配不同机型
    微信小程序 textarea的placeholder层级过高 在弹层之上 bug解决方法
    保留两位小数, 不足自动补零
    Java创建线程的两个方法
    android socket 网络数据传输
    java中InputStream中read()与read(byte[] b) 用法介绍
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/13892559.html
Copyright © 2011-2022 走看看