高质量,高效率的多国语言软件开发(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可以创建高质 ...
随机推荐
- 11g新特性-使用DNFS
NFS相信应该都很熟悉了,但是我们对它的性能一直有所诟病.Oracle在10g版本通过允许对数据库文件直接IO引入ASM.在11g版本中,Oracle对NFS提供了类似的增强,为了改进NFS的性能,开 ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...
- 高性能的JavaScript--加载和执行
写在前面 JavaScript在浏览器中的性能,可认为是开发者所要面对的最重要的可用性的问题,此问题因JavaScript的阻塞特征而复杂,也就是说JavaScript运行时其他的事情不能被浏览器处理 ...
- Web Mercator 公开的小秘密
网上已经有好多作者都不吝笔墨,写了好多有关 Web Mercator这个坐标系的前世今生.多搜罗多摄入,我们会得到很多有用的信息.今天讨论到 3758,3857,102100,900913-- 这些I ...
- [RESTful]HTTP状态码
HTTP状态码是一个依附于HTTP响应的3位数字,它是协议语义的一部分,能在最基本的层面上让客户端知道服务器在尝试处理请求的时候发生了什么事情.HTTP规范总共定义了41一个响应码,本文将对所有的状态 ...
- iOS笔记———数据存储
应用沙盒:应用文件系统的根目录,每个应用都有独自的沙盒相互:在xcode中可以用NSHomeDirectory()函数,打印当前应用的沙盒根路径. 应用程序包:包含了所有资源文件和执行文件; * Do ...
- 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言
1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...
- Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )
*****注意到mvc 在android 中是如何进行分层分域执行各自的功能.**** 官方推荐的按钮尺寸是48像素 前端之Android入门(1):环境配置 前端之Android入门(2):程序目录 ...
- C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)的代码以及我所遇到的问题
[引言] 利用asp.net搭建微信公众平台的案例并不多,微信官方给的案例是用PHP的,网上能找到的代码很多也是存在着这样那样的问题或者缺少部分方法,无法使用,下面是我依照官方文档写的基于.net 搭 ...
- 创建WP8试用应用
参考资料: 创建 Windows Phone 的试用应用 如何在 Windows Phone 应用中实现试用体验 Windows Phone 7 开发 31 日谈——第23日:提供试用版应用程序 对资 ...