本小工具旨在解决中文维基百科中 MediaWiki 无法顾及的变体处理问题。
中文维基百科广泛使用了 MediaWiki 的字词转换功能,从而做到向简体和繁体用户分别显示相应版本的条目。作为代价,每个条目的源代码都是简体中文和繁体中文的混合体,只有在显示的时候才会根据用户的语言设置自动转换。
通常情况下,当用户通过 https://zh.wikipedia.org/wiki/<条目名>
访问条目时,MediaWiki 能根据用户的浏览器网页语言设置(Accept-Language
头部)自动判断用户偏好的语言变体。但仍然存在许多不足:
- 用户可能从应用中或其他地方打开了一个指定变体的外部链接(如
https://zh.wikipedia.org/zh-tw/<条目名>
),而此变体恰巧不是用户偏好的变体,从而导致糟糕的阅读体验。 - 用户的浏览器可能没有正确配置语言设置(比如 Tor 浏览器推荐将网页语言设置为英文),从而导致用户看到简繁混杂的原始内容。
zh-hant
和zh-hans
这两个变体只为技术目的保留,且这两个变体下的简繁转换不完全,总之永远不应该呈现给用户。但如果出现上述 1、2 中的情况,则会影响阅读体验。- 即使用户手动选择偏好的变体,但导航时仍会回退至无转换版本。
站内现有 NotifyConversion、variant-link-fix、preserve-variant 小工具可以解决部分问题,但又引入了若干新问题:
- 无法解决上述第一条列出的问题。
- 由于小工具在页面底部呈现,呈现次数多了之后容易被用户主动忽略,从而起不到效果。
- 对于站内用户而言,编辑时可能有切换到不转换等变体的需求,此时弹出提示框反而适得其反。
- 仅仅解决了 Google 跳转的问题,而未解决其他相似情况。
- 相关的功能用多个小工具实现,显得碎片化且难以维护。
本小工具的功能分为变体管理、自动变体跳转和自动变体链接修正三部分。
对于资深用户,自动变体跳转会关闭,而自动变体链接修正会保持开启。定义以下用户为资深用户:
- 延伸确认用户
- WMF 员工和其他维基媒体组织成员
- 特定列表中的用户
本小工具将用户的变体设置分为三部分——浏览器变体设置、本地变体设置和账号变体设置。
浏览器变体设置是根据浏览器语言推断出的变体设置,如果无法推断则为空。账号变体设置即 MediaWiki 账号的偏好变体设置。本地变体设置由用户选择,存储于浏览器的 Local Storage 中,由小工具维护,且和浏览器变体设置保持同步(如果浏览器变体设置为有效值且不同于本地变体设置)。如果用户清除浏览器数据(或使用隐私浏览模式),那么此设置会丢失。
偏好变体由这三部分计算产生。用户一旦登录,就会使用账号变体设置作为偏好变体(本地变体设置如果非空则不会被覆盖),否则使用本地变体设置;如果本地变体设置为空,则回退至浏览器变体设置;如果浏览器变体设置也为空,则计算失败,小工具将弹出非模态提示框,要求用户选择本地变体并储存。
例如,假设用户的浏览器语言为 en
,那么初次进入网站时,小工具由于无法确定偏好变体,会询问用户。假设用户选择 zh-tw
,那么本地变体即为 zh-tw
,并存入浏览器 Local Storage 中(此时偏好变体为 zh-tw
)。如果此时用户登录了一个账号变体为 zh-cn
的账号(此时偏好变体为 zh-cn
),随后退出登录,小工具仍然认为偏好变体为 zh-tw
。
一旦小工具发现当前页面的变体与偏好变体不同,就会重定向到偏好变体的版本,以下情况除外:
- 站内导航。技术上通过
document.referrer
确定,如果用户的浏览器禁用了 Referrer,可能无法正确判断。
如果当前页面的 URL 中指定了变体(如 /zh-cn/条目
或 /w/index.php?title=条目&variant=zh-cn
),而用户点击了未指定变体的内链(如 /wiki/条目
),那么本小工具会自动修正链接为当前页面的变体。这样是为了让用户通过下拉菜单手动切换变体时,变体选择可以“蔓延”至新页面。
- 本小工具不涉及桌面移动端跳转相关逻辑。
- 不会支持除简体中文、繁体中文和英文之外的其他语言。
参见 CONTRIBUTING.MD。
本项目以 3 Clause BSD 协议授权。