这两天一位同学在留言上问多语言的问题,轻狂这两天比较忙,原本没想回复,但有感于这位同学的好学精神,还是抽时间写了一个示例脚本。当然还不太完善,不过只要有了思路,其他都不是问题了,对吧?
初步实现了:
根据选择的语言安装时显示不同的程序名称
根据选择的语言安装时释放不同的程序文件
根据选择的语言卸载时显示不同的程序名称及提示文字
直接贴出脚本,希望转载的同学注明出处——轻狂志www.flighty.cn。
!define PRODUCT_NAME "" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "My company, Inc." !define PRODUCT_WEB_SITE "http://www.flighty.cn" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\myapp" !define PRODUCT_UNINST_ROOT_KEY "HKLM" SetCompressor lzma RequestExecutionLevel admin !include "MUI2.nsh" !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; 语言选择窗口常量设置 !define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_INSTFILES ; 语言设置 !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "SimpChinese" ; 语言相关字符串 LangString LNG_AppName ${LANG_ENGLISH} "flighty'app" LangString LNG_AppName ${LANG_SIMPCHINESE} "轻狂的程序" LangString UNINSTALL_CONFIRM ${LANG_ENGLISH} "Thank you very much! $(^Name) has been successfully removed." LangString UNINSTALL_CONFIRM ${LANG_SIMPCHINESE} "非常感謝您的使用! $(^Name) 已成功地从您的计算机中移除。" Name "$(LNG_AppName)" OutFile "Setup.exe" InstallDir "$PROGRAMFILES\My application" ShowInstDetails show ShowUnInstDetails show Section "MainSection" SEC01 StrCpy $0 $(LNG_AppName) ${If} $0 == "flighty'app" MessageBox MB_OK "ENGLISH" ${Else} MessageBox MB_OK "简体中文" ${EndIf} SectionEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\My application" CreateShortCut "$SMPROGRAMS\My application\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\My application\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd Section Uninstall Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$SMPROGRAMS\My application\Uninstall.lnk" Delete "$SMPROGRAMS\My application\Website.lnk" RMDir "$SMPROGRAMS\My application" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose true SectionEnd Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(UNINSTALL_CONFIRM)" FunctionEnd |