如何在安装过程中显示本地化的 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:\Programme
或 Program 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;
一个棘手的部分当然是 ToDisplayName
和 FromDisplayName
函数的实现。
真正的本机实现会非常复杂,如果您可以使用 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 显示名称,请考虑提出一个单独的问题。
我目前正在创建一个安装程序,它的默认安装目录是 Program Files
。为此,我使用了 {pf}
。
这是一个德语程序,仅在德国使用,虽然安装程序在选择目标目录时完全是德语,但安装程序仍显示 C:\Program Files
而不是本地化名称 C:\Programme
。
是否可以让它显示 C:\Programme
?功能上一切正常,应用程序安装在 C:\Programme
。我只是担心基本用户可能会对阅读 C:\Program Files
.
编辑:更多信息:我知道 C:\Programme
或 Program 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;
一个棘手的部分当然是 ToDisplayName
和 FromDisplayName
函数的实现。
真正的本机实现会非常复杂,如果您可以使用 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 显示名称,请考虑提出一个单独的问题。