Я использую два механизма локализации сайта:
1. Я использую стандартный тег шаблона {{gettext 'some_text'}} в моем index.html
2. Я написал собственное расширение jinja, которое принимает содержимое файла уценки в соответствии с языком, используемым на сайте.
И я использую Babel для создания файла messages.pot, а затем для создания файла massages.po.
У меня есть такая конфигурация babel в babel.cfg:
[jinja2: theme/templates/index.html]
silent = false
А это моё собственное расширение jinja - custom_jinja_extension.py:
from jinja2 import nodes
from jinja2.ext import Extension
from markdown import Markdown
class IncludeMarkdownExtension(Extension):
"""
a set of names that trigger the extension.
"""
tags = set(['include_markdown'])
def __init__(self, environment):
super(IncludeMarkdownExtension, self).__init__(environment)
def parse(self, parser):
tag = parser.stream.__next__()
ctx_ref = nodes.ContextReference()
if tag.value == 'include_markdown':
args = [ctx_ref, parser.parse_expression(), nodes.Const(tag.lineno)]
body = parser.parse_statements(['name:endinclude_markdown'], drop_needle=True)
callback = self.call_method('convert', args)
return nodes.CallBlock(callback, [], [], body).set_lineno(tag.lineno)
def convert(self, context, tagname, linenum, caller):
"""
Function for converting markdown to html
:param tagname: name of converting file
:return: converting html
"""
for item in context['extra_siteurls']:
if item == context['main_lang']:
input_file = open('content/{}/{}'.format('en', tagname))
else:
input_file = open('content/{}/{}'.format(context['main_lang'], tagname))
text = input_file.read()
html = Markdown().convert(text)
return html
Я использую этот шаблон тега - {% include_markdown 'slide3.md' %}{% endinclude_markdown %}
В моем pelicanconf.py я добавляю такие строки для расширений jinja:
# Jinja2 extensions
JINJA_ENVIRONMENT = {
'extensions': [
'jinja2_markdown.MarkdownExtension',
'jinja2.ext.i18n',
'custom_jinja_extension.IncludeMarkdownExtension'
]
}
Когда я запускаю команду:
pybabel extract --mapping babel.cfg --output messages.pot ./
Я получаю эту ошибку
jinja2.exceptions.TemplateSyntaxError: Обнаружен неизвестный тег
'Include_markdown. Джинджа искал следующие теги:
'Концевого блока. Самый внутренний блок, который нужно закрыть, это «блок».
Когда я удаляю все использование пользовательского тега шаблона, gettext работает хорошо. Что я делаю не так?