是否可以从Sphinx文档生成单个.pot文件?

7 投票
3 回答
523 浏览
提问于 2025-04-17 19:04

我正在为一个比较大的项目的文档进行国际化(i18n)和本地化(l10n)工作。这个文档是用Sphinx写的,Sphinx自带了一些基本的国际化支持。

我遇到的问题和另一个问题类似:就是每个.pot文件中的很多字符串都是一样的,我希望我的翻译人员不用重复输入相同的翻译。我更希望能有一个单独的模板文件

我的问题其实不是合并文件(这只是个msgcat *.pot > all.pot的事),而是为了让不同语言的文档能正常工作,我必须把all.pot复制并重命名回原来的文件名。所以我现在的工作方式是:

  1. 生成fileA.potfileB.pot
  2. 把这两个文件合并成all.pot
  3. cp all.pot fileA.potcp 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文件合并成一个时,自动去除重复的字符串。

撰写回答