5

我正在接受i18n/l10n大型项目文档的任务。这个文档是用Sphinx完成的,它有现成的basic support for i18n是否可以从Sphinx文档生成一个.pot文件?

我的问题类似于this other question的问题:即每个锅文件的大部分字符串都是相同的,并且我希望我的翻译人员不要一次又一次重新输入相同的翻译。 我宁愿有一个单一的模板文件

我的问题是不是真的合并文件(这只是一个msgcat *.pot > all.pot远),而是事实 - 对于域特定的语言创建的文档时,工作 - 我要复制和重命名all.pot回原始文件名称。所以我工作的workaroundish方法是:

  1. 生成fileA.potfileB.pot
  2. 合并两成all.pot
  3. cp all.pot fileA.pot + cp all.pot fileB.pot

有一个更清洁的方式做同样的? gettext_compact带给我的只有一半的方式,通过我的目标......

+0

您是否考虑过使用翻译记忆库(具有唯一的源/翻译键值)? – Shervin 2013-09-14 21:24:37

+1

@Shervin - 是的,但是这样做会显着增加架构的复杂性,而不会为结果带来任何好处(通过我目前的解决方法)。 – mac 2013-09-17 09:55:02

回答

1

经过7个多月的大量研究和一些尝试的答案,似乎可以肯定地说 - 至少在当前版本1.1.3-中,不可能从Sphinx文档生成一个.pot文件

在原始问题中描述的解决方法也是在将不同的.pot文件合并到一个文件时自动删除重复字符串最直接的方法。

0

我在这里看到两种可能性:

一是破解狮身人面像,我想你不会想要做的,不是在所有使用域...几个原因。

另一种是:由于您按域进行分割,因此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文件与旧翻译,或pot文件=只有空msgstrings模板)的最新源位置。

+0

我不知道这个解决方案的技术优势是什么,在我目前的破解中,请您澄清一下? – mac 2013-09-18 07:04:06

+0

我明白你现在的破解在最终的fileA.pot和fileB.pot文件中包含所有的字符串,并且认为你想清理它们。如果不是这种情况,我担心我没有正确理解你的问题,你能清楚我们如何提供帮助吗? – mirabilos 2013-09-18 07:56:41

+0

问题的标题已经说明了一切。 :)此外,您的答案似乎复制 - 以更长的方式 - 问题中所述的解决方案已经做了什么(尝试自己,结果.pot已经干净,不需要更多的修改)...或者我遗漏了什么? – mac 2013-09-18 14:33:42

相关问题