Inno Setup:在设置 运行 时更改设置语言

Inno Setup: change the setup language while setup is running

在我的设置中,我不想使用标准语言对话框表单。

相反,我想在我的 Inno Setup 的欢迎页面中添加一个组合框来完成语言对话框所做的相同工作,以便它能够:

  1. 在下拉列表中显示 [Languages] 部分中包含的所有语言。因此用户可以从这个自定义组合框中 select 一种语言。

  2. 将所选语言应用于整个设置。

我知道使用 "normal way" 是不可能的,因为 Inno Setup 中没有可用的功能来执行此工作 (!!!)。

因此,我向 Inno Setup 编译器添加了几个函数,并从我的脚本中调用它们:

我尝试使用 RefreshInvalidateUpdate 来解决,但发送消息没有成功。标签标题仍然是原来的默认语言。

下面的 link 是一个视频,展示了我的测试设置以及组合框和语言的变化。我的默认 (OS) 语言是意大利语。视频显示,即使我将语言更改为 Deutsch,所有内容都会将语言更改为 Deustch,但标签除外。

http://screencast.com/t/SDI5VN67LFL

如果有人已经解决了问题,请帮助我!

您必须按照 TWizardForm 代码将它们初始化为初始语言的相同方式一一重新设置所有标签。

例如:

SelectTasksLabel.Caption := ExpandSetupMessage(msgSelectTasksLabel2);

有关更多信息,请参阅 TWizardForm.Create code

没有更简单的方法。字符串被复制到 Windows (Win32) 控件,它们不会神奇地知道您已经更改了语言。您必须用新值覆盖字符串。

例如,"Next" 和 "Back" 按钮的标签随着语言的变化而更新,因为它们总是在页面更改时重新设置,从 TWizardForm.SetCurPage :

procedure TWizardForm.SetCurPage(const NewPageID: Integer);
...
begin
  ...
  BackButton.Caption := SetupMessages[msgButtonBack];
  if CurPageID = wpReady then begin
    NextButton.Caption := SetupMessages[msgButtonInstall];
    CancelButton.Caption := SetupMessages[msgButtonCancel];
  end else if ((CurPageID = wpPreparing) and PrepareToInstallNeedsRestart) or (CurPageID = wpFinished) then begin
    NextButton.Caption := SetupMessages[msgButtonFinish];
    CancelButton.Caption := SetupMessages[msgButtonCancel];
  end else begin
    NextButton.Caption := SetupMessages[msgButtonNext];
    CancelButton.Caption := SetupMessages[msgButtonCancel];
  end;
  ...
end;

但大多数其他标签都是静态的,永远不会更新,因此它们会保留原始语言。