テンプレートを特定の言語の文字列にレンダリングしようとしていますが、毎回リクエストまたは RequestContext を render_to_string に渡すことはありません。私は使用しています
coffin.shortcuts.render_to_string
したがって、辞書に変数を含めるか、言語に関する限り無視される偽のコンテキストを含める必要があります。
リクエストを送信することで機能させることができますが、それはやり過ぎです。これらは非同期プロセスであるため、リクエストを利用できない場合もあります。
私はdjangoの翻訳、coffin、およびjinja2のコードを見てきましたが、非常に複雑です。また、LANGUAGE または LANGUAGE_CODE を辞書の一部として送信しようとしましたが、結果はありませんでした。
RequestContext クラスのソースを変更して、csrf および i18n モジュールのみを含めるようにすると、coffin の render_to_string はブラウザー言語に従います。
FakeRequestContext クラスを作成しました。
class FakeRequestContext(Context):
def __init__(self, request, dict_=None, processors=None, current_app=None,
use_l10n=None, use_tz=None):
Context.__init__(self, dict_, current_app=current_app,
use_l10n=use_l10n, use_tz=use_tz)
from django.utils import translation
context_extras = {}
from django.conf import settings
context_extras['LANGUAGES'] = settings.LANGUAGES
context_extras['LANGUAGE_CODE'] = translation.get_language()
if 'LANGUAGE_CODE' in dict_:
context_extras['LANGUAGE_CODE'] = dict_['LANGUAGE_CODE']
context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
self.update(context_extras)
これは、RequestContext が行っていることを正確に再現しているように見えますが、実際の RequestContext を使用するときに LANGUAGE_CODE がブラウザーからの値に設定されていても、実際には機能しません。