多言語を作成したいwxPythonで書かれたアプリケーションがあります。私たちのオプションは
- gettexthttp://docs.python.org/library/gettext.htmlを使用する
- すべての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"))