feat(nsis): 安装器自定义文案随系统语言(简中/繁中/英文)#317
Merged
Merged
Conversation
dododook#314 打包在 main 上失败:makensis warning 6001「Variable flowzExistingDir not referenced or never set」被 electron-builder 当作 error。 根因:electron-builder 把 build/installer.nsh 同时 include 进 installer 与 uninstaller 两个编译单元。flowzExistingDir 等 4 个 Var 只被 customInit/ customWelcomePage 引用,而这两个宏仅在 !ifndef BUILD_UNINSTALLER 分支插入, 故 uninstaller 单元里这些 Var 声明却无处引用,触发 warning-as-error。 用 !ifndef BUILD_UNINSTALLER 包住这 4 个 Var 声明(与模板对 installer-only 变量的处置一致)。preInit 用 $R0-$R2 通用寄存器、不碰这些 Var,两单元插入无碍。 PR CI 的 package job 不编译 NSIS installer,仅 main push 的 full package 才 编译,故此问题 PR 阶段的 CI 未覆盖。
maintenance 页(升级/卸载选择)与 customUnInstall 卸载进度文案此前硬编码 (maintenance 英文、customUnInstall 中文),不随系统语言——中文用户看到英文 升级页、英文用户卸载时看到中文进度。改为运行时按 $LANGUAGE 的 LCID 选简中 (2052)/繁中(1028)/英文。 未用 electron-builder 的 messages.yml/LangString:其 LangString 在 sharedHeader 生成、早于 installer.nsi 的 addLangs(MUI_LANGUAGE 加载),makensis 报 warning 6040「language table 缺该 string」被 -WX 当 error → 打包失败。改运行时判断,宏在 函数体内 insert 时 MUI_LANGUAGE 已加载、$LANGUAGE 有当前 LCID,纯数字比较不依赖 编译期语言常量。 electron-builder 自带的 MUI 主体页面仍随系统语言(全套 bundledLanguages 不变)。 app 的 ru/fa 无对应 NSIS .nlf,自定义文案 fallback 英文。 本地 electron-builder --win nsis 真实编译验证通过(setup.exe 产出、无 warning)。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题
NSIS 安装器的两处自定义文案此前硬编码、不随系统语言:
customUnInstall卸载进度DetailPrint写死中文 → 英文系统用户卸载时看到中文进度electron-builder 自带的 MUI 主体页面(欢迎/目录/进度/完成)本就随系统语言,问题只在这两处自定义注入的文案。
修复
改为运行时按
$LANGUAGE的 LCID 选简中(2052)/繁中(1028)/英文,覆盖 maintenance 页 5 处 +customUnInstall3 处。为什么不用 electron-builder 的 messages.yml
试过
build/messages.yml+$(id)LangString(electron-builder 官方机制),但反复因makensis warning 6040「LangString not set in language table」被-WX当 error 打包失败。根因:electron-builder 把 messages.yml 生成的LangString放在 sharedHeader(脚本最前),早于installer.nsi的addLangs(MUI_LANGUAGE 加载)——LangString 定义先于语言加载,末尾语言表 cross-check 缺失。缩减installerLanguages或补全 fallback 均未绕过(还连带撞上 fa 无Persian.nlf)。改用运行时判断:
SelectLang宏在函数体内 insert,届时 MUI_LANGUAGE 已加载、$LANGUAGE为当前 LCID,纯数字比较不依赖任何编译期语言常量,彻底绕过顺序问题。运行时变量($flowzExistingVer/$flowzExistingDir)拼在选出字符串外,译文内只留编译期${VERSION}。覆盖范围
.nlf(bundledLanguages 本就不含 fa),自定义文案 fallback 英文;MUI 主体页面仍随系统语言(全套 bundledLanguages 不变)。验证
electron-builder --win nsis真实编译(makensis 3.0.4.1,与 CI 同版本)通过:FlowZ-4.2.8-win-x64-setup.exe产出、无 warning、exit 0。依赖
本 PR 基于 #315(NSIS uninstaller Var 打包修复),含其 commit——installer.nsh 若无 #315 的
!ifndef BUILD_UNINSTALLER包裹,打包同样会因 warning 6001 失败。建议 #315 先合,或本 PR 一并带入。Refs #312 #314