每次都不通过请求控制jinja2 / coffin中的i18n语言

时间:2012-05-30 08:25:00

标签: python django internationalization jinja2

我正在尝试将模板呈现为特定语言的字符串,但每次都不将请求或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正在做的事情,但实际上并没有工作,即使LANGUAGE_CODE被设置为使用真正的RequestContext时从浏览器的设置。

0 个答案:

没有答案