##// END OF EJS Templates
relnotes: copy "next" to "5.7" and clear "next"...
relnotes: copy "next" to "5.7" and clear "next" The same procedure as every year^Wcycle. Differential Revision: https://phab.mercurial-scm.org/D9909

File last commit:

r46434:c102b704 default
r47181:0e2e7300 5.7 stable
Show More
posplit
94 lines | 3.2 KiB | text/plain | TextLexer
Gregory Szorc
global: use python3 in shebangs...
r46434 #!/usr/bin/env python3
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 #
# posplit - split messages in paragraphs on .po/.pot files
#
# license: MIT/X11/Expat
#
Pulkit Goyal
py3: make i18n/posplit use print_function
r29153 from __future__ import absolute_import, print_function
Pulkit Goyal
py3: make i18n/posplit use absolute_import
r29152
import polib
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 import re
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 import sys
Gregory Szorc
black: blacken scripts...
r44089
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 def addentry(po, entry, cache):
e = cache.get(entry.msgid)
if e:
e.occurrences.extend(entry.occurrences)
FUJIWARA Katsunori
i18n: merge i18n comments of translatable texts correctly...
r39305
# merge comments from entry
for comment in entry.comment.split('\n'):
if comment and comment not in e.comment:
if not e.comment:
e.comment = comment
else:
e.comment += '\n' + comment
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 else:
po.append(entry)
cache[entry.msgid] = entry
Gregory Szorc
black: blacken scripts...
r44089
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 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
Gregory Szorc
black: blacken scripts...
r44089
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 if __name__ == "__main__":
po = polib.pofile(sys.argv[1])
cache = {}
entries = po[:]
po[:] = []
Gregory Szorc
black: blacken scripts...
r44089 findd = re.compile(r' *\.\. (\w+)::') # for finding directives
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 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):
Simon Heimberg
i18n: posplit removes the entry "::" from the pot file...
r20361 if msgid and msgid != '::':
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 newentry = mkentry(entry, delta, msgid, msgstr)
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 mdirective = findd.match(msgid)
if mdirective:
Gregory Szorc
black: blacken scripts...
r44089 if not msgid[mdirective.end() :].rstrip():
Simon Heimberg
i18n: leave out entries which contain only a rst directive...
r20362 # only directive, nothing to translate here
FUJIWARA Katsunori
i18n: calculate correct line number in source of messages to be translated...
r28074 delta += 2
Simon Heimberg
i18n: leave out entries which contain only a rst directive...
r20362 continue
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 directive = mdirective.group(1)
Simon Heimberg
i18n: leave out entries which contain only rst syntax...
r20363 if directive in ('container', 'include'):
if msgid.rstrip('\n').count('\n') == 0:
# only rst syntax, nothing to translate
FUJIWARA Katsunori
i18n: calculate correct line number in source of messages to be translated...
r28074 delta += 2
Simon Heimberg
i18n: leave out entries which contain only rst syntax...
r20363 continue
else:
# lines following directly, unexpected
Gregory Szorc
black: blacken scripts...
r44089 print(
'Warning: text follows line with directive'
' %s' % directive
)
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 comment = 'do not translate: .. %s::' % directive
if not newentry.comment:
newentry.comment = comment
elif comment not in newentry.comment:
newentry.comment += '\n' + comment
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 addentry(po, newentry, cache)
delta += 2 + msgid.count('\n')
po.save()