公司的安装/卸载程序要求支持多语言,于是就想搞清楚NSIS到底是怎么支持多语言的。在参考安装目录中的示例脚本时,觉得它太过啰嗦,于是自己写了一个,以便简略地说明它是如何处理多语言的。
点击(此处)折叠或打开
- OutFile Install.exe
- XPStyle on
- ShowInstDetails show
- ShowUninstDetails show
- RequestExecutionLevel user
- Page instfiles
- LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
- LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf"
- LangString Message ${LANG_ENGLISH} "English message"
- LangString Message ${LANG_SIMPCHINESE} "中文消息"
- ; 安装
- Function .onInit
- Push ${LANG_ENGLISH}
- ;Push ${LANG_SIMPCHINESE}
- Pop $LANGUAGE
- FunctionEnd
- Section "Install"
- MessageBox MB_OK $(Message)
- WriteUninstaller "$EXEDIR\Uninstall.exe"
- SectionEnd
- ; 卸载
- Function un.onInit
- Push ${LANG_ENGLISH}
- ;Push ${LANG_SIMPCHINESE}
- Pop $LANGUAGE
- FunctionEnd
- Section "Uninstall"
- MessageBox MB_OK $(Message)
- ;Push ${LANG_SIMPCHINESE}
- ;Pop $LANGUAGE
- ;MessageBox MB_OK $(Message)
- SectionEnd
简要说明如下:
LoadLanguageFile用于装载语言文件,语言文件中定义了NSIS自己使用的全局变量,如SimpChinese.nsh里面的定义:${LangFileString} MUI_TEXT_LICENSE_TITLE "许可证协议"
LangString用于指定用户变量对应的、语言相关的字符串,也就是一个变量可以对应多个字符串,显示时究竟用哪一个根据当前语言来,也就是根据$LANGUAGE来。类似C++里面的map或C#里面的字典:Display(SomeMsg[Language]);
$LANGUAGE是NSIS自身的全局变量,设置它就等于设置了安装/卸载界面上显示的语言,以及用户变量对应的语言。请在(un).onInit函数里面指定该值,在节中指定无效。注意在(un).onInit函数里面弹消息框的话是不能按语言来显示文本的,因为此时还没执行LangString,也就是NSIS的多语言机制还没起作用。
阅读(7154) | 评论(0) | 转发(0) |