#installation #nsis #appinstaller
#установка #nsis #appinstaller
Вопрос:
Программа установки определяет язык установленных приложений, скажем, $detected_language
будет иметь значение «pl«.
Теперь я хочу, чтобы был установлен только один menu.cfg
файл, основанный на значении $detected_language
. Использование переменных в File ...
не допускается. Это единственный способ создать множество разделов и назвать их «Kardaw Mod (английский)», «Kardaw Mod (немецкий)» и т.д., И скрыть все ненужные разделы с флагами, которые не соответствуют обнаруженному языку? (menu.cfg не может быть изменен на лету, поскольку он зашифрован).
var detected_language
...
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE detect_app_language; /*$detected_language → "pl"*/
!insertmacro MUI_PAGE_DIRECTORY
...
Section "Kardaw Mod"
SetOutPath "$INSTDIRdata"
File "E:MyModsKardaw ModEnglishdatamenu.cfg"
File "E:MyModsKardaw ModGermandatamenu.cfg"
File "E:MyModsKardaw ModFrenchdatamenu.cfg"
File "E:MyModsKardaw ModSpanishdatamenu.cfg"
File "E:MyModsKardaw ModRussiandatamenu.cfg"
File "E:MyModsKardaw ModPolishdatamenu.cfg";/* ←this one is the correct one */
Ответ №1:
Создайте переменную, содержащую выбранный пользователем язык, и используйте $ {If}s только для извлечения желаемых файлов.
Var /Global MySelectedlanguage ; Fill this variable with user selected language eg. "EN" for English etc.
Section "Kardaw Mod"
SetOutPath "$INSTDIRdata"
${If} $MySelectedlanguage == "EN"
File "E:MyModsKardaw ModEnglishdatamenu.cfg"
${EndIf}
${If} $MySelectedlanguage == "DE"
File "E:MyModsKardaw ModGermandatamenu.cfg"
${EndIf}
; ... The same for other languages ...
SectionEnd
Комментарии:
1. Проблема в том, что если мы выберем неправильный язык, приложение завершит работу. Установщик должен определить язык приложения. Сначала нам нужно указать путь установки. Я думал о создании невидимых подразделов под названием «SEC-EN», «SEC-DE» и т.д. Будет виден основной раздел «Kardaw Mod». Специальная функция установит один из невидимых подразделов. Я думаю, что это будет решением моей проблемы.
Ответ №2:
Первой мыслью было сделать эти записи невидимыми в группе. Но -
символ все еще был виден, а в заголовке группы разделов была серая галочка , если она была отмечена.
Решением моего вопроса будет размещение всех разделов один за другим. Функция установит нужное поле, когда мы покинем страницу. Он также проверит, был ли выбран мод.