翻译 hyprland-wiki 的尝试与问题

背景

Hyprland 是当前 Linux 下最美观且强大的 WM/Compositor 之一。

它的官方文档 hyprland-wiki 的内容非常丰富,是 Linuxer 使用 Hyprland 自定义桌面环境的重要资料——但是,没有中文,频繁查看还是比较不便的。

好在,它的仓库是开放的,许可为BSD-3-Clause,这就为翻译 Hyprland-wiki 创造了条件。

现状分析

首先看内容。

  • 此仓库中的 md 文件分散在各目录下,明明没有排序,但网站内却是有排序的。

  • 每个 md 文件的开头都没有 frontmatter,比如这篇

  • md 文件内似乎有自定义的短代码(比如 {{< toc >}}),那么后端就有可能是 Hugo。

再看 GitHub Actions 的 workflow 文件。 其中引用了 “hyprwm/hyprland-wiki-backend” 这个私有仓库。

综上可以合理猜测,Hyprland Wiki 在源文件更新后,通过 GitHub Actions 推送到某私有仓库,在此仓库中自动添加 frontmatter,并使用 Hugo 生成静态站点。

(更新:实际上它确实是 Hugo,见此 issue 中 fufexan 所说的“So far I see no reason to switch from Hugo.”。)

目标与难点

创建一个 GitHub 仓库,名称可以为“hyprland-wiki-l10n”之类的。 要求达成以下目的:

  • 支持多语言,能够在本地预览网站,并在 GitHub Pages 上部署网站。
    • 这个用 Hugo 或 Starlight 都可以。
  • 使用固有 frontmatter 而不必自动化添加(否则不便于本地预览),但是部分短代码最好要实现(比如 {{< hint type=warning >}} {{< /hint >}})。
    • 但这也不是必须的,因为某些 Hugo 主题内置效果类似的短代码,Starlight 同理。
  • 正确处理站内链接,比如 pages/Configuring/Dispatchers.md 中有个链接是 ../Binds/#submaps,对应的文件是 pages/Configuring/Binds.md
    • 一般来说,这是默认行为。稍微注意一下,别出错就行。
  • 在生成站点的每个网页开头,自动反映出原文与翻译版本的时间差异,比如像 ArchWiki 的简体中文页面开头:

翻译状态:

  • 本文(或部分内容)是 pacman翻译,最近一次同步的日期是 2023-11-13,如果英文版本有所更改,则您可以帮助同步翻译更改的内容。
  • 您可以在ArchWiki 的对应页面找到本文翻译的原始编辑记录和贡献者列表。
    • 不过这其实也不是大问题,因为可以在每次翻译时手动更新这个日期,并不需要自动化显示英语原文的日期。

针对上述问题,希望大家能给点提示或意见,谢谢。

3 个赞

我发现最大的问题可能还是翻译的自动化问题。

首先,如果有类似于 weblate 那种辅助平台,避开对于常人来说较为复杂的 git 工作流,就能让更多人参与进来,减轻工作量。(但是我记得 weblate 是那种字符串的,可能不适合这种长篇文档)

其次,如果能仅翻译改变的部分(比如在译本的开头标上原文对应的 git commit hash 值,用脚本自动匹配这个值,然后左边打开译本,右边打开针对此 commit 下此文件改变的 git diff),也能降低追踪压力。(但是终端里的 git diff 太原始了,红红绿绿地看着眼花。或许要调整下配色)


需要注意 hyprland-wiki 的显著特点:更新频率快,文本量大,文件数多。

为了走在地上不脏脚,与其铺路不如穿鞋 :joy:

考虑到文档更新频繁,也许写自己的教程然后引用文档会更好一些,当然个人看法罢了。

翻译流程弄好了确实可以让更多的人参与进来,不过这方面我也没什么经验。不过具体的翻译工作可以考虑用用 ChatGPT,我试过,效果非常不错。

2 个赞

谢谢建议!

教程加引用文档,对于入门来说很不错,不过我既然要翻译 wiki,其实就是想进阶一下,来个全面一点的参考。

人工智能辅助加人工校对,效果确实很不错,Linux 中国(顺便怀念一下)之前也是这么做的。 不过这是具体翻译时要考虑的问题,我不打算将其算到基础方案里面。

补充一下, 我目前翻译字符串类型的经验比较多:

  • archinstall 和 paru,两个都是 Arch Linux 相关
  • 还有 uhuru photos

长文档的翻译经验,

  • 有一个 evil-tutor-sc(Emacs 插件;但这个不算完全翻译,还加上改进)
  • 再加 dots-hyprland-wiki(这个站点也是我建的)

建静态站点的经验,

  • 用 Hugo 的有我自己的博客
  • 用 Starlight 的有上面那个站点,再加没建完的 arCNiso 文档

我觉得 hyprland 与我之前的这些经验都不同的一点是,它的量太大了,必须加强自动化。

上面我说的那个在文档开头自动加 commit hash 那个我想了下,可行性应该还挺好。 用 Hugo 短代码大概可以实现半自动化(把 hash 值当参数),自动生成一个命令放到代码块里,点一下复制按钮,粘贴运行之后,就能在终端里显示英语原文的变动了。

不过我 Hugo 刚入门,短代码其实并没有经验。


另外还要考虑一下 Hugo 主题要选什么,至少三个标准:

  • 多语言
  • 为文档设计,或者说有一个显示所有文章的树状导航栏,一般是左侧边栏。
  • 搜索支持中文(Pagefind 和 FlexSearch 应该都行,Lunr.js 不行)

同时符合这些要求的 Hugo 主题其实不太好找,因为 Hugo 官网的主题列表只能每次只能筛选一个条件,而且有一些其实是支持多语言(Multilingual)的但是它没放到 Tags 里面就找不到。

目前已知同时符合这些条件的 Hugo 主题有:

  • Hextra(我自己的博客就是这个,但说实话初看还行,再看有点丑)
  • Lotusdocs:这个看起来也还行,而且 fufexan 也说了可能要将 hyprland-wiki 转移到这个主题。

不过说到这里,我干脆建个 issue 好了,请 hyprland 官方支持多语言(反正都打算用 lotusdocs 了,对吧)

2 个赞

更新:issue 已关闭。

vaxerski 说 Hyprland 更新速度太快了,翻译很快会过时。

We’ve had like at least 3 breaking changes in your config alone since latest release 0.35 like 2-3 weeks ago.

对于不能接受文档(哪怕是翻译版本)中有过时部分,这一点我倒是很能理解。而且,如果没有这样的高要求,恐怕就不会有 Hyprland 今天这种更新速度和丰富的功能。

但是,说真的,我作为 Hyprland 用户(我的配置在这里)其实没怎么感知到这一点,反而是每次阅读 Hyprland-wiki 时都真真切切地感受到了英语的晦涩难懂

即使是容易过时的翻译,对于我以及其他用户来说,在理解这个现状的前提下,我想也是有参考意义的。 所以我的第三方翻译还是要进行下去。而且在机翻+人工校准的工作流下,效率不见得会多差(?)

只需要做 zh-CN 就好了(至于其他语言的,谁想做谁做去),所以这实际上是个 wiki 的第三方汉化。

Hugo 主题可能还是选 lotusdocs。

另外此 Wiki 上线时必须要做好说明:

  1. 这是个非官方的翻译版本,仅供参考。
  2. Hyprland 更新速度非常快,所以此 Wiki 中任何一页的过时可能性都很高。
  3. 如前面所说的,要在每页开头把中文版本的上次更新时间及对应的 commit hash 显示出来。

总之,如果一切正常的话,一段时间之后,大家可能会看到 demo 站(也可能不会)。

3 个赞

说到翻译,最近看了看 emacs-devel,现在 emacs 里面已经有一份 ses 的法语翻译了:

emacs/doc/translations/fr/misc/ses-fr.texi at master

emacs 也为翻译添加了一些规范:

Add README file about translations of Emacs manuals · emacs-mirror/emacs@aa8baf7

(具体的讨论可以看看 emacs-devel 从 23 年的 12 月到 2 月的归档)

两年前论坛上好像有人完成了 emacs lisp manual 的翻译: advanceflow/Elisp,这是帖子: Elisp28.1中文文档1.0 - Emacs-Lisp,不过具体的翻译内容我没有细看,某些术语感觉可能不翻译的话会更好一点,比如 kill ring。

相比于 ses 这个很多年都没什么变化的文档,elisp manual 改动比较频繁,要维护下去的话费力不少。在法国人注意到之前这个 ses 的文档很多年都没怎么改了:

2 个赞