Skip to content

v6.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 05:21
· 49 commits to main since this release

OhGithubLost v6.4.0

把界面语言从 15 种收敛到 6 种 —— 只留下真的能读的那 6 种。
Interface languages narrowed from 15 to 6: only those that were genuinely translated.

垂直切片 / Vertical slices

切片一 · 语言不再自欺 Language honesty

上一版埋着一个隐患:15 种语言里有 12 种的法律类正文实际是英文占位 ——
键在、目录在、值与英文一字不差。用户切到自己的语言,看到的仍是看不懂的
法律说明。而这方面恰恰最不容含糊:本项目对数据收集、令牌存储、
加速责任的承诺都写在这些文本里。

与其让 9 种语言挂个名,不如把留下的每一种都做到能读。保留的是:

  • zh 简体中文(原始表述)
  • zh_TW 繁體中文
  • en English
  • de Deutsch
  • fr Français
  • ru Русский

移除 ja ko es pt ar hi th vi id。
加回某个语种的前提是全部键都是真译文,不是把英文复制一遍。
OgLI18n.locales 的注释里写明了这条规矩。

切片二 · 三处语言清单必须一致 Consistency guard

这版真正的根因在这里。语言清单散在三处,任两处不同步都会出事,
而且两种故障方向相反、都很难在排查时想到根源:

  • OgLI18n.locales(Dart 运行时清单)
  • assets/i18n/ 下的目录
  • pubspec.yaml 的 assets 声明

pubspec 多声明 → 构建期「资源不存在」直接失败;
pubspec 少声明 → 构建通过,运行时该语言全是裸键名。

后者尤其险:打出来的包能装能用,只是某个语言下满屏 settings.theme。
v6.4.0 删了 9 个语言目录,若不同步 pubspec,踩的就是第一种。

tool/i18n_scan.py --check 新增该项检查。负向验证:故意在 pubspec 加一个
不存在的语言目录 → 报「pubspec.yaml 声明但目录不存在(构建必失败)」,
退出码 1。

新增 / Added

  • 语言清单三处一致成为 CI 门禁:OgLI18n.locales × assets/i18n/ 目录 ×
    pubspec.yaml 的 assets 声明,逐项比对,不一致即失败(退出码 1,已负向验证)。

变更 / Changed

  • 界面语言由 15 种收敛为 6 种:zh / zh_TW / en / de / fr / ru。
    同步更新 OgLI18n.locales、pubspec.yaml、README.md、docs/USAGE.md、
    docs/I18N.md。
  • 仓库页选项卡按语种分别处理(此前各语言混杂、口径不一):
    • zh / zh_TW:Code / Issues / Pull requests / Actions 保留英文,
      其余(分支 / 提交 / 设置)照常用中文。
    • de / fr / ru:译为各自语言的对应词。此前这些语言里混着英文残留 ——
      例如 fr 的 pulls 原是 Pull Requests、releases 原是 Releases,
      现已分别改为 Demandes de tirage / Versions。
    • 测试相应更新:语种数 15 → 6,并保留「中文语境下 GitHub 术语必须保持英文」
      这条断言。
  • 繁体中文修正少量沿用大陆用法的词:Gist 片段 → Gist 程式碼片段、
    我的加速 → 我的加速節點。

修复 / Fixed

  • OgLProjectInfo.licenseUrl 仍指向 AGPL-3.0:v6.3.0 换了许可,
    标识(licenseId)与名称(licenseName)都改了,地址漏改,还指向
    www.gnu.org/licenses/agpl-3.0.html。该常量目前无引用(死常量),但一旦有人
    用它生成「查看许可」链接,就会把用户送到一份与实际许可无关的全文。
    已改为 https://www.apache.org/licenses/LICENSE-2.0。
  • 私有仓库大图预览「用了 raw 却不带令牌」:超过 1 MB 改用 raw 链接时,
    代码写成 headers: proxied || !repoPrivate ? null : const <String, String>{} ——
    注释说「未走代理且私有仓库才带认证头」,实际给的是空 map,一个头都没带。
    私有仓库必然 404,而界面显示成「文件过大,无法在内置预览中加载」,
    把认证失败误报成文件过大。现在真的去取一步令牌。
  • 私有仓库被「加速已开启 → 不弹窗」规则误伤:raw 族的加速门槛本就是
    「内置通道 + 公开仓库」,私有仓库的 raw 永远不加速。旧代码只要检测到加速
    开着就不弹窗、直接走 raw,私有仓库用户于是什么都看不到就掉进上面那个必然失败
    的分支。现已显式排除私有仓库。
  • 私有仓库的音频「播放」按钮点了必然失败:该按钮把 raw 地址交给系统播放器,
    而系统播放器没有本应用的令牌。私有仓库现在只给「下载」。
  • 法律全文弹窗写死 height: 460:小屏 / 大字体 / 横屏下会溢出。
    改为按视口比例给上限。
  • 新增键 common.previewLoadFailed(6 语言),把「加载失败」与「文件过大」
    区分开 —— 超过 1 MB 已有专门面板处理,走到 errorBuilder 说明是认证 / 限流 /
    网络问题,说成「文件过大」会让人往错的方向排查。

已知限制 / Known limitations

  • 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
    预览页对公开仓库给「播放」(交系统播放器),私有仓库给「下载」。
  • Linux 裸放安装包仍缺失:rpm(arm64)因 Ubuntu 的 rpm 缺少 aarch64 平台
    定义、无法在 x86_64 宿主上交叉构建;两个 AppImage 因 appimagetool 未接受到
    ARCH 环境变量而退出码 1。三种包在 zip / 7z 里都齐全,功能不缺,
    只是未裸放直传。
  • 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件):raw 端点
    没有签名机制,交给代理等于送令牌。这是硬约束,不是取舍。
  • macOS / iOS 自 v5.6.0 起弃用。
  • Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

Linux 裸放安装包

与 v6.2.0 / v6.3.0 相同,仍为 3 / 6:

amd64 / x86_64 arm64
.deb ✅ ✅
.rpm ✅ ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法交叉构建
.AppImage ❌ ❌ appimagetool 声称未收到 ARCH,退出码 1

三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。