neobytes/share/qt/extract_strings_qt.py

82 lines
2.0 KiB
Python
Raw Normal View History

#!/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
2015-02-19 19:58:38 +01:00
OUT_CPP="src/qt/darkcoinstrings.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
2015-01-31 19:47:23 +01:00
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
2015-01-31 19:47:23 +01:00
files = glob.glob('src/*.cpp') + glob.glob('src/*.h')
# xgettext -n --keyword=_ $FILES
XGETTEXT=os.getenv('XGETTEXT', 'xgettext')
child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE)
(out, err) = child.communicate()
2015-01-31 19:47:23 +01:00
messages = parse_po(out)
f = open(OUT_CPP, 'w')
f.write("""
2015-01-31 19:47:23 +01:00
// Copyright (c) 2009-2014 The Bitcoin developers
2015-03-18 00:06:58 +01:00
// Copyright (c) 2014-2015 The Dash developers
2015-01-31 19:47:23 +01:00
//! This file is generated by share/qt/extract_strings_qt.py
#include <QtGlobal>
// Automatically generated by extract_strings.py
#ifdef __GNUC__
#define UNUSED __attribute__((unused))
#else
#define UNUSED
#endif
""")
2015-02-19 19:58:38 +01:00
f.write('static const char UNUSED *darkcoin_strings[] = {\n')
messages.sort(key=operator.itemgetter(0))
for (msgid, msgstr) in messages:
if msgid != EMPTY:
2015-01-31 19:47:23 +01:00
f.write('QT_TRANSLATE_NOOP("darkcoin-core", %s),\n' % ('\n'.join(msgid)))
f.write('};\n')
f.close()