如何避免Google Translate转换不需要的降价文档块的情况

时间:2018-01-25 16:49:21

标签: javascript node.js markdown google-translate

我想创建一个工具,使用谷歌翻译的API和NodeJS批量翻译以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的文件。 因此,当我通过google-translate-api包将文档发送到Google翻译的API时,我收到了以下不良后果。

首先,插入以下任务。

<! - 更多 - >

```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. 另存为新文件名。
  7. 其中,1,2,4和5感觉特别困难。 如果有一个满足这些功能的NodeJS库,请告诉我吗?

    此外,如果您有更好的方法,请告诉我。

    谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

虽然它与假定的方法不同,但我解决了并将报告答案。

  1. 将Markdown 转换为HTML
  2. 以HTML格式发送到Google翻译API。
  3. 将收到的HTML转换为Markdown。
  4. Google Translate不再销毁代码块!
    但是,有一些小问题。

    1. 当翻译为HTML时,包括换行符的连续空格将转换为一个空格。代码块也不例外。
    2. 同样,在“&lt; code&gt;”和“&lt; pre&gt;”之间插入一个空格,这使得无法识别它是代码块的栅栏。
    3. 这个问题比这个问题更容易解决 只需使用DOM和正则表达式替换换行和缩进。 例如“&lt; br&gt;”和“&amp; nbsp;”。

      感谢您的回答。