2009-06-25 13 views
2

多言語にしたいwxPythonで書かれたアプリケーションがあります。 私たちの選択肢はwxPythonアプリケーションを多言語化する

  1. ある messages.pyファイルにすべてのUIのテキストをseprating、および にそれを使用してgettextのhttp://docs.python.org/library/gettext.html
  2. を使用してテキスト

を翻訳私は非常に傾いた第二の方だと 2番目の方法を使用して私はすべての私のメッセージを1つの場所でコードにすることはできませんので、私はメッセージを変更する必要がある場合、コードを変更する必要はありませんgettextの場合は、私がちょうどラッピングするように - 定数orginal MSGの代わりmessages.py

基本的に代わりの

wx.MessageBox(_("Hi stackoverflow!")) 

で定数に変換私はgettextの方法と短所のいずれかの利点がある

wx.MessageBox(messages.GREET_SO) 

が、優れていると思います第二の方法? 3つ目の方法はありますか?

編集: gettextの言語ファイルもコードに縛られているように見えますが、2つのメッセージが英語では同じですがフランス語では異なる場合はどうなりますか?フレンチは、英語のための異なるシナリオのためのより微妙な翻訳を持っていると思うok

経験: 私はすでに2番目の方法を行っていると私はすべてのアプリケーションは、コードからUIテキストを抽出しようとする必要がありますリファクタリング、 UIがどこに入り込んでいるのか、UIテキストが改善できるのか、gettextは整備士で、コーダーには何も入力していないし、メンテナンスが難しいと思う。

などです。 PRINT_PROGRESS_MSGは、多くの場所で同じメッセージが少しずつ異なって使用されていることを知る機会を与え、後でmsgを一度変更する必要があるときに役立つ単一の名前にマージできます。

結論:私はまだgettextを使用する利点がないと私自身のメッセージファイルを使用しています。私は少なくとも、gettextが有益になる理由をいくつか説明した答えを選択しました。 最終的な解決策は、IMO両方の方法から最高のは、私自身のメッセージ識別子は、私はいつもで複数の言語ファイルを作成し、(これはPHPですが、考え方は同じです)Web用のgettext例えば

wx.MessageBox(_("GREET_SO")) 
+0

i18nのwxPyWikiレシピページで、gettextを使用した例はありますか? http://wiki.wxpython.org/RecipesI18n – DrBloodmoney

+0

はい私はそれを見ました、そしてそれは私がgettext方法に行きたくない理由の一つです –

+0

あなた自身のメッセージファイルを使って言及したすべての "プロ" gettextにも存在します。しかし、その逆は真ではない。 –

答えて

1

のGettextはあなたの例では、あなたも「コード内の翻訳を格納しない」ためにgettextを使用することができ、移動するための方法である:

wx.MessageBox(messages.GREET_SO) 

gettextと同じかもしれません:

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO")) 

のGettextはかなり多言語アプリケーションのための標準である、と私はあなたが将来的にそれを使用して恩恵を受けるだろう確信しています。たとえば、Poedit(または他の同様のアプリ)を使用して翻訳者を協力者または投稿者に割り当て、後でフラグ1または複数のメッセージを適切に翻訳しないように割り当てることができます。また欠けている/余分なエントリがある場合poeditはあなたに警告します。あなた自身をだましてはいけません。gettextは、翻訳を維持するために唯一証明された信頼できる方法です。

+0

はいこれは良い方法ですが、少なくとも両方のメッセージをマージするgettextを使って私の主な問題を解決します。メッセージはメッセージ識別子と同じですが、必要ならば_を私の関数で置き換えることができます:) –

-1

によってラップすなわちとるです特定のディレクトリ。 en.php、fr.php、et cetera。これらのファイルには、指定された言語でのすべての出力テキストの定義が含まれています。言語のユーザー設定は、出力がで表示される言語、したがって、含まれ得るそれらのファイルのかを判断するたとえば... en.phpで

:。 TEXT_I_AM =「私は」FRで

。PHP: TEXT_I_AM =

1

を「帝はsuisの」のgettextのいくつかの利点があります。最大の利点の

  1. 一つがある:あなたが翻訳データベースの恩恵を受けることができるの翻訳を行うためにpoeditを使用した場合。基本的にpoedit caはあなたのハードディスクをスキャンし、すでに翻訳されたファイルを見つけ、ファイルを翻訳するときに提案をします。
  2. コードを他の人に翻訳するときに、翻訳のgettext方法をすでに知っているかもしれませんが、翻訳の方法を説明しなければなりません。
  3. 翻訳の周りのコードを見たときに、コードの文脈にテキストがあるので、翻訳しやすいようにしてください。
  4. print _('%d files of %d files selected') % (num, numTotal)などの複雑な状況を考慮してください。ここではそれは本当に周りのコードを持つことができます...
+0

'1'私の場合は問題ではないと思う。私は自動翻訳に頼ることはないだろう。 '2'は私の方法がより簡単になることを心配している。理解している '3'翻訳の周りのコードを見て、isn;逆にする? 4が有効なようです –

+1

well(4)は、(3)によく使用される特殊な例です。 (1)について:あなたはpoeditの自動翻訳を試しましたか?本当に役に立ちます。 – RSabet

+0

ええ、私は自動翻訳機能を忘れました - 本当に便利です! –