RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
在WinForm应用程序中快速实现多语言的处理的方法-创新互联

在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化。在Winform应用程序中实现多语言也有常规的处理方式处理,不过需要针对每个语言版本,重新修改Winform界面的显示,对一些常规的辅助类,也需要引入一个统一的资源管理类来处理多语言的问题,相对比较繁琐。本篇随笔针对多语言的需求,希望尽量避免繁琐的操作,既能符合本地语种开发人员的开发习惯,又能快速实现Winform程序的多语言场景处理。

业务包括:企业网站建设、成都做手机网站成都做商城网站、网站营销推广等服务,并且涵盖域名申请、网络空间、云服务器、等互联网基础服务;成都创新互联公司联建站以互联网的创新理念,成熟完善的建站体系,开拓进取的精神,专业的解决方案和顾问咨询服务,帮助客户在互联网时代提升形象、把握商机、实现价值,提高企业的核心竞争力。

1、多语言开发的困惑和思路

在常规的多语言版本程序中,开发总是伴随着很多不愉快的事情,大概列举一些仅供参考:

1)对窗体的多语言处理时,维护多个语言版本的界面非常繁琐;

2)多语言处理的时候,以资源参照的时候,默认键值为一些英文字符串或者单词,不太符合如中文语境的开发,调整代码则需要很多工作量;

3)对于已开发好的程序,全面引入多语言的处理代码,需要大量修改;

4)对于大量中文的多语言处理,工作量望而却步;

5)对于常规Resx文件的处理觉得繁琐

6)缺乏一个统一处理多语言需求的方案

在多语言的处理上,我一直希望找出一种高效的处理方式,由于我的Winform开发框架中很多模块是现成的,希望能够使用继承处理的方式,实现最简化的处理;

同时大量中文的英文(针对英文版本)翻译也是一个头痛的事情,突然想到百度的翻译API接口可以利用,那么我们可以利用翻译接口实现开始的翻译,然后对资源进行一定的调整则可以提高效率和准确率。

对于编辑和承载多语言的信息,我一直觉得JSON格式挺好的,可以利用它序列化为字典集合,通过字典获取对应键值的多语言版本字符串也是很高效的一种方式,那么就决定用JSON来存储多语言信息了,易读好用。

对于多余的处理逻辑,尽量封装为独立的模块,可以在多个模块中进行调用处理。

2、多语言的处理实现

在思考多语言的合理处理方案过程中,参考了另一位博友的文章《分享两种实现Winform程序的多语言支持的解决方案》,思路有点符合我的期望,因此吸收了一些处理思想进行处理,目的就是提高开发效率。

1)多语言的信息存储和加载

首先,我们来看看多语言处理的目录和格式问题,目录大概是根据多语言的简称进行放置,如下所示。

在WinForm应用程序中快速实现多语言的处理的方法

这个目录就是会输出到debug或者Release的运行目录中,我们就是根据相对于运行目录进行资源读取即可,所有模块共用同一的多语言文件,我们可以把各个模块基础通用的多语言文件放在Basic.json文件中,也可以根据模块独立起名,主程序如TestMultiLanguage的多语言文件我则放在TestMultiLanguage.json文件中。实际上目录名称是为了区分而已,程序加载的时候,会把目录下面所有的JSON文件进行加载,读取里面的键值作为资源的字典参照。

多语言的JSON文件是标准的Json格式,只是我们只用键值的字典参考即可,不需要使用复杂的JSON对象格式,如下是basic.json文件的部分内容。

在WinForm应用程序中快速实现多语言的处理的方法

这些资源文件采用中文-英文的参照方式,我们以我们常规的母语开发,即使我们不做多语言,也不影响代码的正常处理,我们只需要把窗体上和代码里面的中文提取出来,然后进行多语言处理(如变为英文)即可。

由于我们使用键值字典对象的JSON内容,那么我们就可以把这些内容序列号为字典集合,如下代码我们可以通过 JSON.NET 组件把它们序列化为字典集合,这些字典集合就是我们用来做多语言的关键。

var content = File.ReadAllText(file, Encoding.UTF8);
      if (!string.IsNullOrEmpty(content))
      {
        var dict = JsonConvert.DeserializeObject>(content);
        foreach (string key in dict.Keys)
        {
          //遍历集合如果语言资源键值不存在,则创建,否则更新
          if (!resources.ContainsKey(key))
          {
            resources.Add(key, dict[key]);
          }
          else
          {
            resources[key] = dict[key];
          }
        }
      }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:在WinForm应用程序中快速实现多语言的处理的方法-创新互联
当前路径:http://cqwzjz.cn/article/dgpepi.html