まず第一に、Zopeはすでにgettext互換のi18nパッケージを.の形式で利用できますzope.i18n。これはすでにZope自体の一部であり、個別にインストールする必要はありません。
__builtin__第二に、 ;をいじくりまわさないでください。メッセージファクトリをモジュールにインポートして、名前を付けるだけ_です。
Zope製品__init__.pyに、このためのメッセージファクトリを追加します。
from zope.i18nmessageid import MessageFactory
from AccessControl import ModuleSecurityInfo
YourDomainMessageFactory = MessageFactory('your.domain')
ModuleSecurityInfo('your.packagename').declarePublic('YourDomainMessageFactory')
これで、制限されたファイルを含む、プロジェクトのPythonファイルのいずれかにインポートできるメッセージIDファクトリができました。
from your.packagename import YourDomainMessageFactory as _
message = _('Your message to be translated')
_コードでローカル名として引き続き使用されていることに注意してください。
メッセージカタログを少量のZCMLに登録します。
<configure
xmlns:i18n="http://namespaces.zope.org/i18n">
<i18n:registerTranslations directory="locales" />
</configure>
ここで、はファイルlocalesが存在するディレクトリのサブディレクトリです。登録されたディレクトリ内のファイルを検索し、オプションでファイルを検索することを期待します。ファイルは、必要に応じて自動的にファイルにコンパイルされます。configure.zcmlzope.i18n<REGION>/LC_MESSAGES/yourdomain.mo<REGION>/LC_MESSAGES/yourdomain.po.po.mo
ZPTページテンプレートはzope.i18nデフォルトでメッセージカタログを使用します。ZPTi18nのサポートを参照してください。
何かを手動で翻訳する必要がある場合は、次のzope.i18n.translate関数を使用してください。
from zope.i18n import translate
message = _('Your message to be translated')
print translate(message, target_language='de')
Plone i18nのマニュアルのほとんどは、一般的なZopeアプリケーションに適用されます。
どうしても物事を突き刺すことができなけれ__builtins__ばならない場合は、必ず直接操作してくださいRestrictedPython.Guards.safe_builtins。それは辞書です:
from RestrictedPython.Guards import safe_builtins
safe_builtins['_'] = t.gettext