Установите правильный файл с тем же именем в зависимости от языка приложения в NSIS

#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:

Первой мыслью было сделать эти записи невидимыми в группе. Но - символ все еще был виден, а в заголовке группы разделов была серая галочка ☑, если она была отмечена.

Решением моего вопроса будет размещение всех разделов один за другим. Функция установит нужное поле, когда мы покинем страницу. Он также проверит, был ли выбран мод.

Неправильное решение Правильное решение