509030344c
Utility libraries (common, util) as well as extra tools shouldn't be parsed for translation messages, only the server and wallet part qualify here.
78 lines
1.8 KiB
Python
Executable file
78 lines
1.8 KiB
Python
Executable file
#!/usr/bin/python
|
|
'''
|
|
Extract _("...") strings for translation and convert to Qt4 stringdefs so that
|
|
they can be picked up by Qt linguist.
|
|
'''
|
|
from subprocess import Popen, PIPE
|
|
import glob
|
|
import operator
|
|
import os
|
|
import sys
|
|
|
|
OUT_CPP="qt/bitcoinstrings.cpp"
|
|
EMPTY=['""']
|
|
|
|
def parse_po(text):
|
|
"""
|
|
Parse 'po' format produced by xgettext.
|
|
Return a list of (msgid,msgstr) tuples.
|
|
"""
|
|
messages = []
|
|
msgid = []
|
|
msgstr = []
|
|
in_msgid = False
|
|
in_msgstr = False
|
|
|
|
for line in text.split('\n'):
|
|
line = line.rstrip('\r')
|
|
if line.startswith('msgid '):
|
|
if in_msgstr:
|
|
messages.append((msgid, msgstr))
|
|
in_msgstr = False
|
|
# message start
|
|
in_msgid = True
|
|
|
|
msgid = [line[6:]]
|
|
elif line.startswith('msgstr '):
|
|
in_msgid = False
|
|
in_msgstr = True
|
|
msgstr = [line[7:]]
|
|
elif line.startswith('"'):
|
|
if in_msgid:
|
|
msgid.append(line)
|
|
if in_msgstr:
|
|
msgstr.append(line)
|
|
|
|
if in_msgstr:
|
|
messages.append((msgid, msgstr))
|
|
|
|
return messages
|
|
|
|
files = sys.argv[1:]
|
|
|
|
# xgettext -n --keyword=_ $FILES
|
|
XGETTEXT=os.getenv('XGETTEXT', 'xgettext')
|
|
child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE)
|
|
(out, err) = child.communicate()
|
|
|
|
messages = parse_po(out)
|
|
|
|
f = open(OUT_CPP, 'w')
|
|
f.write("""
|
|
|
|
#include <QtGlobal>
|
|
|
|
// Automatically generated by extract_strings.py
|
|
#ifdef __GNUC__
|
|
#define UNUSED __attribute__((unused))
|
|
#else
|
|
#define UNUSED
|
|
#endif
|
|
""")
|
|
f.write('static const char UNUSED *bitcoin_strings[] = {\n')
|
|
messages.sort(key=operator.itemgetter(0))
|
|
for (msgid, msgstr) in messages:
|
|
if msgid != EMPTY:
|
|
f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid)))
|
|
f.write('};\n')
|
|
f.close()
|