社区
界面
帖子详情
请问怎么实现双语言的选择.
rockally
2005-07-30 01:46:26
请问怎么实现界面的双语言选择?用dll文件不知道怎么实现,也就是我希望在第一个对话框中有两个按钮进行语言选择,中文和英文,当选择中文的时候第二个对话框控件和文字显示为中文,否则显示为英文,谢谢提供一个具体的例子和用法,十分感谢!
...全文
254
11
打赏
收藏
请问怎么实现双语言的选择.
请问怎么实现界面的双语言选择?用dll文件不知道怎么实现,也就是我希望在第一个对话框中有两个按钮进行语言选择,中文和英文,当选择中文的时候第二个对话框控件和文字显示为中文,否则显示为英文,谢谢提供一个具体的例子和用法,十分感谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ningzhiyu
2005-07-31
打赏
举报
回复
学习
caocheng8230
2005-07-31
打赏
举报
回复
用一个stratege的模式,把双语言显示的接口(虚基类)提取出来,然后在调用该双语言的地方只传入该接口的引用就可以了,然后看具体情况就传如相应的对象就可以了。
rockally
2005-07-31
打赏
举报
回复
我知道用dll可以实现控件的不同语言显示,因为知道控件ID,但是我希望其它的,比如在程序中添加的字符串,还有比方说列表框的表头等也用不同语言显示出来,它们没有ID应该怎么办呢?在比方说我在程序中这样写GetDlgItem(ID_YOURSTATIC)->SetWindowText(_T("How are you!")),那在dll文件中应该怎么翻译,才能在中文下现实"你好!"呢?谢谢!
dzq138
2005-07-30
打赏
举报
回复
..
AntonlioX
2005-07-30
打赏
举报
回复
csdn里面 关于 多语言的 帖子 你自己找找
AntonlioX
2005-07-30
打赏
举报
回复
程序实现多国语言的动态切换解决方案
--------------------------------------------------------------------------------
分类: 系统
作者姓名: 耿海增
邮件地址: genghaizeng@163.com
作者相关信息:
程序下载 代码下载
开发环境: VC6 Windows XP
测试环境: WindowsXP
更新记录:
使用许可:免费
讲解:
实现思想:传统的做法是把所有的资源都放到动态库中,一种语言一个动态库,程序运行的时候通过加载不同的动态库来实现多语言功能。这样做的缺点是不能动态切换语言,如果更换语言后必须重新启动软件。当然,没有人会需要经常的切换语言玩儿,但是采用动态库的方法,如果程序需要修改资源的话,就要更新所有的动态库,这是一个非常枯燥而且容易出现疏漏的工作。
我的方法是把所有用到的字符串都放到文件中,一种语言一个文件,根据选择的语言到对应的文件中去加载字符串。这样不但可以动态切换语言,而且用户可以根据需要自己添加新的语言。
具体实现:
1、程序启动时检查所选择的语言,确定该语言文件,保存该文件路径
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
界面图片:
部分关键代码
/*********************************************************************
* 函数名称:g_LoadString
* 说明: 根据标识 szID到选定的语言文件中加载字符串
* 作者: Geng
*********************************************************************/
CString g_LoadString(CString szID)
{
CString szValue;
DWORD dwSize = 1000;
GetPrivateProfileString("String",szID,"Not found",
szValue.GetBuffer(dwSize),dwSize,g_szLanguagePath);
szValue.ReleaseBuffer();
szValue.Replace("\\n","\n"); //替换回换行符号
return szValue;
}
/*********************************************************************
* 函数名称:g_SetDialogStrings(CDialog *pDlg,UINT uDlgID)
* 说明: 当对话框运行时获取其所有可得到的字符串,并保存到语言文件中
每个控件用对话框ID和控件ID唯一标识
* 入口参数:
* CDialog *pDlg -- 对话框的指针
* UINT uDlgID -- 该对话框的ID
* 作者: Geng
*********************************************************************/
void g_SetDialogStrings(CDialog *pDlg,UINT uDlgID)
{
CString szSection = "String";
CString szKey,szText;
bool bSetText = 1; //1:从文件读,设置对话框
//0:从对话框读,保存到文件
if(bSetText) //1:从文件读,设置对话框
{
CString szDefault = "";
DWORD dwSize = 1000;
char* pData = (char*)malloc(dwSize);
//读对话框标题
szKey.Format("IDD%d_Title",uDlgID);
if(GetPrivateProfileString(szSection,szKey,szDefault,
pData,dwSize,g_szLanguagePath) != 0)
{
pDlg->SetWindowText(pData);
}
//写入各个子控件的标题文字
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
while(pWnd != NULL)
{
szKey.Format("IDD%d_%d",uDlgID,pWnd->GetDlgCtrlID());
if(GetPrivateProfileString(szSection,szKey,szDefault,
pData,dwSize,g_szLanguagePath) != 0)
{
pWnd->SetWindowText(pData);
}
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
//释放内存
free(pData);
}
else //0:从对话框读,保存到文件
{
//写入对话框标题
szKey.Format("IDD%d_Title",uDlgID);
pDlg->GetWindowText(szText);
WritePrivateProfileString(szSection,szKey,szText,g_szLanguagePath);
//写入各个子控件的标题文字
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
while(pWnd != NULL)
{
szKey.Format("IDD%d_%d",uDlgID,pWnd->GetDlgCtrlID());
pWnd->GetWindowText(szText);
WritePrivateProfileString(szSection,szKey,szText,g_szLanguagePath);
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
}
}
qrlvls
2005-07-30
打赏
举报
回复
你可以直接参考 BCGControlBar 的源码
rockally
2005-07-30
打赏
举报
回复
有没有说的详细一点的,谢谢,!
rongrong_abc
2005-07-30
打赏
举报
回复
LANGIDFROMLCID
billy145533
2005-07-30
打赏
举报
回复
lianglp() 比较简单
可以搜一下,网上有的是
lianglp
2005-07-30
打赏
举报
回复
作两个资源副本。资源ID相同
微信小程序 实例汇总 完整项目源代码
微信小程序 实例汇总 完整项目源代码
C#自定义控件库
C#自定义控件库
WPF通过resx
实现
双
语言
切换
注意,同一个界面的数据显示的是上一次加载时的内容,设置完区域性后,如果没有重新加载,旧不会更新。所以上图中,同一个界面的标签,一致显示zh-Cn,没有更新。xmlns:res=“clr-namespace:
双
语言
测试.Language”设置为cn,
语言
,这时候系统无法识别,直接显示的是默认的
语言
。分别创建,cn,en,zh-Cn,默认的
语言
资源。设置为Default(“”),显示为默认的。设置为zh-Cn,系统正常识别。设置为En,这时候正常显示。
Python
选择
题
基本常识 15. 关于 Python
语言
的特点,以下选项中描述错误的是 A..Python
语言
是非开源
语言
B..Python
语言
是跨平台
语言
C..Python
语言
是多模型
语言
D..Python
语言
是脚本
语言
正确答案: A. 以下选项中说法不正确的是 A.. C
语言
是静态
语言
,Python
语言
是脚本
语言
B..编译是将源代码转换成目标代码的过程 C..解释是将源代码逐条转换成目...
.NET CORE 多
语言
实现
方案
根据市场需求,基于.NET CORE平台开发的RoadFlow工作流平台需要
实现
多
语言
版本。经过方案讨论和比对,决定采用.NET自带的本地化功能来
实现
多
语言
。话不多说,直...
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章