高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

时间:2021-11-03 20:24:46

偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下。

当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource。 这是当时基于自己另一款 IDE 软件抽取的框架而开发的,并不是很复杂。

以下资料根据当时的记录整理,难免错漏,请见谅。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

SE String Resource 是一款辅助多国语言软件开发的实用工具,根本目的在于通过生成接口来约束不同语言资源的实现,使开发人员可以基于接口调用资源,多语言开发时不但对语言资源的可控性好,并且省时省力。
除此之外,提供方便开发人员使用的各种实用功能,如多项目并行编辑,资源导入,Excel 导入、导等。

用接口约束多语言资源的实现

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

通过生成接口(Interface)来约束各语言的资源实现。
开发人员在代码中通过自动生成的语言资源管理类和资源接口获取资源。

通过自动生成的主类访问语言资源

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

可通过自动生成的主类获得当前所有可用的资源文件及当前在使用的资源,因为基于接口的方式,资源使用者无需关心当前使用的具体资源。

基于 .Net 自有资源处理机制

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

完全构建在 .Net 自有资源处理机制之上,使用 resx 资源文件存储资源,兼轻松容现有程序并保持向后兼容性。

亦支持字符串调用方式直接获取资源

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

支持传统的通过字符串方式定位获取资源的方式,可通过此方式实现UI层的资源自动绑定等扩展应用。

导出、导入Excel

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

方便本地化人员翻译校对,使您的本地化工作如履平地。

详细介绍:

用接口约束多语言资源的实现

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

在使用传统的 GetString 方式或其它等效方式时,对资源文本的访问存在不可控的风险,尤其是在较大型的软件工程或团队协作开发中,无法保证所有的资源文本获取都正确、可用。如拼写错误,多次修订资源文件后带来的混乱。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

根据我们的经验,使用传统资源文本获取方式,仅数百条资源字符串就可能带来灾难性的失控,无法维护,无法逐一检查,为项目增加额外的并且高昂的成本支出。
考虑以下问题:

开发人员在获取资源时,拼写错误。
修订资源文件时,对原有资源文件标识进行了修改,而未能同步到程序的各处。
修订资源文件时,误删原有资源条目,或删除误认为已不在使用中但确仍在某处需要的条目。
无法得知某条资源文本的使用情况:是否在使用,是否在多处使用。
增加语言资源时,难以保证各语种资源完全同步,尤其在是资源数量较大,修订次数较多时。

问题在项目参与人员越多时,越突出,您需要可靠,可控的方式保证项目的质量。

SE String Resource 正是为解决以上问题而生,也是 SE String Resource 的根本目的。

通过一个管理类(主类)访问语言资源

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

在主类中,您可以通过 GetLanguages()方法获得所有可用的语言资源、Current 属性获取当前正在使用的资源。获取所有可用资源的方法是通过反射获取可用资源的,因此,主类只需生成一次即可,随后您可在此基础上扩展自己的功能,而不必重新生成主类代码。

对于资源的使用者,只需通过 Language.Current 属性,就可以访问到当前正在使用的语言资源,而不必关心具体的语言资源是哪一种,也不必关心语言资源是否可用,是否存在差异,更元需担心获取资源时会出现单词拼写错误。因为这些都是通过 ILanguage 接口进行的。
此外,GetString() 方法亦允许您通过字符串指定资源名,来获取资源内容,这在实现UI层语言资源绑定时,尤为有用。

资源行复制

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

在 SE String Resource 中,资源行的复制粘贴操作并非简单的复制一行或多行数据,而是能够识别复制时所携带的区域性信息,如果粘贴目标上的区域信息与复制时的区域信息不同,则自动进行匹配。

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

实时错误检查

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

SE String Resource 能够实时判断资源条目中存在的问题,如名称无效,名称冲突。

在错误列表中,只需双击错误条目,即能定位到错误行,方便您在处理较多的资源行时出现的问题。

借助专门设计的检查算法,即使数千条或更多资源条目,检查速度亦高效快速。

导出、导入 Excel

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

毫无疑问,导出导入Excel 可使您的本地化工作如履平地。

在非常传统的资源处理技术中,开发人员通常是将 INI格式,XML格式,甚至TXT格式的资源文件直接交于翻译人员进行翻译。使用这种方式,开发人员无法一一核对资源行的名称是否被误改,资源条目是否因操作失败而被误删。

在项目的迭代周期中,资源文件不断被修订,不断的交给翻译人员进行翻译(如版本升级时的新资源文件),在这个过程中,翻译人员还会利用过去的翻译成果,损坏资源条目的几率就成倍的增加。

而使用 Excel 表,除了方便本地化工作人员的工作之外,更重要的是在导入其翻译成果时,SE String Resource 将检查全部资源是否存在错误,同时,因为项目的资源使用是基于接口的,如果误删了资源条目,生成代码后,您的开发环境(如 Visual Studio),在编译代码时,将直接向您报告错误。

运行时截图

主界面

右侧为资源编辑区域,不同的语言是平行显示在一行中的,也可以理解为将不同的 Resx 资源文件,进行了合并显示,而无需编辑完一种资源文件再打开另一种资源文件编辑。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

查找与替换

实现了一个和 Visual Studio 几乎一样的查找与替换功能,方便资源文件的编辑工作。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

指定项目的基本属性

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

Excel 导出/导入

Excel 导出时,形成的表格是和软件主界面几乎一样的一张表,包括资源 Key,及不同的资源条目,翻译人员直接在 Excel 中新增列,在新增列中输入资源条目即可,而无需在原有基础上修改。

导入 Excel 时,自动分析 Excel 中的列,对应为相应的区域信息,不能解析的列,可以手工指定。

导入完成后,将对导入结果进行自动的有效性检查。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

生成代码

支持 C# 及 VB.NET ,在开发过程中可随时生成相关代码。

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

生成结果

高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

后记:

当时喜欢混CNSW,不知道园子里有没有CNSWer,受此影响,当年做完这个小工具,感觉到可能有点价值,就做了中英文的网站注册了域名挂到网上,以共享软件的形式进行销售。

虽然惨惨淡淡只卖掉了两份。

但是这两份销售给我带来了许多喜悦,因为自己的工作成果得到了别人的认可;这种认可我想是非常肯定的,实在的。

此外,过去的这些经历也不断的在敲打着我的一些价值观,我反思过许久:软件产品的定位和价值等问题,以及中国这样一个市场,需要的到底是什么。  :)