Sphinx翻译Flask-PyMongo小记
restructuredText语法编写Sphinx翻译
#环境准备
可能你和我一样早就注意到, 许多Python的文档甚至是翻译文档无论是风格还是结构都十分相似,赏心悦目条理清楚的文档让阅读变得舒心。而其中大部分都是通过Sphinx撰写的,我之前的所有知识,哪怕学到学到一点
Sphinx是一个Python编写的一个非常好用的撰写文档框架,http://www.sphinx-doc.org/en/stable/# 主要使用reStructuredText语法来提供文档控制,也支持Markdown等的文档标记语言。restructuredText语法相较严格正规,好用的Directive Latex集成注释等等使得完全可以满足提供正规出版文档的需求。 这次翻译文档之前需要先熟悉restructuredText语法,语法相较简单,编写文档的话还是要慢慢熟悉。
项目引入
我们先fork一份要翻译的文档项目,比如我们这回的flask-pymongo
为例,因为是初次翻译,避重就轻了一点,其实最好还是和作者联系一下。
拷贝到本地后仅保留docs文件夹即可。然后在github里新建一个仓库。 作者这里之前用的pip,我们使用pipenv创建环境后需要手动安装reqirements.txt的依赖。这是非必须的,作者在这里借助包同步版本号,我们更新并没有那么及时,可以手动更改本地化的版本。
部署完pipenv环境后首先安装Sphinx,以Ubuntu环境为例
$ pipenv install sphinx
$ pipenv install sphinix-intl
这里的sphinix-intl
是本地化翻译用的命令行工具,可以方便我们抽取.po
文件Sphinx的操作基本还是依赖命令行。
另外,可能你在StackOverFlow已经遇到过一个奇葩的缩写了,真的这里带了三个概念
-
国际化 (Internationalzation) 因为
I
与N
之间有18个字母所以缩写为I18n
-
本地化 (Localization) 因为
L
与N
之间有10个字母所以缩写为L10n
-
全球化 (Globalization) 同时进行了国际化与本地话,缩写
G11n
.po文件是GNU下gettext的一套应用规范,类似于Babel等诸多L10n工作都会用得到
这里我们配置下conf.py这里储存了Sphinx的配置,我们添加一个中文支持 vi conf.py:
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
language = 'zh_CN' #语言支持
locale_dirs = ['locale/'] # 目录必须要定义,这里仅是示例
gettext_compact = False #可选项,提供gettext兼容
翻译
整个翻译过程有四个步骤:
- 我们这里提取标记文本,生成POT文件,拓展名即为.pot(Portable Object Template)即可移植对象模板
$ make gettext
如果前方配置正确的话,sphinx可能会这样显示
sphinx-build -b gettext . _build/locale Running Sphinx v1.8.2 loading translations [zh_CN]… done making output directory… … Build finished. The message catalogs are in _build/locale.
_build目录下出现我们定义的locale文件夹,里面对应生成的.pot即是我们要翻译的文档,我这里是index.pot
更新对应语言,提取文件到po列表
$ sphinx-intl update -p _build/locale -l zh_CN
Sphinx可能会这样显示
>Create: locale/zh_CN/LC_MESSAGES/index.po
据Sphinx提示,本地生成了locale文件夹,里面的LC_MESSAGES中的index.po即是我们的po文件,要翻译的片段由三部分组成
#: ../../index.rst:12 #片段所在文件与代码行数
msgid "提取出待翻译的源片段"
msgstr "你要翻译的汉语位置"
用VIM的PO插件po.vim
,或者是Poedit
这世界上翻译有两种,Google翻译和其他翻译,Poedit免费版提供的就是没什么卵用的其他翻译。
编辑需特别注意rst文件格式语法存在的大量半角空格,
编辑后我们make即可生成对应的编译MO文件和PO在同一目录,
可以make html
生成html查看效果。
如果出现这种情况,
系语法错误,对照生成在_build/html里的对应html文件修改
至此,编译完成,我们先将编译好的文档上传到github。然后选择文档托管平台,这里以Read the Docs为例。
##推送至Read the Docs
我们需要进入到 ReadtheDocs官网注册个账号,注册后如果个人界面,点Import a Respository
导入Github项目
命名好名字,进入设置里,Setting里下拖Language选择Simplfied Chinese
或者其他翻译的语言
Advanced Settings
更改好本地化语言与Python3 环境,可以去掉Enable PDF build:
的勾以防止
点Build version
完成,等网站地图更新后,我们就可以在搜索里找到自己翻译的文档了
#后记
其实真的不知道如何才能报答开源社区,到目前为止我的所有知识都是社区所教,如果我学得了一丝一毫的能力,得到了哪怕一点点成就,那都得感谢社区里的大家。