通用的软件国际化,一般比较正规的实现方法是,使用纯资源dll解决。因为这里面确实也没有什么可以称的上技术含量的,只是实现起来有点烦琐。实现方法网上的资料也很多,网友可自行查阅。本问提出的方法简单实用,并且灵活,可以在不重新编译程序的情况下,随时更改字符资源。起到修改软件显示界面的目的。下面就举一个基于对话框程序的开发实例,详细介绍实现方法。
一。实现原理:
在对话框程序的OnInitDialog()函数中,系统会对容器内的控件进行初始化,包括大小和文本。我们就在这里,根据我们所选择的语言,读取INI文件相应的资源字符串,并赋给控件,达到实现多国语言界面的目的。
二。基于对话框程序的开发实例
1.用VC生成一个基于对话框的程序。
2.在对话框上放置几个不同类型的控件,为了测试不同控件的记载效果。
本文中实际控件如下:
3.在头文件中添加语言标识变量。
public: bool LanFlag;
4.在类的构造函数中初始化LanFlag变量。
LanFlag = true;
5.在对话框类的OnInitDialog()函数中加入如下代码。
char FullFileName[201];
CString path;
CString IniFileName;
GetModuleFileName(NULL, FullFileName, 200);
CString s = FullFileName;
int pos = s.ReverseFind('//');
if (pos >= 0)
{
path = s.Left(pos);
}
if (LanFlag)
{
IniFileName = path + CString("//Chinese.ini");
} else
{
IniFileName = path + CString("//English.ini");
}
char text[201];
CWnd *pWnd;
::GetPrivateProfileString("String","IDS_STRING1","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText(text);
::GetPrivateProfileString("String","IDS_STRING2","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDC_BUTTON1);
pWnd->SetWindowText(text);
::GetPrivateProfileString("String","IDS_STRING3","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDC_RADIO1);
pWnd->SetWindowText(text);
::GetPrivateProfileString("String","IDS_STRING4","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDC_CHECK1);
pWnd->SetWindowText(text);
::GetPrivateProfileString("String","IDS_STRING5","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDOK);
pWnd->SetWindowText(text);
::GetPrivateProfileString("String","IDS_STRING6","Default",text,200,IniFileName);
pWnd = (CWnd *)GetDlgItem(IDCANCEL);
pWnd->SetWindowText(text);
6.用写字板建立文件chinese.ini和english.ini输入一下内容。
在chinese.ini文件中输入
//chinese.ini
IDS_STRING1 = 中文
IDS_STRING2 = 启动
IDS_STRING3 = 左 I
DS_STRING4 = 建立
IDS_STRING5 = 确定
IDS_STRING6 = 取消
在English.ini文件中输入
[String]
IDS_STRING1 = Chinese
IDS_STRING2 = GO
IDS_STRING3 = Left
IDS_STRING4 = Create
IDS_STRING5 = OK
IDS_STRING6 = Cancel
保持所有的文件,编译并执行,程序运行结果如下:
手动修改LanFlag的值就可以让软件在中英文中切换。
可以直接修改ini文件中相应键值的字符串,就可以改变软件中控件的字符显示。从而实现方便的修改软件显示结果的目的,此方法本人运用到实际的软件开发中,使用效果很好。