Inno Setup选择语言并写入配置文件、翻译提示信息 您所在的位置:网站首页 wwe2k20怎么设置语言 Inno Setup选择语言并写入配置文件、翻译提示信息

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

2024-01-15 21:36| 来源: 网络整理| 查看: 265

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字段的Name languageName := 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;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有