diff --git a/frappe/tests/test_translate.py b/frappe/tests/test_translate.py index 63c4e8928d..f5386914f7 100644 --- a/frappe/tests/test_translate.py +++ b/frappe/tests/test_translate.py @@ -125,6 +125,9 @@ expected_output = [ ('Warning: Unable to find {0} in any table related to {1}', 'This is some context', 15), ('Submit', 'Some DocType', 17), ("You don't have any messages yet.", None, 19), - ("You don't have any messages yet.", None, 21) + ("You don't have any messages yet.", None, 21), + ("Long string that needs its own line because of black formatting.", None, 24), + ("Long string with", "context", 28), + ("Long string with", "context on newline", 32), ] diff --git a/frappe/tests/translation_test_file.txt b/frappe/tests/translation_test_file.txt index 45f67a806b..7db71665ad 100644 --- a/frappe/tests/translation_test_file.txt +++ b/frappe/tests/translation_test_file.txt @@ -18,4 +18,18 @@ _('Submit', context="Some DocType") _("""You don't have any messages yet.""") -_('''You don't have any messages yet.''') \ No newline at end of file +_('''You don't have any messages yet.''') + +// allow newline in beginning +_( +"""Long string that needs its own line because of black formatting.""" +).format("blah") + +_( +"Long string with", context="context" +).format("blah") + +_( + "Long string with", + context="context on newline" +).format("blah") diff --git a/frappe/translate.py b/frappe/translate.py index 9869a89840..6e0fefd6fa 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -24,7 +24,7 @@ from frappe.query_builder import Field, DocType from pypika.terms import PseudoColumn TRANSLATE_PATTERN = re.compile( - r"_\(" # starts with literal `_(` work with both python / JS + r"_\([\s\n]*" # starts with literal `_(`, ignore following whitespace/newlines # BEGIN: message search r"([\"']{,3})" # start of message string identifier - allows: ', ", """, '''; 1st capture group @@ -33,7 +33,7 @@ TRANSLATE_PATTERN = re.compile( # END: message search # BEGIN: python context search - r"(\s*,\s*context\s*=\s*" # capture `context=` with ignoring whitespace + r"([\s\n]*,[\s\n]*context\s*=\s*" # capture `context=` with ignoring whitespace r"([\"'])" # start of context string identifier; 5th capture group r"(?P((?!\5).)*)" # capture context string till closing id is found r"\5" # match context string closure @@ -49,7 +49,7 @@ TRANSLATE_PATTERN = re.compile( r")*" # match one or more context string # END: JS context search - r"\)" # Closing function call + r"[\s\n]*\)" # Closing function call ignore leading whitespace/newlines )