希望在readthedocs上创建支持多语言的文档,效果类似:

通过语言选项,可以切到到不同的语言版本;实现这个目标包含两个主要步骤:

  1. 在本地对文档进行翻译
  2. readthedocs.org上配置翻译

本文假设您已经对sphinx文档生成工具和readthedocs.org文档托管网站有所了解,本文主要专注于多语言的配置上。

在本地对文档进行翻译

翻译之前需要安装一些软件包:

  • sphinx: 文档生成工具
  • sphinx_intl: 多语言工具
  • recommonmark: sphinx支持markdown的插件
  • sphinx_rtd_theme: sphinx的readthedocs主题插件

安装命令:

  1. pip install sphinx sphinx_intl recommonmark sphinx_rtd_theme

我们现在有一个项目了,并且其文档是英文的,并且英文文档已经部署到readthedocs网站上了;以deeptables为例,其.readthedocs.yml文件内容为:

  1. version: 2
  2. sphinx:
  3. configuration: docs/source/conf.py
  4. formats: all
  5. python:
  6. version: 3.6
  7. install:
  8. - requirements: docs/requirements.txt

docs/source/conf.py 的内容为:

  1. import os, sys
  2. sys.path.insert(0, os.path.abspath('..'))
  3. project = 'DeepTables'
  4. copyright = '2020, Zetyun.com'
  5. author = 'Zetyun.com'
  6. # The full version, including alpha/beta/rc tags
  7. release = '0.1.1'
  8. extensions = ['recommonmark',
  9. 'sphinx.ext.autodoc',
  10. 'sphinx.ext.napoleon',
  11. 'sphinx.ext.viewcode'
  12. # 'sphinx.ext.autodoc',
  13. # 'sphinx.ext.mathjax',
  14. # 'sphinx.ext.ifconfig',
  15. # 'sphinx.ext.viewcode',
  16. # 'sphinx.ext.githubpages',
  17. ]
  18. exclude_patterns = []
  19. #html_theme = 'alabaster'
  20. html_theme = 'sphinx_rtd_theme'
  21. pygments_style = 'sphinx'
  22. templates_path = ['_templates']
  23. source_suffix = ['.rst', '.md']
  24. master_doc = 'index'
  25. html_static_path = ['_static']
  26. language = 'en' # ['en', 'zh_CN'] #
  27. # One entry per manual page. List of tuples
  28. # (source start file, name, description, authors, manual section).
  29. man_pages = [
  30. (master_doc, 'deeptables', 'DeepTables Documentation',
  31. [author], 1)
  32. ]
  33. texinfo_documents = [
  34. (master_doc, 'DeepTables', 'DeepTables Documentation',
  35. author, 'DeepTables', 'One line description of project.',
  36. 'Miscellaneous'),
  37. ]

源码精简后的目录的结构:

  1. ├── deeptables
  2.    ├── __init__.py
  3. ├── docs
  4.    ├── Makefile
  5.    ├── build
  6.    ├── make.bat
  7.    ├── requirements.txt
  8.    └── source
  9.    ├── conf.py
  10.    ├── index.rst
  11. ├── examples
  12. ├── requirements.txt
  13. ├── setup.cfg
  14. ├── setup.py
  15. └── tests

文档访问地址:

http://deeptables.readthedocs.io/

其中docs目录是其文档目录。

开始操作:

  1. 创建一个新项目deeptables-docs-zh_CN,并把原来项目的docs复制过来
  1. mkdir deeptables-docs-zh_CN
  2. cp -r deeptables/docs deeptables-docs-zh_CN
  3. cp deeptables/.readthedocs.yml deeptables-docs-zh_CN
  1. 配置新项目中的conf.py
  1. language = 'zh_CN' # 设置新项目的语言与中文
  2. locale_dirs = ['locale/'] # 设置本地化数据目录
  1. 然后在source目录执行命令生成pot文件
  1. cd source
  2. sphinx-build -b gettext . locale
  3. 正在运行 Sphinx v3.0.0
  4. 正在加载翻译 [zh_CN]... 完成
  5. 创建输出目录... 完成
  6. ...

如果报错找不到项目里的模块,可以把自己的项目加入到PYTHONPATH中:

  1. export PYTHONPATH=/path/to/module

正常情况下会生成locale目录,里面有很多pot文件:

  1. tree locale
  2. locale
  3. ├── deeptables.datasets.pot
  4. ├── deeptables.eda.pot
  5. ├── deeptables.ensemble.pot
  6. ├── deeptables.fe.pot

然后生成我们需要编辑的po文件:

  1. sphinx-intl update -p locale -l zh_CN
  2. Create: locale/zh_CN/LC_MESSAGES/model_config.po
  3. Create: locale/zh_CN/LC_MESSAGES/deeptables.preprocessing.po
  4. Create: locale/zh_CN/LC_MESSAGES/faq.po

打开index.po文件进行翻译:

  1. # SOME DESCRIPTIVE TITLE.
  2. # Copyright (C) 2020, Zetyun.com
  3. # This file is distributed under the same license as the DeepTables package.
  4. # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
  5. #
  6. #, fuzzy
  7. msgid ""
  8. msgstr ""
  9. "Project-Id-Version: DeepTables \n"
  10. "Report-Msgid-Bugs-To: \n"
  11. "POT-Creation-Date: 2020-04-13 17:23+0800\n"
  12. "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  13. "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  14. "Language-Team: LANGUAGE <LL@li.org>\n"
  15. "MIME-Version: 1.0\n"
  16. "Content-Type: text/plain; charset=utf-8\n"
  17. "Content-Transfer-Encoding: 8bit\n"
  18. "Generated-By: Babel 2.8.0\n"
  19. #: ../index.rst:62
  20. msgid "Quick-Start"
  21. msgstr "快速开始"

其中msgid是我们要翻译的内容,msgstr是翻译结果,比如把Quick-Start翻译成快速开始:

  1. #: ../index.rst:62
  2. msgid "Quick-Start"
  3. msgstr "快速开始"

其中po,pot,mo文件的关系如图:

为了给我们生成可以人工编写的po文件,需要先生成pot文件,pot文件可以从rst/markdown文件生成。

生成的po文件可以格式化成mo文件,最终再结合最开始rst/markdown文件生成翻译后的html。

所以readthedocs进行构建生成html时仅需要rst/md和po文件,其他的文件我们可以通过gitignore忽略上传。

  1. 构建中文文档

    在docs目录执行make html:
  1. make clean
  2. make html
  3. 正在运行 Sphinx v3.0.0
  4. 正在加载翻译 [zh_CN]... 完成
  5. 创建输出目录... 完成
  6. WARNING: html_static_path 指向的 '_static' 不存在
  7. 构建 [mo]: 1 po 文件的目标文件已过期
  8. 写入输出... [100%] locale/zh_CN/LC_MESSAGES/index.mo
  9. ...
  10. 复制静态文件... ... 完成
  11. copying extra files... 完成
  12. dumping search index in Chinese (code: zh)... 完成
  13. dumping object inventory... 完成
  14. build 成功, 111 warnings

然后我们在生成的html目录查看启动web服务查看效果:

  1. (deeptables) docs cd build/html
  2. (deeptables) html python3 -m http.server 8000

访问http://localhost:8000/quick_start.html查看效果。

以上步骤可以参考sphinx官方文档:

http://www.sphinx-doc.org/en/master/usage/advanced/intl.html

  1. deeptables-docs-zh_CN放到git中维护,方便后面发布到rtd网站上。

readthedocs.org上配置翻译

经过上一章的配置,我们应该拥有两个不同语言的项目文档,接着我们把这两个文档整合到一个域名上。

readthedocs.org支持多语言的方法是配置多个项目。

需要先在rtd在创建一个项目deeptables-docs-zh_CN,rtd的项目列表如下:



然后配置新项目的的语言为中文:

其git地址等其他信息请妥善配置。

此处请注意,在conf.py中配置lnguage=zh_CN没有用的,需要在页面上进行配置。接着可以构建一下项目,验证文档是否是中文的了:

ttps://deeptables.readthedocs.io/zh_CN/latest/

如图:

接着就可以配置我们的主文档项目关联这个翻译文档了。

在主文档deeptables项目的设置中找到翻译选项,然后把项目加入deeptables-docs-zh_CN



最后返回主文档https://deeptables.readthedocs.io/zh_CN/latest/就可以选择语言了。

参考文档

readthedocs网托管持多语言文档的更多相关文章

  1. KOTLIN开发语言文档(官方文档) -- 入门

    网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1.   入门 1.1.  基本语法 1.1.1.   定义包 包说明应该在源 ...

  2. 多国语言文档识别 ABBYY FineReader Corporate v12.0.101.388.7z 绿色破解版

    ABBYY 是一家俄罗斯软件公司,在文档识别,数据捕获和语言技术的开发中居世界领先地位.其获奖产品 FineReader OCR 软件可以把静态纸文件和 PDF 文件转换成可管理的电子数据,可以大大节 ...

  3. 怎么让OCR文字识别软件转换别的语言文档

    ABBYY PDF Transformer+让您可创建或转换希伯来语.意第绪语.日语.中文.泰语.韩语和阿拉伯语的文档.那么如何顺利使用这些复杂语言文字呢?小编教你两步骤轻松快速处理包含以下复杂语言文 ...

  4. Kotlin开发语言文档(官方文档)-- 目录

    开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...

  5. DXperience-12.1.5 官网下载+注册破解+帮助文档

    安装包 DXperience 12.1.5 Universal 帮助文档: DXperienceHelp2010 DXperienceHelp2010-12.1.5.exe DXperienceHel ...

  6. KOTLIN开发语言文档(官方文档) -- 2.基本概念

    网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2.   基本概念 2.1.  基本类型 从可以在任何变量处理调用成员函数和属性 ...

  7. 使用sphinx制作接口文档并托管到readthedocs

    此sphinx可不是彼sphinx,此篇是指生成文档的工具,是python下最流行的文档生成工具,python官方文档即是它生成,官方网站是http://www.sphinx-doc.org,这里是一 ...

  8. Hortonworks官网文档怎么找?

    Hortonworks官网文档怎么找? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 俗话说,授人予鱼不如授人予渔,网上部署HDP的部署方式的博客有很多,看得你是眼花缭乱的.其实万 ...

  9. 使用gitlab runner 进行CI(四):使用Gitlab Page托管项目文档

    目录 1.什么是Gitlab Pages 2.开启Gitlab Pages 3.基本过程 4.托管markdown文档 4.1 安装sphinx等依赖 4.2 配置项目的sphinx配置 4.3 编写 ...

随机推荐

  1. npm run build时卡住不动了...

    在build文件夹里有个check-versions.js. if (shell.which('npm')) { versionRequirements.push({ name: 'npm', cur ...

  2. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  3. 还记得第一个看到的Flutter组件吗?

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 MaterialApp 在学习Flutter的过程中我们第 ...

  4. python的C扩展调用,使用原生的python-C-Api

    1.在文件第一行包含python调用扩展的头文件 #include <Python.h> 2.用原生C写好需要调用的函数 int add_one(int a){ ; } 3.用python ...

  5. Java中的Xml配置文件(新手)

    Java中的Xml配置文件,本文是转发转发转发!重要的事情说三遍 一:概念 1.XML  Extensible markup Language 可拓展标记语言 2.功能:存储数据(配置文件,在网络中传 ...

  6. mysql主从复制(主从同步)

    mysql主从同步 1.mysql主从同步(复制)概念 1. 将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的. 2. 复制过程中一个服务器充当主服务器,而一个或多个 ...

  7. git提交更改都是一个作者

    为什么提交到github的commit都是一个作者 参考链接 重要知识点讲解 问题如下所示 git是分布式去中心化的管理系统 ssh秘钥对生成.并把id_rsa.pub加入github.com中(这个 ...

  8. M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音

    M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...

  9. poj1088 滑雪 dp+dfs记忆化

    简单的搜索,不必多说了,初始状态下每个点能到达的长度是1,它本身.还有,注意关掉文件重定向,被坑好多次了. 代码如下: #include<cstdio> #include<algor ...

  10. CF1324A Yet Another Tetris Problem 题解

    原题链接 简要题意: 再简要一波: 每次可以把一个数增加 \(2\),问最后能不能让所有数相等.(也就是抵消掉) 什么?题意变成这样子还做个啥? 你会发现,必须所有数的奇偶性都相同,才可以:反之就不可 ...