Skip to content

Latest commit

 

History

History
55 lines (39 loc) · 5.06 KB

README.MD

File metadata and controls

55 lines (39 loc) · 5.06 KB

中文变体助手(Variant Ally)

English

本小工具旨在解决中文维基百科中 MediaWiki 无法顾及的变体处理问题。

要解决什么问题?

中文维基百科广泛使用了 MediaWiki 的字词转换功能,从而做到向简体和繁体用户分别显示相应版本的条目。作为代价,每个条目的源代码都是简体中文和繁体中文的混合体,只有在显示的时候才会根据用户的语言设置自动转换。

通常情况下,当用户通过 https://zh.wikipedia.org/wiki/<条目名> 访问条目时,MediaWiki 能根据用户的浏览器网页语言设置(Accept-Language 头部)自动判断用户偏好的语言变体。但仍然存在许多不足:

  1. 用户可能从应用中或其他地方打开了一个指定变体的外部链接(如 https://zh.wikipedia.org/zh-tw/<条目名>),而此变体恰巧不是用户偏好的变体,从而导致糟糕的阅读体验。
  2. 用户的浏览器可能没有正确配置语言设置(比如 Tor 浏览器推荐将网页语言设置为英文),从而导致用户看到简繁混杂的原始内容。
  3. zh-hantzh-hans 这两个变体只为技术目的保留,且这两个变体下的简繁转换不完全,总之永远不应该呈现给用户。但如果出现上述 1、2 中的情况,则会影响阅读体验。
  4. 即使用户手动选择偏好的变体,但导航时仍会回退至无转换版本。

站内现有 NotifyConversionvariant-link-fixpreserve-variant 小工具可以解决部分问题,但又引入了若干新问题:

  1. 无法解决上述第一条列出的问题。
  2. 由于小工具在页面底部呈现,呈现次数多了之后容易被用户主动忽略,从而起不到效果。
  3. 对于站内用户而言,编辑时可能有切换到不转换等变体的需求,此时弹出提示框反而适得其反。
  4. 仅仅解决了 Google 跳转的问题,而未解决其他相似情况。
  5. 相关的功能用多个小工具实现,显得碎片化且难以维护。

是如何解决的?

本小工具的功能分为变体管理自动变体跳转自动变体链接修正三部分。

对于资深用户,自动变体跳转会关闭,而自动变体链接修正会保持开启。定义以下用户为资深用户:

  • 延伸确认用户
  • 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/条目),那么本小工具会自动修正链接为当前页面的变体。这样是为了让用户通过下拉菜单手动切换变体时,变体选择可以“蔓延”至新页面。

不会解决的问题

  1. 本小工具不涉及桌面移动端跳转相关逻辑。
  2. 不会支持除简体中文、繁体中文和英文之外的其他语言。

开发和构建

参见 CONTRIBUTING.MD

协议

本项目以 3 Clause BSD 协议授权。