git / moonbite-core / src/util/translation.h · raw

// Copyright (c) 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.#ifndef BITCOIN_UTIL_TRANSLATION_H#define BITCOIN_UTIL_TRANSLATION_H#include <tinyformat.h>#include <functional>/** * Bilingual messages: *   - in GUI: user's native language + untranslated (i.e. English) *   - in log and stderr: untranslated only */struct bilingual_str {    std::string original;    std::string translated;    bilingual_str& operator+=(const bilingual_str& rhs)    {        original += rhs.original;        translated += rhs.translated;        return *this;    }    bool empty() const    {        return original.empty();    }};inline bilingual_str operator+(bilingual_str lhs, const bilingual_str& rhs){    lhs += rhs;    return lhs;}/** Mark a bilingual_str as untranslated */inline bilingual_str Untranslated(std::string original) { return {original, original}; }namespace tinyformat {template <typename... Args>bilingual_str format(const bilingual_str& fmt, const Args&... args){    return bilingual_str{format(fmt.original, args...), format(fmt.translated, args...)};}} // namespace tinyformat/** Translate a message to the native language of the user. */const extern std::function<std::string(const char*)> G_TRANSLATION_FUN;/** * Translation function. * If no translation function is set, simply return the input. */inline bilingual_str _(const char* psz){    return bilingual_str{psz, G_TRANSLATION_FUN ? (G_TRANSLATION_FUN)(psz) : psz};}#endif // BITCOIN_UTIL_TRANSLATION_H