You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Inno Setup中通过代码指定安装程序默认语言

自定义Inno Setup安装程序的默认语言规则

刚好帮别人解决过类似的需求,要实现你说的「挪威语/英语系统默认显示挪威语,其他系统用对应系统语言」的逻辑,Inno Setup完全可以通过脚本的事件函数来覆盖默认的语言选择规则,具体操作如下:

1. 确认你的语言支持列表

首先在脚本的[Languages]段里,确保已经添加了你需要支持的所有语言,比如挪威语、英语以及其他目标语言:

[Languages]
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
; 按需添加其他你需要支持的语言

注意:这里的Name值要和后续代码里的语言标识完全一致,比如如果你的挪威语文件用的是nb-no,那这里也要对应写成nb-no

2. 编写自定义语言选择逻辑

在脚本的[Code]段中添加InitializeSetup函数,这个函数会在安装程序启动时执行,我们可以在这里覆盖默认的语言选择逻辑:

[Code]
function InitializeSetup(): Boolean;
var
  SystemLangID: Integer;
  SystemLangName: String;
  TargetLang: String;
begin
  Result := True;
  
  // 获取系统默认的语言ID
  SystemLangID := GetSystemDefaultLangID;
  // 将语言ID转换为脚本中定义的语言名称(和[Languages]段的Name对应)
  SystemLangName := LanguageIDToName(SystemLangID);
  
  // 执行自定义规则:挪威语/英语系统默认切换到挪威语
  if (SystemLangName = 'norwegian') or (SystemLangName = 'english') then
    TargetLang := 'norwegian'
  else
  begin
    // 其他系统语言,先检查是否在我们的支持列表中
    if IsLanguageSupported(SystemLangName) then
      TargetLang := SystemLangName
    else
      // 如果系统语言不被支持,默认回退到英语
      TargetLang := 'english';
  end;
  
  // 设置安装程序的初始显示语言
  WizardForm.LanguageComboBox.ItemIndex := LanguageNameToIndex(TargetLang);
end;

关键函数说明

  • GetSystemDefaultLangID:获取当前系统的默认语言ID
  • LanguageIDToName:把系统语言ID转换为我们在[Languages]段定义的语言名称(比如把挪威语的ID转换成norwegian)
  • IsLanguageSupported:验证当前系统语言是否在我们的支持列表里
  • LanguageNameToIndex:把语言名称转换为语言选择下拉框的索引,通过设置ItemIndex来指定初始选中的语言

额外注意事项

  • 如果你不想让用户手动切换语言,可以在[Setup]段添加ShowLanguageDialog=no,这样安装程序会直接用我们指定的默认语言启动
  • 测试时可以通过修改系统的区域设置,来验证不同场景下的默认语言是否符合预期
  • 确保所有语言文件的路径正确,比如如果是自定义的语言文件,要替换MessagesFile的路径为你的文件路径

内容的提问来源于stack exchange,提问作者Excludos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:22:58