2009-04-11 40 views
21

我目前正在用Python編寫一個應用程序,並且需要爲它提供本地化。生成本地化文件的最簡單方法

我可以使用gettext及其附帶的實用程序來生成.po和.mo文件。但是,逐個編輯每種語言的.po文件似乎有點乏味。然後,爲每種語言創建目錄並一個接一個地生成.mo文件看起來好像過度。最終的結果是這樣的:

/en_US/LC_MESSAGES/en_US.mo 
/en_CA/LC_MESSAGES/en_CA.mo 
etc. 

我可能是錯的,但它似乎有一個更好的方法來做到這一點。有沒有人有任何我還沒有找到的工具,技巧或一般知識?

在此先感謝!

編輯:爲了更清楚一點,我正在尋找一些加快這個過程。因爲它已經非常簡單了。例如,在.NET中,我可以生成所有需要轉換爲excel文件的字符串。然後,翻譯人員可以填寫excel文件併爲每種語言添加列。然後,我可以使用xls2resx來生成語言資源文件。有沒有類似gettext的東西?我意識到我可以編寫一個腳本來創建和讀取csv並生成文件 - 我只是希望已經有了一些東西。

回答

26

我剛剛做了這一個項目我的工作,爲我們的過程是這樣的:

首先,我有一個包含源文件需要翻譯列表的POTFILES.in文件。我們實際上有兩個文件(例如admin.in和user.in),因爲管理界面並不總是需要翻譯。因此,我們只能向譯員發送包含用戶看到的字符串的文件。

運行以下命令將創建一個從POTFILES.in一個.POT模板:

xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot 

運行從PO /目錄下,這應該是你的項目的子目錄和包含POTFILES上面的命令。在文件中。 .pot文件與.po文件具有完全相同的格式,但是它是不包含翻譯的模板。無論何時將新的可轉換字符串添加到源文件中,您都會創建一個新模板。

要更新已經翻譯的.po文件,並添加新的字符串給他們,運行:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot 

在上面的例子中,我禁用模糊匹配,因爲我們的字符串是一個爛攤子,它比好做更多的傷害。我也禁用備份文件,因爲一切都在這裏顛覆。對每種語言運行上述命令,在這種情況下,我更新了丹麥語翻譯。

最後運行的msgfmt從.po文件創建的.mo文件:

msgfmt nl.po --output-file nl.mo 

Ofcourse,你不會想每次手動運行這一點,所以創建一些腳本(或最好的一個或多個的Makefile )爲你做這個。

請注意,您的目錄佈局與我的情況稍有不同,因此您必須稍微調整輸出文件名/路徑,但步驟應該相同。

4

它避開了我如何在不編輯每種語言的.po文件的情況下實現真正的翻譯?魔法?

編輯(後評論) - 如何自動的.po文件的生成:

我不使用gettext,但是從wiki page它看起來像你只需要調用

msginit --locale = XX --input = name.pot

爲要支持的每一種語言。我會生成一個腳本來生成所有的語言文件,並將它們提供給翻譯人員,並在他們返回時運行他們的msgfmt

+0

顯然,我想要編輯.po文件,但是一個一個地打開它們是非常浪費時間的。沒有辦法在電子表格或其他語言中定義所有語言和翻譯,然後生成.po文件? – landyman 2009-04-11 03:37:39

3

使用腳本。假設您的源代碼位於$ SRC目錄中,因此爲i18n文件(pot,po,mo等)創建目錄$ SRC/po。然後創建文件$ SRC/po/POTFILES.in,其中用gettext函數調用指定源代碼文件的路徑。它可能看起來像:

[encoding: UTF-8] 
./main.cpp 
./plugins/list.cpp 

現在你可以使用下面的命令(目錄$ SRC內):

要更新主文件messages.pot:

intltool-update --pot --gettext-package=messages --verbose 

對於來自合併更改messages.pot到fr。PO文件,例如:

msgmerge -U fr.po messages.pot 

要生成MO文件使用命令:

當然
msgmerge -o - fr.po messages.pot | msgfmt -c -o fr/LC_MESSAGES/programname.mo - 

目錄FR/LC_MESSAGES /必須在調用之前創建,也可以刪除現有的FR/LC_MESSAGES/programname.mo執行前

爲了加速進程,將所有這些命令放入相應的.sh文件中。

2

我的建議是django-rosetta,它給你一個基於Web的界面來編輯你的翻譯。 Django根本不需要參與你的應用,你只是將它用於在線.PO編輯工具。

另一個有趣的新翻譯網站,我相信它是使用Django/Pinax構建的,但是我不確定它是否允許直接編輯.PO文件。

6

您可以使用Transifex,由很多Python項目(Django,Mercurial)使用。它有一個基於Web的編輯器和用於自動化的命令行客戶端,並且還支持.NET,如果這可以提供幫助的話。

聲明:我是Transifex項目負責人。

+0

Transifex是要走的路!我們在http://www.bugsense.com上使用它,我們不能想到任何其他方式來管理本地化 – PanosJee 2013-04-13 11:56:49

相關問題