2

ピラミッド アプリケーションで行っているテストで、JSON 経由で翻訳可能なテキストを送信しようとしていますが、翻訳が機能していません。ファイルの先頭で、翻訳文字列関数をインポートしています。

from pyramid.i18n import TranslationString as _

次に、次のコードを検討してください。

@view_config(route_name='transtest', renderer='json')
def transtest_view(request):
    return { 'myvar': _('temp-test', default='Temporary test', domain='myapp') }

しかし、私が得るものは次のとおりです。

{"myvar": "temp-test"}

レンダラーをテスト テンプレートに変更した場合、次のようにしたことに注意してください。

@view_config(route_name='transtest', renderer='../templates/transtest.pt')
...

その後、テキストは正しく翻訳されます (カタログの初期化、更新、コンパイルなどは既に行っていることに注意してください)。

これにより、「json」レンダラーで TranslationString クラスが正しく機能しないと思いましたか? もしそうなら、JSON 経由で翻訳可能な文字列を送信するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

3

と を使用して、メッセージ文字列を明示的に翻訳する必要がありget_localizer()ますLocalizer.translate()

from pyramid.i18n import get_localizer

@view_config(route_name='transtest', renderer='json')
def transtest_view(request):
    message = _('temp-test', default='Temporary test', domain='myapp')
    return {'myvar': get_localizer(request).translate(message)}

通常、これらの手順はテンプレートによって処理されますが、JSON の場合は自分で行う必要があります。

TranslationStringFactoryおそらく、プロジェクトにを定義し、それを再利用してメッセージ文字列を生成したいと思うでしょう。プロジェクトに以下を追加します。

from pyramid.i18n import TranslationStringFactory

myapp_domain = TranslationStringFactory(domain='myapp')

次に使用します:

from my.project import myapp_domain as _

# ....

message = _('temp-test', default='Temporary test')
于 2013-07-22T16:24:57.350 に答える