【问题标题】:Is there a Delphi 5 compiler (dcc32.exe) or IDE switch/option to change the language of the executable?是否有 Delphi 5 编译器 (dcc32.exe) 或 IDE 开关/选项来更改可执行文件的语言?
【发布时间】:2013-05-29 09:16:10
【问题描述】:

我正在维护一个旧的 Delphi 5 程序,使用 Delphi 5 Professional German 构建。

问题是创建的可执行文件的所有对话框和错误消息都以德语显示,即使在位置设置为美国或英国之类的英文 Windows 上也是如此。

我需要英文版的 Delphi 5 Pro 还是有配置选项/编译器开关/更改“输出语言”的选项?

我不是在谈论 IDE 语言,我已经知道可以通过删除 Delphi 安装目录中的所有 *.DE 文件将其改回英文。

例子:

更新: 根据 cmets,我在 Source 目录中查找德语消息 - 我立即找到了几个文件:

Source/Rtl/Sys/comconst.pas
Source/Rtl/Sys/sysconst.pas
Source/Rtl/Sys/comconst.pas
Source/Vcl/bdeconst.pas
Source/Vcl/comstrs.pas
Source/Vcl/consts.pas
Source/Vcl/dbconsts.pas
Source/Vcl/ib.pas
Source/Vcl/oleconst.pas

我希望有一个更简单的方法。不要以为我会走这条路……

【问题讨论】:

  • 你看到的是可能在Consts.pas 单元中定义的字符串常量(至少在Delphi 7 中是这样)。虽然我不知道是否可以修改此文件并重建 Delphi 5 VCL。
  • RTL? Consts.pas 文件在哪里?
  • 在 Delphi5 安装的 source 库的子库中。
  • 好的,我找到了 Consts.pas,但我没有看到那里的所有消息。我用更多样本更新了我的问题。有没有其他文件? - 编辑:刚刚通过搜索找到它:Source/Rtl/Sys/sysconst.pas。
  • Delphi 5 和 7 并没有像现代的一样在包装盒中提供所有本地化版本。所以你要么必须从 D5 的一些英文副本中复制它们,这可能会或可能不会构成盗版,对我来说是灰色区域,或者按照建议进行翻译。编译器中没有选项可以无中生有。 Delphi 没有自己的思想去学习语言和做翻译。如果您在安装 CD 上找不到英文翻译,那么您要么必须这样做,要么在其他地方找到它。德尔福没有戴上麦帽,把兔子拉出虚空。要获得 l10n some1 必须这样做!

标签: delphi delphi-5 dcc32 delphi-ide


【解决方案1】:

那些文本内容在单元Consts.pas中定义为resourcestring

那些resourcestring 可以通过一些库即时更改。无需更改 RTL 源代码!

参考this question about localization

我推荐GNU Gettext for Delphi,它适用于您的 Delphi 5 版本,并且有一组针对大多数常用语言的标准 Delphi 字幕的预翻译文本。

编辑:如果您只是想恢复到英文 VCL 值,那么您的原始 Deplhi 5 CD 中的 Extra\VCLUS 文件夹中应该有默认的英文 .pas 和 .dcu 文件.只需用这些覆盖您的本地文件。文件已设置在预期的子文件夹布局中。

【讨论】:

  • 我不想翻译成另一种语言,我想回到默认的英文文本。
  • 如果您的程序不使用 BPL 而是使用单一的 EXE,则从英语 Delphi 获取那些 *const.pas 文件并替换德语本地化的文件。或者您可以使用可以在运行时更改内存中的resourcestring 的库。像 VgLib1 或 GetText 然后添加那些惹恼你的行的翻译。
  • 如果我有一个英文Delphi,我会安装它,我的问题就会得到解决。我只是想知道我是否必须去购买英语 Delphi,或者是否有可能以某种方式将我的德语 Delphi 配置为回退到英语(通常国际化程序在引擎盖下的某个地方仍然存在英语)。
  • 没有看到您的编辑,我将查看 CD 内容。编辑:我在 Delphi 5 Professional CD 上找不到目录“Extra\VCLUS”或类似目录。
  • 我从法国原装 Delphi 5 CD 中获得了这些文件。有两个 VCLUS 和 VCLFR 子文件夹。我可以通过电子邮件向您发送文件 - 但由于 Borland/Embarcadero 许可证,无法将它们托管在网络上的某个地方。
【解决方案2】:

在工具“BDSSetLang.exe”的bin目录下 如果您在安装过程中指定了德语和英语,您可以在那里更改 IDE 语言、库等语言。

所以应该可以解决问题。

试试这个。

//...bei einem Message Dialog die Beschriftungen der Buttons ändern
function xMessageDlg(const Msg: string; DlgType : TMsgDlgType;
                     Buttons : TMsgDlgButtons; Captions: array of string) : Integer;
var
  aMsgDlg : TForm;
  CaptionIndex,
  i : integer;
  dlgButton : TButton; // uses stdctrls
begin
  // Dlg erzeugen
  aMsgDlg := CreateMessageDialog(Msg, DlgType, buttons);
  CaptionIndex := 0;
  // alle Objekte des Dialoges testen
  for i := 0 to aMsgDlg.ComponentCount - 1 do begin
    // wenn es ein Button ist, dann...
    if (aMsgDlg.Components[i] is TButton) then begin
      dlgButton := TButton(aMsgDlg.Components[i]);
      if CaptionIndex > High(Captions) then Break;
      // Beschriftung entsprechend Captions-array ändern
      dlgButton.Caption := Captions[CaptionIndex];
      Inc(CaptionIndex);
    end;
  end;
  Result := aMsgDlg.ShowModal;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
var
  erg : integer;
begin
  erg := xMessageDlg('Hier steht der gewünschte Text,' + chr($0D) + 'die Buttons sind geändert',
                      mtConfirmation,
                      [mbYes, mbNo, mbCancel], // benutzte Schaltflächen
                      ['Alles', 'Teil','Abbrechen']); // zugehörige Texte
  case erg of // zugehörige Antworten
    mrYes : ShowMessage('"1" clicked');
    mrNo : ShowMessage('"2" clicked');
    mrCancel: ShowMessage('"3" clicked');
  end; // of case
end;

来源:http://www.delphipraxis.net/3307-caption-der-buttons-yes-no-im-dialog-messagedlg-aendern.html

【讨论】:

  • 我不想更改对话框标题,我只想使用默认的英文文本。
  • 再次阅读我的答案。我发布了 2 个解决方案。第一个会解决你的问题
  • 是的,我跳过了你的第一句话,抱歉。我会调查的。
  • BDSSetLang.exe 在我的 Delphi 5 Pro 安装目录中不存在。
  • BDSSetLang.exe 是在 Delphi 2010 中添加的。
猜你喜欢
  • 2011-03-08
  • 2013-11-09
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多