Repository navigation
v1.2.1 — 修复「在线同步拉不到入门指南文件」
修复 / Fixed
v1.2.0 的「② 同步最新汉化」拉不到入门指南的 32 个文件。 请升级到本版。
原因
下载 URL 是直接拼 base + 相对路径,没有做百分号编码。而 zh/welcome/** 的路径里带空格:
.../welcome/Getting started/000 UI/000 Introduction.pxc → 000(连接直接失败)
.../welcome/Getting%20started/000%20UI/000%20Introduction.pxc → 200,7982 字节 ✅
HTTP 客户端不会替你编码,所以三个源都取不到这些文件 —— 实测 41 个文件只有 8 个能同步下来。
改动
-
新增
_url():URL 侧统一urllib.parse.quote(rel, safe="/")。
只编码 URL,本地文件路径(os.path.join/_local_copy)不编码,
否则会把文件名里真实的%20当字符处理。 -
_download()支持逐源回退:单个文件在某个源上取不到时自动换下一个源
(GitHub Pages → jsDelivr CDN → GitHub Raw),不再因为一个文件丢弃整批。 -
换源时在界面上打印一行提示 —— 首次同步要拉 11 MB 中文字体,
慢的时候界面上几分钟没动静很像"卡死",现在能看出它在换源。 -
大文件优先走 CDN:超过 2 MB 的文件把 GitHub Pages 排到最后。
实测 Pages 对静态大文件限速明显(同一台机器 25 KB/s,jsDelivr 71 KB/s)。 -
防降级闸门:
fetch_manifest()增加floor参数(传本地已装的最高版本)。
起因是本轮实测发现 jsDelivr 对@main的缓存很久 —— v1.2.1 推送后它仍在返回
v1.0.3 / 8 个文件的旧清单,而 Pages 与 Raw 都已经是v1.2.0 / 41 个文件:GitHub Pages v1.2.0 files=41 jsDelivr CDN v1.0.3 files=8 ← 缓存里的旧清单 GitHub Raw v1.2.0 files=41正常情况 Pages 最先命中,不会出事;但 Pages 一旦临时不可达(本轮实测出现过直接
返回 000),按原来的"取到第一个就返回"就会把用户已经装好的包降级成 8 个文件。
现在低于本地版本的清单会被跳过并记一行日志;所有源都低于本地时返回"离线",
走既有的随附包回退分支,不会把用户的包换旧。
顺带修掉的编码不一致
PyInstaller 打包出的窗口版 EXE 在输出被重定向到文件或管道时,
sys.stdout.encoding 会退化成系统 ANSI 代码页(简体中文 Windows 上是 GBK),
而同一个脚本用 python patch_tool.py 跑却是 UTF-8:
EXE --version → 汉化工具 = BA BA BB AF B9 A4 BE DF (GBK)
源码 --version → 汉化工具 = E6 B1 89 E5 8C 96 E5 B7 A5 (UTF-8)
抓日志或做校验的人很容易把前者当成乱码。新增 _setup_stdio():
只有输出不是终端时才把 stdout / stderr 统一成 UTF-8;
真控制台不做处理(Windows 下 Python 3.6+ 直接调 WriteConsoleW 写宽字符,
编码属性本来就只影响重定向后的字节,所以控制台显示一直是对的)。
验证
- 清单里 41/41 个文件:线上字节与清单 sha256、仓库文件三者完全一致
- 真跑一次整包同步到临时目录:41/41 与仓库
zh/逐字节一致
(含 33 个带空格的welcome/**路径),实测耗时 317.8 s - 按区域同步
only=[words, junctions]→ 恰好落盘config.json/junctions.json/words.json/manifest.json,符合预期 - 防降级闸门单独测过:正常路径仍一次命中 Pages(不多发请求,不增加延迟);
把源限制成"只剩 jsDelivr"时旧清单被拒绝、返回离线 —— 对照组不传floor时确实会拿到v1.0.3 version_key()把"1.10.0"正确判为大于"1.9.0"(按字符串比会反过来)- 新 EXE 的
--version重定向到文件后按 UTF-8 解码正确
汉化包内容没有改动,
zh/manifest.json版本仍是 1.2.0;本版只修客户端工具。
v1.2.0 的内容(首次安装请看这里)
三条主线:入门指南示例汉化、按区域汉化、Linux 版。
入门指南示例汉化
欢迎页「入门指南」里的教程页与示例工程正文已换成中文:17 个教程页 + 15 个示例工程 + 1 个模板 = 33 个 .pxc、351 处文本。
文字在 .pxc 的文本节点里(不在 PNG 里),所以实现了 .pxc 容器编解码,只替换说明文字、不动工程结构。
- 按同名覆盖写入
<数据目录>/Welcome files/,文件名保持英文 → 不会出现中英两套重复卡片,也不破坏 Steam 自动更新 - 原文件备份到
Welcome files.bak_cn/,③ 恢复英文一键还原 - 备份取自官方
pack/welcome_files.zip(不是"当前文件")—— 否则第二次安装会把中文存进备份 - 构建时对
<node …>/<bt …>/<spr …>这类查找键标签做多重集自检,译文改动了标签就拒绝生成
已知限制:欢迎页的卡片标题取自
.pxc文件名,程序不查语言表 → 标题保持英文,但点进去正文是中文。
按选中区域汉化(默认全部)
六个复选框:界面词条 / 面板与对话框 / 节点 / 连接点 / 中文字体 / 入门指南示例。
取消勾选 = 不安装该文件(游戏回退内置英文),而不是写一份英文副本 —— 后者会让已装包永远与线上清单哈希不符,每次同步都重下整包。
命令行等价写法:--modules words,ui / --list-modules。
Linux 版
纯 Python 标准库,解压即用:
tar -xzf PixelComposer-CN-Linux.tar.gz
cd PixelComposer-CN-Linux
./install.sh # 有 tkinter 开图形界面,没有就自动进命令行(功能一致)
./install.sh install # 或直接一键汉化路径探测覆盖原生 Linux($XDG_DATA_HOME/PixelComposer)与 Proton 前缀;Steam 库来自 STEAM_ROOT / ~/.steam / ~/.local/share/Steam / flatpak / snap / /media|/run/media|/mnt,并解析 libraryfolders.vdf。
旧社区汉化包残留:只列出,不删除
⑧ 旧汉化包残留清点(--leftovers)给出完整清单(路径 / 大小 / 文件数),实测一台机器上是 10 项 / 32.67 MB。不会删除任何东西。
下载
PixelComposer-CN-Patcher.exe— Windows 免安装,双击即用PixelComposer-CN-Linux.tar.gz— 解压后./install.sh