我有几个 python 项目都依赖于同一个核心项目。我已经使用 sphinx 为所有这些设置了文档,以便所有子项目都包含在核心项目中编写的文档+每个子项目自己的文档。
这是通过简单地从子项目的文档目录添加一个符号链接(symbolic link)到核心项目文档目录来完成的:
$ cd /path/to/subproject/a/docs
$ ln -s /path/to/coreproject/docs core
$ make html
只要我只用一种语言编写文档,这就会很好用。现在我正在尝试使用
sphinx-intl
用多种语言编写相同的文档。我应该如何配置这个?我试过设置
locale_dirs = ['locale/', 'core/locale/']
然后从我的子项目中运行以下命令:$ make gettext
$ sphinx-intl update -p _build/gettext -l sv
$ make -e SPHINXOPTS="-D language='sv'" html
但它似乎没有在
.po
中找到我的任何更改位于核心项目中的文件。
最佳答案
我认为您的项目结构不适用于 sphinx 的 i18n,因为:
/path/to/subproject/a/docs
需要像这样的语言环境文件:index.po
和 core.po
. /path/to/subproject/a/docs/core/locale
提供index.po
而不是 core.po
我认为如果您将其设置如下,您可以获得预期的行为:
gettext_compact = True
致所有conf.py
. $ cd /path/to/subproject/a/docs/locale/sv/LC_MESSAGES/
$ ls
core index.po
$ rm -R core
$ ln -s /path/to/coreproject/docs/locale/ja/LC_MESSAGES core
subproject
期待 core/*
每个 docs/core
的消息目录文件文件,现在有。但是,我认为这种解决方案不是正确的方法(也不是正确的方法),但它在我的环境中有效。
程序是:
mkdir -p docs/coreproject
cd docs/coreproject
sphinx-quickstart -q -p 1 -v 1 -a 1 docs
cd .. # go to docs
mkdir -p subproject/a
cd subproject/a
sphinx-quickstart -q -p 2 -v 2 -a 2 docs
cd docs/
ln -s ../../../coreproject/docs core
mkdir locale
cd ../../../coreproject/docs
mkdir locale
make gettext
sphinx-intl -p _build/gettext -l sv
sphinx-intl update -p _build/gettext -l sv
vi locale/sv/LC_MESSAGES/index.po # modify po
make html SPHINXOPTS="-D language=sv"
# confirm 'core' _build/html/index.html
cd ../subproject/a/docs/
make gettext
sphinx-intl update -p _build/gettext -l sv
cd locale/sv/LC_MESSAGES/
ls
rm -R core
ln -s ../../../../../../coreproject/docs/locale/sv/LC_MESSAGES core
vi index.po # another modify
cd ../../..
make html SPHINXOPTS="-D language=sv"
# confirm 'sub' _build/html/index.html
项目文件:https://www.dropbox.com/s/cd65jt4h0x31cse/sphinx-intl-issue-20-docs.tar.gz?dl=0
关于多项目 sphinx 设置的国际化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440506/