Подобные многократно повторяющиеся конструкции поддерживать -- самому себе лишняя работа при дальнейших модификациях плюс прямая дорога к ошибкам.
1. Код языка записывается в регистр $0 в функции .onInit, а читается в секции. По пути $0 может многократно измениться
2. Если пользоваться такой конструкцией для установки языка сообщений, то лучше переписать код примерно так:
Скрытый текст
Код:
Var RunParamVar
Function .onInit
${GetParameters} $RunParamVar
ClearErrors
${GetOptions} $RunParamVar "/S" $1
IfErrors skip_check_param_S 0
SetSilent silent
skip_check_param_S:
IfSilent do_some_work 0
System::Call "kernel32::GetUserDefaultLCID() i.r0"
IntOp $LANGUAGE $0 & 0xFFFF
IntFmt $0 "%04X" $0
${If} $0 = 0419
StrCpy $msgbox_ask_text "rus text"
StrCpy $msgbox_completed_text "rus text"
${ElseIf} $0 = 0422
StrCpy $msgbox_ask_text "ukr text"
StrCpy $msgbox_completed_text "ukr text"
${Else}
StrCpy $msgbox_ask_text "english text"
StrCpy $msgbox_completed_text "english text"
${EndIf}
MessageBox MB_YESNO|MB_TOPMOST|MB_USERICON "$msgbox_ask_text" IDYES +2 IDNO 0
Abort
do_some_work:
Call MainInstructionsFunc
IfSilent +2 0
MessageBox MB_OK|MB_TOPMOST|MB_USERICON " $msgbox_completed_text"
FunctionEnd
Function MainInstructionsFunc
.....
рабочая часть скрипта
.....
FunctionEnd
Или использовать
Код:
LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Russian.nlf"
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Ukrainian.nlf"
LangString VarName1 ${LANG_ENGLISH} "eng text"
LangString VarName1 ${LANG_RUSSIAN} "rus text"
LangString VarName1 ${LANG_UKRAINIAN} "ukr text"
.......
3. В данном скрипте подразумевается, что программа установлена в определённую папку по умолчанию.
Во избежание нестыковок лучше вычитать из реестра папку установки в переменную и использовать её в дальшейшем.
Дополнительно можно запилить проверку на то, что это именно та папка, в которую надо писать файлы.
4. DetailPrint из моего примера можно было и удалить