Mercurial > hg
comparison i18n/posplit @ 11389:4fd49329a1b5
i18n: script for splitting large messages on .po/.pot files
With fixes and heavy refactoring by Martin Geisler.
author | Wagner Bruna <wbruna@yahoo.com> |
---|---|
date | Thu, 17 Jun 2010 20:10:34 -0300 |
parents | |
children | ff6ab0b2ebf7 |
comparison
equal
deleted
inserted
replaced
11388:db957a72fbd7 | 11389:4fd49329a1b5 |
---|---|
1 #!/usr/bin/env python | |
2 # | |
3 # posplit - split messages in paragraphs on .po/.pot files | |
4 # | |
5 # license: MIT/X11/Expat | |
6 # | |
7 | |
8 import sys | |
9 import polib | |
10 | |
11 def addentry(po, entry, cache): | |
12 e = cache.get(entry.msgid) | |
13 if e: | |
14 e.occurrences.extend(entry.occurrences) | |
15 else: | |
16 po.append(entry) | |
17 cache[entry.msgid] = entry | |
18 | |
19 def mkentry(orig, delta, msgid, msgstr): | |
20 entry = polib.POEntry() | |
21 entry.merge(orig) | |
22 entry.msgid = msgid or orig.msgid | |
23 entry.msgstr = msgstr or orig.msgstr | |
24 entry.occurrences = [(p, int(l) + delta) for (p, l) in orig.occurrences] | |
25 return entry | |
26 | |
27 if __name__ == "__main__": | |
28 po = polib.pofile(sys.argv[1]) | |
29 | |
30 cache = {} | |
31 entries = po[:] | |
32 po[:] = [] | |
33 for entry in entries: | |
34 msgids = entry.msgid.split(u'\n\n') | |
35 if entry.msgstr: | |
36 msgstrs = entry.msgstr.split(u'\n\n') | |
37 else: | |
38 msgstrs = [u''] * len(msgids) | |
39 | |
40 if len(msgids) != len(msgstrs): | |
41 # places the whole existing translation as a fuzzy | |
42 # translation for each paragraph, to give the | |
43 # translator a chance to recover part of the old | |
44 # translation - erasing extra paragraphs is | |
45 # probably better than retranslating all from start | |
46 if 'fuzzy' not in entry.flags: | |
47 entry.flags.append('fuzzy') | |
48 msgstrs = [entry.msgstr] * len(msgids) | |
49 | |
50 delta = 0 | |
51 for msgid, msgstr in zip(msgids, msgstrs): | |
52 if msgid: | |
53 newentry = mkentry(entry, delta, msgid, msgstr) | |
54 addentry(po, newentry, cache) | |
55 delta += 2 + msgid.count('\n') | |
56 po.save() |