关于软件地域化(Localization)中的一些问题(zz)

原创 2004年07月27日 23:12:00

//zz from http://xiaogi.nease.net/article/translate.htm

随着中国经济势力的不断增强,对外开放的逐渐加深,
中国软件业正面临着前所未有的挑战和机遇,要想在这
次挑战中把握机遇,中国的软件必须走出国门,接受世
界的检验,同时国际软件必须引进国门,以刺激并激励
我国软件业的发展。在这个过程当中,软件地域化是个
颇为关键的环节,因此也越来越引起人们的注意。

笔者曾经用很长一段时间参与将NEC的一个商用软件JMSS
翻译成英文,做过软件地域化方面的工作,因此很想就
这个问题与大家共同商榷。

不过软件地域化范围大了一点,它的含义比仅仅翻译菜单
和对话框的文本或字符串要多得多,它还包括使软件的位
图,图标,甚至加速键符合当地的风俗习惯。这远远超出
了我的能力范围,因此今天我只想谈点简单的东西--如何
翻译VC++软件中的资源文件。

在VC编程中最先碰到的语言问题是当我们选择新建一个MFC
AppWizard程序时,VC将询问我们选择何种的语系。如果
我们需要生成支持双字节的软件的话,必须使用支持远东
语系的DLL。这些DLL在缺省安装时并没有安装,需要你自
己手动安装。这些文件在VisualC++光盘的/Bin/IDE目录
中,具体如下所述:

日语 appwzjpn.dll
简体中文 appwzchs.dll
台湾中文 appwzcht.dll

如果你想在你的软件中支持中文,你必须把上面的
appwzchs.dll复制到你安装Vusial C++的目录下的/Bin/IDE
目录下,然后选择中文的AppWizard。否则,即使在中文环
境下,你的软件也不能支持中文。

那么,选择中文的AppWizard会有哪些变化呢?有兴趣的朋友
可以在文本状态下打开资源文件(*.rc),你会发现其中有这么
两段代码:

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE 4, 2
#pragma code_page(936)
#endif //_WIN32

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE 4, 2
#pragma code_page(936)
#endif //_WIN32
#include "res//New.rc2" // non-Microsoft Visual C++ edited resources
#include "l.chs//afxres.rc" // Standard components
#include "l.chs//afxprint.rc" // printing/print preview resources
#endif

其中AFX_TARG_CHS与936定义了资源文件的简体中文属性。
英文属性中为AFX_TARG_ENU与1252,
日文属性中为AFX_TARG_JPN与932,
繁体中文属性中为AFX_TARG_CHT与950。
翻译时必须改成相应的语言属性。

注意下面两句也应改动:
#include "l.chs//afxres.rc" // Standard components
#include "l.chs//afxprint.rc" // printing/print preview resources
英文为:
#include "afxres.rc" // Standard components
#include "afxprint.rc" // printing/print preview resources
日文为:
#include "l.jpn//afxres.rc" // Standard components
#include "l.jpn//afxprint.rc" // printing/print preview resources
繁体中文为:
#include "l.cht//afxres.rc" // Standard components
#include "l.cht//afxprint.rc" // printing/print preview resources

有些朋友从网上下载了一些原代码,但发现即使将菜单,字符串等
翻译成中文也不能正确显示,就是由于没有改这些语言属性。另外,
直接在文本状态下改资源文件比类似一个对话框接一个对话框的改
Chinese(P.R.C.)要省事许多。

BTW,要把中文Help文件变成英文也可以在文本状态下打开*.hpj文
件,然后将Chinese (P.R.C.)改成English (U.S.)。

改完语言属性之后,再去改菜单及字符串就不会有问题了(当然
还要小心诸如双字节的%或╲等字符的正确翻译)。

上面讲的是在能得到资源文件原代码的前提下讲翻译工作,
那么要是没有原代码怎么办呢?其实没有原代码翻译软件在
Windows下并不是一件不可能的事。当然,这要归功与Windows
设计人员高超的思想。

大家知道,VC++编译程序时将资源文件单独编译成*.res文件,
然后再与其他的目标文件连接成可执行文件。这就使我们可以
通过某种工具将可执行文件中的资源单独提取出来。例如,
VC++中的资源编译器,就可完成这个工作,不过必须是在
Windows NT下,在Window 9x中只能编辑,不能保存。

有兴趣的朋友可以利用VC++打开一个exe文件,但注意在Open
对话框中的Open As组合框中选Resources,而不要选Auto,
这样打开之后,你会发现出现的即为该可执行文件的所有资源,
包括菜单,对话框,及字符串等。不过这时翻译时的语言属性问
题不能在文本状态下改了,只能一个一个地改。你可以在相应的
资源ID上单击右键,然后在跳出的上下文菜单中选属性,接着在
属性页中修改Language。

有朋友可能会注意到,如果一个应用程序将它的所有字符串都放
在String Table中的话,通过这种方法就可以将该软件彻底翻译
成另一种语言了,于是便会情不自禁地感叹:怪不得weizhenjiang
经常教导我们要将所有的字符串放入String Table,原来如此。:-)

从上面所述看来,一个软件要利于地域化的话,最好将所有的资源
均放入*.rc,但我觉得,其实最好的方法是将资源单独作成一个dll
文件(如resource.dll),然后在程序运行时通过如下方法载入资源:
m_hRC = AfxLoadLibrary(_T("resource.dll"));
/*remember to free resource library at exiting,
such as:
if(m_hRC)
AfxFreeLibrary(m_hRC);*/
if(m_hRC)
AfxSetResourceHandle(m_hRC);
这样你就可以象利用可执行体自身的资源一样地利用所有resource.dll
中包含的资源了。

这种方法的好处是显而易见的,以后将该软件地域化时,只需改动
resource.dll就可以了,很省事。一个真正优秀的软件就应该做长
远打算。

以上只是我对软件地域化或者说软件翻译当中的一些问题的一些
粗陋看法,肯定有欠妥之处,我很希望朋友们指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyingxu/article/details/53866

实战COM(03)----创建一个进程外组件

 本文欢迎转载,唯请注明出处及作者 blackcolor@263.net---------------------------------------------------             ...
  • blackcolor
  • blackcolor
  • 2001-07-24 15:14:00
  • 1460

vc 国际化的资源文件处理

MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本。在不同语种的Windows平台上应该运行相应语种的应用程序。也就是说程序的用户界面(...
  • zhangxinrun
  • zhangxinrun
  • 2010-08-08 18:05:00
  • 2655

修改NGUI中UILabel的显示内容并转为utf-8格式

需要将另一客户端发过来的XML解析,并将解析的内容显示到label中。有些字符会出现乱码的情况,将字符串转为utf-8格式即可。 解析XML请参考:点击打开链接 设置label的text内容如下: p...
  • qq_26270779
  • qq_26270779
  • 2016-09-20 14:39:54
  • 884

一个外国网站严肃地统计后发现,中国程序员整体实力世界第一

这是一个正经的排名,译自著名的美国程序员社区 HackerRank 网站。这个社区已经拥有150万来自世界各国的程序员用户,并且还在持续增长。 正文 哪个国家拥有全世界最牛逼的程序员? ...
  • qq_36290329
  • qq_36290329
  • 2016-10-04 13:09:43
  • 1354

“程序员文化”之正名

“程序员文化”之正名 (本文首发于《中华读书报》8月6日号)熊节  我总是很愿意把“程序员”和“文化”这两个词组合在一起使用。不独是我,我相信每个程序员都希望有一种属于自己的文化。上至帝王将相,下至贩...
  • gigix
  • gigix
  • 2003-08-08 08:42:00
  • 3890

十四种Java开发工具点评

图形界面的java开发工具 JDK Borland 的JBuilder ,JDeveloper,VisualAge for Java jcreater. 常见的十五种Java开发工具的特点 1、JDK...
  • love_yun
  • love_yun
  • 2005-12-25 19:12:00
  • 2969

为什么身为程序员月入三万的他,却要放弃?

有位叫马元的朋友在订阅号“程序视界”的后台给我留了很长的一段话,描述了自己身为一个苦逼开发者,经常996及日常工作中遇到的各种困境,还描述了他想自己接项目却遭遇各种麻烦的经历,看了让人感慨。我和他沟通...
  • qq_39328101
  • qq_39328101
  • 2017-07-03 17:19:38
  • 2782

MBTI职业性格在软件研发组织中不同岗位的分布研究

著作权声明 本文为 walzer.cn 原创,是作者在厦门大学管理学院进修的《人力资源管理》课程论文。转载请注明出处,论文抄袭后果自负。 文中所用的MBTI量表,版权归“才储”(http:...
  • database_zbye
  • database_zbye
  • 2014-09-12 17:06:25
  • 2521

本周杭州程序员工资大调查,高于深圳和广州

今天晚上11点,爬了某招聘网站,获取近7日内杭州的程序员工资2344条。其中,有工资的2275条。本文分别统计了工资的分布,工资和学历,工作经验和公司的性质,规模,产业的关系。这里的程序员包括普通程序...
  • juwikuang
  • juwikuang
  • 2017-06-06 23:16:44
  • 4859

Linux内存描述之高端内存--Linux内存管理(五)

日期 内核版本 架构 作者 GitHub CSDN 2016-08-31 Linux-4.7 X86 & arm gatieme LinuxDeviceDrive...
  • gatieme
  • gatieme
  • 2016-08-31 14:33:52
  • 3353
收藏助手
不良信息举报
您举报文章:关于软件地域化(Localization)中的一些问题(zz)
举报原因:
原因补充:

(最多只允许输入30个字)