v2.4.14 更新内容: 【整改·本版首次上传被安全扫描挡下,已从根因修好重传】初版上传后本站扫描给出 BLOCKED(Passed 4 / Critical 1 / 7 个问题,2.4.13 基线为 Passed 5 / 0 / 0),整版不可进入人审、不可下载。7 条发现全部来自本版新增的 i18n 代码,已逐条从根因消除,**没有使用任何 # nosec 之类压制**:① B405/B314——运行时不解析 XML:.ts 退路改为读同源生成的 i18n/messages_<code>.json(标准库 json,零依赖),.ts 仍随包分发作为人工维护入口,但不再被运行时读取;② B110 ×4——try/except/pass 改用 contextlib.suppress;③ B105——常量名 _LANG_TOKEN 含 token 被当作硬编码口令,改名 _LANG_PLACEHOLDER。同时新增两条按「是否进包」判定的守卫(进包代码不得 import XML 解析模块、不得出现 B110 模式),这类问题的代价不是一条警告而是整版不可发布。本地 bandit 按与本站同口径(发布包 46 个 .py)复现并归零。 【新功能】多语言支持(简体中文 / English)。设置页顶部新增「🌐 语言 / Language」,默认「跟随系统 / Follow system」——自动沿用 QGIS 的界面语言;也可手动固定为简体中文或 English,改动**立即生效、无需重启**(插件菜单名与按钮文案随之刷新)。语言项与「跟随系统」标签本身**始终中英并排显示且不做翻译**,因此切成英文之后也能一眼找到切回中文的入口。 【实现】走 Qt 标准的 .ts / .qm 机制:.qm 为主路径,零依赖退路是随包生成的 messages_*.json(与 .qm 同源,因此不会漂移)——.qm 缺失、损坏或与当前 Qt 版本不兼容时,插件自动改读该 JSON,用户只会感到「这条翻译生效得晚一点」,而不会看到空白。中文同样配一份**恒等映射**文件:QGIS 会按系统语言自动替我们装载一份英文翻译,而那个翻译器的引用我们拿不到、也就移不掉;中文文件由插件**后装入**(Qt 的翻译器是栈式,后装先查),把界面稳稳锁回中文。 【重要修复】帮助文档缺失时弹出的话「未找到完整帮助文档 HELP.html」**此前根本没进翻译表**。真因是它被写成 `_translate(` 单独占一行、上下文参数落到下一行,且自身嵌在别的调用里当参数——字符串提取工具是**行敏感**的,这种写法会把整条调用**静默丢弃**。这类漏翻不报任何错,只是英文界面下那一句默默留在中文。现已修正写法,并新增**静态覆盖守卫**:把源码里所有翻译调用与翻译表**双向比对**,既拦「漏翻」也拦「死译文」(文案已删但译文还在)。 【覆盖面】核心界面文案共 192 条全部双语:设置页、对话页、历史、工作流、报告、帮助、MCP 服务页、模型配置、代码审查与依赖缺失提示、连接诊断,含全部工具提示与确认框正文。助手的**回复语言与界面语言同源**——界面是英文时,助手也用英文作答(含进度汇报、错误说明与确认请求);代码、命令、API 名、字段名与文件路径一律保持原样,绝不翻译。提示词本体**不**分中英两份:那里面腌着一批用真实故障换来的硬约束,一旦分叉就会出现「修好了一份、另一份还是旧的」这类静默退化;按语言现变的只有「回复语言」这一条。 【测试】新增 68 例:i18n 机制 + 打包资源守卫(含上面两条扫描器同源守卫)。全部含**反向验证**——卸掉翻译器后翻译必须消失,否则「装载成功」这类断言全是假绿。打包守卫专门盯住一个历史坑:曾经进包的那个 .qm 是 12 字节空文件,因为「文件确实在包里」而从未被发现;现在断言大小、魔数、两种语言不得相同、语言文件成对,且文件名必须符合 QGIS 的自动装载约定。另外补上「英文译文里不得残留中文」与「中文表必须是恒等映射」两条体检。真机 Qt5 与 Qt6 双版本各 200 项界面与提示词验收全通过;单测 610 例增至 678 例全绿。
yes
bunkmr
2026-10-07T12:17:52.112889+00:00
3.22.0
4.99.0
None
no
Plugin Tags