如何在安装过程中显示本地化的程序文件名称(显示名称)?

时间:2016-09-23 09:36:22

标签: inno-setup

我目前正在创建一个安装程序,其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上。

1 个答案:

答案 0 :(得分:1)

Inno Setup不支持。

你必须假装它。您可以根据需要动态地将DirEdit的内容翻译成显示名称:

  • 在激活“选择目的地位置”页面时翻译为显示名称
  • 在单击“浏览”按钮时转换为物理路径。
  • 在选择新路径时转换为显示名称。
  • 在单击“下一步”按钮时转换为物理路径。
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;

enter image description here

如果您需要真实的实现来转换显示名称,请考虑另外提问。