fanlusky
bc1a1c7a4c
fix(installer): 把 Google 解码器的系统词典打进安装包
dict_pinyin.dat 从来没有进过安装包,所以装出来的输入法里
CandidateSource::Fallback 那条整句候选是空转的:im_open_decoder
拿不到系统词典会返回 false,PinyinDecoder::sentence 直接返回空串,
不抛异常也不记日志,表现就是「Google 那份联想没有了」。
这个缺口一直没被测试挡住,是因为测和装走的是两条路:
scripts/ci/test-server.ps1 和 engine/tests 用的是
server/assets/tables/ 这个开发资源目录,那里有一份 dict_pinyin.dat;
而 Prepare-PackageFiles.ps1 只从该目录取 pinyin.txt。两份文件内容
完全相同(sha256 6bf0bbde…62b2),所以本地跑什么都是对的。
打包取 engine/googlepinyinime-rev/data/ 那一份,不取 server 下的
开发副本 —— 前者是 engine/contracts/assets/assets.json 声明的来源,
万一哪天两份不同步,装出来的应当和清单一致。
与之配对的 user_dict.dat 不进包:清单里它是 role=user、profiles 为空
的可写文件,由 UserDict::reset 在用户数据目录下自建。装进资源目录
等于每次升级都把用户自造词顶掉,因此补了一条反向断言。
打包契约测试加了缺 dict_pinyin.dat 必须失败的负例,理由同 sc.lm:
两者都是静默降级,打包是唯一能挡住的地方。