まず第一に、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.zcml
zope.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