diff options
Diffstat (limited to 'editor/translations/extract.py')
-rwxr-xr-x | editor/translations/extract.py | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/editor/translations/extract.py b/editor/translations/extract.py index 5f68d7702e..dd86bd1c1f 100755 --- a/editor/translations/extract.py +++ b/editor/translations/extract.py @@ -1,5 +1,6 @@ #!/bin/python +import enum import fnmatch import os import re @@ -63,22 +64,30 @@ msgstr "" """ +class ExtractType(enum.IntEnum): + TEXT = 1 + PROPERTY_PATH = 2 + GROUP = 3 + + # Regex "(?P<name>(?:[^"\\]|\\.)*)" creates a group named `name` that matches a string. message_patterns = { - re.compile(r'RTR\("(?P<message>(?:[^"\\]|\\.)*)"(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)'): False, - re.compile(r'TTR\("(?P<message>(?:[^"\\]|\\.)*)"(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)'): False, - re.compile(r'TTRC\("(?P<message>(?:[^"\\]|\\.)*)"\)'): False, + re.compile(r'RTR\("(?P<message>(?:[^"\\]|\\.)*)"(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)'): ExtractType.TEXT, + re.compile(r'TTR\("(?P<message>(?:[^"\\]|\\.)*)"(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)'): ExtractType.TEXT, + re.compile(r'TTRC\("(?P<message>(?:[^"\\]|\\.)*)"\)'): ExtractType.TEXT, re.compile( r'TTRN\("(?P<message>(?:[^"\\]|\\.)*)", "(?P<plural_message>(?:[^"\\]|\\.)*)",[^,)]+?(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)' - ): False, + ): ExtractType.TEXT, re.compile( r'RTRN\("(?P<message>(?:[^"\\]|\\.)*)", "(?P<plural_message>(?:[^"\\]|\\.)*)",[^,)]+?(?:, "(?P<context>(?:[^"\\]|\\.)*)")?\)' - ): False, - re.compile(r'_initial_set\("(?P<message>[^"]+?)",'): True, - re.compile(r'GLOBAL_DEF(?:_RST)?\("(?P<message>[^".]+?)",'): True, - re.compile(r'EDITOR_DEF(?:_RST)?\("(?P<message>[^"]+?)",'): True, - re.compile(r'ADD_PROPERTY\(PropertyInfo\(Variant::[A-Z]+,\s*"(?P<message>[^"]+?)",'): True, - re.compile(r'ADD_GROUP\("(?P<message>[^"]+?)",'): False, + ): ExtractType.TEXT, + re.compile(r'_initial_set\("(?P<message>[^"]+?)",'): ExtractType.PROPERTY_PATH, + re.compile(r'GLOBAL_DEF(?:_RST)?\("(?P<message>[^".]+?)",'): ExtractType.PROPERTY_PATH, + re.compile(r'EDITOR_DEF(?:_RST)?\("(?P<message>[^"]+?)",'): ExtractType.PROPERTY_PATH, + re.compile( + r'ADD_PROPERTY\(PropertyInfo\(Variant::[_A-Z0-9]+, "(?P<message>[^"]+?)"[,)]' + ): ExtractType.PROPERTY_PATH, + re.compile(r'ADD_GROUP\("(?P<message>[^"]+?)", "(?P<prefix>[^"]*?)"\)'): ExtractType.GROUP, } @@ -239,6 +248,7 @@ def process_file(f, fname): reading_translator_comment = False is_block_translator_comment = False translator_comment = "" + current_group = "" while l: @@ -257,22 +267,30 @@ def process_file(f, fname): translator_comment = translator_comment[:-1] # Remove extra \n at the end. if not reading_translator_comment: - for pattern, is_property_path in message_patterns.items(): + for pattern, extract_type in message_patterns.items(): for m in pattern.finditer(l): location = os.path.relpath(fname).replace("\\", "/") if line_nb: location += ":" + str(lc) - groups = m.groupdict("") - msg = groups.get("message", "") - msg_plural = groups.get("plural_message", "") - msgctx = groups.get("context", "") + captures = m.groupdict("") + msg = captures.get("message", "") + msg_plural = captures.get("plural_message", "") + msgctx = captures.get("context", "") - if is_property_path: + if extract_type == ExtractType.TEXT: + _add_message(msg, msg_plural, msgctx, location, translator_comment) + elif extract_type == ExtractType.PROPERTY_PATH: + if current_group: + if msg.startswith(current_group): + msg = msg[len(current_group) :] + else: + current_group = "" for part in msg.split("/"): _add_message(_process_editor_string(part), msg_plural, msgctx, location, translator_comment) - else: + elif extract_type == ExtractType.GROUP: _add_message(msg, msg_plural, msgctx, location, translator_comment) + current_group = captures["prefix"] translator_comment = "" l = f.readline() |