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

相關問題