有一软件现中文版己出来,带数据库,再要一英文版,领导要求中、英文版作一个版本,可以即时互相转换,用什么方法?
资源文件?还是………………?
解决方案 »
- 想做个发短信的软件,请大家支招。
- dll中窗体的调用出问题了.菜鸟请叫了.
- 面向对象是否过时?
- 求教:请问如何禁用键盘的开始键?分不够,可以加
- 开贴补1000分,请 ly_liuyang(Liu Yang) 进来接分(3)
- 我今天中午发的帖子,1个小时后被推到第3页去了,害得我好找,怎么回事,是不是斑竹搞鬼?
- Delphi中控件变量如何引用?
- 求infopower 4000 and 1stclass 4000序列号
- 急死我了,怎么查个空白出来,不知该怎么弄
- 关于这句(now-timerstr1)<5/86400是怎样理解
- 急!急!哪位大侠有Windows Media Player9控件的使用说明,最好有demo,在线等待!
- 1000元现金急求!把TXT和RDB文件中文本自动上传到网上数据库中的小程序
2、用INI文件
中英使用相同的ID
加载不同的dll
使用从INI载入可以参考一下kingron前辈的一个程序、里边有一个通用的函数可以用
http://www.soulan.com/kingron/download/winupx.rar
使用Delphi中的project->languages->add制作多语言包参考Demo:$Delphi/Demo/RichEdit
Project->Languages->Update Resource DLLs 修改现有语言 然后进入Translation manager页面、需要再录入一些东西(翻译)(选择Workspace页)。确定之后Build Project即可(发布程序时要一起分发那些语言dll文件)。载入这些语言资源参考DEMO、上面也提到了、3、可能有这方面的第三方控件
SMLPack is a suite of multilingual support components package for Delphi & C++Builder. It can help you to make your application support multilingual user interface easily and automatically.
你可以研究一下FlashGet,他是使用ini文件的。自己写函数从ini文件中读取相应的字符创更新界面即可。
把程序中出现中文的地方,对应该的翻译成英文,当然还可以再加几个列来添加其它语言!
再程序中加一个语言选择按钮,选中对应的语言,就刷新一个应用程序,将原来的caption
或者 text 或者 hide 等出现中文的地方,改成英文。
goomoo(古木) :能满足我的要求吗?中英文转换的不只是菜单和消息,还有数据库里查出的记录
中英文转换啊,而且大都是电力方面的专业术语,要买的啊,有没有先共享一下的?
其实SMLPack控件也是通过Ini文件实现中英文界面实时切换的。
----------------------
http://goomoo.uuoo.com
http://goomoo.yeah.net
以上各位介绍的两种控件我都看了,不能满足我的要求,对于那些固定项可以实现,但对查出的记录不行,用INI文件方式实现是可以的,但我怕运行速度比较慢,因为有很多中英文转换。
按loh(乐啸天涯) 的方法也可以实现,这几种方法我综合考虑一下,还有其它原因及条件限制 最好不影响原运行速度,实现又方便,灵活,扩展性要好
就是把整个窗体结构做为一个字段保存在数据库中、再整个载入、
需要做的是先定义一下不同的页面、然后保存至数据库中、
以以前的程序为例、在数据表中定义一个tList字段、text类型
//保存
var
MS1, MS2: TMemoryStream;
begin
MS1 := TMemoryStream.Create;
MS2 := TMemoryStream.Create;
try
with ADOQuery1 do
begin
if not Active then Open;
MS1.WriteComponent(Self);
MS1.Position:=0;
ObjectBinaryToText(MS1, MS2);
Append;
MS2.Seek(0, soFromBeginning);
TBLOBField(FieldByName('tList')).LoadFromStream(MS2);
Post;
end;
finally
MS1.Free;
MS2.Free;
end;
end;//载入
var
MS1, MS2: TMemoryStream;
begin
MS1 := TMemoryStream.Create;
MS2 := TMemoryStream.Create;
try
with ADOQuery1 do
begin
if not Active then Open;
TBLOBField(FieldByName('tList')).SaveToStream(MS1);
ObjectTextToBinary(MS1, MS2);
Self.DestroyComponents;
MS2.Seek(0, soFromBeginning);
MS2.ReadComponent(Self);
end;
finally
MS1.Free;
MS2.Free;
end;
end;