和同事争执了一个很细节的设计问题

    下午的时候,和同事讨论了产品安装包中国际化的一些问题。本来对于一个通过简单的Loader窗口来拾取安装主界面语言的经典国际化安装界面模式,是没有什么问题和不妥,可是对于这个Loader窗口本身的国际化配置文件,我却和他在一个很细节的设计上有了一些不同的意见。

    这个Loader窗口其实只有4个控件,一个Label、一个ComboList和两个Button。需要国际化的地方也就4处,窗口标题、Label内容和两个Button,如下图:
    SelectLanguage.png

    本来要是从我的看法来说,这种窗口根本不做国际化都完全说得过去的,但是既然PM的spce规定要国际化,那就做呗。于是这里要说的细节问题,就是关于这4个国际化资源的存储格式的。同事的设计是使用*.ini文件来存放Loader窗口的国际化资源,其存储格式大概为:
 [Settings]
 // some settings for setup

 [Languages]
 Default=1033
 LangCount=2
 Key0=1033
 Key1=2052

 [1033]
 Language=English
 Title=Select Setup Language
 Description=Select the languge to use during the installation:
 Ok=Ok
 Cancel=Cancel

 [2052]
 Language=中文(简体)
 Title=选择安装语言
 Description=请选择在安装过程中使用的语言:
 Ok=确定
 Cancel=取消

    使用*.ini文件,我觉得到没有什么,反正有现成的API可以读取。只是对于[Languages]节点的设置,我感觉有待商榷。[Languages]节点功能其实一目了然,也就是设定默认语言、语言种类计数和语言描述。而我觉得这个ini文件中Languages Section是多余的,完全没有必要,这里面除了Default这个key/value对外,其它的描述可以说是一种冗余的信息,只要有了下面各种具体语言的Section,这个Count以及Key的信息也就自动有了,而在Languages Section中放置Count和KeyN,反而会带来修改ini文件时需要手动同步信息的负担,使得该ini文件没有做到真正的文档格式自描述。

    取消掉Languages Section中的Count和KeyN后,我们要获得ini文件中语言编号的列表,可以直接通过调用Win32 API函数GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, byte[] byBuffer, int size, string lpFilePath),使lpAppName为NULL就行了。

    可是同事却坚持认为,[Languages]节点中的Count和KeyN是有必要的,而且就是在修改ini文件时,即使国际化的语言有10多种,靠改文件时自己数清楚Count也是不难的事。我也并不是觉得数数语言的个数是mission impossible,但使我有些郁闷的是虽然我确实觉得那个设计不是很好,可也没有很有力的观点来支持我自己的意见。当然这个问题本身不是什么原则性的问题,而且按我们Product Team的规定,非原则性问题的最终决定权归具体实现者:)

posted on 2006-02-18 00:21  birdshome  阅读(2532)  评论(12编辑  收藏  举报

导航