2024年5月6日发(作者:)
VC++中实现多国语言的切换有什么方法
方法1:
如果要切换,可以把资源都放到dll里,做一个简体的,比如,繁体的,
切换的时候用AfxSetResourceHandle选择不同的资源dll即可。实现多语言有很多种办法,
例如楼上讲的将资源装入_DLL.你研究_MS_就会发现他也是这么做的.
如何实现多语言版本程序
实现多语言版本程序的一般方法是把要显示的文本以资源形式存在单独的动态链接库
(DLL)中。在这些动态链接库里,相同的文本其资源ID也相同。这样,在运行时只要加
载相应的 DLL 即可,然后用LoadString API函数获取文本资源,例如:
LPSTR szLang; // 此变量表示要使用的语言
char szWindowTitle[256];
wsprintf(szDll, "%", szLang);
HMODULE hDll = LoadLibrary(szDll)
LoadString(hDll, IDS_WINDOW_TITLE, szWindowTitle, sizof(szWindowTitle));
通常会有多个DLLs文件,如:,,,,等等,每一个语言拥有这样一个
DLL支持文件。
如何去创建一个资源的实例Instance(我想问题的关键应该在这儿)
然后用Load。。()去导入
方法2:
还有另外一种方法, 就是采用文本语言包.现在很多软件都是采用这种方式.
由于在不同的语言环境下, 字体环境是不一样的, 也许你在简体中文环境下对话框看起来
顺顺当当的,但切换到e文环境下,你会发现惨不忍睹.根据_MSDN的忠告, 对话框等资源的
字体采用_MS_SCAN_SERIF, 9pt比较好.
我说说文本语言包的实现.
1.一个语言就是一个文本文件.其中最原始的是英语文本文件, 可以用这样的格式:
[lang]
Infomation_=_English
&File=
&Edit=
....
而中文语言包文件可以这样写;
[lang]
Infomation_=_Chinese
&File=文件(&F)
...
&Edit=编辑(&E)
对于要翻译的文件, 左边是原始文字,右边是翻译后的文字.
2.程序启动时, 根据用户的选择定位到具体的语言包文件.
以后每次需要显示文本时, 就从这个文件中读, 用读取_ini_文件的那个函数:
GetPrivateProfileString获取字串.
当然每次都这么调用, 比较麻烦, 你可以写一个类,将_SetWindowText, MessageBox等_重
载一下. 这个类还可以做很多其他事情, 例如根据用户当前的语言设定特定的语言包, 例如
可以随时更换语言而不必重启程序等等.当然你也可以不用类.
3.要翻译的时候, 将这个文本文件直接发给翻译者就行了.
这种实现文式的缺点:
1.前期你要写一个简单但实用的类或API来封装一下.
2.对于所有的文本, 采用的都是动态翻译,因此每个对话框都要调用_SetWindowText_重设
文本, 增加程序开销.
这种实现方式的优点:
1.分发语言包比较方便 2.翻译者翻译比较方便, 给他一个文本文件就行了.
3.做多国语言包不必重新编译程序. 4.一劳永逸.
方法3:动态加载资源文件
使用资源文件封装不同语言资源信息,包含字符串、图标等等,在应用程序运行时,载入资
源就行。


发布评论