资源DLL好像可以,不知是不是你希望的
解决方案 »
- 真没想到还有那么多朋友使用delphi
- delphi dbgrid 数据值类型显示小数位的问题
- C++语言转为DELPHI语言 大家帮下忙.在线等
- 请问怎么把符合datetimepicker1与datetimepicker2之间的日期表示出来?
- 向高手求救:I/O ERROR 问题!急啊!
- 如何在程序中使用使用左键菜单
- 用socket怎么向指定的端口发送文件,远端服务器不要程序。
- 我在server 2000编的程序,怎么在98下用不成?(是数据库程序我用的是ADO)
- [TIPS]昨天看到一个有趣的功能,如果你在编写浏览器,那么请注意了:IE 自动完成 地址栏 (
- 各位去看看,那里有好东东!!!
- 100分问一个简单问题
- ADO控件问题,急急急!!!
有问题与我联系。
http://www.csdn.net/cnshare/soft/soft5753.shtm
编辑一个INI文件,里面有不同语言的字符串,然后在Form的OnCreate事件里做个循环(可以写成一个函数供公用),检查Form所属的每一个控件的Caption和Hint属性,然后替换掉就可以了。
我想使用Delphi 5的Integrated Translation Environment (ITE)可以轻易得完成这个工作。 我们创建一个示意性的工程MultiLanguage, 在Form上放一个Label和一个Button, 分别把Caption赋值为“English Label” 和“English Button”。 选择菜单Project|anguages|Add ..., Delphi显示Add Languages对话框, 选择Next。 从语言列表中选中“英语(美国)” 和“中文(中国)”, 选择Next。 ITE会根据所选的语言创建子目录,目录名称是语言的缩写,选择Next。 第一次增加语言时, Update Mode固ㄎ狢reate new, 选择Next。 选择Finish。 Delphi会自动创建支持不同语言的资源动态库。 Delphi还会自动创建一个工程组, 其中包括原有的MultiLanguages.EXE, 还包括新建的两个资源动态库 (MultiLanguages.enu, MultiLanguages.chs)。 保存工程组。 Delphi启动Translation Manager, 左边是需要翻译的语言, 右边是完成百分比。 选择“中文(中国)”|Forms|Unit1, 在右边第15行和20行填写翻译后的中文。 保存并关闭。 打开Project Manager, 编译MultiLanguages.enu和MultiLanguages.chs, Delphi会在相应的子目录生成资源动态库, 但后缀不是DLL而是ENU和CHS。
--------------------------------------------------------------------------------欢迎阅读China ASP的专栏文章,需要转载请与我们联系Copyright © 上海聚声计算机系统工程有限责任公司 1999-2000, All Rights Reserved
严黎斌()
coldljy(凤舞N天)
如何在運行時動態切換語言(用ITE)
严黎斌()
coldljy(凤舞N天)
如何在運行時動態切換語言(用ITE)
严黎斌()
coldljy(凤舞N天)
如何在運行時動態切換語言(用ITE)
我的做法就是,将那些需要翻译的字符串(caption,hit,string)等等,存放在一个ini文件之中,一个ini文件对应一种语言。这样,程序在运行的时候,就可以读取这些字符串,改变控件的caption,string了。这样做的好处是,完全由我控制,以后增加一个语言非常方便,甚至不需要源程序,不需重新编译,只要翻译一个ini文件就可以!
比如应该如何循环,设计时那些Caption 应该怎样取值?
目前已经有简体中文,繁体中文bgk,繁体中文big5,英文等语言的ini,程序运行时动态切换,甚至不要重新启动。
比如,下面就是繁体中文的ini文件:
[General]
Description=ChineseGBK/中文繁體[Captions]
frmMain.Caption=MP3標記編輯器
frmMain.grpSelectFile.Caption=選擇MP3文件
frmMain.grpid3v1.Caption=id3v1標記
frmMain.chkId3v1.Caption=使用id3v1標記
frmMain.lblTrack.Caption=曲目編號
frmMain.lblTitle.Caption=名稱
frmMain.lblArtist.Caption=藝人
frmMain.lblAlbum.Caption=專輯
frmMain.lblYear.Caption=年份
frmMain.lblComment.Caption=備註
frmMain.lblGenre.Caption=類別
frmMain.lblTrackt.Caption=曲目編號
frmMain.lblTitlet.Caption=名稱
frmMain.lblArtistt.Caption=藝人
frmMain.lblAlbumt.Caption=專輯
frmMain.lblYeart.Caption=年份
frmMain.lblCommentt.Caption=備註
frmMain.lblGenret.Caption=類別
frmMain.chkReadOnly.Caption=唯讀
frmMain.btnUpdateTag.Caption=更新標記(&U)
frmMain.grpid3v1t.Caption=id3v1模版
frmMain.btnToTemp.Caption=設置爲模版↓
frmMain.btnFromTemp.Caption=讀取模版↑
frmMain.lblSelectLang.Caption=選擇語言/Select Language
frmMain.chkRegister.Caption=註冊到系統外殼
frmMain.btnAbout.Caption=關於
frmMain.cmbRULFiles.Text=最近打開的文件
frmMain.chkMultiInstance.Caption=允許同時運行多個編輯窗口
frmMain.btnReadme.Caption=更多資訊...
frmAbout.Caption=關於MP3標記編輯器
frmAbout.lblProductName.Caption=MP3標記編輯器
frmAbout.lblVersion.Caption=版本
frmAbout.lblCopyRight.Caption=版權所有 嚴黎斌
frmAbout.btnOK.Caption=確定[Hints]
frmMain.chkRegister.Hint=在資源管理器中,爲MP3文件的關聯選單添加“標記編輯器”命令
frmMain.chkReadOnly.Hint=打開/關閉該文件的唯讀模式。唯讀時MP3標記不可更改。
frmMain.cmbRULFiles.Hint=最近打開的文件
[Strings]
strTagEditor=標記編輯器(&A)delphi能很方便地读取ini 文件,只要引用IniFiles单元。
先处理captions一节,每读取一行,就写分析出所对应的控件名称,然后循环查找窗体控件的名称,如果有相符的,就修改其caption。
然后依次处理Hits,String字符串内容。下面就是修改语言的关键代码
procedure TfrmMain.ChangeLanguage(strlfName:string);
var
lf:TIniFile; // Language File
sect, strName, strValue:string;
sltSect:TStringList;
i: integer;
ctrl1: TComponent;
begin
strLangFile:=stlLangs.Values[strlfName];
if strLangFile='' then exit;
strlfName:=strExePath+strLangFile;
lf:=TiniFile.Create(strlfName); sect:='Captions';
frmMain.Caption:=lf.ReadString(sect,'frmMain.Caption','MP3标记编辑器'); sltSect:=TStringList.Create; // Change Controls' Captions
lf.ReadSectionValues(sect,sltSect);
for i:=0 to frmMain.ComponentCount-1 do begin
ctrl1:=frmMain.Components[i];
strName:='frmMain.'+ctrl1.Name+'.Caption';
strValue:=sltSect.Values[strName];
if strValue<>'' then begin // string found!
if ctrl1 is TLabel then (ctrl1 as TLabel).Caption:=strValue;
if ctrl1 is TButton then (ctrl1 as TButton).Caption:=strValue;
if ctrl1 is TGroupBox then (ctrl1 as TGroupBox).Caption:=strValue;
if ctrl1 is TCheckBox then (ctrl1 as TCheckBox).Caption:=strValue;
end; // string found!
end; // for i // Change Controls' Text
frmMain.cmbRULFiles.Text:=lf.ReadString(sect,'frmMain.cmbRULFiles.Text','最近打开的文件'); // Change Controls' Hints
sect:='Hints';
lf.ReadSectionValues(sect,sltSect);
for i:=0 to frmMain.ComponentCount-1 do begin
ctrl1:=frmMain.Components[i];
strName:='frmMain.'+ctrl1.Name+'.Hint';
strValue:=sltSect.Values[strName];
if strValue<>'' then begin // string found!
if ctrl1 is TLabel then (ctrl1 as TLabel).Hint:=strValue;
if ctrl1 is TButton then (ctrl1 as TButton).Hint:=strValue;
if ctrl1 is TGroupBox then (ctrl1 as TGroupBox).Hint:=strValue;
if ctrl1 is TCheckBox then (ctrl1 as TCheckBox).Hint:=strValue;
end; // string found!
end; // for i
// Change Strings
sect:='Strings';
strTagEditor:=lf.ReadString(sect,'strTagEditor','标记编辑器(&A)');
strCreateRegFail:=lf.ReadString(sect,'strCreateRegFail','访问/创建注册表项失败');
strRULHint:=cmbRULFiles.Hint; lf.Free;
// for About box
if frmAbout<>nil then frmAbout.ChangeLanguages(strlfName);
end;这仅仅是个具体的实现,反正你知道思路就行了。希望能对你有所帮助。