我目前正在创建一个安装程序,其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上。
答案 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;
一个棘手的部分当然是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;
如果您需要真实的实现来转换显示名称,请考虑另外提问。