2

多言語を作成したいwxPythonで書かれたアプリケーションがあります。私たちのオプションは

  1. gettexthttp://docs.python.org/library/gettext.htmlを使用する
  2. すべてのUIテキストをmessages.pyファイルに分離し、それを使用してテキストを翻訳する

私は2番目に非常に傾いていますが、gettextの方法を使用してもメリットはありません。2番目の方法を使用すると、コード内ではなく1つの場所にすべてのメッセージを含めることができるため、メッセージを変更する必要がある場合は、コードを変更する必要はありません。 gettextの場合、messages.pyで定数に変換するのではなく、元のmsgをラップするだけなので、混乱するmsg-constantsがある可能性があります。

基本的に代わりに

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

おもう

wx.MessageBox(messages.GREET_SO)

より良いので、gettextの方法には利点があり、2番目の方法には欠点がありますか?そして第三の道はありますか?

編集:gettext言語ファイルもコードに結びついているようです。英語で同じでフランス語で異なる2つのメッセージが必要な場合はどうなりますか。たとえば、フランス語の場合、英語の異なるシナリオに対してより微妙な翻訳があります。

経験:私はすでに2番目の方法に進んでおり、すべてのアプリケーションがコードからUIテキストを抽出しようとする必要があると言わなければなりません。これにより、リファクタリングの機会が与えられ、UIがモデルに忍び寄り、UIテキストを改善できる場所を確認できます。メカニックは、コーダーに入力を与えません、そして私は維持するのがより難しいと思います。

また、テキストの名前(PRINT_PROGRESS_MSGなど)を作成しているときに、同じmsgの使用方法が少し異なり、1つの名前にマージできることを確認できます。これは、後でmsgを1回だけ変更する必要がある場合に役立ちます。

結論:gettextを使用する利点がまだわからず、自分のメッセージファイルを使用しています。しかし、私はgettextが有益である理由を少なくともいくつか説明する答えを選択しました。IMOの最終的な解決策は、両方の方法から最善を尽くすことです。つまり、gettextでラップされた自分のメッセージ識別子です。

wx.MessageBox(_("GREET_SO"))
4

3 に答える 3

1

gettextにはいくつかの利点があります。

  1. 最大の利点の1つは、poeditを使用して翻訳を行う場合、翻訳データベースの恩恵を受けることができることです。基本的に、poedit caはハードディスクをスキャンして、すでに翻訳されているファイルを見つけ、ファイルを翻訳するときに提案を行います。
  2. あなたが翻訳するために他の人にコードを与えるとき、あなたが彼らにあなたの翻訳方法を説明しなければならない間、彼らはすでに翻訳のgettext方法を知っているかもしれません。
  3. あなたはコードの文脈でテキストを持っているので、翻訳の周りのコードを見ると、翻訳が簡単になるはずです
  4. 次のようなテキストを検討してくださいprint _('%d files of %d files selected') % (num, numTotal)。さらに複雑な状況。ここでそれは本当にコードを持っているのを助けます...
于 2009-06-25T15:05:52.260 に答える
1

Gettextはその方法です。この例では、gettextを使用して「コードに翻訳を保存しないようにする」こともできます。

wx.MessageBox(messages.GREET_SO)

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

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

Gettextは多言語アプリケーションのほぼ標準であり、将来的にはGettextを使用することでメリットが得られると確信しています。たとえば、Poedit(または他の同様のアプリ)を使用して、共同編集者または寄稿者に翻訳を割り当て、後で1つまたは複数のメッセージに適切に翻訳されていないことを示すフラグを立てることができます。また、不足している/余分なエントリがある場合、poeditは警告します。だまされてはいけません。gettextは翻訳を維持するための唯一の証明された信頼できる方法です。

于 2009-07-01T12:58:30.873 に答える
-1

Webの場合(これはPHPですが、考え方は同じです)、私は常に特定のディレクトリに複数の言語ファイルを作成します。en.php、fr.phpなど。これらのファイルには、指定された言語でのすべての出力テキストの定義が含まれています。言語のユーザー設定により、これらのファイルのどれが含まれるか、つまり、出力がどの言語で表示されるかが決まります。たとえば、...

en.phpの場合:TEXT_I_AM = "I am"

fr.phpの場合:TEXT_I_AM = "Je suis"

于 2009-06-25T12:55:10.387 に答える