git / moonbite-core / share/qt/extract_strings_qt.py · raw

#!/usr/bin/env python3# Copyright (c) 2012-2019 The Bitcoin Core developers# Distributed under the MIT software license, see the accompanying# file COPYING or http://www.opensource.org/licenses/mit-license.php.'''Extract _("...") strings for translation and convert to Qt stringdefs so thatthey can be picked up by Qt linguist.'''from subprocess import Popen, PIPEimport operatorimport osimport sysOUT_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 messagesfiles = sys.argv[1:]# xgettext -n --keyword=_ $FILESXGETTEXT=os.getenv('XGETTEXT', 'xgettext')if not XGETTEXT:    print('Cannot extract strings: xgettext utility is not installed or not configured.',file=sys.stderr)    print('Please install package "gettext" and re-run \'./configure\'.',file=sys.stderr)    sys.exit(1)child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE)(out, err) = child.communicate()messages = parse_po(out.decode('utf-8'))f = open(OUT_CPP, 'w', encoding="utf8")f.write("""#include <QtGlobal>// Automatically generated by extract_strings_qt.py#ifdef __GNUC__#define UNUSED __attribute__((unused))#else#define UNUSED#endif""")f.write('static const char UNUSED *bitcoin_strings[] = {\n')f.write('QT_TRANSLATE_NOOP("bitcoin-core", "%s"),\n' % (os.getenv('COPYRIGHT_HOLDERS'),))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()