社区
界面
帖子详情
请问怎么实现双语言的选择.
rockally
2005-07-30 01:46:26
请问怎么实现界面的双语言选择?用dll文件不知道怎么实现,也就是我希望在第一个对话框中有两个按钮进行语言选择,中文和英文,当选择中文的时候第二个对话框控件和文字显示为中文,否则显示为英文,谢谢提供一个具体的例子和用法,十分感谢!
...全文
243
11
打赏
收藏
请问怎么实现双语言的选择.
请问怎么实现界面的双语言选择?用dll文件不知道怎么实现,也就是我希望在第一个对话框中有两个按钮进行语言选择,中文和英文,当选择中文的时候第二个对话框控件和文字显示为中文,否则显示为英文,谢谢提供一个具体的例子和用法,十分感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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相同
WPF通过resx
实现
双
语言
切换
xmlns:res=“clr-namespace:
双
语言
测试.Language”设置为cn,
语言
,这时候系统无法识别,直接显示的是默认的
语言
。分别创建,cn,en,zh-Cn,默认的
语言
资源。设置为Default(“”),显示为默认的。设置为zh-Cn,系统...
Python
选择
题
A..Python
语言
是非开源
语言
B..Python
语言
是跨平台
语言
C..Python
语言
是多模型
语言
D..Python
语言
是脚本
语言
正确答案: A. 以下选项中说法不正确的是 A.. C
语言
是静态
语言
,Python
语言
是脚本
语言
B.....
Android app应用多
语言
切换功能
实现
1.
实现
的效果和微信类似,在设置界面打开切换
语言
的界面,
选择
语言
后重启 HomeActivity,
语言
切换完成,下次重新打开 App ,也是用户设置的
语言
。2.
实现
步骤1. 添加多
语言
文件在不同的 value 文件夹下(例如 value...
.NET CORE 多
语言
实现
方案
根据市场需求,基于.NET CORE平台开发的RoadFlow工作流平台需要
实现
多
语言
版本。经过方案讨论和比对,决定采用.NET自带的本地化功能来
实现
多
语言
。话不多说,直...
js 读取json
语言
包,
实现
页面的
双
语切换
mui.ready(function(){ var lang = ...首先获取当前的
语言
是什么,然后找对应的json文件读取内容,获取要替换内容的自定义标签,根据其中某个属性来对应json
语言
包的键位后替换对应的值,从而
实现
双
语切换
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章