以DevExpress开发的WinFrom程序的多语言功能的实现

以DevExpress开发的WinFrom程序的多语言功能的实现

以DevExpress开发的WinFrom程序的多语言功能的实现

写在前面:
多语言切换功能在Winform程序中是经常遇到的需求,尤其是需要给国外客户使用的情况下,多语言功能是必不可少的。前一段时间我也遇到了这个需求,在实现过程当中也遇到了很多问题。因为这个功能是相对很普遍的的,相信很多人都会遇到,所以我将实现方法梳理了一下,分享给大家!(非DevExpress开发也可以看一看)

需求拆分:
在Winform程序中需要进行多语言设置的字段主要来自于三个方面:

  1. 控件UI字段 eg: button.Text \colum.Caption
  2. 控件不可修改的UI字段 eg:wizardControl的Next,Last,Finish按钮以及XtraMessageBox提示框的确认按钮
  3. 代码中自定义的中文字符串 eg:提示信息 XtraMessageBox.Show(“格式错误”);

解决方法:
首先,设置当前线程、UI的语言的代码如下(以简体中文为例):

    string language = "zh-CN";    // Create a new object, representing the German culture.     CultureInfo culture = CultureInfo.CreateSpecificCulture(language);    // The following line provides localization for the application's user interface.     Thread.CurrentThread.CurrentUICulture = culture;    // The following line provides localization for data formats.     Thread.CurrentThread.CurrentCulture = culture;    // Set this culture as the default culture for all threads in this application.     // Note: The following properties are supported in the .NET Framework 4.5+    CultureInfo.DefaultThreadCurrentCulture = culture;    CultureInfo.DefaultThreadCurrentUICulture = culture;

其次,针对以上三种需要进行多语言设置的地方,需要分别进行处理

  1. 控件UI字段:切换Form的Language属性目标语言,然后可以在页面上手动修改,保存后,项目目录下会自动生成一个Form.zh-CN.resx文件,打开便能看到刚刚所修改的字段。你可以手动修改该文件,与修改UI字段的效果是一样的。你也可以自己新建一个与默认语言资源文件同名的以zh-CN.resx为后缀的中文资源文件,在里面手动添加自己想修改的控件字段,就不用再通过设置Language属性进行修改了。

  2. 控件不可修改的UI字段(针对DevExpress):步骤一可以解决大部分控件上面显示的字段,但是在DevExpress控件中,有些地方是不能手动修改的,比如导航控件WizardControl的Next按钮,以及弹出提示框的确认按钮,此时需要借助DevExpress官方的资源包:
    地址:https://localization.devexpress.com
    添加一个Translation,选择自己使用的版本号以及目标语言后点击下载,对应的语言资源文件的压缩包会发送到邮箱,保存后解压到项目运行目录下对应的语言资源文件夹就可以了。

  3. 自定义字段:在代码中不可避免地会遇到自己定义的字符串,比如运行结果,报错提示等等,针对这种情况需要自己用文件将字段保存下来进行读取,在这里还是用.resx文件进行实现,用xml文件也可以,但是读取效率不高,也有暴露给用户的风险。
    新建一个默认的资源文件CustomResource.resx和一个同名的CustomResource.zh-CN.resx

    在里面自己定义Key和Value,两个文件中对应的Key名称要一样且不能出现'.'符号。
    想要读取自己定义的字段时,可以用以下方式进行读取:

    ComponentResourceManager res = new ComponentResourceManager(typeof(CustomResource));    string str = res.GetString("strError");

str的值会由当前线程所设置的Culture的值而决定,如果为默认值,它会读取CustomResource.resx文件,如果为简体中文就会读取CustomResource.zh-CN.resx中strError所对应的值。

Note:不能将字段存放在控件默认的资源文件里,因为一旦对控件UI进行操作后,它将自动重写自己的资源文件,原本自己定义的字段都将被抹除。

希望对大家解决问题有所帮助,若内容有误请指正,有疑问可留言!

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部