在单独的目录中构建已翻译的 Sphinx 文档
Build translated Sphinx docs in separate directories
我正在编写一份将以不同语言发布的文档。这也是我使用 Sphinx 的原因之一。
我知道如何生成翻译版本,但使用 documentation 中描述的设置,生成的文件将替换之前生成的文件。因此,在生成多个翻译时,我必须先将文件移动到另一个目录,然后再进行其他操作。在单独的目录中生成翻译会更实用(也更容易部署)。
有没有办法告诉 Sphinx 或 makefile 当我 运行
make -e SPHINXOPTS="-D language='(lang)'" (format)
必须在 /build/(format)/(lang) 中生成文件?
目前,只使用 HTML 构建(我怀疑是否会使用其他东西)所以如果无法在全球范围内使用,将接受特定的解决方案。
Sphinx 版本为 1.4.6。
我通过用自定义 Python 脚本 (build.py) 替换 Makefile 找到了一个可行的解决方案。
使用 sys.argv
,我模仿 make target
的行为。我为该语言添加了几个选项。使用 subprocess 模块,准确地说是它的 call()
函数,我能够 运行 使用一组选项的命令。该脚本基于一个函数,该函数生成由 subprocess.call()
:
执行的命令
def build_command(target, build_dir, lang=None):
lang_opt = []
if lang:
lang_opt = ["-D", "language='" + lang + "'"]
build_dir += "/" + lang
else:
build_dir += "/default"
return ["sphinx-build", "-b", target, "-aE"] + lang_opt + ["source", "build/" + build_dir]
正是 lang
参数让我能够独立于目标来区分每种语言。在代码的后面,我只是 运行
subprocess.call(build_command(target, target, lang))
使用指定的目标(通常,target = "html"
)以所需的语言构建文档。它还可以模拟 make gettext
:
subprocess.call(build_command("gettext", "locale"))
等等...
可能存在更好的解决方案,但至少这个可以解决问题。
我正在编写一份将以不同语言发布的文档。这也是我使用 Sphinx 的原因之一。
我知道如何生成翻译版本,但使用 documentation 中描述的设置,生成的文件将替换之前生成的文件。因此,在生成多个翻译时,我必须先将文件移动到另一个目录,然后再进行其他操作。在单独的目录中生成翻译会更实用(也更容易部署)。
有没有办法告诉 Sphinx 或 makefile 当我 运行
make -e SPHINXOPTS="-D language='(lang)'" (format)
必须在 /build/(format)/(lang) 中生成文件?
目前,只使用 HTML 构建(我怀疑是否会使用其他东西)所以如果无法在全球范围内使用,将接受特定的解决方案。
Sphinx 版本为 1.4.6。
我通过用自定义 Python 脚本 (build.py) 替换 Makefile 找到了一个可行的解决方案。
使用 sys.argv
,我模仿 make target
的行为。我为该语言添加了几个选项。使用 subprocess 模块,准确地说是它的 call()
函数,我能够 运行 使用一组选项的命令。该脚本基于一个函数,该函数生成由 subprocess.call()
:
def build_command(target, build_dir, lang=None):
lang_opt = []
if lang:
lang_opt = ["-D", "language='" + lang + "'"]
build_dir += "/" + lang
else:
build_dir += "/default"
return ["sphinx-build", "-b", target, "-aE"] + lang_opt + ["source", "build/" + build_dir]
正是 lang
参数让我能够独立于目标来区分每种语言。在代码的后面,我只是 运行
subprocess.call(build_command(target, target, lang))
使用指定的目标(通常,target = "html"
)以所需的语言构建文档。它还可以模拟 make gettext
:
subprocess.call(build_command("gettext", "locale"))
等等...
可能存在更好的解决方案,但至少这个可以解决问题。