Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


динозавра, Самостоятельно можно отредактировать сообщение.

По самому коду:

Подобные многократно повторяющиеся конструкции поддерживать -- самому себе лишняя работа при дальнейших модификациях плюс прямая дорога к ошибкам.

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 из моего примера можно было и удалить

Последний раз редактировалось iglezz, 18-09-2019 в 19:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:16, 18-09-2019 | #2316