diff --git a/babel_extractors.csv b/babel_extractors.csv index 133a13e736..37858338ba 100644 --- a/babel_extractors.csv +++ b/babel_extractors.csv @@ -6,4 +6,4 @@ hooks.py,frappe.gettext.extractors.navbar.extract **/report/*/*.json,frappe.gettext.extractors.report.extract **.py,frappe.gettext.extractors.python.extract **.js,frappe.gettext.extractors.javascript.extract -**.html,frappe.gettext.extractors.jinja2.extract \ No newline at end of file +**.html,frappe.gettext.extractors.html_template.extract \ No newline at end of file diff --git a/frappe/gettext/extractors/html_template.py b/frappe/gettext/extractors/html_template.py new file mode 100644 index 0000000000..34f51e4032 --- /dev/null +++ b/frappe/gettext/extractors/html_template.py @@ -0,0 +1,26 @@ +from jinja2.ext import babel_extract + +from .utils import extract_messages_from_code + + +def extract(*args, **kwargs): + """Extract messages from Jinja and JS microtemplates. + + Reuse the babel_extract function from jinja2.ext, but handle our own implementation of `_()`. + To handle JS microtemplates, parse all code again using regex.""" + fileobj = args[0] or kwargs["fileobj"] + print(fileobj.name) + code = fileobj.read().decode("utf-8") + + for lineno, funcname, messages, comments in babel_extract(*args, **kwargs): + if funcname == "_" and isinstance(messages, tuple) and len(messages) > 1: + funcname = "pgettext" + messages = (messages[-1], messages[0]) # (context, message) + + yield lineno, funcname, messages, comments + + for lineno, message, context in extract_messages_from_code(code): + if context: + yield lineno, "pgettext", (context, message), [] + else: + yield lineno, "_", message, [] diff --git a/frappe/gettext/extractors/jinja2.py b/frappe/gettext/extractors/jinja2.py deleted file mode 100644 index ee07ac6cee..0000000000 --- a/frappe/gettext/extractors/jinja2.py +++ /dev/null @@ -1,11 +0,0 @@ -from jinja2.ext import babel_extract - - -def extract(*args, **kwargs): - """Reuse the babel_extract function from jinja2.ext, but handle our own implementation of `_()`""" - for lineno, funcname, messages, comments in babel_extract(*args, **kwargs): - if funcname == "_" and isinstance(messages, tuple) and len(messages) > 1: - funcname = "pgettext" - messages = (messages[-1], messages[0]) # (context, message) - - yield lineno, funcname, messages, comments