From 6ef633710e4da0cfde034cba5baee0a37e86fc8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=BDurek?= Date: Tue, 22 Jul 2025 23:56:59 +0200 Subject: [PATCH] Extract parametrized gettext from javascript files --- babel/messages/extract.py | 4 +++- tests/messages/test_js_extract.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/babel/messages/extract.py b/babel/messages/extract.py index f0584d460..c03b8cca0 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -835,10 +835,12 @@ def parse_template_string( if level: expression_contents += character if not inside_str: - if character == '{' and prev_character == '$': + # start of new template string or object definition + if character == '{': level += 1 elif level and character == '}': level -= 1 + # end of template string if level == 0 and expression_contents: expression_contents = expression_contents[0:-1] fake_file_obj = io.BytesIO(expression_contents.encode()) diff --git a/tests/messages/test_js_extract.py b/tests/messages/test_js_extract.py index fc643851e..f234a80e4 100644 --- a/tests/messages/test_js_extract.py +++ b/tests/messages/test_js_extract.py @@ -191,3 +191,13 @@ def test_inside_nested_template_string(): ) assert messages == [(1, 'Greetings!', [], None), (1, 'This is a lovely evening.', [], None), (1, 'The day is really nice!', [], None)] + + +def test_template_string_with_parameters() -> None: + buf = BytesIO( + b'`${gettext("text %(param)s", { param: myVar })}`;', + ) + messages = list(extract.extract("javascript", buf, {"gettext": None}, [], {"parse_template_string": True})) + assert messages == [ + (1, "text %(param)s", [], None), + ]