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
完成,等網站地圖更新後,我們就可以在搜索裏找到自己翻譯的文檔了
#後記
其實真的不知道如何才能報答開源社區,到目前為止我的所有知識都是社區所教,如果我學得了一絲一毫的能力,得到了哪怕一點點成就,那都得感謝社區裏的大家。