社区
界面
帖子详情
如何做多国语言界面?
leohart
2005-07-24 12:12:57
方法主流ms有2大类,一个是用VC的字符资源,还有一个是用外挂ini文件.但是在网上找了找,没有具体实现的介绍,哪位做过的大虾就上面2种讲一讲?
...全文
1419
7
打赏
收藏
如何做多国语言界面?
方法主流ms有2大类,一个是用VC的字符资源,还有一个是用外挂ini文件.但是在网上找了找,没有具体实现的介绍,哪位做过的大虾就上面2种讲一讲?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
leohart
2005-07-27
打赏
举报
回复
谢谢各位,结贴
AntonlioX
2005-07-25
打赏
举报
回复
用VC实现支持多语言的程序
http://www.vckbase.com/document/viewdoc/?id=1102
VC中多语言菜单的实现
http://www.vckbase.com/document/viewdoc/?id=547
AntonlioX
2005-07-25
打赏
举报
回复
你可以到CSDN的讨论精华区去看看。下面是转载别人的。
也许对你有帮助。
我来到这里,快有一个月了.都是因为该死的多国语言显示的问题,才让我在这里面结识了诸位,呵呵,在这里面我感觉到CHN-Programer的和睦和团结,不由得有时引发阵阵振兴祖国软件的豪情(呵呵,说笑那).在这里我要感谢帮助过我的人.当然很多问题都还要靠自己,但是没有你们这些人,我可能快要被老板炒鱿鱼了.我真正开始搞vc才三个月时间,就这一个月到了csdn后,进步最快.下面是我关于这个月以来我一直在研究的,关于在某些不同Win操作平台下,在我们的操作系统环境下,开发别国语言显示的问题.用来给初级程序员作为参考.(测试是在对话框里面进行的).
我们都知道windows操作系统有支持ANSI和支持Unicode的版本,也有都支持的.其中,windows98只能支持ANSI系统环境.windows2000可以支持Unicode和NSI.windowsCE只支持Unicode.WindowsXP好象也是两个都支持.所以我们在开发多国语言的时候一般都选用windows2000.因为我们可以构件Unicode工程来支持多国语言的显示.(如果你不理解什么是Unicode可以参看<<Windows核心编程>>的第二章.(在ttp://www.china-pub.com/computers/common/info.asp?id=131提供第二章的免费下载).|完整的下载,我都忘记了|.
为了在控件中显示别国语言(如日文,阿拉伯文等)而不至于显示成????,或者说文字可以显示在控件上,但是你无法获取他们并将他们保存到我们常用的CString中,这就需要你创建Unicode工程,这样才能支持.如果你一定要在Ansi系统(win98),开发这样的东西.我暂时还没有搞出来。.呵呵,在<<windows核心编程>>里面说得很清楚,如果你要把这个东西加到里面,即便成功也会造成无法想象的不稳定.关于这点显示的问题,我在下面还有一些支持在98下显示的问题说明,介绍的是用DHTML控件的.下面我先说建立Unicode工程和用Rich Edit 控件(用CRichEditCtrl类支持)显示多语言的问题.
创建Unicode工程只要按照下面步骤进行就可以了.(/***/注释段为摘抄)
/******************* //构件Unicode Debug
1.前提条件:
运行VC++的安装程序,选中MFC的UNICODE支持。
2。VC++Build->configurations...->Add->Configuration->"Unicode Debug"->OK
3.Project->Setting->C++->Preprosesser Definitions->加入UNICODE,_UNICODE, 去掉MBCS即可
4。Project->Setting->lINK->Category->)Outputw->加入wWinMainCRTStartup。
5选择"Win32 Unicode debug"编译方式,代码按照Unicode encoding!
6. Hope it has some help to you.
********************/
实际上只要下面两步骤:
1.project下面选setting,然后选C/C++,在preprocessor definitions中加入
_UNICODE.(不需要去掉_MBCS)
2.就是上面的4.
有了上面步骤,就说明你的工程已经是Unicode工程了.如果你是想把原来的程序改造成Unicode.编译后可能会发生错误,这就要求你改正成Unicode的正确形式..一般情况下对,字符串常量..你只要在前面加上_T("字符串常量"),就可以了.剩下的多为函数调用和字符转换的问题如strcpy->lstrcpy和CString<->Char *之类的(可以看核心编程)..关于这个转换问题,我这里有一个出自CSDN精华区的网页(别人的总结),不知道现在里面有没有了?如果没有你想要,可以和我联系告知.我将尽力帮助.这里对_T宏说明一点,其实它在ANSI环境下也是通过的.而且就读成相应的环境形式.所以一般情况下,我觉得编程,应该都加上这个宏.免得将来麻烦:).还有一个要考虑的,Unicode因为都是双字节的,所以读取的时候要注意,特别是在写文件的时候.首先,如果你要让你的文件成为Unicode文件,一定要在文件头加上0xFFFE.还有假如你用的是CFile 读写文件也要注意.如果你创建的是以非文本读写的..你应该考虑下面的问题:
CFile file;
CString htm;
if(!file.Open(filename,CFile::modeCreate|CFile::modeWrite))
//Open fail;
WORD wFlag=0xFEFF;
file.Write(&wFlag,2); //这是写Unicode文件标志头.
htm=_T("alkdsj flajdflajdlsfj")
file.Write(htm,htm.GetLength()+1);//这是错误的.应该把后面的长度这样才能把htm内容完整的写到文件里面.
//你可以自己考虑具体问题出现在哪.:).
接着,我再说一下关于Rich Edit控件的问题.因为是昨天刚遇到,所以今天就抽空帮别人解决了.他的问题是这样,在2000下,Unicode工程,RichEdit控件中输入小语种(日文,阿拉伯),无法用GetWindowText等函数获取.(获取的都是????).问题原因主要是因为:
(1).Rich Edit控件的版本太低,如RichEdit1.0(riched32.dll)就是不支持Unicode的.所以必须换成RichEdit2.0或者3.0(riched20.dll)的.所以在你的程序InitInstance()里面应该有下面代码:
HINSTANCE richEdit=::LoadLibrary(_T("riched20.dll"));
if(!richEdit)
AfxMessageBox(_T("Unable to load RichEdit2.0"));
AfxInitRichEdit();
(2).修改你的资源*.rc.打开rc文件.(Open->*.rc|Text方式|)..把原来的"RICHEDIT"改成"RICHEDIT20W"就可以了.如下:
CONTROL "",IDC_RICHEDIT1,"RICHEDIT20W",WS_BORDER |
这样,你利用GetWindowText,就可以得到你要的东西.也就是解决上面的问题。
这儿,我提供方法给那些没有用过RichEdit的人去构造这个控件.
A.当你在对话框中有了Rich Edit后..你编译时发现不能弹出对话框了.请在你的InitInstance()开头加上.AfxInitRichEdit();
B.如果你初始化的话..用下面方式(在OnInitDialog里面加)
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CHARFORMAT cfDefault;
memset(&cfDefault,0,sizeof(cfDefault));
cfDefault.cbSize=sizeof(cfDefault);
cfDefault.dwMask = CFM_FACE | CFM_SIZE |CFM_CHARSET | CFM_SPACING;
cfDefault.yHeight = 200;
cfDefault.bCharSet =ARABIC_CHARSET; //这是阿拉伯文的.这个好象不会影响控件.|我没研究清楚.不过是不可以用来让我们在非Unicode中获取文字的(或者没有上面解决方式).
strcpy(cfDefault.szFaceName,"Arial");
m_RichEdit1.SetDefaultCharFormat(cfDefault);//设置模式
c.如果要设置你的RichEdit响应事件消息(Envent)用:
CWnd* pWnd=GetDlgItem(IDC_RICHEDIT1);
CRichEditCtrl* pRich=(CRichEditCtrl*)(pWnd);
long nEvn=pRich->GetEventMask();
nEvn |=ENM_CHANGE; //响应OnChangeEdit函数.
pRich->SetEventMask(nEvn);
上面这些就是RichEdit入门.呵呵..
我这里有一个我测试时写的一个源程序.(很简单).可以用来输入多国语言(用的是RichEdit),并且获取显示.还有就是把他的Unicode代码显示出来.如果你要..请和我联系.我给你们发过去.(尽力而为).
这里我还要提出一些关于显示多国语言里面我曾经思考的问题..作为参考留给大家..至于实现,我这个低级选手暂时只能望尘莫及了.
(1):我当时曾考虑过如何在98下显示并获取的问题,当中用到了vb上面的一个RichText控件.那时侯发现,其实里面的文本可以用RTF格式取出来.但是RTF格式及其让人讨厌..所以当时是在没有办法的情况下(转悠了15天,急了),才考虑到准备把里面的内码值抠出来..呵呵.
(2):仔细分析情况,(我个人认为)为什么会得到???,是因为内码对应不正确的问题..或者字符集不正确.例如:我们现在的操作环境对应的是GB2312码(里面有中文繁体字,以及中文日文字,我们虽然可以输入,但却被认成了中文的相应字符).当你把控制面版里区域选项下面的预设默认值设为中文简体时,它将被选入系统.以至于影响到你的vc程序.导致了无法获取的问题.关于这内码还要提一点..如果你是用繁体的,由于他没有简体和日文字体,所以无法正确显示.这里要说明一下..设置这个预设默认值,是为了构造环境,如果你预设是日文,然后你的程序连接也用的是日文资源dll.那么你的程序即便是在中文Win平台下,用vc,在这时候也可以获得对日文的支持显示和处理功能.(其实就是相单于构造了日文操作平台).
(3):这个和支持多国语资源没有关系..如果你想在你资源里面多加日文资源,那只能保证你可以用 日文windows显示那些文字.但却不能共同显示中文,日文.我看到了<<用VC5_0实现软件中的多种语言支持>>文章..完全和这个是不一样的事情.而且它和我们常遇到的多国语言下载组件支持也没有任何关系.
(4):我的一个同事由于研究给软件安装输入法时,发现可以利用DHTML控件来支持呼叫和显示,无论是98还是2000.都可以,只不过里面内容都为网页,所以必须自己抠出来(我想不会很难).
好了,就写到这里,算是我这一段时间的总结,呵呵..如果你头晕了,千万要记得,我的交友申请,欢迎和我联系,一起研究,另外本人可能要转入多媒体了,也希望多交一些搞多煤体的朋友.
我的QQ:8802311.Email:xie_yong_ping@163.com.还有,很希望和那些想搞清楚在98下来支持这些显示的人,互相探讨.你们都可以在下面留下联系方式.
如果你要查询资料建议你到google里面寻找..最好的方式就是看看MSDN..然后对照..呵呵。.以后遇到这方面的麻烦。。大家可以找我了。。。
psbeond
2005-07-25
打赏
举报
回复
把所有字符串放到rc文件里,然后把rc交给翻译社。把各个翻译好的rc编译成dll,按不同的需要load不同的dll(注意改名啊)
vcmute
2005-07-24
打赏
举报
回复
1.分为两种
一种是不同语言的dll,在需要的装载相应的dll
一种是不同语言的资源存在一起,通过设置SetThreadLocale或FindResourceEx实现
2.通过GetProfileString等在对应的Ini中得到Text,通过SetDlgItemText等设置Text
T97102003
2005-07-24
打赏
举报
回复
学习
leohart
2005-07-24
打赏
举报
回复
是不是使用字符资源,或者是从ini中读取text,都需要settext?那不是狠麻烦,在每一个有文字的控件,菜单等前都要加一个switch判断当前文字设置标志,然后再相应的设置文字...
自
做多国
语言
用读写ini文件来加入多国
语言
, 方便,没有抖动,没有闪烁
C# WinForm多国
语言
界面
的实现
这是C#对于多
语言
界面
的最常规实现法,大量C#的商用软件也是如此实现
emWin多国
语言
实现
本工程基于STM32F4处理器,通过LTDC+DMA2D实现TFT-LCD驱动显示及五点触摸校正,并在emWin的基础上实现多国
语言
,将多国
语言
表保存在SD卡。
VB实现多国
语言
的切换
VB编写的实现多国
语言
切换的小例子,可扩展到大型项目中用
mfc 多国
语言
制作
是否正在为软件实现多国
语言
犯愁呢? 是否不想使用动态
语言
库的方式呢? 这里有你需要的采用文件读取各国
语言
的参考代码。比动态库更方便,更好的帮你解决问题。
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章