我可以使用jinj2模板被定义为以下获取与django 1.x集成的jinja2模板的翻译字符串?
from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.http import HttpResponse from django.template import TemplateDoesNotExist, Context from django.utils import translation from itertools import chain from jinja2 import FileSystemLoader, Environment from jinja2 import nodes from jinja2.ext import Extension from django.conf import settings import jinja_filters as jf import traceback from django.utils.translation import gettext, ngettext class DjangoTranslator(object): def __init__(self): self.gettext = gettext self.ngettext = ngettext class DjangoEnvironment(Environment): def get_translator(self, context): return DjangoTranslator() template_dirs = getattr(settings,'TEMPLATE_DIRS') default_mimetype = getattr(settings, 'DEFAULT_CONTENT_TYPE') global_exts = getattr(settings, 'JINJA_EXTENSIONS',()) env = DjangoEnvironment(autoescape=False, loader=FileSystemLoader(template_dirs, encoding="utf-8"), extensions=global_exts) env.filters.update({'myescape':jf.myescape}) if 'jinja2.ext.i18n' in global_exts: env.install_gettext_translations(translation) def render_to_response(filename, context={}, context_instance=Context({}), mimetype=default_mimetype): template = env.get_template(filename) for d in context_instance.dicts: context.update(d) context.update({'settings':settings}) rendered = template.render(**context) return HttpResponse(rendered, mimetype=mimetype)
选择render_to_response通过Django的,但对于Jinja2的模板不能让Django的提取翻译字符串。
似乎在下面几行的Django/utils的/翻译/ trans_real.py 有可能使makemessages命令通过[email protected]_real.py
inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""") block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""") endblock_re = re.compile(r"""^\s*endblocktrans$""") plural_re = re.compile(r"""^\s*plural$""") constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
解析Django模板的国际化是有没有更好的方式通过重写翻译标记正则表达式来修改makemessages.py以供在jinja2模板上本地使用以提取翻译字符串?
我也做了一个包,以减轻Django的 - 神社的整合,与翻译字符串支持。 https://github.com/altunyurt/djtemps – hinoglu 2011-11-04 12:21:29