2011-11-27 54 views
6

使用gettext,消息的原始(通常是英文)文本用作翻譯的消息密鑰(「msgid」) 。這意味着每次 原始文本更改時,必須在所有.po文件中更新msgid。我可以自動更新gettext的.po文件中的msgids以進行微不足道的文本更改嗎?

對於文本的真實更改,這顯然是不可避免的,因爲翻譯器必須更新翻譯。

但是,如果原件的更改沒有改變其含義, 重新翻譯是superflous(例如更改標點符號,空白 更改或糾正拼寫錯誤)。

有沒有辦法在這種情況下自動更新.po文件?

我試過了xgettext & msgmerge使用(與模糊匹配開啓),但 模糊匹配有時會失敗,再加上這將產生大量的醜陋 「#,模糊」的標誌。

:有一個類似的問題: How to efficiently work with gettext PO files when making small edits to large text values 然而,它是關於大串,因此一個更具體的問題。

+0

感謝引用類似的問題禮貌;我同意,也許有不同的答案,不會在重複的警察玩 - 但我會說,http://stackoverflow.com/a/3798064/179583似乎也適用於此。 – natevw

回答

2

避免此問題的一種方法是單獨保留msgids,爲原始語言創建一個.po文件並在其中進行修復。

它總是讓我感到更多的是解決問題而不是正確的解決方法。對於下一次迭代(肯定會有更多的msgid更改),將更改msgid,並且翻譯人員會按照其正常更新翻譯它,或者在更改msgid時手動更新每種語言。

2

我在對django項目進行微小更改時遇到了這個問題。我做的是以下幾點:

  1. 在代碼中更改消息。
  2. 運行查找並替換所有翻譯文件(「django.po」),用新的替換舊的消息(msgid)。
  3. 運行django-admin makemessages。

如果我已經做對了,最後一步是超快的(即,你已經完成了對gettext的更改)。 django使用gettext實用程序,因此應該如何製作消息文件無關緊要。

我查找和替換像這樣: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g'http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

+1

是的,使用搜索和替換是另一個明顯的解決方案(與dsas使用固定msgids的解決方案一起)。但是,如果您需要複製msgids(在多個位置使用原始字符串,並且僅進行一些更改),則搜索和替換可能會非常複雜,如果某些msgids是其他子字符串,或者也作爲翻譯的一部分出現。所以這不是一個通用的解決方案。 – sleske

相關問題