高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源
偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下。
当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource。 这是当时基于自己另一款 IDE 软件抽取的框架而开发的,并不是很复杂。
以下资料根据当时的记录整理,难免错漏,请见谅。

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

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

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

完全构建在 .Net 自有资源处理机制之上,使用 resx 资源文件存储资源,兼轻松容现有程序并保持向后兼容性。
亦支持字符串调用方式直接获取资源

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

方便本地化人员翻译校对,使您的本地化工作如履平地。
详细介绍:
用接口约束多语言资源的实现

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

根据我们的经验,使用传统资源文本获取方式,仅数百条资源字符串就可能带来灾难性的失控,无法维护,无法逐一检查,为项目增加额外的并且高昂的成本支出。
考虑以下问题:
开发人员在获取资源时,拼写错误。
修订资源文件时,对原有资源文件标识进行了修改,而未能同步到程序的各处。
修订资源文件时,误删原有资源条目,或删除误认为已不在使用中但确仍在某处需要的条目。
无法得知某条资源文本的使用情况:是否在使用,是否在多处使用。
增加语言资源时,难以保证各语种资源完全同步,尤其在是资源数量较大,修订次数较多时。
以上问题在项目参与人员越多时,越突出,您需要可靠,可控的方式保证项目的质量。
SE String Resource 正是为解决以上问题而生,也是 SE String Resource 的根本目的。
通过一个管理类(主类)访问语言资源

在主类中,您可以通过 GetLanguages()方法获得所有可用的语言资源、Current 属性获取当前正在使用的资源。获取所有可用资源的方法是通过反射获取可用资源的,因此,主类只需生成一次即可,随后您可在此基础上扩展自己的功能,而不必重新生成主类代码。
对于资源的使用者,只需通过 Language.Current 属性,就可以访问到当前正在使用的语言资源,而不必关心具体的语言资源是哪一种,也不必关心语言资源是否可用,是否存在差异,更元需担心获取资源时会出现单词拼写错误。因为这些都是通过 ILanguage 接口进行的。
此外,GetString() 方法亦允许您通过字符串指定资源名,来获取资源内容,这在实现UI层语言资源绑定时,尤为有用。
资源行复制

在 SE String Resource 中,资源行的复制粘贴操作并非简单的复制一行或多行数据,而是能够识别复制时所携带的区域性信息,如果粘贴目标上的区域信息与复制时的区域信息不同,则自动进行匹配。
例如,A项目包含“中文”、“英文”,B项目包含“英文”、“法文”,那么从A项目向B项目中复制资源行时,能够自动将A项目中的英文资源粘贴到B项目的英文资源中,中文资源则被忽略。哪怕两个项目只是区域信息的顺序不同,亦能自动匹配。
实时错误检查

SE String Resource 能够实时判断资源条目中存在的问题,如名称无效,名称冲突。
在错误列表中,只需双击错误条目,即能定位到错误行,方便您在处理较多的资源行时出现的问题。
借助专门设计的检查算法,即使数千条或更多资源条目,检查速度亦高效快速。
导出、导入 Excel

毫无疑问,导出导入Excel 可使您的本地化工作如履平地。
在非常传统的资源处理技术中,开发人员通常是将 INI格式,XML格式,甚至TXT格式的资源文件直接交于翻译人员进行翻译。使用这种方式,开发人员无法一一核对资源行的名称是否被误改,资源条目是否因操作失败而被误删。
在项目的迭代周期中,资源文件不断被修订,不断的交给翻译人员进行翻译(如版本升级时的新资源文件),在这个过程中,翻译人员还会利用过去的翻译成果,损坏资源条目的几率就成倍的增加。
而使用 Excel 表,除了方便本地化工作人员的工作之外,更重要的是在导入其翻译成果时,SE String Resource 将检查全部资源是否存在错误,同时,因为项目的资源使用是基于接口的,如果误删了资源条目,生成代码后,您的开发环境(如 Visual Studio),在编译代码时,将直接向您报告错误。
运行时截图
主界面
右侧为资源编辑区域,不同的语言是平行显示在一行中的,也可以理解为将不同的 Resx 资源文件,进行了合并显示,而无需编辑完一种资源文件再打开另一种资源文件编辑。

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

指定项目的基本属性

Excel 导出/导入
Excel 导出时,形成的表格是和软件主界面几乎一样的一张表,包括资源 Key,及不同的资源条目,翻译人员直接在 Excel 中新增列,在新增列中输入资源条目即可,而无需在原有基础上修改。
导入 Excel 时,自动分析 Excel 中的列,对应为相应的区域信息,不能解析的列,可以手工指定。
导入完成后,将对导入结果进行自动的有效性检查。

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

生成结果

后记:
当时喜欢混CNSW,不知道园子里有没有CNSWer,受此影响,当年做完这个小工具,感觉到可能有点价值,就做了中英文的网站注册了域名挂到网上,以共享软件的形式进行销售。
虽然惨惨淡淡只卖掉了两份。
但是这两份销售给我带来了许多喜悦,因为自己的工作成果得到了别人的认可;这种认可我想是非常肯定的,实在的。
此外,过去的这些经历也不断的在敲打着我的一些价值观,我反思过许久:软件产品的定位和价值等问题,以及中国这样一个市场,需要的到底是什么。 :)
高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常
建议70:避免在调用栈较低的位置记录异常 并不是所有的异常都要被记录到日志,一类情况是异常发生的场景需要被记录,还有一类就是未被捕获的异常.未被捕获的异常通常被视为一个Bug,所以,对于它的记录,应该 ...
- .Net语言 APP开发平台——Smobiler学习日志:如何调用API进行短信发送
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 二.发送短信代码 VB: Pr ...
- 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法
第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法 第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...
- 学习:100个高质量Java开发者博客
谷歌关键字搜索:100个高质量Java开发者博客. Java开发牛人十大必备网站.
- 我的CSDN原创高质量免积分下载资源列表(持续更新)
最近几个月,我在CSDN平台,发表了大量原创高质量的项目,并给出了相应的源码.文档等相关资源. 为了方便CSDN用户或潜在需求者,下载到自己想要的资源,特分类整理出来,欢迎大家下载. 我的原则:原创高 ...
- Amaze UI 模版中心上线丨十几款高质量优秀模版免费提供!
Amaze UI模版中心终于上线了,目前汇聚了包含企业门户.新闻资讯.管理后台等多个领域的模版,全都可以免费下载. Amaze UI模版中心后续还会增加更多的模版以及领域,请各位持续关注. 模版中心的 ...
- JVM 平台上的各种语言的开发指南
JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...
- R语言绘图高质量输出
R语言通过支持Cairo矢量图形处理的类库,可以创建高质量的矢量图形(PDF,PostScript,SVG) 和 位图(PNG,JPEG, TIFF),同时支持在后台程序中高质量渲染.在ggplot2 ...
- R语言的高质量图形渲染库Cairo(转)
前言 R语言不仅在统计分析,数据挖掘领域,计算能力强大.在数据可视化上,也不逊于昂贵的商业.当然,背后离不开各种开源软件包的支持,Cairo就是这样一个用于矢量图形处理的类库. Cairo可以创建高质 ...
随机推荐
- 【leetcode】Minimum Depth of Binary Tree
题目简述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along th ...
- Linux内核:kthread_create(线程)、SLEEP_MILLI_SEC
转自:http://blog.csdn.net/guowenyan001/article/details/39230181 一.代码 #include <linux/module.h> # ...
- mysql从身份证号中提取生日、性别
SELECT p.ID, p.IDCardNo, IF ( LENGTH(p.IDCardNo) , CAST( , ) AS DATETIME ), CAST( CONCAT( ', , ) ) A ...
- Drools API的使用学习
Drools API的使用学习在 Drools 当中,规则的编译与运行要通过 Drools 提供的各种 API 来实现,这些 API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作 ...
- fullPage.js学习笔记
中秋节,一个人呆着,挺无聊的,还是学习最有趣,不论是什么,开阔视野都是好的. 参考网址:http://www.dowebok.com/77.html 上面有详细介绍及案例展示,很不错哦,可以先去看看 ...
- FFmpeg纯净版解码 av_parser_parse2
主要是通过av_parser_parse2拿到AVPaket数据,跟av_read_frame类似. 输入必须是只包含视频编码数据“裸流”(例如H.264.HEVC码流文件),而不能是包含封装格式的媒 ...
- IIS 图片加载不出来
如何为IIS增加svg和woff格式文件的支持 在我们新版的TopFlow中,使用了最新的bootstrap框架,此框架使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis ...
- iOS 可执行文件瘦身方法
编译选项 1.编译器优化级别 Build Settings->Optimization Level有几个编译优化选项,release版应该选择Fastest, Smalllest,这个选项会开启 ...
- 如何创建独立的UE4服务端
原文作者:@玄冬Wong 转载请注明原文出处:http://aigo.iteye.com/blog/2268777 这是论坛上对UE服务端功能的回答,意思是UE4提供了主流MMO网游服务端所具备的特性 ...
- python基本图像操作与处理
# -*- coding: utf-8 -*- from PIL import Image from pylab import * #添加中文支持 from matplotlib.font_manag ...