我可以通过如下定义的render_to_response将jinj2模板与django一起使用
从 django.conf 导入设置 从 django.core.exceptions 导入 ImproperlyConfigured 从 django.http 导入 HttpResponse 从 django.template 导入 TemplateDoesNotExist,上下文 from django.utils 导入翻译 从 itertools 导入链 从 jinja2 导入 FileSystemLoader,环境 从 jinja2 导入节点 从 jinja2.ext 导入扩展 从 django.conf 导入设置 将 jinja_filters 导入为 jf 导入回溯 从 django.utils.translation 导入 gettext,ngettext 类 DjangoTranslator(对象): def __init__(self): self.gettext = 获取文本 self.ngettext = ngettext 类 DjangoEnvironment(环境): def get_translator(self, context): 返回 DjangoTranslator() template_dirs = getattr(设置,'TEMPLATE_DIRS') default_mimetype = getattr(设置,'DEFAULT_CONTENT_TYPE') global_exts = getattr(设置,'JINJA_EXTENSIONS',()) env = DjangoEnvironment(autoescape=False, loader=FileSystemLoader(template_dirs, encoding="utf-8"), extensions=global_exts) env.filters.update({'myescape':jf.myescape}) 如果 global_exts 中的“jinja2.ext.i18n”: env.install_gettext_translations(翻译) def render_to_response(filename, context={}, context_instance=Context({}), mimetype=default_mimetype): 模板 = env.get_template(文件名) 对于 context_instance.dicts 中的 d: context.update(d) context.update({'settings':settings}) 渲染 = template.render(**context) 返回 HttpResponse(渲染,mimetype=mimetype)
但不能让 django 为 jinja2 模板提取翻译字符串。
似乎 django/utils/translation/trans_real.py 中的以下行使 makemessages 命令可以通过 templatize@trans_real.py 解析 i18n 的 django 模板
inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""") block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""") endblock_re = re.compile(r"""^\s*endblocktrans$""") 复数re = re.compile(r"""^\s*plural$""") constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
有没有比修改 makemessages.py 更好的方法,通过重写翻译标签正则表达式以在 jinja2 模板上本地使用以提取翻译字符串?