tldr/contributing-guides/style-guide.zh.md

366 lines
20 KiB
Markdown
Raw Normal View History

# 格式指导
当你在为 `tldr` 贡献时,请遵守下面的格式规范。
请注意,下面的规范仅适用于中文翻译的 `tldr` 页面。
## 排版
首先,你的页面应该看起来像这样,并且最多只能包含 8 个示例:
```md
# 命令名称
> 简短、精炼的描述。
> 描述最好只有一行;当然,如果需要,也可以是两行。
> 更多信息:<https://example.com>.
- 命令描述:
`命令 -选项 1 -选项 2 -参数 1 {{参数的值}}`
- 命令描述:
`命令 -选项 1 -选项 2`
```
当你将自己的贡献提交 pull request 时,一个脚本会自动检查你的贡献是否符合上面的格式。
你也可以在提交前在本地测试自己的贡献:
```sh
npm install --global tldr-lint
tldr-lint {{page.md}}
```
关于 `tldr-lint` 的更多使用方法,例如检查批量检查一整个目录的格式,[`tldr tldr-lint`](https://github.com/tldr-pages/tldr/blob/master/pages/common/tldr-lint.md) 是你的不二去处!
如果你用 tldr-pages 的 Node.js 客户端,你可以在命令后加 `-f` (`--render`) 来在本地预览自己的页面:
```sh
tldr --render path/to/tldr_page.md
```
### PowerShell 特定规则
在记录 PowerShell 命令时,请注意以下命名约定。
- 文件名必须以小写形式书写,例如 `invoke-webrequest.md` 而不是 `Invoke-WebRequest.md`
- 页面标题/标题必须按照原样书写(与 Microsoft 或 PowerShell 模块作者意图一致),例如 `Invoke-WebRequest` 而不是 `invoke-webrequest`
- 示例中的命令名称和选项也应按原样书写,例如 `Command-Name {{input}} -CommandParameter {{value}}` 而不是 `command-name {{input}} -commandparameter {{value}}`
由于[各种兼容性差异](https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell)和在 PowerShell 6.x 中删除的特定于 Windows 的命令,确保命令在 PowerShell 5.1(即安装在 Windows 10 和 11 中的“传统 Windows PowerShell”和 最新版本的跨平台 PowerShell以前称为 PowerShell Core之间可用。如果命令或其选项在每个版本之间不可用或包含不同的行为请在描述中注明。例如
```md
# Clear-RecycleBin
> 清空回收站中的项目。
> 此命令仅适用于 PowerShell 版本 5.1 及以下版本,或 7.1 及以上版本。
> 更多信息: <https://learn.microsoft.com/powershell/module/microsoft.powershell.management/clear-recyclebin>.
```
## 别名
如果一个命令可以通过其他名称调用(例如 `vim` 可以通过 `vi` 调用),可以创建别名页面将用户引导到原始命令名称。
```md
# command_name
> 此命令是 `original-command-name` 的别名。
> 更多信息: <https://example.com/original/command/help/page>.
- 查看原始命令的文档:
`tldr original_command_name`
```
示例:
```md
# vi
> 这是 `vim` 命令的一个别名。
- 原命令的文档在:
`tldr vim`
```
预先翻译好的别名模板见[这里](https://github.com/tldr-pages/tldr/blob/main/contributing-guides/translation-templates/alias-pages.md)。
### PowerShell 特定别名
某些 PowerShell 命令可能会引入别名,这些别名可以分为以下三类:
1. 替代现有的 Windows 命令提示符 (`cmd`) 命令,例如 `cd` 别名为 `Set-Location`,但带有不同的命令选项。在这种情况下,将以下别名注释添加到原始命令提示符命令的 tldr 描述的第二行中,例如:
```md
# cd
> 显示当前工作目录或移动到其他目录。
> 在 PowerShell 中,此命令是 `Set-Location` 的别名。本文档基于命令提示符 (`cmd`) 版本的 `cd`。
> 更多信息: <https://learn.microsoft.com/windows-server/administration/windows-commands/cd>.
- 原命令的文档在:
`tldr set-location`
```
> [!TIP]
> “查看等效 PowerShell 命令的文档”的示例是可选的,如果页面已经具有 8 条示例,则可以省略。
2. 提供一个新的别名,但只能在 PowerShell 中执行,例如 `ni` 代表 `New-Item`。在这种情况下,使用[标准别名模板](https://github.com/tldr-pages/tldr/blob/main/contributing-guides/translation-templates/alias-pages.md),但添加说明“在 PowerShell 中”,或表示该命令仅限于 PowerShell。例如
```md
# ni
> 在 PowerShell 中,此命令是 `New-Item` 的别名。
> 更多信息: <https://learn.microsoft.com/powershell/module/microsoft.powershell.management/new-item>.
- 查看原始命令的文档:
`tldr new-item`
```
3. 与其他程序冲突时 PowerShell 会提供一个新的别名,最为突出的是将 `curl``wget` 作为 `Invoke-WebRequest` 的别名(带有不兼容的命令选项集)。请注意,此类别的 PowerShell 系统别名通常仅限于 Windows。
在这种情况下,提供一个说明,并提供一种方法来确定命令当前是否引用了 PowerShell 命令(通过别名)或其他程序。例如,
```md
# curl
> 在 PowerShell 中,当原始的 `curl` 程序 (<https://curl.se>) 未正确安装时,此命令可能是 `Invoke-WebRequest` 的别名。
> 更多信息: <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/invoke-webrequest>.
- 通过打印其版本号来检查 `curl` 是否已正确安装。如果此命令导致错误,则 PowerShell 可能已将此命令替换为 `Invoke-WebRequest`
`curl --version`
- 查看原始 `curl` 命令的文档:
`tldr curl -p common`
- 查看 PowerShell 的 `Invoke-WebRequest` 命令的文档:
`tldr invoke-webrequest`
```
## 选项语法
- 对于常用命令(例如 `grep`、`tar` 等),我们更推荐在占位符中使用简短选项以及[助记符](#short-option-mnemonics)。
- 对于在命令中同时突出长选项和短选项(而不是使用助记符),将它们组合在占位符中,即 `{{-o|--output}}`
- 为了用户友好,在 `common` 目录下的页面中,当它们在跨平台(在多个平台上都可以正常工作)时,我们更推荐使用**GNU 风格的长选项**(例如 `--help` 而不是 `-h`)。
- 在记录 PowerShell 命令时,使用**PowerShell 风格的长选项**(例如 `-Help` 而不是 `-H`)。
- 我们更推荐使用空格而不是等号 (`=`) 来分隔选项和其参数(即使用 `--opt arg` 而不是 `--opt=arg`),除非程序不支持此方法。
### 短选项助记符
短选项助记符是可选的提示,可以添加以帮助用户理解这些短选项的含义。分配的助记符应与命令的官方文档(例如来自 `man``Get-Help`)中的内容相匹配。例如:
```md
- [d]isplay the ins[t]allation [i]D for the current device. Useful for offline license activation:
`slmgr.vbs /dti`
Display the current license's e[xp]i[r]ation date and time:
`slmgr.vbs /xpr`
```
请注意,在第一个示例中,`[d]`、`[t]` 和 `[i]` 字符被方括号括起来,以指示命令的 `/dti` 选项分别是 "display"、"installation" 和 "ID" 的组合。连续的助记符字符可以在同一方括号下进行分组,例如 `e[xp]i[r]ation` 而不是 `e[x][p]i[r]ation`
**助记符字符必须以区分大小写的方式编写**,即使它放在句子的第一个字符位置(例如使用 `[d]isplay` 而不是 `[D]isplay`)。这是为了避免与 GNU 风格命令选项产生冲突GNU 风格命令选项可能会以不同于小写的方式解释大写选项,例如 `-v` 用于显示命令的 `[v]ersion` 号码,而 `-V` 则用于以 `[V]erbose` 模式运行命令。
选项助记符也可以在翻译中使用,只要突出显示的单词与命令所用语言(通常为英语)中的单词具有相似的含义即可。例如,英语中的 `[d]ownload` 可以翻译为西班牙语中的 `[d]escargar`,英语中的 `[i]nstall` 可以翻译为德语中的 `[i]nstallieren`,而英语中的 `[a]pp` 可以翻译为印尼语和马来语中的 `[a]plikasi`
可选地,在翻译和特定页面中,助记符及其包含的术语可以用括号与描述的其余部分分开(即 `([a]ll)`),以提供额外的上下文或提及描述中不存在的单词。
> [!NOTE]
> 在翻译的单词中如果缺少字符,您可以在等效词的前面或旁边突出显示选项,或您可以在括号内的翻译旁边添加英文单词。例如,英语中的 `E[x]tract` 可以翻译为印尼语中的 `[x] ekstrak` 或 `ekstrak [x]` 或 `ekstrak (E[x]tract)`。
## 占位符语法
当命令涉及用户自己提供的值时,请用 `{{token}}` 语法来使 `tldr` 客户端能自动高亮它们:
`tar -cf {{目标.tar}} {{文件 1}} {{文件 2}} {{文件 3}}`
翻译时,请尽量翻译原文中的西文占位符。下面是命名占位符的规则:
1. 占位符需要短小精悍,
例如 `{{源文件}}` 或者 `{{钱包.txt}}`
2. 如果占位符是西文,请用 [`snake_case`](https://en.wikipedia.org/wiki/Snake_case) 来分词。
3. 当占位符涉及文件路径时,请用 `{{目录/子目录/《占位符》}}` 的格式。
例如:`ln -s {{目录/子目录/源文件}} {{目录/子目录/链接}}`
如果占位符提到的文件也可能是目录,请用 `{{目录/子目录/文件或目录}}`
4. 除非文件是特定的,上述 `{{目录/子目录/《占位符》}}` 的文件路径格式应用于所有包含路径的命令。
5. 如果命令需要的文件扩展名是固定的,请在占位符里加上文件格式。
例如:`unrar x {{压缩包.rar}}`
如果文件 **必须** 有一个扩展名,请用 `{{.ext}}`
例如,在 `find {{起始目录}} -name '{{*.ext}}'` 的例子里,
这样做简单地演示了查找一个特定文件扩展名的方法。
但是,在 `wc -l {{file}}` 的例子里,用不加扩展名的 `{{file}}` 就足够了。
6. 如果用实际的值比描述这个占位符更加明了,请举一个值做例子。
例如:`iostat {{2}}` 比 `iostat {{以秒为单位的间隔}}` 更清晰。
7. 如果一个命令可能对文件系统或设备造成不可逆的影响,请在示例命令中注意改写,使其不能被盲目复制粘贴运行。
例如,`ddrescue --force --no-scrape /dev/sda /dev/sdb` 被盲目复制粘贴时可能对系统造成毁灭性的打击;`ddrescue --force --no-scrape {{/dev/sdX}} {{/dev/sdY}}` 则更安全。
因此,请用 `{{/dev/sdXY}}` 而不是 `{{/dev/sda1}}` 来表示一个 **块设备** 。
占位符应该尽可能简单明了,让人一眼就能看出应该替换它的值。
### 路径
- 当只期望文件名时,请使用 `{{filename}}`
- 对于文件或目录路径的任何引用,请使用格式 `{{path/to/<placeholder>}}`,除非位置是隐含的。
- 当路径不能是相对路径,而必须从文件系统的根目录开始时,请使用斜杠作为前缀,例如 `get {{/path/to/remote_file}}`
- 如果可能引用文件或目录,请使用 `{{path/to/file_or_directory}}`
> [!NOTE]
> 如果命令专用于 Windows请使用反斜杠`\`),例如 `{{path\to\file_or_directory}}`。驱动器号(如 `C:`)是可选的,除非命令输入要求绝对路径或特定的驱动器号范围,例如 `cd /d {{C}}:{{path\to\directory}}`。
### 扩展名
- 如果文件有特定的扩展名,请写出来。
例如,`unrar x {{path/to/compressed.rar}}`。
- 如果需要通用的扩展名,请使用 `{{.ext}}`,但**只有**在需要扩展名时才使用。
例如,在 `find.md` 的示例“按扩展名查找文件”中(`find {{path/to/root}} -name '{{*.ext}}'`
使用 `{{*.ext}}` 可以解释命令而不必过于具体;
而在 `wc -l {{path/to/file}}` 中,使用 `{{path/to/file}}`(不带扩展名)就足够了。
### 分组占位符
- 如果命令可以接受相同类型的 0 个或多个参数,请使用省略号:`{{placeholder1 placeholder2 ...}}`。
例如,期望多个路径,则可以使用 `{{path/to/directory1 path/to/directory2 ...}}`
- 如果命令可以接受不同类型的 0 个或多个参数,请使用竖线和省略号:`{{placeholder1|placeholder2|...}}`。
如果可能值超过 5 个,则可以在最后一项后面使用 `|...`
- 无法通过省略号限制占位符的最小或最大数量。
### 特殊情况
- 如果一个命令可能对文件系统或设备进行不可逆转的更改,
请以一种不会被轻易复制粘贴的方式编写每个示例。
例如,不要写成 `ddrescue --force --no-scrape /dev/sda /dev/sdb`
而是写成 `ddrescue --force --no-scrape {{/dev/sdX}} {{/dev/sdY}}`
并且对于*块设备*,使用 `{{/dev/sdXY}}` 占位符,而不是 `/dev/sda1`
通常情况下,占位符应尽可能直观,以便于理解如何使用命令并填入相应的值。
在命令描述中,如果出现了技术性的专有名词,请用 `反引号` 括起来:
- 路径,例如 `package.json``/etc/package.json`。
- 扩展名,例如 `.dll`
- 命令,例如 `ls`
- 标准流:`stdout``stdin``stderr`。**不要**使用完整的名称(例如标准输出)。
- 压缩算法,例如 `zip``7z``xz`。
## 描述
### 祈使句
- **所有描述必须以祈使句表达。**
如果你担心命令在不同平台或操作系统之间可能不同(例如 Windows 对比 macOS大多数 [tldr 页面客户端](https://github.com/tldr-pages/tldr/wiki/tldr-pages-clients) 将选择最适合的命令版本。
在这种情况下,默认将显示 Windows 版本的 `cd` 信息(存储在 `pages/windows/cd.md` 中)给 Windows 用户,并为 Linux、macOS 和其他平台显示一个通用版本(存储在 `pages/common/cd.md` 中)。
在为命令示例编写描述时,**检查任何语法错误**。例如,应该使用 `前往指定目录` 而不是:
- `正前往指定目录`(不应使用现在分词形式)
- `该命令将前往指定目录`(很明显此示例适用于 *此* 命令)
- `让我们前往指定目录!`
- `目录被更改为`(如果可能,应使用主动形式而不是被动形式)
例如,可以使用 `列出所有文件:` 的描述,下面是示例的描述可以使用 `列出所有文件:`
```md
- 列出所有文件:
`ls`
```
### 措辞
- 所有描述**必须简洁**。
- 避免在描述中使用页面标题(例如,使用 `为数字艺术家设计的素描和绘画程序`,而不是 `Krita 是为数字艺术家设计的素描和绘画程序`),除非程序名称与可执行文件名称不同(例如 `rg` 和 Ripgrep
- 避免提及程序是在命令行上使用的(例如,使用 `Ripgrep 是一个递归的面向行的搜索工具`,而不是 `Ripgrep 是一个递归的面向行的 CLI 搜索工具`)。
- 例如,在为 `cd` 编写文档时,一个用于在终端或命令提示符中更改当前工作目录的工具,**不要**写出像这样冗长的描述:
```md
> `cd` 是一个系统工具,在 Windows、macOS 和 Linux 中可用,用于在命令提示符、终端和 PowerShell 中更改当前工作目录以完成任务。
```
它应该简化以使每个人都能更轻松地阅读:
```md
> 更改当前工作目录。
```
### 格式
- 在描述中,应该对专有名词进行大写(例如,使用 `用于与 Git 仓库交互的工具。`,而不是 ``用于与 `git` 仓库交互的工具。``)。
- 首字母缩写(即协议、工具等)在没有本地同类物时不应进行翻译。
- 当编写包含键盘按键或键盘快捷键时,建议将它们用反引号括起来,以突出显示在描述中(即 ``打印给定文件的最后几行,并一直读取直到按下 `Ctrl + C```)。 或者,您可以将它们记录为单独的命令,然后选择性地将它们突出显示为占位符(即 `:wq{{Enter}}``:wq<Enter>``:wq(Enter)`)。
## 斜体和粗体
请不要在页面上使用 *斜体*、**粗体** 或任何其他文本样式。这些样式被用于客户端对占位符的修饰。
## 更多信息链接
- 在`更多信息`链接行上,我们更推荐链接到作者提供的命令行参考文档或 man 手册。如果没有提供,请使用 <https://manned.org> 作为所有系统(除 `osx` 和除了 FreeBSD 之外的 BSD 平台)的默认链接。或者,如果命令没有文档页面,您也可以链接到作者的网站或教程页面。
- 对于 `osx`:苹果在 Xcode 中分发内置的 man 手册 [在这里](https://developer.apple.com/documentation/os/reading_unix_manual_pages)。对于那里记录的命令,我们建议使用 https://keith.github.io/xcode-man-pages/, 这是 Xcode 捆绑的所有苹果 man 手册的 HTML。
- **所有链接必须放在尖括号(`<` 和 `>`)中,以便在客户端中正确呈现。**
- 我们更倾向于在翻译页面中直接使用英文页面的更多信息链接。
### 版本化链接
当一个应用程序或发行版的包具有版本化链接时,我们更倾向于链接到文档的最新版本(即 `latest`),或者如果网站自动重定向到文档的最新版本,则不用链接到任何版本。
例如,使用:
- <https://manpages.debian.org/latest/apt/apt.8.html> 而不是 <https://manpages.debian.org/bookworm/apt/apt.8.en.html>
- <https://docs.aws.amazon.com/cdk/latest/guide/cli.html> 而不是 <https://docs.aws.amazon.com/cdk/v2/guide/cli.html>
### Microsoft Learn 链接
当链接到 Microsoft Learn 页面时,请删除地址中的语言环境,因为网站会自动重定向到读者的首选语言环境。例如,使用 <https://learn.microsoft.com/windows-server/administration/windows-commands/cd> 而不是 <https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cd>
此外,如果链接与 PowerShell 命令文档相关,请删除**文档版本指示符**(即文档来源的 PowerShell/module 版本),即地址中以 `?view=` 开头的部分。
- 使用 <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/select-string> 而不是 <https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string?view=powershell-7.4>
- 使用 <https://learn.microsoft.com/powershell/module/powershellget/install-module> 而不是 <https://learn.microsoft.com/en-us/powershell/module/powershellget/install-module?view=powershellget-1.x>
## 帮助和版本命令
- 通常我们将帮助命令和版本命令**按照这个顺序**放在页面的**最后两个**示例中,以突出页面开头更实用的命令。如果需要,它们可以被替换为其他有用的示例。
- 为了保持一致性,我们更推荐使用通用的术语 `显示帮助``显示版本` 来描述这些命令。
- 如果命令在 Windows 等平台中使用了不同的标志,建议记录下帮助和版本示例。
## 特定语言规则
以下部分包含了用于翻译页面的额外的特定语言规则:
## 中西文混排规则
中文、西文、阿拉伯数字写在同一个句子时,需要注意排版。
以下规则适用于中文zh和繁体中文zh_TW
1. 在西文单词和数字前后放置一个空格。
例如:`列出所有 docker 容器` 而不是 `列出所有 docker 容器`
例如:`宽度为 50 个字` 而不是 `宽度为 50 个字`
2. 除了度数和百分比,在数字和单位之间留一个空格。
例如:`容量 50 MB` 而不是 `容量 50MB`
对于度数和百分比:使用 `50°C``50%` 而不是 `50 °C``50 %`.
3. 不要在全角标点符号前后放置空格。
2021-11-07 14:06:48 +00:00
例如:`开启 shell进入交互模式` 而不是 `开启 shell ,进入交互模式`
4. 除了西文长句,一律使用全角标点符号。
例如:`嗨,你好。` 而不是 `嗨,你好.`
5. 当最句子最后一个字符是半角时,使用半角标点符号来结束句子。
2021-11-07 14:06:48 +00:00
例如:`将代码转化为 Python 3.` 而不是 `将代码转化为 Python 3。`
6. 使用精准的专有名词,不要使用非官方的中文缩写。
2021-11-07 14:06:48 +00:00
例如:`Facebook` 而非 `facebook`、`fb` 或 `脸书`
为保持可读性和一致性,将页面翻译成中文时,请尽可能遵守以上 6 条规则。
2021-11-07 14:06:48 +00:00
有关更多中西文混排规则的信息,请参考 [《中文文案排版指北》](https://github.com/sparanoid/chinese-copywriting-guidelines)。