程序实现多国语言的动态切换解决方案

本文介绍了一种不依赖于动态库的多语言支持方法,通过将字符串资源存储在文件中实现动态语言切换,并提供了全局函数和对话框初始化函数来简化多语言支持的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载示例源代码(VC知识库的下载链接)

实现思想:

传统的做法是把所有的资源都放到动态库中,一种语言一个动态库,程序运行的时候通过加载不同的动态库来实现多语言功能。这样做的缺点是不能动态切换语言,如果更换语言后必须重新启动软件。当然,没有人会需要经常的切换语言玩儿,但是采用动态库的方法,如果程序需要修改资源的话,就要更新所有的动态库,这是一个非常枯燥而且容易出现疏漏的工作。


我的方法是把所有用到的字符串都放到文件中,一种语言一个文件,根据选择的语言到对应的文件中去加载字符串。这样不但可以动态切换语言,而且用户可以根据需要自己添加新的语言。


具体实现:

1、程序启动时检查所选择的语言,确定该语言文件,保存该文件路径

软件开发网 www.mscto.com

2、提供一个全局函数,如 g_LoadString(CString szID),根据提供的字符串ID返回
其内容,具体是哪个语言的在函数中判断,这样在程序中只要提供一个字符串ID就可以自动
加载不同语言的文字了。


3、如何在程序中使用:
原来代码:



CString str;

str = "语言";  改动后:
CString str;

str = g_LoadString("IDS_LANGUAGE");  4、对话框中如何实现

如果像在程序中使用一样,每一个字符串都要去加载一次的话,如果对话框比较多,工作量可就太大了。
所以我提供了一个函数g_SetDialogStrings(CDialog *pDlg,UINT uDlgID),每个对话框在初始化的时候调 用该函数,传递对话框的指针,我在函数中循环枚举所有的子控件,逐个设置文字。这样就可以省去很多工作

注意:由于静态文本(CStatic)默认的ID是IDC_STATIC,值都是65535,无法区分,所以在需要改变其文字的CStatic的ID要改一改,不能用默认的
5、语言文件样例:

中文版:


[Setting]

Language=Chinese



[String]

IDS_MENU_FILE=文件

IDS_MENU_FILE_NEW=新建(&N)

IDS_MENU_FILE_OPEN=打开(&O)

IDS_MENU_FILE_CLOSE=关闭(&C)

IDS_MENU_FILE_EXIT=退出(&E)

  英文版:
[Setting]

Language=English



[String]

IDS_MENU_FILE=File

IDS_MENU_FILE_NEW=&New

IDS_MENU_FILE_OPEN=&Open

IDS_MENU_FILE_CLOSE=&Close

IDS_MENU_FILE_EXIT=&Exit 软件开发网 www.mscto.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值