资源DLL好像可以,不知是不是你希望的

解决方案 »

  1.   

    看看这个,是不是你需要的?
    有问题与我联系。
    http://www.csdn.net/cnshare/soft/soft5753.shtm
      

  2.   

    用INI文件保存一些文字信息,启动时根据INI文件的信息加栽就可以啊
      

  3.   

    我已经实现了,这里仅提供一个方法:
    编辑一个INI文件,里面有不同语言的字符串,然后在Form的OnCreate事件里做个循环(可以写成一个函数供公用),检查Form所属的每一个控件的Caption和Hint属性,然后替换掉就可以了。
      

  4.   

    专栏:Delphi技术 文章编号:1950 文章类别: 原创 作者: rssw 加贴时间:2001-3-17 7:41:30 编写支持多国语言的程序关键词:Delphi控件杂项曾经有人问怎样编写支持多国语言的程序, 让它能够根据所运行的操作系统自动显示相应的文字。 而且不但要替换Windows标准对话框, 还要自动替换窗口标题、 按钮标题等所有显示的文字和所有错误提示。  
       
    我想使用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 
      

  5.   

    又請問
      严黎斌() 
      coldljy(凤舞N天) 
    如何在運行時動態切換語言(用ITE)
      

  6.   

    又請問
      严黎斌() 
      coldljy(凤舞N天) 
    如何在運行時動態切換語言(用ITE)
      

  7.   

    又請問
      严黎斌() 
      coldljy(凤舞N天) 
    如何在運行時動態切換語言(用ITE)
      

  8.   

    delphi的ite我没有用过,感觉比较麻烦。它好像是做成资源dll的形式,能不能动态改变语言,我就不知道了。
    我的做法就是,将那些需要翻译的字符串(caption,hit,string)等等,存放在一个ini文件之中,一个ini文件对应一种语言。这样,程序在运行的时候,就可以读取这些字符串,改变控件的caption,string了。这样做的好处是,完全由我控制,以后增加一个语言非常方便,甚至不需要源程序,不需重新编译,只要翻译一个ini文件就可以!
      

  9.   

    YanLiMin,能不能具体的说一下关键点
    比如应该如何循环,设计时那些Caption 应该怎样取值?
      

  10.   

    我编了个读取与修改mp3文件附加信息标记的软件,目的之一,就是要实现我自己设想的ini文件方式实现多语言版本的功能,最后是完成了。
    目前已经有简体中文,繁体中文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;这仅仅是个具体的实现,反正你知道思路就行了。希望能对你有所帮助。
      

  11.   

    Thank you very much !