如何避免 Google Translate 翻译不需要的 markdown 文档块

How to avoid the case that Google Translate translates undesirable blocks of markdown documents

我想创建一个工具来批量翻译许多使用 NodeJS 翻译 Google 中的 API 以 Markdown 格式编写的文档。

例如,假设我有一个名为 ansible-document.en.md 的文件,其中包含以下内容。

At first, insert the following tasks.

<!-- more -->

```YAML
- name: Unlock sudo
lineinfile:
    dest: /etc/sudoers
    regexp: '{{ ansible_env.USER }} ALL=\(ALL\) NOPASSWD: ALL'
    line: '{{ ansible_env.USER }} ALL=(ALL) NOPASSWD: ALL'
    validate: visudo -cf %s
become: yes
```

虽然此处省略,但本文档中也包含 Frontmatter 格式的元数据。

我想从该文档创建一个名为 ansible-document.zh.md 的文件。 因此,当我将文档发送到 API of Google Translate via google-translate-api package 时,我收到了以下不良结果。

首先,插入以下任务。

<! - 更多 - >

```YAML
- 名称:解锁sudo
lineinfile:
    dest:/ etc / sudoers
    正则表达式:'{{ansible_env.USER}} ALL = \(ALL \)NOPASSWD:ALL'
    行:“{{ansible_env.USER}} ALL =(ALL)NOPASSWD:ALL'
    验证:visudo -cf%s
成为:是的
```

我认为解决这个问题需要 6 个步骤,而不是撕破我的头发。

  1. 将文档分解成块。
  2. 获取一对句子和一个块的信息。例如,块是标题、段落、代码块还是其他。
  3. 如果该块不是代码块或 Frontmatter 的键,请将文本发送到 Google 翻译的 API。
  4. 用收到的句子覆盖该块中的句子。
  5. 再次以Markdown格式构建
  6. 另存为新文件名。

其中1、2、4、5感觉特别难。 请问有没有满足这些功能的NodeJS库?

另外,如果你有上面更好的方法,请告诉我。

感谢您的阅读。

虽然和假设的方法不同,但我解决了,会报告答案。

  1. 将 Markdown 转换为 HTML
  2. 将其作为HTML发送至Google翻译API.
  3. 将收到的 HTML 转换为 Markdown。

代码块不再被Google翻译破坏!
不过也有一些小问题。

  1. 当翻译为HTML时,连续的白色space包括换行被转换为一个space。代码块也不例外。
  2. 同样,在“”和“
    ”之间插入了一个space,无法识别是代码块的栅栏。

这些问题比这个问题更容易解决。
只需使用 DOM 和正则表达式替换换行和缩进。 例如“
”和“ ”。

感谢您思考答案。