是否可以从Sphinx文档生成单个.pot文件?
我正在为一个比较大的项目的文档进行国际化(i18n)和本地化(l10n)工作。这个文档是用Sphinx写的,Sphinx自带了一些基本的国际化支持。
我遇到的问题和另一个问题类似:就是每个.pot文件中的很多字符串都是一样的,我希望我的翻译人员不用重复输入相同的翻译。我更希望能有一个单独的模板文件。
我的问题其实不是合并文件(这只是个msgcat *.pot > all.pot
的事),而是为了让不同语言的文档能正常工作,我必须把all.pot
复制并重命名回原来的文件名。所以我现在的工作方式是:
- 生成
fileA.pot
和fileB.pot
- 把这两个文件合并成
all.pot
cp all.pot fileA.pot
和cp all.pot fileB.pot
有没有更简单的方法来做到这一点?gettext_compact只能帮我做到一半...
3 个回答
0
在你的 conf.py
文件中添加以下内容:
gettext_compact = "docs"
0
这里有两种可能性:
一种是对Sphinx进行修改,让它完全不使用域……我想你可能不想这样做,原因有很多。
另一种是:既然你是按域来划分的,那么msggrep的-M选项看起来可以满足你的需求。否则,-N选项也可以用来根据源文件进行过滤。
也就是说,如果明显的解决方案不奏效:
- 生成fileA.pot和fileB.pot(这里也可以看看msguniq)
- 把它们合并成all.pot,然后交给翻译人员
for x in file*.pot; do msgmerge -o ${x%t} all-translated.po $x; done
根据TFM的说法,msgmerge只会从它的第一个参数(翻译后的po文件)中获取(应该是更新的)翻译,这些翻译会与第二个参数(包含旧翻译的po文件,或者是只有空msg字符串的pot文件)中的最新源位置相匹配。
3
经过七个多月的深入研究和几次尝试回答,似乎可以肯定地说,至少在当前的版本1.1.3中,从Sphinx文档生成一个单独的.pot
文件是不可行的。
原问题中提到的解决方法也是最简单的,它可以在将不同的.pot
文件合并成一个时,自动去除重复的字符串。