Skip to content

v0.20.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 10:05
· 28 commits to main since this release

安装

Android 8.0(API 26)及以上,需开启「允许安装未知来源应用」。

附件为 debug 构建,仅供测试分发,未做 release 签名与 R8 混淆。


v0.20.1 要点

修复:模型自带的光效不显示

三个原因叠在一起,导致高原病守门人的灯笼、目标锁定的聚光灯在 APK 里完全看不出来:

一、光源实体没进场景。 glTF 的 KHR_lights_punctual 光不会被 getEntities() 带出来(实测 entities=25 / lights=1 / renderables=24),必须单独把 lightEntities 加进 Scene。之前那盏聚光灯压根没被渲染。

二、自发光强度被丢弃。 模型用 KHR_materials_emissive_strength 把灯笼设到 6×、镜片设到 8×,但 gltfio 对这一扩展支持不稳定,退化成一个普通亮色块。现在构建期把它直接乘进 emissiveFactor(glTF 允许 > 1),不再依赖运行时扩展支持。

三、光强与场景曝光不匹配。 聚光灯是 54 cd,而场景主光是 66000 lux,同一场景里差几个数量级,就算加进场景也等于没开。现在对 glTF 自带的点/聚光灯统一乘 20 倍增益。

另外开启了泛光(bloom),自发光才会真正「溢出」成光晕,而不是一块白斑。泛光参数压到最低档(3 层、180px、LOW)。低端机自动降级:帧时间连续两次超过 28ms 就自动关掉泛光,不会为了光晕把帧率拖到 30 以下。

顺带

  • 主光与环境光略微回收(IBL 46000 → 38000、主光 74000 → 66000),给自发光留出对比空间,避免整体过曝。
  • 包体不变,仍是 39 MB。

v0.20.0 要点

成就徽章从「图」换成「实物」

接入 Filament 实时渲染,17 枚已出模型的成就改为真 3D:可拖动旋转、双指缩放、静止后正面小幅摆动。模型来自 Blender 模型库,金属与珐琅按 PBR 材质渲染,光照用一张程序生成的棚拍环境贴图(128 KB KTX)。

未出模型的 23 枚仍用定稿图做透视角度的「假 3D」,观感是收藏卡片,接口与真 3D 一致,后续补模型即可自动切换。

解锁弹窗与预览弹窗也用上 3D

AchievementUnlockOverlay 现在渲染 3D 徽章(首帧到达前用定稿图占位,避免空白)。开发者测试区的「预览」与真实解锁走同一个弹窗,因此两处一致。

弹窗卡片是深色,金属模型透明底直接贴上去会糊成黑块,所以真 3D 徽章下面加了一块浅色圆盘底座;图片假 3D 自带深色底,不套底座。

解锁时两侧喷彩带

从屏幕左右两侧向内喷射 56 条彩带,受重力下坠并自转,2.8 秒淡出。颜色取当前稀有度色 + 金 + 白。尊重系统「移除动画」设置(关闭动效时不喷)。

展示页改为亮色背景

详情页背景换成重模糊的风景(天空渐变 + 四层山脊 + 雾带,程序生成 27 KB),徽章用透明 TextureView 叠在上面。同时把环境光强度从 30000 提到 46000、主光提到 74000,解决之前偏暗的问题。

手势方向反转

左右拖动与上下俯仰都反向,符合「拖着徽章转」的直觉;惯性方向同步。

三枚徒步成就补上形象

trail_first / trail_camp / trail_high 已有模型,徽章墙缩略图取自模型渲染图。trail_finish 与 two_tracks 仍是占位图,等模型。

包体

debug APK 29 MB → 39 MB。20.4 MB 模型资源是主要增量(最大一枚雪崩之眼 5.1 MB / 9.2 万三角面)。若后续觉得太大,可以把模型改成按需下载。


v0.19.31 要点

五枚徒步成就的文案补齐九种语言

v0.19.27 新增的 5 枚徒步成就当时只有中文原文,非中文界面会回退显示中文。这一版补齐:

  • 5 条标题 + 5 条描述 × 九种翻译语言(英 / 繁中 / 日 / 俄 / 德 / 西 / 法 / 瑞典 / 意)
  • 每种语言的键集合与英文逐条对齐,10,544 → 10,554,缺 0、重复 0、孤儿键 0

译名各自贴本地说法:英文 First Trail Steps / Trekking Graduate,日文「トレイルの第一歩」/「トレッキング卒業」,德文 Erste Schritte am Weg/Trekking-Abschluss,瑞典文 Första stegen på leden/Vandringsexamen;繁中用「踏出第一步」/「徒步畢業」,与既有徽章命名习惯一致。

README 通读修正

英文与中文两份都过了一遍,改掉与代码脱节的地方:当前版本号、安装体积、权限说明(现在也用于提交反馈)、徽章数 35 → 40、键数 10,544 → 10,554、「九种语言各拆三支」的说法,并补上反馈页说明与 v0.19.25–30 的变更记录。


v0.19.30 要点

反馈改成一点即发

上一版把反馈交给系统邮件应用,用户还得在邮件里再点一次发送,中间多一道。现在直接 POST 到 Formspree(https://formspree.io/f/mrppzwqp),点「发送反馈」就完成提交,不经过邮箱。

  • 请求是 JSON,Accept: application/json,成功收 {"ok":true}
  • 字段:type(问题/建议/纠错)、message、email(留了才带)、app(版本号)、diagnostics(勾选才带)
  • 三次状态:发送中 / 已收到(绿色)/ 发送失败(红色,并出现「改用邮件发送」退路)

用 HttpURLConnection + org.json 手写,没引入 OkHttp/Retrofit —— 这个工程一直只依赖 Compose,为一次 POST 加两个库不划算。

联网权限:仍然不需要新增。INTERNET 是题库更新时就已经有的。

退路:网络不通时点「改用邮件发送」,走 ACTION_SENDTO + mailto:;连邮件应用都没有,正文会自动进剪贴板,一个字都不会丢。

诊断信息

跟着请求一起提交,默认关闭、必须手动勾选。内容包括版本、系统、机型、界面语言、题库版本、当前大类、完成课数、徽章数,以及最近一次崩溃堆栈;不含课程内容、做题记录、账号。

需要留意:反馈内容会经过 Formspree(第三方服务)转发到表单绑定的邮箱,免费额度每月 50 条。


v0.19.29 要点

反馈入口与反馈页

「我的」页账号下方新增「反馈与建议」(位置在风险声明之上)。页面里有三样东西:

  • 类型:问题反馈 / 功能建议 / 内容纠错
  • 描述 + 联系邮箱(选填)
  • 附带诊断信息:默认关闭,必须自己打开

发送走系统邮件应用(ACTION_SENDTO + mailto:),收件人预填、标题正文都已写好,用户确认后点发送。没有在 App 里直连 SMTP 或表单接口 —— SMTP 得把账号密码打进 APK,谁都能扒出来;表单接口需要一个后端。等有了固定收件邮箱,改 FeedbackScreen.kt 顶部那一个常量即可。没有邮件应用时,内容自动复制到剪贴板,不会丢。

联网权限:不需要新增。发邮件是邮件应用联网,跟本 App 无关;App 里已有的 INTERNET 权限只用于题库更新。

诊断信息包含:应用版本、Android 版本、机型、界面语言、题库版本、当前大类、完成课数与徽章数,以及最近一次崩溃的堆栈。不含课程内容、做题记录、账号与任何用户输入 —— 这句口径也写在界面上,用户勾选前看得见。

崩溃记录

新增 Diagnostics:装一个兜底的未捕获异常处理器,把堆栈写进应用私有目录(最多留 5 条),然后原样交还给系统 —— 只记录、不拦截,不会因为加了日志把崩溃吞掉。

顶部胶囊加图标

主界面的「高山攀登 / 徒步」胶囊前面加了 14dp 图标,与弹层里那两枚同源。


v0.19.28 要点

开屏 logo 缩小 40%

开屏中央的雪山标记按中心等比缩到原来的 60%,图形高度从 188/288 降到约 113/288。留白更足,小屏设备上不再显得笨重。桌面图标没动。

课程大类切换图标重画

底部弹层里两个大类原来用的是文本字符:攀登是「▲」、徒步是「≡」——三条横杠完全看不出和徒步的关系。现在换成两枚实心卡通图标:

  • 高山攀登:三角山体 + 一条锯齿雪线(挖空),比纯三角多一层「雪山」的信息
  • 徒步:登山靴——鞋帮、带齿鞋底、两道鞋带。44dp 下轮廓清楚,也不会和雪山混淆

图标是 24 网格的实心剪影,evenodd 挖孔,仍然用 Icon(tint = ...) 整体着色,所以选中态(绿底白图标)与未选中态(灰底灰图标)共用同一份路径,不额外增加资源。

另外在画布上放了一版「顶部胶囊加 14dp 图标」的预览,如果那个方向也想要,说一声我就加。


v0.19.27 要点

成就系统与 89 课新题库对齐

成就定义写于「66 课、只有攀登一条线」的时代,题库铺到 89 课(攀登 68 / 徒步 21)之后有两条判定脱节了:

  • full_route 理论大满贯:目标写死 66 课,实际攀登已有 68 课;更要紧的是判定写的是「当前轨道所有单元都完成」,于是徒步走完 21 课就能拿到「理论大满贯」。
  • five_zones 五区足迹:按「任意 5 个单元各完成 ≥1 课」计数,攀登现在有 6 个单元、徒步只有 4 个 —— 徒步线上永远拿不到。

两条都改成显式点名单元:full_route → 攀登大满贯(68 课),five_zones → 六区足迹(攀登 6 个单元各完成 ≥1 课)。

徒步线补上 5 枚成就

徒步 21 课此前一枚成就都没有,走完整条线没有任何反馈。按攀登那套节奏补齐:

成就 条件 稀有度
走出第一步 完成 t01(线路难度与自我定位) 普通
扎营一夜 徒步单元 t2(多日与露营)全部 8 课 稀有
高原行走 徒步单元 t3(高原徒步)全部 5 课 稀有
徒步毕业 徒步全部 21 课 史诗
双线并进 攀登 ≥10 课且徒步 ≥10 课 史诗

成就总数 35 → 40。五枚新徽章暂时共用一张占位图(badge_placeholder_agi),等专属徽章画好逐个替换即可,业务定义不用动。

顺手修的判定口径

成就的单元/轨道进度过去按当前选中轨道统计。这在单线时代没问题,双线之后就错了:切到徒步轨道时攀登进度会变成 0,full_route 这类成就会反而更容易命中。现在统一按全部轨道统计(新增 AchievementStats.trackProgress),与「已完成课程 id」这套全局进度一致。

开发者测试区的条件校验也改成拿全轨道的课程/单元 id 比对,否则徒步的 t01、t1–t4 在攀登轨道上会被误报成「引用了不存在的课程」。

同源问题还修了一处显示 bug:个人主页与「我的」页的路线进度,分子数是两条轨道的完成总数、分母却是当前轨道的课数,攀登学完切到徒步会显示「68 / 21 课」。现在分子只数当前轨道。

已知待办:五枚新成就的文案目前只有中文原文,其余九种语言会回退显示中文。下一批 i18n 会把 10 个新键一次性加进十语言对齐。


v0.19.26 要点

简体中文系统上装完却是繁体

这是 Android 资源匹配的经典坑:values/(默认桶)装的是简体,但它没有语言限定符;繁体装在 values-zh-rTW 里,有限定符。系统语言是 zh-CN 时,框架先找 zh-rCN(不存在),再找「同语言变体」,于是命中了繁体桶 —— 整个界面变繁体。

手动去语言页选一次「简体中文」会恢复正常,因为手动选择时框架给请求带上了脚本子标签,请求变精确才绕开繁体桶。这正好解释了「自动检测是简体、界面却是繁体、手动切一下才对」。

修法是给简体补一个精确桶:构建时把 res/values/strings.xml 复制成 values-zh-rCN/strings.xml(Gradle 任务 genZhCnRes,在 preBuild 之前生成)。精确匹配永远赢过「同语言变体」,简体系统从此稳定走简体桶。单一事实来源仍然是 res/values/strings.xml,生成目录不要手改。

顺带修了一处同类判定:简体繁体过去只看地区,于是「港澳台地区用简体」(zh-Hans-HK / zh-Hans-MO / zh-Hans-TW)会被误判成繁体。现在脚本优先于地区 —— 显式 Hans 一律简体,显式 Hant 一律繁体,没有脚本时才看地区。界面语言与内容层(课程名、题库)两处的归一规则已同步。


v0.19.25 要点

一个纯修问题的版本,两处都是老毛病。

开屏中央不再有黑色底

开屏(Android 12 及以上的系统启动画面)中央那块一直是个深色圆盘,因为系统默认拿桌面图标来画,而桌面图标是自适应图标——深色底 #0B1522 上叠了一座雪山,在浅色启动背景上就露出了黑底。

现在给启动画面单独挂了一幅透明底的雪山矢量(ic_splash_mark),只画山体、雪帽、旗杆和旗面,不带任何底板:

  • 浅色模式启动背景 #F1F6FA、深色模式 #070D16,都与进入后的页面底色一致,图标切换过去不会跳色
  • 图标内容落在中央 192dp 安全区内,各屏幕密度下都不会被裁切
  • 桌面上的图标本身没动,仍是原来的黑底雪山

Android 11 及以下没有系统启动画面图标,不受影响。

修好「开发者模式 → 成就测试」点不进去

设置页里那个「成就测试」按钮点了没反应,界面纹丝不动。原因是分支判断顺序:成就测试页是从设置页里打开的,showSettings 一直是 true,而判断链里 showSettings 排在 showAchievements 前面,于是永远先命中设置页。

把 showAchievements 提到 showSettings 之前即可。现在点进去是成就测试页,返回回到设置页,与直觉一致。成就解锁弹窗本身一直是正常的,这次没碰。


v0.19.24 要点

从 v0.19.11 算起,这一系列版本只做了一件事:把内容层铺到十种语言。v0.19.24 是收官——最后一种语言(Italiano)四层全量,十种界面语言全部有内容支撑,运行时不再回退。

语言:十种界面语言,九种翻译语言四层全量

内容层分四层(入口 / 课程要点 / 技能书正文 / 题库)。这一版把 Italiano 补到全量:

  • Italiano:9,422 条题库 + 443 条要点 + 全部课名、单元名、山峰与技能书 h32–h35。题干与解析用 tu,要点用无人称句

加上此前完成的 English / 繁體中文 / 日本語 / Русский / Deutsch / Español / Français / Svenska,九种翻译语言与英文键集合逐条一致(10,544 / 10,544),缺项 0、重复 0、孤儿键 0。简体中文作为原文语言,内容层本身就是它——十种界面语言至此全部落地。

顺带清了最后一批历史遗留的孤儿键(q.l2#5.c、m15#17.c、m16#18.c、m16#22.c、m16#24.c)——中文侧早前删过带上下文的情景题,英文当时清了,其余语言在逐语补齐的过程中陆续跟上。十种语言现在都没有孤儿键。

如果某一项在所选语言里意外缺失,回退顺序是「当前语言 → 英文 → 中文原文」。这条路径现在只是兜底,正常不会再触发。

三种数字写法,刻意分开

同一套内容,各语言按本地习惯写数字。三种口径在译文和术语表里都标住了,不会混:

  • 英文、中文、日文:6.5 °C、5,000 m
  • 德文、西文、意文:6,5 °C、1.000 m(小数逗号、千位点)
  • 法文、瑞典文:6,5 °C、5 000 m(小数逗号、千位空格)

人称也各自不同:德文无人称 man-Form、西文 tú、法文 vous、瑞典文与意文 du / tu,而课程要点在所有语言里都是无人称句。

术语一致性

各语言沿用自己登山圈既有的专业写法,不做音译:

  • 德文:Selbstbremsgriff、Flachfusstechnik、Klemmknoten、Prusiken、Fussstrippe、Umlenkpunkt、Schneefang、Wechte、Apsis、versunkener Aufwand、Gruppendenken
  • 西文:autorretención、técnica francesa、nudo autobloqueante、refilado、reunión、cordada、ARVA、placa de viento、cinta transportadora de nieve
  • 法文:nœud autobloquant、défaillance en série、tapis roulant à neige、ensevelissement critique、poche d'air、phase d'asphyxie / de latence、ECLS
  • 瑞典文:handräcke、kort fast rep、expeditionsutläggning、mellanförankring (re-belay)、seriefel(对 redundans)、snötransportband、lufthåla
  • 意文:corda fissa、corrimano、attrezzamento della via、rinvio intermedio (re-belay)、guasto in serie、bloccante per mano / pettorale、nastro trasportatore di neve、seppellimento critico、sacca d'aria

医学与救援的硬数字一律照技能书原值,不取整:雪崩存活 48 / 47,6 / 96 %,死因窒息 65–100 %、创伤 5–29 %、低温 0–4 %;决策线 2023 版 60 分钟并保留 2013 版 35 分钟作为历史口径;搜索带 40 m、定点网格 25 cm、雪传送带 26° 与 13,2 / 25,3 cm/min;渡河 1,0 m²/s 上限、队伍内控 0,8、水位 15 cm、胸带必解;固定绳 EN 892 / 1891 A / 567 / 12277。

工程

  • 题库按语言拆文件:单个 Kotlin 文件约 2,500 条会让编译守护进程崩溃(Daemon compilation failed: null),所以英文、繁中、日文、俄文、德文、西文、法文、瑞典文、意文各拆三支,合并行在 ContentPack.kt
  • tools/i18n/ 的三个命令(status.py / prep.py / apply.py)在十种语言上通用,--lang 决定读写哪一套包;繁中另有 tw.py、tw_entry.py
  • 每批译文进库前跑五项自查:键集合与「真实缺失集」的差集(缺 + 多)、片段内重复键、CJK 残留、英文单词残留、空值键。其中「多」这一栏在最后三种语言里抓出了六次误插的空值占位行

v0.19.23 要点

从上个发布版(v0.19.21)到现在,还是同一件事:把剩下的语言也铺满。

语言:内容层现在是八种语言全量

内容层分四层(入口 / 课程要点 / 技能书正文 / 题库)。这一版把 Français 与 Svenska 补到全量,并清理了两门语言里的历史遗留键:

  • Français:9,422 条题库 + 443 条要点 + 全部课名与技能书。题干与解析用 vous,要点用无人称句
  • Svenska:同上。题干与解析用 du,要点用陈述句

加上此前完成的 English / 繁體中文 / 日本語 / Русский / Deutsch / Español,八种语言现在与英文逐条一致(10,544 / 10,544),缺项 0、重复 0、孤儿键 0。

顺带清了法文与瑞典文里各 5 条历史遗留的孤儿键(q.l2#5.c、m15#17.c、m16#18.c、m16#22.c、m16#24.c)——中文侧早前删过带上下文的情景题,英文当时清了,这几门语言陆续补上。只剩 Italiano 还有这 5 条,收尾时一并处理。

最后一种语言(Italiano)仍覆盖扩充前的旧题库,新增题目回退英文——这是设计行为,不是缺失。

数字写法:三种口径,不要混

同一套内容,各语言按本地习惯写数字,这一点在译文和术语表里都标住了:

  • 法文与瑞典文:小数逗号,千位空格(6,5 °C、5 000 m、8 848,86 m)
  • 德文与西文:小数逗号,千位点(6,5 °C、1.000 m)
  • 英文与中日文:6.5 °C、5,000 m

术语一致性

法文与瑞典文都沿用各自语言里既有的专业写法,不做音译:

  • 法文:autorretención 体系对应 autorétraction、nœud autobloquant、défaillance en série、tapis roulant à neige、ensevelissement critique、poche d'air、phase d'asphyxie / de latence、ECLS
  • 瑞典文:handräcke / kort fast rep / expeditionsutläggning、mellanförankring (re-belay)、seriefel(对 redundans)、snötransportband、lufthåla、kvävningsfas / latensfas

医学与救援的硬数字一律照技能书原值,不做取整:雪崩存活 48 / 47,6 / 96 %,死因窒息 65–100 %、创伤 5–29 %、低温 0–4 %;决策线 2023 版 60 分钟并保留 2013 版 35 分钟作为历史口径;搜索带 40 m、定点网格 25 cm、雪传送带 26° 与 13,2 / 25,3 cm/min;渡河 1,0 m²/s 上限;固定绳 EN 892 / 1891 A / 567 / 12277。

工程

  • 法文题库拆三支(PackFrQuiz / 2 / 3),瑞典文同样三支;单文件过大会让 Kotlin 编译守护进程崩溃
  • tools/i18n/ 的三个命令扩到十种语言通用,--lang 参数决定读写哪一套包

v0.19.21 要点

从上个发布版(v0.19.11)到现在,只做了一件事:把剩下两种语言也铺满。

语言:内容层现在是五种语言全量

内容层分四层(入口 / 课程要点 / 技能书正文 / 题库)。这一版把 Deutsch 与 Español 补到全量,与英文键集合逐条对齐:

  • Deutsch:9,422 条题库 + 443 条要点 + 全部课名与技能书,体例为无人称 man-Form,数字走德式写法(6,5 °C、1.000 m、35–50 Liter)
  • Español:同上,题干与解析用 tú、要点用无人称句,数字走西式写法(6,5 °C、1.000 m)

加上此前完成的 English / 繁體中文 / 日本語 与 Русский,六种语言现在与英文逐条一致(10,544 / 10,544),缺项 0、重复 0、孤儿键 0。

顺带清了德文与西语里各 5 条历史遗留的孤儿键(q.l2#5.c、m15#17.c、m16#18.c、m16#22.c、m16#24.c)——中文侧早前删过带上下文的情景题,英文当时清了,这两门语言没跟上。

其余三种语言(Français、Svenska、Italiano)仍覆盖扩充前的旧题库,新增题目回退英文——这是设计行为,不是缺失,后续按同一 key 体系逐语铺开。

术语一致性

德文与西语都沿用各自语言里既有的专业写法,不做音译:

  • 德文:Selbstbremsgriff、Flachfusstechnik、Klemmknoten、Prusiken、Fussstrippe、Umlenkpunkt、Schneefang、Wechte、Apsis、versunkener Aufwand、Gruppendenken、Bestätigungsfehler、Ankereffekt
  • 西语:autorretención、técnica francesa、nudo autobloqueante、refilado、reunión、cordada、ARVA、placa de viento、calicata、cinta transportadora de nieve、cat hole

医学与救援的硬数字一律照技能书原值,不做取整:雪崩存活 48 / 47,6 / 96 %,决策线 2023 版 60 分钟并保留 2013 版 35 分钟作为历史口径,搜索带 40 m、定点网格 25 cm、雪传送带 26° 与 13,2 / 25,3 cm/min,渡河 1,0 m²/s 上限,固定绳 EN 892 / 1891 A / 567 / 12277。

工程

  • 西语题库拆成三支(PackEsQuiz / 2 / 3),德文同样三支;单文件过大会让 Kotlin 编译守护进程崩溃
  • tools/i18n/ 的三个命令扩到十种语言通用,--lang 参数决定读写哪一套包

v0.19.11 要点

从上个发布版(v0.18.35)到现在,主要是两件事:内容翻了一倍多,以及三种语言做到全量。

内容扩充:47 课 → 89 课

  • 攀登轨道从 47 课扩到 68 课,补上 6000 / 7000 / 8000 米三个高海拔单元,含慕士塔格、阿玛达布朗、玉珠、启孜、罗布切东、岛峰,以及世界 14 座 8000 米峰的课程
  • 新增徒步轨道 21 课:一日徒步、多日与露营、高原徒步、长线与应急四个单元
  • 题目 711 → 1,533 道(9,422 条 key:题干、选项、解析),技能书 31 → 35 篇,新增雪崩埋压、雪崩复苏、雪崩三件套、固定绳系统、渡河五篇
  • 新增约 100 座山峰资料、成就系统
  • 题库版本 v15 → v19

语言:英文、繁體中文、日文四层全量

内容层分四层(入口 / 课程要点 / 技能书正文 / 题库),这三种语言现在每层都完整,运行时不再回退中文:

  • English:9,422 条题库 + 443 条要点 + 全部课名与技能书
  • 繁體中文:走 OpenCC s2twp 加一份术语表(確保站、高山症、公尺等),并用既有 4,727 条译文做回归校验,复现差异为 0
  • 日本語:题库用 ですます調、技能书与要点用 だ・である調,两层语体分开;术语沿用库内既有写法(アイゼン、ピッケル、ビレイステーション、渡渉、フットエントラップ、ガモウバッグ)

三种语言的键集合与英文逐条一致(10,544 / 10,544),缺项 0、重复 0、孤儿键 0。

其余 6 种语言(Русский、Français、Svenska、Deutsch、Español、Italiano)仍覆盖扩充前的旧题库,新增题目回退英文——这是设计行为,不是缺失,后续按同一 key 体系逐语铺开。

内容与工程上的几条原则

  • 医学判定、剂量、高度一律照技能书原值,年份与口径一起写,不为通顺改数字。例如雪崩复苏的 60 分钟规则均标注 2023 版 ICAR MedCom,并说明它取代了 2013 年的 35 分钟
  • 两派并存的做法不择一,写清各自前提。例如渡河时腰带解还是扣、探杆的两种角度、起挖点的旧口诀与研究更新
  • 题库按文件拆:单个 Kotlin 文件到约 2,500 条会让编译器守护进程崩溃,英文与繁中题库各拆三支,日文拆三支

工具

tools/i18n/ 下的三个命令在九种语言上通用:

  • status.py --lang <code>:看缺口与下一批建议
  • prep.py <lesson> --lang <code>:导出中文原文
  • apply.py <fragment> --lang <code> --layer <layer>:校验(未知键、空值、重复、本课漏项)后合并

繁中另有 tw.py(含 --check 回归)与 tw_entry.py。

产品规模

  • 89 课 / 1,533 道正题 / 9,422 条题库 key / 四个单元组(5000M 入门 → 8000M 终极考核)
  • 35 篇技能书、成就系统、题库 v19
  • 界面 10 种语言;内容层英、繁中、日、俄、德、西六种语言四层 100%
  • 包体约 20 MB

语言

简体中文(原文)、繁體中文、English、日本語、Deutsch、Français、Español、Italiano、Русский、Svenska

某条目在所选语言缺失时回退英文,不回退中文。


注意

  • 本 App 只覆盖理论与认知准备。冰雪、绳索、攀冰、救援等实践技能,必须由持证教练现场指导与评估
  • 内容不构成医疗建议。技能书里涉及药物与急救的部分,尤其《探险医疗与急救包》,都是参考值,具体情况必须由医生当面评估后现场确认

完整变更记录见 README.zh-CN.md 的「最近改了什么」一节(英文版即默认的 README.md)。

许可:PolyForm Noncommercial License 1.0.0,仅限非商业用途,商业使用需另行书面授权(详见 LICENSE 与 NOTICE)。