积极答复者
如何让应用程序支持中英文两种文字?

问题
答案
全部回复
-
我用的是结构数组,结构形式如下
typedef struct _tagMultiLangLabel
{
UINT iCtrlID;
char[X][Y];
}MULTILANGLABEL,*LPMULTILANGLABEL;
//X为多语言的种类数量,Y为最大字串长度.
//定义数组
const MULTILANGLABLE g_langlabel[] = {
{ID1, "日", "fuck"},
{ID2, "操", "shit"},
{-1, ""}
}
//查找算法
char *FindLang(UINT iCtrlID, UINT iLang)
{
int i = 0;
while(g_langlabel[i].iCtrlID!= -1)
{
if (g_langlabel[i].iCtrlID== iCtrlID)
{
return (char *)g_langlabel[i].szInfo[iLang];
}
i++;
}
return NULL;
}
just learn -
1. 制作两种语言的资源文件
可以采用资源DLL方式
或者采用ini,xml等配置文件方式
采用的方式没有特别的好坏之分,根据个人需要取舍
2. 根据用户选择斜载当前资源文件,动态加载选中的资源文件
DLL使用LoadLibrary之后LoadString
ini,xml等则根据自己的需要读取文件
3. 可以采用SetMenuItemInfo,SetWindowText等方式逐一更新菜单和按钮文字
或者删除当前按钮或菜单,根据当前语言资源文件重新生成,设置到窗口
Genofu的回答很全面,
我们开发的软件也涉及到多语言问题,为了省事,用的是Genofu说的第三种方法,
封装一下调用字符串的地方,用英语或者自定义的字符串为原始版本,也就是key,然后程序启动的时候枚举所有子窗口和menu,将key字符串设置成对应的目标语言
这样做比较简单,但是每次切换语言都需要把窗口删除中心创建(因为只有第一次创建的时候原始资源和key是对应的)