1

Python 2.7 に対して書かれた国際化されたアプリケーションがあります。その中で、私が書いたいくつかのパッケージを使用しています。これらのパッケージのユーザーに表示されるテキストを翻訳してほしいです。

アプリケーションが を使用して名前空間にインストール_される場合、個々のパッケージのテキストを独自のドメインを持つ特定の翻訳で翻訳するにはどうすればよいですか? たとえば、2 つの翻訳をマージすることはできますか? 次に、従来の場所に配置すると、インポート時にアプリケーションにパッケージの翻訳をマージさせることができます。__builtin__translation.install

_各サブパッケージの上部に、およびその他の gettext ヘルパーを定義する必要がありますか? もしそうなら、疎結合を維持しながら、どのようにしてアプリケーションの構成済み言語を理解できるのでしょうか?

これは、本来よりも複雑なように感じます。そのため、何かを理解していないと思います。

4

1 に答える 1

1

ビルトインにインストールする_のではなく、パッケージ内で定義__init__し、他のモジュールに明示的にインポートすることをお勧めします。

mypackage/__init__.py:

import gettext
translations = gettext.translation('mypackage')
_ = translations.ugettext

その後、別の場所で

from mypackage import _

some_string = _("Something that will be translated")

私は長い間実際に gettext を使用していなかったので、この例を参考にしてください (ただし、これはgettext のドキュメントの推奨事項に基づいていました)。

私は主に、モジュールのインポート中に翻訳を行うことができない Zope ベースの Web アプリケーションで作業してきました。実際の翻訳は、リクエストのレンダリング時間まで遅らせる必要があるため、ユーザーの優先言語がわかります。zope.i18nmessageid の MessageFactory を使用して、非常によく似た方法で文字列を翻訳用にマークします。

# mypackage/__init__.py
from zope.i18nmessageid import MessageFactory
_ = MessageFactory("mypackage")

# mypackage/somemodule.py
from mypackage import _
some_string = _("Something that will be translated later")
# e.g. with print zope.i18n.translate(some_string, request)
于 2013-03-29T07:39:26.847 に答える