0

安装程序会检测已安装应用程序的语言,假设$detected_language其值为“ pl ”。

现在我希望只menu.cfg安装一个文件,基于$detected_language. File ...不允许使用变量。是创建大量Sections的唯一方法,并将它们命名为“Kardaw Mod(英语)”、“Kardaw Mod(德语)”等,并隐藏所有带有与检测到的语言不匹配的标志的不必要的 Sections 吗?(menu.cfg 不能即时修改,因为它是加密的)。

var detected_language
...

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE detect_app_language; /*$detected_language → "pl"*/
!insertmacro MUI_PAGE_DIRECTORY
...

Section "Kardaw Mod"
  SetOutPath "$INSTDIR\data"
  File "E:\MyMods\Kardaw Mod\English\data\menu.cfg"
  File "E:\MyMods\Kardaw Mod\German\data\menu.cfg"
  File "E:\MyMods\Kardaw Mod\French\data\menu.cfg"
  File "E:\MyMods\Kardaw Mod\Spanish\data\menu.cfg"
  File "E:\MyMods\Kardaw Mod\Russian\data\menu.cfg"
  File "E:\MyMods\Kardaw Mod\Polish\data\menu.cfg";/* ←this one is the correct one */
4

2 回答 2

0

第一个想法是让这些条目在组中不可见。但该-符号仍然可见,如果选中,则该部分组的标题有一个灰色的复选标记 ☑。

我的问题的解决方案是一一放置所有部分。当我们离开页面时,一个函数会检查右边的框。它还将检查是否选择了 mod。

错误的解决方案 正确的解决方案

于 2020-09-07T21:20:09.513 回答
0

创建一个包含用户选择的语言的变量,并使用 ${If}s 仅提取所需的文件。

    Var /Global MySelectedlanguage ; Fill this variable with user selected language eg. "EN" for English etc.
    
    Section "Kardaw Mod"
      SetOutPath "$INSTDIR\data"

      ${If} $MySelectedlanguage == "EN"
      File "E:\MyMods\Kardaw Mod\English\data\menu.cfg"
      ${EndIf}

    ${If} $MySelectedlanguage == "DE"
      File "E:\MyMods\Kardaw Mod\German\data\menu.cfg"
    ${EndIf}

    ; ... The same for other languages ...
    SectionEnd
于 2020-09-07T04:00:34.583 回答