From cd26f1887be424688a1c16b6773a84344531cf54 Mon Sep 17 00:00:00 2001 From: hensm Date: Fri, 3 Jul 2020 02:48:22 +0100 Subject: [PATCH] Allow NSIS installer localization --- CONTRIBUTING.md | 18 +++++++++++++++ app/packaging/win/installer.nsi | 39 ++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbd0682..183ffc5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,3 +41,21 @@ Missing/outdated strings: * `optionsUserAgentWhitelistRestrictedEnabled` * `optionsUserAgentWhitelistRestrictedEnabledDescription` * `optionsOptionRecommended` + + +### NSIS Installer Localization + +If you're comfortable editing and compiling NSIS installer scripts, use the following guide, otherwise just provide translated strings in an issue or PR comment. + +To localize Windows installer strings, first add the relevant `MUI_LANGUAGE` macro to the end of the existing list (list of language names can be found [here](https://sourceforge.net/p/nsis/code/HEAD/tree/NSIS/trunk/Contrib/Language%20files/)): +````nsi +!insertmacro MUI_LANGUAGE "German" +```` +Then, provide each version of the existing `LangString` commands with that language grouped under the existing strings: +````nsi +LangString MSG__EXAMPLE_STRING1 ${LANG_GERMAN} "Hallo" +LangString MSG__EXAMPLE_STRING2 ${LANG_GERMAN} "Welt" +```` + +Try to keep the line length under 80 characters by splitting lines within the string with a backslash at the end of the line and a double indent on the next line. To escape characters (like other double quotes), prepend with a `$\`. + diff --git a/app/packaging/win/installer.nsi b/app/packaging/win/installer.nsi index 8154955..54270c0 100644 --- a/app/packaging/win/installer.nsi +++ b/app/packaging/win/installer.nsi @@ -1,8 +1,18 @@ Unicode True SetCompressor /SOLID LZMA +# Registry keys +!define KEY_MANIFEST "Software\Mozilla\NativeMessagingHosts\{{applicationName}}" +!define KEY_UNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\{{winRegistryKey}}" + + !include MUI2.nsh +# Save installer language for uninstallation +!define MUI_LANGDLL_REGISTRY_ROOT HKLM +!define MUI_LANGDLL_REGISTRY_KEY "${KEY_MANIFEST}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + # MUI general !define MUI_ABORTWARNING @@ -17,12 +27,18 @@ SetCompressor /SOLID LZMA !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH + +# Translator note: see CONTRIBUTING for more info on how to +# translate NSIS installer strings. !insertmacro MUI_LANGUAGE "English" - -# Registry keys -!define KEY_MANIFEST "Software\Mozilla\NativeMessagingHosts\{{applicationName}}" -!define KEY_UNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\{{winRegistryKey}}" +LangString MSG__INSTALL_BONJOUR ${LANG_ENGLISH} \ + "Install Bonjour dependency?" +LangString MSG__FIREFOX_OPEN ${LANG_ENGLISH} \ + "Firefox must be closed during uninstallation if the extension \ + is installed. Close Firefox and click $\"Retry$\", click \ + $\"Ignore$\" to force close or $\"Abort$\" to cancel \ + uninstallation." # Application name @@ -52,12 +68,12 @@ Section # Install Bonjour IfFileExists "$SYSDIR\dnssd.dll" skipInstallBonjour - MessageBox MB_YESNO \ - "Install Bonjour dependency?" \ - IDNO skipInstallBonjour + MessageBox MB_YESNO \ + $(MSG__INSTALL_BONJOUR) \ + IDNO skipInstallBonjour - File /oname=Bonjour64.msi "C:\Program Files\Bonjour SDK\Installer\Bonjour64.msi" - ExecWait "msiexec /i $\"$INSTDIR\Bonjour64.msi$\"" + File /oname=Bonjour64.msi "C:\Program Files\Bonjour SDK\Installer\Bonjour64.msi" + ExecWait "msiexec /i $\"$INSTDIR\Bonjour64.msi$\"" skipInstallBonjour: Delete "$INSTDIR\Bonjour64.msi" @@ -85,10 +101,7 @@ Section "uninstall" FindWindow $0 "MozillaWindowClass" StrCmp $0 0 continueUninstall MessageBox MB_ABORTRETRYIGNORE|MB_ICONEXCLAMATION \ - "Firefox must be closed during uninstallation if the extension \ - is installed. Close Firefox and click $\"Retry$\", click \ - $\"Ignore$\" to force close or $\"Abort$\" to cancel \ - uninstallation." \ + $(MSG__FIREFOX_OPEN) \ IDABORT abortUninstall \ IDRETRY retryUninstall