XiaoHui
管理员
  
UID 2
精华
1
积分 4860
帖子 4850
阅读权限 200
注册 2001-1-23 来自 猎户星座
状态 离线
|
讨论一下VC++中实现多国语言的切换有什么方法
[这个贴子最后由XiaoHui在_2004/04/14_12:35pm_编辑]
实现多语言有很多种办法, 例如楼上讲的将资源装入_DLL.你研究_MS_就会发现他也是这么做的.
还有另外一种方法, 就是采用文本语言包.现在很多软件都是采用这种方式.
由于在不同的语言环境下, 字体环境是不一样的, 也许你在简体中文环境下对话框看起来顺顺当当的,但切换到e文环境下,你会发现惨不忍睹.根据_MSDN的忠告, 对话框等资源的字体采用_MS_SCAN_SERIF, 9pt比较好.
DLL资源的实现方式楼上的谈过了.我说说文本语言包的实现.
1.一个语言就是一个文本文件.其中最原始的是英语文本文件, 可以用这样的格式:
Englisht.txt
[lang]
Infomation_=_English
&File=
&Edit=
....
而中文语言包文件可以这样写;
Chinese.txt
[lang]
Infomation_=_Chinese
&File=文件(&F)
&Edit=编辑(&E)
...
对于要翻译的文件, 左边是原始文字,右边是翻译后的文字.
2.程序启动时, 根据用户的选择定位到具体的语言包文件.
以后每次需要显示文本时, 就从这个文件中读, 用读取_ini_文件的那个函数:
GetPrivateProfileString获取字串.
当然每次都这么调用, 比较麻烦, 你可以写一个类,将_SetWindowText, MessageBox等_重载一下. 这个类还可以做很多其他事情, 例如根据用户当前的语言设定特定的语言包, 例如可以随时更换语言而不必重启程序等等.当然你也可以不用类.
3.要翻译的时候, 将这个文本文件直接发给翻译者就行了.
4.我只是说了一个大致的机制, 可能让人有点迷糊.你可以参考_netants_的国际版, 看看他的_language_目录下的文件内容, 仔细琢磨一下, 你就明白是怎么回事了.
这种实现文式的缺点:
1.前期你要写一个简单但实用的类或API来封装一下.
2.对于所有的文本, 采用的都是动态翻译,因此每个对话框都要调用_SetWindowText_重设文本, 增加程序开销.
这种实现方式的优点:
1.分发语言包比较方便
2.翻译者翻译比较方便, 给他一个文本文件就行了.
3.做多国语言包不必重新编译程序.
4.一劳永逸.
P.S.不要一个问题多次重复发贴.
|
|