diff --git a/cmake/utils/translate.sh.in b/cmake/utils/translate.sh.in new file mode 100755 index 000000000..4704a121a --- /dev/null +++ b/cmake/utils/translate.sh.in @@ -0,0 +1,36 @@ +#!/bin/sh + +export LC_ALL=C.UTF-8 + +check_command() { + if ! command -v "$1" > /dev/null; then + echo "$1 is required to update the translations" + exit 1 + fi +} + +check_command xgettext +check_command lupdate +check_command git + +GETTEXT_SOURCES=$("@GIT_EXECUTABLE@" ls-files "@CMAKE_SOURCE_DIR@/src/*.cpp" "@CMAKE_SOURCE_DIR@/src/*.h" | \ + grep -v secp256k1 | \ + grep -v crypto/ctaes | \ + grep -v leveldb | \ + grep -v univalue) + +COPYRIGHT_HOLDERS="@COPYRIGHT_HOLDERS@" \ +"@Python_EXECUTABLE@" "@CMAKE_SOURCE_DIR@/share/qt/extract_strings_qt.py" ${GETTEXT_SOURCES} + +LUPDATE_FILES=$("@GIT_EXECUTABLE@" ls-files \ + "@CMAKE_SOURCE_DIR@/src/qt/*.cpp" \ + "@CMAKE_SOURCE_DIR@/src/qt/*.h" \ + "@CMAKE_SOURCE_DIR@/src/qt/*.mm" \ + "@CMAKE_SOURCE_DIR@/src/qt/forms/*.ui") + +QT_SELECT=qt5 \ +lupdate "@CMAKE_CURRENT_SOURCE_DIR@/bitcoinstrings.cpp" \ +${LUPDATE_FILES} \ +-locations relative \ +-no-obsolete \ +-ts "@CMAKE_CURRENT_SOURCE_DIR@/locale/bitcoin_en.ts" diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 0135389f5..69546dda6 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -1,594 +1,607 @@ # Copyright (c) 2018 The Bitcoin developers project(bitcoin-qt) # This ensure that AUTOMOC doesn't run on generated files. cmake_policy(SET CMP0071 OLD) include(BrewHelper) find_brew_prefix(QT5_PREFIX qt5) set(QT_REQUIRED_COMPONENTS Core Widgets Network Test) if(ENABLE_DBUS_NOTIFICATIONS) list(APPEND QT_REQUIRED_COMPONENTS DBus) endif() find_package(Qt5 5.5.1 COMPONENTS ${QT_REQUIRED_COMPONENTS} REQUIRED HINTS "${QT5_PREFIX}") # Localisation add_subdirectory(locale) add_custom_command(OUTPUT temp_bitcoin_locale.qrc COMMAND cmake ARGS -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bitcoin_locale.qrc" temp_bitcoin_locale.qrc MAIN_DEPENDENCY bitcoin_locale.qrc VERBATIM ) add_custom_command(OUTPUT qrc_bitcoin_locale.cpp COMMAND Qt5::rcc ARGS temp_bitcoin_locale.qrc -name bitcoin_locale -o qrc_bitcoin_locale.cpp MAIN_DEPENDENCY temp_bitcoin_locale.qrc DEPENDS locales VERBATIM ) # UI elements # qt5_wrap_ui() generates the files in the CMAKE_CURRENT_BINARY_DIR. As there # is no option to change the output directory, moving the files to the forms # subdirectory requires to override the variable. It is reset to its actual # value after the call so it does not impact the other sections of this # CMakeLists.txt file. set(SAVE_CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/forms") # It seems that some generators (at least the Unix Makefiles one) doesn't create # the build directory required by a custom command, so do it manually. file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) qt5_wrap_ui(UI_GENERATED_HEADERS forms/addressbookpage.ui forms/askpassphrasedialog.ui forms/coincontroldialog.ui forms/editaddressdialog.ui forms/helpmessagedialog.ui forms/intro.ui forms/modaloverlay.ui forms/openuridialog.ui forms/optionsdialog.ui forms/overviewpage.ui forms/receivecoinsdialog.ui forms/receiverequestdialog.ui forms/debugwindow.ui forms/sendcoinsdialog.ui forms/sendcoinsentry.ui forms/signverifymessagedialog.ui forms/transactiondescdialog.ui ) set(CMAKE_CURRENT_BINARY_DIR ${SAVE_CMAKE_CURRENT_BINARY_DIR}) # Qt MOC set(CMAKE_AUTOMOC ON) # Handle qrc resources qt5_add_resources(QRC_BITCOIN_CPP bitcoin.qrc) add_library(bitcoin-qt-base bantablemodel.cpp bitcoin.cpp bitcoinaddressvalidator.cpp bitcoinamountfield.cpp bitcoingui.cpp bitcoinunits.cpp clientmodel.cpp csvmodelwriter.cpp guiutil.cpp intro.cpp modaloverlay.cpp networkstyle.cpp notificator.cpp optionsdialog.cpp optionsmodel.cpp peertablemodel.cpp platformstyle.cpp qvalidatedlineedit.cpp qvaluecombobox.cpp rpcconsole.cpp splashscreen.cpp trafficgraphwidget.cpp utilitydialog.cpp # Handle ui files ${UI_GENERATED_HEADERS} # Translations ${BITCOIN_QM_FILES} # Handle qrc files ${QRC_BITCOIN_CPP} qrc_bitcoin_locale.cpp ) # Add the minimal integration plugin, and other plugins according to the target # platform. set(QT_PLUGIN_COMPONENTS QMinimalIntegrationPlugin) set(QT_PLUGIN_PLATFORM_DEFINITIONS -DQT_QPA_PLATFORM_MINIMAL=1) # Linux support if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") list(APPEND QT_PLUGIN_COMPONENTS QXcbIntegrationPlugin) list(APPEND QT_PLUGIN_PLATFORM_DEFINITIONS -DQT_QPA_PLATFORM_XCB=1) endif() # Windows support if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") list(APPEND QT_PLUGIN_COMPONENTS QWindowsIntegrationPlugin) list(APPEND QT_PLUGIN_PLATFORM_DEFINITIONS -DQT_QPA_PLATFORM_WINDOWS=1) target_sources(bitcoin-qt-base PRIVATE winshutdownmonitor.cpp) endif() # OSX support if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") list(APPEND QT_PLUGIN_COMPONENTS QCocoaIntegrationPlugin) list(APPEND QT_PLUGIN_PLATFORM_DEFINITIONS -DQT_QPA_PLATFORM_COCOA=1) target_sources(bitcoin-qt-base PRIVATE macdockiconhandler.mm macnotificationhandler.mm ) set_property(TARGET bitcoin-qt-base PROPERTY AUTOMOC_MOC_OPTIONS "-DQ_OS_MAC") target_link_libraries(bitcoin-qt-base "-framework Foundation" "-framework ApplicationServices" "-framework AppKit" ) endif() # Find out more about Qt. This is similar to # http://code.qt.io/cgit/qt/qtwebkit.git/tree/Source/cmake/OptionsQt.cmake get_target_property(QT_CORE_TYPE Qt5::Core TYPE) if(QT_CORE_TYPE MATCHES STATIC) set(QT_STATIC_BUILD ON) endif() # Determine the Qt libraries directory from the QT5::Core library location get_target_property(QT_CORE_LIB_LOCATION Qt5::Core LOCATION) get_filename_component(QT5_LIB_DIR "${QT_CORE_LIB_LOCATION}" DIRECTORY) set(STATIC_DEPENDENCIES_CMAKE_FILE "${CMAKE_BINARY_DIR}/QtStaticDependencies.cmake") if(EXISTS ${STATIC_DEPENDENCIES_CMAKE_FILE}) file(REMOVE ${STATIC_DEPENDENCIES_CMAKE_FILE}) endif() set(CONVERT_PRL_PATH "${CONTRIB_PATH}/qt/convert-prl-libs-to-cmake.pl") macro(CONVERT_PRL_LIBS_TO_CMAKE _qt_component) if(TARGET Qt5::${_qt_component}) get_target_property(_lib_location Qt5::${_qt_component} LOCATION) execute_process(COMMAND ${PERL_EXECUTABLE} "${CONVERT_PRL_PATH}" --lib "${_lib_location}" --qt_lib_install_dir "${QT5_LIB_DIR}" --out "${STATIC_DEPENDENCIES_CMAKE_FILE}" --component "${_qt_component}" --compiler "${CMAKE_CXX_COMPILER_ID}" ) endif() endmacro() if(QT_STATIC_BUILD) list(APPEND QT_REQUIRED_COMPONENTS ${QT_PLUGIN_COMPONENTS}) foreach(qt_module ${QT_REQUIRED_COMPONENTS}) CONVERT_PRL_LIBS_TO_CMAKE(${qt_module}) endforeach() # HACK: We must explicitly add LIB path of the Qt installation # to correctly find qtpcre link_directories("${QT5_LIB_DIR}") # Now that we generated the dependencies, import them. set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CONVERT_PRL_PATH}") if(NOT EXISTS ${STATIC_DEPENDENCIES_CMAKE_FILE}) message(FATAL_ERROR "Unable to find ${STATIC_DEPENDENCIES_CMAKE_FILE}") endif() include(${STATIC_DEPENDENCIES_CMAKE_FILE}) list(REMOVE_DUPLICATES STATIC_LIB_DEPENDENCIES) # According to Qt documentation (https://doc.qt.io/qt-5/plugins-howto.html): # "Plugins can be linked statically into your application. # If you build the static version of Qt, this is the only option for # including Qt's predefined plugins." # So if the Qt build is static, the plugins should also be static and we # need to define QT_STATICPLUGIN to tell the code to import . target_compile_definitions(bitcoin-qt-base PUBLIC -DQT_STATICPLUGIN=1) # Add the platform plugin definition if required # Setting this definition tells the code what is the target for Q_IMPORT_PLUGIN(). foreach(qt_platform_definition ${QT_PLUGIN_PLATFORM_DEFINITIONS}) target_compile_definitions(bitcoin-qt-base PUBLIC "${qt_platform_definition}") endforeach() # Link the required plugins foreach(qt_plugin ${QT_PLUGIN_COMPONENTS}) target_link_libraries(bitcoin-qt-base Qt5::${qt_plugin}) endforeach() endif() target_link_libraries(bitcoin-qt-base server rpcclient Qt5::Widgets Qt5::Network ) if(ENABLE_DBUS_NOTIFICATIONS) target_link_libraries(bitcoin-qt-base Qt5::DBus) endif() if(ENABLE_BIP70) # Do protobuf codegen find_package(Protobuf REQUIRED) protobuf_generate_cpp(PROTOBUF_SOURCES PROTOBUF_HEADERS paymentrequest.proto) add_library(bitcoin-qt-protobuf OBJECT # Protobuf codegen ${PROTOBUF_HEADERS} ${PROTOBUF_SOURCES} ) target_include_directories(bitcoin-qt-protobuf PUBLIC ${Protobuf_INCLUDE_DIRS}) target_link_libraries(bitcoin-qt-protobuf ${Protobuf_LIBRARIES}) # Don't run clang-tidy on generated files if(ENABLE_CLANG_TIDY) include(ClangTidy) target_disable_clang_tidy(bitcoin-qt-protobuf) endif() target_link_libraries(bitcoin-qt-base OpenSSL::SSL bitcoin-qt-protobuf ) endif() # Wallet if(BUILD_BITCOIN_WALLET) # Automoc option. set(AUTOMOC_MOC_OPTIONS -DENABLE_WALLET=1) # Add wallet functionality to bitcoin-qt target_sources(bitcoin-qt-base PRIVATE addressbookpage.cpp addresstablemodel.cpp askpassphrasedialog.cpp coincontroldialog.cpp coincontroltreewidget.cpp editaddressdialog.cpp openuridialog.cpp overviewpage.cpp paymentserver.cpp receivecoinsdialog.cpp receiverequestdialog.cpp recentrequeststablemodel.cpp sendcoinsdialog.cpp sendcoinsentry.cpp signverifymessagedialog.cpp transactiondesc.cpp transactiondescdialog.cpp transactionfilterproxy.cpp transactionrecord.cpp transactiontablemodel.cpp transactionview.cpp walletcontroller.cpp walletframe.cpp walletmodel.cpp walletmodeltransaction.cpp walletview.cpp ) # Add BIP70 functionality to bitcoin-qt if(ENABLE_BIP70) target_sources(bitcoin-qt-base PRIVATE paymentrequestplus.cpp ) endif() target_link_libraries(bitcoin-qt-base wallet) if(ENABLE_QRCODE) find_package(QREncode REQUIRED) target_link_libraries(bitcoin-qt-base QREncode::qrencode) endif() endif() # The executable add_executable(bitcoin-qt WIN32 main.cpp) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") target_sources(bitcoin-qt PRIVATE res/bitcoin-qt-res.rc) endif() target_link_libraries(bitcoin-qt bitcoin-qt-base) include(BinaryTest) add_to_symbols_check(bitcoin-qt) add_to_security_check(bitcoin-qt) include(InstallationHelper) install_target(bitcoin-qt) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(BITCOINQT_BUNDLE_ICON "res/icons/bitcoin.icns") get_filename_component(BITCOINQT_BUNDLE_ICON_NAME "${BITCOINQT_BUNDLE_ICON}" NAME ) set(INFO_PLIST_STRINGS_FILE "Base.lproj/InfoPlist.strings") set(INFO_PLIST_STRINGS_PATH "${CMAKE_CURRENT_BINARY_DIR}/${INFO_PLIST_STRINGS_FILE}") file(WRITE "${INFO_PLIST_STRINGS_PATH}" "{ CFBundleDisplayName = \"${PACKAGE_NAME}\"; CFBundleName = \"${PACKAGE_NAME}\"; }" ) set(EMPTY_LPROJ_FILE "${CMAKE_CURRENT_BINARY_DIR}/empty.lproj") file(TOUCH "${EMPTY_LPROJ_FILE}") target_sources(bitcoin-qt PRIVATE "${BITCOINQT_BUNDLE_ICON}" "${INFO_PLIST_STRINGS_PATH}" "${EMPTY_LPROJ_FILE}" ) string(JOIN ";" BITCOINQT_BUNDLE_RESOURCES "${BITCOINQT_BUNDLE_ICON}" "${EMPTY_LPROJ_FILE}" ) set(BITCOIN_QT_OSX_BUNDLE_NAME "BitcoinABC-Qt") set_target_properties(bitcoin-qt PROPERTIES MACOSX_BUNDLE ON OUTPUT_NAME "${BITCOIN_QT_OSX_BUNDLE_NAME}" MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/share/qt/Info.plist.cmake.in" MACOSX_BUNDLE_BUNDLE_NAME "${BITCOIN_QT_OSX_BUNDLE_NAME}" MACOSX_BUNDLE_BUNDLE_VERSION "${bitcoin-abc_VERSION}" MACOSX_BUNDLE_GUI_IDENTIFIER "org.bitcoinabc.${BITCOIN_QT_OSX_BUNDLE_NAME}" MACOSX_BUNDLE_ICON_FILE "${BITCOINQT_BUNDLE_ICON_NAME}" MACOSX_BUNDLE_INFO_STRING "${bitcoin-abc_VERSION}, Copyright © 2009-${COPYRIGHT_YEAR} ${COPYRIGHT_HOLDERS_FINAL}" MACOSX_BUNDLE_LONG_VERSION_STRING "${bitcoin-abc_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${bitcoin-abc_VERSION}" RESOURCE "${BITCOINQT_BUNDLE_RESOURCES}" ) # The InfoPlist.strings files should be located in a resource subdirectory. # This is not supported by the RESOURCE property and require the use of the # MACOSX_PACKAGE_LOCATION property instead. The RESOURCE documentation has # an example demonstrating this behavior (see the appres.txt file): # https://cmake.org/cmake/help/latest/prop_tgt/RESOURCE.html set_source_files_properties( "${INFO_PLIST_STRINGS_PATH}" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/${INFO_PLIST_STRINGS_FILE}" ) # Create a stripped version of the application bundle to be used in the DMG. # Since the LOCATION property and the BundleUtilities package are deprecated # by cmake, only generator expressions can be used to determine the path to # the bundle and its executable. However the generator expressions are # solved at build time, making them unusable to do path computation at # configuration time. # The paths here are then hard-coded, which is safe since the structure of # an application bundle is well-known and specified by Apple. Note that this # will only work for building MacOS application bundle as the IOS structure # is slightly different. set(STRIPPED_BUNDLE "${CMAKE_CURRENT_BINARY_DIR}/stripped/${BITCOIN_QT_OSX_BUNDLE_NAME}.app") add_custom_command( OUTPUT "${STRIPPED_BUNDLE}" COMMAND ${CMAKE_COMMAND} -E copy_directory "$" "${STRIPPED_BUNDLE}" COMMAND ${CMAKE_STRIP} -u -r "${STRIPPED_BUNDLE}/Contents/MacOS/${BITCOIN_QT_OSX_BUNDLE_NAME}" DEPENDS bitcoin-qt ) include(DoOrFail) find_program_or_fail(CMAKE_INSTALL_NAME_TOOL "install_name_tool") find_program_or_fail(CMAKE_OTOOL "otool") set(QT_INSTALLER_SUPPORTED_LANGUAGES "da" "de" "es" "hu" "ru" "uk" "zh_CN" "zh_TW" ) string(JOIN "," QT_LOCALES ${QT_INSTALLER_SUPPORTED_LANGUAGES}) get_target_property(QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION) execute_process( COMMAND "${QMAKE_EXECUTABLE}" -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATION_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) function(get_qt_translation_dir QT_TRANSLATION_DIR) foreach(_locale ${ARGN}) find_path(_qt_translation_dir "qt_${_locale}.qm" HINTS "${QT_TRANSLATION_DIR}" PATH_SUFFIXES "translations" ) # Ensure that all the translation files are found, and are located # in the same directory. if(NOT _qt_translation_dir OR (_qt_translation_dir_previous AND (NOT _qt_translation_dir_previous STREQUAL _qt_translation_dir))) return() endif() set(_qt_translation_dir_previous _qt_translation_dir) endforeach() set(QT_TRANSLATION_DIR ${_qt_translation_dir} PARENT_SCOPE) endfunction() get_qt_translation_dir(QT_TRANSLATION_DIR ${QT_INSTALLER_SUPPORTED_LANGUAGES}) if(NOT QT_TRANSLATION_DIR) message(FATAL_ERROR "Qt translation files are not found") endif() set(MACDEPLOY_DIR "${CMAKE_SOURCE_DIR}/contrib/macdeploy") set(MACDEPLOYQTPLUS "${MACDEPLOY_DIR}/macdeployqtplus") set(DMG_DIST "${CMAKE_BINARY_DIR}/dist") add_custom_command( OUTPUT "${DMG_DIST}" COMMAND "INSTALLNAMETOOL=${CMAKE_INSTALL_NAME_TOOL}" "OTOOL=${CMAKE_OTOOL}" "STRIP=${CMAKE_STRIP}" "${Python_EXECUTABLE}" "${MACDEPLOYQTPLUS}" "${STRIPPED_BUNDLE}" -translations-dir "${QT_TRANSLATION_DIR}" -add-qt-tr "${QT_LOCALES}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" DEPENDS "${STRIPPED_BUNDLE}" ) # Building the DMG background image requires several steps: # 1/ The SVG file must be edited to display the package name # 2/ The SVG file should be transformed into a couple PNG files, on for # low resolution screens and one for high resolution screens. # 3/ The PNG files must be transformed into a multi-resolution TIFF file. # The names are not set arbitrarily, they follow Apple's guidelines for # resolution independent bitmap images (see `man tiffutil`). set(BACKGROUND_SVG "background.svg") configure_file( "${CMAKE_SOURCE_DIR}/contrib/macdeploy/background.svg.cmake.in" "${BACKGROUND_SVG}" ) include(ImageHelper) set(BACKGROUND_PNG_LOWRES "${CMAKE_CURRENT_BINARY_DIR}/background_temp.png") set(BACKGROUND_PNG_HIRES "${CMAKE_CURRENT_BINARY_DIR}/background_temp@2x.png") set(BACKGROUND_TIFF_LOWRES "${CMAKE_CURRENT_BINARY_DIR}/background_temp.tiff") set(BACKGROUND_TIFF_HIRES "${CMAKE_CURRENT_BINARY_DIR}/background_temp@2x.tiff") set(BACKGROUND_TIFF_NAME "background.tiff") set(BACKGROUND_TIFF_MULTIRES "${CMAKE_BINARY_DIR}/${BACKGROUND_TIFF_NAME}") convert_svg_to_png("${BACKGROUND_SVG}" "${BACKGROUND_PNG_LOWRES}" 36) convert_svg_to_png("${BACKGROUND_SVG}" "${BACKGROUND_PNG_HIRES}" 72) convert_png_to_tiff("${BACKGROUND_PNG_LOWRES}" "${BACKGROUND_TIFF_LOWRES}") convert_png_to_tiff("${BACKGROUND_PNG_HIRES}" "${BACKGROUND_TIFF_HIRES}") cat_multi_resolution_tiff("${BACKGROUND_TIFF_MULTIRES}" "${BACKGROUND_TIFF_LOWRES}" "${BACKGROUND_TIFF_HIRES}") set(BACKGROUND_DIST_DIR "${DMG_DIST}/.background") set(BACKGROUND_DIST_TIFF "${BACKGROUND_DIST_DIR}/${BACKGROUND_TIFF_NAME}") add_custom_command( OUTPUT "${BACKGROUND_DIST_TIFF}" COMMAND ${CMAKE_COMMAND} -E make_directory "${BACKGROUND_DIST_DIR}" COMMAND ${CMAKE_COMMAND} -E copy "${BACKGROUND_TIFF_MULTIRES}" "${BACKGROUND_DIST_TIFF}" DEPENDS "${BACKGROUND_TIFF_MULTIRES}" "${DMG_DIST}" ) string(REPLACE " " "-" OSX_VOLNAME "${PACKAGE_NAME}") file(WRITE "${CMAKE_BINARY_DIR}/osx_volname" "${OSX_VOLNAME}") set(DMG_DSSTORE "${DMG_DIST}/.DS_Store") set(GEN_DSSTORE "${MACDEPLOY_DIR}/custom_dsstore.py") add_custom_command( OUTPUT "${DMG_DSSTORE}" COMMAND "${Python_EXECUTABLE}" "${GEN_DSSTORE}" "${DMG_DSSTORE}" "${OSX_VOLNAME}" DEPENDS "${GEN_DSSTORE}" "${DMG_DIST}" ) set(OSX_APPLICATION_DIR "Applications") set(OSX_APPLICATION_SYMLINK "${DMG_DIST}/${OSX_APPLICATION_DIR}") add_custom_command( OUTPUT "${OSX_APPLICATION_SYMLINK}" COMMAND ${CMAKE_COMMAND} -E create_symlink "/${OSX_APPLICATION_DIR}" "${OSX_APPLICATION_SYMLINK}" DEPENDS "${DMG_DIST}" ) add_custom_target(osx-deploydir DEPENDS "${OSX_APPLICATION_SYMLINK}" "${DMG_DSSTORE}" "${BACKGROUND_DIST_TIFF}" ) if(CMAKE_CROSSCOMPILING) find_program_or_fail(GENISOIMAGE_EXECUTABLE genisoimage) add_custom_target(osx-dmg COMMAND "${GENISOIMAGE_EXECUTABLE}" -no-cache-inodes -D -l -probe -V "${OSX_VOLNAME}" -no-pad -r -dir-mode 0755 -apple -o "${OSX_VOLNAME}.dmg" "${DMG_DIST}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ) add_dependencies(osx-dmg osx-deploydir) else() add_custom_target(osx-dmg COMMAND "${Python_EXECUTABLE}" "${MACDEPLOYQTPLUS}" "${STRIPPED_BUNDLE}" -translations-dir "${QT_TRANSLATION_DIR}" -add-qt-tr "${QT_LOCALES}" -dmg -fancy "${MACDEPLOY_DIR}/fancy.plist" -volname "${OSX_VOLNAME}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" DEPENDS "${STRIPPED_BUNDLE}" "${BACKGROUND_TIFF_MULTIRES}" ) endif() endif() +configure_file( + "${CMAKE_SOURCE_DIR}/cmake/utils/translate.sh.in" + "${CMAKE_CURRENT_BINARY_DIR}/translate.sh" + @ONLY +) + +add_custom_target(translate + COMMENT "Updating the translations..." + COMMAND "${CMAKE_CURRENT_BINARY_DIR}/translate.sh" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/translate.sh" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." +) + # Test tests add_subdirectory(test) diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 651e0f147..d64629eb9 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -1,182 +1,184 @@ #include // Automatically @generated by extract_strings_qt.py #ifdef __GNUC__ #define UNUSED __attribute__((unused)) #else #define UNUSED #endif static const char UNUSED *bitcoin_strings[] = { QT_TRANSLATE_NOOP("bitcoin-abc", "The %s developers"), 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", "" "Can't generate a change-address key. Private keys are disabled for this " "wallet."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Cannot obtain a lock on data directory %s. %s is probably already running."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Cannot provide specific connections and have addrman find outgoing " "connections at the same."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Cannot upgrade a non HD split wallet without upgrading to support pre split " "keypool. Please use -upgradewallet=200300 or -upgradewallet with no version " "specified."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Distributed under the MIT software license, see the accompanying file %s or " "%s"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Error reading %s! All keys read correctly, but transaction data or address " "book entries might be missing or incorrect."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Error: Listening for incoming connections failed (listen returned error %s)"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Invalid amount for -maxtxfee=: '%s' (must be at least the minrelay " "fee of %s to prevent stuck transactions)"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Max generated block size (blockmaxsize) cannot exceed the excessive block " "size (excessiveblocksize)"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Please check that your computer's date and time are correct! If your clock " "is wrong, %s will not work properly."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Please contribute if you find %s useful. Visit %s for further information " "about the software."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Prune configured below the minimum of %d MiB. Please use a higher number."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Prune: last wallet synchronisation goes beyond pruned data. You need to -" "reindex (download the whole blockchain again in case of pruned node)"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Rescans are not possible in pruned mode. You will need to use -reindex which " "will download the whole blockchain again."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "The block database contains a block which appears to be from the future. " "This may be due to your computer's date and time being set incorrectly. Only " "rebuild the block database if you are sure that your computer's date and " "time are correct"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "The transaction amount is too small to send after the fee has been deducted"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "This is a pre-release test build - use at your own risk - do not use for " "mining or merchant applications"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "This is the transaction fee you may pay when fee estimates are not available."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "This product includes software developed by the OpenSSL Project for use in " "the OpenSSL Toolkit %s and cryptographic software written by Eric Young and " "UPnP software written by Thomas Bernard."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Total length of network version string (%i) exceeds maximum length (%i). " "Reduce the number or size of uacomments."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Unable to replay blocks. You will need to rebuild the database using -" "reindex-chainstate."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Warning: Private keys detected in wallet {%s} with disabled private keys"), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Warning: The network does not appear to fully agree! Some miners appear to " "be experiencing issues."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Warning: Wallet file corrupt, data salvaged! Original %s saved as %s in %s; " "if your balance or transactions are incorrect you should restore from a " "backup."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "Warning: We do not appear to fully agree with our peers! You may need to " "upgrade, or other nodes may need to upgrade."), QT_TRANSLATE_NOOP("bitcoin-abc", "" "You need to rebuild the database using -reindex to go back to unpruned " "mode. This will redownload the entire blockchain"), QT_TRANSLATE_NOOP("bitcoin-abc", "%s corrupt, salvage failed"), QT_TRANSLATE_NOOP("bitcoin-abc", "%s is set very high!"), +QT_TRANSLATE_NOOP("bitcoin-abc", "(press q to shutdown and continue later)"), QT_TRANSLATE_NOOP("bitcoin-abc", "-maxmempool must be at least %d MB"), QT_TRANSLATE_NOOP("bitcoin-abc", "Cannot downgrade wallet"), QT_TRANSLATE_NOOP("bitcoin-abc", "Cannot resolve -%s address: '%s'"), 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", "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?"), QT_TRANSLATE_NOOP("bitcoin-abc", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error initializing block database"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error initializing wallet database environment %s!"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading %s"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading %s: Private keys can only be disabled during creation"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading %s: Wallet corrupted"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading %s: Wallet requires newer version of %s"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading block database"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error loading wallet %s. Duplicate -wallet filename specified."), QT_TRANSLATE_NOOP("bitcoin-abc", "Error opening block database"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error reading from database, shutting down."), QT_TRANSLATE_NOOP("bitcoin-abc", "Error upgrading chainstate database"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error: A fatal internal error occurred, see debug.log for details"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error: Disk space is low for %s"), QT_TRANSLATE_NOOP("bitcoin-abc", "Error: Disk space is low!"), QT_TRANSLATE_NOOP("bitcoin-abc", "Excessive block size must be > 1,000,000 bytes (1MB)"), QT_TRANSLATE_NOOP("bitcoin-abc", "Failed to listen on any port. Use -listen=0 if you want this."), QT_TRANSLATE_NOOP("bitcoin-abc", "Failed to rescan the wallet during initialization"), QT_TRANSLATE_NOOP("bitcoin-abc", "Importing..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Incorrect or no genesis block found. Wrong datadir for network?"), QT_TRANSLATE_NOOP("bitcoin-abc", "Information"), QT_TRANSLATE_NOOP("bitcoin-abc", "Initialization sanity check failed. %s is shutting down."), QT_TRANSLATE_NOOP("bitcoin-abc", "Insufficient funds"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid -onion address or hostname: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid -proxy address or hostname: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid amount for -%s=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid amount for -fallbackfee=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid amount for -paytxfee=: '%s' (must be at least %s)"), QT_TRANSLATE_NOOP("bitcoin-abc", "Invalid netmask specified in -whitelist: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Keypool ran out, please call keypoolrefill first"), QT_TRANSLATE_NOOP("bitcoin-abc", "Loading P2P addresses..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Loading banlist..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Loading block index..."), 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", "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", "Section [%s] is not recognized."), QT_TRANSLATE_NOOP("bitcoin-abc", "Signing transaction failed"), QT_TRANSLATE_NOOP("bitcoin-abc", "Specified -walletdir \"%s\" does not exist"), QT_TRANSLATE_NOOP("bitcoin-abc", "Specified -walletdir \"%s\" is a relative path"), QT_TRANSLATE_NOOP("bitcoin-abc", "Specified -walletdir \"%s\" is not a directory"), QT_TRANSLATE_NOOP("bitcoin-abc", "Specified blocks directory \"%s\" does not exist."), QT_TRANSLATE_NOOP("bitcoin-abc", "Starting network threads..."), QT_TRANSLATE_NOOP("bitcoin-abc", "The source code is available from %s."), QT_TRANSLATE_NOOP("bitcoin-abc", "The transaction amount is too small to pay the fee"), QT_TRANSLATE_NOOP("bitcoin-abc", "The wallet will avoid paying less than the minimum relay fee."), QT_TRANSLATE_NOOP("bitcoin-abc", "This is experimental software."), QT_TRANSLATE_NOOP("bitcoin-abc", "This is the minimum transaction fee you pay on every transaction."), QT_TRANSLATE_NOOP("bitcoin-abc", "This is the transaction fee you will pay if you send a transaction."), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction amount too small"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction amounts must not be negative"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction fee and change calculation failed"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction has too long of a mempool chain"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction must have at least one recipient"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction too large for fee policy"), QT_TRANSLATE_NOOP("bitcoin-abc", "Transaction too large"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to bind to %s on this computer (bind returned error %s)"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to bind to %s on this computer. %s is probably already running."), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to create the PID file '%s': %s"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to generate initial keys"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to generate keys"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unable to start HTTP server. See debug log for details."), QT_TRANSLATE_NOOP("bitcoin-abc", "Unknown network specified in -onlynet: '%s'"), QT_TRANSLATE_NOOP("bitcoin-abc", "Unsupported logging category %s=%s."), 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", "Verifying blocks..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Verifying wallet(s)..."), QT_TRANSLATE_NOOP("bitcoin-abc", "Wallet %s resides outside wallet directory %s"), QT_TRANSLATE_NOOP("bitcoin-abc", "Wallet needed to be rewritten: restart %s to complete"), QT_TRANSLATE_NOOP("bitcoin-abc", "Warning"), QT_TRANSLATE_NOOP("bitcoin-abc", "Zapping all transactions from wallet..."), +QT_TRANSLATE_NOOP("bitcoin-abc", "press q to shutdown"), }; diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index 9df9873cd..155318ac4 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -1,4547 +1,4557 @@ AddressBookPage Right-click to edit address or label Create a new address Create a new address &New Copy the currently selected address to the system clipboard Copy the currently selected address to the system clipboard &Copy C&lose Delete the currently selected address from the list Delete the currently selected address from the list Enter address or label to search Export the data in the current tab to a file Export the data in the current tab to a file &Export &Export &Delete &Delete Choose the address to send coins to Choose the address to receive coins with C&hoose Sending addresses Receiving addresses These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. &Copy Address Copy &Label &Edit Export Address List Comma separated file (*.csv) Exporting Failed There was an error trying to save the address list to %1. Please try again. AddressTableModel Label Address (no label) AskPassphraseDialog Passphrase Dialog Passphrase Dialog Enter passphrase Enter passphrase New passphrase New passphrase Repeat new passphrase Repeat new passphrase Show password Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. Encrypt wallet This operation needs your wallet passphrase to unlock the wallet. Unlock wallet This operation needs your wallet passphrase to decrypt the wallet. Decrypt wallet Change passphrase Enter the old passphrase and new passphrase to the wallet. Confirm wallet encryption Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! Are you sure you wish to encrypt your wallet? Wallet encrypted Your wallet is now encrypted. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. Wallet encryption failed Wallet encryption failed due to an internal error. Your wallet was not encrypted. The supplied passphrases do not match. Wallet unlock failed The passphrase entered for the wallet decryption was incorrect. Wallet decryption failed Wallet passphrase was successfully changed. Warning: The Caps Lock key is on! BanTableModel IP/Netmask Banned Until BitcoinGUI Sign &message... Sign &message... Synchronizing with network... Synchronizing with network... &Overview &Overview Show general overview of wallet Show general overview of wallet Request payments (generates QR codes and %1: URIs) &Transactions &Transactions Browse transaction history Browse transaction history E&xit E&xit Quit application Quit application &About %1 Show information about %1 About &Qt About &Qt Show information about Qt Show information about Qt &Options... &Options... Modify configuration options for %1 &Encrypt Wallet... &Encrypt Wallet... &Backup Wallet... &Backup Wallet... &Change Passphrase... &Change Passphrase... &Sending addresses... &Receiving addresses... Open &URI... Open a %1: URI or payment request Wallet: Click to disable network activity. Network activity disabled. Click to enable network activity again. Syncing Headers (%1%)... Reindexing blocks on disk... Reindexing blocks on disk... Proxy is <b>enabled</b>: %1 Send coins to a Bitcoin address Send coins to a Bitcoin address Backup wallet to another location Backup wallet to another location Change the passphrase used for wallet encryption Change the passphrase used for wallet encryption &Debug window &Debug window Open debugging and diagnostic console Open debugging and diagnostic console &Verify message... &Verify message... Bitcoin Bitcoin &Send &Send &Receive &Receive &Show / Hide &Show / Hide Show or hide the main Window Show or hide the main Window Encrypt the private keys that belong to your wallet Encrypt the private keys that belong to your wallet Sign messages with your Bitcoin addresses to prove you own them Sign messages with your Bitcoin addresses to prove you own them Verify messages to ensure they were signed with specified Bitcoin addresses Verify messages to ensure they were signed with specified Bitcoin addresses &File &File &Settings &Settings &Help &Help Tabs toolbar Tabs toolbar Show the list of used sending addresses and labels Show the list of used receiving addresses and labels &Command-line options %n active connection(s) to Bitcoin network %n active connection to Bitcoin network %n active connections to Bitcoin network Indexing blocks on disk... Processing blocks on disk... Processed %n block(s) of transaction history. Processed %n block of transaction history. Processed %n blocks of transaction history. %1 behind %1 behind Last received block was generated %1 ago. Last received block was generated %1 ago. Transactions after this will not yet be visible. Transactions after this will not yet be visible. Error Error Warning Warning Information Information Up to date Up to date Show the %1 help message to get a list with possible Bitcoin command-line options %1 client Connecting to peers... Catching up... Catching up... Date: %1 Amount: %1 Wallet: %1 Type: %1 Label: %1 Address: %1 Sent transaction Sent transaction Incoming transaction Incoming transaction HD key generation is <b>enabled</b> HD key generation is <b>disabled</b> Wallet is <b>encrypted</b> and currently <b>unlocked</b> Wallet is <b>encrypted</b> and currently <b>unlocked</b> Wallet is <b>encrypted</b> and currently <b>locked</b> Wallet is <b>encrypted</b> and currently <b>locked</b> A fatal error occurred. Bitcoin can no longer continue safely and will quit. CoinControlDialog Coin Selection Quantity: Bytes: Amount: Fee: Dust: After Fee: Change: (un)select all Tree mode List mode Amount Amount Received with label Received with address Date Date Confirmations Confirmed Confirmed Copy address Copy label Copy amount Copy transaction ID Lock unspent Unlock unspent Copy quantity Copy fee Copy after fee Copy bytes Copy dust Copy change (%1 locked) yes no This label turns red if any recipient receives an amount smaller than the current dust threshold. Can vary +/- %1 satoshi(s) per input. (no label) change from %1 (%2) (change) EditAddressDialog Edit Address Edit Address &Label &Label The label associated with this address list entry The address associated with this address list entry. This can only be modified for sending addresses. &Address &Address New sending address Edit receiving address Edit sending address The entered address "%1" is not a valid Bitcoin address. Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. The entered address "%1" is already in the address book with label "%2". Could not unlock wallet. New key generation failed. FreespaceChecker A new data directory will be created. A new data directory will be created. name name Directory already exists. Add %1 if you intend to create a new directory here. Directory already exists. Add %1 if you intend to create a new directory here. Path already exists, and is not a directory. Path already exists, and is not a directory. Cannot create data directory here. Cannot create data directory here. HelpMessageDialog version version (%1-bit) About %1 Command-line options Intro Welcome Welcome Welcome to %1. As this is the first time the program is launched, you can choose where %1 will store its data. When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched. This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. Use the default data directory Use the default data directory Use a custom data directory: Use a custom data directory: Bitcoin Bitcoin At least %1 GB of data will be stored in this directory, and it will grow over time. Approximately %1 GB of data will be stored in this directory. %1 will download and store a copy of the Bitcoin block chain. The wallet will also be stored in this directory. Error: Specified data directory "%1" cannot be created. Error Error %n GB of free space available %n GB of free space available %n GB of free space available (of %n GB needed) (of %n GB needed) (of %n GB needed) ModalOverlay Form Form Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. Number of blocks left Unknown... Last block time Last block time Progress Progress increase per hour calculating... Estimated time left until synced Hide Unknown. Syncing Headers (%1)... OpenURIDialog Open URI Open payment request from URI or file URI: Select payment request file Select payment request file to open OptionsDialog Options Options &Main &Main Automatically start %1 after logging in to the system. &Start %1 on system login Size of &database cache MB Number of script &verification threads IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. Use separate SOCKS&5 proxy to reach peers via Tor hidden services: Hide the icon from the system tray. &Hide tray icon Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. Active command-line options that override above options: Reset all client options to default. Reset all client options to default. &Reset Options &Reset Options &Network &Network Disables some advanced features but all blocks will still be fully validated. Reverting this setting requires re-downloading the entire blockchain. Actual disk usage may be somewhat higher. Prune &block storage to GB Reverting this setting requires re-downloading the entire blockchain. (0 = auto, <0 = leave that many cores free) W&allet Expert Enable coin &control features If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. &Spend unconfirmed change Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. Map port using &UPnP Map port using &UPnP Accept connections from outside. Allow incomin&g connections Connect to the Bitcoin network through a SOCKS5 proxy. &Connect through SOCKS5 proxy (default proxy): Proxy &IP: Proxy &IP: &Port: &Port: Port of the proxy (e.g. 9050) Port of the proxy (e.g. 9050) Used for reaching peers via: IPv4 IPv6 Tor Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor hidden services. &Window &Window Show only a tray icon after minimizing the window. Show only a tray icon after minimizing the window. &Minimize to the tray instead of the taskbar &Minimize to the tray instead of the taskbar M&inimize on close M&inimize on close &Display &Display User Interface &language: User Interface &language: The user interface language can be set here. This setting will take effect after restarting %1. &Unit to show amounts in: &Unit to show amounts in: Choose the default subdivision unit to show in the interface and when sending coins. Choose the default subdivision unit to show in the interface and when sending coins. Whether to show coin control features or not. &Third party transaction URLs Open the %1 configuration file from the working directory. Open Configuration File &OK &OK &Cancel &Cancel default default none Confirm options reset Confirm options reset Client restart required to activate changes. Client will be shut down. Do you want to proceed? Configuration options The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. Error Error The configuration file could not be opened. This change would require a client restart. The supplied proxy address is invalid. The supplied proxy address is invalid. OverviewPage Form Form The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet. The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet. Watch-only: Available: Your current spendable balance Your current spendable balance Pending: Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance Immature: Immature: Mined balance that has not yet matured Mined balance that has not yet matured Balances Total: Total: Your current total balance Your current total balance Your current balance in watch-only addresses Spendable: Recent transactions Unconfirmed transactions to watch-only addresses Mined balance in watch-only addresses that has not yet matured Current total balance in watch-only addresses PaymentServer Payment request error Cannot start click-to-pay handler URI handling Payment request fetch URL is invalid: %1 Cannot process payment request because BIP70 support was not compiled in. Invalid payment address %1 URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. Payment request file handling Payment request file cannot be read! This can be caused by an invalid payment request file. Payment request rejected Payment request network doesn't match client network. Payment request expired. Payment request is not initialized. Unverified payment requests to custom payment scripts are unsupported. Invalid payment request. Requested payment amount of %1 is too small (considered dust). Refund from %1 Payment request %1 is too large (%2 bytes, allowed %3 bytes). Error communicating with %1: %2 Payment request cannot be parsed! Bad response from server %1 Network request error Payment acknowledged PeerTableModel User Agent Node/Service NodeId Ping Sent Received QObject Amount Amount Enter a Bitcoin address (e.g. %1) %1 d %1 h %1 m %1 s None N/A N/A %1 ms %n second(s) %n second %n seconds %n minute(s) %n minute %n minutes %n hour(s) %n hour %n hours %n day(s) %n day %n days %n week(s) %n week %n weeks %1 and %2 %n year(s) %n year %n years %1 B %1 KB %1 MB %1 GB Error parsing command line arguments: %1. Error: Specified data directory "%1" does not exist. Error: Cannot parse configuration file: %1. Error: %1 %1 didn't yet exit safely... unknown QRImageWidget &Save Image... &Copy Image Save QR Code PNG Image (*.png) RPCConsole N/A N/A Client version Client version &Information &Information Debug window General Using BerkeleyDB version Datadir To specify a non-default location of the data directory use the '%1' option. Blocksdir To specify a non-default location of the blocks directory use the '%1' option. Startup time Startup time Network Network Name Number of connections Number of connections Block chain Block chain Current number of blocks Current number of blocks Memory Pool Current number of transactions Memory usage Wallet: (none) &Reset Received Sent &Peers Banned peers Select a peer to view detailed information. Whitelisted Direction Version Starting Block Synced Headers Synced Blocks User Agent Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. Decrease font size Increase font size Services Ban Score Connection Time Last Send Last Receive Ping Time The duration of a currently outstanding ping. Ping Wait Min Ping Time Offset Last block time Last block time &Open &Open &Console &Console &Network Traffic Totals In: Out: Debug log file Debug log file Clear console Clear console 1 &hour 1 &day 1 &week 1 &year &Disconnect Ban for &Unban Welcome to the %1 RPC console. Use up and down arrows to navigate history, and %1 to clear screen. Type %1 for an overview of available commands. For more information on using this console type %1. Network activity disabled Executing command without any wallet Executing command using "%1" wallet WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command. (node id: %1) via %1 never Inbound Outbound Yes No Unknown ReceiveCoinsDialog &Amount: &Label: &Label: &Message: An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network. An optional label to associate with the new receiving address. Use this form to request payments. All fields are <b>optional</b>. An optional amount to request. Leave this empty or zero to not request a specific amount. Clear all fields of the form. Clear Requested payments history &Request payment Show the selected request (does the same as double clicking an entry) Show Remove the selected entries from the list Remove Copy URI Copy label Copy message Copy amount ReceiveRequestDialog QR Code Copy &URI Copy &Address &Save Image... Request payment to %1 Payment information URI Address Amount Amount Label Message Wallet Wallet Resulting URI too long, try to reduce the text for label / message. Error encoding URI into QR Code. RecentRequestsTableModel Date Date Label Message (no label) (no message) (no amount requested) Requested SendCoinsDialog Send Coins Send Coins Coin Control Features Inputs... automatically selected Insufficient funds! Quantity: Bytes: Amount: Fee: After Fee: Change: If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. Custom change address Transaction Fee: Choose... collapse fee-settings per kilobyte Hide Specify a custom fee per kB (1,000 bytes) of the transaction's size. Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis per kB" for a transaction size of 500 bytes (half of 1 kB) would ultimately yield a fee of only 50 satoshis. Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process. (read the tooltip) Recommended: Custom: (Smart fee not initialized yet. This usually takes a few blocks...) Send to multiple recipients at once Send to multiple recipients at once Add &Recipient Add &Recipient Clear all fields of the form. Dust: Clear &All Clear &All Balance: Balance: Please, review your transaction. Transaction fee Total Amount Confirm the send action Confirm the send action S&end S&end Copy quantity Copy amount Copy fee Copy after fee Copy bytes Copy dust Copy change from wallet %1 %1 to %2 Are you sure you want to send? or Confirm send coins The recipient address is not valid. Please recheck. The amount to pay must be larger than 0. The amount exceeds your balance. The total exceeds your balance when the %1 transaction fee is included. Duplicate address found: addresses should only be used once each. Transaction creation failed! The transaction was rejected with the following reason: %1 A fee higher than %1 is considered an absurdly high fee. Payment request expired. Estimated to begin confirmation by next block. Pay only the required fee of %1 Warning: Invalid Bitcoin address Warning: Unknown change address Confirm custom change address The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? (no label) SendCoinsEntry A&mount: A&mount: Pay &To: Pay &To: &Label: &Label: Choose previously used address This is a normal payment. The Bitcoin address to send the payment to Alt+A Alt+A Paste address from clipboard Paste address from clipboard Alt+P Alt+P Remove this entry The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. S&ubtract fee from amount Use available balance Message: This is an unauthenticated payment request. This is an authenticated payment request. Enter a label for this address to add it to the list of used addresses A message that was attached to the %1 URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network. Pay To: Memo: Enter a label for this address to add it to your address book SendConfirmationDialog Yes ShutdownWindow %1 is shutting down... Do not shut down the computer until this window disappears. SignVerifyMessageDialog Signatures - Sign / Verify a Message Signatures - Sign / Verify a Message &Sign Message &Sign Message You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. The Bitcoin address to sign the message with Choose previously used address Alt+A Alt+A Paste address from clipboard Paste address from clipboard Alt+P Alt+P Enter the message you want to sign here Enter the message you want to sign here Signature Signature Copy the current signature to the system clipboard Copy the current signature to the system clipboard Sign the message to prove you own this Bitcoin address Sign the message to prove you own this Bitcoin address Sign &Message Sign &Message Reset all sign message fields Reset all sign message fields Clear &All Clear &All &Verify Message &Verify Message Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! The Bitcoin address the message was signed with Verify the message to ensure it was signed with the specified Bitcoin address Verify the message to ensure it was signed with the specified Bitcoin address Verify &Message Verify &Message Reset all verify message fields Reset all verify message fields Click "Sign Message" to generate signature The entered address is invalid. Please check the address and try again. The entered address does not refer to a key. Wallet unlock was cancelled. Private key for the entered address is not available. Message signing failed. Message signed. The signature could not be decoded. Please check the signature and try again. The signature did not match the message digest. Message verification failed. Message verified. SplashScreen [testnet] [testnet] TrafficGraphWidget KB/s TransactionDesc Open for %n more block(s) Open for %n more block Open for %n more blocks Open until %1 conflicted with a transaction with %1 confirmations 0/unconfirmed, %1 in memory pool not in memory pool abandoned %1/unconfirmed %1 confirmations Status Date Date Source Generated From unknown To own address watch-only label Credit matures in %n more block(s) matures in %n more block matures in %n more blocks not accepted Debit Total debit Total credit Transaction fee Net amount Message Comment Transaction ID Transaction total size Output index Merchant Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. Debug information Transaction Inputs Amount Amount true false TransactionDescDialog This pane shows a detailed description of the transaction This pane shows a detailed description of the transaction Details for %1 TransactionTableModel Date Date Type Label Open for %n more block(s) Open for %n more block Open for %n more blocks Open until %1 Unconfirmed Abandoned Confirming (%1 of %2 recommended confirmations) Confirmed (%1 confirmations) Conflicted Immature (%1 confirmations, will be available after %2) Generated but not accepted Received with Received from Sent to Payment to yourself Mined watch-only (n/a) (no label) Transaction status. Hover over this field to show number of confirmations. Date and time that the transaction was received. Type of transaction. Whether or not a watch-only address is involved in this transaction. User-defined intent/purpose of the transaction. Amount removed from or added to balance. TransactionView All Today This week This month Last month This year Range... Received with Sent to To yourself Mined Other Enter address, transaction id, or label to search Min amount Abandon transaction Copy address Copy label Copy amount Copy transaction ID Copy raw transaction Copy full transaction details Edit label Show transaction details Export Transaction History Comma separated file (*.csv) Confirmed Confirmed Watch-only Date Date Type Label Address ID Exporting Failed There was an error trying to save the transaction history to %1. Exporting Successful The transaction history was successfully saved to %1. Range: to UnitDisplayStatusBarControl Unit to show amounts in. Click to select another unit. WalletFrame No wallet has been loaded. WalletModel Send Coins Send Coins default wallet WalletView &Export &Export Export the data in the current tab to a file Export the data in the current tab to a file Backup Wallet Wallet Data (*.dat) Backup Failed There was an error trying to save the wallet data to %1. Backup Successful The wallet data was successfully saved to %1. Cancel bitcoin-abc Distributed under the MIT software license, see the accompanying file %s or %s Prune configured below the minimum of %d MiB. Please use a higher number. Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) Rescans are not possible in pruned mode. You will need to use -reindex which will download the whole blockchain again. - + Error: A fatal internal error occurred, see debug.log for details Pruning blockstore... Replaying blocks... Section [%s] is not recognized. Specified -walletdir "%s" does not exist Specified -walletdir "%s" is a relative path Specified -walletdir "%s" is not a directory Specified blocks directory "%s" does not exist. Transaction fee and change calculation failed Unable to create the PID file '%s': %s Unable to generate initial keys Unable to generate keys Unable to start HTTP server. See debug log for details. - + The %s developers Cannot obtain a lock on data directory %s. %s is probably already running. Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly. Please contribute if you find %s useful. Visit %s for further information about the software. The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. %s corrupt, salvage failed + (press q to shutdown and continue later) + + + + -maxmempool must be at least %d MB Cannot resolve -%s address: '%s' Change index out of range Copyright (C) %i-%i Corrupted block database detected Corrupted block database detected Do you want to rebuild the block database now? Do you want to rebuild the block database now? Error initializing block database Error initializing block database Error initializing wallet database environment %s! Error initializing wallet database environment %s! Error loading %s Error loading %s: Wallet corrupted Error loading %s: Wallet requires newer version of %s Error loading block database Error loading block database Error opening block database Error opening block database Error: Disk space is low! Error: Disk space is low! Failed to listen on any port. Use -listen=0 if you want this. Failed to listen on any port. Use -listen=0 if you want this. Importing... Incorrect or no genesis block found. Wrong datadir for network? Incorrect or no genesis block found. Wrong datadir for network? Initialization sanity check failed. %s is shutting down. Invalid amount for -%s=<amount>: '%s' Invalid amount for -fallbackfee=<amount>: '%s' Loading banlist... Not enough file descriptors available. Not enough file descriptors available. Prune cannot be configured with a negative value. Prune mode is incompatible with -txindex. The source code is available from %s. Unable to bind to %s on this computer. %s is probably already running. User Agent comment (%s) contains unsafe characters. Verifying blocks... Verifying blocks... Wallet needed to be rewritten: restart %s to complete - + + press q to shutdown + + + + Error: Listening for incoming connections failed (listen returned error %s) Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) The transaction amount is too small to send after the fee has been deducted You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - + Error reading from database, shutting down. Information Information Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s) Invalid netmask specified in -whitelist: '%s' Need to specify a port with -whitebind: '%s' Reducing -maxconnections from %d to %d, because of system limitations. Signing transaction failed Signing transaction failed The transaction amount is too small to pay the fee This is experimental software. Transaction amount too small Transaction amount too small Transaction too large for fee policy Transaction too large Transaction too large Unable to bind to %s on this computer (bind returned error %s) Verifying wallet(s)... Wallet %s resides outside wallet directory %s Warning Warning Zapping all transactions from wallet... - + -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. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. Warning: Wallet file corrupt, data salvaged! Original %s saved as %s in %s; if your balance or transactions are incorrect you should restore from a backup. %s is set very high! - + Keypool ran out, please call keypoolrefill first Starting network threads... The wallet will avoid paying less than the minimum relay fee. This is the minimum transaction fee you pay on every transaction. This is the transaction fee you will pay if you send a transaction. Transaction amounts must not be negative Transaction has too long of a mempool chain Transaction must have at least one recipient Unknown network specified in -onlynet: '%s' Unknown network specified in -onlynet: '%s' Insufficient funds Insufficient funds - + Can't generate a change-address key. Private keys are disabled for this wallet. Cannot provide specific connections and have addrman find outgoing connections at the same. Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use -upgradewallet=200300 or -upgradewallet with no version specified. Max generated block size (blockmaxsize) cannot exceed the excessive block size (excessiveblocksize) Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. Warning: Private keys detected in wallet {%s} with disabled private keys - + Cannot write to data directory '%s'; check permissions. Config setting for %s only applied on %s network when in [%s] section. Error loading %s: Private keys can only be disabled during creation Error loading wallet %s. Duplicate -wallet filename specified. Error upgrading chainstate database Error: Disk space is low for %s Excessive block size must be > 1,000,000 bytes (1MB) Failed to rescan the wallet during initialization Invalid -onion address or hostname: '%s' Invalid -proxy address or hostname: '%s' Loading P2P addresses... Loading block index... Loading block index... Unsupported logging category %s=%s. Upgrading UTXO database Upgrading txindex database Loading wallet... Loading wallet... Cannot downgrade wallet Cannot downgrade wallet Rescanning... Rescanning... Done loading Done loading Error Error