2009-04-11 19 views
21

現在、私はPythonでアプリケーションを作成しており、ローカリゼーションを提供する必要があります。ローカライゼーションファイルを生成する最も簡単な方法

私はgettextとそれに付属のユーティリティを使って.poと.moファイルを生成できます。しかし、各言語の.poファイルを1つずつ編集するのはちょっと面倒です。そして、各言語用のディレクトリを作成し、.moファイルを1つずつ生成することは、過度のようです。最終的な結果のようなものであること:

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

私が間違っているかもしれないが、これを行うには良い方法があるように持っているように思えます。誰も私がまだ見つけていないツール、トリック、または一般的な知識を持っていますか?

ありがとうございます!

編集:もう少し明確にするために、私はプロセスをスピードアップする何かを探しています。それはすでにかなり簡単ですから。たとえば、.NETでは、Excelファイルに変換する必要があるすべての文字列を生成できます。その後、翻訳者はExcelファイルを記入し、各言語の列を追加することができます。次に、xls2resxを使って言語リソースファイルを生成することができます。 gettextのようなものはありますか?私はcsvを作成して読み込み、ファイルを生成するためのスクリプトを書くことができたことを理解しています。すでに何かがあることを期待していました。

答えて

26

私はちょうど、私が働いているプロジェクトのためにこれをやった私たちのためのプロセスは、このようなものです:

まず、私が翻訳を必要とするソースファイルのリストが含まれているPOTFILES.inファイルを持っています。管理インターフェースでは必ずしも翻訳が必要なわけではないため、実際には2つのファイル(admin.inやuser.inなど)があります。したがって、翻訳者には、ユーザーが見る文字列を含むファイルのみを送信できます。

POTFILES.inから.POTテンプレートが作成されます、次のコマンドを実行:

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

を実行し、プロジェクトのサブディレクトリであるとPOTFILESが含まれている必要があり、PO /ディレクトリから、上記のコマンドを。ファイル内。 .potファイルは.poファイルとまったく同じ形式ですが、変換を含まないテンプレートです。新しい翻訳可能な文字列がソースファイルに追加されるたびに、新しいテンプレートを作成します。すでにの.po翻訳されたファイルを更新し、それらに新しい文字列を追加し、実行するには

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

上記の例では、当社の文字列が混乱しているし、それが良いよりも害をしたとして、私は、ファジー・マッチングを無効にします。私はまた、バックアップファイルを無効にしました。すべてがここで破壊されているからです。言語ごとに上記のコマンドを実行します。この場合、デンマーク語の翻訳を更新しました。 .poファイルから.moのファイルを作成するために、msgfmtを実行

最後に:

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

勿論、あなたは毎回手動でこれを実行したいので、いくつかのスクリプト(または、好ましくは、1つのまたは複数のMakefileを作成しないでしょう)あなたのためにこれを行うには。

あなたのディレクトリレイアウトは私の状況と少し異なりますので、出力ファイル名/パスを少し調整する必要がありますが、手順は同じでなければなりません。

4

各言語の.poファイルを編集せずに実際の翻訳をどのようにしたいのですか?マジック?

編集(コメントの後) - .poファイルの生成を自動化する方法:

私はGettextパッケージを使用しませんが、あなただけ

を呼び出すために持っているよう wiki pageからそれが見えますあなたがサポートするすべての言語の

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

。私はすべての言語ファイルを生成し、翻訳者に渡すスクリプトを生成し、それらを戻すと、msgfmtが実行されます。

+0

明らかに、私は.poファイルを編集したいが、それを一つずつ開くのは非常に時間がかかる。スプレッドシートなどですべての言語と翻訳を定義し、.poファイルを生成する方法はありませんか? – landyman

3

スクリプトを使用します。あなたのソースコードが$ SRCというディレクトリにあると仮定して、i18nファイル(pot、po、moなど)用のディレクトリ$ SRC/poを作成します。次に、ファイル$ SRC/po/POTFILES.inを作成し、gettext関数呼び出しでソースコードファイルへのパスを指定します。今、あなたは(ディレクトリ$ SRC内部の)次のコマンドを使用することができます

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

マスターファイル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ファイルに置きます。

3

Translate Toolkitは、さまざまなpoファイルの変換(たとえばpo2csv)を試みることができます。子プロジェクトPootleは、ウェブ上での翻訳の管理を可能にします。

2

私の提案は、翻訳を編集するためのWebベースのインターフェイスを提供するdjango-rosettaです。 Djangoはあなたのアプリに全く関与する必要はなく、オンラインの.PO編集機能のためだけに使用しています。

Django/Pinaxを使用して作成したと思われる別の興味深い新しい翻訳サイトはTransifexですが、.POファイルを直接編集できるかどうかはわかりませんが。

6

かなり多くのPythonプロジェクト(Django、Mercurial)で使用されているTransifexを使用できます。それは自動化のためのWebベースのエディタとコマンドラインクライアントを持っていて、それが助けになることができるなら、.NETもサポートします。

免責事項:私はTransifexプロジェクトのリードです。

+0

Transifexは道のりです!我々はhttp://www.bugsense.comでそれを使用しており、他の方法ではローカリゼーションを管理することはできません – PanosJee

関連する問題