[免费了] SailingEase .NET Resources Tool (.NET 多语言资源编辑器)

 

SailingEase WinForm Framework WinForm开发框架开发手册:http://docs.shengxunwei.com/Home/Browser/sewinformfw/html

 

 

这是我2010年左右,写 Winform IDE (http://www.cnblogs.com/sheng_chao/p/4387249.html)项目时延伸出的一个小项目。框架

最初是以共享软件的形式存在的。工具

   

后来忙于其它事情,没有精力再去打理,就被雪藏至今,最近抽了几天时间,把软件里的注册验证相关逻辑都去掉了,以彻底免费的形式发布,但愿对你们有用。 学习

 

痛点:

一般咱们为了让软件支持多语言,会使用 .NET 自带的资源文件来存储不一样的语言资源,在程序中加载和调用,可是对于大型工程或者团队开发,包括不断演进的版本,会让多语言开发十分的麻烦,存在许多不可控的因素,好比如下几点:网站

1)过去的资源调用方式主要是以字符串做为key来获取,而开发人员在获取资源时,可能出现拼写错误; 
2)修订资源文件时,对原有资源文件标识进行了修改,而未能同步到程序的各处; 
3)修订资源文件时,误删原有资源条目,或删除误认为已不在使用中但确仍在某处须要的条目。
4)没法得知某条资源文本的使用状况:是否在使用,是否在多处使用。
5)增长语言资源时,难以保证各语种资源彻底同步,尤为在是资源数量较大,修订次数较多时;spa

若是使用字符串做为key的方式来调用资源,以上问题都没法在项目编译时做静态检查,也就是说出了错误很难发现。翻译

 

此外还有两个问题,让开发过程当中处理资源文件十分的麻烦:3d

1)在 VisualStudio 中直接编辑资源文件,只能一个文件一个文件的单独编辑,好比中文和英文两个资源文件,我须要打开两个独立的窗口分别编辑,要来回切换,而且最最重要的是,VisualStudio 不会去检查你的两个资源文件中的条目,是否是一一对应的,它们以前没有什么联系和映射之类的关系,其中一个资源文件中多了一条或少了一条,或是KEY不小写拼写错了,都是不知道的;orm

2)没有好的与翻译人员协调的方法,如资源的导入、导出、自动检查;没有好的办法把语言资源交给翻译人员,并导回来,并且在导回来时,几千条甚至更多的资源条目,有没有疏漏,误删除,没有办法知道。htm

 

分析与构想:

咱们分析 .NET 自带的资源机制,其在将资源存储在资源文件中后,会生成一个对应的 Designer.cs 文件,若是有多个语言版本的资源文件,就生成多个对应 的 Designer.cs,但就是没有将他们抽象起来。

当时我想,若是可以用接口(Interface)把不一样的资源文件的实体类,约束起来,在程序中使用时,放弃 Language.Get("key") 这种方式,而是转而使用接口来调用,就能够解决上面1到5点的问题,造成以下结构:

那么在代码中,就彻底解决了上文中1~5的问题。

 

对比,引用一个不存在的资源条目:

好了,核心需求就解决了。

 

那么对于用户界面的部分,怎么样加载资源呢?其实至关简单,并不须要开发人员一个一个去设置,在WinForm中,只须要写一个公共类,检索UI上符合指定格式的字符,将其替换为当前资源便可,如:

 

若是是 WPF 项目,直接使用静态资源绑定便可,比 WinForm 更加简单。

  

还剩两个可用性的问题:

 

第1个,怎样又好又快的同时编辑多个版本的语言资源?

对于 Visual Studio ,多个不一样的资源文件是分别编辑的,问题上文已经说明:我须要要来回切换分别编辑,而且最最重要的是,VisualStudio 不会去检查你的两个资源文件中的条目,是否是一一对应的。

 

 

因此我在写 SailingEase .NET Resources Tool 时,把不一样的资源文件编辑集中到了一块儿,在一个画面中同时编辑多个不一样的资源文件,当我添加一个新的资源文件条目时,只要操做一次便可,不用打开每一个资源文件添加一遍(真的很麻烦):

 

 

第2个问题:怎样与翻译人员协做

上文提到了,想到的最好的方式是导入导出 Excel,而且在导回来时,能效验一下,这个并不复杂:

我在软件中添加一个区域,好比“德语”,软件会自动生成一个德语的资源列表,这一列的内容如今是空白的,我能够把当前的资源,连同原语言版本(如中文),导出Excel,交给翻译:

 

 导出的 Excel 中,包括中原语言(如中文),还包括了 Comments,这样翻译人员在翻译时,有参照有备注,就很方便,翻译完毕后,再回到软件中导入便可。

 

 

 

提升效率的辅助功能:

资源行复制:

例如,A项目包含“中文”、“英文”,B项目包含“英文”、“法文”,那么从A项目向B项目中复制资源行时,可以自动将A项目中的英文资源粘贴到B项目的英文资源中,中文资源则被忽略。哪怕两个项目只是区域信息的顺序不一样,亦能自动匹配。

 

实时错误检查:

有问题的资源会实时标注出来,在生成的时候会给出提示:

 

Visual Studio 里若是复制资源行的Key是重复的,会不断的弹框强制你先改掉,否则光标就移不走,但实际上作多语言编辑的时候,我有时须要一连复制不少行,而后再修改它们的Key,这就很讨厌了,因此我本身写这个工具的时候,就容许在有错误的时候光标移走,也不强制必须先改掉,而是给出标注,只是在生成代码的时候,阻止生成。

Visual Studio 中的错误提示:

 

同时编辑多个项目

在实际工程中,我是一个 Module 对应一个资源工程,因此同时编辑多个工程就是必须的,不然就很麻烦:

 

导入既有的资源文件(resx文件或resources文件):

 

欢迎画面,能够直接打开最新的项目:

 

对了,新建工程以后不要忘记添加区域:

 

 

 

最后,在软件中编辑好资源后,须要生成代码,能够生成C#或VB.NET的代码,也能够仅仅生成资源文件:

 

 

将生成的资源文件和代码引入工程中使用:

 

 

下载:

我没找到博文添加附件的地方,须要的朋友可移步到个人网站上免费下载:

http://www.shengxunwei.com

 

 

欢迎加我QQ交流探讨,共同窗习:279060597,另外我在南京,有南京的朋友吗?

相关文章
相关标签/搜索