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

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

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

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

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

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

写配置文件可以在 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一般是中文,如果是用的原版默认不带中文,需要单独下载
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;

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

  1. Inno Setup中文语言包下载

    1 官网 inno Setup是一款免费的安装包制作工具,首先下载安装inno Setup http://www.jrsoftware.org/isinfo.php 软件及中文包下载界面 这里的中文包 ...

  2. Inno Setup 系列之操作ini文件

    需求 应用是多语言的,由ini文件控制具体是哪一类语言.安装程序也是多语言的,在选定安装包语言之后需要同步更新ini文件里面的语言值 ini文件如下: [General] language=en In ...

  3. inno setup 中文乱码问题_Inno Setup添加中文安装语言文件

    如果你不添加中文安装语言文件,你编译生成的安装包的语言是不会有中文. 一,打开软件安装目录下的Languages文件夹下,有如下好多文件,可是就是没有Chianese.isl. 好了,你只需要随便拷贝 ...

  4. Inno SetUp中文繁体语言包和在脚本中使用

    Inno SetUp下载下来是有没中文繁体语言包,一种方法实要从官网中下载别人使用英文自己翻译好的中文语言包,另一种是我已经整理好了,将下面的翻译好的,复制粘贴,保存成.isl文件,放到Inno Se ...

  5. Inno Setup 介绍

    Inno Setup 详解中文资料 其一:使用教程 一.Inno Setup 是什么? InnoSetup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Se ...

  6. Windows下使用Inno Setup 制作exe安装包

    原文地址:点击打开链接 Inno Setup 详解中文资料 其一:使用教程 一.Inno Setup 是什么? InnoSetup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 19 ...

  7. Inno Setup 打包脚本笔记

    Inno Setup 打包脚本总结 1.1. 脚本段 1.1.1. #define宏定义常量 1.1.2. [Setup] 1.1.3. AppId 1.1.3.1. ShowLanguageDial ...

  8. 打包工具 Inno Setup 介绍

    Inno Setup 详解中文资料 其一:使用教程 一.Inno Setup 是什么? InnoSetup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Se ...

  9. Inno Setup 是什么?

    1.Inno Setup 是什么? Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超 ...

最新文章

  1. usb for android,libusb
  2. 阿里达摩院悬壶,看医疗AI如何济世
  3. mysql按照datetime精确查询_MySQL datetime字段查询按小时:分钟排序
  4. 开源作品ThinkJDBC—一行代码搞定数据库操作
  5. ftp协议是一种用于_______的协议_网工知识角|快速理解FTP和TFTP的区别,实用收藏...
  6. .NET连接ORACLE数据库的方法
  7. 【联盟】三星大容量MLC FLASH 换代信息(小心现在自己计划的产品哦)
  8. vmware网络模式设置(说的最简单的一篇文章)
  9. layui 实现图片上传和预览
  10. SAP Commerce Cloud(原Hybris) impex 里的美元(dollar $)符号
  11. 小丑马戏团风格英文404网页模板
  12. php动态网页技术难点及分析,动态网页技术PHP关于cookie和session的分析
  13. linux没有图形界面opcv,关于Linux/ubuntu的环境下安装OpenCV并配置Clion【全套攻略】及关于'Opencv'file not found 的问题...
  14. 分享一份非常强势的Android面试题
  15. 父与子的python之旅_《父与子的编程之旅:与小卡特一起学Python》作者:Warren Sande - kindle电子书下载 - 我的书库...
  16. 联通专线切换成移动专线问题故障解决
  17. .Net Core 简单的Hangfire部署Demo
  18. flask中flash(闪现)的使用
  19. PHP根据字符串拼音首字母进行排序/PHP通讯录按字母A-Z排序
  20. LTspice基础教程-010.波形查看器的使用

热门文章

  1. MySQL数据库在Windows系统上安装和基本使用
  2. Mac环境下Tron 部署教程
  3. 背景颜色渐变 background
  4. DS18B20 单总线多器件的ROM 搜索, ALARM 检测, CRC 校验 源码实现, 基于 STM32F103
  5. 输入FILCO蓝牙键盘的PIN
  6. 网易换肤第二篇:本地换肤实现!
  7. Sentinel流量控制流控规则
  8. 数组的 find() 和 findIndex() 方法
  9. 关于Window10系统无法打开Microsoft Store(应用商店)解决方案
  10. arcgis建筑数据的矢量化(一)