More complete handling of printf formatting in msgid/msgstr checks.
(That commit, r60813, should never have been done to 2.69 branch, will revert it there, sorry :/ ).
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
Reference in New Issue
Block a user