如何在安装过程中显示本地化的 Program Files 名称(显示名称)?

How to display localized Program Files name (display name) during installation?

我目前正在创建一个安装程序,它的默认安装目录是 Program Files。为此,我使用了 {pf}

这是一个德语程序,仅在德国使用,虽然安装程序在选择目标目录时完全是德语,但安装程序仍显示 C:\Program Files 而不是本地化名称 C:\Programme

是否可以让它显示 C:\Programme?功能上一切正常,应用程序安装在 C:\Programme。我只是担心基本用户可能会对阅读 C:\Program Files.

感到困惑

编辑:更多信息:我知道 C:\ProgrammeProgram Files 的任何其他本地化名称只是一个显示名称,物理路径始终是 Program Files。 Windows 的版本或 Windows 的语言无关紧要。但是我仍然希望设置在安装过程中显示 C:\Programme

我的测试机器在 Windows 7 和 Windows 10。

Inno Setup 不支持。

你必须伪造它。您可以根据需要动态翻译 DirEdit to/from 显示名称的内容:

  • 转换为显示名称,"Select Destination Location" 页面激活时
  • 转换为物理路径,当 "Browse" 按钮被点击时。
  • 选择新路径时转换为显示名称。
  • 转换为物理路径,当 "Next" 按钮被点击时。
function ToDisplayName(Path: string): string;
begin
  Result := ???;
end;

function FromDisplayName(Path: string): string;
begin
  Result := ???;
end;

var
  DirBrowseButtonClickOrig: TNotifyEvent;
  OnSelectDir: Boolean;

procedure DirBrowseButtonClick(Sender: TObject);
begin
  WizardForm.DirEdit.Text := FromDisplayName(WizardForm.DirEdit.Text);
  DirBrowseButtonClickOrig(Sender);
  WizardForm.DirEdit.Text := ToDisplayName(WizardForm.DirEdit.Text);
end;

procedure InitializeWizard();
begin
  DirBrowseButtonClickOrig := WizardForm.DirBrowseButton.OnClick;
  WizardForm.DirBrowseButton.OnClick := @DirBrowseButtonClick;
  OnSelectDir := False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
  begin
    OnSelectDir := True;
    WizardForm.DirEdit.Text := ToDisplayName(WizardForm.DirEdit.Text);
  end
    else
  begin
    if OnSelectDir then
    begin
      OnSelectDir := False;
      WizardForm.DirEdit.Text := FromDisplayName(WizardForm.DirEdit.Text);
    end;
  end;
end;

一个棘手的部分当然是 ToDisplayNameFromDisplayName 函数的实现。

真正的本机实现会非常复杂,如果您可以使用 Pascal 脚本的有限功能(尤其是缺少指针)来实现它甚至是有问题的。

但对于您的特定需求,您可以使用像以下这样简单的东西:

[CustomMessages]
ProgramFilesLocalized=Programme

[Code]

function ToDisplayName(Path: string): string;
begin
  StringChange(Path, '\Program Files', '\' + CustomMessage('ProgramFilesLocalized'));
  Result := Path;
end;

function FromDisplayName(Path: string): string;
begin
  StringChange(Path, '\' + CustomMessage('ProgramFilesLocalized'), '\Program Files');
  Result := Path;
end;


如果您需要一个真正的实现来转换 to/from 显示名称,请考虑提出一个单独的问题。