跳到主要内容

有用的正则表达式

目前,我们还不支持在 pyDocusaurus 实现自动翻译功能。因此,用户需要像为那些手写的文档一样,为程序生成的文档撰写翻译。

为了降低工作量,这片文章介绍了如何开始新的翻译,以及如何透过正则表达式来快速替换掉一些文字。

信息

本文面向的是需要为自己的文档撰写翻译的读者。

如果你不打算这样做,那么你可以跳过本文。

1. 开始新的翻译​

运行以下命令,以更新当前的翻译内容。如果之前已经存在翻译,正文又有新的内容时,新的(空白)翻译条目会自动添加到已有的翻译中。

yarn write-translations --locale zh-cn --messagePrefix "(ZH-CN) "
危险

你可能会在i18n/zh-cn/docusaurus-plugin-content-docs/current.json发现以下的建议翻译条目。然而,你需要删掉这一条并保持其“非翻译”的状态,这是因为这条翻译会重载掉在docusaurus.config.ts手动设置的docs.versions.current.label。

"version.label": {
"message": "(ZH-CN) 预览版",
"description": "The label for version current"
}

在首次撰写翻译的时候,还需要透过以下命令复制当前文档:

mkdir -p i18n/zh-cn/docusaurus-plugin-content-docs/current
cp -r docs/. i18n/zh-cn/docusaurus-plugin-content-docs/current

运行以下命令,可以启动一个局域网内的开发服务器,且待测试网站的语言将设为指定语言:

yarn start --host $(hostname -I) --port 3000 --locale zh-cn

透过以下命令,可以更新标题的链接。

yarn write-heading-ids . i18n/zh-cn/docusaurus-plugin-content-docs/current --syntax mdx-comment --overwrite
危险

注意,以上命令只应该在撰写新翻译的时候调用,因为标题链接的生成只能依赖于英语文档。

如果追加了新的文档,且该命令需要重新执行,可以删去--overwrite选项,这会令以上命令只在那些没有 ID 的章节标题起效。

2. 有用的正则表达式​

程序是生成的文档包含了大量的重复标题、以及重复的表格标题行。VS Code 允许用户指定某个目录,并只在该目录中搜索和批量替换文字。本文将会以“撰写中文文档”为例,展示了在替换文字的时候,可以用到的一些正则表达式。

首先,用户需要限定 "files to include" 的作用域:

./docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/apis

其后,用户可以透过以下命令,替换掉所有相关文字。注意此时不需要开启正则表达式。

待搜索文字
替换文字
## Modules {/* #modules## 模块 {/* #modules
## Classes {/* #classes## 类 {/* #classes
## Functions {/* #functions## 函数 {/* #functions
## Aliases {/* #aliases## 别名 {/* #aliases
## Requires {/* #requires## 输入 {/* #requires
## Returns {/* #returns## 输出 {/* #returns
## Yields {/* #yields## 迭代 {/* #yields
## Methods {/* #methods## 方法 {/* #methods
## Arguments {/* #arguments## 参数 {/* #arguments
## Fields {/* #fields## 字段 {/* #fields
## Enums {/* #enums## 枚举成员 {/* #enums
## Properties {/* #properties## 属性 {/* #properties
## Operators {/* #operators## 运算符 {/* #operators
## Protocol methods {/* #protocol-methods## 协议方法 {/* #protocol-methods
## Protocol properties {/* #protocol-properties## 协议属性 {/* #protocol-properties
## Protocol operators {/* #protocol-operators## 协议运算符 {/* #protocol-operators
## Abstract methods {/* #abstract-methods## 抽象方法 {/* #abstract-methods
## Abstract properties {/* #abstract-properties## 抽象属性 {/* #abstract-properties
## Abstract operators {/* #abstract-operators## 抽象运算符 {/* #abstract-operators
Initialization function is not specified.该类未指定初始化方法。
No argument is needed.该类的初始化无需参数。

还可以透过以下命令,替换掉所有相关文字。注意此时正则表达式开启。

待搜索表达式
用于替换的表达式
{/\* #iconobjtype-type[^-]*-{/* #-
\|(s+)Member(s+)\|(s+)<center>Description</center>(s+)\||$1成员$2|$3<center>说明</center>$4|
\|(s+)Name(s+)\|(s+)<center>Description</center>(s+)\||$1参数$2|$3<center>说明</center>$4|
\|(s+)Name(s+)\|(s+)Type(s+)\|(s+)<center>Description</center>(s+)\||$1参数$2|$3类型$4|$5<center>说明</center>$6|
\|(s+)Name(s+)\|(s+)Type(s+)\|(s+)Required(s+)\|(s+)<center>Description</center>(s+)\||$1参数$2|$3类型$4|$5必选$6|$7<center>说明</center>$8|
\|(s+)Name(s+)\|(s+)Type(s+)\|(s+)Value(s+)\||$1成员$2|$3类型$4|$5值$6|