首页
/ SerenityOS 界面文案规范指南:Text.md 全文解读与 LibGUI 源码印证

SerenityOS 界面文案规范指南:Text.md 全文解读与 LibGUI 源码印证

2026-09-10 18:47:26作者:翟萌耘Ralph

本篇指南基于 SerenityOS 仓库中的 Documentation/HumanInterfaceGuidelines/Text.md 展开,系统讲解 SerenityOS 用户界面文本(按钮、菜单、标签、消息框等)的两套大小写规则与省略号(Ellipsis)使用约定。文章在完整继承原文档全部规则与示例的基础上,结合 Userland 下 LibGUI 与各应用的源码实现,逐一印证这些规范在实际界面中的落地方式,帮助开发者在为 SerenityOS 编写应用界面时写出风格统一、符合系统气质与用户习惯的文案。

概述:为什么界面文案需要规范

在 SerenityOS 这样一套从零构建的操作系统中,用户界面文本是用户与系统交互的第一语言。文案的大小写风格是否统一、省略号用得是否恰当,直接影响界面观感与操作预期的一致性。为此,SerenityOS 在 Human Interface Guidelines(HIG)中给出了明确的书面规范,约束按钮、菜单、窗口标题、状态栏、消息框等各类界面元素上的文字表达。

原文档(Text.md)篇幅精炼,但包含两条核心规则:大小写(Capitalization)省略号(Ellipses)。下文逐一展开,并到源码中寻找真实用例。

大小写规范:两种风格,两套场景

SerenityOS 的界面文本统一采用两种大小写风格,且每种风格都有严格限定的适用场景,两者不可混用:

  • Book title capitalization(书籍标题式大小写)
  • Sentence-style capitalization(句子式大小写)

Book title capitalization:书名标题式

在这种风格下,第一个词与最后一个词的首字母大写,中间所有词的首字母也大写,但以下三类词除外:

  • 冠词(articles):a、an、the
  • 七个并列连词(coordinating conjunctions):for、and、nor、but、or、yet、so
  • 不超过四个字母的介词(prepositions):at、by、for、with、into 等

原文档示例

  • Create New Layer
  • Copy URL
  • Move to Front
  • Save and Exit
  • Sort by Name

注意其中 "Save and Exit" 中的 and、"Move to Front" 中的 to、"Sort by Name" 中的 by 均保持小写,正是上述"短介词与连词小写"规则的直观体现。

适用场景

Book title capitalization 仅用于以下界面元素:

  • 按钮文本(Button text)
  • 图标标签(Icon labels)
  • 菜单名称(Menu names)
  • 菜单项(Menu items)
  • 标签页标题(Tab titles)
  • 窗口标题(Window titles)
  • 工具提示(Tooltips)

源码印证

在仓库源码中,这些场景均能找到符合该风格的实现:

Sentence-style capitalization:句子式

这种风格遵循基础英语句子的大小写规则:首词首字母大写,专有名词、星期等专名首字母大写,其余一律小写。

原文档示例

  • An error occurred
  • Use system defaults
  • Copy the selected text
  • Enable Linux compatibility hacks

适用场景

Sentence-style capitalization 用于以下界面元素:

  • 复选框标签(Check box labels)
  • 分组框标签(Group box labels)
  • 列表项(List items)
  • 消息(如消息框中的提示文字,Messages)
  • 单选按钮标签(Radio button labels)
  • 状态栏文本(Status bar text)
  • 文本框标签(Text box labels)

源码印证

省略号规范:三种点,两种使命

省略号(Ellipsis,即连续的三个点 ...)在 SerenityOS 界面中有两种截然不同的职能:

  1. Eliding text(文本截断):由程序自动执行,当文本超出可用空间时以省略号代替被裁掉的内容。
  2. Foreshadowing additional user input(预示后续输入):需要作者在手动书写文案时谨慎把握。

第一种是程序行为,不需要人工干预;第二种才是本文规范讨论的重点。

何时必须使用省略号

凡是表示"某个动作尚未完成、还需要用户进一步输入"的控件文本,必须以省略号结尾。 判断标准是:打开一个新窗口本身并不能成为使用省略号的理由,只有当这个对话框是"完成该动作过程中的中间步骤"时,才允许(且应当)加省略号。

这一规则与"动作立即生效"型按钮(如 Save、Delete)形成清晰区分:点击后动作立刻完成的按钮不加省略号,点击后弹出后续交互窗口的按钮加省略号。

原文档示例

  • Save As...
  • Browse...
  • Insert Emoji...

克制使用,避免混淆

省略号在其他场合应尽量少用,以免与"文本截断产生的省略号"混淆——用户看到 ... 时无法区分是"还有下一步"还是"文字被裁掉了"。

源码印证

  • Save As...Userland/Libraries/LibGUI/MessageBox.cpp 中,"未保存更改"对话框的按钮文本会根据文件是否有已知路径动态切换:无路径(untitled document)时按钮为 "Save As...",有路径时则为 "Save"。"Save As..." 需要用户在弹出的文件选择器中指定保存位置,动作尚未完成,故加省略号;而 "Save" 会直接写回原文件,动作即刻生效,不加省略号。这是"省略号 = 尚需后续输入"规则最典型的源码级体现。
  • Browse...Userland/Applications/DisplaySettings/BackgroundSettings.gmlUserland/Applications/Run/Run.gml 中的 "Browse..." 按钮均用于打开文件选择对话框,属于典型的"为完成动作而弹出中间步骤",故保留省略号。
  • 这些字符串同样可在 Userland/Libraries/LibGUI/MessageBox.cpp 中对照 try_ask_about_unsaved_changes 的完整逻辑阅读:对话框通过 set_text 动态生成正文,通过按钮文本区分 Save / Save As,将规范中的"中间步骤"原则落实为可运行代码。

实践要点总结

将上述规范浓缩为可操作的检查清单:

界面元素 大小写风格 省略号
按钮文本 Book title 动作未完成且需后续输入时加
菜单名 / 菜单项 Book title 需后续输入的菜单项加
窗口标题 Book title 不加
标签页标题 / 工具提示 / 图标标签 Book title 不加
复选框 / 单选按钮标签 Sentence-style 不加
分组框 / 文本框标签 Sentence-style 不加
列表项 Sentence-style 不加
消息框正文 Sentence-style 不加
状态栏文本 Sentence-style 不加

核心判断口诀:

  • 标题式还是句子式:看元素类型——按钮、菜单、窗口标题用标题式;控件标签、消息、状态栏用句子式。
  • 加不加省略号:看动作是否"立即完成"——点击后还需用户进一步输入的(如 Save As、Browse、Insert Emoji)加 ...;点击即完成的(如 Save、Open)不加。
  • 少用慎用:除非确属"尚需输入",否则不轻易使用省略号,避免与程序化文本截断混淆。

延伸阅读

热门项目推荐
相关项目推荐

项目优选

收起
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.15 K
2.77 K
kernelkernel
deepin linux kernel
C
34
18
docsdocs
暂无描述
Markdown
900
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
929
1.85 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.36 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.94 K
1.03 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.47 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
534
603
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
398
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Markdown
77
23