Я пишу файл сценария NSIS, который берет текущую локаль (в нашем случае это «английский») и генерирует установщик.
Здесь мне нужно добавить еще несколько дополнительных функций к этому.
- В настоящее время он берет страницы из папки NSIS (C: \ Program Files \ NSIS \ Contrib \ Modern UI 2 \ Pages)
Здесь, если я хочу добавитьмоя собственная страница к этому, как я могу это сделать?Могу ли я создать .nsh файл локально и использовать это?
В этом случае под;страницы! insertmacro ... Нужно ли нам указывать путь?
Аналогично "Языковые файлы".Например, если я хочу добавить свои собственные строки в файл English.nsh, могу ли я скопировать его в локальную папку?и однажды добавлены новые строки, как использовать в сценарии?Потому что теперь по умолчанию он берет его из C: \ Program Files \ NSIS \ Contrib \ Language files.
А также как установить конкретный язык (независимо от локали) в«Функция .onInit»
Ниже фрагмента основного кода, который я использовал:
;NSIS Modern User Interface
;Multilingual Example Script
!pragma warning error all
;--------------------------------
;Include Modern UI
!include "MUI2.nsh"
;--------------------------------
;General
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
Unicode true
;Name and file
Name "Locale Language"
OutFile "LocaleLanguage.exe"
;Default installation folder
InstallDir "$LOCALAPPDATA\LocaleLanguage"
;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\LocaleLanguage" ""
;Request application privileges for Windows Vista
RequestExecutionLevel user
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
;--------------------------------
;Language Selection Dialog Settings
;Remember the installer language
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "Software\LocaleLanguage"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
;--------------------------------
;Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_DIRECTORY
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English" ; The first language is the default language
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Japanese"
!insertmacro MUI_LANGUAGE "Korean"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Dutch"
!insertmacro MUI_LANGUAGE "Danish"
!insertmacro MUI_LANGUAGE "Greek"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Portuguese"
;--------------------------------
;Reserve Files
;If you are using solid compression, files that are required before
;the actual installation should be stored first in the data block,
;because this will make your installer start faster.
!insertmacro MUI_RESERVEFILE_LANGDLL
;--------------------------------
;Installer Sections
Section "Dummy Section" SecDummy
SetOutPath "$INSTDIR"
;ADD YOUR OWN FILES HERE...
;Store installation folder
WriteRegStr HKCU "Software\Locale Language" "" $INSTDIR
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
;--------------------------------
;Installer Functions
Function .onInit
; !insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
;--------------------------------
;Descriptions
;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGAUGE SPECIFIC
;Assign descriptions to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} "A test section."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Section "Uninstall"
;ADD YOUR OWN FILES HERE...
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
DeleteRegKey /ifempty HKCU "Software\Locale Language"
SectionEnd
;--------------------------------
;Uninstaller Functions
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
ОБНОВЛЕНИЕ:
Нижеэто обновленный код с использованием файлов английского и шведского языков .nsh.
!pragma warning error all
;--------------------------------
;Include Modern UI
!include "MUI2.nsh"
!include LogicLib.nsh
!include nsDialogs.nsh
;--------------------------------
;General
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
Unicode true
;Name and file
Name "Locale Language"
OutFile "LocaleLanguage.exe"
;Default installation folder
InstallDir "$LOCALAPPDATA\LocaleLanguage"
;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\LocaleLanguage" ""
;Request application privileges for Windows Vista
RequestExecutionLevel user
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
;--------------------------------
;Language Selection Dialog Settings
;Remember the installer language
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "Software\LocaleLanguage"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
;--------------------------------
;Pages
Page Custom mycustompage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English" ; The first language is the default language
!insertmacro MUI_LANGUAGE "Swedish"
;--------------------------------
;Reserve Files
;If you are using solid compression, files that are required before
;the actual installation should be stored first in the data block,
;because this will make your installer start faster.
!insertmacro MUI_RESERVEFILE_LANGDLL
;Including the English and Swedish nsh files from the below path
!include "E:\prakash\LangTesting\LanguageFiles\English.nsh"
!include "E:\prakash\LangTesting\LanguageFiles\Swedish.nsh"
;--------------------------------
;Installer Sections
Section "Dummy Section" SecDummy
SetOutPath "$INSTDIR"
;ADD YOUR OWN FILES HERE...
;Store installation folder
WriteRegStr HKCU "Software\Locale Language" "" $INSTDIR
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
; To use the strings defined in English.nsh and Swedish.nsh files
!define MUI_PAGE_HEADER_TEXT "$(mypagetitle)"
!define MUI_PAGE_HEADER_SUBTEXT "$(mypagesubtitle)"
!define MUI_PAGE_DEFAULT_TEXT "$(defaulttext)"
var TextHandle
Function mycustompage
!insertmacro MUI_HEADER_TEXT $(mypagetitle) $(mypagesubtitle)
nsDialogs::Create 1018
Pop $0
${NSD_CreateText} 0 13u 100% 12u "$(defaulttext)"
Pop $TextHandle
nsDialogs::Show
FunctionEnd
;--------------------------------
;Installer Functions
Function .onInit
; !insertmacro MUI_LANGDLL_DISPLAY
;$LANGUAGE
System::Call 'KERNEL32::GetTickCount()i.r0' ; Get a "random" number
IntOp $0 $0 & 1
${If} $0 <> 0
StrCpy $Language ${LANG_SWEDISH} ; Force Swedish
${Else}
!insertmacro MUI_LANGDLL_DISPLAY ; Let the user choose a language
${EndIf}
FunctionEnd
;--------------------------------
;Descriptions
;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGAUGE SPECIFIC
;Assign descriptions to sections
;!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
; !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} "A test section."
;!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
**********
**English.nsh**
;Language: English (1033)
!insertmacro LANGFILE "English" = "English" =
LangString mypagetitle ${LANG_ENGLISH} "Hello"
LangString mypagesubtitle ${LANG_ENGLISH} "World"
***********
**Swedish.nsh**
;Language: Swedish (1053)
!insertmacro LANGFILE "Swedish" = "Svenska" =
LangString mypagetitle ${LANG_SWEDISH} "Bork"
LangString mypagesubtitle ${LANG_SWEDISH} "borkbork"
LangString defaulttext ${LANG_SWEDISH} "Skriva bork bork..."
LangString defaulttext ${LANG_ENGLISH} "Type something here..."
Здесь я создал файлы English.nsh и Sweedish.nsh в своей локальной папке и включил эти файлы.А затем определили эти строки.Когда я бегу, это всегда показывает по-шведски.Это не отображается на английском языке.Пожалуйста, дайте мне знать, это правильный путь?а также какие-либо изменения требуются?Здесь я прокомментировал раздел; описания, потому что он выбрасывает некоторые ошибки.Зачем нам это; Раздел описания?