XiaoHui.net 笑汇程序员论坛首页
工作并快乐着,职业并休闲着
寻梦的岁月从不言辛苦几许,
不问收获几多……
» 游客:  申请新用户 | 登录 | 会员 | 统计 | 帮助 » XiaoHui.Net 笑汇程序员论坛 | 纯文字版 | 全站索引 | XiaoHui.com


讨论一下VC++中实现多国语言的切换有什么方法

RSS 订阅当前论坛  

上一主题 下一主题
     

标题: 讨论一下VC++中实现多国语言的切换有什么方法  
 
jacquse1981
小水手
Rank: 1



UID 10552
精华 0
积分 12
帖子 12
阅读权限 10
注册 2003-5-2
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

大家谁能给我讲讲在VC++中如何实现多国语言切换!最好具体一点,要是有例子就更好了!

_ 现谢谢帮忙的朋友了。
2004-4-9 02:41#1
查看资料  Blog  发短消息  顶部
 
ancient-tale
小水手
Rank: 1



UID 6550
精华 0
积分 27
帖子 27
阅读权限 10
注册 2004-3-17
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

可以采用多套资源,所有的字符串,对话框等资源,每种语言做一套,到了某个语言的操作系统下,会自动选择相应的语言。这要求,所有的字符串都要放到资源里,不能写在程序里(其实,如果公司比较正规一点,都会有类似的要求)
这样的方法的问题是如果想切换语言比较麻烦,比如在繁体windows下就不会出现简体的界面
如果要切换,可以把资源都放到dll里,做一个简体的,比如XX0804.dll,繁体的XXX0404.dll,切换的时候用AfxSetResourceHandle选择不同的资源dll即可
其实不用资源也可以,全部程序控制,用GetSystemDefaultLangID获得当前的语言,某种语言时显示什么串,全部自己写好也能实现
还有就是_在某种语言操作系统下显示另一种语言,可能出现乱码,避免的方法是使用unicode,不过98/95对uncode的支持不太好,就说这些,下班回家了
2004-4-9 07:49#2
查看资料  Blog  发短消息  顶部
 

传说中的水手
Rank: 5Rank: 5



UID 19851
精华 0
积分 1296
帖子 1296
阅读权限 1
注册 2002-4-17
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

通用的做法呢,简单地说就是以不变应万变。怎么做到呢?就是在内部使用通用的编码(unicode),在输入、输出的时候转为特定的编码。这样,你的程序就可以支持多种语言,也可以灵活地扩展。这实际上也就是java的国际化机制。
2004-4-11 11:29#3
查看资料  Blog  发短消息  顶部
 
jacquse1981
小水手
Rank: 1



UID 10552
精华 0
积分 12
帖子 12
阅读权限 10
注册 2003-5-2
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

真是感谢2位,能不能把说的方法给个具体的例子啊?小弟本科未毕业,知识有限!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _这里先谢谢了!!
2004-4-13 05:42#4
查看资料  Blog  发短消息  顶部
 
XiaoHui
管理员
Rank: 9Rank: 9Rank: 9


UID 2
精华 1
积分 4860
帖子 4850
阅读权限 200
注册 2001-1-23
来自 猎户星座
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

[这个贴子最后由XiaoHui在_2004/04/14_12:35pm_编辑]

实现多语言有很多种办法, 例如楼上讲的将资源装入_DLL.你研究_MS_就会发现他也是这么做的.
还有另外一种方法, 就是采用文本语言包.现在很多软件都是采用这种方式.
由于在不同的语言环境下, 字体环境是不一样的, 也许你在简体中文环境下对话框看起来顺顺当当的,但切换到e文环境下,你会发现惨不忍睹.根据_MSDN的忠告, 对话框等资源的字体采用_MS_SCAN_SERIF, 9pt比较好.
DLL资源的实现方式楼上的谈过了.我说说文本语言包的实现.
1.一个语言就是一个文本文件.其中最原始的是英语文本文件, 可以用这样的格式:
Englisht.txt
[lang]
Infomation_=_English
&File=
&Edit=
....
而中文语言包文件可以这样写;
Chinese.txt
[lang]
Infomation_=_Chinese
&File=文件(&F)
&Edit=编辑(&E)
...
对于要翻译的文件, 左边是原始文字,右边是翻译后的文字.
2.程序启动时, 根据用户的选择定位到具体的语言包文件.
以后每次需要显示文本时, 就从这个文件中读, 用读取_ini_文件的那个函数:
GetPrivateProfileString获取字串.
当然每次都这么调用, 比较麻烦, 你可以写一个类,将_SetWindowText, MessageBox等_重载一下. 这个类还可以做很多其他事情, 例如根据用户当前的语言设定特定的语言包, 例如可以随时更换语言而不必重启程序等等.当然你也可以不用类.
3.要翻译的时候, 将这个文本文件直接发给翻译者就行了.
4.我只是说了一个大致的机制, 可能让人有点迷糊.你可以参考_netants_的国际版, 看看他的_language_目录下的文件内容, 仔细琢磨一下, 你就明白是怎么回事了.

这种实现文式的缺点:
1.前期你要写一个简单但实用的类或API来封装一下.
2.对于所有的文本, 采用的都是动态翻译,因此每个对话框都要调用_SetWindowText_重设文本, 增加程序开销.
这种实现方式的优点:
1.分发语言包比较方便
2.翻译者翻译比较方便, 给他一个文本文件就行了.
3.做多国语言包不必重新编译程序.
4.一劳永逸.
P.S.不要一个问题多次重复发贴.
2004-4-15 01:52#5
查看资料  访问主页  Blog  发短消息  顶部
 
jacquse1981
小水手
Rank: 1



UID 10552
精华 0
积分 12
帖子 12
阅读权限 10
注册 2003-5-2
状态 离线
讨论一下VC++中实现多国语言的切换有什么方法

 谢谢小辉先! :)
  
 还有个问题是String_table中的文字如何变换,比如状态栏。不会自己编程序使状态栏和其他资源对应吧!_
2004-4-15 03:17#6
查看资料  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题  


 


所有时间为 GMT+8, 现在时间是 2008-11-20 18:47 Powered by Discuz! 4.1.0 清除 Cookies - XiaoHui.Net 笑汇程序员论坛 - Archiver