灵界 OS 文档与国际化优化:信息同步,翻译逻辑更易扩展

2026-09-12 27 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:6 分钟

这次灵界 OS 更新没有新增功能,也没有调整界面,版本号保持不变。变化集中在开发者和贡献者更容易忽略、却会持续影响维护效率的地方:中英文文档完成对齐,国际化模块的翻译匹配逻辑也进行了重构。

文档同步不只是翻译

中文 README 与英文 README 现在以内容完全一致为目标,补全了此前英文文档中遗漏的信息,并修正了可能存在的错译或表达缺失。对用户来说,这意味着无论从哪种语言开始阅读,都能获得相同的安装、使用和项目信息。

对维护者而言,文档对齐还减少了一个常见风险:功能已经更新,但另一种语言的 README 仍停留在旧状态。后续提交文档时,可以把中英文段落视为同一份变更的一部分,在评审中同时检查标题、命令、参数和限制条件。

可以在 CI 中加入一个最小化的同步检查,先确保两个 README 中的关键命令保持一致。下面的示例假设项目使用 Node.js,并检查两个文档中出现的 npm 命令:

// scripts/check-readme-commands.mjs
import { readFile } from "node:fs/promises";

const [zh, en] = await Promise.all([
  readFile("README.zh-CN.md", "utf8"),
  readFile("README.md", "utf8"),
]);

const npmCommand = /npm\s+(?:install|run|build|test)(?:\s+[\w:-]+)?/g;
const commands = (text) => [...new Set(text.match(npmCommand) ?? [])].sort();
const zhCommands = commands(zh);
const enCommands = commands(en);

if (JSON.stringify(zhCommands) !== JSON.stringify(enCommands)) {
  console.error("README command mismatch");
  console.error("Chinese:", zhCommands);
  console.error("English:", enCommands);
  process.exit(1);
}

console.log("README command check passed");

运行方式:

node scripts/check-readme-commands.mjs

这个检查不能替代人工校对,但能快速发现命令级别的遗漏。实际项目中还可以根据 README 结构,进一步检查章节标题、配置项名称或版本说明是否同时出现。

i18n.js 改为表驱动匹配

本次国际化模块优化重构了 i18n.js 的翻译匹配逻辑,改为表驱动方式。与把大量判断分散在条件分支中的实现相比,表驱动结构把“输入如何匹配”和“最终显示什么”集中到数据表中,新增翻译规则时通常只需要增加一条配置。

下面是一个可以直接运行和改造的简化示例。它展示了如何将不同语言环境下的文本映射到统一的翻译键:

// i18n-demo.mjs
const translations = {
  zh: {
    welcome: "欢迎使用灵界 OS",
    docs: "查看文档",
  },
  en: {
    welcome: "Welcome to Lingjie OS",
    docs: "Read the documentation",
  },
};

const matchTable = [
  { pattern: /欢迎|灵界/, key: "welcome" },
  { pattern: /文档|documentation|docs/i, key: "docs" },
];

function translate(input, locale = "zh") {
  const match = matchTable.find(({ pattern }) => pattern.test(input));
  return match ? translations[locale]?.[match.key] ?? input : input;
}

console.log(translate("欢迎", "zh"));
console.log(translate("documentation", "en"));
console.log(translate("未知文本", "en"));

运行:

node i18n-demo.mjs

示例中的匹配规则只是演示用途,真实项目还需要结合现有调用方式处理占位符、复数形式、默认语言和未命中回退。表驱动的价值在于降低扩展成本,同时让规则更容易被集中查看和测试;如果规则之间存在重叠,也要明确匹配优先级,避免新增条目改变旧文本的结果。

对项目维护的实际影响

这轮更新的重点不是用户界面,而是让项目在多人协作和多语言维护下保持一致。文档同步降低了信息分叉,国际化逻辑重构则为后续扩展提供了更清晰的组织方式。

采用类似改动时,可以保留一份简单检查清单:

  • 中英文 README 的章节、命令和限制条件是否一致。
  • 新增翻译规则是否有明确的键名和匹配优先级。
  • 未匹配文本是否保留原文,避免界面出现空字符串。
  • 默认语言、回退语言和占位符是否覆盖测试。
  • 文档和国际化变更是否不会意外改变功能、界面或版本号。

对于已经稳定运行的项目,这类维护性更新不一定带来显眼的界面变化,却能让后续文档补全和语言扩展更可控。


相关推荐