From af610b8e66a7fefcb8db07ee65686f51e1cb288a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Dec 2018 16:22:50 +0100 Subject: [PATCH] patch 8.1.0616: NSIS installer is outdated Problem: NSIS installer is outdated. Solution: Use modern syntax, MUI2 and make it work better. Add translations. (Ken Takata, closes #3501) --- Filelist | 2 + nsis/gvim.nsi | 1136 +++++++++++++++++++++++++++---------- nsis/icons/header.bmp | Bin 0 -> 102654 bytes nsis/icons/header.svg | 265 +++++++++ nsis/icons/un_header.bmp | Bin 0 -> 102654 bytes nsis/icons/uninstall.bmp | Bin 0 -> 618006 bytes nsis/icons/welcome.bmp | Bin 0 -> 618006 bytes nsis/icons/welcome.svg | 268 +++++++++ nsis/lang/danish.nsi | 175 ++++++ nsis/lang/dutch.nsi | 281 +++++++++ nsis/lang/english.nsi | 280 +++++++++ nsis/lang/german.nsi | 280 +++++++++ nsis/lang/italian.nsi | 290 ++++++++++ nsis/lang/japanese.nsi | 287 ++++++++++ nsis/lang/simpchinese.nsi | 277 +++++++++ nsis/lang/tradchinese.nsi | 278 +++++++++ src/dosinst.c | 142 +++-- src/version.c | 2 + 18 files changed, 3623 insertions(+), 340 deletions(-) create mode 100644 nsis/icons/header.bmp create mode 100644 nsis/icons/header.svg create mode 100644 nsis/icons/un_header.bmp create mode 100644 nsis/icons/uninstall.bmp create mode 100644 nsis/icons/welcome.bmp create mode 100644 nsis/icons/welcome.svg create mode 100644 nsis/lang/danish.nsi create mode 100644 nsis/lang/dutch.nsi create mode 100644 nsis/lang/english.nsi create mode 100644 nsis/lang/german.nsi create mode 100644 nsis/lang/italian.nsi create mode 100644 nsis/lang/japanese.nsi create mode 100644 nsis/lang/simpchinese.nsi create mode 100644 nsis/lang/tradchinese.nsi diff --git a/Filelist b/Filelist index f47500456d..6daf111f5d 100644 --- a/Filelist +++ b/Filelist @@ -477,6 +477,7 @@ SRC_DOS = \ nsis/gvim_version.nsh \ nsis/vimrc.ini \ nsis/README.txt \ + nsis/lang/*.nsi \ uninstal.txt \ src/VisVim/Commands.cpp \ src/VisVim/Commands.h \ @@ -517,6 +518,7 @@ SRC_DOS_BIN = \ src/xpm/x86/lib-vc14/libXpm.lib \ nsis/icons/*.bmp \ nsis/icons/*.ico \ + nsis/icons/*.svg \ # source files for Amiga, DOS, etc. (also in the extra archive) SRC_AMI_DOS = \ diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi index 55bb4ce007..12a55bb611 100644 --- a/nsis/gvim.nsi +++ b/nsis/gvim.nsi @@ -1,7 +1,9 @@ # NSIS file to create a self-installing exe for Vim. -# It requires NSIS version 2.0 or later. +# It requires NSIS version 3.0 or later. # Last Change: 2014 Nov 5 +Unicode true + # WARNING: if you make changes to this script, look out for $0 to be valid, # because uninstall deletes most files in $0. @@ -31,171 +33,288 @@ # Get it at https://upx.github.io/ !define HAVE_UPX -# comment the next line if you do not want to add Native Language Support +# Comment the next line if you do not want to add Native Language Support !define HAVE_NLS +# Uncomment the next line if you want to include VisVim extension: +#!define HAVE_VIS_VIM + +# Comment the following line to create a multilanguage installer: +!define HAVE_MULTI_LANG + +# Uncomment the next line if you want to create a 64-bit installer. +#!define WIN64 + !include gvim_version.nsh # for version number # ----------- No configurable settings below this line ----------- -!include UpgradeDLL.nsh # for VisVim.dll -!include LogicLib.nsh -!include x64.nsh - -Name "Vim ${VER_MAJOR}.${VER_MINOR}" +!include "Library.nsh" # For DLL install +!ifdef HAVE_VIS_VIM + !include "UpgradeDLL.nsh" # for VisVim.dll +!endif +!include "LogicLib.nsh" +!include "MUI2.nsh" +!include "nsDialogs.nsh" +!include "Sections.nsh" +!include "x64.nsh" + +!define PRODUCT "Vim ${VER_MAJOR}.${VER_MINOR}" +!define UNINST_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall" +!define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}" + +!ifdef WIN64 +Name "${PRODUCT} (x64)" +!else +Name "${PRODUCT}" +!endif OutFile gvim${VER_MAJOR}${VER_MINOR}.exe CRCCheck force SetCompressor /SOLID lzma +SetCompressorDictSize 64 +ManifestDPIAware true SetDatablockOptimize on RequestExecutionLevel highest -XPStyle on - -ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer." -DirText "Choose a directory to install Vim (should contain 'vim')" -Icon icons\vim_16c.ico -# NSIS2 uses a different strategy with six different images in a strip... -#EnabledBitmap icons\enabled.bmp -#DisabledBitmap icons\disabled.bmp -UninstallText "This will uninstall Vim ${VER_MAJOR}.${VER_MINOR} from your system." -UninstallIcon icons\vim_uninst_16c.ico - -# On NSIS 2 using the BGGradient causes trouble on Windows 98, in combination -# with the BringToFront. -# BGGradient 004000 008200 FFFFFF -LicenseText "You should read the following before installing:" -LicenseData ${VIMRT}\doc\uganda.nsis.txt !ifdef HAVE_UPX !packhdr temp.dat "upx --best --compress-icons=1 temp.dat" !endif -# This adds '\vim' to the user choice automagically. The actual value is -# obtained below with ReadINIStr. +!ifdef WIN64 +!define BIT 64 +!else +!define BIT 32 +!endif + +########################################################## +# MUI2 settings + +!define MUI_ABORTWARNING +!define MUI_UNABORTWARNING + +!define MUI_ICON "icons\vim_16c.ico" +!define MUI_UNICON "icons\vim_uninst_16c.ico" + +# Show all languages, despite user's codepage: +!define MUI_LANGDLL_ALLLANGUAGES +!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" +!define MUI_LANGDLL_REGISTRY_KEY "Software\Vim" +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + +!define MUI_WELCOMEFINISHPAGE_BITMAP "icons\welcome.bmp" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "icons\uninstall.bmp" +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "icons\header.bmp" +!define MUI_HEADERIMAGE_UNBITMAP "icons\un_header.bmp" + +!define MUI_WELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight" +!define MUI_HEADERIMAGE_BITMAP_STRETCH "AspectFitHeight" +!define MUI_HEADERIMAGE_UNBITMAP_STRETCH "AspectFitHeight" + +!define MUI_COMPONENTSPAGE_SMALLDESC +!define MUI_LICENSEPAGE_CHECKBOX +!define MUI_FINISHPAGE_RUN "$0\gvim.exe" +!define MUI_FINISHPAGE_RUN_TEXT $(str_show_readme) +!define MUI_FINISHPAGE_RUN_PARAMETERS "-R $\"$0\README.txt$\"" + +# This adds '\Vim' to the user choice automagically. The actual value is +# obtained below with CheckOldVim. +!ifdef WIN64 +InstallDir "$PROGRAMFILES64\Vim" +!else InstallDir "$PROGRAMFILES\Vim" +!endif # Types of installs we can perform: -InstType Typical -InstType Minimal -InstType Full +InstType $(str_type_typical) +InstType $(str_type_minimal) +InstType $(str_type_full) SilentInstall normal -# These are the pages we use -Page license -Page components -Page custom SetCustom ValidateCustom ": _vimrc setting" -Page directory "" "" CheckInstallDir -Page instfiles -UninstPage uninstConfirm -UninstPage instfiles - -# Reserve files -# Needed for showing the _vimrc setting page faster. -ReserveFile /plugin InstallOptions.dll -ReserveFile vimrc.ini +# General custom functions for MUI2: +#!define MUI_CUSTOMFUNCTION_ABORT VimOnUserAbort +#!define MUI_CUSTOMFUNCTION_UNABORT un.VimOnUserAbort + +# Installer pages +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "${VIMRT}\doc\uganda.nsis.txt" +!insertmacro MUI_PAGE_COMPONENTS +Page custom SetCustom ValidateCustom +#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE VimFinalCheck +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!define MUI_FINISHPAGE_NOREBOOTSUPPORT +!insertmacro MUI_PAGE_FINISH + +# Uninstaller pages: +!insertmacro MUI_UNPAGE_CONFIRM +#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.VimCheckRunning +!insertmacro MUI_UNPAGE_COMPONENTS +!insertmacro MUI_UNPAGE_INSTFILES +!define MUI_FINISHPAGE_NOREBOOTSUPPORT +!insertmacro MUI_UNPAGE_FINISH ########################################################## -# Functions - -Function .onInit - MessageBox MB_YESNO|MB_ICONQUESTION \ - "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer.$\n Continue?" \ - /SD IDYES \ - IDYES NoAbort - Abort ; causes installer to quit. - NoAbort: - - # run the install program to check for already installed versions - SetOutPath $TEMP - File /oname=install.exe ${VIMSRC}\installw32.exe - ExecWait "$TEMP\install.exe -uninstall-check" - Delete $TEMP\install.exe - - # We may have been put to the background when uninstall did something. - BringToFront - - # Install will have created a file for us that contains the directory where - # we should install. This is $VIM if it's set. This appears to be the only - # way to get the value of $VIM here!? - ReadINIStr $INSTDIR $TEMP\vimini.ini vimini dir - Delete $TEMP\vimini.ini - - # If ReadINIStr failed or did not find a path: use the default dir. - StrCmp $INSTDIR "" 0 IniOK - StrCpy $INSTDIR "$PROGRAMFILES\Vim" - IniOK: - - # Should check for the value of $VIM and use it. Unfortunately I don't know - # how to obtain the value of $VIM - # IfFileExists "$VIM" 0 No_Vim - # StrCpy $INSTDIR "$VIM" - # No_Vim: - - # User variables: - # $0 - holds the directory the executables are installed to - # $1 - holds the parameters to be passed to install.exe. Starts with OLE - # registration (since a non-OLE gvim will not complain, and we want to - # always register an OLE gvim). - # $2 - holds the names to create batch files for - StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}" - StrCpy $1 "-register-OLE" - StrCpy $2 "gvim evim gview gvimdiff vimtutor" +# Languages Files + +!insertmacro MUI_RESERVEFILE_LANGDLL +!include "lang\english.nsi" + +# Include support for other languages: +!ifdef HAVE_MULTI_LANG + !include "lang\danish.nsi" + !include "lang\dutch.nsi" + !include "lang\german.nsi" + !include "lang\italian.nsi" + !include "lang\japanese.nsi" + !include "lang\simpchinese.nsi" + !include "lang\tradchinese.nsi" +!endif - # Extract InstallOptions files - # $PLUGINSDIR will automatically be removed when the installer closes - InitPluginsDir - File /oname=$PLUGINSDIR\vimrc.ini "vimrc.ini" -FunctionEnd -Function .onUserAbort - MessageBox MB_YESNO|MB_ICONQUESTION "Abort install?" IDYES NoCancelAbort - Abort ; causes installer to not quit. - NoCancelAbort: -FunctionEnd +# Global variables +Var vim_dialog +Var vim_nsd_compat +Var vim_nsd_keymap +Var vim_nsd_mouse +Var vim_compat_stat +Var vim_keymap_stat +Var vim_mouse_stat -# We only accept the directory if it ends in "vim". Using .onVerifyInstDir has -# the disadvantage that the browse dialog is difficult to use. -Function CheckInstallDir -FunctionEnd -Function .onInstSuccess - WriteUninstaller vim${VER_MAJOR}${VER_MINOR}\uninstall-gui.exe - MessageBox MB_YESNO|MB_ICONQUESTION \ - "The installation process has been successful. Happy Vimming! \ - $\n$\n Do you want to see the README file now?" IDNO NoReadme - Exec '$0\gvim.exe -R "$0\README.txt"' - NoReadme: -FunctionEnd - -Function .onInstFailed - MessageBox MB_OK|MB_ICONEXCLAMATION "Installation failed. Better luck next time." -FunctionEnd +# Reserve files +ReserveFile ${VIMSRC}\installw32.exe -Function un.onUnInstSuccess - MessageBox MB_OK|MB_ICONINFORMATION \ - "Vim ${VER_MAJOR}.${VER_MINOR} has been (partly) removed from your system" -FunctionEnd +########################################################## +# Functions -Function un.GetParent +# Get parent directory +# Share this function both on installer and uninstaller +!macro GetParent un +Function ${un}GetParent Exch $0 ; old $0 is on top of stack Push $1 Push $2 StrCpy $1 -1 - loop: + ${Do} StrCpy $2 $0 1 $1 - StrCmp $2 "" exit - StrCmp $2 "\" exit + ${If} $2 == "" + ${OrIf} $2 == "\" + ${ExitDo} + ${EndIf} IntOp $1 $1 - 1 - Goto loop - exit: - StrCpy $0 $0 $1 - Pop $2 - Pop $1 - Exch $0 ; put $0 on top of stack, restore $0 to original value + ${Loop} + StrCpy $0 $0 $1 + Pop $2 + Pop $1 + Exch $0 ; put $0 on top of stack, restore $0 to original value +FunctionEnd +!macroend + +!insertmacro GetParent "" +!insertmacro GetParent "un." + +# Check if Vim is already installed. +# return: Installed directory. If not found, it will be empty. +Function CheckOldVim + Push $0 + Push $R0 + Push $R1 + Push $R2 + + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + + ClearErrors + StrCpy $0 "" # Installed directory + StrCpy $R0 0 # Sub-key index + StrCpy $R1 "" # Sub-key + ${Do} + # Eumerate the sub-key: + EnumRegKey $R1 HKLM ${UNINST_REG_KEY} $R0 + + # Stop if no more sub-key: + ${If} ${Errors} + ${OrIf} $R1 == "" + ${ExitDo} + ${EndIf} + + # Move to the next sub-key: + IntOp $R0 $R0 + 1 + + # Check if the key is Vim uninstall key or not: + StrCpy $R2 $R1 4 + ${If} $R2 S!= "Vim " + ${Continue} + ${EndIf} + + # Verifies required sub-keys: + ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "DisplayName" + ${If} ${Errors} + ${OrIf} $R2 == "" + ${Continue} + ${EndIf} + + ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "UninstallString" + ${If} ${Errors} + ${OrIf} $R2 == "" + ${Continue} + ${EndIf} + + # Found + Push $R2 + call GetParent + call GetParent + Pop $0 # Vim directory + ${ExitDo} + + ${Loop} + + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + + Pop $R2 + Pop $R1 + Pop $R0 + Exch $0 # put $0 on top of stack, restore $0 to original value FunctionEnd ########################################################## -Section "Vim executables and runtime files" +Section "$(str_section_old_ver)" id_section_old_ver + SectionIn 1 2 3 RO + + # run the install program to check for already installed versions + SetOutPath $TEMP + File /oname=install.exe ${VIMSRC}\installw32.exe + DetailPrint "$(str_msg_uninstalling)" + ${Do} + nsExec::Exec "$TEMP\install.exe -uninstall-check" + Pop $3 + + call CheckOldVim + Pop $3 + ${If} $3 == "" + ${ExitDo} + ${Else} + # It seems that the old version is still remaining. + # TODO: Should we show a warning and run the uninstaller again? + + ${ExitDo} # Just ignore for now. + ${EndIf} + ${Loop} + Delete $TEMP\install.exe + Delete $TEMP\vimini.ini # install.exe creates this, but we don't need it. + + # We may have been put to the background when uninstall did something. + BringToFront +SectionEnd + +########################################################## +Section "$(str_section_exe)" id_section_exe SectionIn 1 2 3 RO # we need also this here if the user changes the instdir @@ -215,7 +334,7 @@ Section "Vim executables and runtime files" File ${VIMRT}\rgb.txt File ${VIMTOOLS}\diff.exe - File ${VIMTOOLS}\winpty32.dll + File ${VIMTOOLS}\winpty${BIT}.dll File ${VIMTOOLS}\winpty-agent.exe SetOutPath $0\colors @@ -299,120 +418,63 @@ Section "Vim executables and runtime files" SectionEnd ########################################################## -Section "Vim console program (vim.exe)" +Section "$(str_section_console)" id_section_console SectionIn 1 3 SetOutPath $0 - ReadRegStr $R0 HKLM \ - "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - IfErrors 0 lbl_winnt - # Windows 95/98/ME: not supported - Goto lbl_done - lbl_winnt: - # Windows NT/2000/XP and later - File /oname=vim.exe ${VIMSRC}\vimw32.exe - lbl_done: + File /oname=vim.exe ${VIMSRC}\vimw32.exe StrCpy $2 "$2 vim view vimdiff" SectionEnd ########################################################## -Section "Create .bat files for command line use" +Section "$(str_section_batch)" id_section_batch SectionIn 3 StrCpy $1 "$1 -create-batfiles $2" SectionEnd ########################################################## -Section "Create icons on the Desktop" - SectionIn 1 3 +SectionGroup $(str_group_icons) id_group_icons + Section "$(str_section_desktop)" id_section_desktop + SectionIn 1 3 - StrCpy $1 "$1 -install-icons" -SectionEnd + StrCpy $1 "$1 -install-icons" + SectionEnd -########################################################## -Section "Add Vim to the Start Menu" - SectionIn 1 3 + Section "$(str_section_start_menu)" id_section_startmenu + SectionIn 1 3 - StrCpy $1 "$1 -add-start-menu" -SectionEnd + StrCpy $1 "$1 -add-start-menu" + SectionEnd +SectionGroupEnd ########################################################## -Section "Add an Edit-with-Vim context menu entry" +Section "$(str_section_edit_with)" id_section_editwith SectionIn 1 3 - # Be aware of this sequence of events: - # - user uninstalls Vim, gvimext.dll can't be removed (it's in use) and - # is scheduled to be removed at next reboot. - # - user installs Vim in same directory, gvimext.dll still exists. - # If we now skip installing gvimext.dll, it will disappear at the next - # reboot. Thus when copying gvimext.dll fails always schedule it to be - # installed at the next reboot. Can't use UpgradeDLL! - # We don't ask the user to reboot, the old dll will keep on working. SetOutPath $0 - ClearErrors - SetOverwrite try ${If} ${RunningX64} # Install 64-bit gvimext.dll into the GvimExt64 directory. SetOutPath $0\GvimExt64 ClearErrors - File /oname=gvimext.dll ${VIMSRC}\GvimExt\gvimext64.dll -!ifdef HAVE_NLS - File ${GETTEXT}\gettext64\libintl-8.dll - File ${GETTEXT}\gettext64\libiconv-2.dll -!endif - - IfErrors 0 GvimExt64Done - - # Can't copy gvimext.dll, create it under another name and rename it - # on next reboot. - GetTempFileName $3 $0\GvimExt64 - File /oname=$3 ${VIMSRC}\GvimExt\gvimext64.dll - Rename /REBOOTOK $3 $0\GvimExt64\gvimext.dll -!ifdef HAVE_NLS - GetTempFileName $3 $0\GvimExt64 - File /oname=$3 ${GETTEXT}\gettext64\libintl-8.dll - Rename /REBOOTOK $3 $0\GvimExt64\libintl-8.dll - GetTempFileName $3 $0\GvimExt64 - File /oname=$3 ${GETTEXT}\gettext64\libiconv-2.dll - Rename /REBOOTOK $3 $0\GvimExt64\libiconv-2.dll -!endif + !define LIBRARY_SHELL_EXTENSION + !define LIBRARY_X64 + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${VIMSRC}\GvimExt\gvimext64.dll" \ + "$0\GvimExt64\gvimext.dll" "$0" + !undef LIBRARY_X64 + !undef LIBRARY_SHELL_EXTENSION ${EndIf} - GvimExt64Done: - # Install 32-bit gvimext.dll into the GvimExt32 directory. SetOutPath $0\GvimExt32 ClearErrors - - File /oname=gvimext.dll ${VIMSRC}\GvimExt\gvimext.dll -!ifdef HAVE_NLS - File ${GETTEXT}\gettext32\libintl-8.dll - File ${GETTEXT}\gettext32\libiconv-2.dll - File ${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll -!endif - - IfErrors 0 GvimExt32Done - - # Can't copy gvimext.dll, create it under another name and rename it on - # next reboot. - GetTempFileName $3 $0\GvimExt32 - File /oname=$3 ${VIMSRC}\GvimExt\gvimext.dll - Rename /REBOOTOK $3 $0\GvimExt32\gvimext.dll -!ifdef HAVE_NLS - GetTempFileName $3 $0\GvimExt32 - File /oname=$3 ${GETTEXT}\gettext32\libintl-8.dll - Rename /REBOOTOK $3 $0\GvimExt32\libintl-8.dll - GetTempFileName $3 $0\GvimExt32 - File /oname=$3 ${GETTEXT}\gettext32\libiconv-2.dll - Rename /REBOOTOK $3 $0\GvimExt32\libiconv-2.dll - GetTempFileName $3 $0\GvimExt32 - File /oname=$3 ${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll - Rename /REBOOTOK $3 $0\GvimExt32\libgcc_s_sjlj-1.dll -!endif - - GvimExt32Done: - SetOverwrite lastused + !define LIBRARY_SHELL_EXTENSION + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${VIMSRC}\GvimExt\gvimext.dll" \ + "$0\GvimExt32\gvimext.dll" "$0" + !undef LIBRARY_SHELL_EXTENSION # We don't have a separate entry for the "Open With..." menu, assume # the user wants either both or none. @@ -420,130 +482,563 @@ Section "Add an Edit-with-Vim context menu entry" SectionEnd ########################################################## -Section "Create a _vimrc if it doesn't exist" sec_vimrc_id +Section "$(str_section_vim_rc)" id_section_vimrc SectionIn 1 3 StrCpy $1 "$1 -create-vimrc" -SectionEnd -########################################################## -Section "Create plugin directories in HOME or VIM" - SectionIn 1 3 + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_compat" "$vim_compat_stat" + WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap" "$vim_keymap_stat" + WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse" "$vim_mouse_stat" + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + + ${If} $vim_compat_stat == "vi" + StrCpy $1 "$1 -vimrc-compat vi" + ${ElseIf} $vim_compat_stat == "vim" + StrCpy $1 "$1 -vimrc-compat vim" + ${ElseIf} $vim_compat_stat == "defaults" + StrCpy $1 "$1 -vimrc-compat defaults" + ${Else} + StrCpy $1 "$1 -vimrc-compat all" + ${EndIf} + + ${If} $vim_keymap_stat == "default" + StrCpy $1 "$1 -vimrc-remap no" + ${Else} + StrCpy $1 "$1 -vimrc-remap win" + ${EndIf} + + ${If} $vim_mouse_stat == "default" + StrCpy $1 "$1 -vimrc-behave default" + ${ElseIf} $vim_mouse_stat == "windows" + StrCpy $1 "$1 -vimrc-behave mswin" + ${Else} + StrCpy $1 "$1 -vimrc-behave unix" + ${EndIf} - StrCpy $1 "$1 -create-directories home" SectionEnd ########################################################## -Section "Create plugin directories in VIM" - SectionIn 3 +SectionGroup $(str_group_plugin) id_group_plugin + Section "$(str_section_plugin_home)" id_section_pluginhome + SectionIn 1 3 - StrCpy $1 "$1 -create-directories vim" -SectionEnd + StrCpy $1 "$1 -create-directories home" + SectionEnd + + Section "$(str_section_plugin_vim)" id_section_pluginvim + SectionIn 3 + + StrCpy $1 "$1 -create-directories vim" + SectionEnd +SectionGroupEnd ########################################################## -Section "VisVim Extension for MS Visual Studio" +!ifdef HAVE_VIS_VIM +Section "$(str_section_vis_vim)" id_section_visvim SectionIn 3 SetOutPath $0 !insertmacro UpgradeDLL "${VIMSRC}\VisVim\VisVim.dll" "$0\VisVim.dll" "$0" File ${VIMSRC}\VisVim\README_VisVim.txt SectionEnd +!endif ########################################################## !ifdef HAVE_NLS - Section "Native Language Support" - SectionIn 1 3 +Section "$(str_section_nls)" id_section_nls + SectionIn 1 3 - SetOutPath $0\lang - File /r ${VIMRT}\lang\*.* - SetOutPath $0\keymap - File ${VIMRT}\keymap\README.txt - File ${VIMRT}\keymap\*.vim - SetOutPath $0 - File ${GETTEXT}\gettext32\libintl-8.dll - File ${GETTEXT}\gettext32\libiconv-2.dll - #File /nonfatal ${VIMRT}\libwinpthread-1.dll - File /nonfatal ${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll - SectionEnd + SetOutPath $0\lang + File /r ${VIMRT}\lang\*.* + SetOutPath $0\keymap + File ${VIMRT}\keymap\README.txt + File ${VIMRT}\keymap\*.vim + SetOutPath $0 + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext${BIT}\libintl-8.dll" \ + "$0\libintl-8.dll" "$0" + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext${BIT}\libiconv-2.dll" \ + "$0\libiconv-2.dll" "$0" + !if /FileExists "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" + # Install libgcc_s_sjlj-1.dll only if it is needed. + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" \ + "$0\libgcc_s_sjlj-1.dll" "$0" + !endif + + ${If} ${SectionIsSelected} ${id_section_editwith} + ${If} ${RunningX64} + # Install DLLs for 64-bit gvimext.dll into the GvimExt64 directory. + SetOutPath $0\GvimExt64 + ClearErrors + !define LIBRARY_X64 + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext64\libintl-8.dll" \ + "$0\GvimExt64\libintl-8.dll" "$0\GvimExt64" + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext64\libiconv-2.dll" \ + "$0\GvimExt64\libiconv-2.dll" "$0\GvimExt64" + !undef LIBRARY_X64 + ${EndIf} + + # Install DLLs for 32-bit gvimext.dll into the GvimExt32 directory. + SetOutPath $0\GvimExt32 + ClearErrors + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext32\libintl-8.dll" \ + "$0\GvimExt32\libintl-8.dll" "$0\GvimExt32" + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext32\libiconv-2.dll" \ + "$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32" + !if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" + # Install libgcc_s_sjlj-1.dll only if it is needed. + !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \ + "$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32" + !endif + ${EndIf} +SectionEnd !endif ########################################################## Section -call_install_exe SetOutPath $0 - ExecWait "$0\install.exe $1" + DetailPrint "$(str_msg_registering)" + nsExec::Exec "$0\install.exe $1" + Pop $3 SectionEnd ########################################################## +!macro SaveSectionSelection section_id reg_value + ${If} ${SectionIsSelected} ${section_id} + WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 1 + ${Else} + WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 0 + ${EndIf} +!macroend + Section -post + + # Get estimated install size + SectionGetSize ${id_section_exe} $3 + ${If} ${SectionIsSelected} ${id_section_console} + SectionGetSize ${id_section_console} $4 + IntOp $3 $3 + $4 + ${EndIf} + ${If} ${SectionIsSelected} ${id_section_editwith} + SectionGetSize ${id_section_editwith} $4 + IntOp $3 $3 + $4 + ${EndIf} +!ifdef HAVE_VIS_VIM + ${If} ${SectionIsSelected} ${id_section_visvim} + SectionGetSize ${id_section_visvim} $4 + IntOp $3 $3 + $4 + ${EndIf} +!endif +!ifdef HAVE_NLS + ${If} ${SectionIsSelected} ${id_section_nls} + SectionGetSize ${id_section_nls} $4 + IntOp $3 $3 + $4 + ${EndIf} +!endif + + # Register EstimatedSize and AllowSilent. + # Other information will be set by the install.exe (dosinst.c). + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "EstimatedSize" $3 + WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "AllowSilent" 1 + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + + # Store the selections to the registry. + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + !insertmacro SaveSectionSelection ${id_section_console} "select_console" + !insertmacro SaveSectionSelection ${id_section_batch} "select_batch" + !insertmacro SaveSectionSelection ${id_section_desktop} "select_desktop" + !insertmacro SaveSectionSelection ${id_section_startmenu} "select_startmenu" + !insertmacro SaveSectionSelection ${id_section_editwith} "select_editwith" + !insertmacro SaveSectionSelection ${id_section_vimrc} "select_vimrc" + !insertmacro SaveSectionSelection ${id_section_pluginhome} "select_pluginhome" + !insertmacro SaveSectionSelection ${id_section_pluginvim} "select_pluginvim" +!ifdef HAVE_VIS_VIM + !insertmacro SaveSectionSelection ${id_section_visvim} "select_visvim" +!endif +!ifdef HAVE_NLS + !insertmacro SaveSectionSelection ${id_section_nls} "select_nls" +!endif + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + BringToFront SectionEnd +########################################################## +!macro LoadSectionSelection section_id reg_value + ClearErrors + ReadRegDWORD $3 HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} + ${IfNot} ${Errors} + ${If} $3 = 1 + !insertmacro SelectSection ${section_id} + ${Else} + !insertmacro UnselectSection ${section_id} + ${EndIf} + ${EndIf} +!macroend + +Function .onInit +!ifdef HAVE_MULTI_LANG + # Select a language (or read from the registry). + !insertmacro MUI_LANGDLL_DISPLAY +!endif + + # Check $VIM + ReadEnvStr $INSTDIR "VIM" + + call CheckOldVim + Pop $3 + ${If} $3 == "" + # No old versions of Vim found. Unselect and hide the section. + !insertmacro UnselectSection ${id_section_old_ver} + SectionSetInstTypes ${id_section_old_ver} 0 + SectionSetText ${id_section_old_ver} "" + ${Else} + ${If} $INSTDIR == "" + StrCpy $INSTDIR $3 + ${EndIf} + ${EndIf} + + # If did not find a path: use the default dir. + ${If} $INSTDIR == "" +!ifdef WIN64 + StrCpy $INSTDIR "$PROGRAMFILES64\Vim" +!else + StrCpy $INSTDIR "$PROGRAMFILES\Vim" +!endif + ${EndIf} + +# Load the selections from the registry (if any). + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + !insertmacro LoadSectionSelection ${id_section_console} "select_console" + !insertmacro LoadSectionSelection ${id_section_batch} "select_batch" + !insertmacro LoadSectionSelection ${id_section_desktop} "select_desktop" + !insertmacro LoadSectionSelection ${id_section_startmenu} "select_startmenu" + !insertmacro LoadSectionSelection ${id_section_editwith} "select_editwith" + !insertmacro LoadSectionSelection ${id_section_vimrc} "select_vimrc" + !insertmacro LoadSectionSelection ${id_section_pluginhome} "select_pluginhome" + !insertmacro LoadSectionSelection ${id_section_pluginvim} "select_pluginvim" +!ifdef HAVE_VIS_VIM + !insertmacro LoadSectionSelection ${id_section_visvim} "select_visvim" +!endif +!ifdef HAVE_NLS + !insertmacro LoadSectionSelection ${id_section_nls} "select_nls" +!endif + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + + # User variables: + # $0 - holds the directory the executables are installed to + # $1 - holds the parameters to be passed to install.exe. Starts with OLE + # registration (since a non-OLE gvim will not complain, and we want to + # always register an OLE gvim). + # $2 - holds the names to create batch files for + StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}" + StrCpy $1 "-register-OLE" + StrCpy $2 "gvim evim gview gvimdiff vimtutor" +FunctionEnd + +Function .onInstSuccess + WriteUninstaller vim${VER_MAJOR}${VER_MINOR}\uninstall-gui.exe +FunctionEnd + +Function .onInstFailed + MessageBox MB_OK|MB_ICONEXCLAMATION "$(str_msg_install_fail)" /SD IDOK +FunctionEnd + ########################################################## Function SetCustom - # Display the InstallOptions dialog + # Display the _vimrc setting dialog using nsDialogs. # Check if a _vimrc should be created - SectionGetFlags ${sec_vimrc_id} $3 - IntOp $3 $3 & 1 - StrCmp $3 "1" +2 0 + ${IfNot} ${SectionIsSelected} ${id_section_vimrc} + Abort + ${EndIf} + + !insertmacro MUI_HEADER_TEXT \ + $(str_vimrc_page_title) $(str_vimrc_page_subtitle) + + nsDialogs::Create 1018 + Pop $vim_dialog + + ${If} $vim_dialog == error Abort + ${EndIf} + + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + + GetFunctionAddress $3 ValidateCustom + nsDialogs::OnBack $3 + + + # 1st group - Compatibility + ${NSD_CreateGroupBox} 0 0 100% 32% $(str_msg_compat_title) + Pop $3 + + ${NSD_CreateLabel} 5% 10% 35% 8% $(str_msg_compat_desc) + Pop $3 + ${NSD_CreateDropList} 18% 19% 75% 8% "" + Pop $vim_nsd_compat + ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vi) + ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vim) + ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_defaults) + ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_all) + + # Default selection + ${If} $vim_compat_stat == "" + ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_compat" + ${Else} + StrCpy $3 $vim_compat_stat + ${EndIf} + ${If} $3 == "defaults" + StrCpy $4 2 + ${ElseIf} $3 == "vim" + StrCpy $4 1 + ${ElseIf} $3 == "vi" + StrCpy $4 0 + ${Else} # default + StrCpy $4 3 + ${EndIf} + ${NSD_CB_SetSelectionIndex} $vim_nsd_compat $4 + + + # 2nd group - Key remapping + ${NSD_CreateGroupBox} 0 35% 100% 31% $(str_msg_keymap_title) + Pop $3 + + ${NSD_CreateLabel} 5% 45% 90% 8% $(str_msg_keymap_desc) + Pop $3 + ${NSD_CreateDropList} 38% 54% 55% 8% "" + Pop $vim_nsd_keymap + ${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_default) + ${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_windows) + + # Default selection + ${If} $vim_keymap_stat == "" + ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap" + ${Else} + StrCpy $3 $vim_keymap_stat + ${EndIf} + ${If} $3 == "windows" + StrCpy $4 1 + ${Else} # default + StrCpy $4 0 + ${EndIf} + ${NSD_CB_SetSelectionIndex} $vim_nsd_keymap $4 + - InstallOptions::dialog "$PLUGINSDIR\vimrc.ini" + # 3rd group - Mouse behavior + ${NSD_CreateGroupBox} 0 69% 100% 31% $(str_msg_mouse_title) Pop $3 + + ${NSD_CreateLabel} 5% 79% 90% 8% $(str_msg_mouse_desc) + Pop $3 + ${NSD_CreateDropList} 23% 87% 70% 8% "" + Pop $vim_nsd_mouse + ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_default) + ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_windows) + ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_unix) + + # Default selection + ${If} $vim_mouse_stat == "" + ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse" + ${Else} + StrCpy $3 $vim_mouse_stat + ${EndIf} + ${If} $3 == "xterm" + StrCpy $4 2 + ${ElseIf} $3 == "windows" + StrCpy $4 1 + ${Else} # default + StrCpy $4 0 + ${EndIf} + ${NSD_CB_SetSelectionIndex} $vim_nsd_mouse $4 + + ${If} ${RunningX64} + SetRegView lastused + ${EndIf} + + nsDialogs::Show FunctionEnd Function ValidateCustom - ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 2" "State" - StrCmp $3 "1" 0 +3 - StrCpy $1 "$1 -vimrc-remap no" - Goto behave + ${NSD_CB_GetSelectionIndex} $vim_nsd_compat $3 + ${If} $3 = 0 + StrCpy $vim_compat_stat "vi" + ${ElseIf} $3 = 1 + StrCpy $vim_compat_stat "vim" + ${ElseIf} $3 = 2 + StrCpy $vim_compat_stat "defaults" + ${Else} + StrCpy $vim_compat_stat "all" + ${EndIf} - StrCpy $1 "$1 -vimrc-remap win" + ${NSD_CB_GetSelectionIndex} $vim_nsd_keymap $3 + ${If} $3 = 0 + StrCpy $vim_keymap_stat "default" + ${Else} + StrCpy $vim_keymap_stat "windows" + ${EndIf} - behave: - ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 5" "State" - StrCmp $3 "1" 0 +3 - StrCpy $1 "$1 -vimrc-behave unix" - Goto done + ${NSD_CB_GetSelectionIndex} $vim_nsd_mouse $3 + ${If} $3 = 0 + StrCpy $vim_mouse_stat "default" + ${ElseIf} $3 = 1 + StrCpy $vim_mouse_stat "windows" + ${Else} + StrCpy $vim_mouse_stat "xterm" + ${EndIf} +FunctionEnd - ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 6" "State" - StrCmp $3 "1" 0 +3 - StrCpy $1 "$1 -vimrc-behave mswin" - Goto done +########################################################## +# Description for Installer Sections + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_old_ver} $(str_desc_old_ver) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_exe} $(str_desc_exe) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_console} $(str_desc_console) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_batch} $(str_desc_batch) + !insertmacro MUI_DESCRIPTION_TEXT ${id_group_icons} $(str_desc_icons) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_desktop} $(str_desc_desktop) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_startmenu} $(str_desc_start_menu) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_editwith} $(str_desc_edit_with) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_vimrc} $(str_desc_vim_rc) + !insertmacro MUI_DESCRIPTION_TEXT ${id_group_plugin} $(str_desc_plugin) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginhome} $(str_desc_plugin_home) + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginvim} $(str_desc_plugin_vim) +!ifdef HAVE_VIS_VIM + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_visvim} $(str_desc_vis_vim) +!endif +!ifdef HAVE_NLS + !insertmacro MUI_DESCRIPTION_TEXT ${id_section_nls} $(str_desc_nls) +!endif +!insertmacro MUI_FUNCTION_DESCRIPTION_END - StrCpy $1 "$1 -vimrc-behave default" - done: -FunctionEnd ########################################################## -Section Uninstall +# Uninstaller Functions and Sections + +Function un.onInit +!ifdef HAVE_MULTI_LANG + # Get the language from the registry. + !insertmacro MUI_UNGETLANGUAGE +!endif +FunctionEnd + +Section "un.$(str_unsection_register)" id_unsection_register + SectionIn RO + # Apparently $INSTDIR is set to the directory where the uninstaller is # created. Thus the "vim61" directory is included in it. StrCpy $0 "$INSTDIR" +!ifdef HAVE_VIS_VIM # If VisVim was installed, unregister the DLL. - IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim - Has_VisVim: - ExecWait "regsvr32.exe /u /s $0\VisVim.dll" - - No_VisVim: + ${If} ${FileExists} "$0\VisVim.dll" + ExecWait "regsvr32.exe /u /s $0\VisVim.dll" + ${EndIf} +!endif # delete the context menu entry and batch files - ExecWait "$0\uninstal.exe -nsis" + DetailPrint "$(str_msg_unregistering)" + nsExec::Exec "$0\uninstal.exe -nsis" + Pop $3 # We may have been put to the background when uninstall did something. BringToFront - # ask the user if the Vim version dir must be removed - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Would you like to delete $0?$\n \ - $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes + # Delete the installer language setting. + DeleteRegKey ${MUI_LANGDLL_REGISTRY_ROOT} ${MUI_LANGDLL_REGISTRY_KEY} +SectionEnd + +Section "un.$(str_unsection_exe)" id_unsection_exe + + StrCpy $0 "$INSTDIR" + + # Delete gettext and iconv DLLs + ${If} ${FileExists} "$0\libiconv-2.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\libiconv-2.dll" + ${EndIf} + ${If} ${FileExists} "$0\libintl-8.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\libintl-8.dll" + ${EndIf} + ${If} ${FileExists} "$0\libgcc_s_sjlj-1.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\libgcc_s_sjlj-1.dll" + ${EndIf} + # Delete other DLLs Delete /REBOOTOK $0\*.dll - Delete /REBOOTOK $0\GvimExt32\*.dll + + # Delete 64-bit GvimExt ${If} ${RunningX64} - Delete /REBOOTOK $0\GvimExt64\*.dll + !define LIBRARY_X64 + ${If} ${FileExists} "$0\GvimExt64\gvimext.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt64\gvimext.dll" + ${EndIf} + ${If} ${FileExists} "$0\GvimExt64\libiconv-2.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt64\libiconv-2.dll" + ${EndIf} + ${If} ${FileExists} "$0\GvimExt64\libintl-8.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt64\libintl-8.dll" + ${EndIf} + ${If} ${FileExists} "$0\GvimExt64\libwinpthread-1.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt64\libwinpthread-1.dll" + ${EndIf} + !undef LIBRARY_X64 + RMDir /r $0\GvimExt64 + ${EndIf} + + # Delete 32-bit GvimExt + ${If} ${FileExists} "$0\GvimExt32\gvimext.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt32\gvimext.dll" + ${EndIf} + ${If} ${FileExists} "$0\GvimExt32\libiconv-2.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt32\libiconv-2.dll" ${EndIf} + ${If} ${FileExists} "$0\GvimExt32\libintl-8.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt32\libintl-8.dll" + ${EndIf} + ${If} ${FileExists} "$0\GvimExt32\libgcc_s_sjlj-1.dll" + !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ + "$0\GvimExt32\libgcc_s_sjlj-1.dll" + ${EndIf} + RMDir /r $0\GvimExt32 ClearErrors # Remove everything but *.dll files. Avoids that @@ -555,12 +1050,15 @@ Section Uninstall RMDir /r $0\ftplugin RMDir /r $0\indent RMDir /r $0\macros + RMDir /r $0\pack RMDir /r $0\plugin RMDir /r $0\spell RMDir /r $0\syntax RMDir /r $0\tools RMDir /r $0\tutor +!ifdef HAVE_VIS_VIM RMDir /r $0\VisVim +!endif RMDir /r $0\lang RMDir /r $0\keymap Delete $0\*.exe @@ -568,46 +1066,78 @@ Section Uninstall Delete $0\*.vim Delete $0\*.txt - IfErrors ErrorMess NoErrorMess - ErrorMess: - MessageBox MB_OK|MB_ICONEXCLAMATION \ - "Some files in $0 have not been deleted!$\nYou must do it manually." - NoErrorMess: + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION $(str_msg_rm_exe_fail) /SD IDOK + ${EndIf} # No error message if the "vim62" directory can't be removed, the # gvimext.dll may still be there. RMDir $0 +SectionEnd + +# Remove "vimfiles" directory under the specified directory. +!macro RemoveVimfiles dir + ${If} ${FileExists} ${dir}\vimfiles + RMDir ${dir}\vimfiles\colors + RMDir ${dir}\vimfiles\compiler + RMDir ${dir}\vimfiles\doc + RMDir ${dir}\vimfiles\ftdetect + RMDir ${dir}\vimfiles\ftplugin + RMDir ${dir}\vimfiles\indent + RMDir ${dir}\vimfiles\keymap + RMDir ${dir}\vimfiles\plugin + RMDir ${dir}\vimfiles\syntax + RMDir ${dir}\vimfiles + ${EndIf} +!macroend + +SectionGroup "un.$(str_ungroup_plugin)" id_ungroup_plugin + Section /o "un.$(str_unsection_plugin_home)" id_unsection_plugin_home + # get the home dir + ReadEnvStr $0 "HOME" + ${If} $0 == "" + ReadEnvStr $0 "HOMEDRIVE" + ReadEnvStr $1 "HOMEPATH" + StrCpy $0 "$0$1" + ${If} $0 == "" + ReadEnvStr $0 "USERPROFILE" + ${EndIf} + ${EndIf} + + ${If} $0 != "" + !insertmacro RemoveVimfiles $0 + ${EndIf} + SectionEnd - NoRemoveExes: + Section "un.$(str_unsection_plugin_vim)" id_unsection_plugin_vim + # get the parent dir of the installation + Push $INSTDIR + Call un.GetParent + Pop $0 + + # if a plugin dir was created at installation remove it + !insertmacro RemoveVimfiles $0 + SectionEnd +SectionGroupEnd + +Section "un.$(str_unsection_rootdir)" id_unsection_rootdir # get the parent dir of the installation Push $INSTDIR Call un.GetParent Pop $0 - StrCpy $1 $0 - - # if a plugin dir was created at installation ask the user to remove it - # first look in the root of the installation then in HOME - IfFileExists $1\vimfiles AskRemove 0 - ReadEnvStr $1 "HOME" - StrCmp $1 "" NoRemove 0 - - IfFileExists $1\vimfiles 0 NoRemove - - AskRemove: - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Remove all files in your $1\vimfiles directory?$\n \ - $\nCAREFUL: If you have created something there that you want to keep, click No" IDNO Fin - RMDir /r $1\vimfiles - NoRemove: - - # ask the user if the Vim root dir must be removed - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Would you like to remove $0?$\n \ - $\nIt contains your Vim configuration files!" IDNO NoDelete - RMDir /r $0 ; skipped if no - NoDelete: - - Fin: - Call un.onUnInstSuccess + Delete $0\_vimrc + RMDir $0 SectionEnd + +########################################################## +# Description for Uninstaller Sections + +!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_register} $(str_desc_unregister) + !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_exe} $(str_desc_rm_exe) + !insertmacro MUI_DESCRIPTION_TEXT ${id_ungroup_plugin} $(str_desc_rm_plugin) + !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_home} $(str_desc_rm_plugin_home) + !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_vim} $(str_desc_rm_plugin_vim) + !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_rootdir} $(str_desc_rm_rootdir) +!insertmacro MUI_UNFUNCTION_DESCRIPTION_END diff --git a/nsis/icons/header.bmp b/nsis/icons/header.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c2f426953cc286fe381e8f0761222dbb1cf51525 GIT binary patch literal 102654 zc-rlq2YeM(_Q&4~p?5@Bigcxlf`A}OM?nM>A|)s+0ue%wbju*my+%1WB)?q+^1mec?|=XM?|=XMU;p~oFTecq z(@#JB^Pm6xhhO-@pKRnO8qmz_@|!EJxRR~_{Povgfg8B{{`>FGoH=vaFMt30-}#e` z{6qs6hOW4h?g0GHfBu7w17DcDbLY;TI(6!sZ@xKp?ATX+;R}BPMt-6J&1mex&=ptG z7l2UBAAkJu?Af#5e*5jwqel-OJh*@V{=I(T3xBeapJ+fc@lqFtuDIerQ`+GW2tcSN zoD+NZ<(FUX+qZA`?%mtAZF|=*eBn|mhxY8* zvwi#aH{N(--MV!z`Gqh1$wq#n!HE+mTo}6IqE84)RRWQi0sz1G;){f`p2*1ez5R@%hvLrq}e#(?7&pr3t7{Bl(Ha50iy?PBBHhlHfSCfOGeU|hR z_tCp@RRPeAAb1$`|r=5Jqr-dSfc5?^XJcNM$gQx3nOM0J`jN53jjX< z{PQ60*=L`9^2sMh_+`|nQ8jARP*6e2FigSnx_ETu`T(G25YC-D2i8uWJP8E8{`%{q zM~{B>)mKN39O0Ai$BrFi`?ueId+O9Fdv4vZ)|3G_Y0{+8qeqV%IdaI5A%h1G9yDlB zwQAKsU#_~Iu&TjfNM{%j7#T!{h4)m&_FGf_)kUH!R|x=7a$yI20klJh4jnjf;FC{2 z*|TTQM@jPW#~-uh(@#G=c<>;Q1Rx+0%z|8yDDDbgKuvN0{L`QQG<^8*n3$LW0|xZ# z*ROKr%HS^d-JT*tJz2YY!fIRu!w*0FkQ4pwZ+|;|`ZSgoCM*v8e`ynkGaL9*AeVMw z=*ktrpka@~4(QvrZ{J`4`q%B-w*!Q?-g@iJH{aas7rwmn&O2MTZr!8yz&a?q8prrF#)^G z_#h4p78uo~>+qP|+rtsFRS+jEG%4JEi zV#SKpt5*Z7*Is)KfPh5IBA5kqAo08JzEcnyr~x}E0I*M=J~jZ0KItjm!Bf1WCu{UY zFnsytml**#%l`fQzx?t`odt}axmd80r;>#4XM)LTOSA=7mvO`PYF!w*az!vG7K%2a z-iHq#27qP?Z{fm)FTC)=?Afzt&6+iH=1e|8)0{bT=Fgx1;)^f7^wLY4Hf_QtV((zB zAQ71G30`*Z-VH(l;Nr!L(+I#j=KB5x!jM5gGx(eZ4$Kh2S>%~YjwA`&^~L;p%rA~+ z61IS7MhxTCx-fL*iV#s$4kjieh`ItFv>gCq@<8A8>C-1qo;-g1_;KULjU79d&*z?d zZsNp=Q>RV^k05dR^5xjdx8Hty$BrHNZr~U5_x}6uLs?;xixw?P3jj-WOax$17~XTw zJs98h>(^rtvCh~;xuuFV{n#&T`7lZJt7#yCHk)R0Y)zahfK4ty&Q%guGL49$e$Ytl z2r3GER;^k!Z{EDPxHu38d`68LHFD%g%_H#Tsi&SAJ$f|2qyaV&s)<2_nt~B*AG>ed zxDmdJ4F#u{3c#Q+tY5!AN26D3*RJJ6oC4Ip;}^cjSA8Q%w)`OX%$Gcw>#VvhNumTD%imMtbu6`RQT0~LpmL(4D86kg_R<5e|N znO;}ng6mQ-h}Pi{9Y1~?Zwu3a(k3J%OqntTV<-5uY11ZGu3VlJr9p!Ra95x=ckW!w zA7m8>KmGL6DFLuUvH%PU!`iiLV|h6^V4RmEoRmLdyt9%-9xL0S%3u})$|v915+5J` zykGdjzEEYbj7!VN!?l0?_1Bm}XgTB@ik`AM1*&TbkppQ*ZpO)_jv;A}%)iw0y5SRn z82ss{pTOYX{`R+h`}RTGFc9c4CJZBp1;ic8k|hfe$eulWzGNgkJX|mYxv{aa&{T!N zU_+e%te;i@28ChGnl%;J#)%Yb$`|PFgb5R#OA@}*fS+(?1xY^n&K9k2tq)AW5;aS zveE4ByYGJHnP)&B<`4W18Z@Y1zkW^tj!G*4gTnCk+i&L-W5$db>leUI2Qavtbd+EC zjs*vdVADWVZ>k@-{DT-T!MZlTDcA&#UhYpnmy!YOFPoF-GQA2x21&CnSzI}UH!}|5> z3w;9y4CvdpZ*l;vIMh?2e=7fO|Fh@jLB21A8hFB6dBPv?c+2}>Shj3g+|rIo5)%`{ z+1n*aL_`D|<*|0}-o1xk_yR~fckaxNGZ2+TV58U6{Y<=;+?PdnacBZ*1U6RZ6z^pjPo6v}w}Ef(-@l(5VqVJx0#NY`D2xfI)fA+1!U5@^%=WJBx84UtE z|9i&Zpa1;l4}-~@Z@!5g5e!?kY84h1=Jk59hL1n~cnTD>LSLWGbNsTwq-4pG{F=9- zr&Oe`8ALZ|vp@X7m(`K8)U8|BccR?6gElKtq==^b;jw%vP@q82W(5lt>b(8ue4DI0E;flcw2fOuFjzOwB$s(7P_%#&mJ>> z%1DMBaGg z4Fkjb?z_+H7ulxde88IVo@_UGXtsR$^1uVq4Q!S-i>K0XPnH}$^R!{ZhQMaamMsJF zIdkTOTXL=&Z@lq?4?YNNHhubZel1?SxSCa|QYGkBj2JP3UmG`WY-7*{AS%QF&Iqqy zJam=QZP~I#laFuuMU$j#+_7Va0(;OUsiK&k38v+4@7lFX5xF{one;T%njD7)G()%1 zOhqEGFNb9d+uwix{jFQK>Ii0E?S+R+57~>}a#DaGKUYjrlfn!pz**NqhjlGxYE@Ce zI*1|}v~msf@tx~BaNq#f$W5^Oz!#mJ3sj&lcTDD3)?Yb=fSbZObW*b~hq5~lknPT2 zXQnV6F^IhO+G}`=f??C9O%thIg_K^x+}P0926O2+6sVjsWy-C$-pa2f9`qEr&DRVc z)6s0vqD3?-Q>F~RHgDcs#%|)oiH>G;J~lQM8wcKd_Us9?fo&kEo-tzv!${VwS;0G+ zW2Pr;tAQq+RX{>$OkuRK`KI`(?kvk^*it%y>*vJi}{|v2MGFPezU%s=u;yr?P-o@aD zDGGP*si&S23?Y8L4B%Nj`P(G>7F2XJ&?=1`JJvX8dCGfAKjQlW+jKOed#2efx7<>@ zc5S}2Y178h?2$(vG0m`XqNBZf^>Q?8)~uOn29PlmhPLrVR)YZ<{oyX59w;6Pqj`T@ zxO<8a;8#=;6$LMV4h2Sa4<9}ZByIIGa5M1+OP4NXc=^j;{*sW8z^B5HI33mj!+~|6 zx7aL=033lcE?&G??UkGddce^*zJlsO8Q9U(r(83QC%^%dO84lDg7a7TMcC)aV2Xoi z1mM&F=L^5cgt3uc0Xq8<%+SH^0F!Y5oGJuD-X%T3n%gnS>O4JPxNxBYFxc0u2%z(3 z-qyunsu)CgY6gaP-+i}WSgu!a3>rF$&e#V*!}I3#zp}rdi3aV*Ijp2tXQ#h>Cy}oa0#sTOus-d7#27V4+6u40%Mp20gfq|O@ZiCG=USe9_E~nBHfDI?veU+QBqp5aEuY1A-xs zgWbcjd&>6-4nxt=sHiB%L3r+LzbVOp7Pvh)9o6x@J~rxmGm{)06<_V!w=WiU)TmLS zqX5U@(!xT4Di|@$M;JtD6;F!^K>grsT2aE#jb?J004LSgt&B+ARd&bQLifbJKp$4G zNs}gw9zl03P@sUW(G~^}NE-GFxaG)^!;?1QQ8G&CttMc^rvnt2GX?|@B-;&;8HJKN z0=Jg|3g|&H`DFBv(Zm#@Eest&_u|svFf^7^skccG1MV~XrsajUPldw5+O}=$`h#i2 zAi|?D))3R+Q-B1e*niOrIuqoC6FfGQ?V-xn@iI4B*BjEqzm&*;&k z!Js_NKsqXI$AaLt$YhxG0_V=1gGwom2z6SpU;#sPe0+SjZrwC1nnsC>i-ToJd(nJs zTnaj$f?yqRS}{_Wx+84Rgy=J*00jCY7Rt>@ZYZ!NckbMDTRfa$1OT>f-8$917%RB3 zGKC0s4R=!9Bkcm2ci)SCm}bE=D}&Dqg%Ibg^qf|J-3ecHM?zUA{}M; zb$Fmzvu5?=^kjWJ5r#qEj?SJvTf;bA8a{lubf#+6s*XOxxb%7l{WR;C%>6+DXaoJj zasj{@GiJaZ9ZJh^U9ez5%r3(_wl7eNpr&v(X)iVu3hgi%biP7`3g~$Xs#v^uaZTQF zEoniG5%{g%h{_qnFyUizOXb9AqDR7Aj z0Y~5XlTqu$i4*b)8AE`7%2#R&ME&}krq56eB9J}7@R?_xk?9G~<+)`@a5@@jl|)BN zKAc2HYXqmGb?W#^!DVTFA($5P~l`6&d&Ye4RgaHEv1f`?s6&u0+!Gi}CEu&B| zY$BGCF&ridjf8~)z%gUS*}onPU0fJU@y3bII1;k*36eLU+vnpxwj&I zoU3u;#%6acIBwCGe!*9Qug;q{k2~Pde^8GhRy>L3^>7TQOqqfkrMO(UqG=3yRYBS08`;aZ!DQi_&XYo~+$H zo-$?;MZ&^z&p|i6(yXf_SFT*JXhj#mOEHBUdBTJVef?raErv%lP*L}~rMTgCfPss_ zv$b$zI4@A^0{;8nz?>( z1Um4o&}uL%^GeT6WA41B)dHvHMXgcnEnBwejVPm**%9-q02Nh-R1BNm32PC`h7B85 z`$e})(xpomm9fLjX(UlPS?&pz-8Adhub*ZZG39W3u9W-3l`dJb#Mnd}WG&}Zn2jBL zd!4~B6EKLNkb)uP|CU>B@xd^^r}8K#9Yq+cgVNDz&-v+SoR7^0(ou8|k1Ra5r&xO* z48uG5YN7_x(OI)*aSFy{w3;EeWy_X9=_rPV?N~0eo>z7doxz3Sm}o4P1q{mf)cY2O z3$~#DTAeX@^5hAAiH(hABX2Ex|P$%(Ub| zNGF9sExQJTJT+lZmnp$W>3zPv62X4lm?7mGVaM^~$D19eO`E0+UBaL;%_`Rr^!5Gs z-E{1)eJb$0JX&b6$bTIR{k}Y3A7Cc8#QVK-c4YGf^!rp zcb&n|U{HxH7=d{xJWUja+dFRDxFJJ^Ts{UhJ78c~zPvB$I$I%6m8a88N82YhD_Ao) z9mTr&0=XYcTw&oY8k~;abkj{Tk%}Y-;4n`I@UdKSxKMAEVAESfbP|iRd-rZe0HDFG z@Ps6w8`FT!Lln(M?zxIEDtZKKi<0vcwD=Jc=)j-}cmotLOc*j=s-SJ-f*WoJpF46U zFr;uf7-%rUO@LaP9T`J7GHvW2RV*Xmf@H#e*$YNJY}hcf3!{)i%Rr*)Y5`SxrO6AB z*rG)X(-?#*)B&8rMd>!T9VIasyyu>K6cWJE6nd&LK~Lm*f}yDjAss^v7=gJb%a$$U zQH~uuHoY*Yw<3z7!E@0}0k*H|=!@tmRx&6Z&08^vj&==BM@883R`R_*El|r7Rwg(d z?bxv++sl8N`shU}oSj-!F-gLnc6!g7U%!ABo`RPRMKyhyZ=Us0m~ z5Dk}u#%;%j+Mx(+5jhkhlz+EQDBZ>zfNSt+u|1mjG?snP;=(YVLR4AF|NiR#2hH*89Rd7qpN^g0RxDA zjWz~tBdBK$G1$C$Gsp$zK)^;i<0O|!1BL}to0Yv3C=1YJ<3^1dWp=^KR*LJQ3GVEM8L2LHv6@@J^#EE9` zKq2RN1dx-Mn3#0LATo98RKXAnTcSh>-?Y&mJk|WO4>vaQ-Ta}lx1f)3V zXv2mL1DkQlb~EuzuxXaen7ngnBWkZ#4aUKN&_3|M17`Ii%J!gN_}-yI2MpiMH{Wd3 z4~2v}qFuJmgEBN0V9GV){)07nm+%L%cL~7Mi%MYu{RBs-vBKNHpo5D#FsQdNm^RHy za8f0{~}z<~pLE{scng(o<8 z@Zj{tAOefiq#*#;gjCMrp6U}*qocPZVz5lN;B+({g~yGac)eZ-l_Iyz`+N+6-Zr2W z_IuH0&6+K>1Tv5QX#59I$}oWB&z~O!MwfsgDE7^4CPlDtTNEb-j?hUA({#T$X5YY| z!k%RW;R$*@qW6mI&W^T^W=Fl6gb7Mof(^n>=^ZZ)V84F-%#QFz1-mj<0CNnMmVPKt zva&#Pqd0=5oFq_Fy>YUm%>f|IY$M2tI0B{+Z?!tu#~T)ej;61)YSoIKj2=DOgp8VK8S~Q5o?K8gxFQ>+dq4x6 zPMI>rm`fed&^eH9lT4an+?CHX@*|H@@HaQHUlW3+19T(~uKWz+Z3^8`lP8`II z6%WMV(ocI51elmS>R=Eai1KUwkrwTmN+R}*2CBk{p^1C5_5nktrJd#-GDC;Chuk6> zaMKt)aApJN>p>+-$TeyxV1(hO@#wEzE*i8#F1OT>e7*EjRzsWuo=Zkx5E7!arO1E* z0}M+s)6hZbXo+^7LbWe6gUx0f1{EpSpg{wB>4bTqq4_V=SRrt>g0V~2u3hmZQ5C)0 zv4cD{;iaiDTuTgu-U}IlwF3VxUAok-Uq5IJ8yLipX$7LH2>>O|SgBH_0tE^bELadz zYx|x?S8Xn8C$R*lb?Ve9RH%?`gTO*Tzp$Nd6!uH4TD4FKWuMR*z{7_Rg9}HX8Z8-) z@F}F}ru~u8A!lDaxCdr*JJ|FohD;JP{EC z#!}!0GXWjLh7Dsp%m@r3oNnB>ae^VtM^CC$sZtQUM;>`3C>_mnv!_h=#7980-o1MV zJu==6=Jn~PpH7(%(}r;%xdvD?-x>4dL19eNLPOm(VGWM31-30qK`{5IoLv=8YhXda zCB=*CoeUbN*?f+vFudg6|JbkbwE|1=26_jMnNy;Jv%F;K#8$Pb3>^L>ZCj# zT!QxH1~Qfg$zf8mq+?`u2xH(iH#d=Tjd+G59*39-t})M!5f6VYIyzchDBUrLz%DqE zVEFjsk8`356)Mn^z?Rqx9~}+zRDRMEp4&%6VLL&O357Q62s(A@6tvCIp+j|1jJjN4 zP=Byy&6+Z`=0OM67sei;NZh~)6DHU}Yk>j(QBhH-y;%ljQn+Y3oBLqup9V^Jc)0Cz zX>I}m0w+(N1cp%GQrw0RU+c22ZmD*rdb(O;9EWZFa2wfTJo& znn|Z4QXLl;7uX)=12KE-vBv^KRYmEqT_YG2fTlc|;v3N@JVDeCmWZv%I1D1NUnLtv z6!rASKmKu0Fj25miH8#D=>7NKAK0c>uU=pQkQS`z$>EP!d*Fcw9BnYNdaPnuz_3Gy z4vseLrCg4fjG)N?jUp+n3U^ZDd9`ZQY&KP-ND;IML^}$Fo3w07Wd@c3Bi?1hh7HZz z8#)P1ZPB8If+g%}I7N)mH^YiC{SgrnddCZ<;KQ&%sKU~vOHBfnz}h0%aU4AyH=Z&( z+6IyDnnG>TqzT7q)~p$zpczKcX6BBYfFd!zl`mi300(kjyLN3Zfv(zaseSn{3bcy> zv#BK`MvPFZI+%8wHf(u@+P z6C>qLV$_uE!p>A|CqZ(A$|%-UYl?Xac$(%cXhL#{8H1)sb=-vW=g(us=$Izc0~3?# z?%5el9a&XPnp2a}kvqd+b&X~?3`}IlwP=Dy09?CvZF2Pi6=j{F7!=h6hF~91lq*+G zqiD8*K9g6d&V_#kYkBhD>bZ52r_h}jZNKpEPR}h*T!??Wb)s(#zN1af(w^`R7gku{ z$lP1ypvyvY^z4Vvm!&xMg+!C)r2 zgqGM(nKH$o17|^?F!dt!a)w8lDh7WGR_ac3CG3R`*o;?^-l=BH4tf*Pl4?7-?A(F5 zzEi%R*HBQXAt53#c8pVU0IX7_ir=5fa10`Nqb5ly22pERa+dHEZ{sQ6Ht}DHcD|Iq zY0u7`#;n~iH&h*+#}!rjpum8rv}C-$r1b28Hqp*k10qyBZqueseA*aXuwa402K18F z%$4lhw+|R{8y7BIxP19?&5Q@dpv_3-R6WmklNpFsLM@28NiVps%TOmq}bhk-jig(QPOJYK%TB zAWFd)sfGt%W|@LG18rcdnGSaO?6c48AekIFas;g&6`0*u zs~9k*=ALigzWtJnPRMuQcT)DnQR-T`?3BTP0TVA^^5n??5HC0;Cgvgl*7Fn@nRytr zlawktD=aKb{7_Q1Y+0YDR@g@}(;bG58a09vFfO6|j8TkKI5n4A1nqJLNj)RE>dJq( zdGqGLQ3$tPtjx?;%8|sm0EzSF&9gC>Ldgu1bDnENF*q-uO65_kSTT<5mM}|q44T}S zChlEvO2A5KjJUKgC0A8&QE3@W?RecpL0Wx?s?b zv%=-swQCp70!A=CJ{~s^ogX@M=)i#kqoboWK_CG7YQ#r)yy2OOK?H`}xpU{Bv7-uK zF|niR4#TERo4)<_+l*1>wMORTc6Pu}wh5jI!^Bfio`-(@`oU6gS_5CMni4QPS<{k1 zH7yi6IX}(?PP$`Iz6OlNUbKb#Fn;`a%?9$+ROZY8utY~sjagR!g9zSPfdU2e3c@jw zkw1Ta#g1kW4DY+|KJL#KUwpxM<*3P(S@~HG0A5)P>J?w9Ql-|dTNjwY zDbLO6iNQb^Mnps$KYlzj?cgQ7D!kN|8PqEmT$lP@RPWsI^tD9dwbx#gDXdqo-bDcH zbU`!I3xh!`E2SFLEz?}MaN$m!I(1GGMYe?J_0*V=u`rB`j0A&Mq}I>>uAHRWjTFjT zyI4!h{GjS~VG8%|-MeMWmbGiwY9ZtDzQmxgV0yPZ`GfTNa%F!$-7oB$zm-6(J35Zgl+Tg*1eamWY z&DU&P75-IxB%ebk(+h(bvV{v5u3EJ!gtZmX(b4zbdvBdOb?)?w?4UQymu@r@VA#ET zceC^$GXdzBI0#y+Jur;Z@rov}mc5At3);W|a7R?9qBkX`TD@I#{<^GHok7!2X2ry= zUAvk$Z|?PaT93YC?r%{ue*9zA{y8%OgO5G-SX5Nh&Ye3~uU;M65$4UCXX?nvd!=J# z9?K9I=8Mb~Hm)@Pyw!4Q*=eS!mg8ZWYVSW>ET%#|4HV4ds1a|f)tjpBj)-WxfjN|U z2Wz0GSrX;=RnBdR3f4obROZ`s!-Zk0Pu5;LZ<5RTi~e{Xe6BVy{PX!gRq1RL-z}H4Xc%xp!!3E$UauW#&I7Q|;X@ zI&aFgpE`94EPw)~{FOx$W=*O0@BE^c97^C7piBd0YBCvp1t@`3s}z;TNj1y9N|K{T zkFrH+54Eql;leOg|H58^%B@q#J-BGtu%S21+b;G_9}NHgXq5pu(j9{UXW+nr97O5t zLQYa@3RozdAS_$5RnMC+JvTrU!)bqwOj>zduP-q5kmU z!^(ArNfLJKO84x=hqci&BJ zA$+PbW5x{S3g%PGPJLC?`du~v=Xh>>+z-J2HTU+rNx8)`e@en$V=I5b)U0RhGPUNF z{L`e|RGJ!@KdnjwAiH<(-mzl`E%~Cl@JEgu0eS*84LAZUhz9rwd-m*6;dohCpsi}T z`}XZ)ch1gv-+Jq5A{c!)~f>8q+X=rRGA8}xs4WSn+*`o1+%G_eKe2ZhJ4`3Ls2H~j*{gE>Yp=Z~C;>eNWVONAsVthZ=-a}M zD&GbYIk=L4qD4x;d;L|c&QKU?@rzdVs-)&^x7`+=E$q>G4S?a8gAwVncFAC{W5ePYis53lzM~V3ml9Y}ZF+x?C!}EA54Zk!1){OTQ?w8L8!2dM!b}R1ndO6w^nd)-b zL2i-ek5m_F@#4ie!h;77j){pGHf$I)K;`M@&z}#7fU4?22!l{i5DH8dE?gKJ8>_}} zc-688U&>SukdKo6QXZ(glhwK9IeC5Jol zOd%v7n$dvq93MwXO-ve2sRP(YG>qjNUK(@UVQOI9y*%9L$6q|V%n1*VjNuzUMl%< z)Z&4qaQ`Pvm;l+xmMc6<2G~JK{rdG8?bR7ZUCtX?Z3qKHs9MpYzS4u)Z}3$4Qz`%~ z7*o&(z+akpBZ_3nk_D4`#dXF}1Vj-{aLdu7M+Z%_X-lC(g}zxagXOp`-pFLntl- zbadv-nRrGf6MOn%Fl&C_gn~*vYPJGdy?QmHcL)c^{V}}$1g3c6p{Ot`j2(Y)z<>c;vGBO}r1>m^EwGsZ*z34e`c~ zfKL~BBowOW##|W^CF$f&WMI{zmYSgIFxpU{#C7wPV2;mf4wrnvlWa!W`{G26xRn;y4 zaJr|!lSO<0{Go}r9@MK* z@WrDPKSyfSs>LJ5VFc7VAQ%MKHU@!`)_3Cx_UO^WY{!3}Hf`Drzwl+slqnz-3y9r> zuc97+o$*uoA?b;W!O$?sAf{T+*dv3%bgB6g6oWn(_VNXrAx)YzVMtf6;5l!<{dNdv z!3n~3(uty?qEvJ&*G-=4ll=gk=E?s|Q6B)$HS#tuls$WPZ2i>`SQVH;AM}|tP55`8 ze)_43?JDK3jX_5ssBs}xEEoWCGYtmeoLE3jzH_hEty>33fuRb$Nieu50Kmk++1R`! zL6KYxUMm>nU)dhM&}(H;LyOcg*bYh(T9Q%&!=62R>UDbVGM=hqJo(1{!3V&zjl7M0 z0L0t%c(>{6fq>>!&+qVz@PIl17;DZl7NCTQF5R|?6#BQ1zyDBtq zW+-mE?Y3RJcJ17`6V4z+Yo6V9`uJ5v>H#kUV`vzpOYVEoYY2nB(z=f&!tmaE??nmK zHv~}y&YNG(N<9^`_mJS@Lh>tx>ShZ@^H~a#eISv5iK?CYGZQ2<4 z;EZ4;(E+dt#zO!gX7^ezRQ)@|pbv(BObkqI(V_*asO}{sB%pgCoDOw0Fznj3t6nU4 z@5=A3lOGE>cI;S_(>@S}SIP*Qq+5#B-0K%CpklTavF3Ou1Bd+NlTXxAOBev7>T;SI zyF5oz$gfhRN~Tt|>fWljjEyyHs8T@V721_~%a$$ME=eAG=%EMw!k37Mh|Zlmck0y1 zysd@LxbdRbA_nt$|@=WTXmMa4mxd4N^{fH1@=a z6DlonrB>Y7^YW_Mq+$~gLarJ<2^RDnlZ)}&LDP^Yg7(r zd|s0%n41t26Jr8C0U)@>_0}pd)jH&!s3`M}9XmLeK~}bG*(ObzwA2y~0+unU;N31a z|I|}YxkU6D#h?#{k0z$pXN1QtsFU&W@u9&GrPV4YomZv(@QJV{rnH2CVagR=GJ%Mi zSDLbVoBRTwjEjrgym|Bb_3J?d{vFD1Fxa$dQ+~p;qotNL@tATNcUrcxy*u*Si9BDjy z^k_4g{`%{$!(D;xqD70Kqd_CL10`R+e7K@Yh@tiPdMgXtOyd!F$}S5H`IWdGFUsTN z$)fXP$BupCi6=52gFYB`N`zs%cI^xdr%#`blM=$&u^@(&LY$<-_3PJ1)dj=DhYy>2 zXPF5@2L_KHKMn?!WB_EfZ{OaicWi9z?Afzt`Nd$cUcGvlMc_%}UcGvm#^4m-z+D&n z#mo<;5OfO9#N?U8P@1O1G^=Dhx2R#mhAE&Aq3~nIjJZ-6 zdv%{bDc(?F55d8nzx9X;-qAC1vp8Cljkyt5z*cB#*$Rmmn1U;sDwS5*;Pu zRT>_;+qP|6#Q_@c5=Jp`;zZiG6g1?(43k(!tJO5G#FLGSi-X?8#Kc@F4EkW$fyeB7 z)*U)@Ffg1tb!uoZgv%Ki`ZGFu^&%aGw-=eQ*D%riK@Tq&1~2dXHApw(pTz&TTE zo_)Xm`fHH~`s^r1v4WS#D5(C4=jT=idTefVuVZ(-P+qQl3$tSA*2`f;kmy9M?j=2fFnr0+a9*M49 zyBb(ARUyQ%rmpow{tt0rTTY&%Lj zrBIBY*!V0(z)`c{Kc)XPy~4bZEbR{jN9$efj4f zOoZVhk33>vh#L|b45v+-W?+bEkbXu)M4+x1AoSl9;ZN1wKAGp)#0ym26Dx8mig{nNg!V9qxuuxN;9y)ZDV32>slEN{% zckgbr=(*>f3k`-7CQLBFY&B}s&|AJ9J$k@MKmGJmnZisf0BXpdDKnuF^2CV~$5Rxg zzL)TwZY$j=5|~d0?(M!jxq67Gi4a!F38gidHER}{Y0A_0?b|mhD(dRNpbv&g3*7*V z4a3lS#b{$-s5;=l5EmFz$k3!TeVLPecJ2!k`a^EiVLC8Fhk` zhSo8&*bp#Qu3T9Y+0X#E9CXyYnaRwsnUqTerYr`$rd*o+3e*MQRfRzXr@>qH?%n(L z+iz<=V&cS!Pd)V%BPRf?Sg~S3zhp#Cr?Bk4WG}f&c`A*#WDMRiBys6I(x*=!T^bj~ z7!q2NQsWqM?aCn*9v;rEfFxv^OPI!YAZZat%}{sx;OfL+&;ZfrpMM@}f(gI~2IiB@ zh}?$C1zKs;B>=F}Fkfj2TOeAxx`c#;(E7G}_ij_!kT2!Sm)BCA`1trMRSP?V!0STb zD#V~($k-ShIdWu`DplkeHEY(aOOkZ$+7-KS`545=>VO?ObdZtFR?t)V$+Q7*cp?Dl zVXIcHOy7F;?0GpD6b!j=Q^2B3nKH_viI02@VbGOpl#6Py(#n-98TKJy5fKprpvh5Y z1RUWsT_y%?!QT`N^H)m~26Ghm%@INu4;?z>I3Rys4hB_pd&GzlIvO7FO*i?H^|YC&IGFj#hAmheOMJa_u? zMXy+~;x~W(!;I+Fwr$%4LoEdYgIYu3V$hXzgrOass6vw}u=VoGFE3iONaMdS7}{dJ zw8w3x5rbv=X9@rEuCU*ld&=iB7!0{$TB^eFZ4A0)yj;l$Q)m}lRxRwEJ9lcmOy9nJ z4F;8&B!gtmoH=R1VCnwh;a}JH6^Ku$;_*j53WJ+BZ_c2O!MAM;y5%fg$sjuF2-H^s zAFLrvEORh8fByVbF<7c^c$VY$_y8DR*^@0ynL;xfgYW?xgYF9%S2Bo>ny~G2=gz@M zwO;1qk3SwWW{klg+e1t5nW}(ymG9J2@jNB71OZ@l)-2yO^Z{^YB~Mo0dhJS;Dj5uJ z-MTfjMH6XsRJ9})47%YZu4Jew)EZu;vpatL_>m(=rcRxzVs`Jo`!0>oo;`agz2)=I zKgXNH$O0mz&a2$4MAfLg7pC<1aC`+%n74K7)+!9aC_A)u;2xa7`#W5$T8H6c$t@q`ON zS27xd_F@@D+H2(+zM;u~o^cW$9zJf|I3)yYGO*g*-=fAG?iluM10Mj#lm~!#i=fY> z75e$-pXuBB_3P7^?(%YE@ZiBN0A0BvNHojVzWw&w_tRUp`(@j%`- z`t)ffPHFx`_3_6d!_GDKK3&e^^>pmm5!{(20CwMw9zB{~UD}Z(ANXabUq1ZsLl=Oq zWIha2ShMz@P$lpPf$8$ZGX=wjy{mW!l~(#D+N9dI%kNlnNs3$mx^e}Pn4x0ZHG8Qk zVsbBZ>( + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + The editor + Theeditor + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nsis/icons/un_header.bmp b/nsis/icons/un_header.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4b6516951f44a16a8398341992000b4343204405 GIT binary patch literal 102654 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 ~u5PB6v{pv*i@d~E32LYI z*|TTeOkDHl&&O%P;p*SNKT1%04bpG#Qkn?<5hFEk-rQg~c<^BC=P3GvHES>|QlyCP z+@whp)CUR(PY2roIAmlIUN`Tn@?bLr(P0o{2G7F8i<`K>k0QGS*CVh(Ri0kqh3E*Z zP%BT5Idq9&5HhA}(V~TM(V#(tqJ!a(Aww*ft#IMOn&oTRvLzPjzJ2?o3Nx$#s2O`! zW?vyE0utNLx?c1YA59NHo5N+MM^(BQt zs93RL7FcEMgi#t@$8579V0`%DhqaK68GtQ^IchUA85uSczC>VnGVoftGgr1q;eEs#K{`lVobvtQmUY!ZC=F)eTW+QnEMRcq9Le z1b_`2HWUEqVT~F!tZ%JawYm@t3WmJ66|lJX-g}ir6Ce39!k|x=sV%C_O7rK>N9<#O z#l^)5fR>}o2pr)wT_6Ts!rv4O@4N55NHC}%{Pi*DQ~J%xC^AZ$W!`@KZFqRps8RLm)ze}w?QxXGjT`4~osPPMuEiUR5)%_! zw{8u$tIkp0ym?avVBNZP^XJb`;~6t%&^PcqbLLF9Zy$W{!Hx@~O`A4>J_9w+y6djH z{8X7fr4t5!{`u$czyJQki4#h>ykf-)>@Luu0?=j4mc2mhE>#*ne7H9BMS?*9IB(uO zrCi|PKY{#*>Cvl=8#fAu+6n{)wTHsTpieP`p&Om3LX#@6_0Bu*OrJho@?RK?ZnIwG zahnlhuuh#i3l=Qcym@o(+_?>dQCCb$mAJo)LBEWbPwAlw-Ga-ig}rs_R_&MR*s-Hw zP?<^6i6%~*7zqXeAi@Cv_UhG3A)~_Jnl)?EsbkpNE(ZN_mOiDEIqC`2R{|fjA(mLi zU~tNmDXC(RUl%W43;?@z>y{-;7G(-eZwvx?7lZzUj8Exgj#}9ExpU{RNVQ+)(@#I` z-@m_Mkn_={_e_<*yUKTJt9Z_wIfDUMyLN31P5_vYkdQfZ=HkVR7bsA`Ft}mEhUhj; zMChn$ODq`l!%KWhS5>Gzyh>+x{P^)BM~;jdHA)qWKK$@Q8lOFT_E4eT6)Ypy9*uH3F&yB>S&F=ZcBohCflnD-6guyf~59AvH0 z;DP!|(5DQ5q0-p_H;{-b)b!(Rx7{WfrW5hpx^?R+57>YK1NQFSYcQ-;tJdn(s{tU+ zDZf^&TJ_kmV<%6Z95Q5xa)cHsQUr04P8~aQ<_u3%5Ki~*-F+qKQwG3L>FgA2k4^** zf?>97*=~0zXENR4(48qzE{E=ND0eb(9|2GsC(Ky90C&YDuvM#801$5x^jTV=pMUIJ}8Z-cRwgtfL+tH&(W7VZC z$@Fo6wgza&jvYP#ead(khS{_B&uA(54#Da2WM>M74I4Jp#tN)c+N9dI3-4G;Ns4>` z`g9SIn6BjNHFv8iWVsibH*ap?VHr<8Gx+o?L8ZsY)IqBNg^vyMLFbcCu|>CQ2g*?N sap99s7g5jpU&be&eDcXBpM3JkC!c)s$tRzD^2sNkeDcXBpDuU$fA@dRng9R* literal 0 Hc-jL100001 diff --git a/nsis/icons/uninstall.bmp b/nsis/icons/uninstall.bmp new file mode 100644 index 0000000000000000000000000000000000000000..223d6a45df3d1c2c32974742928111e13f10888f GIT binary patch literal 618006 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

D^{!kc~x?hK}7?mXo@pGSXV$<=VMk<&vhDw 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 Lz%_y(8m|98Q2MSQ literal 0 Hc-jL100001 diff --git a/nsis/icons/welcome.svg b/nsis/icons/welcome.svg new file mode 100644 index 0000000000..bf99194308 --- /dev/null +++ b/nsis/icons/welcome.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + The editor + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nsis/lang/danish.nsi b/nsis/lang/danish.nsi new file mode 100644 index 0000000000..fc3720a92a --- /dev/null +++ b/nsis/lang/danish.nsi @@ -0,0 +1,175 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# danish.nsi: Danish language strings for gvim NSIS installer. +# +# Locale ID : 1030 +# fileencoding : UTF-8 +# Author : scootergrisen + +!insertmacro MUI_LANGUAGE "Danish" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_DANISH} "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_DANISH} "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_DANISH} "Destinationsmappe (skal slutte med $\"vim$\")" + +LangString str_show_readme ${LANG_DANISH} "Vis README efter installationen er gennemført" + +# Install types: +LangString str_type_typical ${LANG_DANISH} "Typisk" + +LangString str_type_minimal ${LANG_DANISH} "Minimal" + +LangString str_type_full ${LANG_DANISH} "Fuld" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_DANISH} "Afinstaller eksisterende version(er)" +LangString str_desc_old_ver ${LANG_DANISH} "Afinstaller eksisterende Vim-version(er) fra dit system." + +LangString str_section_exe ${LANG_DANISH} "Vim GUI og afviklingsfiler" +LangString str_desc_exe ${LANG_DANISH} "Vim GUI-eksekverbare- og afviklingsfiler. Komponenten kræves." + +LangString str_section_console ${LANG_DANISH} "Vim-konsolprogram" +LangString str_desc_console ${LANG_DANISH} "Konsolversion af Vim (vim.exe)." + +LangString str_section_batch ${LANG_DANISH} "Opret .bat-filer" +LangString str_desc_batch ${LANG_DANISH} "Opret .bat-filer til Vim-varianter i Windows-mappen til brug fra kommandolinjen." + +LangString str_group_icons ${LANG_DANISH} "Opret ikoner til Vim" +LangString str_desc_icons ${LANG_DANISH} "Opret ikoner til Vim diverse steder for at hjælpe med at gøre adgangen let." + +LangString str_section_desktop ${LANG_DANISH} "På skrivebordet" +LangString str_desc_desktop ${LANG_DANISH} "Opret ikoner til gVim-eksekverbare på skrivebordet." + +LangString str_section_start_menu ${LANG_DANISH} "I Programmer-mappen i menuen Start" +LangString str_desc_start_menu ${LANG_DANISH} "Tilføj Vim i Programmer-mappen i menuen Start." + +#LangString str_section_quick_launch ${LANG_DANISH} "I værktøjslinjen Hurtig start" +#LangString str_desc_quick_launch ${LANG_DANISH} "Tilføj Vim-genvej i værktøjslinjen Hurtig start." + +LangString str_section_edit_with ${LANG_DANISH} "Tilføj Vim-genvejsmenu" +LangString str_desc_edit_with ${LANG_DANISH} "Tilføj Vim til listen i $\"Åbn med...$\"-genvejsmenuen." + +#LangString str_section_edit_with32 ${LANG_DANISH} "32-bit-version" +#LangString str_desc_edit_with32 ${LANG_DANISH} "Tilføj Vim til listen i $\"Åbn med...$\"-genvejsmenuen for 32-bit-programmer." + +#LangString str_section_edit_with64 ${LANG_DANISH} "64-bit-version" +#LangString str_desc_edit_with64 ${LANG_DANISH} "Tilføj Vim til listen i $\"Åbn med...$\"-genvejsmenuen for 64-bit-programmer." + +LangString str_section_vim_rc ${LANG_DANISH} "Opret standardkonfiguration" +LangString str_desc_vim_rc ${LANG_DANISH} "Opret en standardkonfigurationsfil (_vimrc) hvis der ikke allerede findes en." + +LangString str_group_plugin ${LANG_DANISH} "Opret plugin-mapper" +LangString str_desc_plugin ${LANG_DANISH} "Opret plugin-mapper. Plugin-mapper giver mulighed for at udvide Vim ved at slippe en fil i en mappen." + +LangString str_section_plugin_home ${LANG_DANISH} "Private" +LangString str_desc_plugin_home ${LANG_DANISH} "Opret plugin-mapper i HOME-mappen." + +LangString str_section_plugin_vim ${LANG_DANISH} "Delte" +LangString str_desc_plugin_vim ${LANG_DANISH} "Opret plugin-mapper i Vim-installationsmappe, det bruges af alle på systemet." + +LangString str_section_vis_vim ${LANG_DANISH} "VisVim-udvidelser" +LangString str_desc_vis_vim ${LANG_DANISH} "VisVim-udvidelser til integrering i Microsoft Visual Studio." + +LangString str_section_nls ${LANG_DANISH} "Understøttelse af modersmål" +LangString str_desc_nls ${LANG_DANISH} "Installer filer til understøttelse af modersmål." + +LangString str_unsection_register ${LANG_DANISH} "Afregistrer Vim" +LangString str_desc_unregister ${LANG_DANISH} "Afregistrer Vim fra systemet." + +LangString str_unsection_exe ${LANG_DANISH} "Fjern Vim-eksekverbare-/afviklingsfiler" +LangString str_desc_rm_exe ${LANG_DANISH} "Fjern alle Vim-eksekverbare- og afviklingsfiler." + +LangString str_ungroup_plugin ${LANG_DANISH} "Fjern plugin-mapper" +LangString str_desc_rm_plugin ${LANG_DANISH} "Fjern plugin-mapperne hvis de er tomme." + +LangString str_unsection_plugin_home ${LANG_DANISH} "Privat" +LangString str_desc_rm_plugin_home ${LANG_DANISH} "Fjern plugin-mapperne fra HOME-mappen." + +LangString str_unsection_plugin_vim ${LANG_DANISH} "Delte" +LangString str_desc_rm_plugin_vim ${LANG_DANISH} "Fjern plugin-mapperne fra Vim-installationsmappen." + +LangString str_unsection_rootdir ${LANG_DANISH} "Fjern Vim-rodmappen" +LangString str_desc_rm_rootdir ${LANG_DANISH} "Fjern Vim-rodmappen. Den indeholder dine Vim-konfigurationsfiler!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_DANISH} "Fandt $vim_old_ver_count Vim-versioner på dit system.$\r$\nInstallationsguiden kan højst håndtere ${VIM_MAX_OLD_VER}-versioner.$\r$\nFjern venligst nogle versioner og start igen." + +#LangString str_msg_invalid_root ${LANG_DANISH} "Ugyldig installationssti: $vim_install_root!$\r$\nDen skal slutte med $\"vim$\"." + +#LangString str_msg_bin_mismatch ${LANG_DANISH} "Uoverensstemmelse i binære sti!$\r$\n$\r$\nForventede at den binære sti var $\"$vim_bin_path$\",$\r$\nmen systemet indikerer at den binære sti er $\"$INSTDIR$\"." + +#LangString str_msg_vim_running ${LANG_DANISH} "Vim kører stadig på dit system.$\r$\nLuk venligst alle instanser af Vim inden du fortsætter." + +#LangString str_msg_register_ole ${LANG_DANISH} "Forsøger at registrere Vim med OLE. Der er ingen meddelelse til at indikere om det virker eller ej." + +#LangString str_msg_unreg_ole ${LANG_DANISH} "Forsøger at afregistrere Vim med OLE. Der er ingen meddelelse til at indikere om det virker eller ej." + +#LangString str_msg_rm_start ${LANG_DANISH} "Afinstallerer følgende version:" + +#LangString str_msg_rm_fail ${LANG_DANISH} "Kunne ikke afinstallere følgende version:" + +#LangString str_msg_no_rm_key ${LANG_DANISH} "Kan ikke finde registreringsdatabasenøgle for afinstallationsguiden." + +#LangString str_msg_no_rm_reg ${LANG_DANISH} "Kan ikke finde afinstallationsguiden fra registreringsdatabasen." + +#LangString str_msg_no_rm_exe ${LANG_DANISH} "Kan ikke tilgå afinstallationsguide." + +#LangString str_msg_rm_copy_fail ${LANG_DANISH} "Kunne ikke kopiere afinstallationsguide til midlertidig mappe." + +#LangString str_msg_rm_run_fail ${LANG_DANISH} "Kunne ikke køre afinstallationsguide." + +#LangString str_msg_abort_install ${LANG_DANISH} "Installationsguiden vil afbryde." + +LangString str_msg_install_fail ${LANG_DANISH} "Installationen mislykkedes. Bedre held næste gang." + +LangString str_msg_rm_exe_fail ${LANG_DANISH} "Nogle filer i $0 er ikke blevet slettet!$\r$\nDu skal gøre det manuelt." + +#LangString str_msg_rm_root_fail ${LANG_DANISH} "ADVARSEL: Kan ikke fjerne $\"$vim_install_root$\", den er ikke tom!" + +LangString str_msg_uninstalling ${LANG_DANISH} "Afinstallerer den gamle version..." + +LangString str_msg_registering ${LANG_DANISH} "Registrerer..." + +LangString str_msg_unregistering ${LANG_DANISH} "Afregistrerer..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_DANISH} "Vælg _vimrc-indstillinger" +LangString str_vimrc_page_subtitle ${LANG_DANISH} "Vælg indstillingerne til forbedring, tastatur og mus." + +LangString str_msg_compat_title ${LANG_DANISH} " Vi- / Vim-opførsel " +LangString str_msg_compat_desc ${LANG_DANISH} "&Kompatibilitet og forbedringer" +LangString str_msg_compat_vi ${LANG_DANISH} "Vi-kompatibel" +LangString str_msg_compat_vim ${LANG_DANISH} "Vim original" +LangString str_msg_compat_defaults ${LANG_DANISH} "Vim med nogle forbedringer (indlæs defaults.vim)" +LangString str_msg_compat_all ${LANG_DANISH} "Vim med alle forbedringer (indlæs vimrc_example.vim) (standard)" + +LangString str_msg_keymap_title ${LANG_DANISH} " Tilknytninger " +LangString str_msg_keymap_desc ${LANG_DANISH} "&Gentilknyt nogle få taster (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F osv.)" +LangString str_msg_keymap_default ${LANG_DANISH} "Gentilknyt ikke taster (standard)" +LangString str_msg_keymap_windows ${LANG_DANISH} "Gentilknyt nogle få taster til Windows" + +LangString str_msg_mouse_title ${LANG_DANISH} " Mus " +LangString str_msg_mouse_desc ${LANG_DANISH} "&Opførsel af højre og venstre knapper" +LangString str_msg_mouse_default ${LANG_DANISH} "Højre: genvejsmenu, venstre: visuel tilstand (standard)" +LangString str_msg_mouse_windows ${LANG_DANISH} "Højre: genvejsmenu, venstre: vælg-tilstand (Windows)" +LangString str_msg_mouse_unix ${LANG_DANISH} "Højre: udvider markering, venstre: visuel tilstand (Unix)" diff --git a/nsis/lang/dutch.nsi b/nsis/lang/dutch.nsi new file mode 100644 index 0000000000..3ff986dc3d --- /dev/null +++ b/nsis/lang/dutch.nsi @@ -0,0 +1,281 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# dutch.nsi : Dutch language strings for gvim NSIS installer. +# +# Locale ID : 1043 +# Locale Name : nl +# fileencoding : UTF-8 +# Author : Peter Odding + +!insertmacro MUI_LANGUAGE "Dutch" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_DUTCH} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_DUTCH} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_DUTCH} \ +# "Doelmap (moet eindigen op $\"vim$\")" + +LangString str_show_readme ${LANG_DUTCH} \ + "README weergeven na installatie" + +# Install types: +LangString str_type_typical ${LANG_DUTCH} \ + "Gebruikelijk" + +LangString str_type_minimal ${LANG_DUTCH} \ + "Minimaal" + +LangString str_type_full ${LANG_DUTCH} \ + "Volledig" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_DUTCH} \ + "Bestaande versie(s) de-installeren" +LangString str_desc_old_ver ${LANG_DUTCH} \ + "Bestaande Vim versie(s) van je systeem verwijderen." + +LangString str_section_exe ${LANG_DUTCH} \ + "Vim GUI" +LangString str_desc_exe ${LANG_DUTCH} \ + "Vim GUI uitvoerbare bestanden en runtime bestanden. Dit component is vereist." + +LangString str_section_console ${LANG_DUTCH} \ + "Vim console programma" +LangString str_desc_console ${LANG_DUTCH} \ + "Console versie van Vim (vim.exe)." + +LangString str_section_batch ${LANG_DUTCH} \ + "Creëer .bat bestanden" +LangString str_desc_batch ${LANG_DUTCH} \ + "Creëer .bat bestanden voor Vim varianten in de Windows map voor \ + commando regel gebruik." + +LangString str_group_icons ${LANG_DUTCH} \ + "Creëer pictogrammen for Vim" +LangString str_desc_icons ${LANG_DUTCH} \ + "Creëer pictogrammen voor Vim op verschillende locaties voor gemakkelijke toegang." + +LangString str_section_desktop ${LANG_DUTCH} \ + "Op het bureaublad" +LangString str_desc_desktop ${LANG_DUTCH} \ + "Creëer pictogrammen voor Vim uitvoerbare bestanden op het bureaublad." + +LangString str_section_start_menu ${LANG_DUTCH} \ + "In de Programma's map in het start menu" +LangString str_desc_start_menu ${LANG_DUTCH} \ + "Voeg Vim toe aan de programma's map in het start menu. \ + Van toepassing op Windows 95 en later." + +#LangString str_section_quick_launch ${LANG_DUTCH} \ +# "In de snel starten balk" +#LangString str_desc_quick_launch ${LANG_DUTCH} \ +# "Voeg Vim snelkoppeling toe aan de snel starten balk." + +LangString str_section_edit_with ${LANG_DUTCH} \ + "Voeg Vim contextmenu toe" +LangString str_desc_edit_with ${LANG_DUTCH} \ + "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst." + +#LangString str_section_edit_with32 ${LANG_DUTCH} \ +# "32-bit versie" +#LangString str_desc_edit_with32 ${LANG_DUTCH} \ +# "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst \ +# voor 32-bit toepassingen." + +#LangString str_section_edit_with64 ${LANG_DUTCH} \ +# "64-bit versie" +#LangString str_desc_edit_with64 ${LANG_DUTCH} \ +# "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst \ +# voor 64-bit toepassingen." + +LangString str_section_vim_rc ${LANG_DUTCH} \ + "Creëer standaard configuratie" +LangString str_desc_vim_rc ${LANG_DUTCH} \ + "Creëer een standaard configuratie bestand (_vimrc) als er nog geen bestaat." + +LangString str_group_plugin ${LANG_DUTCH} \ + "Creëer Plugin mappen" +LangString str_desc_plugin ${LANG_DUTCH} \ + "Creëer plugin mappen. Plugin mappen maken het mogelijk om \ + Vim uit te breiden door een bestand in een map te plaatsen." + +LangString str_section_plugin_home ${LANG_DUTCH} \ + "Privé" +LangString str_desc_plugin_home ${LANG_DUTCH} \ + "Create plugin directories in HOME directory." + +LangString str_section_plugin_vim ${LANG_DUTCH} \ + "Gedeeld" +LangString str_desc_plugin_vim ${LANG_DUTCH} \ + "Creëer plugin mappen in Vim installatie map, deze worden gebruikt \ + voor iedereen op het systeem." + +LangString str_section_vis_vim ${LANG_DUTCH} \ + "VisVim extensie" +LangString str_desc_vis_vim ${LANG_DUTCH} \ + "VisVim extensie voor Microsoft Visual Studio integratie." + +LangString str_section_nls ${LANG_DUTCH} \ + "Ondersteuning voor andere talen" +LangString str_desc_nls ${LANG_DUTCH} \ + "Bestanden voor ondersteuning van andere talen dan Engels installeren." + +LangString str_unsection_register ${LANG_DUTCH} \ + "Vim afmelden" +LangString str_desc_unregister ${LANG_DUTCH} \ + "Registratie van Vim in het systeem ongedaan maken." + +LangString str_unsection_exe ${LANG_DUTCH} \ + "Vim uitvoerbare/runtime bestanden verwijderen" +LangString str_desc_rm_exe ${LANG_DUTCH} \ + "Verwijder alle Vim uitvoerbare bestanden en runtime bestanden." + +LangString str_ungroup_plugin ${LANG_DUTCH} \ + "Remove plugin directories" +LangString str_desc_rm_plugin ${LANG_DUTCH} \ + "Remove the plugin directories if they are empty." + +LangString str_unsection_plugin_home ${LANG_DUTCH} \ + "Privé" +LangString str_desc_rm_plugin_home ${LANG_DUTCH} \ + "Remove the plugin directories from HOME directory." + +LangString str_unsection_plugin_vim ${LANG_DUTCH} \ + "Gedeeld" +LangString str_desc_rm_plugin_vim ${LANG_DUTCH} \ + "Remove the plugin directories from Vim install directory." + +LangString str_unsection_rootdir ${LANG_DUTCH} \ + "Remove the Vim root directory" +LangString str_desc_rm_rootdir ${LANG_DUTCH} \ + "Remove the Vim root directory. It contains your Vim configuration files!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_DUTCH} \ +# "Er zijn $vim_old_ver_count Vim versies op je systeem gevonden.$\r$\n\ +# Deze installatie kan omgaan met maximaal ${VIM_MAX_OLD_VER} versies.$\r$\n\ +# Verwijder a.u.b. wat versies en probeer het dan opnieuw." + +#LangString str_msg_invalid_root ${LANG_DUTCH} \ +# "Ongeldig installatiepad: $vim_install_root!$\r$\n\ +# Het moet eindelijk op $\"vim$\"." + +#LangString str_msg_bin_mismatch ${LANG_DUTCH} \ +# "Binair pad onjuist!$\r$\n$\r$\n\ +# Het binaire pad zou $\"$vim_bin_path$\" moeten zijn,$\r$\n\ +# maar het systeem geeft aan dat het binaire pad $\"$INSTDIR$\" is." + +#LangString str_msg_vim_running ${LANG_DUTCH} \ +# "Vim is nog actief op je systeem.$\r$\n\ +# Sluit a.u.b. alle instanties van Vim voordat je verder gaat." + +#LangString str_msg_register_ole ${LANG_DUTCH} \ +# "Bezig met proberen om Vim te registreren met OLE. \ +# Er is geen bericht dat aangeeft of deze operatie slaagt." + +#LangString str_msg_unreg_ole ${LANG_DUTCH} \ +# "Bezig met proberen om Vim te de-registreren met OLE. \ +# Er is geen bericht dat aangeeft of deze operatie slaagt." + +#LangString str_msg_rm_start ${LANG_DUTCH} \ +# "De volgende versies worden verwijderd:" + +#LangString str_msg_rm_fail ${LANG_DUTCH} \ +# "De volgende versies konden niet worden verwijderd:" + +#LangString str_msg_no_rm_key ${LANG_DUTCH} \ +# "Kan de uninstaller register sleutel niet vinden." + +#LangString str_msg_no_rm_reg ${LANG_DUTCH} \ +# "Kan de uninstaller niet vinden via het register." + +#LangString str_msg_no_rm_exe ${LANG_DUTCH} \ +# "Kan geen toegang krijgen tot de uninstaller." + +#LangString str_msg_rm_copy_fail ${LANG_DUTCH} \ +# "Kon de uninstaller niet naar een tijdelijke map kopiëren." + +#LangString str_msg_rm_run_fail ${LANG_DUTCH} \ +# "Kon de uninstaller niet uitvoeren." + +#LangString str_msg_abort_install ${LANG_DUTCH} \ +# "Installatie wordt gestopt." + +LangString str_msg_install_fail ${LANG_DUTCH} \ + "Installatie is mislukt." + +LangString str_msg_rm_exe_fail ${LANG_DUTCH} \ + "Sommige bestanden in $0 zijn niet verwijderd!$\r$\n\ + Dit moet je handmatig doen." + +#LangString str_msg_rm_root_fail ${LANG_DUTCH} \ +# "WAARSCHUWING: Kan $\"$vim_install_root$\" niet verwijderen omdat het niet leeg is!" + +LangString str_msg_uninstalling ${LANG_DUTCH} \ + "Uninstalling the old version..." + +LangString str_msg_registering ${LANG_DUTCH} \ + "Registering..." + +LangString str_msg_unregistering ${LANG_DUTCH} \ + "Unregistering..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_DUTCH} \ + "Choose _vimrc settings" +LangString str_vimrc_page_subtitle ${LANG_DUTCH} \ + "Choose the settings for enhancement, keyboard and mouse." + +LangString str_msg_compat_title ${LANG_DUTCH} \ + " Vi / Vim behavior " +LangString str_msg_compat_desc ${LANG_DUTCH} \ + "&Compatibility and enhancements" +LangString str_msg_compat_vi ${LANG_DUTCH} \ + "Vi compatible" +LangString str_msg_compat_vim ${LANG_DUTCH} \ + "Vim original" +LangString str_msg_compat_defaults ${LANG_DUTCH} \ + "Vim with some enhancements (load defaults.vim)" +LangString str_msg_compat_all ${LANG_DUTCH} \ + "Vim with all enhancements (load vimrc_example.vim) (Default)" + +LangString str_msg_keymap_title ${LANG_DUTCH} \ + " Mappings " +LangString str_msg_keymap_desc ${LANG_DUTCH} \ + "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_DUTCH} \ + "Do not remap keys (Default)" +LangString str_msg_keymap_windows ${LANG_DUTCH} \ + "Remap a few keys" + +LangString str_msg_mouse_title ${LANG_DUTCH} \ + " Mouse " +LangString str_msg_mouse_desc ${LANG_DUTCH} \ + "&Behavior of right and left buttons" +LangString str_msg_mouse_default ${LANG_DUTCH} \ + "Right: popup menu, Left: visual mode (Default)" +LangString str_msg_mouse_windows ${LANG_DUTCH} \ + "Right: popup menu, Left: select mode (Windows)" +LangString str_msg_mouse_unix ${LANG_DUTCH} \ + "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/english.nsi b/nsis/lang/english.nsi new file mode 100644 index 0000000000..f8990a5956 --- /dev/null +++ b/nsis/lang/english.nsi @@ -0,0 +1,280 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# english.nsi: English language strings for gvim NSIS installer. +# +# Locale ID : 1033 +# fileencoding : UTF-8 +# Author : Guopeng Wen, Ken Takata + +!insertmacro MUI_LANGUAGE "English" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_ENGLISH} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_ENGLISH} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_ENGLISH} \ +# "Destination Folder (Must end with $\"vim$\")" + +LangString str_show_readme ${LANG_ENGLISH} \ + "Show README after installation finish" + +# Install types: +LangString str_type_typical ${LANG_ENGLISH} \ + "Typical" + +LangString str_type_minimal ${LANG_ENGLISH} \ + "Minimal" + +LangString str_type_full ${LANG_ENGLISH} \ + "Full" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_ENGLISH} \ + "Uninstall Existing Version(s)" +LangString str_desc_old_ver ${LANG_ENGLISH} \ + "Uninstall existing Vim version(s) from your system." + +LangString str_section_exe ${LANG_ENGLISH} \ + "Vim GUI and runtime files" +LangString str_desc_exe ${LANG_ENGLISH} \ + "Vim GUI executables and runtime files. This component is required." + +LangString str_section_console ${LANG_ENGLISH} \ + "Vim console program" +LangString str_desc_console ${LANG_ENGLISH} \ + "Console version of Vim (vim.exe)." + +LangString str_section_batch ${LANG_ENGLISH} \ + "Create .bat files" +LangString str_desc_batch ${LANG_ENGLISH} \ + "Create .bat files for Vim variants in the Windows directory for \ + command line use." + +LangString str_group_icons ${LANG_ENGLISH} \ + "Create icons for Vim" +LangString str_desc_icons ${LANG_ENGLISH} \ + "Create icons for Vim at various locations to facilitate easy access." + +LangString str_section_desktop ${LANG_ENGLISH} \ + "On the Desktop" +LangString str_desc_desktop ${LANG_ENGLISH} \ + "Create icons for gVim executables on the desktop." + +LangString str_section_start_menu ${LANG_ENGLISH} \ + "In the Start Menu Programs Folder" +LangString str_desc_start_menu ${LANG_ENGLISH} \ + "Add Vim in the programs folder of the start menu." + +#LangString str_section_quick_launch ${LANG_ENGLISH} \ +# "In the Quick Launch Bar" +#LangString str_desc_quick_launch ${LANG_ENGLISH} \ +# "Add Vim shortcut in the quick launch bar." + +LangString str_section_edit_with ${LANG_ENGLISH} \ + "Add Vim Context Menu" +LangString str_desc_edit_with ${LANG_ENGLISH} \ + "Add Vim to the $\"Open With...$\" context menu list." + +#LangString str_section_edit_with32 ${LANG_ENGLISH} \ +# "32-bit Version" +#LangString str_desc_edit_with32 ${LANG_ENGLISH} \ +# "Add Vim to the $\"Open With...$\" context menu list \ +# for 32-bit applications." + +#LangString str_section_edit_with64 ${LANG_ENGLISH} \ +# "64-bit Version" +#LangString str_desc_edit_with64 ${LANG_ENGLISH} \ +# "Add Vim to the $\"Open With...$\" context menu list \ +# for 64-bit applications." + +LangString str_section_vim_rc ${LANG_ENGLISH} \ + "Create Default Config" +LangString str_desc_vim_rc ${LANG_ENGLISH} \ + "Create a default config file (_vimrc) if one does not already exist." + +LangString str_group_plugin ${LANG_ENGLISH} \ + "Create Plugin Directories" +LangString str_desc_plugin ${LANG_ENGLISH} \ + "Create plugin directories. Plugin directories allow extending Vim \ + by dropping a file into a directory." + +LangString str_section_plugin_home ${LANG_ENGLISH} \ + "Private" +LangString str_desc_plugin_home ${LANG_ENGLISH} \ + "Create plugin directories in HOME directory." + +LangString str_section_plugin_vim ${LANG_ENGLISH} \ + "Shared" +LangString str_desc_plugin_vim ${LANG_ENGLISH} \ + "Create plugin directories in Vim install directory, it is used for \ + everybody on the system." + +LangString str_section_vis_vim ${LANG_ENGLISH} \ + "VisVim Extension" +LangString str_desc_vis_vim ${LANG_ENGLISH} \ + "VisVim Extension for Microsoft Visual Studio integration." + +LangString str_section_nls ${LANG_ENGLISH} \ + "Native Language Support" +LangString str_desc_nls ${LANG_ENGLISH} \ + "Install files for native language support." + +LangString str_unsection_register ${LANG_ENGLISH} \ + "Unregister Vim" +LangString str_desc_unregister ${LANG_ENGLISH} \ + "Unregister Vim from the system." + +LangString str_unsection_exe ${LANG_ENGLISH} \ + "Remove Vim Executables/Runtime Files" +LangString str_desc_rm_exe ${LANG_ENGLISH} \ + "Remove all Vim executables and runtime files." + +LangString str_ungroup_plugin ${LANG_ENGLISH} \ + "Remove plugin directories" +LangString str_desc_rm_plugin ${LANG_ENGLISH} \ + "Remove the plugin directories if they are empty." + +LangString str_unsection_plugin_home ${LANG_ENGLISH} \ + "Private" +LangString str_desc_rm_plugin_home ${LANG_ENGLISH} \ + "Remove the plugin directories from HOME directory." + +LangString str_unsection_plugin_vim ${LANG_ENGLISH} \ + "Shared" +LangString str_desc_rm_plugin_vim ${LANG_ENGLISH} \ + "Remove the plugin directories from Vim install directory." + +LangString str_unsection_rootdir ${LANG_ENGLISH} \ + "Remove the Vim root directory" +LangString str_desc_rm_rootdir ${LANG_ENGLISH} \ + "Remove the Vim root directory. It contains your Vim configuration files!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_ENGLISH} \ +# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ +# This installer can only handle ${VIM_MAX_OLD_VER} versions \ +# at most.$\r$\n\ +# Please remove some versions and start again." + +#LangString str_msg_invalid_root ${LANG_ENGLISH} \ +# "Invalid install path: $vim_install_root!$\r$\n\ +# It should end with $\"vim$\"." + +#LangString str_msg_bin_mismatch ${LANG_ENGLISH} \ +# "Binary path mismatch!$\r$\n$\r$\n\ +# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ +# but system indicates the binary path is $\"$INSTDIR$\"." + +#LangString str_msg_vim_running ${LANG_ENGLISH} \ +# "Vim is still running on your system.$\r$\n\ +# Please close all instances of Vim before you continue." + +#LangString str_msg_register_ole ${LANG_ENGLISH} \ +# "Attempting to register Vim with OLE. \ +# There is no message indicates whether this works or not." + +#LangString str_msg_unreg_ole ${LANG_ENGLISH} \ +# "Attempting to unregister Vim with OLE. \ +# There is no message indicates whether this works or not." + +#LangString str_msg_rm_start ${LANG_ENGLISH} \ +# "Uninstalling the following version:" + +#LangString str_msg_rm_fail ${LANG_ENGLISH} \ +# "Fail to uninstall the following version:" + +#LangString str_msg_no_rm_key ${LANG_ENGLISH} \ +# "Cannot find uninstaller registry key." + +#LangString str_msg_no_rm_reg ${LANG_ENGLISH} \ +# "Cannot find uninstaller from registry." + +#LangString str_msg_no_rm_exe ${LANG_ENGLISH} \ +# "Cannot access uninstaller." + +#LangString str_msg_rm_copy_fail ${LANG_ENGLISH} \ +# "Fail to copy uninstaller to temporary directory." + +#LangString str_msg_rm_run_fail ${LANG_ENGLISH} \ +# "Fail to run uninstaller." + +#LangString str_msg_abort_install ${LANG_ENGLISH} \ +# "Installer will abort." + +LangString str_msg_install_fail ${LANG_ENGLISH} \ + "Installation failed. Better luck next time." + +LangString str_msg_rm_exe_fail ${LANG_ENGLISH} \ + "Some files in $0 have not been deleted!$\r$\n\ + You must do it manually." + +#LangString str_msg_rm_root_fail ${LANG_ENGLISH} \ +# "WARNING: Cannot remove $\"$vim_install_root$\", it is not empty!" + +LangString str_msg_uninstalling ${LANG_ENGLISH} \ + "Uninstalling the old version..." + +LangString str_msg_registering ${LANG_ENGLISH} \ + "Registering..." + +LangString str_msg_unregistering ${LANG_ENGLISH} \ + "Unregistering..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_ENGLISH} \ + "Choose _vimrc settings" +LangString str_vimrc_page_subtitle ${LANG_ENGLISH} \ + "Choose the settings for enhancement, keyboard and mouse." + +LangString str_msg_compat_title ${LANG_ENGLISH} \ + " Vi / Vim behavior " +LangString str_msg_compat_desc ${LANG_ENGLISH} \ + "&Compatibility and enhancements" +LangString str_msg_compat_vi ${LANG_ENGLISH} \ + "Vi compatible" +LangString str_msg_compat_vim ${LANG_ENGLISH} \ + "Vim original" +LangString str_msg_compat_defaults ${LANG_ENGLISH} \ + "Vim with some enhancements (load defaults.vim)" +LangString str_msg_compat_all ${LANG_ENGLISH} \ + "Vim with all enhancements (load vimrc_example.vim) (Default)" + +LangString str_msg_keymap_title ${LANG_ENGLISH} \ + " Mappings " +LangString str_msg_keymap_desc ${LANG_ENGLISH} \ + "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_ENGLISH} \ + "Do not remap keys (Default)" +LangString str_msg_keymap_windows ${LANG_ENGLISH} \ + "Remap a few keys" + +LangString str_msg_mouse_title ${LANG_ENGLISH} \ + " Mouse " +LangString str_msg_mouse_desc ${LANG_ENGLISH} \ + "&Behavior of right and left buttons" +LangString str_msg_mouse_default ${LANG_ENGLISH} \ + "Right: popup menu, Left: visual mode (Default)" +LangString str_msg_mouse_windows ${LANG_ENGLISH} \ + "Right: popup menu, Left: select mode (Windows)" +LangString str_msg_mouse_unix ${LANG_ENGLISH} \ + "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/german.nsi b/nsis/lang/german.nsi new file mode 100644 index 0000000000..62b1531abe --- /dev/null +++ b/nsis/lang/german.nsi @@ -0,0 +1,280 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# german.nsi : German language strings for gvim NSIS installer. +# +# Locale ID : 1031 +# fileencoding : UTF-8 +# Author : Christian Brabandt, tux + +!insertmacro MUI_LANGUAGE "German" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_GERMAN} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_GERMAN} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_GERMAN} \ +# "Zielverzeichnis auswählen (muss auf $\"vim$\" enden)" + +LangString str_show_readme ${LANG_GERMAN} \ + "README-Datei nach der Installation anzeigen" + +# Install types: +LangString str_type_typical ${LANG_GERMAN} \ + "Typisch" + +LangString str_type_minimal ${LANG_GERMAN} \ + "Minimal" + +LangString str_type_full ${LANG_GERMAN} \ + "Vollständig" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_GERMAN} \ + "Vorherige Version deinstallieren" +LangString str_desc_old_ver ${LANG_GERMAN} \ + "Vorherige installierte Versionen auf diesem System deinstallieren." + +LangString str_section_exe ${LANG_GERMAN} \ + "Vim GUI" +LangString str_desc_exe ${LANG_GERMAN} \ + "Vim (Anwendung) und Laufzeitdateien (Dieser Teil ist zwingend \ + erforderlich)." + +LangString str_section_console ${LANG_GERMAN} \ + "Vim Konsolenanwendung" +LangString str_desc_console ${LANG_GERMAN} \ + "Konsolenversion von Vim." + +LangString str_section_batch ${LANG_GERMAN} \ + ".bat-Dateien erstellen" +LangString str_desc_batch ${LANG_GERMAN} \ + ".bat-Dateien erstellen, um Vim in der Konsole auszuführen." + +LangString str_group_icons ${LANG_GERMAN} \ + "Vim-Verknüpfungen erstellen" +LangString str_desc_icons ${LANG_GERMAN} \ + "Verknüpfungen mit Vim für einfachen Aufruf erstellen." + +LangString str_section_desktop ${LANG_GERMAN} \ + "Auf dem Desktop" +LangString str_desc_desktop ${LANG_GERMAN} \ + "Icons für GVim auf dem Desktop erstellen." + +LangString str_section_start_menu ${LANG_GERMAN} \ + "Im Startmenü" +LangString str_desc_start_menu ${LANG_GERMAN} \ + "Vim im Programmverzeichnis des Startmenüs hinzufügen." + +#LangString str_section_quick_launch ${LANG_GERMAN} \ +# "In der Schnellstartleiste" +#LangString str_desc_quick_launch ${LANG_GERMAN} \ +# "Verknüpfung zu Vim in der Schnellstartleiste ablegen." + +LangString str_section_edit_with ${LANG_GERMAN} \ + "Vim zum Kontextmenü hinzufügen" +LangString str_desc_edit_with ${LANG_GERMAN} \ + "Vim in das $\"Öffnen mit...$\"-Kontextmenü einfügen." + +#LangString str_section_edit_with32 ${LANG_GERMAN} \ +# "32-Bit-Version" +#LangString str_desc_edit_with32 ${LANG_GERMAN} \ +# "Vim in das $\"Öffnen mit...$\"-Kontextmenü \ +# für 32-Bit-Anwendungen integrieren." + +#LangString str_section_edit_with64 ${LANG_GERMAN} \ +# "64-Bit-Version" +#LangString str_desc_edit_with64 ${LANG_GERMAN} \ +# "Vim in das $\"Öffnen mit...$\"-Kontextmenü \ +# für 64-Bit-Anwendungen integrieren." + +LangString str_section_vim_rc ${LANG_GERMAN} \ + "Standard-Konfigurationsdatei erstellen" +LangString str_desc_vim_rc ${LANG_GERMAN} \ + "Eine Standard-Konfigurationsdatei (_vimrc) erstellen, \ + falls noch keine existiert." + +LangString str_group_plugin ${LANG_GERMAN} \ + "Plugin-Verzeichnisse anlegen" +LangString str_desc_plugin ${LANG_GERMAN} \ + "Plugin-Verzeichnisse anlegen. Plugins erlauben es, Vim \ + um zusätzliche Funktionen zu erweitern." + +LangString str_section_plugin_home ${LANG_GERMAN} \ + "Privat" +LangString str_desc_plugin_home ${LANG_GERMAN} \ + "Erstelle Plugin-Verzeichnis im HOME Benutzerverzeichnis." + +LangString str_section_plugin_vim ${LANG_GERMAN} \ + "Freigegeben" +LangString str_desc_plugin_vim ${LANG_GERMAN} \ + "Plugin-Verzeichnisse im Vim-Installationsverzeichnis erstellen. Diese werden \ + für alle Benutzer dieses Systems genutzt." + +LangString str_section_vis_vim ${LANG_GERMAN} \ + "VisVim-Erweiterung" +LangString str_desc_vis_vim ${LANG_GERMAN} \ + "VisVim-Erweiterung zur Integration in Microsoft Visual Studio." + +LangString str_section_nls ${LANG_GERMAN} \ + "Unterstützung für andere Sprachen" +LangString str_desc_nls ${LANG_GERMAN} \ + "Dateien zur Unterstützung anderer Sprachen als Englisch installieren." + +LangString str_unsection_register ${LANG_GERMAN} \ + "Vim deinstallieren" +LangString str_desc_unregister ${LANG_GERMAN} \ + "Vim vom System entfernen." + +LangString str_unsection_exe ${LANG_GERMAN} \ + "Vim-Anwendung und Laufzeitdateien entfernen" +LangString str_desc_rm_exe ${LANG_GERMAN} \ + "Alle Vim-Anwendungen und Laufzeitdateien von diesem System entfernen." + +LangString str_ungroup_plugin ${LANG_GERMAN} \ + "Entferne Plugin-Verzeichnisse" +LangString str_desc_rm_plugin ${LANG_GERMAN} \ + "Entferne Plugin-Verzeichnisse, falls sie leer sind." + +LangString str_unsection_plugin_home ${LANG_GERMAN} \ + "Privat" +LangString str_desc_rm_plugin_home ${LANG_GERMAN} \ + "Entfernt die Plugin-Verzeichnisse aus dem HOME Benutzerverzeichnis." + +LangString str_unsection_plugin_vim ${LANG_GERMAN} \ + "Freigegeben" +LangString str_desc_rm_plugin_vim ${LANG_GERMAN} \ + "Entfernt das Plugin-Verzeichnis aus dem Vim-Installationsverzeichnis." + +LangString str_unsection_rootdir ${LANG_GERMAN} \ + "Entferne Vim Installationsverzeichnis" +LangString str_desc_rm_rootdir ${LANG_GERMAN} \ + "Entfernt das Vim Installationsverzeichnis. Es enthält die Vim Konfigurationsdateien!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_GERMAN} \ +# "$vim_old_ver_count Vim-Versionen auf diesem System gefunden..$\r$\n\ +# Dieser Installer kann maximal ${VIM_MAX_OLD_VER} Versionen \ +# handhaben.$\r$\n\ +# Bitte alte Versionen entfernen und noch einmal probieren." + +#LangString str_msg_invalid_root ${LANG_GERMAN} \ +# "Nicht gültiges Installationsverzeichnis: $vim_install_root!$\r$\n\ +# Der Pfad muss auf $\"vim$\" enden." + +#LangString str_msg_bin_mismatch ${LANG_GERMAN} \ +# "Pfaddiskrepanz!$\r$\n$\r$\n\ +# Erwarte Anwendungsverzeichnis $\"$vim_bin_path$\",$\r$\n\ +# aber fand Anwendungspfad $\"$INSTDIR$\" vor." + +#LangString str_msg_vim_running ${LANG_GERMAN} \ +# "Laufender Vim-Prozess erkannt.$\r$\n\ +# Bitte alle laufenden Vim-Prozesse vor dem Fortfahren beenden." + +#LangString str_msg_register_ole ${LANG_GERMAN} \ +# "Versuche OLE-Registrierung durchzuführen." + +#LangString str_msg_unreg_ole ${LANG_GERMAN} \ +# "Versuche OLE-Registrierung zu löschen." + +#LangString str_msg_rm_start ${LANG_GERMAN} \ +# "Deinstalliere die folgende Version:" + +#LangString str_msg_rm_fail ${LANG_GERMAN} \ +# "Deinstallation der Version fehlgeschlagen:" + +#LangString str_msg_no_rm_key ${LANG_GERMAN} \ +# "Deinstallationsschlüssel in der Registrierungsdatenbank nicht gefunden." + +#LangString str_msg_no_rm_reg ${LANG_GERMAN} \ +# "Kein Uninstaller in der Registrierungsdatenbank gefunden." + +#LangString str_msg_no_rm_exe ${LANG_GERMAN} \ +# "Kein Zugriff auf den Uninstaller." + +#LangString str_msg_rm_copy_fail ${LANG_GERMAN} \ +# "Fehler beim Kopieren des Uninstallers in ein temporäres Verzeichnis." + +#LangString str_msg_rm_run_fail ${LANG_GERMAN} \ +# "Fehler beim Aufruf des Uninstallers." + +#LangString str_msg_abort_install ${LANG_GERMAN} \ +# "Installation wird abgebrochen." + +LangString str_msg_install_fail ${LANG_GERMAN} \ + "Installation fehlerhaft beendet." + +LangString str_msg_rm_exe_fail ${LANG_GERMAN} \ + "Einige Dateien im Pfad $0 konnten nicht gelöscht werden!$\r$\n\ + Diese Dateien müssen manuell gelöscht werden." + +#LangString str_msg_rm_root_fail ${LANG_GERMAN} \ +# "Achtung: Kann Verzeichnis $\"$vim_install_root$\" nicht entfernen, \ +# weil es nicht leer ist!" + +LangString str_msg_uninstalling ${LANG_GERMAN} \ + "Deinstalliere alte Version..." + +LangString str_msg_registering ${LANG_GERMAN} \ + "Registriere..." + +LangString str_msg_unregistering ${LANG_GERMAN} \ + "Entferne Registrierung..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_GERMAN} \ + "Wähle _vimrc Konfigurationsoptionen" +LangString str_vimrc_page_subtitle ${LANG_GERMAN} \ + "Wähle Einstellungen zur Kompatibilität, Tastatur und Maus." + +LangString str_msg_compat_title ${LANG_GERMAN} \ + " Vi / Vim Verhalten " +LangString str_msg_compat_desc ${LANG_GERMAN} \ + "&Kompatibilität und Erweiterungen" +LangString str_msg_compat_vi ${LANG_GERMAN} \ + "Vi-kompatibel" +LangString str_msg_compat_vim ${LANG_GERMAN} \ + "Vim Original" +LangString str_msg_compat_defaults ${LANG_GERMAN} \ + "Vim mit einigen Erweiterungen (Lädt defaults.vim)" +LangString str_msg_compat_all ${LANG_GERMAN} \ + "Vim mit allen Erweiterungen (Lädt vimrc_example.vim) (Standard)" + +LangString str_msg_keymap_title ${LANG_GERMAN} \ + " Mappings für Windows Standard Tastenkombinationen " +LangString str_msg_keymap_desc ${LANG_GERMAN} \ + "&Einige Tasten umkonfigurieren (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_GERMAN} \ + "Keine Tasten umkonfigurieren (Standard)" +LangString str_msg_keymap_windows ${LANG_GERMAN} \ + "Einige Tasten umkonfigurieren" + +LangString str_msg_mouse_title ${LANG_GERMAN} \ + " Maus " +LangString str_msg_mouse_desc ${LANG_GERMAN} \ + "&Verhalten der linken und rechten Buttons" +LangString str_msg_mouse_default ${LANG_GERMAN} \ + "Rechts: Popup Menü, Links: Visueller Modus (Standard)" +LangString str_msg_mouse_windows ${LANG_GERMAN} \ + "Rechts: Popup Menü, Links: Auswahl Modus (Windows)" +LangString str_msg_mouse_unix ${LANG_GERMAN} \ + "Rechts: Auswahl erweitern, Links: Visueller Modus (Unix)" diff --git a/nsis/lang/italian.nsi b/nsis/lang/italian.nsi new file mode 100644 index 0000000000..d816fee1fc --- /dev/null +++ b/nsis/lang/italian.nsi @@ -0,0 +1,290 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# italian.nsi : Italian language strings for gvim NSIS installer. +# +# Locale ID : 1040 +# Locale Name : it +# fileencoding : latin1 +# Author : Antonio Colombo + +!insertmacro MUI_LANGUAGE "Italian" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_ITALIAN} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_ITALIAN} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_ITALIAN} \ +# "Cartella d'installazione (il nome deve finire con $\"vim$\")" + +LangString str_show_readme ${LANG_ITALIAN} \ + "Visualizza README al termine dell'installazione" + +# Install types: +LangString str_type_typical ${LANG_ITALIAN} \ + "Tipica" + +LangString str_type_minimal ${LANG_ITALIAN} \ + "Minima" + +LangString str_type_full ${LANG_ITALIAN} \ + "Completa" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_ITALIAN} \ + "Disinstalla versione/i esistente/i" +LangString str_desc_old_ver ${LANG_ITALIAN} \ + "Disinstalla versione/i esistente/i di Vim dal vostro sistema." + +LangString str_section_exe ${LANG_ITALIAN} \ + "Vim GUI (gvim.exe per Windows)" +LangString str_desc_exe ${LANG_ITALIAN} \ + "Vim GUI programmi e file di supporto. Questa componente è indispensabile." + +LangString str_section_console ${LANG_ITALIAN} \ + "Vim console (vim.exe per MS-DOS)" +LangString str_desc_console ${LANG_ITALIAN} \ + "Versione console di Vim (vim.exe)." + +LangString str_section_batch ${LANG_ITALIAN} \ + "Crea file di invocazione (MS-DOS) .bat" +LangString str_desc_batch ${LANG_ITALIAN} \ + "Crea file di invocazione .bat per varianti di Vim nella directory \ + di Windows, da utilizzare da linea di comando (MS-DOS)." + +LangString str_group_icons ${LANG_ITALIAN} \ + "Crea icone per Vim" +LangString str_desc_icons ${LANG_ITALIAN} \ + "Crea icone per Vim in vari posti, per rendere facile l'accesso." + +LangString str_section_desktop ${LANG_ITALIAN} \ + "Sul Desktop" +LangString str_desc_desktop ${LANG_ITALIAN} \ + "Crea icone per programma gvim sul desktop." + +LangString str_section_start_menu ${LANG_ITALIAN} \ + "Nella cartella del menù START" +LangString str_desc_start_menu ${LANG_ITALIAN} \ + "Aggiungi Vim alle cartelle del menù START. \ + Disponibile solo da Windows 95 in avanti." + +#LangString str_section_quick_launch ${LANG_ITALIAN} \ +# "Nella barra di Avvio Veloce" +#LangString str_desc_quick_launch ${LANG_ITALIAN} \ +# "Aggiungi un puntatore a Vim nella barra di Avvio Veloce." + +LangString str_section_edit_with ${LANG_ITALIAN} \ + "Aggiungi Vim al Menù Contestuale" +LangString str_desc_edit_with ${LANG_ITALIAN} \ + "Aggiungi Vim alla lista contestuale $\"Apri con...$\"." + +#LangString str_section_edit_with32 ${LANG_ITALIAN} \ +# "Versione a 32-bit" +#LangString str_desc_edit_with32 ${LANG_ITALIAN} \ +# "Aggiungi Vim alla lista contestuale $\"Apri con...$\" \ +# per applicazioni a 32-bit." + +#LangString str_section_edit_with64 ${LANG_ITALIAN} \ +# "Versione a 64-bit" +#LangString str_desc_edit_with64 ${LANG_ITALIAN} \ +# "Aggiungi Vim alla lista contestuale $\"Apri con...$\" \ +# per applicazioni a 64-bit." + +LangString str_section_vim_rc ${LANG_ITALIAN} \ + "Crea Configurazione di default" +LangString str_desc_vim_rc ${LANG_ITALIAN} \ + "Crea file configurazione di default (_vimrc) se non ne \ + esiste già uno." + +LangString str_group_plugin ${LANG_ITALIAN} \ + "Crea Directory per Plugin" +LangString str_desc_plugin ${LANG_ITALIAN} \ + "Crea Directory per Plugin. Servono per aggiungere funzionalità \ + a Vim aggiungendo file a una di queste directory." + +LangString str_section_plugin_home ${LANG_ITALIAN} \ + "Privato" +LangString str_desc_plugin_home ${LANG_ITALIAN} \ + "Create plugin directories in HOME directory." + +LangString str_section_plugin_vim ${LANG_ITALIAN} \ + "Condiviso" +LangString str_desc_plugin_vim ${LANG_ITALIAN} \ + "Crea Directory Plugin nella directory di installazione di Vim \ + per uso da parte di tutti gli utenti di questo sistema." + +LangString str_section_vis_vim ${LANG_ITALIAN} \ + "Estensione VisVim" +LangString str_desc_vis_vim ${LANG_ITALIAN} \ + "Estensione VisVim per integrazione con Microsoft Visual Studio." + +LangString str_section_nls ${LANG_ITALIAN} \ + "Supporto Multilingue (NLS)" +LangString str_desc_nls ${LANG_ITALIAN} \ + "Installa file per supportare messaggi in diverse lingue." + +LangString str_unsection_register ${LANG_ITALIAN} \ + "Togli Vim dal Registry" +LangString str_desc_unregister ${LANG_ITALIAN} \ + "Togli Vim dal Registry di configurazione sistema." + +LangString str_unsection_exe ${LANG_ITALIAN} \ + "Cancella programmi/file_ausiliari Vim" +LangString str_desc_rm_exe ${LANG_ITALIAN} \ + "Cancella tutti i programmi/file_ausiliari di Vim." + +LangString str_unsection_rc ${LANG_ITALIAN} \ + "Cancella file di configurazione di Vim" +LangString str_desc_rm_rc ${LANG_ITALIAN} \ + "Cancella file di configurazione di Vim $vim_install_root\_vimrc. \ + Da saltare se avete personalizzato il file di configurazione." + +LangString str_ungroup_plugin ${LANG_ITALIAN} \ + "Remove plugin directories" +LangString str_desc_rm_plugin ${LANG_ITALIAN} \ + "Remove the plugin directories if they are empty." + +LangString str_unsection_plugin_home ${LANG_ITALIAN} \ + "Privato" +LangString str_desc_rm_plugin_home ${LANG_ITALIAN} \ + "Remove the plugin directories from HOME directory." + +LangString str_unsection_plugin_vim ${LANG_ITALIAN} \ + "Condiviso" +LangString str_desc_rm_plugin_vim ${LANG_ITALIAN} \ + "Remove the plugin directories from Vim install directory." + +LangString str_unsection_rootdir ${LANG_ITALIAN} \ + "Remove the Vim root directory" +LangString str_desc_rm_rootdir ${LANG_ITALIAN} \ + "Remove the Vim root directory. It contains your Vim configuration files!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_ITALIAN} \ +# "Trovate $vim_old_ver_count versioni di Vim sul vostro sistema.$\r$\n\ +# Questo programma di installazione può gestirne solo \ +# ${VIM_MAX_OLD_VER}.$\r$\n\ +# Disinstallate qualche versione precedente e ricominciate." + +#LangString str_msg_invalid_root ${LANG_ITALIAN} \ +# "Nome di directory di installazione non valida: $vim_install_root!$\r$\n\ +# Dovrebbe terminare con $\"vim$\"." + +#LangString str_msg_bin_mismatch ${LANG_ITALIAN} \ +# "Incongruenza di installazione!$\r$\n$\r$\n\ +# Cartella di installazione dev'essere $\"$vim_bin_path$\",$\r$\n\ +# ma il sistema segnala invece $\"$INSTDIR$\"." + +#LangString str_msg_vim_running ${LANG_ITALIAN} \ +# "Vim ancora in esecuzione sul vostro sistema.$\r$\n\ +# Chiudete tutte le sessioni attive di Vim per continuare." + +#LangString str_msg_register_ole ${LANG_ITALIAN} \ +# "Tentativo di registrazione di Vim con OLE. \ +# Non ci sono messaggi che indicano se ha funzionato o no." + +#LangString str_msg_unreg_ole ${LANG_ITALIAN} \ +# "Tentativo di togliere da Registry Vim con OLE. \ +# Non ci sono messaggi che indicano se ha funzionato o no." + +#LangString str_msg_rm_start ${LANG_ITALIAN} \ +# "Disinstallazione delle seguenti versioni:" + +#LangString str_msg_rm_fail ${LANG_ITALIAN} \ +# "Disinstallazione non riuscita per la seguente versione:" + +#LangString str_msg_no_rm_key ${LANG_ITALIAN} \ +# "Non riesco a trovare chiave di disinstallazione nel Registry." + +#LangString str_msg_no_rm_reg ${LANG_ITALIAN} \ +# "Non riesco a trovare programma disinstallazione nel Registry." + +#LangString str_msg_no_rm_exe ${LANG_ITALIAN} \ +# "Non riesco a utilizzare programma disinstallazione." + +#LangString str_msg_rm_copy_fail ${LANG_ITALIAN} \ +# "Non riesco a copiare programma disinstallazione a una \ +# directory temporanea." + +#LangString str_msg_rm_run_fail ${LANG_ITALIAN} \ +# "Non riesco a eseguire programma disinstallazione." + +#LangString str_msg_abort_install ${LANG_ITALIAN} \ +# "Il programma di disinstallazione verrà chiuso senza aver fatto nulla." + +LangString str_msg_install_fail ${LANG_ITALIAN} \ + "Installazione non riuscita. Miglior fortuna alla prossima!" + +LangString str_msg_rm_exe_fail ${LANG_ITALIAN} \ + "Alcuni file in $0 non sono stati cancellati!$\r$\n\ + Dovreste cancellarli voi stessi." + +#LangString str_msg_rm_root_fail ${LANG_ITALIAN} \ +# "AVVISO: Non posso cancellare $\"$vim_install_root$\", non è vuota!" + +LangString str_msg_uninstalling ${LANG_ITALIAN} \ + "Uninstalling the old version..." + +LangString str_msg_registering ${LANG_ITALIAN} \ + "Registering..." + +LangString str_msg_unregistering ${LANG_ITALIAN} \ + "Unregistering..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_ITALIAN} \ + "Choose _vimrc settings" +LangString str_vimrc_page_subtitle ${LANG_ITALIAN} \ + "Choose the settings for enhancement, keyboard and mouse." + +LangString str_msg_compat_title ${LANG_ITALIAN} \ + " Vi / Vim behavior " +LangString str_msg_compat_desc ${LANG_ITALIAN} \ + "&Compatibility and enhancements" +LangString str_msg_compat_vi ${LANG_ITALIAN} \ + "Vi compatible" +LangString str_msg_compat_vim ${LANG_ITALIAN} \ + "Vim original" +LangString str_msg_compat_defaults ${LANG_ITALIAN} \ + "Vim with some enhancements (load defaults.vim)" +LangString str_msg_compat_all ${LANG_ITALIAN} \ + "Vim with all enhancements (load vimrc_example.vim) (Default)" + +LangString str_msg_keymap_title ${LANG_ITALIAN} \ + " Mappings " +LangString str_msg_keymap_desc ${LANG_ITALIAN} \ + "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_ITALIAN} \ + "Do not remap keys (Default)" +LangString str_msg_keymap_windows ${LANG_ITALIAN} \ + "Remap a few keys" + +LangString str_msg_mouse_title ${LANG_ITALIAN} \ + " Mouse " +LangString str_msg_mouse_desc ${LANG_ITALIAN} \ + "&Behavior of right and left buttons" +LangString str_msg_mouse_default ${LANG_ITALIAN} \ + "Right: popup menu, Left: visual mode (Default)" +LangString str_msg_mouse_windows ${LANG_ITALIAN} \ + "Right: popup menu, Left: select mode (Windows)" +LangString str_msg_mouse_unix ${LANG_ITALIAN} \ + "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/japanese.nsi b/nsis/lang/japanese.nsi new file mode 100644 index 0000000000..8d167f9e8a --- /dev/null +++ b/nsis/lang/japanese.nsi @@ -0,0 +1,287 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# japanese.nsi: Japanese language strings for gvim NSIS installer. +# +# Locale ID : 1041 +# fileencoding : UTF-8 +# Author : Ken Takata + +!insertmacro MUI_LANGUAGE "Japanese" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_JAPANESE} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_JAPANESE} \ + "$(^Name) Uninstall" + +# Workarounds for NSIS Japanese translation. The messages are too long. +# These should be better to be fixed by the NSIS upstream. +LangString ^SpaceAvailable ${LANG_JAPANESE} \ + "利用可能なディスク容量:" +LangString ^SpaceRequired ${LANG_JAPANESE} \ + "必要なディスク容量:" +# Fix another NSIS Japanese translation. The access key was missing. +LangString ^InstallBtn ${LANG_JAPANESE} \ + "インストール(&I)" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_JAPANESE} \ +# "Destination Folder (Must end with $\"vim$\")" + +LangString str_show_readme ${LANG_JAPANESE} \ + "インストール完了後に README を表示する" + +# Install types: +LangString str_type_typical ${LANG_JAPANESE} \ + "通常" + +LangString str_type_minimal ${LANG_JAPANESE} \ + "最小" + +LangString str_type_full ${LANG_JAPANESE} \ + "全て" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_JAPANESE} \ + "既存のバージョンをアンインストール" +LangString str_desc_old_ver ${LANG_JAPANESE} \ + "すでにインストールされている Vim をシステムから削除します。" + +LangString str_section_exe ${LANG_JAPANESE} \ + "Vim GUI とランタイムファイル" +LangString str_desc_exe ${LANG_JAPANESE} \ + "Vim GUI 実行ファイルとラインタイムファイル。このコンポーネントは必須です。" + +LangString str_section_console ${LANG_JAPANESE} \ + "Vim コンソールプログラム" +LangString str_desc_console ${LANG_JAPANESE} \ + "コンソール版の Vim (vim.exe)。" + +LangString str_section_batch ${LANG_JAPANESE} \ + ".bat ファイルを作成" +LangString str_desc_batch ${LANG_JAPANESE} \ + "コマンドラインから Vim と関連コマンドを実行できるように、.bat ファイルを Windows ディレクトリに作成します。" + +LangString str_group_icons ${LANG_JAPANESE} \ + "Vim のアイコンを作成" +LangString str_desc_icons ${LANG_JAPANESE} \ + "Vim を簡単に実行できるように、いくつかの場所にアイコンを作成します。" + +LangString str_section_desktop ${LANG_JAPANESE} \ + "デスクトップ上" +LangString str_desc_desktop ${LANG_JAPANESE} \ + "gVim 実行ファイルのアイコンをデスクトップ上に作成します。" + +LangString str_section_start_menu ${LANG_JAPANESE} \ + "スタートメニューのプログラムフォルダー上" +LangString str_desc_start_menu ${LANG_JAPANESE} \ + "Vim のアイコンをスタートメニューのプログラムフォルダー上に作成します。" + +#LangString str_section_quick_launch ${LANG_JAPANESE} \ +# "In the Quick Launch Bar" +#LangString str_desc_quick_launch ${LANG_JAPANESE} \ +# "Add Vim shortcut in the quick launch bar." + +LangString str_section_edit_with ${LANG_JAPANESE} \ + "Vim のコンテキストメニューを追加" +LangString str_desc_edit_with ${LANG_JAPANESE} \ + "$\"Vimで編集する$\" をコンテキストメニューに追加します。" + +#LangString str_section_edit_with32 ${LANG_JAPANESE} \ +# "32-bit Version" +#LangString str_desc_edit_with32 ${LANG_JAPANESE} \ +# "Add Vim to the $\"Open With...$\" context menu list \ +# for 32-bit applications." + +#LangString str_section_edit_with64 ${LANG_JAPANESE} \ +# "64-bit Version" +#LangString str_desc_edit_with64 ${LANG_JAPANESE} \ +# "Add Vim to the $\"Open With...$\" context menu list \ +# for 64-bit applications." + +LangString str_section_vim_rc ${LANG_JAPANESE} \ + "既定のコンフィグを作成" +LangString str_desc_vim_rc ${LANG_JAPANESE} \ + "もし無ければ、既定のコンフィグファイル (_vimrc) を作成します。" + +LangString str_group_plugin ${LANG_JAPANESE} \ + "プラグインディレクトリを作成" +LangString str_desc_plugin ${LANG_JAPANESE} \ + "プラグインディレクトリを作成します。そこにプラグインファイルを置くことで Vim を拡張することができます。" + +LangString str_section_plugin_home ${LANG_JAPANESE} \ + "個人用" +LangString str_desc_plugin_home ${LANG_JAPANESE} \ + "プラグインディレクトリをホームディレクトリに作成します。" + +LangString str_section_plugin_vim ${LANG_JAPANESE} \ + "共用" +LangString str_desc_plugin_vim ${LANG_JAPANESE} \ + "プラグインディレクトリを Vim のインストールディレクトリに作成します。システムの全員で共有されます。" + +LangString str_section_vis_vim ${LANG_JAPANESE} \ + "VisVim 拡張" +LangString str_desc_vis_vim ${LANG_JAPANESE} \ + "Microsoft Visual Studio 統合用の VisVim 拡張。" + +LangString str_section_nls ${LANG_JAPANESE} \ + "多言語サポート" +LangString str_desc_nls ${LANG_JAPANESE} \ + "多言語サポート用のファイルをインストールします。" + +LangString str_unsection_register ${LANG_JAPANESE} \ + "Vim を登録解除" +LangString str_desc_unregister ${LANG_JAPANESE} \ + "Vim をシステムから登録解除します。" + +LangString str_unsection_exe ${LANG_JAPANESE} \ + "Vim の実行ファイル/ランタイムファイルを削除" +LangString str_desc_rm_exe ${LANG_JAPANESE} \ + "全ての Vim の実行ファイルとランタイムファイルを削除します。" + +LangString str_ungroup_plugin ${LANG_JAPANESE} \ + "プラグインディレクトリを削除" +LangString str_desc_rm_plugin ${LANG_JAPANESE} \ + "プラグインディレクトリが空であればそれを削除します。" + +LangString str_unsection_plugin_home ${LANG_JAPANESE} \ + "個人用" +LangString str_desc_rm_plugin_home ${LANG_JAPANESE} \ + "プラグインディレクトリをホームディレクトリから削除します。" + +LangString str_unsection_plugin_vim ${LANG_JAPANESE} \ + "共用" +LangString str_desc_rm_plugin_vim ${LANG_JAPANESE} \ + "プラグインディレクトリを Vim のインストールディレクトリから削除します。" + +LangString str_unsection_rootdir ${LANG_JAPANESE} \ + "Vim のトップディレクトリを削除" +LangString str_desc_rm_rootdir ${LANG_JAPANESE} \ + "Vim のトップディレクトリを削除します。あなたの Vim の設定ファイルも含まれていることに注意してください!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_JAPANESE} \ +# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ +# This installer can only handle ${VIM_MAX_OLD_VER} versions \ +# at most.$\r$\n\ +# Please remove some versions and start again." + +#LangString str_msg_invalid_root ${LANG_JAPANESE} \ +# "Invalid install path: $vim_install_root!$\r$\n\ +# It should end with $\"vim$\"." + +#LangString str_msg_bin_mismatch ${LANG_JAPANESE} \ +# "Binary path mismatch!$\r$\n$\r$\n\ +# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ +# but system indicates the binary path is $\"$INSTDIR$\"." + +#LangString str_msg_vim_running ${LANG_JAPANESE} \ +# "Vim is still running on your system.$\r$\n\ +# Please close all instances of Vim before you continue." + +#LangString str_msg_register_ole ${LANG_JAPANESE} \ +# "Attempting to register Vim with OLE. \ +# There is no message indicates whether this works or not." + +#LangString str_msg_unreg_ole ${LANG_JAPANESE} \ +# "Attempting to unregister Vim with OLE. \ +# There is no message indicates whether this works or not." + +#LangString str_msg_rm_start ${LANG_JAPANESE} \ +# "Uninstalling the following version:" + +#LangString str_msg_rm_fail ${LANG_JAPANESE} \ +# "Fail to uninstall the following version:" + +#LangString str_msg_no_rm_key ${LANG_JAPANESE} \ +# "Cannot find uninstaller registry key." + +#LangString str_msg_no_rm_reg ${LANG_JAPANESE} \ +# "Cannot find uninstaller from registry." + +#LangString str_msg_no_rm_exe ${LANG_JAPANESE} \ +# "Cannot access uninstaller." + +#LangString str_msg_rm_copy_fail ${LANG_JAPANESE} \ +# "Fail to copy uninstaller to temporary directory." + +#LangString str_msg_rm_run_fail ${LANG_JAPANESE} \ +# "Fail to run uninstaller." + +#LangString str_msg_abort_install ${LANG_JAPANESE} \ +# "Installer will abort." + +LangString str_msg_install_fail ${LANG_JAPANESE} \ + "インストールに失敗しました。次はうまくいくことを祈ります。" + +LangString str_msg_rm_exe_fail ${LANG_JAPANESE} \ + "$0 内の一部のファイルは削除できませんでした!$\r$\n\ + 手動で削除する必要があります。" + +#LangString str_msg_rm_root_fail ${LANG_JAPANESE} \ +# "WARNING: Cannot remove $\"$vim_install_root$\", it is not empty!" + +LangString str_msg_uninstalling ${LANG_JAPANESE} \ + "古いバージョンをアンインストールしています..." + +LangString str_msg_registering ${LANG_JAPANESE} \ + "登録中..." + +LangString str_msg_unregistering ${LANG_JAPANESE} \ + "登録解除中..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_JAPANESE} \ + "_vimrc の設定を選んでください" +LangString str_vimrc_page_subtitle ${LANG_JAPANESE} \ + "拡張やキーボード、マウスの設定を選んでください。" + +LangString str_msg_compat_title ${LANG_JAPANESE} \ + " Vi / Vim の動作 " +LangString str_msg_compat_desc ${LANG_JAPANESE} \ + "互換性と拡張(&C)" +LangString str_msg_compat_vi ${LANG_JAPANESE} \ + "Vi 互換" +LangString str_msg_compat_vim ${LANG_JAPANESE} \ + "Vim 独自" +LangString str_msg_compat_defaults ${LANG_JAPANESE} \ + "Vim 独自と多少の拡張 (defaults.vim を読み込み)" +LangString str_msg_compat_all ${LANG_JAPANESE} \ + "Vim 独自と全ての拡張 (vimrc_example.vim を読み込み) (既定)" + +LangString str_msg_keymap_title ${LANG_JAPANESE} \ + " マッピング " +LangString str_msg_keymap_desc ${LANG_JAPANESE} \ + "Windows用に一部のキーをリマップする(&R) (例: Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F など)" +LangString str_msg_keymap_default ${LANG_JAPANESE} \ + "リマップしない (既定)" +LangString str_msg_keymap_windows ${LANG_JAPANESE} \ + "リマップする" + +LangString str_msg_mouse_title ${LANG_JAPANESE} \ + " マウス " +LangString str_msg_mouse_desc ${LANG_JAPANESE} \ + "右ボタンと左ボタンの動作(&B)" +LangString str_msg_mouse_default ${LANG_JAPANESE} \ + "右:ポップアップメニュー、左:ビジュアルモード (既定)" +LangString str_msg_mouse_windows ${LANG_JAPANESE} \ + "右:ポップアップメニュー、左:選択モード (Windows)" +LangString str_msg_mouse_unix ${LANG_JAPANESE} \ + "右:選択を拡張、左:ビジュアルモード (Unix)" diff --git a/nsis/lang/simpchinese.nsi b/nsis/lang/simpchinese.nsi new file mode 100644 index 0000000000..c93bfc2d61 --- /dev/null +++ b/nsis/lang/simpchinese.nsi @@ -0,0 +1,277 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# simpchinese.nsi: Simplified Chinese language strings for gvim NSIS +# installer. +# +# Locale ID : 2052 +# fileencoding : UTF-8 +# Author : Guopeng Wen + +!insertmacro MUI_LANGUAGE "SimpChinese" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_SIMPCHINESE} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_SIMPCHINESE} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_SIMPCHINESE} \ +# "安装路径 (必须以 vim 结尾)" + +LangString str_show_readme ${LANG_SIMPCHINESE} \ + "安装完成后显示 README 文件" + +# Install types: +LangString str_type_typical ${LANG_SIMPCHINESE} \ + "典型安装" + +LangString str_type_minimal ${LANG_SIMPCHINESE} \ + "最小安装" + +LangString str_type_full ${LANG_SIMPCHINESE} \ + "完全安装" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_SIMPCHINESE} \ + "卸载旧版本" +LangString str_desc_old_ver ${LANG_SIMPCHINESE} \ + "卸载系统上旧版本的 Vim。" + +LangString str_section_exe ${LANG_SIMPCHINESE} \ + "安装 Vim 图形界面" +LangString str_desc_exe ${LANG_SIMPCHINESE} \ + "安装 Vim 图形界面及脚本。此为必选安装。" + +LangString str_section_console ${LANG_SIMPCHINESE} \ + "安装 Vim 命令行程序" +LangString str_desc_console ${LANG_SIMPCHINESE} \ + "安装 Vim 命令行程序 (vim.exe)。该程序在命令行窗口中运行。" + +LangString str_section_batch ${LANG_SIMPCHINESE} \ + "安装批处理文件" +LangString str_desc_batch ${LANG_SIMPCHINESE} \ + "为 Vim 的各种变体创建批处理程序,以便在命令行下运行 Vim。" + +LangString str_group_icons ${LANG_SIMPCHINESE} \ + "创建 Vim 图标" +LangString str_desc_icons ${LANG_SIMPCHINESE} \ + "为 Vim 创建若干图标,以方便使用 Vim。" + +LangString str_section_desktop ${LANG_SIMPCHINESE} \ + "在桌面上" +LangString str_desc_desktop ${LANG_SIMPCHINESE} \ + "在桌面上为 Vim 创建若干图标,以方便启动 Vim。" + +LangString str_section_start_menu ${LANG_SIMPCHINESE} \ + "在启动菜单的程序菜单下" +LangString str_desc_start_menu ${LANG_SIMPCHINESE} \ + "在启动菜单的程序菜单下添加 Vim 组。适用于 Windows 95 及以上版本。" + +#LangString str_section_quick_launch ${LANG_SIMPCHINESE} \ +# "在快速启动启动栏中" +#LangString str_desc_quick_launch ${LANG_SIMPCHINESE} \ +# "在快速启动栏中添加 Vim 图标。" + +LangString str_section_edit_with ${LANG_SIMPCHINESE} \ + "安装快捷菜单" +LangString str_desc_edit_with ${LANG_SIMPCHINESE} \ + "将 Vim 添加到“打开方式”快捷菜单中。" + +#LangString str_section_edit_with32 ${LANG_SIMPCHINESE} \ +# "32 位版本" +#LangString str_desc_edit_with32 ${LANG_SIMPCHINESE} \ +# "将 Vim 添加到 32 位程序的“打开方式”快捷菜单中。" + +#LangString str_section_edit_with64 ${LANG_SIMPCHINESE} \ +# "64 位版本" +#LangString str_desc_edit_with64 ${LANG_SIMPCHINESE} \ +# "将 Vim 添加到 64 位程序的“打开方式”快捷菜单中。" + +LangString str_section_vim_rc ${LANG_SIMPCHINESE} \ + "创建缺省配置文件" +LangString str_desc_vim_rc ${LANG_SIMPCHINESE} \ + "在安装目录下生成缺省的 Vim 配置文件(_vimrc)。\ + 如果该文件已经存在,则略过此项。" + +LangString str_group_plugin ${LANG_SIMPCHINESE} \ + "创建插件目录" +LangString str_desc_plugin ${LANG_SIMPCHINESE} \ + "创建(空的)插件目录结构。插件目录用于安装 Vim 扩展插件,\ + 只要将文件复制到相关的子目录中即可。" + +LangString str_section_plugin_home ${LANG_SIMPCHINESE} \ + "私有插件目录" +LangString str_desc_plugin_home ${LANG_SIMPCHINESE} \ + "Create plugin directories in HOME directory." + +LangString str_section_plugin_vim ${LANG_SIMPCHINESE} \ + "公共插件目录" +LangString str_desc_plugin_vim ${LANG_SIMPCHINESE} \ + "在 Vim 安装目录下创建(空的)插件目录结构,系统上所有用户都能使用安装在\ + 该目录下的扩展插件。" + +LangString str_section_vis_vim ${LANG_SIMPCHINESE} \ + "安装 VisVim 插件" +LangString str_desc_vis_vim ${LANG_SIMPCHINESE} \ + "安装用于与微软 Microsoft Visual Studio 进行集成的 VisVim 插件。" + +LangString str_section_nls ${LANG_SIMPCHINESE} \ + "安装多语言支持" +LangString str_desc_nls ${LANG_SIMPCHINESE} \ + "安装用于多语言支持的文件。" + +LangString str_unsection_register ${LANG_SIMPCHINESE} \ + "删除 Vim 系统配置" +LangString str_desc_unregister ${LANG_SIMPCHINESE} \ + "删除和 Vim 相关的系统配置。" + +LangString str_unsection_exe ${LANG_SIMPCHINESE} \ + "删除 Vim 执行文件以及脚本" +LangString str_desc_rm_exe ${LANG_SIMPCHINESE} \ + "删除 Vim 的所有执行文件及脚本。" + +LangString str_ungroup_plugin ${LANG_SIMPCHINESE} \ + "Remove plugin directories" +LangString str_desc_rm_plugin ${LANG_SIMPCHINESE} \ + "Remove the plugin directories if they are empty." + +LangString str_unsection_plugin_home ${LANG_SIMPCHINESE} \ + "私有插件目录" +LangString str_desc_rm_plugin_home ${LANG_SIMPCHINESE} \ + "Remove the plugin directories from HOME directory." + +LangString str_unsection_plugin_vim ${LANG_SIMPCHINESE} \ + "公共插件目录" +LangString str_desc_rm_plugin_vim ${LANG_SIMPCHINESE} \ + "Remove the plugin directories from Vim install directory." + +LangString str_unsection_rootdir ${LANG_SIMPCHINESE} \ + "Remove the Vim root directory" +LangString str_desc_rm_rootdir ${LANG_SIMPCHINESE} \ + "Remove the Vim root directory. It contains your Vim configuration files!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_SIMPCHINESE} \ +# "您的系统上安装了 $vim_old_ver_count 个不同版本的 Vim,$\r$\n\ +# 但本安装程序最多只能处理 ${VIM_MAX_OLD_VER} 个版本。$\r$\n\ +# 请您手工删除一些旧版本以后再运行本安装程序。" + +#LangString str_msg_invalid_root ${LANG_SIMPCHINESE} \ +# "安装路径“$vim_install_root”无效!$\r$\n\ +# 该路径必须以 vim 结尾。" + +#LangString str_msg_bin_mismatch ${LANG_SIMPCHINESE} \ +# "Vim 执行程序安装路径异常!$\r$\n$\r$\n\ +# 该版本 Vim 的执行程序安装路径应该是“$vim_bin_path”,$\r$\n\ +# 而系统却指示该路径为“$INSTDIR”。" + +#LangString str_msg_vim_running ${LANG_SIMPCHINESE} \ +# "您的系统上仍有 Vim 在运行,$\r$\n\ +# 请您在执行后续步骤前退出这些 Vim。" + +#LangString str_msg_register_ole ${LANG_SIMPCHINESE} \ +# "试图注册 Vim OLE 服务器。请注意无论成功与否都不再显示进一步的信息。" + +#LangString str_msg_unreg_ole ${LANG_SIMPCHINESE} \ +# "试图注销 Vim OLE 服务器。请注意无论成功与否都不再显示进一步的信息。" + +#LangString str_msg_rm_start ${LANG_SIMPCHINESE} \ +# "开始卸载以下版本:" + +#LangString str_msg_rm_fail ${LANG_SIMPCHINESE} \ +# "以下版本卸载失败:" + +#LangString str_msg_no_rm_key ${LANG_SIMPCHINESE} \ +# "找不到卸载程序的注册表键。" + +#LangString str_msg_no_rm_reg ${LANG_SIMPCHINESE} \ +# "在注册表中未找到卸载程序路径。" + +#LangString str_msg_no_rm_exe ${LANG_SIMPCHINESE} \ +# "找不到卸载程序。" + +#LangString str_msg_rm_copy_fail ${LANG_SIMPCHINESE} \ +# "无法将卸载程序复制到临时目录。" + +#LangString str_msg_rm_run_fail ${LANG_SIMPCHINESE} \ +# "执行卸载程序失败。" + +#LangString str_msg_abort_install ${LANG_SIMPCHINESE} \ +# "安装程序将退出。" + +LangString str_msg_install_fail ${LANG_SIMPCHINESE} \ + "安装失败。祝您下次好运。" + +LangString str_msg_rm_exe_fail ${LANG_SIMPCHINESE} \ + "目录“$0”下有部分文件删除失败!$\r$\n\ + 您只能手工删除该目录。" + +#LangString str_msg_rm_root_fail ${LANG_SIMPCHINESE} \ +# "警告:无法删除 Vim 安装目录“$vim_install_root”,\ +# 该目录下仍有其他文件。" + +LangString str_msg_uninstalling ${LANG_SIMPCHINESE} \ + "Uninstalling the old version..." + +LangString str_msg_registering ${LANG_SIMPCHINESE} \ + "Registering..." + +LangString str_msg_unregistering ${LANG_SIMPCHINESE} \ + "Unregistering..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_SIMPCHINESE} \ + "Choose _vimrc settings" +LangString str_vimrc_page_subtitle ${LANG_SIMPCHINESE} \ + "Choose the settings for enhancement, keyboard and mouse." + +LangString str_msg_compat_title ${LANG_SIMPCHINESE} \ + " Vi / Vim behavior " +LangString str_msg_compat_desc ${LANG_SIMPCHINESE} \ + "&Compatibility and enhancements" +LangString str_msg_compat_vi ${LANG_SIMPCHINESE} \ + "Vi compatible" +LangString str_msg_compat_vim ${LANG_SIMPCHINESE} \ + "Vim original" +LangString str_msg_compat_defaults ${LANG_SIMPCHINESE} \ + "Vim with some enhancements (load defaults.vim)" +LangString str_msg_compat_all ${LANG_SIMPCHINESE} \ + "Vim with all enhancements (load vimrc_example.vim) (Default)" + +LangString str_msg_keymap_title ${LANG_SIMPCHINESE} \ + " Mappings " +LangString str_msg_keymap_desc ${LANG_SIMPCHINESE} \ + "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_SIMPCHINESE} \ + "Do not remap keys (Default)" +LangString str_msg_keymap_windows ${LANG_SIMPCHINESE} \ + "Remap a few keys" + +LangString str_msg_mouse_title ${LANG_SIMPCHINESE} \ + " Mouse " +LangString str_msg_mouse_desc ${LANG_SIMPCHINESE} \ + "&Behavior of right and left buttons" +LangString str_msg_mouse_default ${LANG_SIMPCHINESE} \ + "Right: popup menu, Left: visual mode (Default)" +LangString str_msg_mouse_windows ${LANG_SIMPCHINESE} \ + "Right: popup menu, Left: select mode (Windows)" +LangString str_msg_mouse_unix ${LANG_SIMPCHINESE} \ + "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/tradchinese.nsi b/nsis/lang/tradchinese.nsi new file mode 100644 index 0000000000..504830aa9d --- /dev/null +++ b/nsis/lang/tradchinese.nsi @@ -0,0 +1,278 @@ +# vi:set ts=8 sts=4 sw=4 et fdm=marker: +# +# tradchinese.nsi: Traditional Chinese language strings for gvim NSIS +# installer. +# +# Locale ID : 1028 +# fileencoding : UTF-8 +# Author : Guopeng Wen + +!insertmacro MUI_LANGUAGE "TradChinese" + + +# Overwrite the default translation. +# These string should be always English. Otherwise dosinst.c fails. +LangString ^SetupCaption ${LANG_TRADCHINESE} \ + "$(^Name) Setup" +LangString ^UninstallCaption ${LANG_TRADCHINESE} \ + "$(^Name) Uninstall" + +############################################################################## +# MUI Configuration Strings {{{1 +############################################################################## + +#LangString str_dest_folder ${LANG_TRADCHINESE} \ +# "安裝資料夾 (必須以 vim 結尾)" + +LangString str_show_readme ${LANG_TRADCHINESE} \ + "安裝完成後顯示 README 檔案" + +# Install types: +LangString str_type_typical ${LANG_TRADCHINESE} \ + "典型安裝" + +LangString str_type_minimal ${LANG_TRADCHINESE} \ + "最小安裝" + +LangString str_type_full ${LANG_TRADCHINESE} \ + "完全安裝" + + +############################################################################## +# Section Titles & Description {{{1 +############################################################################## + +LangString str_section_old_ver ${LANG_TRADCHINESE} \ + "移除舊版本" +LangString str_desc_old_ver ${LANG_TRADCHINESE} \ + "移除閣下電腦上舊版本的 Vim。" + +LangString str_section_exe ${LANG_TRADCHINESE} \ + "安裝 Vim 圖形界面程式" +LangString str_desc_exe ${LANG_TRADCHINESE} \ + "安裝 Vim 圖形界面程式及腳本。此為必選安裝。" + +LangString str_section_console ${LANG_TRADCHINESE} \ + "安裝 Vim 命令行程式" +LangString str_desc_console ${LANG_TRADCHINESE} \ + "安裝 Vim 命令行程式 (vim.exe)。該程式在控制臺窗口中運行。" + +LangString str_section_batch ${LANG_TRADCHINESE} \ + "安裝批次檔案" +LangString str_desc_batch ${LANG_TRADCHINESE} \ + "為 Vim 的各種變體創建批次檔,以便在命令行下啟動 Vim。" + +LangString str_group_icons ${LANG_TRADCHINESE} \ + "建立 Vim 圖示" +LangString str_desc_icons ${LANG_TRADCHINESE} \ + "建立若干 Vim 圖示,以便于使用 Vim。" + +LangString str_section_desktop ${LANG_TRADCHINESE} \ + "於桌面" +LangString str_desc_desktop ${LANG_TRADCHINESE} \ + "建立若干 Vim 圖示於桌面上,以方便啟動 Vim。" + +LangString str_section_start_menu ${LANG_TRADCHINESE} \ + "於「開始」功能表的「程式」集" +LangString str_desc_start_menu ${LANG_TRADCHINESE} \ + "在「開始」功能表的「程式」集中建立 Vim 啟動組。\ + 適用于 Windows 95 及以上版本。" + +#LangString str_section_quick_launch ${LANG_TRADCHINESE} \ +# "於快速啟動列" +#LangString str_desc_quick_launch ${LANG_TRADCHINESE} \ +# "在快速啟動列中建立 Vim 圖示。" + +LangString str_section_edit_with ${LANG_TRADCHINESE} \ + "安裝快捷選單" +LangString str_desc_edit_with ${LANG_TRADCHINESE} \ + "在「打開方式」快捷選單中添加 Vim 項。" + +#LangString str_section_edit_with32 ${LANG_TRADCHINESE} \ +# "32 位元版本" +#LangString str_desc_edit_with32 ${LANG_TRADCHINESE} \ +# "在 32 位元程式的「打開方式」快捷選單中添加 Vim 項。" + +#LangString str_section_edit_with64 ${LANG_TRADCHINESE} \ +# "64 位元版本" +#LangString str_desc_edit_with64 ${LANG_TRADCHINESE} \ +# "在 64 位元程式的「打開方式」快捷選單中添加 Vim 項。" + +LangString str_section_vim_rc ${LANG_TRADCHINESE} \ + "建立默認設定檔" +LangString str_desc_vim_rc ${LANG_TRADCHINESE} \ + "在安裝資料夾下建立默認的 Vim 設定檔(_vimrc)。\ + 若該設定檔已經存在,則略過此項。" + +LangString str_group_plugin ${LANG_TRADCHINESE} \ + "建立插件資料夾" +LangString str_desc_plugin ${LANG_TRADCHINESE} \ + "建立(空的)插件資料夾結構。插件資料夾用于安裝 Vim 的擴展插件,\ + 只要將檔案復制到相關的子資料夾中即可。" + +LangString str_section_plugin_home ${LANG_TRADCHINESE} \ + "建立插件資料夾" +LangString str_desc_plugin_home ${LANG_TRADCHINESE} \ + "Create plugin directories in HOME directory." + +LangString str_section_plugin_vim ${LANG_TRADCHINESE} \ + "建立共享插件資料夾" +LangString str_desc_plugin_vim ${LANG_TRADCHINESE} \ + "在 Vim 安裝資料夾下建立(空的)插件資料夾結構,電腦上所有用戶都能使用安裝\ + 在該資料夾里的擴展插件。" + +LangString str_section_vis_vim ${LANG_TRADCHINESE} \ + "安裝 VisVim 插件" +LangString str_desc_vis_vim ${LANG_TRADCHINESE} \ + "VisVim 是用于與微軟 Microsoft Visual Studio 軟體進行整合的插件。" + +LangString str_section_nls ${LANG_TRADCHINESE} \ + "安裝本地語言支持" +LangString str_desc_nls ${LANG_TRADCHINESE} \ + "安裝用于支持本地語言的檔案。" + +LangString str_unsection_register ${LANG_TRADCHINESE} \ + "移除 Vim 系統設定" +LangString str_desc_unregister ${LANG_TRADCHINESE} \ + "移除與 Vim 相關的系統設定。" + +LangString str_unsection_exe ${LANG_TRADCHINESE} \ + "移除 Vim 程式及腳本" +LangString str_desc_rm_exe ${LANG_TRADCHINESE} \ + "移除所有的 Vim 程式及腳本。" + +LangString str_ungroup_plugin ${LANG_TRADCHINESE} \ + "Remove plugin directories" +LangString str_desc_rm_plugin ${LANG_TRADCHINESE} \ + "Remove the plugin directories if they are empty." + +LangString str_unsection_plugin_home ${LANG_TRADCHINESE} \ + "Private" +LangString str_desc_rm_plugin_home ${LANG_TRADCHINESE} \ + "Remove the vimfiles directory in HOME directory." + +LangString str_unsection_plugin_vim ${LANG_TRADCHINESE} \ + "Shared" +LangString str_desc_rm_plugin_vim ${LANG_TRADCHINESE} \ + "Remove the vimfiles directory in Vim install directory." + +LangString str_unsection_rootdir ${LANG_TRADCHINESE} \ + "Remove the Vim root directory" +LangString str_desc_rm_rootdir ${LANG_TRADCHINESE} \ + "Remove the Vim root directory. It contains your Vim configuration files!" + + +############################################################################## +# Messages {{{1 +############################################################################## + +#LangString str_msg_too_many_ver ${LANG_TRADCHINESE} \ +# "閣下的電腦上安裝了 $vim_old_ver_count 個不同版本的 Vim,$\r$\n\ +# 但是本安裝程式最多只能處理 ${VIM_MAX_OLD_VER} 個版本。$\r$\n\ +# 煩請閣下手工移除一些版本以后再運行本安裝程式。" + +#LangString str_msg_invalid_root ${LANG_TRADCHINESE} \ +# "安裝資料夾「$vim_install_root」無效!$\r$\n\ +# 該資料夾必須以「vim」結尾。" + +#LangString str_msg_bin_mismatch ${LANG_TRADCHINESE} \ +# "Vim 執行程式安裝路徑異常!$\r$\n$\r$\n\ +# 該版本 Vim 的執行程式安裝路徑應該是「$vim_bin_path」,$\r$\n\ +# 而系統卻指示該路徑為「$INSTDIR」。" + +#LangString str_msg_vim_running ${LANG_TRADCHINESE} \ +# "閣下的電腦上尚有正在運行之 Vim,$\r$\n\ +# 煩請閣下在執行后續步驟前將其全部退出。" + +#LangString str_msg_register_ole ${LANG_TRADCHINESE} \ +# "試圖注冊 Vim OLE 伺服程式。請注意不論成功與否都不再顯示進一步的信息。" + +#LangString str_msg_unreg_ole ${LANG_TRADCHINESE} \ +# "試圖注銷 Vim OLE 伺服程式。請注意不論成功與否都不再顯示進一步的信息。" + +#LangString str_msg_rm_start ${LANG_TRADCHINESE} \ +# "正移除如下版本:" + +#LangString str_msg_rm_fail ${LANG_TRADCHINESE} \ +# "以下版本移除失敗:" + +#LangString str_msg_no_rm_key ${LANG_TRADCHINESE} \ +# "找不到反安裝程式的登錄檔入口。" + +#LangString str_msg_no_rm_reg ${LANG_TRADCHINESE} \ +# "在登錄檔中未找到反安裝程式路徑。" + +#LangString str_msg_no_rm_exe ${LANG_TRADCHINESE} \ +# "找不到反安裝程式。" + +#LangString str_msg_rm_copy_fail ${LANG_TRADCHINESE} \ +# "無法將法將反安裝程式复制到臨時目錄。" + +#LangString str_msg_rm_run_fail ${LANG_TRADCHINESE} \ +# "執行反安裝程式失敗。" + +#LangString str_msg_abort_install ${LANG_TRADCHINESE} \ +# "安裝程式將退出。" + +LangString str_msg_install_fail ${LANG_TRADCHINESE} \ + "安裝失敗。預祝下次好運。" + +LangString str_msg_rm_exe_fail ${LANG_TRADCHINESE} \ + "資料夾「$0」下有部分檔案未能移除!$\r$\n\ + 閣下只能手工移除該資料夾。" + +#LangString str_msg_rm_root_fail ${LANG_TRADCHINESE} \ +# "警告:無法刪除 Vim 安裝資料夾「$vim_install_root」,\ +# 該資料夾下仍有其他檔案。" + +LangString str_msg_uninstalling ${LANG_TRADCHINESE} \ + "Uninstalling the old version..." + +LangString str_msg_registering ${LANG_TRADCHINESE} \ + "Registering..." + +LangString str_msg_unregistering ${LANG_TRADCHINESE} \ + "Unregistering..." + + +############################################################################## +# Dialog Box {{{1 +############################################################################## + +LangString str_vimrc_page_title ${LANG_TRADCHINESE} \ + "Choose _vimrc settings" +LangString str_vimrc_page_subtitle ${LANG_TRADCHINESE} \ + "Choose the settings for enhancement, keyboard and mouse." + +LangString str_msg_compat_title ${LANG_TRADCHINESE} \ + " Vi / Vim behavior " +LangString str_msg_compat_desc ${LANG_TRADCHINESE} \ + "&Compatibility and enhancements" +LangString str_msg_compat_vi ${LANG_TRADCHINESE} \ + "Vi compatible" +LangString str_msg_compat_vim ${LANG_TRADCHINESE} \ + "Vim original" +LangString str_msg_compat_defaults ${LANG_TRADCHINESE} \ + "Vim with some enhancements (load defaults.vim)" +LangString str_msg_compat_all ${LANG_TRADCHINESE} \ + "Vim with all enhancements (load vimrc_example.vim) (Default)" + +LangString str_msg_keymap_title ${LANG_TRADCHINESE} \ + " Mappings " +LangString str_msg_keymap_desc ${LANG_TRADCHINESE} \ + "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" +LangString str_msg_keymap_default ${LANG_TRADCHINESE} \ + "Do not remap keys (Default)" +LangString str_msg_keymap_windows ${LANG_TRADCHINESE} \ + "Remap a few keys" + +LangString str_msg_mouse_title ${LANG_TRADCHINESE} \ + " Mouse " +LangString str_msg_mouse_desc ${LANG_TRADCHINESE} \ + "&Behavior of right and left buttons" +LangString str_msg_mouse_default ${LANG_TRADCHINESE} \ + "Right: popup menu, Left: visual mode (Default)" +LangString str_msg_mouse_windows ${LANG_TRADCHINESE} \ + "Right: popup menu, Left: select mode (Windows)" +LangString str_msg_mouse_unix ${LANG_TRADCHINESE} \ + "Right: extends selection, Left: visual mode (Unix)" diff --git a/src/dosinst.c b/src/dosinst.c index 9ecb0f4eb1..5c290a8dd8 100644 --- a/src/dosinst.c +++ b/src/dosinst.c @@ -444,11 +444,55 @@ window_cb(HWND hwnd, LPARAM lparam) title[0] = 0; GetWindowText(hwnd, title, 256); - if (strstr(title, "Vim ") != NULL && strstr(title, "Uninstall:") != NULL) + if (strstr(title, "Vim ") != NULL && strstr(title, " Uninstall") != NULL) ++num_windows; return TRUE; } +/* + * Run the uninstaller silently. + */ + static int +run_silent_uninstall(char *uninst_exe) +{ + char vimrt_dir[BUFSIZE]; + char temp_uninst[BUFSIZE]; + char temp_dir[MAX_PATH]; + char buf[BUFSIZE * 2 + 10]; + int i; + DWORD tick; + + strcpy(vimrt_dir, uninst_exe); + remove_tail(vimrt_dir); + + if (!GetTempPath(sizeof(temp_dir), temp_dir)) + return FAIL; + + /* Copy the uninstaller to a temporary exe. */ + tick = GetTickCount(); + for (i = 0; ; i++) + { + sprintf(temp_uninst, "%s\\vimun%04X.exe", temp_dir, + (i + tick) & 0xFFFF); + if (CopyFile(uninst_exe, temp_uninst, TRUE)) + break; + if (GetLastError() != ERROR_FILE_EXISTS) + return FAIL; + if (i == 65535) + return FAIL; + } + + /* Run the copied uninstaller silently. */ + if (strchr(temp_uninst, ' ') != NULL) + sprintf(buf, "\"%s\" /S _?=%s", temp_uninst, vimrt_dir); + else + sprintf(buf, "%s /S _?=%s", temp_uninst, vimrt_dir); + run_command(buf); + + DeleteFile(temp_uninst); + return OK; +} + /* * Check for already installed Vims. * Return non-zero when found one. @@ -469,6 +513,7 @@ uninstall_check(int skip_question) DWORD value_type; DWORD orig_num_keys; DWORD new_num_keys; + DWORD allow_silent; int foundone = 0; code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, uninstall_key, 0, @@ -495,6 +540,16 @@ uninstall_check(int skip_question) local_bufsize = BUFSIZE; CHECK_REG_ERROR(code); + allow_silent = 0; + if (skip_question) + { + DWORD varsize = sizeof(DWORD); + + RegQueryValueEx(uninstall_key_handle, "AllowSilent", 0, + &value_type, (LPBYTE)&allow_silent, + &varsize); + } + foundone = 1; printf("\n*********************************************************\n"); printf("Vim Install found what looks like an existing Vim version.\n"); @@ -549,45 +604,54 @@ uninstall_check(int skip_question) /* Find existing .bat files before deleting them. */ find_bat_exe(TRUE); - /* Execute the uninstall program. Put it in double - * quotes if there is an embedded space. */ + if (allow_silent) { - char buf[BUFSIZE]; - - if (strchr(temp_string_buffer, ' ') != NULL) - sprintf(buf, "\"%s\"", temp_string_buffer); - else - strcpy(buf, temp_string_buffer); - run_command(buf); - } - - /* Count the number of windows with a title that match - * the installer, so that we can check when it's done. - * The uninstaller copies itself, executes the copy - * and exits, thus we can't wait for the process to - * finish. */ - sleep(1); /* wait for uninstaller to start up */ - num_windows = 0; - EnumWindows(window_cb, 0); - if (num_windows == 0) - { - /* Did not find the uninstaller, ask user to press - * Enter when done. Just in case. */ - printf("Press Enter when the uninstaller is finished\n"); - rewind(stdin); - (void)getchar(); + if (run_silent_uninstall(temp_string_buffer) + == FAIL) + allow_silent = 0; /* Retry with non silent. */ } - else + if (!allow_silent) { - printf("Waiting for the uninstaller to finish (press CTRL-C to abort)."); - do + /* Execute the uninstall program. Put it in double + * quotes if there is an embedded space. */ + { + char buf[BUFSIZE]; + + if (strchr(temp_string_buffer, ' ') != NULL) + sprintf(buf, "\"%s\"", temp_string_buffer); + else + strcpy(buf, temp_string_buffer); + run_command(buf); + } + + /* Count the number of windows with a title that match + * the installer, so that we can check when it's done. + * The uninstaller copies itself, executes the copy + * and exits, thus we can't wait for the process to + * finish. */ + sleep(1); /* wait for uninstaller to start up */ + num_windows = 0; + EnumWindows(window_cb, 0); + if (num_windows == 0) + { + /* Did not find the uninstaller, ask user to press + * Enter when done. Just in case. */ + printf("Press Enter when the uninstaller is finished\n"); + rewind(stdin); + (void)getchar(); + } + else { - printf("."); - fflush(stdout); - sleep(1); /* wait for the uninstaller to finish */ - num_windows = 0; - EnumWindows(window_cb, 0); - } while (num_windows > 0); + printf("Waiting for the uninstaller to finish (press CTRL-C to abort)."); + do + { + printf("."); + fflush(stdout); + sleep(1); /* wait for the uninstaller to finish */ + num_windows = 0; + EnumWindows(window_cb, 0); + } while (num_windows > 0); + } } printf("\nDone!\n"); @@ -1609,7 +1673,11 @@ install_registry(void) } printf("Creating an uninstall entry\n"); - sprintf(display_name, "Vim " VIM_VERSION_SHORT); + sprintf(display_name, "Vim " VIM_VERSION_SHORT +#ifdef _WIN64 + " (x64)" +#endif + ); /* For the NSIS installer use the generated uninstaller. */ if (interactive) diff --git a/src/version.c b/src/version.c index daeabf5cc0..aadd16183b 100644 --- a/src/version.c +++ b/src/version.c @@ -799,6 +799,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 616, /**/ 615, /**/ -- 2.47.3