diff options
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/modules/bl_i18n_utils/settings.py | 10 | ||||
-rw-r--r-- | release/scripts/modules/bl_i18n_utils/utils.py | 6 |
2 files changed, 13 insertions, 3 deletions
diff --git a/release/scripts/modules/bl_i18n_utils/settings.py b/release/scripts/modules/bl_i18n_utils/settings.py index e40b067f552..dba5099607c 100644 --- a/release/scripts/modules/bl_i18n_utils/settings.py +++ b/release/scripts/modules/bl_i18n_utils/settings.py @@ -257,6 +257,16 @@ PYGETTEXT_KEYWORDS = (() + for it in ("BLF_I18N_MSGID_MULTI_CTXT",)) ) +# Check printf mismatches between msgid and msgstr. +CHECK_PRINTF_FORMAT = ( + r"(?!<%)(?:%%)*%" # Begining, with handling for crazy things like '%%%%%s' + r"[-+#0]?" # Flags (note: do not add the ' ' (space) flag here, generates too much false positives!) + r"(?:\*|[0-9]+)?" # Width + r"(?:\.(?:\*|[0-9]+))?" # Precision + r"(?:[hljztL]|hh|ll)?" # Length + r"[tldiuoxXfFeEgGaAcspn]" # Specifiers (note we have Blender-specific %t and %l ones too) +) + # Should po parser warn when finding a first letter not capitalized? WARN_MSGID_NOT_CAPITALIZED = True diff --git a/release/scripts/modules/bl_i18n_utils/utils.py b/release/scripts/modules/bl_i18n_utils/utils.py index bef7de00126..feefd14fd28 100644 --- a/release/scripts/modules/bl_i18n_utils/utils.py +++ b/release/scripts/modules/bl_i18n_utils/utils.py @@ -446,10 +446,10 @@ class I18nMessages: """ ret = [] default_context = self.settings.DEFAULT_CONTEXT - _format = re.compile("%[.0-9]*[tslfd]").findall + _format = re.compile(self.settings.CHECK_PRINTF_FORMAT).findall done_keys = set() - tmp = {} rem = set() + tmp = {} for key, msg in self.msgs.items(): msgctxt, msgid, msgstr = msg.msgctxt, msg.msgid, msg.msgstr real_key = (msgctxt or default_context, msgid) @@ -464,7 +464,7 @@ class I18nMessages: done_keys.add(key) if '%' in msgid and msgstr and _format(msgid) != _format(msgstr): if not msg.is_fuzzy: - ret.append("Error! msg's format entities are not matched in msgid and msgstr ({} / {})" + ret.append("Error! msg's format entities are not matched in msgid and msgstr ({} / \"{}\")" "".format(real_key, msgstr)) if fix: msg.msgstr = "" |