2014-01-20 3 views
1

Я использую nsis для создания нескольких инсталляторов. Мои установщики содержат EULA, настраиваемые формы (то есть, что нужно установить). Я хотел бы иметь один скрипт nsis и иметь возможность контролировать текст различных элементов через языковые файлы. Элементы могут быть: текст EULA, далее на кнопках (т. Е. «Следующий» на английском языке и «Proximo» на испанском языке) и любой другой текст, отображаемый во время установки. Каков правильный способ реализации этого многоязычного установщика?Управление всеми языками элементов установки в NSIS

+0

Есть несколько полезных примеров в http://nsis.sourceforge.net/Examples/languages.nsi – icc97

ответ

0

У NSIS есть отличная поддержка для этого.

Существует пример с этой функцией MultiLanguage, которая показывает, как загружать отдельные языки в программу установки и использовать локализованные строки.

Вы можете найти его в NSIS \ Examples \ Modern UI \ MultiLanguage.nsi

(я не уверен, что могу вставить весь скрипт здесь, что может быть против SO правил)

1

Основной пример того, как использовать несколько языков:

Name "Test" 
RequestExecutionLevel user 
Outfile "Test.exe" 


#Generate some license files on the fly 
!tempfile LicFile1 
!appendfile "${LicFile1}" "Hello from license 1." 
!tempfile LicFile2 
!appendfile "${LicFile2}" "Hello from license 2!" 

LoadLanguageFile "${NSISDIR}\Contrib\Language files\Danish.nlf" 
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Swedish.nlf" 

LicenseLangString licenseData ${LANG_DANISH} "${LicFile1}" 
LicenseLangString licenseData ${LANG_SWEDISH} "${LicFile2}" 

LicenseData $(licenseData) 
LangString ^CancelBtn ${LANG_DANISH} "!lecnaC" ; Override built-in string from .nlf just for fun 
LangString myCustomString ${LANG_DANISH} "Foo" 
LangString myCustomString ${LANG_SWEDISH} "Bar" 

Page License 
Page InstFiles 

!include LogicLib.nsh 

Function .onInit 
Push "" 
Push ${LANG_DANISH} 
Push "Danish" 
Push ${LANG_SWEDISH} 
Push "Bork bork" 
Push A ; LangDLL: A means auto count languages 
LangDLL::LangDialog "Installer Language" "Please select the language of the installer" 
Pop $LANGUAGE 
${IfThen} $LANGUAGE == "cancel" ${|} Abort ${|} 
FunctionEnd 

Section "Dummy" 
MessageBox MB_OK "$(myCustomString) and baz" 
SectionEnd 

!delfile "${LicFile1}" 
!delfile "${LicFile2}" 

Другой пример использования MUI и «внешние» файлы для пользовательских строк:

Name "Test" 
RequestExecutionLevel user 
Outfile "Test.exe" 


#Generate some language and license files for this example 
!tempfile LicFile1 
!appendfile "${LicFile1}" "Hello from license 1." 
!tempfile LicFile2 
!appendfile "${LicFile2}" "Hello from license 2!" 
!tempfile CustomDanNsh 
!appendfile "${CustomDanNsh}" '!insertmacro LANGFILE_EXT Danish$\n' 
!appendfile "${CustomDanNsh}" '${LangFileString} myCustomString "red"$\n' 
!tempfile CustomSweNsh 
!appendfile "${CustomSweNsh}" '!insertmacro LANGFILE_EXT Swedish$\n' 
!appendfile "${CustomSweNsh}" '${LangFileString} myCustomString "blue"$\n' 

!include "MUI2.nsh" 
!define MUI_LANGDLL_ALLLANGUAGES 

!insertmacro MUI_PAGE_LICENSE "$(licenseData)" 
!insertmacro MUI_PAGE_INSTFILES 

!insertmacro MUI_LANGUAGE "Danish" 
!insertmacro LANGFILE_INCLUDE "${CustomDanNsh}" 
LicenseLangString licenseData 0 "${LicFile1}" 
!insertmacro MUI_LANGUAGE "Swedish" 
!insertmacro LANGFILE_INCLUDE "${CustomSweNsh}" 
LicenseLangString licenseData 0 "${LicFile2}" 


Function .onInit 
!insertmacro MUI_LANGDLL_DISPLAY 
FunctionEnd 

Section "Dummy" 
MessageBox MB_OK "White or yellow on $(myCustomString)" 
SectionEnd 

!delfile "${CustomDanNsh}" 
!delfile "${CustomSweNsh}" 
!delfile "${LicFile1}" 
!delfile "${LicFile2}" 
Смежные вопросы