3D Slicer使用“翻译来源 Weblate(最新翻译)”更新语言文件出现“ 跳过。此组件/语言未在 Weblate 上找到。”的问题如何解决?

软件版本:5.8.1 r33241 11eaf62
系统版本:Windows 11 25H2
网络环境:直接连接外网
问题描述:使用“翻译来源 Weblate(最新翻译)”更新语言文件出现“ 跳过。此组件/语言未在 Weblate 上找到。”问题如何解决?操作界面如下图所示:

报错内容:

Traceback (most recent call last):
  File "C:\ProgramData\slicer.org\Slicer 5.8.1\bin\Python\slicer\util.py", line 3303, in tryWithErrorDisplay
    yield
  File "C:/ProgramData/slicer.org/Slicer 5.8.1/slicer.org/Extensions-33241/LanguagePacks/lib/Slicer-5.8/qt-scripted-modules/LanguageTools.py", line 415, in onUpdateButton
    self.logic.convertTsFilesToQmFiles()
  File "C:/ProgramData/slicer.org/Slicer 5.8.1/slicer.org/Extensions-33241/LanguagePacks/lib/Slicer-5.8/qt-scripted-modules/LanguageTools.py", line 654, in convertTsFilesToQmFiles
    slicer.util.logProcessOutput(lreleaseProcess)
  File "C:\ProgramData\slicer.org\Slicer 5.8.1\bin\Python\slicer\util.py", line 3862, in logProcessOutput
    raise CalledProcessError(retcode, proc.args, output=proc.stdout, stderr=proc.stderr)
subprocess.CalledProcessError: Command '['C:/ProgramData/slicer.org/Slicer 5.8.1/bin/../bin\\lrelease.EXE', 'C:/Users/Administrator/AppData/Local/Temp/Slicer/__SlicerTemp__2025-11-06_09+24+38.061\\Slicer_zh-Hans.ts']' returned non-zero exit status 1.

这是 Slicer 这两天刚刚暴露出来的一个“官方级别”问题,不是你本机配置的问题。:slightly_smiling_face:

你现在遇到的是 Weblate 源下载的中文 .ts 文件被 HTML 页面污染,导致 lrelease 转换失败,所以 Language Tools 报了:

lrelease.EXE ... returned non-zero exit status 1

而上面那些
跳过。此组件/语言未在 Weblate 上找到。
只是说明这些扩展目前没有 zh-Hans 词条,本身并不会让更新失败。(GitHub)

更关键的是:现在 Weblate 开了一个防机器人验证页面(“Making sure you’re not a bot!”),Slicer 去拉 .ts 时被重定向到这个页面,结果下载到的是一整个 HTML,而不是 XML 格式的 .ts 文件,lrelease 一解析就崩了。这个情况已经有人在 LanguagePacks 的 GitHub issues 里复现并说明了原因。(GitHub)


:white_check_mark: 推荐解决办法:改用 “GitHub(每日更新)” 作为翻译来源

这是目前最简单、最干净的办法。

  1. 在 Slicer 中打开 Language Tools(你截图里的这个模块)。

  2. 在上方 “翻译来源(Input translations from)” 里:

    • 把原来的 Weblate(最新翻译) 改成 GitHub(每日更新)
  3. 点右边的 “刷新” 按钮。

  4. 在下面语言列表中勾选:
    Chinese (Simplified Han script) (zh-Hans)

  5. “更新翻译文件”

  6. 上面 “应用语言(Application language)” 选择 Chinese (China)

  7. “重启应用程序”

GitHub 上存的是已经由开发者生成好的翻译文件(对应仓库 SlicerLanguageTranslations),是干净的 .ts/.qm 文件,不会被 Weblate 的验证码页面污染,因此不会再触发 lrelease.EXE 的错误。(GitHub)


:magnifying_glass_tilted_left: 如果你想确认一下自己的问题是不是这个

可以按错误提示里的路径去看一下下载的 .ts 文件:

  1. 根据报错中的路径,比如:

    C:\Users\Administrator\AppData\Local\Temp\Slicer\__SlicerTemp__2025-11-06_09+24+38.061\Slicer_zh-Hans.ts
    
    
  2. 用记事本打开 Slicer_zh-Hans.ts

  3. 如果文件一开头是类似:

    <!doctype html><html lang="en"><head><title>Making sure you're not a bot!</title> ...
    
    

    那就说明 你确实下载到了 Weblate 的“反机器人”HTML 页面,而不是正常的 TS 文件,这和 GitHub 上的 issue 描述一模一样。(GitHub)

这类文件不管用什么方式跑 lrelease 都会失败。


如果你一定要坚持用 “Weblate(最新翻译)”

暂时只能走稍微“折腾”的手工路线,比如:

  1. 直接去 GitHub 仓库 SlicerLanguageTranslations 下载干净的
    Slicer_zh-Hans.tsCTK_zh-Hans.ts 等中文 TS 文件;(GitHub)

  2. 覆盖掉本地临时目录 / 缓存里同名的损坏 TS;

  3. 然后在 Language Tools 里 不要再从 Weblate 下载,只让它执行“从 .ts 生成 .qm”的那一步。

但只要你再点一次 Weblate 下载,照样有可能又被验证码页面“污染”,所以不太推荐。


小结

  • 这次错误是 LanguagePacks + Weblate 当前的交互问题,不是你机器或网络配置的问题;已经在 GitHub issue 中有完整复现和原因说明。(GitHub)

  • 最实用的做法:
    :backhand_index_pointing_right: 把“翻译来源”从 Weblate 换成 GitHub,再重新更新中文语言包,然后在“应用语言”里选 Chinese (China) 重启即可。

您好,曹老师:

非常感谢您,您对大家的每个疑问既有来龙去脉的分析,又有条分缕析的解决办法指导,给大家很大的帮助。

我摸索出另一个办法,能即时把最新的翻译文件应用上:

  1. 从ht—tps://hosted.weblate.org/download/3d-slicer/3d-slicer/zh_Hans/下载单一简体中文的包含所有组件的语言包zip文件,到本地电脑;
  2. 解压缩zip,提取里面所有的_zh-CN.ts结尾的语言文件到一个文件夹里;
  3. 语言工具选择“本地文件夹(离线使用)”;
  4. 点击更新翻译文件;

对于这个帖子Slicer/Slicer/issues/8812,我有2个疑问:

  1. 代码编写者lassoan说他没遇到这个问题,防机器人验证页面应该对所有人起作用,不知道他为什么没遇到。
  2. 这个软件有太多issue没有处理,可能已经没有足够精力了,所以这个问题可能几年内也不会有人去修改代码了。

这个 bug 不是逻辑上必然 100% 触发,而是“只在被风控的部分 IP/请求特征上触发”。

数据中心 IP、云服务器 IP、某些国家/地区段,更容易被判定为“可疑流量”。urlquery.net+1

某些欧洲运营商段经常是“白名单气质”,几乎看不到验证页面。


现在借助Claude或ChatGPT可以自己动手修改并发布。