]> Git Repo - VerusCoin.git/blob - share/qt/extract_strings_qt.py
Merge branch 'master' into async-ipv6-rpc
[VerusCoin.git] / share / qt / extract_strings_qt.py
1 #!/usr/bin/python
2 '''
3 Extract _("...") strings for translation and convert to Qt4 stringdefs so that
4 they can be picked up by Qt linguist.
5 '''
6 from subprocess import Popen, PIPE
7 import glob
8 import operator
9
10 OUT_CPP="src/qt/bitcoinstrings.cpp"
11 EMPTY=['""']
12
13 def parse_po(text):
14     """
15     Parse 'po' format produced by xgettext.
16     Return a list of (msgid,msgstr) tuples.
17     """
18     messages = []
19     msgid = []
20     msgstr = []
21     in_msgid = False
22     in_msgstr = False
23
24     for line in text.split('\n'):
25         line = line.rstrip('\r')
26         if line.startswith('msgid '):
27             if in_msgstr:
28                 messages.append((msgid, msgstr))
29                 in_msgstr = False
30             # message start
31             in_msgid = True
32             
33             msgid = [line[6:]]
34         elif line.startswith('msgstr '):
35             in_msgid = False
36             in_msgstr = True
37             msgstr = [line[7:]]
38         elif line.startswith('"'):
39             if in_msgid:
40                 msgid.append(line)
41             if in_msgstr:
42                 msgstr.append(line)
43
44     if in_msgstr:
45         messages.append((msgid, msgstr))
46
47     return messages
48
49 files = glob.glob('src/*.cpp') + glob.glob('src/*.h') 
50
51 # xgettext -n --keyword=_ $FILES
52 child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE)
53 (out, err) = child.communicate()
54
55 messages = parse_po(out) 
56
57 f = open(OUT_CPP, 'w')
58 f.write("""#include <QtGlobal>
59 // Automatically generated by extract_strings.py
60 #ifdef __GNUC__
61 #define UNUSED __attribute__((unused))
62 #else
63 #define UNUSED
64 #endif
65 """)
66 f.write('static const char UNUSED *bitcoin_strings[] = {\n')
67 messages.sort(key=operator.itemgetter(0))
68 for (msgid, msgstr) in messages:
69     if msgid != EMPTY:
70         f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid)))
71 f.write('};')
72 f.close()
This page took 0.027663 seconds and 4 git commands to generate.