diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py --- a/share/qt/extract_strings_qt.py +++ b/share/qt/extract_strings_qt.py @@ -80,11 +80,7 @@ #endif """) f.write('static const char UNUSED *bitcoin_strings[] = {\n') -f.write('QT_TRANSLATE_NOOP("bitcoin-abc", "{}"),\n'.format(os.getenv('PACKAGE_NAME'),)) f.write('QT_TRANSLATE_NOOP("bitcoin-abc", "{}"),\n'.format(os.getenv('COPYRIGHT_HOLDERS'),)) -if os.getenv('COPYRIGHT_HOLDERS_SUBSTITUTION') != os.getenv('PACKAGE_NAME'): - f.write('QT_TRANSLATE_NOOP("bitcoin-abc", "{}"),\n'.format( - os.getenv('COPYRIGHT_HOLDERS_SUBSTITUTION'),)) messages.sort(key=operator.itemgetter(0)) for (msgid, msgstr) in messages: if msgid != EMPTY: diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -437,7 +437,7 @@ $(srcdir)/qt/bitcoinstrings.cpp: FORCE @test -n $(XGETTEXT) || echo "xgettext is required for updating translations" - $(AM_V_GEN) cd $(srcdir); XGETTEXT=$(XGETTEXT) PACKAGE_NAME="$(PACKAGE_NAME)" COPYRIGHT_HOLDERS="$(COPYRIGHT_HOLDERS)" COPYRIGHT_HOLDERS_SUBSTITUTION="$(COPYRIGHT_HOLDERS_SUBSTITUTION)" $(PYTHON) ../share/qt/extract_strings_qt.py $(libbitcoin_server_a_SOURCES) $(libbitcoin_wallet_a_SOURCES) $(libbitcoin_common_a_SOURCES) $(libbitcoin_zmq_a_SOURCES) $(libbitcoin_consensus_a_SOURCES) $(libbitcoin_util_a_SOURCES) + $(AM_V_GEN) cd $(srcdir); XGETTEXT=$(XGETTEXT) COPYRIGHT_HOLDERS="$(COPYRIGHT_HOLDERS)" $(PYTHON) ../share/qt/extract_strings_qt.py $(libbitcoin_server_a_SOURCES) $(libbitcoin_wallet_a_SOURCES) $(libbitcoin_common_a_SOURCES) $(libbitcoin_zmq_a_SOURCES) $(libbitcoin_consensus_a_SOURCES) $(libbitcoin_util_a_SOURCES) translate: $(srcdir)/qt/bitcoinstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITCOIN_QT_BASE_CPP) qt/bitcoin.cpp $(BITCOIN_QT_WINDOWS_CPP) $(BITCOIN_QT_WALLET_CPP) $(BITCOIN_QT_H) $(BITCOIN_MM) @test -n $(LUPDATE) || echo "lupdate is required for updating translations" diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -1873,7 +1873,7 @@ if (!LockDirectory(datadir, ".lock", probeOnly)) { return InitError(strprintf(_("Cannot obtain a lock on data directory " "%s. %s is probably already running."), - datadir.string(), _(PACKAGE_NAME))); + datadir.string(), PACKAGE_NAME)); } return true; } @@ -1892,7 +1892,7 @@ if (!InitSanityCheck()) { return InitError(strprintf( _("Initialization sanity check failed. %s is shutting down."), - _(PACKAGE_NAME))); + PACKAGE_NAME)); } // Probe the data directory lock to give an early error message, if possible diff --git a/src/net.cpp b/src/net.cpp --- a/src/net.cpp +++ b/src/net.cpp @@ -2074,7 +2074,7 @@ if (nErr == WSAEADDRINUSE) { strError = strprintf(_("Unable to bind to %s on this computer. %s " "is probably already running."), - addrBind.ToString(), _(PACKAGE_NAME)); + addrBind.ToString(), PACKAGE_NAME); } else { strError = strprintf(_("Unable to bind to %s on this computer " "(bind returned error %s)"), diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -569,7 +569,7 @@ std::string error; if (!node->parseParameters(argc, argv, error)) { QMessageBox::critical( - nullptr, QObject::tr(PACKAGE_NAME), + nullptr, PACKAGE_NAME, QObject::tr("Error parsing command line arguments: %1.") .arg(QString::fromStdString(error))); return EXIT_FAILURE; @@ -619,7 +619,7 @@ /// - Do not call GetDataDir(true) before this step finishes. if (!fs::is_directory(GetDataDir(false))) { QMessageBox::critical( - nullptr, QObject::tr(PACKAGE_NAME), + nullptr, PACKAGE_NAME, QObject::tr( "Error: Specified data directory \"%1\" does not exist.") .arg(QString::fromStdString(gArgs.GetArg("-datadir", "")))); @@ -627,7 +627,7 @@ } if (!node->readConfigFiles(error)) { QMessageBox::critical( - nullptr, QObject::tr(PACKAGE_NAME), + nullptr, PACKAGE_NAME, QObject::tr("Error: Cannot parse configuration file: %1.") .arg(QString::fromStdString(error))); return EXIT_FAILURE; @@ -646,7 +646,7 @@ try { node->selectParams(gArgs.GetChainName()); } catch (std::exception &e) { - QMessageBox::critical(nullptr, QObject::tr(PACKAGE_NAME), + QMessageBox::critical(nullptr, PACKAGE_NAME, QObject::tr("Error: %1").arg(e.what())); return EXIT_FAILURE; } @@ -729,8 +729,7 @@ app.requestInitialize(config, rpcServer, httpRPCRequestProcessor); #if defined(Q_OS_WIN) WinShutdownMonitor::registerShutdownBlockReason( - QObject::tr("%1 didn't yet exit safely...") - .arg(QObject::tr(PACKAGE_NAME)), + QObject::tr("%1 didn't yet exit safely...").arg(PACKAGE_NAME), (HWND)app.getMainWinId()); #endif app.exec(); diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -320,9 +320,9 @@ quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setMenuRole(QAction::QuitRole); aboutAction = new QAction(platformStyle->TextColorIcon(":/icons/about"), - tr("&About %1").arg(tr(PACKAGE_NAME)), this); + tr("&About %1").arg(PACKAGE_NAME), this); aboutAction->setStatusTip( - tr("Show information about %1").arg(tr(PACKAGE_NAME))); + tr("Show information about %1").arg(PACKAGE_NAME)); aboutAction->setMenuRole(QAction::AboutRole); aboutAction->setEnabled(false); aboutQtAction = @@ -333,7 +333,7 @@ optionsAction = new QAction(platformStyle->TextColorIcon(":/icons/options"), tr("&Options..."), this); optionsAction->setStatusTip( - tr("Modify configuration options for %1").arg(tr(PACKAGE_NAME))); + tr("Modify configuration options for %1").arg(PACKAGE_NAME)); optionsAction->setMenuRole(QAction::PreferencesRole); optionsAction->setEnabled(false); toggleHideAction = @@ -402,7 +402,7 @@ showHelpMessageAction->setStatusTip( tr("Show the %1 help message to get a list with possible Bitcoin " "command-line options") - .arg(tr(PACKAGE_NAME))); + .arg(PACKAGE_NAME)); connect(quitAction, &QAction::triggered, qApp, QApplication::quit); connect(aboutAction, &QAction::triggered, this, &BitcoinGUI::aboutClicked); @@ -710,7 +710,7 @@ if (QSystemTrayIcon::isSystemTrayAvailable()) { trayIcon = new QSystemTrayIcon(m_network_style->getTrayAndWindowIcon(), this); - QString toolTip = tr("%1 client").arg(tr(PACKAGE_NAME)) + " " + + QString toolTip = tr("%1 client").arg(PACKAGE_NAME) + " " + m_network_style->getTitleAddText(); trayIcon->setToolTip(toolTip); } @@ -1302,7 +1302,7 @@ } void BitcoinGUI::updateWindowTitle() { - QString window_title = tr(PACKAGE_NAME); + QString window_title = PACKAGE_NAME; #ifdef ENABLE_WALLET if (walletFrame) { WalletModel *const wallet_model = walletFrame->currentWalletModel(); diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -7,16 +7,11 @@ #define UNUSED #endif static const char UNUSED *bitcoin_strings[] = { -QT_TRANSLATE_NOOP("bitcoin-abc", "Bitcoin ABC"), QT_TRANSLATE_NOOP("bitcoin-abc", "The %s developers"), -QT_TRANSLATE_NOOP("bitcoin-abc", "Bitcoin"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "-maxtxfee is set very high! Fees this large could be paid on a single " "transaction."), QT_TRANSLATE_NOOP("bitcoin-abc", "" -"Accept relayed transactions received from whitelisted peers even when not " -"relaying transactions (default: %d)"), -QT_TRANSLATE_NOOP("bitcoin-abc", "" "Can't generate a change-address key. Private keys are disabled for this " "wallet."), QT_TRANSLATE_NOOP("bitcoin-abc", "" @@ -101,7 +96,6 @@ QT_TRANSLATE_NOOP("bitcoin-abc", "Cannot write to data directory '%s'; check permissions."), QT_TRANSLATE_NOOP("bitcoin-abc", "Change index out of range"), QT_TRANSLATE_NOOP("bitcoin-abc", "Config setting for %s only applied on %s network when in [%s] section."), -QT_TRANSLATE_NOOP("bitcoin-abc", "Connect through SOCKS5 proxy"), QT_TRANSLATE_NOOP("bitcoin-abc", "Copyright (C) %i-%i"), QT_TRANSLATE_NOOP("bitcoin-abc", "Corrupted block database detected"), QT_TRANSLATE_NOOP("bitcoin-abc", "Do you want to rebuild the block database now?"), @@ -142,14 +136,12 @@ QT_TRANSLATE_NOOP("bitcoin-abc", "Loading wallet..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Need to specify a port with -whitebind: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Not enough file descriptors available."), -QT_TRANSLATE_NOOP("bitcoin-abc", "Password for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-abc", "Prune cannot be configured with a negative value."), QT_TRANSLATE_NOOP("bitcoin-abc", "Prune mode is incompatible with -txindex."), QT_TRANSLATE_NOOP("bitcoin-abc", "Pruning blockstore..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Reducing -maxconnections from %d to %d, because of system limitations."), QT_TRANSLATE_NOOP("bitcoin-abc", "Replaying blocks..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Rescanning..."), -QT_TRANSLATE_NOOP("bitcoin-abc", "Run in the background as a daemon and accept commands"), QT_TRANSLATE_NOOP("bitcoin-abc", "Section [%s] is not recognized."), QT_TRANSLATE_NOOP("bitcoin-abc", "Signing transaction failed"), QT_TRANSLATE_NOOP("bitcoin-abc", "Specified -walletdir \"%s\" does not exist"), @@ -181,7 +173,6 @@ QT_TRANSLATE_NOOP("bitcoin-abc", "Upgrading UTXO database"), QT_TRANSLATE_NOOP("bitcoin-abc", "Upgrading txindex database"), QT_TRANSLATE_NOOP("bitcoin-abc", "User Agent comment (%s) contains unsafe characters."), -QT_TRANSLATE_NOOP("bitcoin-abc", "Username for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-abc", "Verifying blocks..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Verifying wallet(s)..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Wallet %s resides outside wallet directory %s"), diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp --- a/src/qt/intro.cpp +++ b/src/qt/intro.cpp @@ -113,16 +113,15 @@ : QDialog(parent), ui(new Ui::Intro), thread(nullptr), signalled(false), m_blockchain_size(blockchain_size), m_chain_state_size(chain_state_size) { ui->setupUi(this); - ui->welcomeLabel->setText(ui->welcomeLabel->text().arg(tr(PACKAGE_NAME))); - ui->storageLabel->setText(ui->storageLabel->text().arg(tr(PACKAGE_NAME))); + ui->welcomeLabel->setText(ui->welcomeLabel->text().arg(PACKAGE_NAME)); + ui->storageLabel->setText(ui->storageLabel->text().arg(PACKAGE_NAME)); ui->lblExplanation1->setText(ui->lblExplanation1->text() - .arg(tr(PACKAGE_NAME)) + .arg(PACKAGE_NAME) .arg(m_blockchain_size) .arg(2009) .arg(tr("Bitcoin"))); - ui->lblExplanation2->setText( - ui->lblExplanation2->text().arg(tr(PACKAGE_NAME))); + ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME)); uint64_t pruneTarget = std::max(0, gArgs.GetArg("-prune", 0)); requiredSpace = m_blockchain_size; @@ -143,7 +142,7 @@ requiredSpace += m_chain_state_size; ui->sizeWarningLabel->setText( tr("%1 will download and store a copy of the Bitcoin block chain.") - .arg(tr(PACKAGE_NAME)) + + .arg(PACKAGE_NAME) + " " + storageRequiresMsg.arg(requiredSpace) + " " + tr("The wallet will also be stored in this directory.")); startThread(); @@ -228,7 +227,7 @@ } break; } catch (const fs::filesystem_error &) { - QMessageBox::critical(nullptr, tr(PACKAGE_NAME), + QMessageBox::critical(nullptr, PACKAGE_NAME, tr("Error: Specified data directory " "\"%1\" cannot be created.") .arg(dataDir)); diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -1069,7 +1069,7 @@ Bitcoin - + At least %1 GB of data will be stored in this directory, and it will grow over time. @@ -1942,20 +1942,7 @@ - - %1 didn't yet exit safely... - - - - - unknown - - - - - QObject::QObject - - + Error parsing command line arguments: %1. @@ -1974,6 +1961,16 @@ Error: %1 + + + %1 didn't yet exit safely... + + + + + unknown + + QRImageWidget @@ -2164,7 +2161,7 @@ - + Select a peer to view detailed information. @@ -2315,7 +2312,7 @@ Clear console - + 1 &hour @@ -2358,7 +2355,7 @@ - + Use up and down arrows to navigate history, and %1 to clear screen. @@ -3875,7 +3872,7 @@ UnitDisplayStatusBarControl - + Unit to show amounts in. Click to select another unit. @@ -3952,7 +3949,7 @@ bitcoin-abc - + Distributed under the MIT software license, see the accompanying file %s or %s @@ -3972,12 +3969,12 @@ - + Error: A fatal internal error occurred, see debug.log for details - + Pruning blockstore... @@ -3988,11 +3985,6 @@ - Run in the background as a daemon and accept commands - Run in the background as a daemon and accept commands - - - Section [%s] is not recognized. @@ -4042,22 +4034,12 @@ - - Bitcoin ABC - Bitcoin ABC - - - + The %s developers - - Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d) - - - - + Cannot obtain a lock on data directory %s. %s is probably already running. @@ -4117,7 +4099,7 @@ - + Copyright (C) %i-%i @@ -4212,7 +4194,7 @@ Not enough file descriptors available. - + Prune cannot be configured with a negative value. @@ -4222,7 +4204,7 @@ - + The source code is available from %s. @@ -4237,7 +4219,7 @@ - + Verifying blocks... Verifying blocks... @@ -4247,7 +4229,7 @@ - + Error: Listening for incoming connections failed (listen returned error %s) @@ -4267,12 +4249,7 @@ - - Connect through SOCKS5 proxy - - - - + Error reading from database, shutting down. @@ -4297,12 +4274,12 @@ - + Reducing -maxconnections from %d to %d, because of system limitations. - + Signing transaction failed Signing transaction failed @@ -4337,12 +4314,7 @@ - - Username for JSON-RPC connections - Username for JSON-RPC connections - - - + Verifying wallet(s)... @@ -4362,17 +4334,12 @@ - - Password for JSON-RPC connections - Password for JSON-RPC connections - - - + -maxtxfee is set very high! Fees this large could be paid on a single transaction. - + This is the transaction fee you may pay when fee estimates are not available. @@ -4397,12 +4364,12 @@ - + Keypool ran out, please call keypoolrefill first - + Starting network threads... @@ -4442,17 +4409,12 @@ Unknown network specified in -onlynet: '%s' - + Insufficient funds Insufficient funds - - Bitcoin - Bitcoin - - - + Can't generate a change-address key. Private keys are disabled for this wallet. @@ -4492,7 +4454,7 @@ - + Error loading %s: Private keys can only be disabled during creation @@ -4542,7 +4504,7 @@ Loading block index... - + Unsupported logging category %s=%s. @@ -4557,22 +4519,22 @@ - + Loading wallet... Loading wallet... - + Cannot downgrade wallet Cannot downgrade wallet - + Rescanning... Rescanning... - + Done loading Done loading diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -91,14 +91,14 @@ QDir translations(":translations"); ui->bitcoinAtStartup->setToolTip( - ui->bitcoinAtStartup->toolTip().arg(tr(PACKAGE_NAME))); + ui->bitcoinAtStartup->toolTip().arg(PACKAGE_NAME)); ui->bitcoinAtStartup->setText( - ui->bitcoinAtStartup->text().arg(tr(PACKAGE_NAME))); + ui->bitcoinAtStartup->text().arg(PACKAGE_NAME)); ui->openBitcoinConfButton->setToolTip( - ui->openBitcoinConfButton->toolTip().arg(tr(PACKAGE_NAME))); + ui->openBitcoinConfButton->toolTip().arg(PACKAGE_NAME)); - ui->lang->setToolTip(ui->lang->toolTip().arg(tr(PACKAGE_NAME))); + ui->lang->setToolTip(ui->lang->toolTip().arg(PACKAGE_NAME)); ui->lang->addItem(QString("(") + tr("default") + QString(")"), QVariant("")); for (const QString &langStr : translations.entryList()) { diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -530,7 +530,7 @@ ui->blocksDir->setToolTip(ui->blocksDir->toolTip().arg( QString(nonbreaking_hyphen) + "blocksdir")); ui->openDebugLogfileButton->setToolTip( - ui->openDebugLogfileButton->toolTip().arg(tr(PACKAGE_NAME))); + ui->openDebugLogfileButton->toolTip().arg(PACKAGE_NAME)); if (platformStyle->getImagesOnButtons()) { ui->openDebugLogfileButton->setIcon( @@ -939,8 +939,7 @@ #endif message(CMD_REPLY, - (tr("Welcome to the %1 RPC console.").arg(tr(PACKAGE_NAME)) + - "
" + + (tr("Welcome to the %1 RPC console.").arg(PACKAGE_NAME) + "
" + tr("Use up and down arrows to navigate history, and " "%1 to clear screen.") .arg("" + clsKey + "") + diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -44,7 +44,7 @@ #endif // define text to place - QString titleText = tr(PACKAGE_NAME); + QString titleText = PACKAGE_NAME; QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); QString copyrightText = QString::fromUtf8( diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp --- a/src/qt/utilitydialog.cpp +++ b/src/qt/utilitydialog.cpp @@ -37,7 +37,7 @@ : QDialog(parent), ui(new Ui::HelpMessageDialog) { ui->setupUi(this); - QString version = tr(PACKAGE_NAME) + " " + tr("version") + " " + + QString version = QString{PACKAGE_NAME} + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion()); /** * On x86 add a bit specifier to the version so that users can distinguish @@ -51,7 +51,7 @@ #endif if (about) { - setWindowTitle(tr("About %1").arg(tr(PACKAGE_NAME))); + setWindowTitle(tr("About %1").arg(PACKAGE_NAME)); /// HTML-format the license message from the core QString licenseInfo = QString::fromStdString(LicenseInfo()); @@ -150,7 +150,7 @@ : QWidget(parent, f) { QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(new QLabel( - tr("%1 is shutting down...").arg(tr(PACKAGE_NAME)) + "

" + + tr("%1 is shutting down...").arg(PACKAGE_NAME) + "

" + tr("Do not shut down the computer until this window disappears."))); setLayout(layout); } diff --git a/src/timedata.cpp b/src/timedata.cpp --- a/src/timedata.cpp +++ b/src/timedata.cpp @@ -104,7 +104,7 @@ strprintf(_("Please check that your computer's date " "and time are correct! If your clock is " "wrong, %s will not work properly."), - _(PACKAGE_NAME)); + PACKAGE_NAME); SetMiscWarning(strMessage); uiInterface.ThreadSafeMessageBox( strMessage, "", CClientUIInterface::MSG_WARNING); diff --git a/src/util/system.cpp b/src/util/system.cpp --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -1349,7 +1349,7 @@ std::string CopyrightHolders(const std::string &strPrefix) { return strPrefix + - strprintf(_(COPYRIGHT_HOLDERS), _(COPYRIGHT_HOLDERS_SUBSTITUTION)); + strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION); } // Obtain the application startup time (used for uptime calculation) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -4492,12 +4492,12 @@ } else if (nLoadWalletRet == DBErrors::TOO_NEW) { InitError(strprintf( _("Error loading %s: Wallet requires newer version of %s"), - walletFile, _(PACKAGE_NAME))); + walletFile, PACKAGE_NAME)); return nullptr; } else if (nLoadWalletRet == DBErrors::NEED_REWRITE) { InitError(strprintf( _("Wallet needed to be rewritten: restart %s to complete"), - _(PACKAGE_NAME))); + PACKAGE_NAME)); return nullptr; } else { InitError(strprintf(_("Error loading %s"), walletFile)); diff --git a/test/lint/lint-format-strings.py b/test/lint/lint-format-strings.py --- a/test/lint/lint-format-strings.py +++ b/test/lint/lint-format-strings.py @@ -18,7 +18,7 @@ ("src/index/base.cpp", "FatalError(const char *fmt, const Args &... args)"), ("src/netbase.cpp", "LogConnectFailure(bool manual_connection, const char *fmt, const Args &... args)"), ("src/util/system.cpp", - "strprintf(_(COPYRIGHT_HOLDERS), _(COPYRIGHT_HOLDERS_SUBSTITUTION))"), + "strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION)"), ("src/tinyformat.h", "printf(const char *fmt, const Args &... args)"), ("src/tinyformat.h", "printf(const char *fmt, TINYFORMAT_VARARGS(n))"), ("src/wallet/wallet.h",