我可以使用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