Inno Setup选择语言并写入配置文件、翻译提示信息

article/2025/11/6 16:15:31

0.前言

制作一个支持多种语言的安装包,应当具备以下几种能力:

  • 读取系统语言设置,并作为启动时的默认语言
  • 可选择安装的语言,随后显示对应语言的的安装提示语
  • 将选择的语言写入到配置文件,以供程序运行时进行判断

Inno Setup 官网:https://jrsoftware.org/isdl.php

Inno Setup GitHub: https://github.com/jrsoftware/issrc

可以在 GitHub 把项目下下来,从代码路径 issrc/Files/Languages/ 把 isl 翻译文件拷贝出来。有些文件可能读取后在安装语言栏里是乱码,比如我这里韩语是乱码,把 isl 设置成 UTF-8 BOM 后能正常显示了。

1.安装时显示语言选择

对于默认语言,可以设置 Setup 区段的 LanguageDetectionMethod 属性,有三个有效值,uilanguage 根据用户的系统界面语言作为默认语言,locale 根据时区确定默认语言,none 则根据 Languages 区段指定的第一种语言作为默认语言,默认为 uilanguage。

对于语言选择,可以设置 Setup 区段的 ShowLanguageDialog 属性,显示语言选择框,默认 yes。然后在 Languages 区段指定语言列表,如下所示:

[Setup]
//[Setup]-该区段包含用于安装程序和卸载程序的全局设置
//语言选择框,默认yes
ShowLanguageDialog=yes
//根据系统语言初始化显示的语言,默认uilanguage 
LanguageDetectionMethod=uilanguage[Languages]
//[Languages]-定义安装程序中可使用的语言
//破解版的Default一般是中文,如果是用的原版默认不带中文,需要单独下载
//compiler:是在安装目录,也可以指定绝对或相对路径
Name: "zh"; MessagesFile: "compiler:Default.isl"
Name: "en"; MessagesFile: "compiler:English.isl"

在 isl 翻译文件中,指定了每个提示框中对应的文本,所以切换语言后,自带的提示信息就切换到对应的语言进行显示了。但是我们还会写一些自己的提示信息,这时候需要借助 CustomMessages 区段进行翻译(可以写在 isl,也可以写在 iss 中),定义好变量后,在对应的位置用 {cm:...} 替换,详见文末的脚本。

2.[INI] 段写 ini 文件

可以在脚本的 INI 段中设置安装时 ini 的写入值,Filename 指定 ini 文件名,Section 指定 ini 分组名,Key 和 String 为键值对。加上公共参数 Languages,当安装时选择的语言和参数一致时才会执行这条语句。要注意的是,Inno Setup 是调用 win api 来写 ini,也没提供编码设置的接口,unicode 版本默认是 UTF-16LE 编码,如果要写一些非英文字符,需要注意 ini 是否乱码。

#define AppName  "Some"
#define AppVersion "0.0.0001"
#define PackDate  GetDateTimeString('yyyymmdd01', '', '')
#define ExePath "bin\Some"[Setup]
AppName ={#AppName}
AppVersion ={#AppVersion}
AppVerName={#AppName}_{#AppVersion}({#PackDate})
VersionInfoVersion ={#AppVersion}
VersionInfoCopyright =Some Co., Ltd
DefaultDirName =D:\{#AppName}
DefaultGroupName ={#AppName}
OutputDir = .\setup\
OutputBaseFilename ={#AppName}_{#AppVersion}({#PackDate})
DisableDirPage=no
Compression =lzma2
SolidCompression =yes
;SetupIconFile=[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce[Files]
;文件安装
Source: {#ExePath}\{#AppName}.exe; DestDir: {app}; Flags: ignoreversion
Source: {#ExePath}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs[Languages]
;此处languages为相对iss的目录
Name: en; MessagesFile: .\languages\English.isl
Name: chs; MessagesFile: .\languages\ChineseSimplified.isl
Name: cht; MessagesFile: .\languages\ChineseTraditional.isl[INI]
;语言设置写入ini
;Section是ini分组名[Setting], String是键值对的值
Filename: {app}\Profiles\setting.ini; Section: Setting; Key: Language; String: English; Languages: en
Filename: {app}\Profiles\setting.ini; Section: Setting; Key: Language; String: ChineseSimplified; Languages: chs
Filename: {app}\Profiles\setting.ini; Section: Setting; Key: Language; String: ChineseTraditional; Languages: cht;其他配置写入ini
Filename: {app}\Profiles\setting.ini; Section: Setting; Key: Version; String: {#AppVersion}
Filename: {app}\Profiles\setting.ini; Section: Setting; Key: Date; String: {#PackDate}

 

3.[Code] 段自定义处理语言选择

写配置文件也可以在 CurStepChanged 事件函数中进行,借助 SetIniString 函数写 ini 配置文件。

//定义一些常量
//程序版本号
#define MyAppVersion "1.1.0.0001"
//可执行程序名
#define MyAppExeName "demo.exe"
//程序图标
#define MyAppIcon "logo.ico"
//程序uuid
#define MyAppUid "FCA18CA6-1C3D-4C6E-A8AF-823A34619B21"[Setup]
//[Setup]-该区段包含用于安装程序和卸载程序的全局设置
//每个程序单独一个id,这是会作为注册表key的,别混用
AppId={{{#MyAppUid}}
//程序安装后的名字
AppName={cm:CmAppName}
//程序版本号
AppVersion={#MyAppVersion}
//指定安装程序版本信息的文件描述值
VersionInfoDescription={cm:CmAppName} Setup
//指定安装程序版本信息产品名称值
VersionInfoProductName={cm:CmAppName} 
//不显示选择开始菜单文件夹 向导页面
DisableProgramGroupPage=yes
//默认安装目录
DefaultDirName=D:\Demo
//安装包生成后所在文件夹和文件名
OutputDir=install
OutputBaseFilename=我的安装程序
//指定安装和卸载程序图标
SetupIconFile={#MyAppIcon}
//控制面板卸载图标
UninstallDisplayIcon={#MyAppIcon}
//语言选择框
ShowLanguageDialog=yes
//根据系统语言初始化显示的语言,默认uilanguage 
LanguageDetectionMethod=uilanguage
//默认Innosetup 会根据机器语言能否支持显示语言包
//新版本已废弃
//ShowUndisplayableLanguages=yes[Languages]
//[Languages]-定义安装程序中可使用的语言
//破解版的Default一般是中文,如果是用的原版默认不带中文,需要单独下载
//compiler:是在安装目录,也可以指定绝对或相对路径
Name: "zh"; MessagesFile: "compiler:Default.isl"
Name: "en"; MessagesFile: "compiler:English.isl"[CustomMessages]
//[CustomMessages]- 用于定义 {cm:...} 常量的自定义消息值
//也可以写到isl文件的CustomMessages字段
zh.CmAppName=我的例程
zh.CmMessage=测试消息框文本及参数,%1 !en.CmAppName=My Demo
en.CmMessage=Test message box text and parameters, %1 ![Tasks]
//[Tasks]-定义安装程序在执行安装期间所有由用户定制的任务。这些任务以选项框和单选项形式在附加任务向导页面中出现。
//创建桌面图标
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone[Files]
//[Files]-这是定义安装程序安装文件到用户系统中的可选文件区段
Source: "bin\{#MyAppExeName}"; DestDir: "{app}";  Flags: ignoreversion
Source: "bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
//注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”[Icons]
//[Icons]-定义所有创建在开始菜单和/或其它位置(比如桌面)的快捷方式
//没有菜单分组
Name: "{autoprograms}\{cm:CmAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename:"{app}\{#MyAppIcon}"
Name: "{autodesktop}\{cm:CmAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; IconFilename:"{app}\{#MyAppIcon}"[Code]
//[Code]-指定 Pascal 脚本的可选区段
//准备安装,测试MsgBox提示框内容翻译
function InitializeSetup(): Boolean;  
begin     MsgBox(ExpandConstant('{cm:CmMessage,{cm:CmAppName}}'), mbError, MB_OK); result:=true;
end;//在实际安装开始之前用 CurStep=ssInstall 调用,
//或在实际安装完成之后用 CurStep=ssPostInstall 调用,
//或在安装程序终止之前和安装完成之后用 CurStep=ssDone 调用。
procedure CurStepChanged(CurStep: TSetupStep);
var
languageName: string;
begin//软件安装后执行if CurStep=ssPostInstall  then    begin//获取用户选择的语言,对应Languages字段的NamelanguageName := ActiveLanguage();  //if 'zh' = languageName then//begin//  SetIniString('Setting','Language','zh',ExpandConstant('{app}/config.ini'));//end//else if 'en' = languageName then//begin//  SetIniString('Setting','Language','en',ExpandConstant('{app}/config.ini'));//end;//可以分别处理,或者直接写入配置文件(生成的配置文件,默认的卸载过程是不会删除的)//写ini函数原型:参数分别对应字段、key、Value、配置文件//function SetIniString(const Section, Key, Value, Filename: String): Boolean;SetIniString('Setting','Language',languageName,ExpandConstant('{app}/config.ini'));end;
end;


http://chatgpt.dhexx.cn/article/Hp5Mtoql.shtml

相关文章

inno setup 最简单的自定义界面效果

1、安装的第一个界面 2、安装进度条界面 3、完成界面 终于使用几个周末的时间做出来了一版本,内容有待完善,比如修复、更新等等的操作,但是如果只是单纯的安装来讲,已经可以使用

inno setup打包脚本总结

inno setup是比较简单好用的一款打包工具。 下面以打包HelloWorld.exe为例进行说明。 一、打包目录的建立 创建source目录:用于放置主程序、依赖dll、资源等待打包文件。创建output目录:用于存放生成的安装包。HelloWorld.iss:使用inno se…

inno setup 更改安装路径学习

因为安装的时候,常常需要修改安装文件路径,因此需要这个功能 VAR button_browse : HWND; 界面: //浏览按钮 button_browse : BtnCreate(WizardForm.Handle, 506, 420, 75, 24, ExpandConstant({tmp}\button_browse.png), 0, FALSE); …

Inno Setup 制作安装包问题总结

没有生成桌面快捷键 安装完成后,选择运行程序报错 可以参考以下文章Inno Setup 制作exe安装包_哭哭啼的博客-CSDN博客Inno Setup 制作exe安装包前言:使用Inno Setup制作exe安装包,首先需要一个可运行的exe程序,然后下载Inno Set…

【Inno Setup】安装包制作,项目打包方案

系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265 …

Inno setup 打包教程

简述: inno setup 是较常用且简单的软件打包工具。 1、安装并打开 inno setup 软件 ① 运行环境 系统:Windows 7 软件:inno setup 5.5.5 ② 安装 inno setup 5.5.5完成后,点击 “开始” → “所有程序” → “Inno Setup 5” → …

使用inno setup生成桌面安装程序最新教程,常用功能及详解。

目录 前言 一、下载inno setup 二、使用 1.依次点击file-New,然后点击下一步 2.设置应用程序信息(安装包信息) 3.应用程序文件夹 4.应用程序文件 5.然后依次点击下一步 6.设置安装语言 7.编译设置 8.继续点下一步 三、其他一些常用设置…

inno setup技巧篇

Inno setup 中级技巧 介绍提前预习技巧内容1.修改界面上的提示语2.自动指定上一次安装的路径3. 安装时控制安装的路径,但是显示上次安装的路径4.卸载完成后不残留文件5.安装时运行批处理文件6.安装包制作过程中怎么调试7.控制面板中安装包显示的名字8.脚本中使用其他插件(.dll)…

FAQ式问答系统

FAQ式问答系统 最终效果系统架构项目描述一、意图识别1.fasttext介绍fasttext模型结构 2.数据格式3.Code 二、检索模型1.预处理2.构建hnsw图3.Learning To Rank(1)BM25BM25简单介绍: (2)深度匹配model 三、总结 最终效…

快速搭建一个基于知识图谱的智能问答系统

点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者:张墨一 知乎链接:https://zhuanlan.zhihu.com/p/58248608 本文仅作学术分享,若侵权&#…

自然语言处理之智能问答系统

目录 一、问答系统简介 二、搭建基于检索的问答系统 三、其他相似度计算 相关参考: 一、问答系统简介 问答系统通常分为任务型机器人、闲聊机器人和解决型机器人(客服机器人),三者的设计分别针对不同的应用场景。A&#xff0…

智能问答产品与技术

封面上放上凯的图片是因为,火影里面的凯有几个特点: 1、无忍术、血继界限、主角光环、显赫背景,完全靠自己努力修炼体术成为上忍 2、代表一种平凡的人做不平凡的事情的精神 3、对后辈也极其关注,所谓木叶飞舞之处 ,…

你知道该如何搭建 AI 智能问答系统吗?

作者 | 李秋键 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统,具体的效果如下所示: 下面简单了解下智能问答系统和自然语言处理的概念,智能问答系统是自然…

NLP: 基于文本语义的智能问答系统

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用。 经典应用场景包括:智…

浅谈基于知识图谱构建智能问答系统

“人才引进落户政策”“企业法人变更登记”“如何办理公积金贷款”……在智慧政务业务中,智能客服能够7*24小时响应群众、企业关于日常事务办理、民生政策、企业经营法规等咨询,大力提升了信息获取的便利性。 智能问答系统涉及自然语言处理、语音技术、…

从0到1构建一个基于知识图谱的智能问答系统

目录 一、前言二、知识图谱2.1 数据入库2.1.1 Nebula Graph搭建2.1.2数据导入 三、后端3.1 搭建Flask框架,处理http请求3.2 处理请求(核心)3.2.1 实体提取和意图分类建立AC树实体提取建立意图特征库意图模板匹配 3.2.2 转换成ngql语句 3.3 连接nebula查询结果返回 一…

智能问答系统产品设计详解

问答系统的概述 我想大家肯定看过很多关于自然语言处理(简称:NLP)技术方面的书籍或者论文,但在这里我不会详细叙述NLP技术方面的知识,而是想通过产品化思路结合NLP相关技术来搭建一个基础版的问答系统。本文通过基于问…

基于Bert的知识库智能问答系统

项目完整地址:https://github.com/1105425455/Bert/tree/master 有训练好的模型 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式,通常用于…

智能问答系统实践——答案选择

问题描述 这个问题来自于SemEval-2015Task3: Answer Selection in Community Question Answering. 简单的说就是从一堆问题和答案中找出他们之间的相关性。 这个Task包含两个Subtasks: 1.给定一个问题和一些答案,将答案进行为3类:good/potential/bad。 2.给定一个判定问题…

构建一个完整的中文智能问答系统

向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程 公众号:datayx 简略概述要求: 构建一个完整的QA系统整个系统由三部分构成:前台,后台,知识库前台:请设计一个…