##// END OF EJS Templates
i18n: import polib 0.6.4 (rev 84598f2b5365)...
i18n: import polib 0.6.4 (rev 84598f2b5365) This version fixes some upstream issues observed during the pt_BR translation update: #8 (obsolete entries reappearing); an unidentified issue that made i18n/posplit produce some spurious messages on the resulting po file; possibly others. These bugs probably didn't cause actual differences on the translated output, since an invalid message added to the .mo file wouldn't match an input message most of the time. But they do pollute the .po file contents (and diffs), adding some confusion to the translation process. db957a72fbd7, 4c50552fc9bc and 8ea51e9e7031 were included upstream, so the only remaining difference is the "no-check-code" marking.

File last commit:

r11389:4fd49329 default
r15290:e40430fb stable
Show More
posplit
56 lines | 1.6 KiB | text/plain | TextLexer
#!/usr/bin/env python
#
# posplit - split messages in paragraphs on .po/.pot files
#
# license: MIT/X11/Expat
#
import sys
import polib
def addentry(po, entry, cache):
e = cache.get(entry.msgid)
if e:
e.occurrences.extend(entry.occurrences)
else:
po.append(entry)
cache[entry.msgid] = entry
def mkentry(orig, delta, msgid, msgstr):
entry = polib.POEntry()
entry.merge(orig)
entry.msgid = msgid or orig.msgid
entry.msgstr = msgstr or orig.msgstr
entry.occurrences = [(p, int(l) + delta) for (p, l) in orig.occurrences]
return entry
if __name__ == "__main__":
po = polib.pofile(sys.argv[1])
cache = {}
entries = po[:]
po[:] = []
for entry in entries:
msgids = entry.msgid.split(u'\n\n')
if entry.msgstr:
msgstrs = entry.msgstr.split(u'\n\n')
else:
msgstrs = [u''] * len(msgids)
if len(msgids) != len(msgstrs):
# places the whole existing translation as a fuzzy
# translation for each paragraph, to give the
# translator a chance to recover part of the old
# translation - erasing extra paragraphs is
# probably better than retranslating all from start
if 'fuzzy' not in entry.flags:
entry.flags.append('fuzzy')
msgstrs = [entry.msgstr] * len(msgids)
delta = 0
for msgid, msgstr in zip(msgids, msgstrs):
if msgid:
newentry = mkentry(entry, delta, msgid, msgstr)
addentry(po, newentry, cache)
delta += 2 + msgid.count('\n')
po.save()