NSIS脚本学习:创建 MUI 界面使用的自定义语言包文件(nlf & nsh)

六眼飞鱼酱① 提交于 2019-12-20 18:06:04

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

NSIS脚本的语言包文件,存放在以下目录:

NSIS安装目录\Contrib\Language files

在这个目录下有很多语言包,一般简体中文使用的语言包是 SimpChinese.nlf 和 SimpChinese.nsh 两个文件。

在NSIS脚本中,写入下面这句话,就可以调用简体中文语言包了。

!insertmacro MUI_LANGUAGE "SimpChinese"

不过,NSIS程序默认的简体中文语言包有很多问题。这个语言包遣词非常生硬,难以满足客户的很多定制化要求。

因此我决定在这个语言包的基础上,自己新写一组语言包:CustomizedChinese

CustomizedChinese.nlf 代码如下:

# ###################################
# nlf file of CustomizedChinese
# Author: Tsybius2014
# DateTime: 2016/04/06 
# Remark: none
# ###################################
# Header, don't edit
NLF v6
# Language ID
2052
# Font and size - dash (-) means default 字体名称与大小
宋体
9
# Codepage - dash (-) means ANSI code page ANSI 字码页
936
# RTL - anything else than RTL means LTR 由右至左书写
-
# ^Branding
Nullsoft Install System %s
# ^SetupCaption
$(^Name) 安装
# ^UninstallCaption
$(^Name) 卸载
# ^LicenseSubCaption
: 授权协议
# ^ComponentsSubCaption
: 安装选项
# ^DirSubCaption
: 安装文件夹
# ^InstallingSubCaption
: 正在安装
# ^CompletedSubCaption
: 已完成
# ^UnComponentsSubCaption
: 卸载选项
# ^UnDirSubCaption
: 卸载文件夹
# ^ConfirmSubCaption
: 确认
# ^UninstallingSubCaption
: 正在卸载
# ^UnCompletedSubCaption
: 完成
# ^BackBtn
< 上一步(&P)
# ^NextBtn
下一步(&N) >
# ^AgreeBtn
我接受(&I)
# ^AcceptBtn
我接受“授权协议”中的条款(&A)
# ^DontAcceptBtn
我不接受“授权协议”中的条款(&N)
# ^InstallBtn
安装(&I)
# ^UninstallBtn
卸载(&U)
# ^CancelBtn
取消(&C)
# ^CloseBtn
关闭(&L)
# ^BrowseBtn
浏览(&B)...
# ^ShowDetailsBtn
显示细节(&D)
# ^ClickNext
单击 [下一步(N)] 继续。
# ^ClickInstall
单击 [安装(I)] 开始安装。
# ^ClickUninstall
单击 [卸载(U)] 开始卸载。
# ^Name
名称
# ^Completed
已完成
# ^LicenseText
在安装 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,单击 [我接受(I)] 。
# ^LicenseTextCB
在安装 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,单击下方的勾选框。 $_CLICK
# ^LicenseTextRB
在安装 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,选择下方的第一个选项。 $_CLICK
# ^UnLicenseText
在卸载 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,单击 [我接受(I)] 。
# ^UnLicenseTextCB
在卸载 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,单击下方的勾选框。 $_CLICK
# ^UnLicenseTextRB
在卸载 $(^NameDA)之前请检阅授权协议。如果你接受协议中所有条款,选择下方的第一个选项。 $_CLICK
# ^Custom
自定义
# ^ComponentsText
勾选你想要安装的组件,并解除勾选你不希望安装的组件。 $_CLICK
# ^ComponentsSubText1
选定安装的类型: 
# ^ComponentsSubText2_NoInstTypes
选定安装的组件: 
# ^ComponentsSubText2
或者,自定义选定想安装的组件: 
# ^UnComponentsText
勾选你想要卸载的组件,并解除勾选你不希望卸载的组件。 $_CLICK
# ^UnComponentsSubText1
选择卸载的类型: 
# ^UnComponentsSubText2_NoInstTypes
选择要卸载的组件: 
# ^UnComponentsSubText2
或是,选择想要卸载的可选项组件: 
# ^DirText
选择 $(^NameDA)要安装的文件夹。要安装到其他文件夹,单击 [浏览(B)] 并选择该文件夹。\r\n\r\n$_CLICK
# ^DirSubText
目标文件夹
# ^DirBrowseText
选择要安装 $(^NameDA)的文件夹位置: 
# ^UnDirText
卸载向导会将 $(^NameDA)从下面的文件夹中卸载。要卸载不同文件夹中的内容,单击 [浏览(B)] 并选择其他的文件夹。 $_CLICK
# ^UnDirSubText
""
# ^UnDirBrowseText
选择要卸载 $(^NameDA)的文件夹位置: 
# ^SpaceAvailable
"可用空间: "
# ^SpaceRequired
"所需空间: "
# ^UninstallingText
这个向导将从你的电脑卸载 $(^NameDA)。 $_CLICK
# ^UninstallingSubText
卸载目录: 
# ^FileError
不能打开要写入的文件: \r\n\t"$0"\r\n单击 [Abort] 放弃安装,\r\n [Retry] 重新尝试写入文件,或\r\n [Ignore] 忽略这个文件。
# ^FileError_NoIgnore
不能打开要写入的文件: \r\n\t"$0"\r\n单击 [Retry] 重新尝试写入文件,或\r\n [Cancel] 取消安装。
# ^CantWrite
"无法写入: "
# ^CopyFailed
"复制失败 "
# ^CopyTo
"复制到: "
# ^Registering
"正在注册: "
# ^Unregistering
"正在解除注册: "
# ^SymbolNotFound
"无法找到符号: "
# ^CouldNotLoad
"无法加载: "
# ^CreateFolder
"创建文件夹: " 
# ^CreateShortcut
"创建快捷方式: "
# ^CreatedUninstaller
"创建卸载程序: "
# ^Delete
"删除文件: "
# ^DeleteOnReboot
"重新启动后删除: "
# ^ErrorCreatingShortcut
"正在创建快捷方式时发生错误: "
# ^ErrorCreating
"正在创建时发生错误: "
# ^ErrorDecompressing
"正在解压缩数据发生错误!已损坏的安装程序?"
# ^ErrorRegistering
"正在注册 DLL 时发生错误"
# ^ExecShell
"运行外部程序: "
# ^Exec
"运行: "
# ^Extract
"抽取: "
# ^ErrorWriting
"抽取: 无法写入文件 "
# ^InvalidOpcode
"安装损毁: 无效的操作代码 "
# ^NoOLE
"没有 OLE 用于: "
# ^OutputFolder
"输出目录: "
# ^RemoveFolder
"移除目录: "
# ^RenameOnReboot
"重新启动后重命名: "
# ^Rename
"重命名: "
# ^Skipped
"已跳过: "
# ^CopyDetails
"复制细节到剪贴板 "
# ^LogInstall
"日志安装进程"
# byte
B
# kilo
K
# mega
M
# giga
G

CustomizedChinese.nsh 代码如下

;Language: 'Chinese (Customized)' (2052)
;Translator: Tsybius2014
;Revision date: 2016/04/06
;Verified by: 

!insertmacro LANGFILE "CustomizedChinese" "Chinese (Customized)"

!ifdef MUI_WELCOMEPAGE
  ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "欢迎使用 $(^NameDA)安装向导"
  ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "本向导将指引您完成 $(^NameDA)的安装。$\r$\n$\r$\n在开始安装之前,建议关闭其他所有应用程序。此操作将允许“安装程序”更新指定的系统文件,而不需要重新启动您的电脑。$\r$\n$\r$\n若您的电脑已安装 $(^NameDA)程序,请先行卸载再进行安装。$\r$\n$\r$\n$_CLICK"
!endif

!ifdef MUI_UNWELCOMEPAGE
  ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TITLE "欢迎使用 $(^NameDA)卸载向导"
  ${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "本向导将指引您完成 $(^NameDA)的卸载。$\r$\n$\r$\n在开始卸载之前,请确认 $(^NameDA)已经关闭。$\r$\n$\r$\n$_CLICK"
!endif

!ifdef MUI_LICENSEPAGE
  ${LangFileString} MUI_TEXT_LICENSE_TITLE "授权协议"
  ${LangFileString} MUI_TEXT_LICENSE_SUBTITLE "在安装 $(^NameDA)之前,请阅读下面的授权协议。"
  ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM "如果您接受本协议,单击 [我接受(I)] 继续安装。如果您选定 [取消(C)] ,安装程序将会关闭。必须接受此协议后才能安装 $(^NameDA)。"
  ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果您接受“授权协议”,选中下方的勾选框,选中后才能安装 $(^NameDA)。$_CLICK"
  ${LangFileString} MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果您接受“授权协议”,选择下方第一个选项。必须要接受协议才能安装 $(^NameDA)。$_CLICK"
!endif

!ifdef MUI_UNLICENSEPAGE
  ${LangFileString} MUI_UNTEXT_LICENSE_TITLE "授权协议"
  ${LangFileString} MUI_UNTEXT_LICENSE_SUBTITLE "在卸载 $(^NameDA)之前,请阅读下面的责任条款。"
  ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM "如果您接受本协议,单击 [我接受(I)] 继续卸载。如果您选定 [取消(C)] ,安装程序将会关闭。必须要接受此协议后才能卸载 $(^NameDA)。"
  ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "如果您接受“授权协议”,单击下方的勾选框。必须要接受协议才能卸载 $(^NameDA)。$_CLICK"
  ${LangFileString} MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "如果您接受“授权协议”,选择下方第一个选项。必须要接受协议才能卸载 $(^NameDA)。$_CLICK"
!endif

!ifdef MUI_LICENSEPAGE | MUI_UNLICENSEPAGE
  ${LangFileString} MUI_INNERTEXT_LICENSE_TOP "按 [PgDn] 阅读“授权协议”的其余部分。"
!endif

!ifdef MUI_COMPONENTSPAGE
  ${LangFileString} MUI_TEXT_COMPONENTS_TITLE "选择组件"
  ${LangFileString} MUI_TEXT_COMPONENTS_SUBTITLE "选择您想要安装 $(^NameDA)的那些功能。"
!endif

!ifdef MUI_UNCOMPONENTSPAGE
  ${LangFileString} MUI_UNTEXT_COMPONENTS_TITLE "选定组件"
  ${LangFileString} MUI_UNTEXT_COMPONENTS_SUBTITLE "选定 $(^NameDA)当中您想要卸载的功能。"
!endif

!ifdef MUI_COMPONENTSPAGE | MUI_UNCOMPONENTSPAGE
  ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "描述"
  !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
    ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "移动您的鼠标指针到组件之上,便可见到它的描述。"
  !else
    ${LangFileString} MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "移动您的鼠标指针到组件之上,便可见到它的描述。"
  !endif
!endif

!ifdef MUI_DIRECTORYPAGE
  ${LangFileString} MUI_TEXT_DIRECTORY_TITLE "选择安装位置"
  ${LangFileString} MUI_TEXT_DIRECTORY_SUBTITLE "选择 $(^NameDA)的安装文件夹。"
!endif

!ifdef MUI_UNDIRECTORYPAGE
  ${LangFileString} MUI_UNTEXT_DIRECTORY_TITLE "选定卸载位置"
  ${LangFileString} MUI_UNTEXT_DIRECTORY_SUBTITLE "选定 $(^NameDA)要卸载的文件夹。"
!endif

!ifdef MUI_INSTFILESPAGE
  ${LangFileString} MUI_TEXT_INSTALLING_TITLE "正在安装"
  ${LangFileString} MUI_TEXT_INSTALLING_SUBTITLE "$(^NameDA)正在安装,请等候..."
  ${LangFileString} MUI_TEXT_FINISH_TITLE "安装完成"
  ${LangFileString} MUI_TEXT_FINISH_SUBTITLE "安装成功。"
  ${LangFileString} MUI_TEXT_ABORT_TITLE "安装己中止"
  ${LangFileString} MUI_TEXT_ABORT_SUBTITLE "安装失败。"
!endif

!ifdef MUI_UNINSTFILESPAGE
  ${LangFileString} MUI_UNTEXT_UNINSTALLING_TITLE "正在卸载"
  ${LangFileString} MUI_UNTEXT_UNINSTALLING_SUBTITLE " $(^NameDA)正在卸载,请等候..."
  ${LangFileString} MUI_UNTEXT_FINISH_TITLE "卸载已完成"
  ${LangFileString} MUI_UNTEXT_FINISH_SUBTITLE "卸载成功。"
  ${LangFileString} MUI_UNTEXT_ABORT_TITLE "卸载已中止"
  ${LangFileString} MUI_UNTEXT_ABORT_SUBTITLE "卸载失败。"
!endif

!ifdef MUI_FINISHPAGE
  ${LangFileString} MUI_TEXT_FINISH_INFO_TITLE "正在完成 $(^NameDA)安装向导"
  ${LangFileString} MUI_TEXT_FINISH_INFO_TEXT " $(^NameDA)已安装在您的电脑。$\r$\n$\r$\n单击 [完成(F)] 关闭此向导。"
  ${LangFileString} MUI_TEXT_FINISH_INFO_REBOOT "您的系统需要重新启动,以便完成 $(^NameDA)的安装。现在要重新启动吗?"
!endif

!ifdef MUI_UNFINISHPAGE
  ${LangFileString} MUI_UNTEXT_FINISH_INFO_TITLE "正在完成 $(^NameDA)卸载向导"
  ${LangFileString} MUI_UNTEXT_FINISH_INFO_TEXT " $(^NameDA)已从您的电脑卸载。$\r$\n$\r$\n单击 [完成] 关闭这个向导。"
  ${LangFileString} MUI_UNTEXT_FINISH_INFO_REBOOT "电脑需要重新启动,以便完成 $(^NameDA)的卸载。现在想要重新启动吗?"
!endif

!ifdef MUI_FINISHPAGE | MUI_UNFINISHPAGE
  ${LangFileString} MUI_TEXT_FINISH_REBOOTNOW "是,现在重新启动(&Y)"
  ${LangFileString} MUI_TEXT_FINISH_REBOOTLATER "否,我稍后再自行重新启动(&N)"
  ${LangFileString} MUI_TEXT_FINISH_RUN "运行 $(^NameDA)(&R)"
  ${LangFileString} MUI_TEXT_FINISH_SHOWREADME "显示“自述文件”(&M)"
  ${LangFileString} MUI_BUTTONTEXT_FINISH "完成(&F)"  
!endif

!ifdef MUI_STARTMENUPAGE
  ${LangFileString} MUI_TEXT_STARTMENU_TITLE "选择“开始菜单”文件夹"
  ${LangFileString} MUI_TEXT_STARTMENU_SUBTITLE "选择“开始菜单”文件夹,用于创建程序的快捷方式。"
  ${LangFileString} MUI_INNERTEXT_STARTMENU_TOP "选择“开始菜单”文件夹,创建程序的快捷方式。如输入的菜单名称不存在于“开始菜单”中,向导会自动创建新文件夹。"
  ${LangFileString} MUI_INNERTEXT_STARTMENU_CHECKBOX "不创建快捷方式(&N)"
!endif

!ifdef MUI_UNCONFIRMPAGE
  ${LangFileString} MUI_UNTEXT_CONFIRM_TITLE "卸载 $(^NameDA)"
  ${LangFileString} MUI_UNTEXT_CONFIRM_SUBTITLE "从您的电脑卸载 $(^NameDA)"
!endif

!ifdef MUI_ABORTWARNING
  ${LangFileString} MUI_TEXT_ABORTWARNING "您确定要退出 $(^Name)安装程序吗?"
!endif

!ifdef MUI_UNABORTWARNING
  ${LangFileString} MUI_UNTEXT_ABORTWARNING "您确定要退出 $(^Name)卸载吗?"
!endif

将这两个文件,放置到下面目录:

NSIS安装目录\Contrib\Language files

再在NSIS脚本中加入这句话:

!insertmacro MUI_LANGUAGE "CustomizedChinese"

就可以应用这个新的语言包了。假定某程序定义了PRODUCT_NAME如下:

!define PRODUCT_NAME "X系统"

使用makensisw.exe打包完毕后,就可以看到新语言包的效果了!

注意:

1、在nsh脚本中使用$(^NameDA)和$(^Name)替换PRODUCT_NAME时,NSIS程序会在名称后面自动添加一个空格。

2、一个安装向导并不是所有的文字描述都被写到语言包里,比如有些自定义的MessageBox的文字描述,就需要在NSIS脚本中自行编写。

END

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!