diff --git a/packaging/windows/installer/ConfigureInstallerNsis.cmake b/packaging/windows/installer/ConfigureInstallerNsis.cmake index 45085c4069..9d4e18a32c 100644 --- a/packaging/windows/installer/ConfigureInstallerNsis.cmake +++ b/packaging/windows/installer/ConfigureInstallerNsis.cmake @@ -1,25 +1,33 @@ if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") set(INSTALLER_NSIS_IS_32_BIT NO) else() set(INSTALLER_NSIS_IS_32_BIT YES) endif() configure_file( ${CMAKE_CURRENT_LIST_DIR}/MakeInstallerNsis.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/MakeinstallerNsis.cmake @ONLY ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MakeinstallerNsis.cmake DESTINATION ${CMAKE_INSTALL_PREFIX} ) install(FILES ${CMAKE_CURRENT_LIST_DIR}/installer_krita.nsi ${CMAKE_CURRENT_LIST_DIR}/license_gpl-3.0.rtf DESTINATION ${CMAKE_INSTALL_PREFIX}/installer ) install(FILES ${CMAKE_CURRENT_LIST_DIR}/include/FileExists2.nsh ${CMAKE_CURRENT_LIST_DIR}/include/IsFileInUse.nsh DESTINATION ${CMAKE_INSTALL_PREFIX}/installer/include ) + +install( + FILES + ${CMAKE_CURRENT_LIST_DIR}/translations/English.nsh + ${CMAKE_CURRENT_LIST_DIR}/translations/TradChinese.nsh + ${CMAKE_CURRENT_LIST_DIR}/translations/SimpChinese.nsh + DESTINATION ${CMAKE_INSTALL_PREFIX}/installer/translations +) diff --git a/packaging/windows/installer/MakeInstallerNsis.cmake.in b/packaging/windows/installer/MakeInstallerNsis.cmake.in index a4603609dc..76b4db226e 100644 --- a/packaging/windows/installer/MakeInstallerNsis.cmake.in +++ b/packaging/windows/installer/MakeInstallerNsis.cmake.in @@ -1,166 +1,167 @@ cmake_minimum_required(VERSION 3.0 FATAL_ERROR) set(ARCH_IS_32_BIT @INSTALLER_NSIS_IS_32_BIT@) if(ARCH_IS_32_BIT) set(ARG_ARCH "/DKRITA_INSTALLER_32") set(FILENAME_ARCH "-x86") else() set(ARG_ARCH "/DKRITA_INSTALLER_64") set(FILENAME_ARCH "-x64") endif() if(NOT IS_DIRECTORY "${KRITA_PACKAGE_ROOT}") message(FATAL_ERROR "KRITA_PACKAGE_ROOT not set") endif() if(NOT DEFINED OUTPUT_FILEPATH) set(OUTPUT_FILEPATH "${CMAKE_CURRENT_BINARY_DIR}/krita-setup${FILENAME_ARCH}.exe") endif() if(NOT DEFINED DOWNLOAD_DIR) set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() # Download and find NSIS if(NOT DEFINED NO_DOWNLOAD_NSIS) set(DOWNLOAD_NSIS_VERSION "3.02.1") message(STATUS "Downloading NSIS...") if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}") file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}") endif() file(DOWNLOAD "https://files.kde.org/krita/build/dependencies/nsis-${DOWNLOAD_NSIS_VERSION}.zip" "${DOWNLOAD_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}.zip" EXPECTED_HASH SHA1=06c791f9cf668d945564316c9c947ebb4cc469e9 ) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz "${DOWNLOAD_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}.zip" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" RESULT_VARIABLE result_extract ) if(NOT result_extract EQUAL 0) message(FATAL_ERROR "Failed to extract NSIS") endif() if(NOT IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}") message(FATAL_ERROR "Failed to find NSIS after extracting") endif() find_program(TOOL_MAKENSIS NAMES makensis.exe PATHS "${CMAKE_CURRENT_BINARY_DIR}/nsis-${DOWNLOAD_NSIS_VERSION}" NO_DEFAULT_PATH ) else() find_program(TOOL_MAKENSIS NAMES makensis.exe HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\NSIS]" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS]" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\NSIS\\Unicode]" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS\\Unicode]" ) endif() if(NOT TOOL_MAKENSIS) message(FATAL_ERROR "Failed to find makensis.exe") endif() execute_process(COMMAND "${TOOL_MAKENSIS}" "/version" OUTPUT_VARIABLE MAKENSIS_VERSION ) # Check version is v3.* if(NOT MAKENSIS_VERSION MATCHES "^v3\\.") message(FATAL_ERROR "Expected NSIS version v3.*, got ${MAKENSIS_VERSION}") endif() message(STATUS "NSIS version ${MAKENSIS_VERSION}") # Check if package contains debug symbols file(TO_CMAKE_PATH "${KRITA_PACKAGE_ROOT}" KRITA_PACKAGE_ROOT_PATCHED) file(GLOB_RECURSE globForDebugFiles "${KRITA_PACKAGE_ROOT_PATCHED}/*.debug" ) if(globForDebugFiles) if(REMOVE_DEBUG) message(STATUS "Removing debug symbols") foreach(debugFileItem ${globForDebugFiles}) get_filename_component(debugFileDir "${debugFileItem}" DIRECTORY) get_filename_component(debugDirName "${debugFileDir}" NAME) if(debugDirName STREQUAL ".debug") if(EXISTS "${debugFileDir}") message(STATUS "Deleting ${debugFileDir}") file(REMOVE_RECURSE "${debugFileDir}") endif() else() message(STATUS "Deleting ${debugFileItem}") file(REMOVE "${debugFileItem}") endif() endforeach() else() message(FATAL_ERROR "${KRITA_PACKAGE_ROOT} seems to contain debug symbols. Set REMOVE_DEBUG to true if you want to remove them.") endif() endif() # Download installer script package message(STATUS "Downloading NSIS script package...") if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/krita-nsis") file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/krita-nsis") endif() file(DOWNLOAD "https://github.com/alvinhochun/KritaShellExtension/releases/download/v1.2.4b/krita-nsis-v1.2.4b.zip" "${DOWNLOAD_DIR}/krita-nsis.zip" EXPECTED_HASH SHA1=43c5bade13fb885e8546dac4486b8e2df62dc692 ) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz "${DOWNLOAD_DIR}/krita-nsis.zip" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" RESULT_VARIABLE result_extract ) if(NOT result_extract EQUAL 0) message(FATAL_ERROR "Failed to extract krita-nsis package") endif() if(NOT IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/krita-nsis") message(FATAL_ERROR "Failed to find krita-nsis after extracting") endif() # Place Krita installer files in the right place file(COPY "${CMAKE_CURRENT_LIST_DIR}/installer/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/krita-nsis/" FILES_MATCHING PATTERN "*" ) # Detect FFmpeg (currently optional) if(EXISTS "${KRITA_PACKAGE_ROOT}/bin/ffmpeg.exe" AND EXISTS "${KRITA_PACKAGE_ROOT}/bin/ffmpeg_LICENSE.txt" AND EXISTS "${KRITA_PACKAGE_ROOT}/bin/ffmpeg_README.txt" ) set(ARG_HAS_FFMPEG "/DHAS_FFMPEG") else() set(ARG_HAS_FFMPEG "/DNO_HAS_FFMPEG") endif() # Build installer message(STATUS "Building installer...") set(KRITA_VERSION_NUMBER "@KRITA_STABLE_VERSION_MAJOR@.@KRITA_STABLE_VERSION_MINOR@.@KRITA_VERSION_RELEASE@.@KRITA_VERSION_REVISION@") set(KRITA_VERSION_STRING "@KRITA_VERSION_STRING@") set(KRITA_GIT_SHA1_STRING "@KRITA_GIT_SHA1_STRING@") if(KRITA_GIT_SHA1_STRING) set(KRITA_VERSION_STRING "${KRITA_VERSION_STRING} (git ${KRITA_GIT_SHA1_STRING})") endif() execute_process(COMMAND "${TOOL_MAKENSIS}" "${ARG_ARCH}" "/DKRITA_VERSION=${KRITA_VERSION_NUMBER}" "/DKRITA_VERSION_DISPLAY=${KRITA_VERSION_STRING}" "/DKRITA_INSTALLER_OUTPUT_DIR=" "/DKRITA_INSTALLER_OUTPUT_NAME=${OUTPUT_FILEPATH}" "/DKRITA_PACKAGE_ROOT=${KRITA_PACKAGE_ROOT}" "${ARG_HAS_FFMPEG}" "/XSetCompressor /SOLID lzma" "/V3" + "/INPUTCHARSET" "UTF8" "${CMAKE_CURRENT_BINARY_DIR}/krita-nsis/installer_krita.nsi" RESULT_VARIABLE result_makensis ) if(NOT result_makensis EQUAL 0) message(FATAL_ERROR "Failed to build installer") endif() message(STATUS "Built installer") diff --git a/packaging/windows/installer/installer_krita.nsi b/packaging/windows/installer/installer_krita.nsi index 20819075e6..27d8aad31d 100644 --- a/packaging/windows/installer/installer_krita.nsi +++ b/packaging/windows/installer/installer_krita.nsi @@ -1,662 +1,646 @@ !ifndef KRITA_INSTALLER_32 & KRITA_INSTALLER_64 !error "Either one of KRITA_INSTALLER_32 or KRITA_INSTALLER_64 must be defined." !endif !ifdef KRITA_INSTALLER_32 & KRITA_INSTALLER_64 !error "Only one of KRITA_INSTALLER_32 or KRITA_INSTALLER_64 should be defined." !endif !ifndef KRITA_PACKAGE_ROOT !error "KRITA_PACKAGE_ROOT should be defined and point to the root of the package files." !endif !ifdef KRITA_INSTALLER_64 !define KRITA_INSTALLER_BITNESS 64 !else !define KRITA_INSTALLER_BITNESS 32 !endif Unicode true -ManifestDPIAware true +# Enabling DPI awareness creates awful CJK text in some sizes, so don't enable it. +ManifestDPIAware false # Krita constants (can be overridden in command line params) !define /ifndef KRITA_VERSION "0.0.0.0" !define /ifndef KRITA_VERSION_DISPLAY "test-version" #!define /ifndef KRITA_VERSION_GIT "" !define /ifndef KRITA_INSTALLER_OUTPUT_DIR "" !ifdef KRITA_INSTALLER_64 !define /ifndef KRITA_INSTALLER_OUTPUT_NAME "krita_x64_setup.exe" !else !define /ifndef KRITA_INSTALLER_OUTPUT_NAME "krita_x86_setup.exe" !endif # Krita constants (fixed) !if "${KRITA_INSTALLER_OUTPUT_DIR}" == "" !define KRITA_INSTALLER_OUTPUT "${KRITA_INSTALLER_OUTPUT_NAME}" !else !define KRITA_INSTALLER_OUTPUT "${KRITA_INSTALLER_OUTPUT_DIR}\${KRITA_INSTALLER_OUTPUT_NAME}" !endif !define KRTIA_PUBLISHER "Krita Foundation" !ifdef KRITA_INSTALLER_64 !define KRITA_PRODUCTNAME "Krita (x64)" !define KRITA_UNINSTALL_REGKEY "Krita_x64" !else !define KRITA_PRODUCTNAME "Krita (x86)" !define KRITA_UNINSTALL_REGKEY "Krita_x86" !endif VIProductVersion "${KRITA_VERSION}" VIAddVersionKey "CompanyName" "${KRTIA_PUBLISHER}" VIAddVersionKey "FileDescription" "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} Setup" VIAddVersionKey "FileVersion" "${KRITA_VERSION}" VIAddVersionKey "InternalName" "${KRITA_INSTALLER_OUTPUT_NAME}" VIAddVersionKey "LegalCopyright" "${KRTIA_PUBLISHER}" VIAddVersionKey "OriginalFileName" "${KRITA_INSTALLER_OUTPUT_NAME}" VIAddVersionKey "ProductName" "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} Setup" VIAddVersionKey "ProductVersion" "${KRITA_VERSION}" BrandingText "[NSIS ${NSIS_VERSION}] ${KRITA_PRODUCTNAME} ${KRITA_VERSION}" Name "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}" OutFile ${KRITA_INSTALLER_OUTPUT} !ifdef KRITA_INSTALLER_64 InstallDir "$PROGRAMFILES64\Krita (x64)" !else InstallDir "$PROGRAMFILES32\Krita (x86)" !endif XPstyle on ShowInstDetails show ShowUninstDetails show Var KritaStartMenuFolder Var CreateDesktopIcon !include MUI2.nsh !define MUI_FINISHPAGE_NOAUTOCLOSE # Installer Pages !insertmacro MUI_PAGE_WELCOME !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "license_gpl-3.0.rtf" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_COMPONENTS !define MUI_PAGE_CUSTOMFUNCTION_PRE func_ShellExLicensePage_Init -!define MUI_PAGE_HEADER_TEXT "License Agreement (Krita Shell Extension)" +!define MUI_PAGE_HEADER_TEXT "$(ShellExLicensePageHeader)" !insertmacro MUI_PAGE_LICENSE "license.rtf" !define MUI_STARTMENUPAGE_DEFAULTFOLDER "Krita" !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Krita" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "StartMenuFolder" !define MUI_STARTMENUPAGE_NODISABLE !insertmacro MUI_PAGE_STARTMENU Krita $KritaStartMenuFolder -Page Custom func_DesktopShortcutPage_Init Page Custom func_BeforeInstallPage_Init !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH # Uninstaller Pages +!define MUI_PAGE_CUSTOMFUNCTION_PRE un.func_UnintallFirstpage_Init !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES +# Languages !insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "SimpChinese" !include Sections.nsh !include LogicLib.nsh !include x64.nsh !include WinVer.nsh !include WordFunc.nsh !define KRITA_SHELLEX_DIR "$INSTDIR\shellex" !include "include\FileExists2.nsh" !include "include\IsFileInUse.nsh" !include "krita_versions_detect.nsh" !include "krita_shell_integration.nsh" Var KritaMsiProductX86 Var KritaMsiProductX64 Var KritaNsisVersion Var KritaNsisBitness Var KritaNsisInstallLocation Var PrevShellExInstallLocation Var PrevShellExStandalone Var UninstallShellExStandalone Section "-Remove_shellex" SEC_remove_shellex ${If} $PrevShellExInstallLocation != "" ${AndIf} $PrevShellExStandalone == 1 ${AndIf} $KritaNsisVersion == "" ${AndIf} ${FileExists} "$PrevShellExInstallLocation\uninstall.exe" push $R0 - DetailPrint "Removing Krita Shell Integration..." + DetailPrint "$(RemovingShellEx)" SetDetailsPrint listonly ExecWait "$PrevShellExInstallLocation\uninstall.exe /S _?=$PrevShellExInstallLocation" $R0 ${If} $R0 != 0 ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita Shell Integration." + MessageBox MB_OK|MB_ICONSTOP "$(RemoveShellExFailed)" ${EndIf} SetDetailsPrint both - DetailPrint "Failed to remove Krita Shell Integration." + DetailPrint "$(RemoveShellExFailed)" Abort ${EndIf} Delete "$PrevShellExInstallLocation\uninstall.exe" RMDir /REBOOTOK "$PrevShellExInstallLocation" SetRebootFlag false SetDetailsPrint lastused - DetailPrint "Krita Shell Integration removed." + DetailPrint "$(RemoveShellExDone)" pop $R0 ${EndIf} SectionEnd -Section "Remove Old Version" SEC_remove_old_version +Section "$(SectionRemoveOldVer)" SEC_remove_old_version ${If} $KritaNsisInstallLocation != "" ${AndIf} ${FileExists} "$KritaNsisInstallLocation\uninstall.exe" push $R0 - DetailPrint "Removing previous version..." + DetailPrint "$(RemovingOldVer)" SetDetailsPrint listonly ExecWait "$KritaNsisInstallLocation\uninstall.exe /S _?=$KritaNsisInstallLocation" $R0 ${If} $R0 != 0 ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove previous version of Krita." + MessageBox MB_OK|MB_ICONSTOP "$(RemoveOldVerFailed)" ${EndIf} SetDetailsPrint both - DetailPrint "Failed to remove previous version of Krita." + DetailPrint "$(RemoveOldVerFailed)" Abort ${EndIf} Delete "$KritaNsisInstallLocation\uninstall.exe" RMDir /REBOOTOK "$KritaNsisInstallLocation" SetRebootFlag false SetDetailsPrint lastused - DetailPrint "Previous version removed." + DetailPrint "$(RemoveOldVerDone)" pop $R0 ${EndIf} SectionEnd Section "-Thing" SetOutPath $INSTDIR WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "DisplayName" "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteUninstaller $INSTDIR\uninstall.exe WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "DisplayVersion" "${KRITA_VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "DisplayIcon" "$\"$INSTDIR\shellex\krita.ico$\",0" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "URLInfoAbout" "https://krita.org/" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "Publisher" "${KRTIA_PUBLISHER}" #WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ # "EstimatedSize" 250000 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" \ "NoRepair" 1 # Registry entries for version recognition # InstallLocation: # Where krita is installed WriteRegStr HKLM "Software\Krita" \ "InstallLocation" "$INSTDIR" # Version: # Version of Krita WriteRegStr HKLM "Software\Krita" \ "Version" "${KRITA_VERSION}" # x64: # Set to 1 for 64-bit Krita, can be missing for 32-bit Krita !ifdef KRITA_INSTALLER_64 WriteRegDWORD HKLM "Software\Krita" \ "x64" 1 !else DeleteRegValue HKLM "Software\Krita" "x64" !endif + # InstallerLanguage: + # Language used by the installer (to be re-used for the uninstaller) + WriteRegStr HKLM "Software\Krita" \ + "InstallerLanguage" "$LANGUAGE" # StartMenuFolder: # Start Menu Folder # Handled by Modern UI 2.0 MUI_PAGE_STARTMENU SectionEnd Section "${KRITA_PRODUCTNAME}" SEC_product_main # TODO: Maybe switch to explicit file list? File /r /x ffmpeg.exe /x ffmpeg_README.txt /x ffmpeg_LICENSE.txt ${KRITA_PACKAGE_ROOT}\bin File /r ${KRITA_PACKAGE_ROOT}\lib File /r ${KRITA_PACKAGE_ROOT}\share File /r ${KRITA_PACKAGE_ROOT}\python SectionEnd Section "-Main_associate" CreateDirectory ${KRITA_SHELLEX_DIR} ${Krita_RegisterFileAssociation} "$INSTDIR\bin\krita.exe" SectionEnd Section "-Main_Shortcuts" # Placing this after Krita_RegisterFileAssociation to get the icon !insertmacro MUI_STARTMENU_WRITE_BEGIN Krita CreateDirectory "$SMPROGRAMS\$KritaStartMenuFolder" CreateShortcut "$SMPROGRAMS\$KritaStartMenuFolder\${KRITA_PRODUCTNAME}.lnk" "$INSTDIR\bin\krita.exe" "" "$INSTDIR\shellex\krita.ico" 0 - CreateDirectory "$SMPROGRAMS\$KritaStartMenuFolder\Tools" - CreateShortcut "$SMPROGRAMS\$KritaStartMenuFolder\Tools\Uninstall ${KRITA_PRODUCTNAME}.lnk" "$INSTDIR\Uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_END ${If} $CreateDesktopIcon == 1 # For the desktop icon, keep the name short and omit version info CreateShortcut "$DESKTOP\Krita.lnk" "$INSTDIR\bin\krita.exe" "" "$INSTDIR\shellex\krita.ico" 0 ${EndIf} SectionEnd -Section "Shell Integration" SEC_shellex +Section "$(SectionShellEx)" SEC_shellex ${If} ${RunningX64} ${Krita_RegisterComComonents} 64 ${EndIf} ${Krita_RegisterComComonents} 32 ${Krita_RegisterShellExtension} # ShellExtension\InstallLocation: # Where the shell extension is installed # If installed by Krita installer, this must point to shellex sub-dir WriteRegStr HKLM "Software\Krita\ShellExtension" \ "InstallLocation" "$INSTDIR\shellex" # ShellExtension\Version: # Version of the shell extension WriteRegStr HKLM "Software\Krita\ShellExtension" \ "Version" "${KRITASHELLEX_VERSION}" # ShellExtension\Standalone: # 0 = Installed by Krita installer # 1 = Standalone installer WriteRegDWORD HKLM "Software\Krita\ShellExtension" \ "Standalone" 0 # ShellExtension\KritaExePath: # Path to krita.exe as specified by user or by Krita installer # Empty if not specified WriteRegStr HKLM "Software\Krita\ShellExtension" \ "KritaExePath" "$INSTDIR\bin\krita.exe" SectionEnd !ifdef HAS_FFMPEG -Section "Bundled FFmpeg" SEC_ffmpeg +Section "$(SectionBundledFfmpeg)" SEC_ffmpeg File /oname=bin\ffmpeg.exe ${KRITA_PACKAGE_ROOT}\bin\ffmpeg.exe File /oname=bin\ffmpeg_LICENSE.txt ${KRITA_PACKAGE_ROOT}\bin\ffmpeg_LICENSE.txt File /oname=bin\ffmpeg_README.txt ${KRITA_PACKAGE_ROOT}\bin\ffmpeg_README.txt SectionEnd !endif Section "-Main_refreshShell" ${RefreshShell} SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_remove_shellex} "Remove previously installed Krita Shell Integration." - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_remove_old_version} "Remove previously installed Krita $KritaNsisVersion ($KritaNsisBitness-bit)." - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_product_main} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}$\r$\n$\r$\nVersion: ${KRITA_VERSION}" - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_shellex} "Shell Extension component to provide thumbnails and file properties display for Krita files.$\r$\n$\r$\nVersion: ${KRITASHELLEX_VERSION}" + #!insertmacro MUI_DESCRIPTION_TEXT ${SEC_remove_shellex} "Remove previously installed Krita Shell Integration." + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_remove_old_version} "$(SectionRemoveOldVerDesc)" + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_product_main} "$(SectionMainDesc)" + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_shellex} "$(SectionShellExDesc)" !ifdef HAS_FFMPEG - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_ffmpeg} "Install a bundled version of FFmpeg for exporting animations." + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_ffmpeg} "$(SectionBundledFfmpegDesc)" !endif !insertmacro MUI_FUNCTION_DESCRIPTION_END -Section "un.Shell Integration" +Section "un.$(SectionShellEx)" ${If} $UninstallShellExStandalone == 1 push $R0 - DetailPrint "Removing Krita Shell Integration..." + DetailPrint "$(RemovingShellEx)" SetDetailsPrint listonly ExecWait "$INSTDIR\shellex\uninstall.exe /S _?=$INSTDIR\shellex" $R0 ${If} $R0 != 0 ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita Shell Integration. Please report this bug!" + MessageBox MB_OK|MB_ICONSTOP "$(RemoveShellExFailed)" ${EndIf} SetDetailsPrint lastused SetDetailsPrint both - DetailPrint "Failed to remove Krita Shell Integration." + DetailPrint "$(RemoveShellExFailed)" ${EndIf} Delete "$INSTDIR\shellex\uninstall.exe" RMDir /REBOOTOK "$INSTDIR\shellex" SetDetailsPrint lastused - DetailPrint "Krita Shell Integration removed." + DetailPrint "$(RemoveShellExDone)" pop $R0 ${Else} ${Krita_UnregisterShellExtension} ${If} ${RunningX64} ${Krita_UnregisterComComonents} 64 ${EndIf} ${Krita_UnregisterComComonents} 32 ${EndIf} SectionEnd Section "un.Main_associate" # TODO: Conditional, use install log ${If} $UninstallShellExStandalone != 1 ${Krita_UnregisterFileAssociation} ${EndIf} SectionEnd Section "un.Main_Shortcuts" Delete "$DESKTOP\Krita.lnk" !insertmacro MUI_STARTMENU_GETFOLDER Krita $KritaStartMenuFolder - Delete "$SMPROGRAMS\$KritaStartMenuFolder\Tools\Uninstall ${KRITA_PRODUCTNAME}.lnk" - RMDir "$SMPROGRAMS\$KritaStartMenuFolder\Tools" Delete "$SMPROGRAMS\$KritaStartMenuFolder\${KRITA_PRODUCTNAME}.lnk" RMDir "$SMPROGRAMS\$KritaStartMenuFolder" SectionEnd Section "un.${KRITA_PRODUCTNAME}" # TODO: Maybe switch to explicit file list or some sort of install log? RMDir /r $INSTDIR\bin RMDir /r $INSTDIR\lib RMDir /r $INSTDIR\share RMDir /r $INSTDIR\python SectionEnd Section "un.Thing" RMDir /REBOOTOK $INSTDIR\shellex DeleteRegKey HKLM "Software\Krita" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${KRITA_UNINSTALL_REGKEY}" Delete $INSTDIR\uninstall.exe RMDir /REBOOTOK $INSTDIR SectionEnd Section "un.Main_refreshShell" ${RefreshShell} SectionEnd Function .onInit SetShellVarContext all !insertmacro SetSectionFlag ${SEC_product_main} ${SF_RO} !insertmacro SetSectionFlag ${SEC_product_main} ${SF_BOLD} !insertmacro SetSectionFlag ${SEC_remove_old_version} ${SF_RO} !ifdef HAS_FFMPEG !insertmacro SetSectionFlag ${SEC_ffmpeg} ${SF_RO} !endif StrCpy $CreateDesktopIcon 1 # Create desktop icon by default ${IfNot} ${AtLeastWin7} ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} requires Windows 7 or above." + MessageBox MB_OK|MB_ICONSTOP "$(MsgRequireWin7)" ${EndIf} Abort ${EndIf} + + ${IfNot} ${Silent} + # Language selection, seems that the order is predefined. + Push "" # This value is for languages auto count + Push ${LANG_ENGLISH} + Push English + Push ${LANG_TRADCHINESE} + Push "繁體中文" + Push ${LANG_SIMPCHINESE} + Push "简体中文" + Push A # = auto count languages + LangDLL::LangDialog "$(^SetupCaption)" "$(SetupLangPrompt)" + Pop $LANGUAGE + ${If} $LANGUAGE == "cancel" + Abort + ${Endif} + ${EndIf} + !ifdef KRITA_INSTALLER_64 ${If} ${RunningX64} SetRegView 64 ${Else} ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "You are running 32-bit Windows, but this installer installs Krita 64-bit which can only be installed on 64-bit Windows. Please download the 32-bit version on https://krita.org/" + MessageBox MB_OK|MB_ICONSTOP "$(Msg64bitOn32bit)" ${EndIf} Abort ${Endif} !else ${If} ${RunningX64} SetRegView 64 ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install 32-bit Krita on 64-bit Windows. You are strongly recommended to install the 64-bit version of Krita instead since it offers better performance.$\nIf you want to use the 32-bit version for testing, you should consider using the zip package instead.$\n$\nDo you still wish to install the 32-bit version of Krita?" \ + MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(Msg32bitOn64bit)" \ /SD IDYES \ IDYES lbl_allow32on64 Abort ${EndIf} lbl_allow32on64: ${Endif} !endif - # Detect other Krita versions + + # Detect ancient Krita versions ${DetectKritaMsi32bit} $KritaMsiProductX86 ${If} ${RunningX64} ${DetectKritaMsi64bit} $KritaMsiProductX64 - ${IfKritaMsi3Alpha} $KritaMsiProductX64 - ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Krita 3.0 Alpha 1 is installed. It must be removed before ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} can be installed.$\nDo you wish to remove it now?" \ - /SD IDYES \ - IDYES lbl_removeKrita3alpha - Abort - ${EndIf} - lbl_removeKrita3alpha: + ${EndIf} + ${If} $KritaMsiProductX86 != "" + ${OrIf} $KritaMsiProductX64 != "" + ${IfNot} ${Silent} + MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1 "$(MsgAncientVerMustBeRemoved)" \ + /SD IDYES \ + IDYES lbl_removeAncientVer + Abort + ${EndIf} + lbl_removeAncientVer: + ${If} $KritaMsiProductX64 != "" push $R0 ${MsiUninstall} $KritaMsiProductX64 $R0 ${If} $R0 != 0 ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita 3.0 Alpha 1." + ${IfKritaMsi3Alpha} $KritaMsiProductX64 + MessageBox MB_OK|MB_ICONSTOP "$(MsgKrita3alpha1RemoveFailed)" + ${Else} + MessageBox MB_OK|MB_ICONSTOP "$(MsgKrita2msi64bitRemoveFailed)" + ${EndIf} ${EndIf} Abort ${EndIf} pop $R0 StrCpy $KritaMsiProductX64 "" - ${ElseIf} $KritaMsiProductX64 != "" - ${If} $KritaMsiProductX86 != "" - ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Both 32-bit and 64-bit editions of Krita 2.9 or below are installed.$\nBoth must be removed before ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} can be installed.$\nDo you want to remove them now?" \ - /SD IDYES \ - IDYES lbl_removeKritaBoth - Abort - ${EndIf} - lbl_removeKritaBoth: - push $R0 - ${MsiUninstall} $KritaMsiProductX86 $R0 - ${If} $R0 != 0 - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita (32-bit)." - ${EndIf} - Abort - ${EndIf} - ${MsiUninstall} $KritaMsiProductX64 $R0 - ${If} $R0 != 0 - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita (64-bit)." - ${EndIf} - Abort - ${EndIf} - pop $R0 - StrCpy $KritaMsiProductX86 "" - StrCpy $KritaMsiProductX64 "" - ${Else} + ${EndIf} + ${If} $KritaMsiProductX86 != "" + push $R0 + ${MsiUninstall} $KritaMsiProductX86 $R0 + ${If} $R0 != 0 ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Krita (64-bit) 2.9 or below is installed.$\nIt must be removed before ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} can be installed.$\nDo you wish to remove it now?" \ - /SD IDYES \ - IDYES lbl_removeKritaX64 - Abort - ${EndIf} - lbl_removeKritaX64: - push $R0 - ${MsiUninstall} $KritaMsiProductX64 $R0 - ${If} $R0 != 0 - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita (64-bit)." - ${EndIf} - Abort + MessageBox MB_OK|MB_ICONSTOP "$(MsgKrita2msi32bitRemoveFailed)" ${EndIf} - pop $R0 - StrCpy $KritaMsiProductX64 "" - ${EndIf} - ${EndIf} - ${Endif} - ${If} $KritaMsiProductX86 != "" - ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Krita (32-bit) 2.9 or below is installed.$\nIt must be removed before ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} can be installed.$\nDo you wish to remove it now?" \ - /SD IDYES \ - IDYES lbl_removeKritaX86 - Abort - ${EndIf} - lbl_removeKritaX86: - push $R0 - ${MsiUninstall} $KritaMsiProductX86 $R0 - ${If} $R0 != 0 - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Failed to remove Krita (32-bit)." + Abort ${EndIf} - Abort + pop $R0 + StrCpy $KritaMsiProductX86 "" ${EndIf} - pop $R0 - StrCpy $KritaMsiProductX86 "" ${EndIf} ${DetectKritaNsis} $KritaNsisVersion $KritaNsisBitness $KritaNsisInstallLocation ${If} $KritaNsisVersion != "" push $R0 ${VersionCompare} "${KRITA_VERSION}" "$KritaNsisVersion" $R0 ${If} $R0 == 0 # Same version installed... probably ${If} $KritaNsisBitness == ${KRITA_INSTALLER_BITNESS} # Very likely the same version ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONINFORMATION "It appears that ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} is already installed.$\nThis setup will reinstall it." + MessageBox MB_OK|MB_ICONINFORMATION "$(MsgKritaSameVerReinstall)" ${EndIf} ${Else} # Very likely the same version but different arch ${IfNot} ${Silent} !ifdef KRITA_INSTALLER_64 - MessageBox MB_OK|MB_ICONINFORMATION "It appears that Krita 32-bit ${KRITA_VERSION_DISPLAY} is currently installed. This setup will replace it with the 64-bit version." + MessageBox MB_OK|MB_ICONINFORMATION "$(MsgKrita3264bitSwap)" !else - MessageBox MB_OK|MB_ICONEXCLAMATION "It appears that Krita 64-bit ${KRITA_VERSION_DISPLAY} is currently installed. This setup will replace it with the 32-bit version." + MessageBox MB_OK|MB_ICONEXCLAMATION "$(MsgKrita3264bitSwap)" !endif ${EndIf} ${EndIf} ${ElseIf} $R0 == 1 # Upgrade ${If} $KritaNsisBitness == ${KRITA_INSTALLER_BITNESS} # Silent about upgrade ${Else} # Upgrade but different arch ${IfNot} ${Silent} !ifdef KRITA_INSTALLER_64 - MessageBox MB_OK|MB_ICONINFORMATION "It appears that Krita 32-bit ($KritaNsisVersion) is currently installed. This setup will replace it with the 64-bit version of Krita ${KRITA_VERSION_DISPLAY}." + MessageBox MB_OK|MB_ICONINFORMATION "$(MsgKrita3264bitSwap)" !else - MessageBox MB_OK|MB_ICONEXCLAMATION "It appears that Krita 64-bit ($KritaNsisVersion) is currently installed. This setup will replace it with the 32-bit version of Krita ${KRITA_VERSION_DISPLAY}." + MessageBox MB_OK|MB_ICONEXCLAMATION "$(MsgKrita3264bitSwap)" !endif ${EndIf} ${EndIf} ${ElseIf} $R0 == 2 ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "It appears that a newer version of Krita $KritaNsisBitness-bit ($KritaNsisVersion) is currently installed. If you want to downgrade Krita to ${KRITA_VERSION_DISPLAY}, please uninstall the newer version manually before running this setup." + MessageBox MB_OK|MB_ICONSTOP "$(MsgKritaNewerAlreadyInstalled)" ${EndIf} Abort ${Else} ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONSTOP "Unexpected state" + MessageBox MB_OK|MB_ICONSTOP "Error: Unexpected state" ${EndIf} Abort ${EndIf} !insertmacro SetSectionFlag ${SEC_remove_old_version} ${SF_SELECTED} # Detect if Krita is running... ${If} ${IsFileinUse} "$KritaNsisInstallLocation\bin\krita.exe" ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONEXCLAMATION "Krita appears to be running. Please close Krita before running this installer." + MessageBox MB_OK|MB_ICONEXCLAMATION "$(MsgKritaRunning)" ${EndIf} + SetErrorLevel 10 Abort ${EndIf} pop $R0 ${Else} !insertmacro ClearSectionFlag ${SEC_remove_old_version} ${SF_SELECTED} SectionSetText ${SEC_remove_old_version} "" ${EndIf} # Detect standalone shell extension # TODO: Would it be possible to update Krita without replacing the standalone shellex? ClearErrors ReadRegStr $PrevShellExInstallLocation HKLM "Software\Krita\ShellExtension" "InstallLocation" #ReadRegStr $PrevShellExVersion HKLM "Software\Krita\ShellExtension" "Version" ReadRegDWORD $PrevShellExStandalone HKLM "Software\Krita\ShellExtension" "Standalone" #ReadRegStr $PrevShellExKritaExePath HKLM "Software\Krita\ShellExtension" "KritaExePath" ${If} ${Errors} # TODO: Assume no previous version installed or what? ${EndIf} ${If} $PrevShellExStandalone == 1 - ${IfNot} ${Silent} - MessageBox MB_YESNO|MB_ICONQUESTION "Krita Shell Integration was installed separately. It will be uninstalled automatically when installing Krita.$\nDo you want to continue?" \ - /SD IDYES \ - IDYES lbl_allowremoveshellex - Abort - ${EndIf} - lbl_allowremoveshellex: #!insertmacro SetSectionFlag ${SEC_remove_shellex} ${SF_SELECTED} ${Else} #!insertmacro ClearSectionFlag ${SEC_remove_shellex} ${SF_SELECTED} #SectionSetText ${SEC_remove_shellex} "" ${EndIf} FunctionEnd Function un.onInit SetShellVarContext all !ifdef KRITA_INSTALLER_64 ${If} ${RunningX64} SetRegView 64 ${Else} Abort ${Endif} !else ${If} ${RunningX64} SetRegView 64 ${Endif} !endif + + # Get and use installer language: + Push $0 + ReadRegStr $0 HKLM "Software\Krita" "InstallerLanguage" + ${If} $0 != "" + StrCpy $LANGUAGE $0 + ${EndIf} + Pop $0 + ReadRegDWORD $UninstallShellExStandalone HKLM "Software\Krita\ShellExtension" "Standalone" + ${If} ${Silent} + # Only check here if running in silent mode. It's otherwise checked in + # un.func_UnintallFirstpage_Init in order to display a prompt in the + # correct language. + ${If} ${IsFileinUse} "$INSTDIR\bin\krita.exe" + SetErrorLevel 10 + Abort + ${EndIf} + ${EndIf} +FunctionEnd + +Function un.func_UnintallFirstpage_Init ${If} ${IsFileinUse} "$INSTDIR\bin\krita.exe" ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONEXCLAMATION "Krita appears to be running. Please close Krita before uninstalling." + MessageBox MB_OK|MB_ICONEXCLAMATION "$(MsgUninstallKritaRunning)" ${EndIf} - Abort + SetErrorLevel 10 + Quit ${EndIf} FunctionEnd Function func_ShellExLicensePage_Init ${IfNot} ${SectionIsSelected} ${SEC_shellex} # Skip ShellEx license page if not selected Abort ${EndIf} FunctionEnd Var hwndChkDesktopIcon -Function func_DesktopShortcutPage_Init - push $R0 - - nsDialogs::Create 1018 - pop $R0 - ${If} $R0 == error - Abort - ${EndIf} - !insertmacro MUI_HEADER_TEXT "Desktop Icon" "Configure desktop shortcut icon." - - ${NSD_CreateLabel} 0u 0u 300u 20u "You can choose to create a shortcut icon on the desktop for launching Krita." - pop $R0 - - ${NSD_CreateCheckbox} 0u 20u 300u 10u "Create a desktop icon" - pop $hwndChkDesktopIcon - ${If} $CreateDesktopIcon == 1 - ${NSD_Check} $hwndChkDesktopIcon - ${Else} - ${NSD_Uncheck} $hwndChkDesktopIcon - ${EndIf} - ${NSD_OnClick} $hwndChkDesktopIcon func_DesktopShortcutPage_CheckChange - - nsDialogs::Show - - pop $R0 -FunctionEnd - Function func_DesktopShortcutPage_CheckChange ${NSD_GetState} $hwndChkDesktopIcon $CreateDesktopIcon ${If} $CreateDesktopIcon == ${BST_CHECKED} StrCpy $CreateDesktopIcon 1 ${Else} StrCpy $CreateDesktopIcon 0 ${EndIf} FunctionEnd Function func_BeforeInstallPage_Init push $R0 nsDialogs::Create 1018 pop $R0 ${If} $R0 == error Abort ${EndIf} - !insertmacro MUI_HEADER_TEXT "Confirm Installation" "Confirm installation of ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}." + !insertmacro MUI_HEADER_TEXT "$(ConfirmInstallPageHeader)" "$(ConfirmInstallPageDesc)" + + ${NSD_CreateLabel} 0u 0u 300u 20u "$(DesktopIconPageDesc2)" + pop $R0 + + ${NSD_CreateCheckbox} 0u 20u 300u 10u "$(DesktopIconPageCheckbox)" + pop $hwndChkDesktopIcon + ${If} $CreateDesktopIcon == 1 + ${NSD_Check} $hwndChkDesktopIcon + ${Else} + ${NSD_Uncheck} $hwndChkDesktopIcon + ${EndIf} + ${NSD_OnClick} $hwndChkDesktopIcon func_DesktopShortcutPage_CheckChange - ${NSD_CreateLabel} 0u 0u 300u 140u "Setup is ready to install ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}. You may review the install options before you continue.$\r$\n$\r$\n$_CLICK" + ${NSD_CreateLabel} 0u 40u 300u 140u "$(ConfirmInstallPageDesc2)" pop $R0 # TODO: Add install option summary for review? nsDialogs::Show pop $R0 FunctionEnd + + +# Strings +!include "translations\English.nsh" +!include "translations\TradChinese.nsh" +!include "translations\SimpChinese.nsh" diff --git a/packaging/windows/installer/translations/English.nsh b/packaging/windows/installer/translations/English.nsh new file mode 100644 index 0000000000..47a0922b31 --- /dev/null +++ b/packaging/windows/installer/translations/English.nsh @@ -0,0 +1,46 @@ +!define CURRENT_LANG ${LANG_ENGLISH} + +# Strings to show in the installation log: +LangString RemovingShellEx ${CURRENT_LANG} "Removing Krita Shell Integration..." +LangString RemoveShellExFailed ${CURRENT_LANG} "Failed to remove Krita Shell Integration." +LangString RemoveShellExDone ${CURRENT_LANG} "Krita Shell Integration removed." +LangString RemovingOldVer ${CURRENT_LANG} "Removing previous version..." +LangString RemoveOldVerFailed ${CURRENT_LANG} "Failed to remove previous version of Krita." +LangString RemoveOldVerDone ${CURRENT_LANG} "Previous version removed." + +# Strings for the component selection dialog: +LangString SectionRemoveOldVer ${CURRENT_LANG} "Remove Old Version" +LangString SectionRemoveOldVerDesc ${CURRENT_LANG} "Remove previously installed Krita $KritaNsisVersion ($KritaNsisBitness-bit)." +LangString SectionShellEx ${CURRENT_LANG} "Shell Integration" +LangString SectionShellExDesc ${CURRENT_LANG} "Shell Extension component to provide thumbnails and file properties display for Krita files.$\r$\n$\r$\nVersion: ${KRITASHELLEX_VERSION}" +LangString SectionMainDesc ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}$\r$\n$\r$\nVersion: ${KRITA_VERSION}" +# We don't actually bundle FFmpeg so these are not shown. +LangString SectionBundledFfmpeg ${CURRENT_LANG} "Bundled FFmpeg" +LangString SectionBundledFfmpegDesc ${CURRENT_LANG} "Install a bundled version of FFmpeg for exporting animations." + +# Main dialog strings: +LangString SetupLangPrompt ${CURRENT_LANG} "Choose the language to be used for the setup process:" +LangString ShellExLicensePageHeader ${CURRENT_LANG} "License Agreement (Krita Shell Extension)" +LangString ConfirmInstallPageHeader ${CURRENT_LANG} "Confirm Installation" +LangString ConfirmInstallPageDesc ${CURRENT_LANG} "Confirm installation of ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}." +LangString DesktopIconPageDesc2 ${CURRENT_LANG} "You can choose whether to create a shortcut icon on the desktop for launching Krita:" +LangString DesktopIconPageCheckbox ${CURRENT_LANG} "Create a desktop icon" +LangString ConfirmInstallPageDesc2 ${CURRENT_LANG} "Setup is ready to install ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}. You may go back to review the install options before you continue.$\r$\n$\r$\n$_CLICK" + +# Misc. message prompts: +LangString MsgRequireWin7 ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} requires Windows 7 or above." +LangString Msg64bitOn32bit ${CURRENT_LANG} "You are running 32-bit Windows, but this installer installs Krita 64-bit which can only be installed on 64-bit Windows. Please download the 32-bit version on https://krita.org/" +LangString Msg32bitOn64bit ${CURRENT_LANG} "You are trying to install 32-bit Krita on 64-bit Windows. You are strongly recommended to install the 64-bit version of Krita instead since it offers better performance.$\nYou can download the 64-bit version on https://krita.org/$\n$\nDo you still wish to install the 32-bit version of Krita?" +# These prompts are used for when Krita 2.9 or earlier, or the 3.0 alpha 1 MSI version is installed. +LangString MsgAncientVerMustBeRemoved ${CURRENT_LANG} "An ancient version of Krita is detected. This program will now attempt to remove any old versions of Krita.$\nDo you wish to continue?" +LangString MsgKrita3alpha1RemoveFailed ${CURRENT_LANG} "Failed to remove Krita 3.0 Alpha 1." +LangString MsgKrita2msi32bitRemoveFailed ${CURRENT_LANG} "Failed to remove old Krita (32-bit)." +LangString MsgKrita2msi64bitRemoveFailed ${CURRENT_LANG} "Failed to remove old Krita (64-bit)." +# +LangString MsgKritaSameVerReinstall ${CURRENT_LANG} "It appears that ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} is already installed.$\nThis setup will reinstall it." +LangString MsgKrita3264bitSwap ${CURRENT_LANG} "It appears that Krita $KritaNsisBitness-bit ($KritaNsisVersion) is currently installed. This setup will replace it with the ${KRITA_INSTALLER_BITNESS}-bit version of Krita ${KRITA_VERSION_DISPLAY}." +LangString MsgKritaNewerAlreadyInstalled ${CURRENT_LANG} "It appears that a newer version of Krita $KritaNsisBitness-bit ($KritaNsisVersion) is currently installed. If you want to downgrade Krita to ${KRITA_VERSION_DISPLAY}, please uninstall the newer version manually before running this setup." +LangString MsgKritaRunning ${CURRENT_LANG} "Krita appears to be running. Please close Krita before running this installer." +LangString MsgUninstallKritaRunning ${CURRENT_LANG} "Krita appears to be running. Please close Krita before uninstalling." + +!undef CURRENT_LANG diff --git a/packaging/windows/installer/translations/SimpChinese.nsh b/packaging/windows/installer/translations/SimpChinese.nsh new file mode 100644 index 0000000000..f65ed909ae --- /dev/null +++ b/packaging/windows/installer/translations/SimpChinese.nsh @@ -0,0 +1,46 @@ +!define CURRENT_LANG ${LANG_SIMPCHINESE} + +# Strings to show in the installation log: +LangString RemovingShellEx ${CURRENT_LANG} "正在删除 Krita 文件资源管理器插件..." +LangString RemoveShellExFailed ${CURRENT_LANG} "无法删除 Krita 文件资源管理器插件。" +LangString RemoveShellExDone ${CURRENT_LANG} "成功删除 Krita 文件资源管理器插件。" +LangString RemovingOldVer ${CURRENT_LANG} "正在卸载旧版软件..." +LangString RemoveOldVerFailed ${CURRENT_LANG} "无法卸载旧版 Krita 软件。" +LangString RemoveOldVerDone ${CURRENT_LANG} "成功卸载旧版 Krita 软件。" + +# Strings for the component selection dialog: +LangString SectionRemoveOldVer ${CURRENT_LANG} "卸载旧版软件" +LangString SectionRemoveOldVerDesc ${CURRENT_LANG} "卸载之前安装的 Krita $KritaNsisVersion ($KritaNsisBitness-bit)." +LangString SectionShellEx ${CURRENT_LANG} "文件资源管理器插件" +LangString SectionShellExDesc ${CURRENT_LANG} "安装此插件后,Windows 文件资源管理器即可显示 Krita 文件的缩略图和属性信息。$\r$\n$\r$\n版本: ${KRITASHELLEX_VERSION}" +LangString SectionMainDesc ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}$\r$\n$\r$\n版本: ${KRITA_VERSION}" +# We don't actually bundle FFmpeg so these are not shown. +LangString SectionBundledFfmpeg ${CURRENT_LANG} "FFmpeg 软件包" +LangString SectionBundledFfmpegDesc ${CURRENT_LANG} "安装本安装程序自带的 FFmpeg 软件包,用于导出动画。" + +# Main dialog strings: +LangString SetupLangPrompt ${CURRENT_LANG} "请选择安装程序显示的语言:" +LangString ShellExLicensePageHeader ${CURRENT_LANG} "许可证协议 (Krita 文件资源管理器插件)" +LangString ConfirmInstallPageHeader ${CURRENT_LANG} "确认安装" +LangString ConfirmInstallPageDesc ${CURRENT_LANG} "确认安装 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。" +LangString DesktopIconPageDesc2 ${CURRENT_LANG} "选择是否在桌面上创建启动 Krita 的图标快捷方式:" +LangString DesktopIconPageCheckbox ${CURRENT_LANG} "创建桌面图标快捷方式" +LangString ConfirmInstallPageDesc2 ${CURRENT_LANG} "安装程序已经准备就绪,即将安装 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。在继续前可返回检查安装选项,确保一切无误。$\r$\n$\r$\n$_CLICK" + +# Misc. message prompts: +LangString MsgRequireWin7 ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} 只支持 Windows 7 以及更高版本。" +LangString Msg64bitOn32bit ${CURRENT_LANG} "本机正在运行 32 位版本的 Windows,但本安装程序提供的是 64 位版本的 Krita,它只能在 64 位版本的 Windows 下运行。请前往 https://krita.org/ 网站,下载 32 位版本的 Krita 安装程序。" +LangString Msg32bitOn64bit ${CURRENT_LANG} "你正在 64 位版本的 Windows 下面安装 32 位版本的 Krita,这将降低程序性能。我们强烈建议你改而安装 64 位版本的 Krita。$\n请前往 https://krita.org/ 网站,下载 64 位版本的 Krita。$\n$\n仍要继续安装 32 位版本的 Krita 吗?" +# These prompts are used for when Krita 2.9 or earlier, or the 3.0 alpha 1 MSI version is installed. +LangString MsgAncientVerMustBeRemoved ${CURRENT_LANG} "检测到本机已经安装了旧版本的 Krita。本安装程序将在安装前卸载旧版软件。$\n确定要继续吗?" +LangString MsgKrita3alpha1RemoveFailed ${CURRENT_LANG} "无法卸载 Krita 3.0 Alpha 1。" +LangString MsgKrita2msi32bitRemoveFailed ${CURRENT_LANG} "无法卸载旧版 Krita (32 位)。" +LangString MsgKrita2msi64bitRemoveFailed ${CURRENT_LANG} "无法卸载旧版 Krita (64 位)。" +# +LangString MsgKritaSameVerReinstall ${CURRENT_LANG} "检测到本机已经安装了 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。$\n本安装程序将重新安装此版本的 Krita。" +LangString MsgKrita3264bitSwap ${CURRENT_LANG} "检测到本机已经安装了$KritaNsisBitness位版本的 Krita ($KritaNsisVersion)。本安装程序将用${KRITA_INSTALLER_BITNESS}位版本的 Krita ${KRITA_VERSION_DISPLAY} 将其覆盖。" +LangString MsgKritaNewerAlreadyInstalled ${CURRENT_LANG} "检测到本机已经安装了$KritaNsisBitness位版本的 Krita ($KritaNsisVersion)。如需安装旧版的 Krita (${KRITA_VERSION_DISPLAY}),请先手动卸载已有版本,然后在此运行此安装程序。" +LangString MsgKritaRunning ${CURRENT_LANG} "检测到 Krita 正在运行。请在关闭 Krita 后再次运行此安装程序。" +LangString MsgUninstallKritaRunning ${CURRENT_LANG} "检测到 Krita 正在运行。请在关闭 Krita 后再次运行此卸载程序。" + +!undef CURRENT_LANG diff --git a/packaging/windows/installer/translations/TradChinese.nsh b/packaging/windows/installer/translations/TradChinese.nsh new file mode 100644 index 0000000000..478e660396 --- /dev/null +++ b/packaging/windows/installer/translations/TradChinese.nsh @@ -0,0 +1,46 @@ +!define CURRENT_LANG ${LANG_TRADCHINESE} + +# Strings to show in the installation log: +LangString RemovingShellEx ${CURRENT_LANG} "正在移除 Krita 系統介面整合元件..." +LangString RemoveShellExFailed ${CURRENT_LANG} "無法成功移除 Krita 系統介面整合元件。" +LangString RemoveShellExDone ${CURRENT_LANG} "已移除 Krita 系統介面整合元件。" +LangString RemovingOldVer ${CURRENT_LANG} "正在解除安裝先前版本..." +LangString RemoveOldVerFailed ${CURRENT_LANG} "無法成功解除安裝先前版本的 Krita。" +LangString RemoveOldVerDone ${CURRENT_LANG} "已解除安裝先前版本。" + +# Strings for the component selection dialog: +LangString SectionRemoveOldVer ${CURRENT_LANG} "移除先前版本" +LangString SectionRemoveOldVerDesc ${CURRENT_LANG} "解除安裝先前曾安裝的 Krita $KritaNsisVersion ($KritaNsisBitness-bit)." +LangString SectionShellEx ${CURRENT_LANG} "系統介面整合" +LangString SectionShellExDesc ${CURRENT_LANG} "安裝整合元件 (Shell Extension) 以在 Window 檔案總管中顯示 Krita 檔案的縮圖和屬性資訊。$\r$\n$\r$\n版本: ${KRITASHELLEX_VERSION}" +LangString SectionMainDesc ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}$\r$\n$\r$\n版本: ${KRITA_VERSION}" +# We don't actually bundle FFmpeg so these are not shown. +LangString SectionBundledFfmpeg ${CURRENT_LANG} "內置 FFmpeg" +LangString SectionBundledFfmpegDesc ${CURRENT_LANG} "安裝包含在本安裝程式中的 FFmpeg 以用作匯出動畫檔案。" + +# Main dialog strings: +LangString SetupLangPrompt ${CURRENT_LANG} "請選擇安裝過程使用的語言:" +LangString ShellExLicensePageHeader ${CURRENT_LANG} "授權協議 (Krita 系統介面整合元件)" +LangString ConfirmInstallPageHeader ${CURRENT_LANG} "確認安裝" +LangString ConfirmInstallPageDesc ${CURRENT_LANG} "確認安裝 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。" +LangString DesktopIconPageDesc2 ${CURRENT_LANG} "你可以選擇要否在桌面上建立開啟 Krita 的捷徑:" +LangString DesktopIconPageCheckbox ${CURRENT_LANG} "在桌面建立捷徑" +LangString ConfirmInstallPageDesc2 ${CURRENT_LANG} "本安裝程式已準備好在電腦安裝 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。如有需要,你可以返回先前的頁面檢查安裝選項。$\r$\n$\r$\n$_CLICK" + +# Misc. message prompts: +LangString MsgRequireWin7 ${CURRENT_LANG} "${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY} 只支援 Windows 7 或以上版本。" +LangString Msg64bitOn32bit ${CURRENT_LANG} "此電腦正在執行32位元版本的 Windows,但本安裝程式提供64位元版本的 Krita 只能在64位元版本的 Windows 上使用。請到 https://krita.org/ 下載32位元版本的 Krita。" +LangString Msg32bitOn64bit ${CURRENT_LANG} "你正嘗試在64位元版本的 Windows 上安裝32位元版本的 Krita。本安裝程式建議你安裝效能更高的64位元版本的 Krita。$\n請到 https://krita.org/ 下載64位元版本的 Krita。$\n$\n你仍要安裝32位元版本的 Krita嗎?" +# These prompts are used for when Krita 2.9 or earlier, or the 3.0 alpha 1 MSI version is installed. +LangString MsgAncientVerMustBeRemoved ${CURRENT_LANG} "發現電腦上安裝有舊版本的 Krita。本安裝程式會先嘗試將其解除安裝。$\n你確定要繼續嗎?" +LangString MsgKrita3alpha1RemoveFailed ${CURRENT_LANG} "無法成功解除安裝 Krita 3.0 Alpha 1。" +LangString MsgKrita2msi32bitRemoveFailed ${CURRENT_LANG} "無法成功解除安裝舊版 Krita (32-bit)。" +LangString MsgKrita2msi64bitRemoveFailed ${CURRENT_LANG} "無法成功解除安裝舊版 Krita (64-bit)。" +# +LangString MsgKritaSameVerReinstall ${CURRENT_LANG} "發現電腦上已安裝有 ${KRITA_PRODUCTNAME} ${KRITA_VERSION_DISPLAY}。$\n本安裝程式會重新安裝此版本的 Krita。" +LangString MsgKrita3264bitSwap ${CURRENT_LANG} "發現電腦上已安裝有$KritaNsisBitness位元版本的 Krita ($KritaNsisVersion)。本安裝程式會以${KRITA_INSTALLER_BITNESS}位元版本的 Krita ${KRITA_VERSION_DISPLAY} 將其取代。" +LangString MsgKritaNewerAlreadyInstalled ${CURRENT_LANG} "發現電腦上已安裝有$KritaNsisBitness位元版本的 Krita ($KritaNsisVersion)。如需安裝較舊版本的 Krita (${KRITA_VERSION_DISPLAY}),請先自行解除安裝現有版本的 Krita。" +LangString MsgKritaRunning ${CURRENT_LANG} "發現 Krita 正在執行中。使用本安裝程式前請先退出 Krita。" +LangString MsgUninstallKritaRunning ${CURRENT_LANG} "發現 Krita 正在執行中。解除安裝前請先退出 Krita。" + +!undef CURRENT_LANG