wp-calypso Hosting Dashboard 界面文案与排版规范:从拼写、大小写到 Snackbar 通知的完整实践指南
前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载导读本文是 wp-calypso 仓库中 client/dashboard/docs/typography-and-copy.md 的深度解读与实践指南。该文档定义了新 Hosting Dashboard托管控制台中所有用户可见文案的统一标准涵盖美式英语拼写、标点、大小写规则以及 Snackbar 通知的成功/失败消息模板。读完本文你将掌握 wp-calypso 界面文案的完整书写规范理解每条规则背后的源码落地方式并能在为 Dashboard 编写或 review 文案时快速套用这套模板。一、文档定位Dashboard 文案的宪法在 wp-calypso 的 client/dashboard 目录下docs子目录集中存放着针对 Dashboard 开发的专项规范包括 i18n.md国际化、testing.md测试等而 typography-and-copy.md 负责的正是文案怎么写这件事——它不关心组件长什么样只关心用户在界面上读到的每一个字。它是一份面向开发者的直接约束任何在 Dashboard 中出现的新文案按钮、弹窗标题、表单标签、DataViews 字段标签、Snackbar 通知都应遵循其中的规则。文档本身结构清晰按通用规则 → 大小写 → Snackbar三层递进本文沿用这一骨架并补充仓库中的实际代码证据让每条规范都可落地、可验证。二、通用规则拼写、标点与引号原文档的 General 一节给出了三条最基础的书写准则它们适用于 Dashboard 中所有用户可见的文案。2.1 统一使用美式英语拼写Use US English spelling (e.g. customize not customise, color not colour).一律使用美式拼写customize而非customise、color而非colour、center而非centre。这条规则与项目整体的国际语言基调一致——Dashboard 的文案最终都要经过wordpress/i18n的__()函数走翻译流水线见 client/dashboard/docs/i18n.md英文原文的拼写统一能大幅降低翻译歧义。2.2 句号的使用规则按文案类型区分End sentences with a period. Even short ones. Button and form labels do not end in periods, and neither do headings.这是最容易混淆的一条规则分两面文案类型是否以句号结尾示例完整句子含 Snackbar 消息是必须加句号Defensive mode enabled.按钮标签Button labels否Save、Disable表单标签Form labels否Duration标题Headings含弹窗标题否Defensive mode is enabled原文档特别强调哪怕是短句也要加句号这是为了保持信息密度较高的操作反馈在视觉上完整、可读。仓库中的实际代码正是这样落地的例如 client/dashboard/sites/settings-defensive-mode/index.tsx 中的__( Defensive mode enabled. )以及 client/dashboard/domains/domain-dns/actions.tsx 中的__( DNS record deleted. )句号都完整保留。2.3 使用弯引号与弯撇号Use curly quotes and apostrophes. e.g. like this instead of like this, e.g. its instead of its引号使用弯引号curly quotes左引号“、右引号”。撇号使用弯撇号curly apostrophe’例如it’s而不是its。直引号straight quotes和直撇号仅应出现在代码上下文中用户可见文案一律使用弯形变体。这一规则在 client/dashboard/emails/dataviews/actions/edit-email-forward.tsx 中有直接体现错误消息Failed to update forwarder %(emailAddress)s with message “%(message)s”. ...中包裹用户消息的就是弯引号“”。三、大小写规范几乎一切使用 Sentence CaseRule of thumb: use sentence case for almost everything.核心原则是除了专有名词几乎全部使用句子大小写sentence case——即只有句首单词首字母大写其余单词一律小写专有名词除外绝不使用 Title Case每个单词都首字母大写。原文档点名了四类必须使用 sentence case 的文案按钮标签Button labels如Disable、Save settings首词大写、其余小写。弹窗标题Modal titles弹窗标题同样按句子大小写处理且按 2.2 的规则不加句号。表单标签Form labels例如 Defensive mode 设置页中的Duration见 client/dashboard/sites/settings-defensive-mode/index.tsx。DataViews 字段标签DataViews field labelsDashboard 大量使用wordpress/dataviews构建数据表格例如 client/dashboard/agency/earn/migrations/commissions-list/index.tsx 引入DataViews其列标题、筛选器标签等字段文案同样遵循 sentence case。3.1 唯一的专有名词例外Hosting DashboardTreat Hosting Dashboard like a proper noun. Capitalize it when referring to the product.当 Hosting Dashboard 作为产品名出现时必须视作专有名词两个词均大写。这一点在仓库中可找到对应证据client/dashboard/me/hosting-dashboard/index.tsx 中切换新托管控制台时的消息Failed to enable New Hosting Dashboard.与Failed to disable New Hosting Dashboard.其中 Hosting Dashboard 均保持了专有名词的大写形态。四、Snackbar 通知文案规范文档核心章节Snackbar也叫 flash message / toast是网络请求完成后弹出的轻量通知。原文档用最大篇幅规定了 Snackbar 的文案写法其核心思想是成功消息必须包含操作对象设置名并以过去式动词结尾错误消息必须以 Failed 开头。下面按原文档骨架逐条展开。4.1 成功消息按是否为开关型设置分两套模板当设置本身是或表现为一个**功能开关feature toggle**时——例如 SSH 访问、Defensive mode——成功消息使用开启/关闭模板{Setting name} enabled. {Setting name} disabled.当设置不是开关型即普通配置项保存时使用{Setting name} saved.当对象被删除时使用{Setting name} deleted.仓库中的实际落地案例可以一一对照场景实际文案源码位置开关型开启/关闭Defensive mode enabled./Defensive mode disabled.client/dashboard/sites/settings-defensive-mode/index.tsx普通保存Profile saved.client/dashboard/agency/partner-directory/details/details-content.tsx普通保存带对象名Contact details for %s saved.client/dashboard/domains/domain-contact-details/index.tsx删除DNS record deleted.client/dashboard/domains/domain-dns/actions.tsx删除Domain forwarding rule for %s deleted.client/dashboard/domains/domain-forwarding/delete-modal.tsx从这些案例可以提炼出成功消息的完整句式公式{Setting name} {enabled | disabled | saved | deleted} .其中{Setting name}是用户操作的具体对象名消息以过去式动词收尾并以句号结束呼应 2.2 中Snackbar 消息必须加句号的规则。4.2 例外场景无法即时生效的操作There will be exceptions, such as when the setting cant be changed instantly, but we still want to show success to the user: Change of domain ownership requested.文档明确承认存在例外当设置无法即时生效但 UI 仍要向用户展示已受理的成功反馈时可以用被动词态/请求式文案Change of domain ownership requested.注意这条例外的两个要点原文档特别强调设置名仍然出现在消息中这里即domain ownership消息以过去式动词结尾这里是requested。也就是说即使脱离了enabled/disabled/saved/deleted四个标准动词句式骨架{对象名} 过去式动词 句号依然成立只是动词从即时完成语义换成了已提交请求语义。相应地失败场景也可以简化Failed to change domain ownership.——不必展开成功本应意味着一次请求已被发出这种细节见原文档对最后一个错误消息的说明。4.3 错误消息统一以 Failed 开头错误消息应尽可能提供帮助信息虽然并非总能做到并且必须以 Failed 开头。原文档给出四个标准模板Failed to enable {setting name}. Failed to disable {setting name}. Failed to save {setting name}. Failed to change domain ownership.仓库中有大量对应的实际实现例如client/dashboard/me/language/index.tsxcreateErrorNotice( error.message ?? __( Failed to save language. ) )client/dashboard/me/mcp/index.tsxerror: __( Failed to save settings. )client/dashboard/me/billing-payment-methods/index.tsxcreateErrorNotice( __( Failed to delete payment method. ) )client/dashboard/domains/domain-dns/actions.tsxerror: __( Failed to delete DNS record. )这些错误消息与成功消息一一对应saved↔Failed to savedeleted↔Failed to deleteenabled/disabled↔Failed to enable/disable句式完全对称便于用户理解我做的操作失败了。4.4 Snackbar 消息必须以句号结尾And remember, snackbar messages end with a period.原文档在 Snackbar 一节末尾再次强调句号规则作为收尾提醒。这与 2.2 的表格相互印证Snackbar 是完整句子类别即使是最短的Profile saved.也要带句号。可以看到仓库中所有 snackbar 文案client/dashboard/agency/resources/mcp/use-mcp-settings.ts 的MCP settings saved.等都无一例外地以句号结尾。五、源码落地Snackbar 消息在代码中如何呈现理解规范之后再看这些文案在 Dashboard 中如何被真正渲染成 Snackbar有助于在写文案时建立代码视角。5.1 运行时通知createSuccessNotice / createErrorNoticeDashboard 使用wordpress/notices的 store 来创建通知并通过type: snackbar指定为 Snackbar 形态。以 Defensive mode 设置页 client/dashboard/sites/settings-defensive-mode/index.tsx 为例const handleSubmit ( data: DefensiveModeSettingsUpdate ) { mutation.mutate( data, { onSuccess: () { createSuccessNotice( data.active ? __( Defensive mode enabled. ) : __( Defensive mode disabled. ), { type: snackbar } ); }, onError: () { createErrorNotice( __( Failed to save defensive mode settings. ), { type: snackbar, } ); }, } ); };这段代码几乎就是 4.1 与 4.3 模板的教科书式实现onSuccess里按data.active分支输出Defensive mode enabled./Defensive mode disabled.onError输出Failed to save ...。5.2 例外落地SSH 访问消息SSH 开关client/dashboard/sites/settings-sftp-ssh/ssh-card.tsx展示了文档规则 现实复杂度的平衡createSuccessNotice( __( SSH access has been successfully enabled for this site. ), { type: snackbar, } ); // ... else 分支SSH access has been successfully disabled for this site.它保留了enabled/disabled的过去式动词与句号但为了提供更多上下文哪个站点的 SSH、操作成功把消息扩展为完整句。这说明文档模板是底线基线——在包含设置名 过去式动词 句号的前提下可以根据业务需要适当补充信息。此外这段代码还在显示成功消息前先await queryClient.fetchQuery( sshKeysQuery() )等待 SSH 密钥加载完毕避免 Snackbar 在表单就绪前提前弹出——一个与文案无关但直接影响用户体验的时序细节。5.3 页面加载型 SnackbarFlashMessage 组件除了运行时 mutation 回调里弹出的 SnackbarDashboard 还支持页面加载时弹出 Snackbar通过 URL 查询参数flash传递消息 ID组件挂载后调用createSuccessNotice/createErrorNotice同样指定type: snackbar并清理 URL。实现位于 client/dashboard/components/flash-message/index.tsx。这意味着 snackbar 文案既可能出现在操作完成瞬间也可能出现在一次页面跳转之后——两种场景下文案规范完全一致。六、快速自查清单把原文档浓缩成一张可复用的 checklist供写文案或做 Code Review 时逐项核对拼写是否全部为美式英语customize/color/center句号Snackbar 消息是否以.结尾按钮、表单标签、标题是否没有句号引号用户可见文案是否使用了弯引号“”与弯撇号’而非直引号/大小写按钮、弹窗标题、表单标签、DataViews 字段标签是否为 sentence caseHosting Dashboard 作为产品名时是否保持专有名词大写Snackbar 成功消息是否为{Setting name} enabled./disabled./saved./deleted.模板开关用 enabled/disabled普通保存用 saved删除用 deleted例外场景是否仍包含设置名并以过去式动词结尾如Change of domain ownership requested.Snackbar 错误消息是否以Failed开头Failed to enable/disable/save/delete/change ...遵循这套规范Dashboard 的所有用户可见文案就能保持高度一致的语调与句式用户在开关 SSH、调整 Defensive mode、管理 DNS 记录等场景中获得的反馈始终可预期、可理解——这也正是 typography-and-copy.md 这份文档存在的全部意义。赞分享前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载相关推荐wp-calypso Multi-site Dashboard 开发规范与实践TanStack 技术栈、Mutation Snackbar、国际化与暗色模式的工程指南wp calypso Multi site Dashboard 开发规范与实践TanStack 技术栈、Mutation Snackbar、国际化与暗色模式的前端CMS如何正确使用专有名词大小写中文文案排版终极指南如何正确使用专有名词大小写中文文案排版终极指南 中文文案排版指北是一份致力于统一中文文案和排版相关用法的开源项目旨在降低团队成员之间的沟通成本增强网站气质文档教程终极music21文档编写指南从入门到精通的完整技术规范与实践终极music21文档编写指南从入门到精通的完整技术规范与实践 music21是一款强大的计算音乐学工具包Toolkit for Computational音视频开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

psmux + Claude Code:AI Agent 团队自动分屏,零配置实现多智能体并行开发

psmux + Claude Code:AI Agent 团队自动分屏,零配置实现多智能体并行开发

psmux Claude Code:AI Agent 团队自动分屏,零配置实现多智能体并行开发 【免费下载链接】psmux Tmux on Windows Powershell - tmux for PowerShell, Windows Terminal, cmd.exe. Includes psmux, pmux, and tmux commands. This is native High-Perfor…

2026/9/28 14:20:29 阅读更多 →
Claude Code实战:用CLAUDE.md与提示词模板告别重复上下文

Claude Code实战:用CLAUDE.md与提示词模板告别重复上下文

用Claude Code写代码这一年多,我踩过最大的坑,不是工具本身的bug,而是每一次对话都得从头跟它解释一遍“我的项目是什么”。直到我把常用的提示词整理成一套可以复用的claude-code-templates,那种“每天重复劳动”的感觉才真正消失…

2026/9/28 20:51:08 阅读更多 →
零基础用豆包+开源Skills做AI视频:全流程实操指南

零基础用豆包+开源Skills做AI视频:全流程实操指南

做视频这件事,卡住大多数人的根本不是“不会剪”,而是不知道第一步该干什么。打开剪映看着一堆轨道和关键帧就头大,写文案憋半天,配音怕声音难听,字幕一条条加累到腰酸……这些我全都经历过来。后来我发现,…

2026/9/28 18:42:11 阅读更多 →

最新新闻

一个想法,如何变成一个真正能分享的应用?

一个想法,如何变成一个真正能分享的应用?

“如果 AI 成为你的长期搭档,你会是哪一种合作者?” 为了回答这个问题,我做了一个有趣的「AI 搭子人格测试」,用户可以在线答题、查看进度,并获得专属分析。 但这个文章真正想展示的,并不是测试本身&…

2026/9/30 10:35:02 阅读更多 →
从U-Boot到Linux内核:NVMe驱动初始化与PCIe枚举全链路解析

从U-Boot到Linux内核:NVMe驱动初始化与PCIe枚举全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 10:35:02 阅读更多 →
Modbus RTU通信故障排查:RS-485波形、t3.5时序与CRC16校验实战解析

Modbus RTU通信故障排查:RS-485波形、t3.5时序与CRC16校验实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 10:35:02 阅读更多 →
银河麒麟V10桌面版新手避坑指南:从root密码到软件安装与日常运维

银河麒麟V10桌面版新手避坑指南:从root密码到软件安装与日常运维

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 10:35:02 阅读更多 →
Ubuntu 18.04安装Anaconda完整指南:版本选择、换源加速与报错排查

Ubuntu 18.04安装Anaconda完整指南:版本选择、换源加速与报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 10:35:02 阅读更多 →
Shell 与 Bash 的本质区别:POSIX 规范 vs GNU 实现

Shell 与 Bash 的本质区别:POSIX 规范 vs GNU 实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 10:34:00 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →