关于软件地域化(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就可以了,很省事。一个真正优秀的软件就应该做长
远打算。

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux命令中的常用符号解释(zz)

一、通配符:" * ” 、" ? ”   和DOS下一样,当我们不知道确切的文件名时,可以用通配符来进行模糊操作。“*”可以代表任意长度的任意字符,“?”代表一个任意字符。 二、转义字符:" \ ...
  • xiaocainiaoshangxiao
  • xiaocainiaoshangxiao
  • 2013年12月07日 17:30
  • 1141

iOS Localization(国际化)详细教程

由于项目中需要支持国际化功能,在网上找了yi'x
  • xiaowenwen1010
  • xiaowenwen1010
  • 2014年09月10日 15:35
  • 729

NGUI官网示例10 – Localization(本土化)讲解-中英文转换,包括NGUI 常用中文字3698

随着游戏国际化的发展,很多游戏都会在多个国家发行,那么其中有一个很重要的工作就是游戏的本土化,包括里面的文字,画面,情节等等都要符合该国的语言和文化以及法律等等。那么在NGUI中,我们的本土化最主要的...
  • lihui061119
  • lihui061119
  • 2014年09月29日 23:35
  • 1367

利用 SageMathCloud 编写中文 LaTeX 文档

利用 SageMathCloud 编写中文 LaTeX 文档
  • u012748858
  • u012748858
  • 2015年05月24日 19:36
  • 1116

[从头学python] 第05节 字符串模块string

本节目标: (1) 学习标准库ctypes, functools, gettext, io, keyword, itertools, logging, mmap, re, string模块 ...
  • mwsister
  • mwsister
  • 2015年12月14日 15:53
  • 642

[编程题]地域划分

现在有一块长条形的土地,这个土地我们可以看成是由n块小方格连接而成的(这些小方格我们可以将之编号为1到n)。而我们需要将其划分成两个部分,分别种上不同的作物(即作物A和B),划分必须在某两个小方格之间...
  • artemisrj
  • artemisrj
  • 2016年04月25日 20:26
  • 182

文献阅读(9)

LIFS: Low Human-Effort, Device-Free Localization with Fine-Grained Subcarrier Information(MobiCom 20...
  • dfcaihg
  • dfcaihg
  • 2016年10月31日 17:46
  • 668

zz 撰写SCI论文应注意的一些问题

论文写作上,许多牛人都给出了各自的经验,我虽然发表过许多论文,但是真正自己写的并不多,所以也无所谓有价值的经验,尤其是英文的基础十分不够,看看论文找点毛病的尚可应付,真的让我写篇论文,感觉仍然是非常痛...
  • vbskj
  • vbskj
  • 2015年03月12日 08:49
  • 475

HTML5语义化的一些问题

1.什么是HTML5语义化: 根据内容的结构化,选择合适的标签,便于让开发者读者写出更优雅的代码的同时让机器以及浏览器更好的解析。 2.语义化好处: 1)在没有css情况下,也能呈现出好的内容结...
  • qq_27626645
  • qq_27626645
  • 2018年01月02日 17:15
  • 14

UE4:Localization(本地化:中文)

C++中不要使用包含中文字符串,否则打包的时候编译错误();虚幻中提供了使用中文的工具:本地化。 1. 启用本地化功能 这样,在菜单“窗口”项就会出现“本地化面板” 2. 使用本地化   ...
  • lzt20007
  • lzt20007
  • 2016年05月03日 23:59
  • 4319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于软件地域化(Localization)中的一些问题(zz)
举报原因:
原因补充:

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