diff options
206 files changed, 63885 insertions, 12619 deletions
@@ -1,4 +1,4 @@ -Copyright (c) 2009-2011 Bitcoin Developers +Copyright (c) 2009-2012 Bitcoin Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro index e7adabe756..edb0fad714 100644 --- a/bitcoin-qt.pro +++ b/bitcoin-qt.pro @@ -1,6 +1,6 @@ TEMPLATE = app TARGET = -VERSION = 0.5.0 +VERSION = 0.6.0 INCLUDEPATH += src src/json src/qt DEFINES += QT_GUI BOOST_THREAD_USE_LIB CONFIG += no_include_pwd @@ -30,6 +30,14 @@ contains(RELEASE, 1) { } } +# use: qmake "USE_QRCODE=1" +# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support +contains(USE_QRCODE, 1) { + message(Building with QRCode support) + DEFINES += USE_QRCODE + LIBS += -lqrencode +} + # use: qmake "USE_UPNP=1" ( enabled by default; default) # or: qmake "USE_UPNP=0" (disabled by default) # or: qmake "USE_UPNP=-" (not supported) @@ -54,15 +62,15 @@ contains(USE_DBUS, 1) { QT += dbus } -# use: qmake "USE_SSL=1" -contains(USE_SSL, 1) { - message(Building with SSL support for RPC) - DEFINES += USE_SSL +# use: qmake "FIRST_CLASS_MESSAGING=1" +contains(FIRST_CLASS_MESSAGING, 1) { + message(Building with first-class messaging) + DEFINES += FIRST_CLASS_MESSAGING } contains(BITCOIN_NEED_QT_PLUGINS, 1) { DEFINES += BITCOIN_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs + QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets } !windows { @@ -73,7 +81,7 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) { } # disable quite some warnings because bitcoin core "sins" a lot -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wno-strict-aliasing -Wno-invalid-offsetof -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare -Wno-char-subscripts -Wno-unused-value -Wno-sequence-point -Wno-parentheses -Wno-unknown-pragmas -Wno-switch +QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wno-strict-aliasing -Wno-invalid-offsetof -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare -Wno-char-subscripts -Wno-unused-value -Wno-sequence-point -Wno-parentheses -Wno-unknown-pragmas -Wno-switch # Input DEPENDPATH += src/qt src src json/include @@ -83,11 +91,15 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/optionsdialog.h \ src/qt/sendcoinsdialog.h \ src/qt/addressbookpage.h \ + src/qt/messagepage.h \ src/qt/aboutdialog.h \ src/qt/editaddressdialog.h \ src/qt/bitcoinaddressvalidator.h \ + src/addrman.h \ src/base58.h \ src/bignum.h \ + src/checkpoints.h \ + src/compat.h \ src/util.h \ src/uint256.h \ src/serialize.h \ @@ -97,10 +109,10 @@ HEADERS += src/qt/bitcoingui.h \ src/key.h \ src/db.h \ src/script.h \ - src/noui.h \ src/init.h \ src/headers.h \ src/irc.h \ + src/mruset.h \ src/json/json_spirit_writer_template.h \ src/json/json_spirit_writer.h \ src/json/json_spirit_value.h \ @@ -116,7 +128,6 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/guiconstants.h \ src/qt/optionsmodel.h \ src/qt/monitoreddatamapper.h \ - src/qtui.h \ src/qt/transactiondesc.h \ src/qt/transactiondescdialog.h \ src/qt/bitcoinamountfield.h \ @@ -135,7 +146,10 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/qvaluecombobox.h \ src/qt/askpassphrasedialog.h \ src/protocol.h \ - src/qt/notificator.h + src/qt/notificator.h \ + src/qt/qtipcserver.h \ + src/allocators.h \ + src/ui_interface.h SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/transactiontablemodel.cpp \ @@ -143,15 +157,20 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/optionsdialog.cpp \ src/qt/sendcoinsdialog.cpp \ src/qt/addressbookpage.cpp \ + src/qt/messagepage.cpp \ src/qt/aboutdialog.cpp \ src/qt/editaddressdialog.cpp \ src/qt/bitcoinaddressvalidator.cpp \ src/util.cpp \ + src/netbase.cpp \ + src/key.cpp \ src/script.cpp \ src/main.cpp \ src/init.cpp \ src/net.cpp \ src/irc.cpp \ + src/checkpoints.cpp \ + src/addrman.cpp \ src/db.cpp \ src/json/json_spirit_writer.cpp \ src/json/json_spirit_value.cpp \ @@ -171,6 +190,7 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/transactionview.cpp \ src/qt/walletmodel.cpp \ src/bitcoinrpc.cpp \ + src/rpcdump.cpp \ src/qt/overviewpage.cpp \ src/qt/csvmodelwriter.cpp \ src/crypter.cpp \ @@ -180,7 +200,8 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/qvaluecombobox.cpp \ src/qt/askpassphrasedialog.cpp \ src/protocol.cpp \ - src/qt/notificator.cpp + src/qt/notificator.cpp \ + src/qt/qtipcserver.cpp RESOURCES += \ src/qt/bitcoin.qrc @@ -188,6 +209,7 @@ RESOURCES += \ FORMS += \ src/qt/forms/sendcoinsdialog.ui \ src/qt/forms/addressbookpage.ui \ + src/qt/forms/messagepage.ui \ src/qt/forms/aboutdialog.ui \ src/qt/forms/editaddressdialog.ui \ src/qt/forms/transactiondescdialog.ui \ @@ -195,6 +217,22 @@ FORMS += \ src/qt/forms/sendcoinsentry.ui \ src/qt/forms/askpassphrasedialog.ui +contains(USE_QRCODE, 1) { +HEADERS += src/qt/qrcodedialog.h +SOURCES += src/qt/qrcodedialog.cpp +FORMS += src/qt/forms/qrcodedialog.ui +} + +contains(BITCOIN_QT_TEST, 1) { +SOURCES += src/qt/test/test_main.cpp \ + src/qt/test/urltests.cpp +HEADERS += src/qt/test/urltests.h +DEPENDPATH += src/qt/test +QT += testlib +TARGET = bitcoin-qt_test +DEFINES += BITCOIN_QT_TEST +} + CODECFORTR = UTF-8 # for lrelease/lupdate @@ -202,7 +240,7 @@ CODECFORTR = UTF-8 TRANSLATIONS = $$files(src/qt/locale/bitcoin_*.ts) isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe + win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease } isEmpty(TS_DIR):TS_DIR = src/qt/locale @@ -249,10 +287,26 @@ isEmpty(BOOST_INCLUDE_PATH) { macx:BOOST_INCLUDE_PATH = /opt/local/include } -windows:LIBS += -lws2_32 -lgdi32 +windows:LIBS += -lws2_32 -lshlwapi windows:DEFINES += WIN32 windows:RC_FILE = src/qt/res/bitcoin-qt.rc +windows:!contains(MINGW_THREAD_BUGFIX, 0) { + # At least qmake's win32-g++-cross profile is missing the -lmingwthrd + # thread-safety flag. GCC has -mthreads to enable this, but it doesn't + # work with static linking. -lmingwthrd must come BEFORE -lmingw, so + # it is prepended to QMAKE_LIBS_QT_ENTRY. + # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes + # any problems on some untested qmake profile now or in the future. + DEFINES += _MT + QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY +} + +!windows:!mac { + DEFINES += LINUX + LIBS += -lrt +} + macx:HEADERS += src/qt/macdockiconhandler.h macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit @@ -261,9 +315,11 @@ macx:ICON = src/qt/res/icons/bitcoin.icns macx:TARGET = "Bitcoin-Qt" # Set libraries and includes at end, to use platform-defined defaults if not overridden -INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) +INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH +LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX +# -lgdi32 has to happen after -lcrypto (see #681) +windows:LIBS += -lole32 -luuid -lgdi32 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX contains(RELEASE, 1) { diff --git a/contrib/debian/bitcoin-qt.desktop b/contrib/debian/bitcoin-qt.desktop index d65cc35a3b..ea5a6e4ac4 100644 --- a/contrib/debian/bitcoin-qt.desktop +++ b/contrib/debian/bitcoin-qt.desktop @@ -6,6 +6,5 @@ Exec=/usr/bin/bitcoin-qt Terminal=false Type=Application Icon=/usr/share/pixmaps/bitcoin80.xpm -#For when bitcoin (finally) properly handles bitcoin: URLs -#MimeType=x-scheme-handler/bitcoin; +MimeType=x-scheme-handler/bitcoin; Categories=Office; diff --git a/contrib/debian/bitcoin-qt.install b/contrib/debian/bitcoin-qt.install index 7ddc8c1d8f..6a566f515a 100644 --- a/contrib/debian/bitcoin-qt.install +++ b/contrib/debian/bitcoin-qt.install @@ -3,3 +3,4 @@ bitcoin-qt usr/lib/bitcoin share/pixmaps/bitcoin32.xpm usr/share/pixmaps share/pixmaps/bitcoin80.xpm usr/share/pixmaps debian/bitcoin-qt.desktop usr/share/applications +debian/bitcoin-qt.protocol usr/share/kde4/services/ diff --git a/contrib/debian/bitcoin-qt.protocol b/contrib/debian/bitcoin-qt.protocol new file mode 100644 index 0000000000..014588d536 --- /dev/null +++ b/contrib/debian/bitcoin-qt.protocol @@ -0,0 +1,11 @@ +[Protocol] +exec=bitcoin-qt '%u' +protocol=bitcoin +input=none +output=none +helper=true +listing= +reading=false +writing=false +makedir=false +deleting=false diff --git a/contrib/debian/changelog b/contrib/debian/changelog index ccde9776d8..db5e2682c6 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,32 @@ +bitcoin (0.5.1-natty1) natty; urgency=low + + * Remove mentions on anonymity in package descriptions and manpage. + These should never have been there, bitcoin isnt anonymous without + a ton of work that virtually no users will ever be willing and + capable of doing + * Add GNOME/KDE support for bitcoin-qt's bitcoin: URI support. + Thanks to luke-jr for the KDE .protocol file. + + -- Matt Corallo <matt@bluematt.me> Fri, 23 Dec 2011 20:25:00 -0500 + +bitcoin (0.5.1-natty0) natty; urgency=low + + * New upstream release. + + -- Matt Corallo <matt@bluematt.me> Fri, 16 Dec 2011 13:27:00 -0500 + +bitcoin (0.5.0-natty0) natty; urgency=low + + * New upstream release. + + -- Matt Corallo <matt@bluematt.me> Mon, 21 Nov 2011 11:32:00 -0500 + +bitcoin (0.5.0~rc7-natty0) natty; urgency=low + + * New upstream release candidate. + + -- Matt Corallo <matt@bluematt.me> Sun, 20 Nov 2011 17:08:00 -0500 + bitcoin (0.5.0~rc3-natty0) natty; urgency=low * New upstream release candidate. diff --git a/contrib/debian/control b/contrib/debian/control index 13fde5948c..745fd71ea8 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -15,7 +15,8 @@ Build-Depends: debhelper, libboost-thread-dev (>> 1.35) | libboost-thread1.35-dev, libboost-test-dev (>> 1.35) | libboost-test1.35-dev, qt4-qmake, - libqt4-dev + libqt4-dev, + libqrencode-dev Standards-Version: 3.9.2 Homepage: http://www.bitcoin.org/ Vcs-Git: git://github.com/bitcoin/bitcoin.git @@ -24,7 +25,7 @@ Vcs-Browser: http://github.com/bitcoin/bitcoin Package: bitcoind Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: peer-to-peer network based anonymous digital currency - daemon +Description: peer-to-peer network based digital currency - daemon Bitcoin is a free open source peer-to-peer electronic cash system that is completely decentralized, without the need for a central server or trusted parties. Users hold the crypto keys to their own money and @@ -42,7 +43,7 @@ Description: peer-to-peer network based anonymous digital currency - daemon Package: bitcoin-qt Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: peer-to-peer network based anonymous digital currency - QT GUI +Description: peer-to-peer network based digital currency - QT GUI Bitcoin is a free open source peer-to-peer electronic cash system that is completely decentralized, without the need for a central server or trusted parties. Users hold the crypto keys to their own money and diff --git a/contrib/debian/copyright b/contrib/debian/copyright index 2da1461984..71fa77cf6c 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -31,13 +31,13 @@ License: GPL-3+ Files: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, src/qt/res/src/*.svg Copyright: Wladimir van der Laan -License: CC-BY-3 +License: Expat Files: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, src/qt/res/icons/history.png, src/qt/res/icons/key.png, src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png + src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png Copyright: David Vignoni (david@icon-king.com) ICON KING - www.icon-king.com License: LGPL @@ -146,13 +146,6 @@ Comment: You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. -License: CC-BY-3 - This work is licensed under a Creative Commons Attribution 3.0 Unported - License. -Comment: - You can get a full copy of the license at - <http://creativecommons.org/licenses/by/3.0/>. - License: LGPL This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/contrib/debian/manpages/bitcoind.1 b/contrib/debian/manpages/bitcoind.1 index 0179406a16..bf46a6609c 100644 --- a/contrib/debian/manpages/bitcoind.1 +++ b/contrib/debian/manpages/bitcoind.1 @@ -1,6 +1,6 @@ .TH BITCOIND "1" "January 2011" "bitcoind 3.19" .SH NAME -bitcoind \- peer-to-peer network based anonymous digital currency +bitcoind \- peer-to-peer network based digital currency .SH SYNOPSIS bitcoin [options] <command> [params] .TP diff --git a/contrib/debian/rules b/contrib/debian/rules index a1d65652e3..49c7766d13 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -20,7 +20,7 @@ override_dh_auto_clean: cd src; $(MAKE) -f makefile.unix clean override_dh_auto_configure: - qmake bitcoin-qt.pro + qmake bitcoin-qt.pro USE_QRCODE=1 override_dh_auto_test: cd src; $(MAKE) -f makefile.unix test_bitcoin diff --git a/contrib/gitian-descriptors/deps-win32.yml b/contrib/gitian-descriptors/deps-win32.yml new file mode 100644 index 0000000000..776a8da00a --- /dev/null +++ b/contrib/gitian-descriptors/deps-win32.yml @@ -0,0 +1,71 @@ +--- +name: "bitcoin-deps" +suites: +- "lucid" +architectures: +- "i386" +packages: +- "mingw32" +- "git-core" +- "zip" +- "faketime" +- "wine" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "openssl-1.0.0e.tar.gz" +- "db-4.8.30.NC.tar.gz" +- "miniupnpc-1.6.tar.gz" +- "zlib-1.2.6.tar.gz" +- "libpng-1.5.9.tar.gz" +- "qrencode-3.2.0.tar.bz2" +script: | + # + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + # + tar xzf openssl-1.0.0e.tar.gz + cd openssl-1.0.0e + ./Configure --cross-compile-prefix=i586-mingw32msvc- mingw + make + cd .. + # + tar xzf db-4.8.30.NC.tar.gz + cd db-4.8.30.NC/build_unix + ../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include" + make $MAKEOPTS + cd ../.. + # + tar xzf miniupnpc-1.6.tar.gz + cd miniupnpc-1.6 + sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw + sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw + make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar + cd .. + mv miniupnpc-1.6 miniupnpc + # + tar xzf zlib-1.2.6.tar.gz + cd zlib-1.2.6 + make -f win32/Makefile.gcc PREFIX=i586-mingw32msvc- $MAKEOPTS + cd .. + # + tar xzf libpng-1.5.9.tar.gz + cd libpng-1.5.9 + ./configure -disable-shared CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld LDFLAGS="-L../zlib-1.2.6/" CFLAGS="-I../zlib-1.2.6/" + make $MAKEOPTS + cd .. + # + tar xjf qrencode-3.2.0.tar.bz2 + cd qrencode-3.2.0 + ./configure CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld png_LIBS="../libpng-1.5.9/.libs/libpng15.a ../zlib-1.2.6/libz.a" png_CFLAGS="-I../libpng-1.5.9" + make $MAKEOPTS + cd .. + # + zip -r $OUTDIR/bitcoin-deps-0.0.3.zip \ + $(ls qrencode-*/{qrencode.h,.libs/libqrencode.{,l}a} | sort) \ + $(ls db-*/build_unix/{libdb_cxx.a,db.h,db_cxx.h,libdb.a,.libs/libdb_cxx-?.?.a} | sort) \ + $(find openssl-* -name '*.a' -o -name '*.h' | sort) \ + $(find miniupnpc -name '*.h' -o -name 'libminiupnpc.a' | sort) + # Kill wine processes as gitian won't figure out we are done otherwise + killall wineserver services.exe explorer.exe winedevice.exe diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml index 4e224ce135..e929eb84f3 100644 --- a/contrib/gitian-descriptors/gitian-win32.yml +++ b/contrib/gitian-descriptors/gitian-win32.yml @@ -10,7 +10,6 @@ packages: - "unzip" - "nsis" - "faketime" -- "wine" reference_datetime: "2011-01-30 00:00:00" remotes: - "url": "https://github.com/bitcoin/bitcoin.git" @@ -18,9 +17,7 @@ remotes: files: - "qt-win32-4.7.4-gitian.zip" - "boost-win32-1.47.0-gitian.zip" -- "openssl-1.0.0e.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "miniupnpc-1.6.tar.gz" +- "bitcoin-deps-0.0.3.zip" script: | # mkdir $HOME/qt @@ -42,25 +39,9 @@ script: | mv include/boost . cd .. # - tar xzf openssl-1.0.0e.tar.gz - cd openssl-1.0.0e - ./Configure --cross-compile-prefix=i586-mingw32msvc- mingw - make - cd .. + unzip bitcoin-deps-0.0.3.zip # - tar xzf db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - ../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include" - make $MAKEOPTS - cd ../.. - # - tar xzf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw - sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw - make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar - cd .. - mv miniupnpc-1.6 miniupnpc + find -type f | xargs touch --date="$REFERENCE_DATETIME" # cd bitcoin mkdir -p $OUTDIR/src @@ -71,7 +52,7 @@ script: | export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export FAKETIME=$REFERENCE_DATETIME export TZ=UTC - $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_47_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_47_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.0e OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.0e/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin + $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_47_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_47_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.0e OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.0e/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin make $MAKEOPTS cp release/bitcoin-qt.exe $OUTDIR/ # diff --git a/contrib/gitian-descriptors/gitian.yml b/contrib/gitian-descriptors/gitian.yml index 72e40cd5a2..de622e968f 100644 --- a/contrib/gitian-descriptors/gitian.yml +++ b/contrib/gitian-descriptors/gitian.yml @@ -16,12 +16,15 @@ packages: - "libssl-dev" - "git-core" - "unzip" +- "pkg-config" +- "libpng12-dev" reference_datetime: "2011-01-30 00:00:00" remotes: - "url": "https://github.com/bitcoin/bitcoin.git" "dir": "bitcoin" files: - "miniupnpc-1.6.tar.gz" +- "qrencode-3.2.0.tar.bz2" script: | INSTDIR="$HOME/install" export LIBRARY_PATH="$INSTDIR/lib" @@ -31,6 +34,12 @@ script: | INSTALLPREFIX=$INSTDIR make $MAKEOPTS install cd .. # + tar xjf qrencode-3.2.0.tar.bz2 + cd qrencode-3.2.0 + ./configure --prefix=$INSTDIR --enable-static --disable-shared + make $MAKEOPTS install + cd .. + # cd bitcoin mkdir -p $OUTDIR/src cp -a . $OUTDIR/src @@ -39,10 +48,10 @@ script: | cp $OUTDIR/src/COPYING $OUTDIR cd src sed 's/$(DEBUGFLAGS)//' -i makefile.unix - make -f makefile.unix STATIC=1 DEFS="-I$INSTDIR/include -L$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0 + make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0 mkdir -p $OUTDIR/bin/$GBUILD_BITS install -s bitcoind $OUTDIR/bin/$GBUILD_BITS cd .. - qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 + qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_QRCODE=1 make $MAKEOPTS install bitcoin-qt $OUTDIR/bin/$GBUILD_BITS diff --git a/contrib/gitian-downloader/laanwj-key.pgp b/contrib/gitian-downloader/laanwj-key.pgp new file mode 100644 index 0000000000..559295109d --- /dev/null +++ b/contrib/gitian-downloader/laanwj-key.pgp @@ -0,0 +1,28 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.1.0 + +mQENBE5UtMEBCADOUz2i9l/D8xYINCmfUDnxi+DXvX5LmZ39ZdvsoE+ugO0SRRGdIHEFO2is +0xezX50wXu9aneb+tEqM0BuiLo6VxaXpxrkxHpr6c4jf37SkE/H0qsi/txEUp7337y3+4HMG +lUjiuh802I72p1qusjsKBnmnnR0rwNouTcoDmGUDh7jpKCtzFv+2TR2dRthJn7vmmjq3+bG6 +PYfqoFY1yHrAGT1lrDBULZsQ/NBLI2+J4oo2LYv3GCq8GNnzrovqvTvui50VSROhLrOe58o2 +shE+sjQShAy5wYkPt1R1fQnpfx+5vf+TPnkxVwRb3h5GhCp0YL8XC/BXsd5vM4KlVH2rABEB +AAG0K1dsYWRpbWlyIEouIHZhbiBkZXIgTGFhbiA8bGFhbndqQGdtYWlsLmNvbT6JATgEEwEC +ACIFAk5UtMECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHSBCwEjRsmmy6YIAK09 +buNXyYQrJBsX16sXxEhx5QPKyF3uHJDFJv66SdnpvIkNoznsaPiRJkbTANop93FZmaGa6wVn +zGDiz7jPA8Dpxx5aAYPhIT+zPJAdXWM3wJ/Gio9besRNzniai8Lwi5MZ9R/5yFGBobm6/AcN +4sUoqA3NSV2U3I29R0Vwlzo8GVtmyi9ENSi6Oo7AcXNTRt69cxW4nAHkB+amwwDJlcAb31ex +bogYXPhScwqQZixRr+JBkKxBjkTXXnQypT4KI5SegYwQVYfyiZmDP7UHKe/u6pSKKbVphLg8 +xLB5spcXse8/a2+onrbNlw6y8TXiJ++Z54PE7zztWTXf2huakeG5AQ0ETlS0wQEIAMNO3OkP +xoPRKWzBLcI7JRITAW+HNaLTq3uN2+4WxA57DEjbL9EDoAv+7wTkDAL40f0T+xiu6GJcLFjw +GJZu/tYu7+mErHjrdo+K4suCQt7w5EXCBvOLjhW4tyYMzNx8hP+oqzOW9iEC+6VV91+DYeqt +EkJuyVXOI4vzBlTw8uGow8aMMsCq8XVvKUZFTPsjGl197Q5B3A+ZOFCR8xqiqdPjuz6MglVV +oFdDNu3EZn8zkGsQlovXoE9ndVeVzx/XMNmsxFaMYsReUs253RIf1FEfgExID0fg2OnyLCjS +2iFW1RgajS+/saIkKl+N1iuMzJA7wMAM0plhRueOG0MtZSsAEQEAAYkBHwQYAQIACQUCTlS0 +wQIbDAAKCRB0gQsBI0bJpmsDB/4waenn2CvSHXyomykfpwf5lMte1V5LvH3z5R2LY+1NopRv +LSz3iC39x69XWiTbhywDfgafnGPW4pWBOff2/bu5/A6z1Hnan1vyrRRD/hx1uMJ7S6q+bIvZ +iVIg1p0jH6tdIIhwX3cydhdRZHo7e9oSMgOUWsr6Ar59NRo9CENwGPE4U61HXfOnxWdrFWoA +XdwZczBeLxmUy6Vo6sKqv+gE4bqrtAM0sY/MsQ9cU95x+52ox/sq44lQMwd3ZBYUP7B1qbHI +hZSZuch6MLi5scLPeau0ZvCaljiaMeivP5+x0gWPRs0kI+9sZxInbqvrsJ6oOBJM3xYGhtn1 +zZ7qmZR7 +=si/k +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config index d21bb07808..88e48e2c23 100644 --- a/contrib/gitian-downloader/linux-download-config +++ b/contrib/gitian-downloader/linux-download-config @@ -15,9 +15,13 @@ signers: weight: 40 name: Devrandom key: devrandom + E463A93F5F3117EEDE6C7316BD02942421F4889F: + weight: 40 + name: Luke-Jr + key: luke-jr D762373D24904A3E42F33B08B9A408E71DAAC974: weight: 40 - name: Sipa + name: "Pieter Wuille" key: sipa 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: weight: 40 @@ -27,4 +31,8 @@ signers: weight: 40 name: "Gavin Andresen" key: gavinandresen + 71A3B16735405025D447E8F274810B012346C9A6 + weight: 40 + name: "Wladimir J. van der Laan" + key: laanwj minimum_weight: 120 diff --git a/contrib/gitian-downloader/luke-jr-key.pgp b/contrib/gitian-downloader/luke-jr-key.pgp Binary files differnew file mode 100644 index 0000000000..c40917d78c --- /dev/null +++ b/contrib/gitian-downloader/luke-jr-key.pgp diff --git a/contrib/gitian-downloader/sipa-key.pgp b/contrib/gitian-downloader/sipa-key.pgp Binary files differindex 086c9eb42e..a52a5deb1b 100644 --- a/contrib/gitian-downloader/sipa-key.pgp +++ b/contrib/gitian-downloader/sipa-key.pgp diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config index c0de21c48f..595626f28f 100644 --- a/contrib/gitian-downloader/win32-download-config +++ b/contrib/gitian-downloader/win32-download-config @@ -15,9 +15,13 @@ signers: weight: 40 name: Devrandom key: devrandom + E463A93F5F3117EEDE6C7316BD02942421F4889F: + weight: 40 + name: Luke-Jr + key: luke-jr D762373D24904A3E42F33B08B9A408E71DAAC974: weight: 40 - name: Sipa + name: "Pieter Wuille" key: sipa 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: weight: 40 @@ -27,4 +31,8 @@ signers: weight: 40 name: "Gavin Andresen" key: gavinandresen + 71A3B16735405025D447E8F274810B012346C9A6 + weight: 40 + name: "Wladimir J. van der Laan" + key: laanwj minimum_weight: 120 diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index a43e7102a8..e159f9bbc3 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -17,16 +17,405 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -import subprocess, sys, re, os, shutil, os.path +import subprocess, sys, re, os, shutil, stat, os.path from time import sleep from argparse import ArgumentParser +# This is ported from the original macdeployqt with modifications + +class FrameworkInfo(object): + def __init__(self): + self.frameworkDirectory = "" + self.frameworkName = "" + self.frameworkPath = "" + self.binaryDirectory = "" + self.binaryName = "" + self.binaryPath = "" + self.version = "" + self.installName = "" + self.deployedInstallName = "" + self.sourceFilePath = "" + self.destinationDirectory = "" + self.sourceResourcesDirectory = "" + self.destinationResourcesDirectory = "" + + def __eq__(self, other): + if self.__class__ == other.__class__: + return self.__dict__ == other.__dict__ + else: + return False + + def __str__(self): + return """ Framework name: %s + Framework directory: %s + Framework path: %s + Binary name: %s + Binary directory: %s + Binary path: %s + Version: %s + Install name: %s + Deployed install name: %s + Source file Path: %s + Deployed Directory (relative to bundle): %s +""" % (self.frameworkName, + self.frameworkDirectory, + self.frameworkPath, + self.binaryName, + self.binaryDirectory, + self.binaryPath, + self.version, + self.installName, + self.deployedInstallName, + self.sourceFilePath, + self.destinationDirectory) + + def isDylib(self): + return self.frameworkName.endswith(".dylib") + + def isQtFramework(self): + if self.isDylib(): + return self.frameworkName.startswith("libQt") + else: + return self.frameworkName.startswith("Qt") + + reOLine = re.compile(r'^(.+) \(compatibility version [0-9.]+, current version [0-9.]+\)$') + bundleFrameworkDirectory = "Contents/Frameworks" + bundleBinaryDirectory = "Contents/MacOS" + + @classmethod + def fromOtoolLibraryLine(cls, line): + # Note: line must be trimmed + if line == "": + return None + + # Don't deploy system libraries (exception for libQtuitools and libQtlucene). + if line.startswith("/System/Library/") or line.startswith("@executable_path") or (line.startswith("/usr/lib/") and "libQt" not in line): + return None + + m = cls.reOLine.match(line) + if m is None: + raise RuntimeError("otool line could not be parsed: " + line) + + path = m.group(1) + + info = cls() + info.sourceFilePath = path + info.installName = path + + if path.endswith(".dylib"): + dirname, filename = os.path.split(path) + info.frameworkName = filename + info.frameworkDirectory = dirname + info.frameworkPath = path + + info.binaryDirectory = dirname + info.binaryName = filename + info.binaryPath = path + info.version = "-" + + info.installName = path + info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName + info.sourceFilePath = path + info.destinationDirectory = cls.bundleFrameworkDirectory + else: + parts = path.split("/") + i = 0 + # Search for the .framework directory + for part in parts: + if part.endswith(".framework"): + break + i += 1 + if i == len(parts): + raise RuntimeError("Could not find .framework or .dylib in otool line: " + line) + + info.frameworkName = parts[i] + info.frameworkDirectory = "/".join(parts[:i]) + info.frameworkPath = os.path.join(info.frameworkDirectory, info.frameworkName) + + info.binaryName = parts[i+3] + info.binaryDirectory = "/".join(parts[i+1:i+3]) + info.binaryPath = os.path.join(info.binaryDirectory, info.binaryName) + info.version = parts[i+2] + + info.deployedInstallName = "@executable_path/../Frameworks/" + os.path.join(info.frameworkName, info.binaryPath) + info.destinationDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, info.binaryDirectory) + + info.sourceResourcesDirectory = os.path.join(info.frameworkPath, "Resources") + info.destinationResourcesDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Resources") + + return info + +class ApplicationBundleInfo(object): + def __init__(self, path): + self.path = path + appName = os.path.splitext(os.path.basename(path))[0] + self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) + if not os.path.exists(self.binaryPath): + raise RuntimeError("Could not find bundle binary for " + path) + self.resourcesPath = os.path.join(path, "Contents", "Resources") + self.pluginPath = os.path.join(path, "Contents", "PlugIns") + +class DeploymentInfo(object): + def __init__(self): + self.qtPath = None + self.pluginPath = None + self.deployedFrameworks = [] + + def detectQtPath(self, frameworkDirectory): + parentDir = os.path.dirname(frameworkDirectory) + if os.path.exists(os.path.join(parentDir, "translations")): + # Classic layout, e.g. "/usr/local/Trolltech/Qt-4.x.x" + self.qtPath = parentDir + elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")): + # MacPorts layout, e.g. "/opt/local/share/qt4" + self.qtPath = os.path.join(parentDir, "share", "qt4") + + if self.qtPath is not None: + pluginPath = os.path.join(self.qtPath, "plugins") + if os.path.exists(pluginPath): + self.pluginPath = pluginPath + + def usesFramework(self, name): + nameDot = "%s." % name + libNameDot = "lib%s." % name + for framework in self.deployedFrameworks: + if framework.endswith(".framework"): + if framework.startswith(nameDot): + return True + elif framework.endswith(".dylib"): + if framework.startswith(libNameDot): + return True + return False + +def getFrameworks(binaryPath, verbose): + if verbose >= 3: + print "Inspecting with otool: " + binaryPath + otool = subprocess.Popen(["otool", "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + o_stdout, o_stderr = otool.communicate() + if otool.returncode != 0: + if verbose >= 1: + sys.stderr.write(o_stderr) + sys.stderr.flush() + raise RuntimeError("otool failed with return code %d" % otool.returncode) + + otoolLines = o_stdout.split("\n") + otoolLines.pop(0) # First line is the inspected binary + if ".framework" in binaryPath or binaryPath.endswith(".dylib"): + otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency. + + libraries = [] + for line in otoolLines: + info = FrameworkInfo.fromOtoolLibraryLine(line.strip()) + if info is not None: + if verbose >= 3: + print "Found framework:" + print info + libraries.append(info) + + return libraries + +def runInstallNameTool(action, *args): + subprocess.check_call(["install_name_tool", "-"+action] + list(args)) + +def changeInstallName(oldName, newName, binaryPath, verbose): + if verbose >= 3: + print "Using install_name_tool:" + print " in", binaryPath + print " change reference", oldName + print " to", newName + runInstallNameTool("change", oldName, newName, binaryPath) + +def changeIdentification(id, binaryPath, verbose): + if verbose >= 3: + print "Using install_name_tool:" + print " change identification in", binaryPath + print " to", id + runInstallNameTool("id", id, binaryPath) + +def runStrip(binaryPath, verbose): + if verbose >= 3: + print "Using strip:" + print " stripped", binaryPath + subprocess.check_call(["strip", "-x", binaryPath]) + +def copyFramework(framework, path, verbose): + fromPath = framework.sourceFilePath + toDir = os.path.join(path, framework.destinationDirectory) + toPath = os.path.join(toDir, framework.binaryName) + + if not os.path.exists(fromPath): + raise RuntimeError("No file at " + fromPath) + + if os.path.exists(toPath): + return None # Already there + + if not os.path.exists(toDir): + os.makedirs(toDir) + + shutil.copy2(fromPath, toPath) + if verbose >= 3: + print "Copied:", fromPath + print " to:", toPath + + permissions = os.stat(toPath) + if not permissions.st_mode & stat.S_IWRITE: + os.chmod(toPath, permissions.st_mode | stat.S_IWRITE) + + if not framework.isDylib(): # Copy resources for real frameworks + fromResourcesDir = framework.sourceResourcesDirectory + if os.path.exists(fromResourcesDir): + toResourcesDir = os.path.join(path, framework.destinationResourcesDirectory) + shutil.copytree(fromResourcesDir, toResourcesDir) + if verbose >= 3: + print "Copied resources:", fromResourcesDir + print " to:", toResourcesDir + elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout) + qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib") + qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib") + if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath): + shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath) + if verbose >= 3: + print "Copied for libQtGui:", qtMenuNibSourcePath + print " to:", qtMenuNibDestinationPath + + return toPath + +def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploymentInfo=None): + if deploymentInfo is None: + deploymentInfo = DeploymentInfo() + + while len(frameworks) > 0: + framework = frameworks.pop(0) + deploymentInfo.deployedFrameworks.append(framework.frameworkName) + + if verbose >= 2: + print "Processing", framework.frameworkName, "..." + + # Get the Qt path from one of the Qt frameworks + if deploymentInfo.qtPath is None and framework.isQtFramework(): + deploymentInfo.detectQtPath(framework.frameworkDirectory) + + if framework.installName.startswith("@executable_path"): + if verbose >= 2: + print framework.frameworkName, "already deployed, skipping." + continue + + # install_name_tool the new id into the binary + changeInstallName(framework.installName, framework.deployedInstallName, binaryPath, verbose) + + # Copy farmework to app bundle. + deployedBinaryPath = copyFramework(framework, bundlePath, verbose) + # Skip the rest if already was deployed. + if deployedBinaryPath is None: + continue + + if strip: + runStrip(deployedBinaryPath, verbose) + + # install_name_tool it a new id. + changeIdentification(framework.deployedInstallName, deployedBinaryPath, verbose) + # Check for framework dependencies + dependencies = getFrameworks(deployedBinaryPath, verbose) + + for dependency in dependencies: + changeInstallName(dependency.installName, dependency.deployedInstallName, deployedBinaryPath, verbose) + + # Deploy framework if necessary. + if dependency.frameworkName not in deploymentInfo.deployedFrameworks and dependency not in frameworks: + frameworks.append(dependency) + + return deploymentInfo + +def deployFrameworksForAppBundle(applicationBundle, strip, verbose): + frameworks = getFrameworks(applicationBundle.binaryPath, verbose) + if len(frameworks) == 0 and verbose >= 1: + print "Warning: Could not find any external frameworks to deploy in %s." % (applicationBundle.path) + return DeploymentInfo() + else: + return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose) + +def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): + # Lookup available plugins, exclude unneeded + plugins = [] + for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath): + pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath) + if pluginDirectory == "designer": + # Skip designer plugins + continue + elif pluginDirectory == "phonon": + # Deploy the phonon plugins only if phonon is in use + if not deploymentInfo.usesFramework("phonon"): + continue + elif pluginDirectory == "sqldrivers": + # Deploy the sql plugins only if QtSql is in use + if not deploymentInfo.usesFramework("QtSql"): + continue + elif pluginDirectory == "script": + # Deploy the script plugins only if QtScript is in use + if not deploymentInfo.usesFramework("QtScript"): + continue + elif pluginDirectory == "qmltooling": + # Deploy the qml plugins only if QtDeclarative is in use + if not deploymentInfo.usesFramework("QtDeclarative"): + continue + elif pluginDirectory == "bearer": + # Deploy the bearer plugins only if QtNetwork is in use + if not deploymentInfo.usesFramework("QtNetwork"): + continue + + for pluginName in filenames: + pluginPath = os.path.join(pluginDirectory, pluginName) + if pluginName.endswith("_debug.dylib"): + # Skip debug plugins + continue + elif pluginPath == "imageformats/libqsvg.dylib" or pluginPath == "iconengines/libqsvgicon.dylib": + # Deploy the svg plugins only if QtSvg is in use + if not deploymentInfo.usesFramework("QtSvg"): + continue + elif pluginPath == "accessible/libqtaccessiblecompatwidgets.dylib": + # Deploy accessibility for Qt3Support only if the Qt3Support is in use + if not deploymentInfo.usesFramework("Qt3Support"): + continue + elif pluginPath == "graphicssystems/libqglgraphicssystem.dylib": + # Deploy the opengl graphicssystem plugin only if QtOpenGL is in use + if not deploymentInfo.usesFramework("QtOpenGL"): + continue + + plugins.append((pluginDirectory, pluginName)) + + for pluginDirectory, pluginName in plugins: + if verbose >= 2: + print "Processing plugin", os.path.join(pluginDirectory, pluginName), "..." + + sourcePath = os.path.join(deploymentInfo.pluginPath, pluginDirectory, pluginName) + destinationDirectory = os.path.join(appBundleInfo.pluginPath, pluginDirectory) + if not os.path.exists(destinationDirectory): + os.makedirs(destinationDirectory) + + destinationPath = os.path.join(destinationDirectory, pluginName) + shutil.copy2(sourcePath, destinationPath) + if verbose >= 3: + print "Copied:", sourcePath + print " to:", destinationPath + + if strip: + runStrip(destinationPath, verbose) + + dependencies = getFrameworks(destinationPath, verbose) + + for dependency in dependencies: + changeInstallName(dependency.installName, dependency.deployedInstallName, destinationPath, verbose) + + # Deploy framework if necessary. + if dependency.frameworkName not in deploymentInfo.deployedFrameworks: + deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo) + qt_conf="""[Paths] translations=Resources plugins=PlugIns """ -ap = ArgumentParser(description="""Front-end to macdeployqt with some additional functions. +ap = ArgumentParser(description="""Improved version of macdeployqt. Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. Note, that the "dist" folder will be deleted before deploying on each run. @@ -69,22 +458,6 @@ for p in config.add_resources: # ------------------------------------------------ -if len(config.add_qt_tr) == 0: - add_qt_tr = [] -else: - qt_tr_dir = os.path.join(os.getenv("QTDIR", ""), "translations") - add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] - for lng_file in add_qt_tr: - p = os.path.join(qt_tr_dir, lng_file) - if verbose >= 3: - print "Checking for \"%s\"..." % p - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) - sys.exit(1) - -# ------------------------------------------------ - if len(config.fancy) == 1: if verbose >= 3: print "Fancy: Importing plistlib..." @@ -160,7 +533,6 @@ if os.path.exists("dist"): # ------------------------------------------------ target = os.path.join("dist", app_bundle) -target_res = os.path.join(target, "Contents", "Resources") if verbose >= 2: print "+ Copying source bundle +" @@ -170,27 +542,61 @@ if verbose >= 3: os.mkdir("dist") shutil.copytree(app_bundle, target) -# ------------------------------------------------ +applicationBundle = ApplicationBundleInfo(target) -macdeployqt_args = ["macdeployqt", target, "-verbose=%d" % verbose] -if not config.plugins: - macdeployqt_args.append("-no-plugins") -if not config.strip: - macdeployqt_args.append("-no-strip") +# ------------------------------------------------ if verbose >= 2: - print "+ Running macdeployqt +" + print "+ Deploying frameworks +" -ret = subprocess.call(macdeployqt_args) -if ret != 0: +try: + deploymentInfo = deployFrameworksForAppBundle(applicationBundle, config.strip, verbose) + if deploymentInfo.qtPath is None: + deploymentInfo.qtPath = os.getenv("QTDIR", None) + if deploymentInfo.qtPath is None: + if verbose >= 1: + sys.stderr.write("Warning: Could not detect Qt's path, skipping plugin deployment!\n") + config.plugins = False +except RuntimeError as e: + if verbose >= 1: + sys.stderr.write("Error: %s\n" % str(e)) sys.exit(ret) # ------------------------------------------------ +if config.plugins: + if verbose >= 2: + print "+ Deploying plugins +" + + try: + deployPlugins(applicationBundle, deploymentInfo, config.strip, verbose) + except RuntimeError as e: + if verbose >= 1: + sys.stderr.write("Error: %s\n" % str(e)) + sys.exit(ret) + +# ------------------------------------------------ + +if len(config.add_qt_tr) == 0: + add_qt_tr = [] +else: + qt_tr_dir = os.path.join(deploymentInfo.qtPath, "translations") + add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] + for lng_file in add_qt_tr: + p = os.path.join(qt_tr_dir, lng_file) + if verbose >= 3: + print "Checking for \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) + sys.exit(1) + +# ------------------------------------------------ + if verbose >= 2: print "+ Installing qt.conf +" -f = open(os.path.join(target_res, "qt.conf"), "wb") +f = open(os.path.join(applicationBundle.resourcesPath, "qt.conf"), "wb") f.write(qt_conf) f.close() @@ -201,8 +607,8 @@ if len(add_qt_tr) > 0 and verbose >= 2: for lng_file in add_qt_tr: if verbose >= 3: - print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(target_res, lng_file) - shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(target_res, lng_file)) + print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(applicationBundle.resourcesPath, lng_file) + shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(applicationBundle.resourcesPath, lng_file)) # ------------------------------------------------ @@ -210,7 +616,7 @@ if len(config.add_resources) > 0 and verbose >= 2: print "+ Adding additional resources +" for p in config.add_resources: - t = os.path.join(target_res, os.path.basename(p)) + t = os.path.join(applicationBundle.resourcesPath, os.path.basename(p)) if verbose >= 3: print p, "->", t if os.path.isdir(p): diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt index 0654ff7169..a3f0b5447d 100644 --- a/contrib/macdeploy/notes.txt +++ b/contrib/macdeploy/notes.txt @@ -6,7 +6,7 @@ You will need the appscript package for the fancy disk image creation to work. Install it by invoking "sudo easy_install appscript". Ths script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr de,es,ru -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist +$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 During the process, the disk image window will pop up briefly where the fancy settings are applied. This is normal, please do not interfere. @@ -19,7 +19,7 @@ Fill in the following. Enable custom process step: [x] Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus Working directory: %{buildDir} -Command arguments: Bitcoin-Qt.app -add-qt-tr de,ru -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist +Command arguments: Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 After that you can start the deployment process through the menu with Build -> Deploy Project "bitcoin-qt" diff --git a/contrib/miniupnpc/Portfile b/contrib/miniupnpc/Portfile deleted file mode 100644 index 133aee532c..0000000000 --- a/contrib/miniupnpc/Portfile +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4 -# $Id$ - -PortSystem 1.0 - -name miniupnpc -epoch 2 -version 1.6 -revision 2 -categories net -platforms darwin -license BSD -maintainers singingwolfboy openmaintainer -description Lightweight client for UPnP protocol -long_description \ - ${description} - -homepage http://miniupnp.free.fr/ -master_sites http://miniupnp.free.fr/files/download.php?file=${distname}${extract.suffix}&dummy= -checksums md5 88055f2d4a061cfd4cfe25a9eae22f67 \ - sha1 ef8f2edb17f2e7c5b8dc67ee80a65c199d823e0a \ - rmd160 d86b75b331a3fb5525c71708548f311977c0598f - -use_configure no - -variant universal {} -if {[variant_isset universal]} { - set archflags ${configure.universal_cflags} -} else { - set archflags ${configure.cc_archflags} -} - -build.args-append CC="${configure.cc} ${archflags}" - -post-patch { - reinplace "s|-Wl,-install_name,|-Wl,-install_name,${prefix}/lib/|" ${worksrcpath}/Makefile -} - -destroot.destdir PREFIX=${prefix} INSTALLPREFIX=${destroot}${prefix} - -livecheck.type regex -livecheck.url http://miniupnp.free.fr/files/ -livecheck.regex ${name}-(\\d+(\\.\\d{1,4})+)${extract.suffix} diff --git a/doc/Doxyfile b/doc/Doxyfile new file mode 100644 index 0000000000..08d4f8c37f --- /dev/null +++ b/doc/Doxyfile @@ -0,0 +1,1752 @@ +# Doxyfile 1.7.4 + +# !!! Invoke doxygen from project root using: +# doxygen doc/Doxyfile + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = Bitcoin + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.5.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "P2P Digital Currency" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = doc/bitcoin_logo_doxygen.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc/doxygen + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> +# Qt Help Project / Custom Filters</a>. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +# Qt Help Project / Filter Attributes</a>. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/doc/README b/doc/README index f45bf0c152..00694e2ae1 100644 --- a/doc/README +++ b/doc/README @@ -1,6 +1,6 @@ -Bitcoin 0.5.0 BETA +Bitcoin 0.6.0 BETA -Copyright (c) 2009-2011 Bitcoin Developers +Copyright (c) 2009-2012 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in diff --git a/doc/README_windows.txt b/doc/README_windows.txt index ea2f14c42a..9aa5aa744f 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,6 +1,6 @@ -Bitcoin 0.5.0 BETA
+Bitcoin 0.6.0 BETA
-Copyright (c) 2009-2011 Bitcoin Developers
+Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file license.txt or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt index ffaec44f18..0b0e377065 100644 --- a/doc/assets-attribution.txt +++ b/doc/assets-attribution.txt @@ -5,13 +5,13 @@ License: ISC Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, src/qt/res/src/*.svg Designer: Wladimir van der Laan -License: Creative Commons Attribution +License: MIT Icon: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, src/qt/res/icons/history.png, src/qt/res/icons/key.png, src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png + src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png Icon Pack: NUVOLA ICON THEME for KDE 3.x Designer: David Vignoni (david@icon-king.com) ICON KING - www.icon-king.com diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png Binary files differnew file mode 100644 index 0000000000..5b41b02e18 --- /dev/null +++ b/doc/bitcoin_logo_doxygen.png diff --git a/doc/build-msw.txt b/doc/build-msw.txt index 346be75f56..7e3d1a7cbf 100644 --- a/doc/build-msw.txt +++ b/doc/build-msw.txt @@ -1,4 +1,4 @@ -Copyright (c) 2009-2011 Bitcoin Developers +Copyright (c) 2009-2012 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in diff --git a/doc/build-osx.txt b/doc/build-osx.txt index 800244153a..2ae77067fc 100644 --- a/doc/build-osx.txt +++ b/doc/build-osx.txt @@ -1,4 +1,4 @@ -Copyright (c) 2011 Bitcoin Developers +Copyright (c) 2009-2012 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the @@ -36,12 +36,10 @@ git clone git@github.com:bitcoin/bitcoin.git bitcoin 3. Install dependencies from MacPorts -sudo port install boost db48 openssl +sudo port install boost db48 openssl miniupnpc -Install the right version of miniupnpc: -pushd bitcoin/contrib/minipupnpc; sudo port install; popd -(this will be unnecessary soon, you will just port install miniupnpc -along with the rest of the dependencies). +Optionally install qrencode (and set USE_QRCODE=1): +sudo port install qrencode 4. Now you should be able to build bitcoind: diff --git a/doc/build-unix.txt b/doc/build-unix.txt index f4178caae5..c5b4205084 100644 --- a/doc/build-unix.txt +++ b/doc/build-unix.txt @@ -1,5 +1,4 @@ -Copyright (c) 2009-2010 Satoshi Nakamoto -Copyright (c) 2011 Bitcoin Developers +Copyright (c) 2009-2012 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in @@ -23,12 +22,13 @@ the graphical bitcoin. Dependencies ------------ - Library Purpose Description - ------- ------- ----------- - libssl SSL Support Secure communications - libdb4.8 Berkeley DB Blockchain & wallet storage - libboost Boost C++ Library - miniupnpc UPnP Support Optional firewall-jumping support + Library Purpose Description + ------- ------- ----------- + libssl SSL Support Secure communications + libdb4.8 Berkeley DB Blockchain & wallet storage + libboost Boost C++ Library + miniupnpc UPnP Support Optional firewall-jumping support + libqrencode QRCode generation Optional QRCode generation miniupnpc may be used for UPnP port mapping. It can be downloaded from http://miniupnp.tuxfamily.org/files/. UPnP support is compiled in and @@ -37,6 +37,12 @@ turned off by default. Set USE_UPNP to a different value to control this: USE_UPNP=0 (the default) UPnP support turned off by default at runtime USE_UPNP=1 UPnP support turned on by default at runtime +libqrencode may be used for QRCode image generation. It can be downloaded +from http://fukuchi.org/works/qrencode/index.html.en, or installed via +your package manager. Set USE_QRCODE to control this: + USE_QRCODE=0 (the default) No QRCode support - libarcode not required + USE_QRCODE=1 QRCode support enabled + Licenses of statically linked libraries: Berkeley DB New BSD license with additional requirement that linked software must be free open source @@ -50,7 +56,6 @@ Versions used in this release: Boost 1.37 miniupnpc 1.6 - Dependency Build Instructions: Ubuntu & Debian ---------------------------------------------- sudo apt-get install build-essential @@ -59,6 +64,7 @@ sudo apt-get install libdb4.8-dev sudo apt-get install libdb4.8++-dev Boost 1.40+: sudo apt-get install libboost-all-dev or Boost 1.37: sudo apt-get install libboost1.37-dev +sudo apt-get install libqrencode-dev If using Boost 1.37, append -mt to the boost libraries in the makefile. diff --git a/doc/readme-qt.rst b/doc/readme-qt.rst index 090177321e..294f31ac24 100644 --- a/doc/readme-qt.rst +++ b/doc/readme-qt.rst @@ -1,39 +1,6 @@ Bitcoin-qt: Qt4 GUI for Bitcoin =============================== -Features -======== - -- All functionality of the Wx GUI, including wallet encryption - -- Compatibility with Linux (both GNOME and KDE), MacOSX and Windows - -- Notification on incoming / outgoing transactions (compatible with FreeDesktop and other desktop notification schemes) - -- General interface improvements: Splash screen, tabbed interface - -- Overview page with current balance, unconfirmed balance, and such - -- Better transaction list with status icons, real-time filtering and a context menu - -- Asks for confirmation before sending coins, for your own safety - -- CSV export of transactions and address book (for Excel bookkeeping) - -- Shows alternative icon when connected to testnet, so you never accidentally send real coins during testing - -- Shows a progress bar on initial block download, so that you don't have to wonder how many blocks it needs to download to be up to date - -- Sendmany support, send to multiple recipients at the same time - -- Multiple unit support, can show subdivided bitcoins (uBTC, mBTC) for users that like large numbers - -- Support for English, German, Russian and Dutch languages - -- Address books and transaction table can be sorted by any column - -- Accepts "bitcoin:" URLs from browsers and other sources through drag and drop - Build instructions =================== @@ -92,7 +59,7 @@ Mac OS X :: sudo port selfupdate - sudo port install boost db48 + sudo port install boost db48 miniupnpc - Open the .pro file in Qt Creator and build as normal (cmd-B) @@ -127,14 +94,6 @@ Set USE_UPNP to a different value to control this: | USE_UPNP=1 | build with UPnP support turned on by default at runtime. | +------------+--------------------------------------------------------------------------+ -Mac OS X users: miniupnpc is currently outdated on MacPorts. An updated Portfile is provided in contrib/miniupnpc within this project. -You can execute the following commands in a terminal to install it: - -:: - - cd <location of bitcoin-qt>/contrib/miniupnpc - sudo port install - Notification support for recent (k)ubuntu versions --------------------------------------------------- @@ -145,6 +104,20 @@ FreeDesktop notification interface through DBUS using the following qmake option qmake "USE_DBUS=1" +Generation of QR codes +----------------------- + +libqrencode may be used to generate QRCode images for payment requests. +It can be downloaded from http://fukuchi.org/works/qrencode/index.html.en, or installed via your package manager. Pass the USE_QRCODE +flag to qmake to control this: + ++--------------+--------------------------------------------------------------------------+ +| USE_QRCODE=0 | (the default) No QRCode support - libarcode not required | ++--------------+--------------------------------------------------------------------------+ +| USE_QRCODE=1 | QRCode support enabled | ++--------------+--------------------------------------------------------------------------+ + + Berkely DB version warning ========================== diff --git a/doc/release-process.txt b/doc/release-process.txt index c62079d541..051a2151b5 100644 --- a/doc/release-process.txt +++ b/doc/release-process.txt @@ -1,31 +1,24 @@ +* update translations (ping tcatm on IRC for now) + * update (commit) version in sources - src/serialize.h + bitcoin-qt.pro + src/main.h (CLIENT_VERSION : PROTOCOL_VERSION in serialize.h is updated only on protocol changes) share/setup.nsi - -* update (commit) version in OSX app bundle - contrib/Bitcoin.app/Contents/Info.plist - - * CFBundleShortVersionString should have value like 0.5.0 - * CFBundleVersion should have value like 500 + doc/README* * tag version in git - git tag -a v0.5.0 + git tag -a v0.5.1 * write release notes. git shortlog helps a lot: - git shortlog --no-merges v0.4.0.. - -* create source-only archive - - git archive --format=tar --prefix=bitcoin-0.5.0/ HEAD | \ - gzip -9c > ~/tmp/bitcoin-0.5.0-src.tar.gz + git shortlog --no-merges v0.5.0.. * perform gitian builds * From a directory containing the bitcoin source, gitian-builder and gitian.sigs export SIGNER=(your gitian key, ie bluematt, sipa, etc) - export VERSION=0.5.0 + export VERSION=0.5.1 cd ./gitian-builder * Fetch and build inputs: @@ -33,6 +26,9 @@ wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz wget 'http://www.openssl.org/source/openssl-1.0.0e.tar.gz' wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz' + wget 'http://zlib.net/zlib-1.2.6.tar.gz' + wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz' + wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2' wget 'http://downloads.sourceforge.net/project/boost/boost/1.47.0/boost_1_47_0.tar.bz2' wget 'http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.4.tar.gz' cd .. @@ -40,90 +36,105 @@ cp build/out/boost-win32-1.47.0-gitian.zip inputs/ ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml cp build/out/qt-win32-4.7.4-gitian.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win32.yml + cp build/out/bitcoin-deps-0.0.3.zip inputs/ * Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32: - ./bin/gbuild --commit bitcoin=v$VERSION ../bitcoin/contrib/gitian-descriptors/gitian.yml - ./bin/gsign --signer $SIGNER --release $VERSION --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml + ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml + ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml pushd build/out - zip -r bitcoin-$VERSION-linux-gitian.zip * - mv bitcoin-$VERSION-linux-gitian.zip ../../ + zip -r bitcoin-${VERSION}-linux-gitian.zip * + mv bitcoin-${VERSION}-linux-gitian.zip ../../ popd - ./bin/gbuild --commit bitcoin=v$VERSION ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml - ./bin/gsign --signer $SIGNER --release $VERSION-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml + ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml + ./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml pushd build/out - zip -r bitcoin-$VERSION-win32-gitian.zip * - mv bitcoin-$VERSION-win32-gitian.zip ../../ + zip -r bitcoin-${VERSION}-win32-gitian.zip * + mv bitcoin-${VERSION}-win32-gitian.zip ../../ popd Build output expected: - 1. linux 32-bit and 64-bit binaries + source (bitcoin-$VERSION-linux-gitian.zip) - 2. windows 32-bit binary, installer + source (bitcoin-$VERSION-win32-gitian.zip) - 3. Gitian signatures (in gitian.sigs/$VERSION[-win32]/(your gitian key)/ + 1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip) + 2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip) + 3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/ * repackage gitian builds for release as stand-alone zip/tar/installer exe * Linux .tar.gz: - unzip bitcoin-$VERSION-linux-gitian.zip -d bitcoin-$VERSION-linux - tar czvf bitcoin-$VERSION-linux.tar.gz bitcoin-$VERSION-linux - rm -rf bitcoin-$VERSION-linux + unzip bitcoin-${VERSION}-linux-gitian.zip -d bitcoin-${VERSION}-linux + tar czvf bitcoin-${VERSION}-linux.tar.gz bitcoin-${VERSION}-linux + rm -rf bitcoin-${VERSION}-linux * Windows .zip and setup.exe: - unzip bitcoin-$VERSION-win32-gitian.zip -d bitcoin-$VERSION-win32 - mv bitcoin-$VERSION-win32/bitcoin-*-setup.exe . - zip -r bitcoin-$VERSION-win32.zip bitcoin-$VERSION-win32 - rm -rf bitcoin-$VERSION-win32 + unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32 + mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe . + zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32 + rm -rf bitcoin-${VERSION}-win32 * perform Mac build - See this blog post for how Gavin set up his build environment and - patched macdeployqt to build the OSX release: + See this blog post for how Gavin set up his build environment to build the OSX + release; note that a patched version of macdeployqt is not needed anymore, as + the required functionality and fixes are implemented directly in macdeployqtplus: http://gavintech.blogspot.com/2011/11/deploying-bitcoin-qt-on-osx.html - qmake USE_SSL=1 USE_UPNP=1 bitcoin-qt.pro + Gavin also had trouble with the macports py27-appscript package; he + ended up installing a version that worked with: /usr/bin/easy_install-2.7 appscript + + qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 bitcoin-qt.pro make export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale) - contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist + python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist Build output expected: Bitcoin-Qt.dmg -* upload source and builds to SourceForge +* upload builds to SourceForge -* create SHA1SUMS for builds, and PGP-sign it +* create SHA256SUMS for builds, and PGP-sign it * update bitcoin.org version * update forum version -* update wiki - * update wiki download links -* release gitian-signed gitian archives +* Commit your signature to gitian.sigs: + pushd gitian.sigs + git add ${VERSION}/${SIGNER} + git add ${VERSION}-win32/${SIGNER} + git commit -a + git push # Assuming you can push to the gitian.sigs tree + popd + +------------------------------------------------------------------------- - * Collect enough gitian signatures to meet minimum_weight (see contrib/gitian-downloader/*-download-config) +* After 3 or more people have gitian-built, repackage gitian-signed zips: * From a directory containing bitcoin source, gitian.sigs and gitian zips - export VERSION=0.5.0 - mkdir bitcoin-$VERSION-linux-gitian; cd bitcoin-$VERSION-linux-gitian - unzip ../bitcoin-$VERSION-linux-gitian.zip + export VERSION=0.5.1 + mkdir bitcoin-${VERSION}-linux-gitian + pushd bitcoin-${VERSION}-linux-gitian + unzip ../bitcoin-${VERSION}-linux-gitian.zip mkdir gitian cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/ - for file in `ls ../gitian.sigs/$VERSION/`; do - cp ../gitian.sigs/$VERSION/$file/bitcoin-build.assert ./gitian/$file-build.assert - cp ../gitian.sigs/$VERSION/$file/bitcoin-build.assert.sig ./gitian/$file-build.assert.sig + for signer in $(ls ../gitian.sigs/${VERSION}/); do + cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert + cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig done - zip -r bitcoin-$VERSION-linux-gitian.zip * - cp bitcoin-$VERSION-linux-gitian.zip ../ - cd .. - mkdir bitcoin-$VERSION-linux-gitian; cd bitcoin-$VERSION-linux-gitian - unzip ../bitcoin-$VERSION-linux-gitian.zip + zip -r bitcoin-${VERSION}-linux-gitian.zip * + cp bitcoin-${VERSION}-linux-gitian.zip ../ + popd + mkdir bitcoin-${VERSION}-win32-gitian + pushd bitcoin-${VERSION}-win32-gitian + unzip ../bitcoin-${VERSION}-win32-gitian.zip mkdir gitian cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/ - for file in `ls ../gitian.sigs/$VERSION/`; do - cp ../gitian.sigs/$VERSION/$file/bitcoin-build.assert ./gitian/$file-build.assert - cp ../gitian.sigs/$VERSION/$file/bitcoin-build.assert.sig ./gitian/$file-build.assert.sig + for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do + cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert + cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig done - zip -r bitcoin-$VERSION-linux-gitian.zip * - cp bitcoin-$VERSION-linux-gitian.zip ../ + zip -r bitcoin-${VERSION}-win32-gitian.zip * + cp bitcoin-${VERSION}-win32-gitian.zip ../ + popd * Upload gitian zips to SourceForge diff --git a/doc/translation_process.md b/doc/translation_process.md index cf1000573f..3ddfc0cbf4 100644 --- a/doc/translation_process.md +++ b/doc/translation_process.md @@ -1,7 +1,7 @@ Translations ============ -The QT GUI can be easily be translated into other languages. Here's how we +The Qt GUI can be easily translated into other languages. Here's how we handle those translations. Files and Folders @@ -30,10 +30,14 @@ This directory contains all translations. Filenames must adhere to this format: #### Source file -`src/qt/locale/bitcoin_en.ts` is a treated in a special way. It is used as the -source for all other translations. Whenever a string in the code is change +`src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the +source for all other translations. Whenever a string in the code is changed this file must be updated to reflect those changes. Usually, this can be -accomplished by running `lupdate` +accomplished by running `lupdate` (included in the Qt SDK). + +An updated source file should be merged to github and transifex will pick it +up from there. Afterwards the new strings show up as "Remaining" in transifex +and can be translated. Syncing with transifex ---------------------- @@ -42,9 +46,9 @@ We are using http://transifex.net as a frontend for translating the client. https://www.transifex.net/projects/p/bitcoin/resource/tx/ -The "transifex client":http://help.transifex.net/features/client/index.html -will help with fetching new translations from transifex. - +The "transifex client" (see: http://help.transifex.net/features/client/) +will help with fetching new translations from transifex. Use the following +config to be able to connect with the client. ### .tx/config @@ -55,9 +59,22 @@ will help with fetching new translations from transifex. file_filter = src/qt/locale/bitcoin_<lang>.ts source_file = src/qt/locale/bitcoin_en.ts source_lang = en + +### .tx/config (for Windows) + + [main] + host = https://www.transifex.net + + [bitcoin.tx] + file_filter = src\qt\locale\bitcoin_<lang>.ts + source_file = src\qt\locale\bitcoin_en.ts + source_lang = en + +It is also possible to directly download new translations one by one from transifex. ### Fetching new translations 1. `tx pull -a` -2. update `src/qt/bitcoin.qrc` +2. update `src/qt/bitcoin.qrc` manually or via + `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/<file alias="\2">locale/\1.qm<\/file>/'` 3. `git add` new translations from `src/qt/locale/` diff --git a/share/setup.nsi b/share/setup.nsi index 19f5a5329b..4dc2ad5f05 100644 --- a/share/setup.nsi +++ b/share/setup.nsi @@ -5,7 +5,7 @@ SetCompressor /SOLID lzma # General Symbol Definitions
!define REGKEY "SOFTWARE\$(^Name)"
-!define VERSION 0.5.0
+!define VERSION 0.6.0
!define COMPANY "Bitcoin project"
!define URL http://www.bitcoin.org/
@@ -45,13 +45,13 @@ Var StartMenuGroup !insertmacro MUI_LANGUAGE English
# Installer attributes
-OutFile bitcoin-0.5.0-win32-setup.exe
+OutFile bitcoin-0.6.0-win32-setup.exe
InstallDir $PROGRAMFILES\Bitcoin
CRCCheck on
XPStyle on
BrandingText " "
ShowInstDetails show
-VIProductVersion 0.5.0.0
+VIProductVersion 0.6.0.99
VIAddVersionKey ProductName Bitcoin
VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}"
@@ -75,6 +75,10 @@ Section -Main SEC0000 File /r /x *.exe /x *.o ../src\*.*
SetOutPath $INSTDIR
WriteRegStr HKCU "${REGKEY}\Components" Main 1
+
+ # Remove old wxwidgets-based-bitcoin executable and locales:
+ Delete /REBOOTOK $INSTDIR\bitcoin.exe
+ RMDir /r /REBOOTOK $INSTDIR\locale
SectionEnd
Section -post SEC0001
@@ -94,6 +98,12 @@ Section -post SEC0001 WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
+
+ # bitcoin: URI handling disabled for 0.6.0
+ # WriteRegStr HKCR "bitcoin" "URL Protocol" ""
+ # WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin"
+ # WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe
+ # WriteRegStr HKCR "bitcoin\shell\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"'
SectionEnd
# Macro for selecting uninstaller sections
@@ -131,6 +141,7 @@ Section -un.post UNSEC0001 DeleteRegValue HKCU "${REGKEY}" Path
DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components"
DeleteRegKey /IfEmpty HKCU "${REGKEY}"
+ DeleteRegKey HKCR "bitcoin"
RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
RmDir /REBOOTOK $INSTDIR
Push $R0
diff --git a/src/addrman.cpp b/src/addrman.cpp new file mode 100644 index 0000000000..2ef666cf2c --- /dev/null +++ b/src/addrman.cpp @@ -0,0 +1,506 @@ +// Copyright (c) 2012 Pieter Wuille +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include "addrman.h" + +using namespace std; + +int CAddrInfo::GetTriedBucket(const std::vector<unsigned char> &nKey) const +{ + CDataStream ss1(SER_GETHASH); + std::vector<unsigned char> vchKey = GetKey(); + ss1 << nKey << vchKey; + uint64 hash1 = Hash(ss1.begin(), ss1.end()).Get64(); + + CDataStream ss2(SER_GETHASH); + std::vector<unsigned char> vchGroupKey = GetGroup(); + ss2 << nKey << vchGroupKey << (hash1 % ADDRMAN_TRIED_BUCKETS_PER_GROUP); + uint64 hash2 = Hash(ss2.begin(), ss2.end()).Get64(); + return hash2 % ADDRMAN_TRIED_BUCKET_COUNT; +} + +int CAddrInfo::GetNewBucket(const std::vector<unsigned char> &nKey, const CNetAddr& src) const +{ + CDataStream ss1(SER_GETHASH); + std::vector<unsigned char> vchGroupKey = GetGroup(); + std::vector<unsigned char> vchSourceGroupKey = src.GetGroup(); + ss1 << nKey << vchGroupKey << vchSourceGroupKey; + uint64 hash1 = Hash(ss1.begin(), ss1.end()).Get64(); + + CDataStream ss2(SER_GETHASH); + ss2 << nKey << vchSourceGroupKey << (hash1 % ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP); + uint64 hash2 = Hash(ss2.begin(), ss2.end()).Get64(); + return hash2 % ADDRMAN_NEW_BUCKET_COUNT; +} + +bool CAddrInfo::IsTerrible(int64 nNow) const +{ + if (nLastTry && nLastTry >= nNow-60) // never remove things tried the last minute + return false; + + if (nTime > nNow + 10*60) // came in a flying DeLorean + return true; + + if (nTime==0 || nNow-nTime > ADDRMAN_HORIZON_DAYS*86400) // not seen in over a month + return true; + + if (nLastSuccess==0 && nAttempts>=ADDRMAN_RETRIES) // tried three times and never a success + return true; + + if (nNow-nLastSuccess > ADDRMAN_MIN_FAIL_DAYS*86400 && nAttempts>=ADDRMAN_MAX_FAILURES) // 10 successive failures in the last week + return true; + + return false; +} + +double CAddrInfo::GetChance(int64 nNow) const +{ + double fChance = 1.0; + + int64 nSinceLastSeen = nNow - nTime; + int64 nSinceLastTry = nNow - nLastTry; + + if (nSinceLastSeen < 0) nSinceLastSeen = 0; + if (nSinceLastTry < 0) nSinceLastTry = 0; + + fChance *= 600.0 / (600.0 + nSinceLastSeen); + + // deprioritize very recent attempts away + if (nSinceLastTry < 60*10) + fChance *= 0.01; + + // deprioritize 50% after each failed attempt + for (int n=0; n<nAttempts; n++) + fChance /= 1.5; + + return fChance; +} + +CAddrInfo* CAddrMan::Find(const CNetAddr& addr, int *pnId) +{ + std::map<CNetAddr, int>::iterator it = mapAddr.find(addr); + if (it == mapAddr.end()) + return NULL; + if (pnId) + *pnId = (*it).second; + std::map<int, CAddrInfo>::iterator it2 = mapInfo.find((*it).second); + if (it2 != mapInfo.end()) + return &(*it2).second; + return NULL; +} + +CAddrInfo* CAddrMan::Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId) +{ + int nId = nIdCount++; + mapInfo[nId] = CAddrInfo(addr, addrSource); + mapAddr[addr] = nId; + mapInfo[nId].nRandomPos = vRandom.size(); + vRandom.push_back(nId); + if (pnId) + *pnId = nId; + return &mapInfo[nId]; +} + +void CAddrMan::SwapRandom(int nRndPos1, int nRndPos2) +{ + if (nRndPos1 == nRndPos2) + return; + + int nId1 = vRandom[nRndPos1]; + int nId2 = vRandom[nRndPos2]; + + mapInfo[nId1].nRandomPos = nRndPos2; + mapInfo[nId2].nRandomPos = nRndPos1; + + vRandom[nRndPos1] = nId2; + vRandom[nRndPos2] = nId1; +} + +int CAddrMan::SelectTried(int nKBucket) +{ + std::vector<int> &vTried = vvTried[nKBucket]; + + // random shuffle the first few elements (using the entire list) + // find the least recently tried among them + int64 nOldest = -1; + for (int i=0; i<ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT && i<vTried.size(); i++) + { + int nPos = GetRandInt(vTried.size() - i) + i; + int nTemp = vTried[nPos]; + vTried[nPos] = vTried[i]; + vTried[i] = nTemp; + if (nOldest == -1 || mapInfo[nTemp].nLastSuccess < mapInfo[nOldest].nLastSuccess) + nOldest = nTemp; + } + + return nOldest; +} + +int CAddrMan::ShrinkNew(int nUBucket) +{ + std::set<int> &vNew = vvNew[nUBucket]; + + // first look for deletable items + for (std::set<int>::iterator it = vNew.begin(); it != vNew.end(); it++) + { + CAddrInfo &info = mapInfo[*it]; + if (info.IsTerrible()) + { + if (--info.nRefCount == 0) + { + SwapRandom(info.nRandomPos, vRandom.size()-1); + vRandom.pop_back(); + mapAddr.erase(info); + mapInfo.erase(*it); + nNew--; + } + vNew.erase(it); + return 0; + } + } + + // otherwise, select four randomly, and pick the oldest of those to replace + int n[4] = {GetRandInt(vNew.size()), GetRandInt(vNew.size()), GetRandInt(vNew.size()), GetRandInt(vNew.size())}; + int nI = 0; + int nOldest = -1; + for (std::set<int>::iterator it = vNew.begin(); it != vNew.end(); it++) + { + if (nI == n[0] || nI == n[1] || nI == n[2] || nI == n[3]) + { + if (nOldest == -1 || mapInfo[*it].nTime < mapInfo[nOldest].nTime) + nOldest = *it; + } + nI++; + } + CAddrInfo &info = mapInfo[nOldest]; + if (--info.nRefCount == 0) + { + SwapRandom(info.nRandomPos, vRandom.size()-1); + vRandom.pop_back(); + mapAddr.erase(info); + mapInfo.erase(nOldest); + nNew--; + } + vNew.erase(nOldest); + + return 1; +} + +void CAddrMan::MakeTried(CAddrInfo& info, int nId, int nOrigin) +{ + // remove the entry from all new buckets + for (std::vector<std::set<int> >::iterator it = vvNew.begin(); it != vvNew.end(); it++) + { + if ((*it).erase(nId)) + info.nRefCount--; + } + nNew--; + + // what tried bucket to move the entry to + int nKBucket = info.GetTriedBucket(nKey); + std::vector<int> &vTried = vvTried[nKBucket]; + + // first check whether there is place to just add it + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + vTried.push_back(nId); + nTried++; + info.fInTried = true; + return; + } + + // otherwise, find an item to evict + int nPos = SelectTried(nKBucket); + + // find which new bucket it belongs to + int nUBucket = mapInfo[vTried[nPos]].GetNewBucket(nKey); + std::set<int> &vNew = vvNew[nUBucket]; + + // remove the to-be-replaced tried entry from the tried set + CAddrInfo& infoOld = mapInfo[vTried[nPos]]; + infoOld.fInTried = false; + infoOld.nRefCount = 1; + // do not update nTried, as we are going to move something else there immediately + + // check whether there is place in that one, + if (vNew.size() < ADDRMAN_NEW_BUCKET_SIZE) + { + // if so, move it back there + vNew.insert(vTried[nPos]); + } else { + // otherwise, move it to the new bucket nId came from (there is certainly place there) + vvNew[nOrigin].insert(vTried[nPos]); + } + nNew++; + + vTried[nPos] = nId; + // we just overwrote an entry in vTried; no need to update nTried + info.fInTried = true; + return; +} + +void CAddrMan::Good_(const CService &addr, int64 nTime) +{ +// printf("Good: addr=%s\n", addr.ToString().c_str()); + + int nId; + CAddrInfo *pinfo = Find(addr, &nId); + + // if not found, bail out + if (!pinfo) + return; + + CAddrInfo &info = *pinfo; + + // check whether we are talking about the exact same CService (including same port) + if (info != addr) + return; + + // update info + info.nLastSuccess = nTime; + info.nLastTry = nTime; + info.nTime = nTime; + info.nAttempts = 0; + + // if it is already in the tried set, don't do anything else + if (info.fInTried) + return; + + // find a bucket it is in now + int nRnd = GetRandInt(vvNew.size()); + int nUBucket = -1; + for (int n = 0; n < vvNew.size(); n++) + { + int nB = (n+nRnd) % vvNew.size(); + std::set<int> &vNew = vvNew[nB]; + if (vNew.count(nId)) + { + nUBucket = nB; + break; + } + } + + // if no bucket is found, something bad happened; + // TODO: maybe re-add the node, but for now, just bail out + if (nUBucket == -1) return; + + printf("Moving %s to tried\n", addr.ToString().c_str()); + + // move nId to the tried tables + MakeTried(info, nId, nUBucket); +} + +bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty) +{ + if (!addr.IsRoutable()) + return false; + + bool fNew = false; + int nId; + CAddrInfo *pinfo = Find(addr, &nId); + + if (pinfo) + { + // periodically update nTime + bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); + int64 nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); + if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval - nTimePenalty)) + pinfo->nTime = max((int64)0, addr.nTime - nTimePenalty); + + // add services + pinfo->nServices |= addr.nServices; + + // do not update if no new information is present + if (!addr.nTime || pinfo->nTime && addr.nTime <= pinfo->nTime) + return false; + + // do not update if the entry was already in the "tried" table + if (pinfo->fInTried) + return false; + + // do not update if the max reference count is reached + if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + return false; + + // stochastic test: previous nRefCount == N: 2^N times harder to increase it + int nFactor = 1; + for (int n=0; n<pinfo->nRefCount; n++) + nFactor *= 2; + if (nFactor > 1 && (GetRandInt(nFactor) != 0)) + return false; + } else { + pinfo = Create(addr, source, &nId); + pinfo->nTime = max((int64)0, (int64)pinfo->nTime - nTimePenalty); +// printf("Added %s [nTime=%fhr]\n", pinfo->ToString().c_str(), (GetAdjustedTime() - pinfo->nTime) / 3600.0); + nNew++; + fNew = true; + } + + int nUBucket = pinfo->GetNewBucket(nKey, source); + std::set<int> &vNew = vvNew[nUBucket]; + if (!vNew.count(nId)) + { + pinfo->nRefCount++; + if (vNew.size() == ADDRMAN_NEW_BUCKET_SIZE) + ShrinkNew(nUBucket); + vvNew[nUBucket].insert(nId); + } + return fNew; +} + +void CAddrMan::Attempt_(const CService &addr, int64 nTime) +{ + CAddrInfo *pinfo = Find(addr); + + // if not found, bail out + if (!pinfo) + return; + + CAddrInfo &info = *pinfo; + + // check whether we are talking about the exact same CService (including same port) + if (info != addr) + return; + + // update info + info.nLastTry = nTime; + info.nAttempts++; +} + +CAddress CAddrMan::Select_(int nUnkBias) +{ + if (size() == 0) + return CAddress(); + + double nCorTried = sqrt(nTried) * (100.0 - nUnkBias); + double nCorNew = sqrt(nNew) * nUnkBias; + if ((nCorTried + nCorNew)*GetRandInt(1<<30)/(1<<30) < nCorTried) + { + // use a tried node + double fChanceFactor = 1.0; + while(1) + { + int nKBucket = GetRandInt(vvTried.size()); + std::vector<int> &vTried = vvTried[nKBucket]; + if (vTried.size() == 0) continue; + int nPos = GetRandInt(vTried.size()); + CAddrInfo &info = mapInfo[vTried[nPos]]; + if (GetRandInt(1<<30) < fChanceFactor*info.GetChance()*(1<<30)) + return info; + fChanceFactor *= 1.2; + } + } else { + // use an new node + double fChanceFactor = 1.0; + while(1) + { + int nUBucket = GetRandInt(vvNew.size()); + std::set<int> &vNew = vvNew[nUBucket]; + if (vNew.size() == 0) continue; + int nPos = GetRandInt(vNew.size()); + std::set<int>::iterator it = vNew.begin(); + while (nPos--) + it++; + CAddrInfo &info = mapInfo[*it]; + if (GetRandInt(1<<30) < fChanceFactor*info.GetChance()*(1<<30)) + return info; + fChanceFactor *= 1.2; + } + } +} + +#ifdef DEBUG_ADDRMAN +int CAddrMan::Check_() +{ + std::set<int> setTried; + std::map<int, int> mapNew; + + if (vRandom.size() != nTried + nNew) return -7; + + for (std::map<int, CAddrInfo>::iterator it = mapInfo.begin(); it != mapInfo.end(); it++) + { + int n = (*it).first; + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + + if (!info.nLastSuccess) return -1; + if (info.nRefCount) return -2; + setTried.insert(n); + } else { + if (info.nRefCount < 0 || info.nRefCount > ADDRMAN_NEW_BUCKETS_PER_ADDRESS) return -3; + if (!info.nRefCount) return -4; + mapNew[n] = info.nRefCount; + } + if (mapAddr[info] != n) return -5; + if (info.nRandomPos<0 || info.nRandomPos>=vRandom.size() || vRandom[info.nRandomPos] != n) return -14; + if (info.nLastTry < 0) return -6; + if (info.nLastSuccess < 0) return -8; + } + + if (setTried.size() != nTried) return -9; + if (mapNew.size() != nNew) return -10; + + for (int n=0; n<vvTried.size(); n++) + { + std::vector<int> &vTried = vvTried[n]; + for (std::vector<int>::iterator it = vTried.begin(); it != vTried.end(); it++) + { + if (!setTried.count(*it)) return -11; + setTried.erase(*it); + } + } + + for (int n=0; n<vvNew.size(); n++) + { + std::set<int> &vNew = vvNew[n]; + for (std::set<int>::iterator it = vNew.begin(); it != vNew.end(); it++) + { + if (!mapNew.count(*it)) return -12; + if (--mapNew[*it] == 0) + mapNew.erase(*it); + } + } + + if (setTried.size()) return -13; + if (mapNew.size()) return -15; + + return 0; +} +#endif + +void CAddrMan::GetAddr_(std::vector<CAddress> &vAddr) +{ + int nNodes = ADDRMAN_GETADDR_MAX_PCT*vRandom.size()/100; + if (nNodes > ADDRMAN_GETADDR_MAX) + nNodes = ADDRMAN_GETADDR_MAX; + + // perform a random shuffle over the first nNodes elements of vRandom (selecting from all) + for (int n = 0; n<nNodes; n++) + { + int nRndPos = GetRandInt(vRandom.size() - n) + n; + SwapRandom(n, nRndPos); + vAddr.push_back(mapInfo[vRandom[n]]); + } +} + +void CAddrMan::Connected_(const CService &addr, int64 nTime) +{ + CAddrInfo *pinfo = Find(addr); + + // if not found, bail out + if (!pinfo) + return; + + CAddrInfo &info = *pinfo; + + // check whether we are talking about the exact same CService (including same port) + if (info != addr) + return; + + // update info + int64 nUpdateInterval = 20 * 60; + if (nTime - info.nTime > nUpdateInterval) + info.nTime = nTime; +} diff --git a/src/addrman.h b/src/addrman.h new file mode 100644 index 0000000000..91e1f87f05 --- /dev/null +++ b/src/addrman.h @@ -0,0 +1,500 @@ +// Copyright (c) 2012 Pieter Wuille +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef _BITCOIN_ADDRMAN +#define _BITCOIN_ADDRMAN 1 + +#include "netbase.h" +#include "protocol.h" +#include "util.h" + + +#include <map> +#include <vector> + +#include <openssl/rand.h> + + +/** Extended statistics about a CAddress */ +class CAddrInfo : public CAddress +{ +private: + // where knowledge about this address first came from + CNetAddr source; + + // last succesfull connection by us + int64 nLastSuccess; + + // last try whatsoever by us: + // int64 CAddress::nLastTry + + // connection attempts since last succesful attempt + int nAttempts; + + // reference count in new sets (memory only) + int nRefCount; + + // in tried set? (memory only) + bool fInTried; + + // position in vRandom + int nRandomPos; + + friend class CAddrMan; + +public: + + IMPLEMENT_SERIALIZE( + CAddress* pthis = (CAddress*)(this); + READWRITE(*pthis); + READWRITE(source); + READWRITE(nLastSuccess); + READWRITE(nAttempts); + ) + + void Init() + { + nLastSuccess = 0; + nLastTry = 0; + nAttempts = 0; + nRefCount = 0; + fInTried = false; + nRandomPos = -1; + } + + CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn) + { + Init(); + } + + CAddrInfo() : CAddress(), source() + { + Init(); + } + + // Calculate in which "tried" bucket this entry belongs + int GetTriedBucket(const std::vector<unsigned char> &nKey) const; + + // Calculate in which "new" bucket this entry belongs, given a certain source + int GetNewBucket(const std::vector<unsigned char> &nKey, const CNetAddr& src) const; + + // Calculate in which "new" bucket this entry belongs, using its default source + int GetNewBucket(const std::vector<unsigned char> &nKey) const + { + return GetNewBucket(nKey, source); + } + + // Determine whether the statistics about this entry are bad enough so that it can just be deleted + bool IsTerrible(int64 nNow = GetAdjustedTime()) const; + + // Calculate the relative chance this entry should be given when selecting nodes to connect to + double GetChance(int64 nNow = GetAdjustedTime()) const; + +}; + +// Stochastic address manager +// +// Design goals: +// * Only keep a limited number of addresses around, so that addr.dat and memory requirements do not grow without bound. +// * Keep the address tables in-memory, and asynchronously dump the entire to able in addr.dat. +// * Make sure no (localized) attacker can fill the entire table with his nodes/addresses. +// +// To that end: +// * Addresses are organized into buckets. +// * Address that have not yet been tried go into 256 "new" buckets. +// * Based on the address range (/16 for IPv4) of source of the information, 32 buckets are selected at random +// * The actual bucket is chosen from one of these, based on the range the address itself is located. +// * One single address can occur in up to 4 different buckets, to increase selection chances for addresses that +// are seen frequently. The chance for increasing this multiplicity decreases exponentially. +// * When adding a new address to a full bucket, a randomly chosen entry (with a bias favoring less recently seen +// ones) is removed from it first. +// * Addresses of nodes that are known to be accessible go into 64 "tried" buckets. +// * Each address range selects at random 4 of these buckets. +// * The actual bucket is chosen from one of these, based on the full address. +// * When adding a new good address to a full bucket, a randomly chosen entry (with a bias favoring less recently +// tried ones) is evicted from it, back to the "new" buckets. +// * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not +// be observable by adversaries. +// * Several indexes are kept for high performance. Defining DEBUG_ADDRMAN will introduce frequent (and expensive) +// consistency checks for the entire datastructure. + +// total number of buckets for tried addresses +#define ADDRMAN_TRIED_BUCKET_COUNT 64 + +// maximum allowed number of entries in buckets for tried addresses +#define ADDRMAN_TRIED_BUCKET_SIZE 64 + +// total number of buckets for new addresses +#define ADDRMAN_NEW_BUCKET_COUNT 256 + +// maximum allowed number of entries in buckets for new addresses +#define ADDRMAN_NEW_BUCKET_SIZE 64 + +// over how many buckets entries with tried addresses from a single group (/16 for IPv4) are spread +#define ADDRMAN_TRIED_BUCKETS_PER_GROUP 4 + +// over how many buckets entries with new addresses originating from a single group are spread +#define ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP 32 + +// in how many buckets for entries with new addresses a single address may occur +#define ADDRMAN_NEW_BUCKETS_PER_ADDRESS 4 + +// how many entries in a bucket with tried addresses are inspected, when selecting one to replace +#define ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT 4 + +// how old addresses can maximally be +#define ADDRMAN_HORIZON_DAYS 30 + +// after how many failed attempts we give up on a new node +#define ADDRMAN_RETRIES 3 + +// how many successive failures are allowed ... +#define ADDRMAN_MAX_FAILURES 10 + +// ... in at least this many days +#define ADDRMAN_MIN_FAIL_DAYS 7 + +// the maximum percentage of nodes to return in a getaddr call +#define ADDRMAN_GETADDR_MAX_PCT 23 + +// the maximum number of nodes to return in a getaddr call +#define ADDRMAN_GETADDR_MAX 2500 + +/** Stochastical (IP) address manager */ +class CAddrMan +{ +private: + // critical section to protect the inner data structures + mutable CCriticalSection cs; + + // secret key to randomize bucket select with + std::vector<unsigned char> nKey; + + // last used nId + int nIdCount; + + // table with information about all nId's + std::map<int, CAddrInfo> mapInfo; + + // find an nId based on its network address + std::map<CNetAddr, int> mapAddr; + + // randomly-ordered vector of all nId's + std::vector<int> vRandom; + + // number of "tried" entries + int nTried; + + // list of "tried" buckets + std::vector<std::vector<int> > vvTried; + + // number of (unique) "new" entries + int nNew; + + // list of "new" buckets + std::vector<std::set<int> > vvNew; + +protected: + + // Find an entry. + CAddrInfo* Find(const CNetAddr& addr, int *pnId = NULL); + + // find an entry, creating it if necessary. + // nTime and nServices of found node is updated, if necessary. + CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = NULL); + + // Swap two elements in vRandom. + void SwapRandom(int nRandomPos1, int nRandomPos2); + + // Return position in given bucket to replace. + int SelectTried(int nKBucket); + + // Remove an element from a "new" bucket. + // This is the only place where actual deletes occur. + // They are never deleted while in the "tried" table, only possibly evicted back to the "new" table. + int ShrinkNew(int nUBucket); + + // Move an entry from the "new" table(s) to the "tried" table + // @pre vvUnkown[nOrigin].count(nId) != 0 + void MakeTried(CAddrInfo& info, int nId, int nOrigin); + + // Mark an entry "good", possibly moving it from "new" to "tried". + void Good_(const CService &addr, int64 nTime); + + // Add an entry to the "new" table. + bool Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty); + + // Mark an entry as attempted to connect. + void Attempt_(const CService &addr, int64 nTime); + + // Select an address to connect to. + // nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) + CAddress Select_(int nUnkBias); + +#ifdef DEBUG_ADDRMAN + // Perform consistency check. Returns an error code or zero. + int Check_(); +#endif + + // Select several addresses at once. + void GetAddr_(std::vector<CAddress> &vAddr); + + // Mark an entry as currently-connected-to. + void Connected_(const CService &addr, int64 nTime); + +public: + + IMPLEMENT_SERIALIZE + (({ + // serialized format: + // * version byte (currently 0) + // * nKey + // * nNew + // * nTried + // * number of "new" buckets + // * all nNew addrinfo's in vvNew + // * all nTried addrinfo's in vvTried + // * for each bucket: + // * number of elements + // * for each element: index + // + // Notice that vvTried, mapAddr and vVector are never encoded explicitly; + // they are instead reconstructed from the other information. + // + // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, + // otherwise it is reconstructed as well. + // + // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports + // changes to the ADDRMAN_ parameters without breaking the on-disk structure. + CRITICAL_BLOCK(cs) + { + unsigned char nVersion = 0; + READWRITE(nVersion); + READWRITE(nKey); + READWRITE(nNew); + READWRITE(nTried); + + CAddrMan *am = const_cast<CAddrMan*>(this); + if (fWrite) + { + int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; + READWRITE(nUBuckets); + std::map<int, int> mapUnkIds; + int nIds = 0; + for (std::map<int, CAddrInfo>::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nNew) break; // this means nNew was wrong, oh ow + mapUnkIds[(*it).first] = nIds; + CAddrInfo &info = (*it).second; + if (info.nRefCount) + { + READWRITE(info); + nIds++; + } + } + nIds = 0; + for (std::map<int, CAddrInfo>::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nTried) break; // this means nTried was wrong, oh ow + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + READWRITE(info); + nIds++; + } + } + for (std::vector<std::set<int> >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) + { + const std::set<int> &vNew = (*it); + int nSize = vNew.size(); + READWRITE(nSize); + for (std::set<int>::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) + { + int nIndex = mapUnkIds[*it2]; + READWRITE(nIndex); + } + } + } else { + int nUBuckets = 0; + READWRITE(nUBuckets); + am->nIdCount = 0; + am->mapInfo.clear(); + am->mapAddr.clear(); + am->vRandom.clear(); + am->vvTried = std::vector<std::vector<int> >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector<int>(0)); + am->vvNew = std::vector<std::set<int> >(ADDRMAN_NEW_BUCKET_COUNT, std::set<int>()); + for (int n = 0; n < am->nNew; n++) + { + CAddrInfo &info = am->mapInfo[n]; + READWRITE(info); + am->mapAddr[info] = n; + info.nRandomPos = vRandom.size(); + am->vRandom.push_back(n); + if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) + { + am->vvNew[info.GetNewBucket(am->nKey)].insert(n); + info.nRefCount++; + } + } + am->nIdCount = am->nNew; + int nLost = 0; + for (int n = 0; n < am->nTried; n++) + { + CAddrInfo info; + READWRITE(info); + std::vector<int> &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + info.nRandomPos = vRandom.size(); + info.fInTried = true; + am->vRandom.push_back(am->nIdCount); + am->mapInfo[am->nIdCount] = info; + am->mapAddr[info] = am->nIdCount; + vTried.push_back(am->nIdCount); + am->nIdCount++; + } else { + nLost++; + } + } + am->nTried -= nLost; + for (int b = 0; b < nUBuckets; b++) + { + std::set<int> &vNew = am->vvNew[b]; + int nSize = 0; + READWRITE(nSize); + for (int n = 0; n < nSize; n++) + { + int nIndex = 0; + READWRITE(nIndex); + CAddrInfo &info = am->mapInfo[nIndex]; + if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + { + info.nRefCount++; + vNew.insert(nIndex); + } + } + } + } + } + });) + + CAddrMan() : vRandom(0), vvTried(ADDRMAN_TRIED_BUCKET_COUNT, std::vector<int>(0)), vvNew(ADDRMAN_NEW_BUCKET_COUNT, std::set<int>()) + { + nKey.resize(32); + RAND_bytes(&nKey[0], 32); + + nIdCount = 0; + nTried = 0; + nNew = 0; + } + + // Return the number of (unique) addresses in all tables. + int size() + { + return vRandom.size(); + } + + // Consistency check + void Check() + { +#ifdef DEBUG_ADDRMAN + CRITICAL_BLOCK(cs) + { + int err; + if ((err=Check_())) + printf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); + } +#endif + } + + // Add a single address. + bool Add(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty = 0) + { + bool fRet = false; + CRITICAL_BLOCK(cs) + { + Check(); + fRet |= Add_(addr, source, nTimePenalty); + Check(); + } + if (fRet) + printf("Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew); + return fRet; + } + + // Add multiple addresses. + bool Add(const std::vector<CAddress> &vAddr, const CNetAddr& source, int64 nTimePenalty = 0) + { + int nAdd = 0; + CRITICAL_BLOCK(cs) + { + Check(); + for (std::vector<CAddress>::const_iterator it = vAddr.begin(); it != vAddr.end(); it++) + nAdd += Add_(*it, source, nTimePenalty) ? 1 : 0; + Check(); + } + if (nAdd) + printf("Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew); + return nAdd > 0; + } + + // Mark an entry as accessible. + void Good(const CService &addr, int64 nTime = GetAdjustedTime()) + { + CRITICAL_BLOCK(cs) + { + Check(); + Good_(addr, nTime); + Check(); + } + } + + // Mark an entry as connection attempted to. + void Attempt(const CService &addr, int64 nTime = GetAdjustedTime()) + { + CRITICAL_BLOCK(cs) + { + Check(); + Attempt_(addr, nTime); + Check(); + } + } + + // Choose an address to connect to. + // nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). + CAddress Select(int nUnkBias = 50) + { + CAddress addrRet; + CRITICAL_BLOCK(cs) + { + Check(); + addrRet = Select_(nUnkBias); + Check(); + } + return addrRet; + } + + // Return a bunch of addresses, selected at random. + std::vector<CAddress> GetAddr() + { + Check(); + std::vector<CAddress> vAddr; + CRITICAL_BLOCK(cs) + GetAddr_(vAddr); + Check(); + return vAddr; + } + + // Mark an entry as currently-connected-to. + void Connected(const CService &addr, int64 nTime = GetAdjustedTime()) + { + CRITICAL_BLOCK(cs) + { + Check(); + Connected_(addr, nTime); + Check(); + } + } +}; + +#endif diff --git a/src/allocators.h b/src/allocators.h new file mode 100644 index 0000000000..85d9cfbbb8 --- /dev/null +++ b/src/allocators.h @@ -0,0 +1,119 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_ALLOCATORS_H +#define BITCOIN_ALLOCATORS_H + +#include <string> + +#ifdef WIN32 +#define _WIN32_WINNT 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include <windows.h> +// This is used to attempt to keep keying material out of swap +// Note that VirtualLock does not provide this as a guarantee on Windows, +// but, in practice, memory that has been VirtualLock'd almost never gets written to +// the pagefile except in rare circumstances where memory is extremely low. +#define mlock(p, n) VirtualLock((p), (n)); +#define munlock(p, n) VirtualUnlock((p), (n)); +#else +#include <sys/mman.h> +#include <limits.h> +/* This comes from limits.h if it's not defined there set a sane default */ +#ifndef PAGESIZE +#include <unistd.h> +#define PAGESIZE sysconf(_SC_PAGESIZE) +#endif +#define mlock(a,b) \ + mlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ + (((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) +#define munlock(a,b) \ + munlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ + (((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) +#endif + +// +// Allocator that locks its contents from being paged +// out of memory and clears its contents before deletion. +// +template<typename T> +struct secure_allocator : public std::allocator<T> +{ + // MSVC8 default copy constructor is broken + typedef std::allocator<T> base; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::value_type value_type; + secure_allocator() throw() {} + secure_allocator(const secure_allocator& a) throw() : base(a) {} + template <typename U> + secure_allocator(const secure_allocator<U>& a) throw() : base(a) {} + ~secure_allocator() throw() {} + template<typename _Other> struct rebind + { typedef secure_allocator<_Other> other; }; + + T* allocate(std::size_t n, const void *hint = 0) + { + T *p; + p = std::allocator<T>::allocate(n, hint); + if (p != NULL) + mlock(p, sizeof(T) * n); + return p; + } + + void deallocate(T* p, std::size_t n) + { + if (p != NULL) + { + memset(p, 0, sizeof(T) * n); + munlock(p, sizeof(T) * n); + } + std::allocator<T>::deallocate(p, n); + } +}; + + +// +// Allocator that clears its contents before deletion. +// +template<typename T> +struct zero_after_free_allocator : public std::allocator<T> +{ + // MSVC8 default copy constructor is broken + typedef std::allocator<T> base; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::value_type value_type; + zero_after_free_allocator() throw() {} + zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) {} + template <typename U> + zero_after_free_allocator(const zero_after_free_allocator<U>& a) throw() : base(a) {} + ~zero_after_free_allocator() throw() {} + template<typename _Other> struct rebind + { typedef zero_after_free_allocator<_Other> other; }; + + void deallocate(T* p, std::size_t n) + { + if (p != NULL) + memset(p, 0, sizeof(T) * n); + std::allocator<T>::deallocate(p, n); + } +}; + +// This is exactly like std::string, but with a custom allocator. +// (secure_allocator<> is defined in serialize.h) +typedef std::basic_string<char, std::char_traits<char>, secure_allocator<char> > SecureString; + +#endif diff --git a/src/base58.h b/src/base58.h index cace423d6e..755e34c418 100644 --- a/src/base58.h +++ b/src/base58.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin Developers +// Copyright (c) 2009-2012 The Bitcoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -18,6 +18,7 @@ #include <string> #include <vector> #include "bignum.h" +#include "key.h" static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; @@ -168,7 +169,7 @@ inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char> -// Base class for all base58-encoded data +/** Base class for all base58-encoded data */ class CBase58Data { protected: @@ -251,21 +252,38 @@ public: bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; } }; -// base58-encoded bitcoin addresses -// Addresses have version 0 or 111 (testnet) -// The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key +/** base58-encoded bitcoin addresses. + * Public-key-hash-addresses have version 0 (or 111 testnet). + * The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key. + * Script-hash-addresses have version 5 (or 196 testnet). + * The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script. + */ class CBitcoinAddress : public CBase58Data { public: + enum + { + PUBKEY_ADDRESS = 0, + SCRIPT_ADDRESS = 5, + PUBKEY_ADDRESS_TEST = 111, + SCRIPT_ADDRESS_TEST = 196, + }; + bool SetHash160(const uint160& hash160) { - SetData(fTestNet ? 111 : 0, &hash160, 20); + SetData(fTestNet ? PUBKEY_ADDRESS_TEST : PUBKEY_ADDRESS, &hash160, 20); return true; } - bool SetPubKey(const std::vector<unsigned char>& vchPubKey) + void SetPubKey(const std::vector<unsigned char>& vchPubKey) + { + SetHash160(Hash160(vchPubKey)); + } + + bool SetScriptHash160(const uint160& hash160) { - return SetHash160(Hash160(vchPubKey)); + SetData(fTestNet ? SCRIPT_ADDRESS_TEST : SCRIPT_ADDRESS, &hash160, 20); + return true; } bool IsValid() const @@ -274,10 +292,21 @@ public: bool fExpectTestNet = false; switch(nVersion) { - case 0: + case PUBKEY_ADDRESS: + nExpectedSize = 20; // Hash of public key + fExpectTestNet = false; + break; + case SCRIPT_ADDRESS: + nExpectedSize = 20; // Hash of CScript + fExpectTestNet = false; break; - case 111: + case PUBKEY_ADDRESS_TEST: + nExpectedSize = 20; + fExpectTestNet = true; + break; + case SCRIPT_ADDRESS_TEST: + nExpectedSize = 20; fExpectTestNet = true; break; @@ -286,6 +315,14 @@ public: } return fExpectTestNet == fTestNet && vchData.size() == nExpectedSize; } + bool IsScript() const + { + if (!IsValid()) + return false; + if (fTestNet) + return nVersion == SCRIPT_ADDRESS_TEST; + return nVersion == SCRIPT_ADDRESS; + } CBitcoinAddress() { @@ -320,4 +357,53 @@ public: } }; +/** A base58-encoded secret key */ +class CBitcoinSecret : public CBase58Data +{ +public: + void SetSecret(const CSecret& vchSecret, bool fCompressed) + { + assert(vchSecret.size() == 32); + SetData(fTestNet ? 239 : 128, &vchSecret[0], vchSecret.size()); + if (fCompressed) + vchData.push_back(1); + } + + CSecret GetSecret(bool &fCompressedOut) + { + CSecret vchSecret; + vchSecret.resize(32); + memcpy(&vchSecret[0], &vchData[0], 32); + fCompressedOut = vchData.size() == 33; + return vchSecret; + } + + bool IsValid() const + { + bool fExpectTestNet = false; + switch(nVersion) + { + case 128: + break; + + case 239: + fExpectTestNet = true; + break; + + default: + return false; + } + return fExpectTestNet == fTestNet && (vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1)); + } + + CBitcoinSecret(const CSecret& vchSecret, bool fCompressed) + { + SetSecret(vchSecret, fCompressed); + } + + CBitcoinSecret() + { + } +}; + #endif diff --git a/src/bignum.h b/src/bignum.h index 1a2406b935..95e21977e7 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_BIGNUM_H @@ -11,6 +11,7 @@ #include "util.h" +/** Errors thrown by the bignum class */ class bignum_error : public std::runtime_error { public: @@ -18,7 +19,7 @@ public: }; - +/** RAII encapsulated BN_CTX (OpenSSL bignum context) */ class CAutoBN_CTX { protected: @@ -46,7 +47,7 @@ public: }; - +/** C++ wrapper for BIGNUM (OpenSSL bignum) */ class CBigNum : public BIGNUM { public: @@ -115,9 +116,9 @@ public: { unsigned long n = BN_get_word(this); if (!BN_is_negative(this)) - return (n > INT_MAX ? INT_MAX : n); + return (n > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() : n); else - return (n > INT_MAX ? INT_MIN : -(int)n); + return (n > std::numeric_limits<int>::max() ? std::numeric_limits<int>::min() : -(int)n); } void setint64(int64 n) @@ -243,7 +244,7 @@ public: std::vector<unsigned char> getvch() const { unsigned int nSize = BN_bn2mpi(this, NULL); - if (nSize < 4) + if (nSize <= 4) return std::vector<unsigned char>(); std::vector<unsigned char> vch(nSize); BN_bn2mpi(this, &vch[0]); @@ -338,19 +339,19 @@ public: return ToString(16); } - unsigned int GetSerializeSize(int nType=0, int nVersion=VERSION) const + unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const { return ::GetSerializeSize(getvch(), nType, nVersion); } template<typename Stream> - void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const + void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const { ::Serialize(s, getvch(), nType, nVersion); } template<typename Stream> - void Unserialize(Stream& s, int nType=0, int nVersion=VERSION) + void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) { std::vector<unsigned char> vch; ::Unserialize(s, vch, nType, nVersion); diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 31ef725d79..8cd4750389 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -9,15 +9,16 @@ #include "init.h" #undef printf #include <boost/asio.hpp> +#include <boost/filesystem.hpp> #include <boost/iostreams/concepts.hpp> #include <boost/iostreams/stream.hpp> #include <boost/algorithm/string.hpp> -#ifdef USE_SSL +#include <boost/lexical_cast.hpp> #include <boost/asio/ssl.hpp> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream; -#endif + #include "json/json_spirit_reader_template.h" #include "json/json_spirit_writer_template.h" #include "json/json_spirit_utils.h" @@ -36,9 +37,13 @@ void ThreadRPCServer2(void* parg); typedef Value(*rpcfn_type)(const Array& params, bool fHelp); extern map<string, rpcfn_type> mapCallTable; +static std::string strRPCUserColonPass; + static int64 nWalletUnlockTime; static CCriticalSection cs_nWalletUnlockTime; +extern Value dumpprivkey(const Array& params, bool fHelp); +extern Value importprivkey(const Array& params, bool fHelp); Object JSONRPCError(int code, const string& message) { @@ -48,22 +53,35 @@ Object JSONRPCError(int code, const string& message) return error; } - -void PrintConsole(const std::string &format, ...) +double GetDifficulty(const CBlockIndex* blockindex = NULL) { - char buffer[50000]; - int limit = sizeof(buffer); - va_list arg_ptr; - va_start(arg_ptr, format); - int ret = _vsnprintf(buffer, limit, format.c_str(), arg_ptr); - va_end(arg_ptr); - if (ret < 0 || ret >= limit) + // Floating point number that is a multiple of the minimum difficulty, + // minimum difficulty = 1.0. + if (blockindex == NULL) + { + if (pindexBest == NULL) + return 1.0; + else + blockindex = pindexBest; + } + + int nShift = (blockindex->nBits >> 24) & 0xff; + + double dDiff = + (double)0x0000ffff / (double)(blockindex->nBits & 0x00ffffff); + + while (nShift < 29) + { + dDiff *= 256.0; + nShift++; + } + while (nShift > 29) { - ret = limit - 1; - buffer[limit-1] = 0; + dDiff /= 256.0; + nShift--; } - printf("%s", buffer); - fprintf(stdout, "%s", buffer); + + return dDiff; } @@ -83,9 +101,26 @@ Value ValueFromAmount(int64 amount) return (double)amount / (double)COIN; } +std::string +HexBits(unsigned int nBits) +{ + union { + int32_t nBits; + char cBits[4]; + } uBits; + uBits.nBits = htonl((int32_t)nBits); + return HexStr(BEGIN(uBits.cBits), END(uBits.cBits)); +} + void WalletTxToJSON(const CWalletTx& wtx, Object& entry) { - entry.push_back(Pair("confirmations", wtx.GetDepthInMainChain())); + int confirms = wtx.GetDepthInMainChain(); + entry.push_back(Pair("confirmations", confirms)); + if (confirms) + { + entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); + entry.push_back(Pair("blockindex", wtx.nIndex)); + } entry.push_back(Pair("txid", wtx.GetHash().GetHex())); entry.push_back(Pair("time", (boost::int64_t)wtx.GetTxTime())); BOOST_FOREACH(const PAIRTYPE(string,string)& item, wtx.mapValue) @@ -100,6 +135,30 @@ string AccountFromValue(const Value& value) return strAccount; } +Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) +{ + Object result; + result.push_back(Pair("hash", block.GetHash().GetHex())); + result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK))); + result.push_back(Pair("height", blockindex->nHeight)); + result.push_back(Pair("version", block.nVersion)); + result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); + result.push_back(Pair("time", (boost::int64_t)block.GetBlockTime())); + result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); + result.push_back(Pair("bits", HexBits(block.nBits))); + result.push_back(Pair("difficulty", GetDifficulty(blockindex))); + Array txhashes; + BOOST_FOREACH (const CTransaction&tx, block.vtx) + txhashes.push_back(tx.GetHash().GetHex()); + result.push_back(Pair("tx", txhashes)); + + if (blockindex->pprev) + result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); + if (blockindex->pnext) + result.push_back(Pair("nextblockhash", blockindex->pnext->GetBlockHash().GetHex())); + return result; +} + /// @@ -126,6 +185,7 @@ Value help(const Array& params, bool fHelp) // We already filter duplicates, but these deprecated screw up the sort order if (strMethod == "getamountreceived" || strMethod == "getallreceived" || + strMethod == "getblocknumber" || // deprecated (strMethod.find("label") != string::npos)) continue; if (strCommand != "" && strMethod != strCommand) @@ -160,13 +220,9 @@ Value stop(const Array& params, bool fHelp) throw runtime_error( "stop\n" "Stop bitcoin server."); -#ifndef QT_GUI // Shutdown will take long enough that the response should get back - CreateThread(Shutdown, NULL); + QueueShutdown(); return "bitcoin server stopping"; -#else - throw runtime_error("NYI: cannot shut down GUI with RPC command"); -#endif } @@ -181,12 +237,13 @@ Value getblockcount(const Array& params, bool fHelp) } +// deprecated Value getblocknumber(const Array& params, bool fHelp) { if (fHelp || params.size() != 0) throw runtime_error( "getblocknumber\n" - "Returns the block number of the latest block in the longest block chain."); + "Deprecated. Use getblockcount."); return nBestHeight; } @@ -203,32 +260,6 @@ Value getconnectioncount(const Array& params, bool fHelp) } -double GetDifficulty() -{ - // Floating point number that is a multiple of the minimum difficulty, - // minimum difficulty = 1.0. - - if (pindexBest == NULL) - return 1.0; - int nShift = (pindexBest->nBits >> 24) & 0xff; - - double dDiff = - (double)0x0000ffff / (double)(pindexBest->nBits & 0x00ffffff); - - while (nShift < 29) - { - dDiff *= 256.0; - nShift++; - } - while (nShift > 29) - { - dDiff /= 256.0; - nShift--; - } - - return dDiff; -} - Value getdifficulty(const Array& params, bool fHelp) { if (fHelp || params.size() != 0) @@ -247,7 +278,7 @@ Value getgenerate(const Array& params, bool fHelp) "getgenerate\n" "Returns true or false."); - return (bool)fGenerateBitcoins; + return GetBoolArg("-gen"); } @@ -266,13 +297,11 @@ Value setgenerate(const Array& params, bool fHelp) if (params.size() > 1) { int nGenProcLimit = params[1].get_int(); - fLimitProcessors = (nGenProcLimit != -1); - WriteSetting("fLimitProcessors", fLimitProcessors); - if (nGenProcLimit != -1) - WriteSetting("nLimitProcessors", nLimitProcessors = nGenProcLimit); + mapArgs["-genproclimit"] = itostr(nGenProcLimit); if (nGenProcLimit == 0) fGenerate = false; } + mapArgs["-gen"] = (fGenerate ? "1" : "0"); GenerateBitcoins(fGenerate, pwalletMain); return Value::null; @@ -300,26 +329,47 @@ Value getinfo(const Array& params, bool fHelp) "Returns an object containing various state info."); Object obj; - obj.push_back(Pair("version", (int)VERSION)); + obj.push_back(Pair("version", (int)CLIENT_VERSION)); + obj.push_back(Pair("protocolversion",(int)PROTOCOL_VERSION)); + obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); obj.push_back(Pair("blocks", (int)nBestHeight)); obj.push_back(Pair("connections", (int)vNodes.size())); obj.push_back(Pair("proxy", (fUseProxy ? addrProxy.ToStringIPPort() : string()))); - obj.push_back(Pair("generate", (bool)fGenerateBitcoins)); - obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1))); obj.push_back(Pair("difficulty", (double)GetDifficulty())); - obj.push_back(Pair("hashespersec", gethashespersec(params, false))); obj.push_back(Pair("testnet", fTestNet)); obj.push_back(Pair("keypoololdest", (boost::int64_t)pwalletMain->GetOldestKeyPoolTime())); obj.push_back(Pair("keypoolsize", pwalletMain->GetKeyPoolSize())); obj.push_back(Pair("paytxfee", ValueFromAmount(nTransactionFee))); if (pwalletMain->IsCrypted()) - obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime)); + obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime / 1000)); obj.push_back(Pair("errors", GetWarnings("statusbar"))); return obj; } +Value getmininginfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getmininginfo\n" + "Returns an object containing mining-related information."); + + Object obj; + obj.push_back(Pair("blocks", (int)nBestHeight)); + obj.push_back(Pair("currentblocksize",(uint64_t)nLastBlockSize)); + obj.push_back(Pair("currentblocktx",(uint64_t)nLastBlockTx)); + obj.push_back(Pair("difficulty", (double)GetDifficulty())); + obj.push_back(Pair("errors", GetWarnings("statusbar"))); + obj.push_back(Pair("generate", GetBoolArg("-gen"))); + obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1))); + obj.push_back(Pair("hashespersec", gethashespersec(params, false))); + obj.push_back(Pair("pooledtx", (uint64_t)nPooledTx)); + obj.push_back(Pair("testnet", fTestNet)); + return obj; +} + + Value getnewaddress(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) @@ -528,8 +578,6 @@ Value sendtoaddress(const Array& params, bool fHelp) return wtx.GetHash().GetHex(); } -static const string strMessageMagic = "Bitcoin Signed Message:\n"; - Value signmessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 2) @@ -591,7 +639,7 @@ Value verifymessage(const Array& params, bool fHelp) if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig)) return false; - return (key.GetAddress() == addr); + return (CBitcoinAddress(key.GetPubKey()) == addr); } @@ -658,7 +706,7 @@ Value getreceivedbyaccount(const Array& params, bool fHelp) if (params.size() > 1) nMinDepth = params[1].get_int(); - // Get the set of pub keys that have the label + // Get the set of pub keys assigned to account string strAccount = AccountFromValue(params[0]); set<CBitcoinAddress> setAddress; GetAccountAddresses(strAccount, setAddress); @@ -674,7 +722,7 @@ Value getreceivedbyaccount(const Array& params, bool fHelp) BOOST_FOREACH(const CTxOut& txout, wtx.vout) { CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, pwalletMain, address) && setAddress.count(address)) + if (ExtractAddress(txout.scriptPubKey, address) && pwalletMain->HaveKey(address) && setAddress.count(address)) if (wtx.GetDepthInMainChain() >= nMinDepth) nAmount += txout.nValue; } @@ -927,6 +975,77 @@ Value sendmany(const Array& params, bool fHelp) return wtx.GetHash().GetHex(); } +Value addmultisigaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 3) + { + string msg = "addmultisigaddress <nrequired> <'[\"key\",\"key\"]'> [account]\n" + "Add a nrequired-to-sign multisignature address to the wallet\"\n" + "each key is a bitcoin address or hex-encoded public key\n" + "If [account] is specified, assign address to [account]."; + throw runtime_error(msg); + } + + int nRequired = params[0].get_int(); + const Array& keys = params[1].get_array(); + string strAccount; + if (params.size() > 2) + strAccount = AccountFromValue(params[2]); + + // Gather public keys + if (nRequired < 1 || keys.size() < nRequired) + throw runtime_error( + strprintf("wrong number of keys" + "(got %d, need at least %d)", keys.size(), nRequired)); + std::vector<CKey> pubkeys; + pubkeys.resize(keys.size()); + for (int i = 0; i < keys.size(); i++) + { + const std::string& ks = keys[i].get_str(); + + // Case 1: bitcoin address and we have full public key: + CBitcoinAddress address(ks); + if (address.IsValid()) + { + if (address.IsScript()) + throw runtime_error( + strprintf("%s is a pay-to-script address",ks.c_str())); + std::vector<unsigned char> vchPubKey; + if (!pwalletMain->GetPubKey(address, vchPubKey)) + throw runtime_error( + strprintf("no full public key for address %s",ks.c_str())); + if (vchPubKey.empty() || !pubkeys[i].SetPubKey(vchPubKey)) + throw runtime_error(" Invalid public key: "+ks); + } + + // Case 2: hex public key + else if (IsHex(ks)) + { + vector<unsigned char> vchPubKey = ParseHex(ks); + if (vchPubKey.empty() || !pubkeys[i].SetPubKey(vchPubKey)) + throw runtime_error(" Invalid public key: "+ks); + } + else + { + throw runtime_error(" Invalid public key: "+ks); + } + } + + // Construct using pay-to-script-hash: + CScript inner; + inner.SetMultisig(nRequired, pubkeys); + + uint160 scriptHash = Hash160(inner); + CScript scriptPubKey; + scriptPubKey.SetPayToScriptHash(inner); + pwalletMain->AddCScript(inner); + CBitcoinAddress address; + address.SetScriptHash160(scriptHash); + + pwalletMain->SetAddressBookName(address, strAccount); + return address.ToString(); +} + struct tallyitem { @@ -935,7 +1054,7 @@ struct tallyitem tallyitem() { nAmount = 0; - nConf = INT_MAX; + nConf = std::numeric_limits<int>::max(); } }; @@ -956,6 +1075,7 @@ Value ListReceived(const Array& params, bool fByAccounts) for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; + if (wtx.IsCoinBase() || !wtx.IsFinal()) continue; @@ -966,7 +1086,7 @@ Value ListReceived(const Array& params, bool fByAccounts) BOOST_FOREACH(const CTxOut& txout, wtx.vout) { CBitcoinAddress address; - if (!ExtractAddress(txout.scriptPubKey, pwalletMain, address) || !address.IsValid()) + if (!ExtractAddress(txout.scriptPubKey, address) || !pwalletMain->HaveKey(address) || !address.IsValid()) continue; tallyitem& item = mapTally[address]; @@ -987,7 +1107,7 @@ Value ListReceived(const Array& params, bool fByAccounts) continue; int64 nAmount = 0; - int nConf = INT_MAX; + int nConf = std::numeric_limits<int>::max(); if (it != mapTally.end()) { nAmount = (*it).second.nAmount; @@ -1006,7 +1126,7 @@ Value ListReceived(const Array& params, bool fByAccounts) obj.push_back(Pair("address", address.ToString())); obj.push_back(Pair("account", strAccount)); obj.push_back(Pair("amount", ValueFromAmount(nAmount))); - obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf))); + obj.push_back(Pair("confirmations", (nConf == std::numeric_limits<int>::max() ? 0 : nConf))); ret.push_back(obj); } } @@ -1020,7 +1140,7 @@ Value ListReceived(const Array& params, bool fByAccounts) Object obj; obj.push_back(Pair("account", (*it).first)); obj.push_back(Pair("amount", ValueFromAmount(nAmount))); - obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf))); + obj.push_back(Pair("confirmations", (nConf == std::numeric_limits<int>::max() ? 0 : nConf))); ret.push_back(obj); } } @@ -1065,6 +1185,7 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe string strSentAccount; list<pair<CBitcoinAddress, int64> > listReceived; list<pair<CBitcoinAddress, int64> > listSent; + wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); bool fAllAccounts = (strAccount == string("*")); @@ -1312,7 +1433,7 @@ Value listsinceblock(const Array& params, bool fHelp) CBlockIndex *block; for (block = pindexBest; block && block->nHeight > target_height; - block = block->pprev); + block = block->pprev) { } lastblock = block ? block->GetBlockHash() : 0; } @@ -1403,37 +1524,43 @@ void ThreadTopUpKeyPool(void* parg) void ThreadCleanWalletPassphrase(void* parg) { - int64 nMyWakeTime = GetTime() + *((int*)parg); + int64 nMyWakeTime = GetTimeMillis() + *((int64*)parg) * 1000; + + ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); if (nWalletUnlockTime == 0) { - CRITICAL_BLOCK(cs_nWalletUnlockTime) + nWalletUnlockTime = nMyWakeTime; + + do { - nWalletUnlockTime = nMyWakeTime; - } + if (nWalletUnlockTime==0) + break; + int64 nToSleep = nWalletUnlockTime - GetTimeMillis(); + if (nToSleep <= 0) + break; - while (GetTime() < nWalletUnlockTime) - Sleep(GetTime() - nWalletUnlockTime); + LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); + Sleep(nToSleep); + ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); - CRITICAL_BLOCK(cs_nWalletUnlockTime) + } while(1); + + if (nWalletUnlockTime) { nWalletUnlockTime = 0; + pwalletMain->Lock(); } } else { - CRITICAL_BLOCK(cs_nWalletUnlockTime) - { - if (nWalletUnlockTime < nMyWakeTime) - nWalletUnlockTime = nMyWakeTime; - } - free(parg); - return; + if (nWalletUnlockTime < nMyWakeTime) + nWalletUnlockTime = nMyWakeTime; } - pwalletMain->Lock(); + LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); - delete (int*)parg; + delete (int64*)parg; } Value walletpassphrase(const Array& params, bool fHelp) @@ -1451,21 +1578,16 @@ Value walletpassphrase(const Array& params, bool fHelp) throw JSONRPCError(-17, "Error: Wallet is already unlocked."); // Note that the walletpassphrase is stored in params[0] which is not mlock()ed - string strWalletPass; + SecureString strWalletPass; strWalletPass.reserve(100); - mlock(&strWalletPass[0], strWalletPass.capacity()); - strWalletPass = params[0].get_str(); + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + strWalletPass = params[0].get_str().c_str(); if (strWalletPass.length() > 0) { if (!pwalletMain->Unlock(strWalletPass)) - { - fill(strWalletPass.begin(), strWalletPass.end(), '\0'); - munlock(&strWalletPass[0], strWalletPass.capacity()); throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect."); - } - fill(strWalletPass.begin(), strWalletPass.end(), '\0'); - munlock(&strWalletPass[0], strWalletPass.capacity()); } else throw runtime_error( @@ -1473,7 +1595,7 @@ Value walletpassphrase(const Array& params, bool fHelp) "Stores the wallet decryption key in memory for <timeout> seconds."); CreateThread(ThreadTopUpKeyPool, NULL); - int* pnSleepTime = new int(params[1].get_int()); + int64* pnSleepTime = new int64(params[1].get_int64()); CreateThread(ThreadCleanWalletPassphrase, pnSleepTime); return Value::null; @@ -1491,15 +1613,15 @@ Value walletpassphrasechange(const Array& params, bool fHelp) if (!pwalletMain->IsCrypted()) throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletpassphrasechange was called."); - string strOldWalletPass; + // TODO: get rid of these .c_str() calls by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + SecureString strOldWalletPass; strOldWalletPass.reserve(100); - mlock(&strOldWalletPass[0], strOldWalletPass.capacity()); - strOldWalletPass = params[0].get_str(); + strOldWalletPass = params[0].get_str().c_str(); - string strNewWalletPass; + SecureString strNewWalletPass; strNewWalletPass.reserve(100); - mlock(&strNewWalletPass[0], strNewWalletPass.capacity()); - strNewWalletPass = params[1].get_str(); + strNewWalletPass = params[1].get_str().c_str(); if (strOldWalletPass.length() < 1 || strNewWalletPass.length() < 1) throw runtime_error( @@ -1507,17 +1629,7 @@ Value walletpassphrasechange(const Array& params, bool fHelp) "Changes the wallet passphrase from <oldpassphrase> to <newpassphrase>."); if (!pwalletMain->ChangeWalletPassphrase(strOldWalletPass, strNewWalletPass)) - { - fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0'); - fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0'); - munlock(&strOldWalletPass[0], strOldWalletPass.capacity()); - munlock(&strNewWalletPass[0], strNewWalletPass.capacity()); throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect."); - } - fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0'); - fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0'); - munlock(&strOldWalletPass[0], strOldWalletPass.capacity()); - munlock(&strNewWalletPass[0], strNewWalletPass.capacity()); return Value::null; } @@ -1536,9 +1648,9 @@ Value walletlock(const Array& params, bool fHelp) if (!pwalletMain->IsCrypted()) throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletlock was called."); - pwalletMain->Lock(); CRITICAL_BLOCK(cs_nWalletUnlockTime) { + pwalletMain->Lock(); nWalletUnlockTime = 0; } @@ -1557,15 +1669,11 @@ Value encryptwallet(const Array& params, bool fHelp) if (pwalletMain->IsCrypted()) throw JSONRPCError(-15, "Error: running with an encrypted wallet, but encryptwallet was called."); -#ifdef QT_GUI - // shutting down via RPC while the GUI is running does not work (yet): - throw runtime_error("Not Yet Implemented: use GUI to encrypt wallet, not RPC command"); -#endif - - string strWalletPass; + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + SecureString strWalletPass; strWalletPass.reserve(100); - mlock(&strWalletPass[0], strWalletPass.capacity()); - strWalletPass = params[0].get_str(); + strWalletPass = params[0].get_str().c_str(); if (strWalletPass.length() < 1) throw runtime_error( @@ -1573,18 +1681,12 @@ Value encryptwallet(const Array& params, bool fHelp) "Encrypts the wallet with <passphrase>."); if (!pwalletMain->EncryptWallet(strWalletPass)) - { - fill(strWalletPass.begin(), strWalletPass.end(), '\0'); - munlock(&strWalletPass[0], strWalletPass.capacity()); throw JSONRPCError(-16, "Error: Failed to encrypt the wallet."); - } - fill(strWalletPass.begin(), strWalletPass.end(), '\0'); - munlock(&strWalletPass[0], strWalletPass.capacity()); // BDB seems to have a bad habit of writing old data into // slack space in .dat files; that is bad if the old data is // unencrypted private keys. So: - CreateThread(Shutdown, NULL); + QueueShutdown(); return "wallet encrypted; bitcoin server stopping, restart to run with encrypted wallet"; } @@ -1607,14 +1709,42 @@ Value validateaddress(const Array& params, bool fHelp) // version of the address: string currentAddress = address.ToString(); ret.push_back(Pair("address", currentAddress)); - ret.push_back(Pair("ismine", (pwalletMain->HaveKey(address) > 0))); + if (pwalletMain->HaveKey(address)) + { + ret.push_back(Pair("ismine", true)); + std::vector<unsigned char> vchPubKey; + pwalletMain->GetPubKey(address, vchPubKey); + ret.push_back(Pair("pubkey", HexStr(vchPubKey))); + CKey key; + key.SetPubKey(vchPubKey); + ret.push_back(Pair("iscompressed", key.IsCompressed())); + } + else if (pwalletMain->HaveCScript(address.GetHash160())) + { + ret.push_back(Pair("isscript", true)); + CScript subscript; + pwalletMain->GetCScript(address.GetHash160(), subscript); + ret.push_back(Pair("ismine", ::IsMine(*pwalletMain, subscript))); + std::vector<CBitcoinAddress> addresses; + txnouttype whichType; + int nRequired; + ExtractAddresses(subscript, whichType, addresses, nRequired); + ret.push_back(Pair("script", GetTxnOutputType(whichType))); + Array a; + BOOST_FOREACH(const CBitcoinAddress& addr, addresses) + a.push_back(addr.ToString()); + ret.push_back(Pair("addresses", a)); + if (whichType == TX_MULTISIG) + ret.push_back(Pair("sigsrequired", nRequired)); + } + else + ret.push_back(Pair("ismine", false)); if (pwalletMain->mapAddressBook.count(address)) ret.push_back(Pair("account", pwalletMain->mapAddressBook[address])); } return ret; } - Value getwork(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) @@ -1668,7 +1798,7 @@ Value getwork(const Array& params, bool fHelp) } // Update nTime - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + pblock->UpdateTime(pindexPrev); pblock->nNonce = 0; // Update nExtraNonce @@ -1730,7 +1860,10 @@ Value getmemorypool(const Array& params, bool fHelp) " \"previousblockhash\" : hash of current highest block\n" " \"transactions\" : contents of non-coinbase transactions that should be included in the next block\n" " \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n" + " \"coinbaseflags\" : data that should be included in coinbase so support for new features can be judged\n" " \"time\" : timestamp appropriate for next block\n" + " \"mintime\" : minimum timestamp appropriate for next block\n" + " \"curtime\" : current timestamp\n" " \"bits\" : compressed target of next block\n" "If [data] is specified, tries to solve the block and returns true if it was successful."); @@ -1765,7 +1898,7 @@ Value getmemorypool(const Array& params, bool fHelp) } // Update nTime - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + pblock->UpdateTime(pindexPrev); pblock->nNonce = 0; Array transactions; @@ -1784,14 +1917,11 @@ Value getmemorypool(const Array& params, bool fHelp) result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex())); result.push_back(Pair("transactions", transactions)); result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); + result.push_back(Pair("coinbaseflags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end()))); result.push_back(Pair("time", (int64_t)pblock->nTime)); - - union { - int32_t nBits; - char cBits[4]; - } uBits; - uBits.nBits = htonl((int32_t)pblock->nBits); - result.push_back(Pair("bits", HexStr(BEGIN(uBits.cBits), END(uBits.cBits)))); + result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1)); + result.push_back(Pair("curtime", (int64_t)GetAdjustedTime())); + result.push_back(Pair("bits", HexBits(pblock->nBits))); return result; } @@ -1806,6 +1936,44 @@ Value getmemorypool(const Array& params, bool fHelp) } } +Value getblockhash(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "getblockhash <index>\n" + "Returns hash of block in best-block-chain at <index>."); + + int nHeight = params[0].get_int(); + if (nHeight < 0 || nHeight > nBestHeight) + throw runtime_error("Block number out of range."); + + CBlock block; + CBlockIndex* pblockindex = mapBlockIndex[hashBestChain]; + while (pblockindex->nHeight > nHeight) + pblockindex = pblockindex->pprev; + return pblockindex->phashBlock->GetHex(); +} + +Value getblock(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "getblock <hash>\n" + "Returns details of a block with given block-hash."); + + std::string strHash = params[0].get_str(); + uint256 hash(strHash); + + if (mapBlockIndex.count(hash) == 0) + throw JSONRPCError(-5, "Block not found"); + + CBlock block; + CBlockIndex* pblockindex = mapBlockIndex[hash]; + block.ReadFromDisk(pblockindex, true); + + return blockToJSON(block, pblockindex); +} + @@ -1832,6 +2000,7 @@ pair<string, rpcfn_type> pCallTable[] = make_pair("setgenerate", &setgenerate), make_pair("gethashespersec", &gethashespersec), make_pair("getinfo", &getinfo), + make_pair("getmininginfo", &getmininginfo), make_pair("getnewaddress", &getnewaddress), make_pair("getaccountaddress", &getaccountaddress), make_pair("setaccount", &setaccount), @@ -1853,15 +2022,20 @@ pair<string, rpcfn_type> pCallTable[] = make_pair("move", &movecmd), make_pair("sendfrom", &sendfrom), make_pair("sendmany", &sendmany), + make_pair("addmultisigaddress", &addmultisigaddress), + make_pair("getblock", &getblock), + make_pair("getblockhash", &getblockhash), make_pair("gettransaction", &gettransaction), make_pair("listtransactions", &listtransactions), - make_pair("signmessage", &signmessage), - make_pair("verifymessage", &verifymessage), + make_pair("signmessage", &signmessage), + make_pair("verifymessage", &verifymessage), make_pair("getwork", &getwork), make_pair("listaccounts", &listaccounts), make_pair("settxfee", &settxfee), make_pair("getmemorypool", &getmemorypool), - make_pair("listsinceblock", &listsinceblock), + make_pair("listsinceblock", &listsinceblock), + make_pair("dumpprivkey", &dumpprivkey), + make_pair("importprivkey", &importprivkey) }; map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0])); @@ -1870,13 +2044,14 @@ string pAllowInSafeMode[] = "help", "stop", "getblockcount", - "getblocknumber", + "getblocknumber", // deprecated "getconnectioncount", "getdifficulty", "getgenerate", "setgenerate", "gethashespersec", "getinfo", + "getmininginfo", "getnewaddress", "getaccountaddress", "getaccount", @@ -2041,12 +2216,7 @@ bool HTTPAuthorized(map<string, string>& mapHeaders) return false; string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); string strUserPass = DecodeBase64(strUserPass64); - string::size_type nColon = strUserPass.find(":"); - if (nColon == string::npos) - return false; - string strUser = strUserPass.substr(0, nColon); - string strPassword = strUserPass.substr(nColon+1); - return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]); + return strUserPass == strRPCUserColonPass; } // @@ -2102,7 +2272,6 @@ bool ClientAllowed(const string& strAddress) return false; } -#ifdef USE_SSL // // IOStream device that speaks SSL but can also speak non-SSL // @@ -2154,22 +2323,21 @@ private: bool fUseSSL; SSLStream& stream; }; -#endif void ThreadRPCServer(void* parg) { IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer(parg)); try { - vnThreadsRunning[4]++; + vnThreadsRunning[THREAD_RPCSERVER]++; ThreadRPCServer2(parg); - vnThreadsRunning[4]--; + vnThreadsRunning[THREAD_RPCSERVER]--; } catch (std::exception& e) { - vnThreadsRunning[4]--; + vnThreadsRunning[THREAD_RPCSERVER]--; PrintException(&e, "ThreadRPCServer()"); } catch (...) { - vnThreadsRunning[4]--; + vnThreadsRunning[THREAD_RPCSERVER]--; PrintException(NULL, "ThreadRPCServer()"); } printf("ThreadRPCServer exiting\n"); @@ -2179,21 +2347,28 @@ void ThreadRPCServer2(void* parg) { printf("ThreadRPCServer started\n"); - if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") + strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]; + if (mapArgs["-rpcpassword"] == "") { + unsigned char rand_pwd[32]; + RAND_bytes(rand_pwd, 32); string strWhatAmI = "To use bitcoind"; if (mapArgs.count("-server")) strWhatAmI = strprintf(_("To use the %s option"), "\"-server\""); else if (mapArgs.count("-daemon")) strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\""); - PrintConsole( - _("Error: %s, you must set rpcpassword=<password>\nin the configuration file: %s\n" + ThreadSafeMessageBox(strprintf( + _("%s, you must set a rpcpassword in the configuration file:\n %s\n" + "It is recommended you use the following random password:\n" + "rpcuser=bitcoinrpc\n" + "rpcpassword=%s\n" + "(you do not need to remember this password)\n" "If the file does not exist, create it with owner-readable-only file permissions.\n"), strWhatAmI.c_str(), - GetConfigFile().c_str()); -#ifndef QT_GUI - CreateThread(Shutdown, NULL); -#endif + GetConfigFile().c_str(), + EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()), + _("Error"), wxOK | wxMODAL); + QueueShutdown(); return; } @@ -2206,7 +2381,6 @@ void ThreadRPCServer2(void* parg) acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); -#ifdef USE_SSL ssl::context context(io_service, ssl::context::sslv23); if (fUseSSL) { @@ -2224,29 +2398,17 @@ void ThreadRPCServer2(void* parg) "TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH"); SSL_CTX_set_cipher_list(context.impl(), ciphers.c_str()); } -#else - if (fUseSSL) - throw runtime_error("-rpcssl=1, but bitcoin compiled without full openssl libraries."); -#endif loop { // Accept connection -#ifdef USE_SSL SSLStream sslStream(io_service, context); SSLIOStreamDevice d(sslStream, fUseSSL); iostreams::stream<SSLIOStreamDevice> stream(d); -#else - ip::tcp::iostream stream; -#endif ip::tcp::endpoint peer; - vnThreadsRunning[4]--; -#ifdef USE_SSL + vnThreadsRunning[THREAD_RPCSERVER]--; acceptor.accept(sslStream.lowest_layer(), peer); -#else - acceptor.accept(*stream.rdbuf(), peer); -#endif vnThreadsRunning[4]++; if (fShutdown) return; @@ -2279,12 +2441,14 @@ void ThreadRPCServer2(void* parg) } if (!HTTPAuthorized(mapHeaders)) { - // Deter brute-forcing short passwords - if (mapArgs["-rpcpassword"].size() < 15) - Sleep(50); + printf("ThreadRPCServer incorrect password attempt from %s\n",peer.address().to_string().c_str()); + /* Deter brute-forcing short passwords. + If this results in a DOS the user really + shouldn't have their RPC port exposed.*/ + if (mapArgs["-rpcpassword"].size() < 20) + Sleep(250); stream << HTTPReply(401, "") << std::flush; - printf("ThreadRPCServer incorrect password attempt\n"); continue; } @@ -2371,7 +2535,6 @@ Object CallRPC(const string& strMethod, const Array& params) // Connect to localhost bool fUseSSL = GetBoolArg("-rpcssl"); -#ifdef USE_SSL asio::io_service io_service; ssl::context context(io_service, ssl::context::sslv23); context.set_options(ssl::context::no_sslv2); @@ -2380,15 +2543,6 @@ Object CallRPC(const string& strMethod, const Array& params) iostreams::stream<SSLIOStreamDevice> stream(d); if (!d.connect(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", "8332"))) throw runtime_error("couldn't connect to server"); -#else - if (fUseSSL) - throw runtime_error("-rpcssl=1, but bitcoin compiled without full openssl libraries."); - - ip::tcp::iostream stream(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", "8332")); - if (stream.fail()) - throw runtime_error("couldn't connect to server"); -#endif - // HTTP basic authentication string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]); @@ -2480,6 +2634,7 @@ int CommandLineRPC(int argc, char *argv[]) if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo<boost::int64_t>(params[0]); if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo<bool>(params[1]); if (strMethod == "getbalance" && n > 1) ConvertTo<boost::int64_t>(params[1]); + if (strMethod == "getblockhash" && n > 0) ConvertTo<boost::int64_t>(params[0]); if (strMethod == "move" && n > 2) ConvertTo<double>(params[2]); if (strMethod == "move" && n > 3) ConvertTo<boost::int64_t>(params[3]); if (strMethod == "sendfrom" && n > 2) ConvertTo<double>(params[2]); @@ -2498,6 +2653,15 @@ int CommandLineRPC(int argc, char *argv[]) params[1] = v.get_obj(); } if (strMethod == "sendmany" && n > 2) ConvertTo<boost::int64_t>(params[2]); + if (strMethod == "addmultisigaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]); + if (strMethod == "addmultisigaddress" && n > 1) + { + string s = params[1].get_str(); + Value v; + if (!read_string(s, v) || v.type() != array_type) + throw runtime_error("type mismatch "+s); + params[1] = v.get_array(); + } // Execute Object reply = CallRPC(strMethod, params); diff --git a/src/bitcoinrpc.h b/src/bitcoinrpc.h index f267400797..a9cf3296f7 100644 --- a/src/bitcoinrpc.h +++ b/src/bitcoinrpc.h @@ -1,5 +1,5 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp new file mode 100644 index 0000000000..f5ce053870 --- /dev/null +++ b/src/checkpoints.cpp @@ -0,0 +1,65 @@ +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include <boost/assign/list_of.hpp> // for 'map_list_of()' +#include <boost/foreach.hpp> + +#include "headers.h" +#include "checkpoints.h" + +namespace Checkpoints +{ + typedef std::map<int, uint256> MapCheckpoints; + + // + // What makes a good checkpoint block? + // + Is surrounded by blocks with reasonable timestamps + // (no blocks before with a timestamp after, none after with + // timestamp before) + // + Contains no strange transactions + // + static MapCheckpoints mapCheckpoints = + boost::assign::map_list_of + ( 11111, uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")) + ( 33333, uint256("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")) + ( 68555, uint256("0x00000000001e1b4903550a0b96e9a9405c8a95f387162e4944e8d9fbe501cd6a")) + ( 70567, uint256("0x00000000006a49b14bcf27462068f1264c961f11fa2e0eddd2be0791e1d4124a")) + ( 74000, uint256("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")) + (105000, uint256("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")) + (118000, uint256("0x000000000000774a7f8a7a12dc906ddb9e17e75d684f15e00f8767f9e8f36553")) + (134444, uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")) + (140700, uint256("0x000000000000033b512028abb90e1626d8b346fd0ed598ac0a3c371138dce2bd")) + (168000, uint256("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")) + ; + + bool CheckBlock(int nHeight, const uint256& hash) + { + if (fTestNet) return true; // Testnet has no checkpoints + + MapCheckpoints::const_iterator i = mapCheckpoints.find(nHeight); + if (i == mapCheckpoints.end()) return true; + return hash == i->second; + } + + int GetTotalBlocksEstimate() + { + if (fTestNet) return 0; + + return mapCheckpoints.rbegin()->first; + } + + CBlockIndex* GetLastCheckpoint(const std::map<uint256, CBlockIndex*>& mapBlockIndex) + { + if (fTestNet) return NULL; + + BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, mapCheckpoints) + { + const uint256& hash = i.second; + std::map<uint256, CBlockIndex*>::const_iterator t = mapBlockIndex.find(hash); + if (t != mapBlockIndex.end()) + return t->second; + } + return NULL; + } +} diff --git a/src/checkpoints.h b/src/checkpoints.h new file mode 100644 index 0000000000..38902ac0a1 --- /dev/null +++ b/src/checkpoints.h @@ -0,0 +1,28 @@ +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_CHECKPOINT_H +#define BITCOIN_CHECKPOINT_H + +#include <map> +#include "util.h" + +class uint256; +class CBlockIndex; + +/** Block-chain checkpoints are compiled-in sanity checks. + * They are updated every release or three. + */ +namespace Checkpoints +{ + // Returns true if block passes checkpoint checks + bool CheckBlock(int nHeight, const uint256& hash); + + // Return conservative estimate of total number of blocks, 0 if unknown + int GetTotalBlocksEstimate(); + + // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint + CBlockIndex* GetLastCheckpoint(const std::map<uint256, CBlockIndex*>& mapBlockIndex); +} + +#endif diff --git a/src/compat.h b/src/compat.h new file mode 100644 index 0000000000..882610031a --- /dev/null +++ b/src/compat.h @@ -0,0 +1,42 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef _BITCOIN_COMPAT_H +#define _BITCOIN_COMPAT_H 1 + +typedef u_int SOCKET; +#ifdef WIN32 +#define MSG_NOSIGNAL 0 +#define MSG_DONTWAIT 0 +typedef int socklen_t; +#else +#include "errno.h" +#define WSAGetLastError() errno +#define WSAEINVAL EINVAL +#define WSAEALREADY EALREADY +#define WSAEWOULDBLOCK EWOULDBLOCK +#define WSAEMSGSIZE EMSGSIZE +#define WSAEINTR EINTR +#define WSAEINPROGRESS EINPROGRESS +#define WSAEADDRINUSE EADDRINUSE +#define WSAENOTSOCK EBADF +#define INVALID_SOCKET (SOCKET)(~0) +#define SOCKET_ERROR -1 +#endif + +inline int myclosesocket(SOCKET& hSocket) +{ + if (hSocket == INVALID_SOCKET) + return WSAENOTSOCK; +#ifdef WIN32 + int ret = closesocket(hSocket); +#else + int ret = close(hSocket); +#endif + hSocket = INVALID_SOCKET; + return ret; +} +#define closesocket(s) myclosesocket(s) + +#endif diff --git a/src/crypter.cpp b/src/crypter.cpp index bee7a3624b..83041addb4 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Bitcoin Developers +// Copyright (c) 2009-2012 The Bitcoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -15,7 +15,7 @@ #include "main.h" #include "util.h" -bool CCrypter::SetKeyFromPassphrase(const std::string& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) +bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) { if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE) return false; @@ -73,14 +73,16 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned EVP_CIPHER_CTX ctx; - EVP_CIPHER_CTX_init(&ctx); - EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); - - EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); - EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen); + bool fOk = true; + EVP_CIPHER_CTX_init(&ctx); + if (fOk) fOk = EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); + if (fOk) fOk = EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen); EVP_CIPHER_CTX_cleanup(&ctx); + if (!fOk) return false; + vchCiphertext.resize(nCLen + nFLen); return true; } @@ -98,14 +100,16 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM EVP_CIPHER_CTX ctx; - EVP_CIPHER_CTX_init(&ctx); - EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); - - EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); - EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); + bool fOk = true; + EVP_CIPHER_CTX_init(&ctx); + if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); + if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); EVP_CIPHER_CTX_cleanup(&ctx); + if (!fOk) return false; + vchPlaintext.resize(nPLen + nFLen); return true; } diff --git a/src/crypter.h b/src/crypter.h index e8ca30a8cc..59a005a220 100644 --- a/src/crypter.h +++ b/src/crypter.h @@ -1,9 +1,10 @@ -// Copyright (c) 2011 The Bitcoin Developers +// Copyright (c) 2009-2012 The Bitcoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef __CRYPTER_H__ #define __CRYPTER_H__ +#include "allocators.h" /* for SecureString */ #include "key.h" const unsigned int WALLET_CRYPTO_KEY_SIZE = 32; @@ -24,6 +25,7 @@ with the double-sha256 of the public key as the IV, and the master key's key as the encryption key (see keystore.[ch]). */ +/** Master key for wallet encryption */ class CMasterKey { public: @@ -57,6 +59,7 @@ public: typedef std::vector<unsigned char, secure_allocator<unsigned char> > CKeyingMaterial; +/** Encryption/decryption context with key information */ class CCrypter { private: @@ -65,7 +68,7 @@ private: bool fKeySet; public: - bool SetKeyFromPassphrase(const std::string &strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod); + bool SetKeyFromPassphrase(const SecureString &strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod); bool Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned char> &vchCiphertext); bool Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingMaterial& vchPlaintext); bool SetKey(const CKeyingMaterial& chNewKey, const std::vector<unsigned char>& chNewIV); diff --git a/src/db.cpp b/src/db.cpp index 9ac93b3506..b86a56e416 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -1,11 +1,12 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" #include "db.h" #include "net.h" +#include <boost/version.hpp> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> @@ -83,12 +84,16 @@ CDB::CDB(const char* pszFile, const char* pszMode) : pdb(NULL) string strErrorFile = strDataDir + "/db.log"; printf("dbenv.open strLogDir=%s strErrorFile=%s\n", strLogDir.c_str(), strErrorFile.c_str()); + int nDbCache = GetArg("-dbcache", 25); dbenv.set_lg_dir(strLogDir.c_str()); - dbenv.set_lg_max(10000000); + dbenv.set_cachesize(nDbCache / 1024, (nDbCache % 1024)*1048576, 1); + dbenv.set_lg_bsize(1048576); + dbenv.set_lg_max(10485760); dbenv.set_lk_max_locks(10000); dbenv.set_lk_max_objects(10000); dbenv.set_errfile(fopen(strErrorFile.c_str(), "a")); /// debug dbenv.set_flags(DB_AUTO_COMMIT, 1); + dbenv.log_set_config(DB_LOG_AUTO_REMOVE, 1); ret = dbenv.open(strDataDir.c_str(), DB_CREATE | DB_INIT_LOCK | @@ -131,7 +136,7 @@ CDB::CDB(const char* pszFile, const char* pszMode) : pdb(NULL) { bool fTmp = fReadOnly; fReadOnly = false; - WriteVersion(VERSION); + WriteVersion(CLIENT_VERSION); fReadOnly = fTmp; } @@ -155,9 +160,10 @@ void CDB::Close() nMinutes = 1; if (strFile == "addr.dat") nMinutes = 2; - if (strFile == "blkindex.dat" && IsInitialBlockDownload() && nBestHeight % 500 != 0) - nMinutes = 1; - dbenv.txn_checkpoint(0, nMinutes, 0); + if (strFile == "blkindex.dat" && IsInitialBlockDownload()) + nMinutes = 5; + + dbenv.txn_checkpoint(nMinutes ? GetArg("-dblogsize", 100)*1024 : 0, nMinutes, 0); CRITICAL_BLOCK(cs_db) --mapFileUseCount[strFile]; @@ -236,7 +242,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip) { // Update version: ssValue.clear(); - ssValue << VERSION; + ssValue << CLIENT_VERSION; } Dbt datKey(&ssKey[0], ssKey.size()); Dbt datValue(&ssValue[0], ssValue.size()); @@ -579,19 +585,114 @@ bool CTxDB::LoadBlockIndex() ReadBestInvalidWork(bnBestInvalidWork); // Verify blocks in the best chain + int nCheckLevel = GetArg("-checklevel", 1); + int nCheckDepth = GetArg( "-checkblocks", 2500); + if (nCheckDepth == 0) + nCheckDepth = 1000000000; // suffices until the year 19000 + if (nCheckDepth > nBestHeight) + nCheckDepth = nBestHeight; + printf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); CBlockIndex* pindexFork = NULL; + map<pair<unsigned int, unsigned int>, CBlockIndex*> mapBlockPos; for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev) { - if (pindex->nHeight < nBestHeight-2500 && !mapArgs.count("-checkblocks")) + if (pindex->nHeight < nBestHeight-nCheckDepth) break; CBlock block; if (!block.ReadFromDisk(pindex)) return error("LoadBlockIndex() : block.ReadFromDisk failed"); - if (!block.CheckBlock()) + // check level 1: verify block validity + if (nCheckLevel>0 && !block.CheckBlock()) { printf("LoadBlockIndex() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); pindexFork = pindex->pprev; } + // check level 2: verify transaction index validity + if (nCheckLevel>1) + { + pair<unsigned int, unsigned int> pos = make_pair(pindex->nFile, pindex->nBlockPos); + mapBlockPos[pos] = pindex; + BOOST_FOREACH(const CTransaction &tx, block.vtx) + { + uint256 hashTx = tx.GetHash(); + CTxIndex txindex; + if (ReadTxIndex(hashTx, txindex)) + { + // check level 3: checker transaction hashes + if (nCheckLevel>2 || pindex->nFile != txindex.pos.nFile || pindex->nBlockPos != txindex.pos.nBlockPos) + { + // either an error or a duplicate transaction + CTransaction txFound; + if (!txFound.ReadFromDisk(txindex.pos)) + { + printf("LoadBlockIndex() : *** cannot read mislocated transaction %s\n", hashTx.ToString().c_str()); + pindexFork = pindex->pprev; + } + else + if (txFound.GetHash() != hashTx) // not a duplicate tx + { + printf("LoadBlockIndex(): *** invalid tx position for %s\n", hashTx.ToString().c_str()); + pindexFork = pindex->pprev; + } + } + // check level 4: check whether spent txouts were spent within the main chain + int nOutput = 0; + if (nCheckLevel>3) + BOOST_FOREACH(const CDiskTxPos &txpos, txindex.vSpent) + { + if (!txpos.IsNull()) + { + pair<unsigned int, unsigned int> posFind = make_pair(txpos.nFile, txpos.nBlockPos); + if (!mapBlockPos.count(posFind)) + { + printf("LoadBlockIndex(): *** found bad spend at %d, hashBlock=%s, hashTx=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str(), hashTx.ToString().c_str()); + pindexFork = pindex->pprev; + } + // check level 6: check whether spent txouts were spent by a valid transaction that consume them + if (nCheckLevel>5) + { + CTransaction txSpend; + if (!txSpend.ReadFromDisk(txpos)) + { + printf("LoadBlockIndex(): *** cannot read spending transaction of %s:%i from disk\n", hashTx.ToString().c_str(), nOutput); + pindexFork = pindex->pprev; + } + else if (!txSpend.CheckTransaction()) + { + printf("LoadBlockIndex(): *** spending transaction of %s:%i is invalid\n", hashTx.ToString().c_str(), nOutput); + pindexFork = pindex->pprev; + } + else + { + bool fFound = false; + BOOST_FOREACH(const CTxIn &txin, txSpend.vin) + if (txin.prevout.hash == hashTx && txin.prevout.n == nOutput) + fFound = true; + if (!fFound) + { + printf("LoadBlockIndex(): *** spending transaction of %s:%i does not spend it\n", hashTx.ToString().c_str(), nOutput); + pindexFork = pindex->pprev; + } + } + } + } + nOutput++; + } + } + // check level 5: check whether all prevouts are marked spent + if (nCheckLevel>4) + BOOST_FOREACH(const CTxIn &txin, tx.vin) + { + CTxIndex txindex; + if (ReadTxIndex(txin.prevout.hash, txindex)) + if (txindex.vSpent.size()-1 < txin.prevout.n || txindex.vSpent[txin.prevout.n].IsNull()) + { + printf("LoadBlockIndex(): *** found unspent prevout %s:%i in %s\n", txin.prevout.hash.ToString().c_str(), txin.prevout.n, hashTx.ToString().c_str()); + pindexFork = pindex->pprev; + } + } + } + } } if (pindexFork) { @@ -615,50 +716,58 @@ bool CTxDB::LoadBlockIndex() // CAddrDB // -bool CAddrDB::WriteAddress(const CAddress& addr) -{ - return Write(make_pair(string("addr"), addr.GetKey()), addr); -} - -bool CAddrDB::EraseAddress(const CAddress& addr) +bool CAddrDB::WriteAddrman(const CAddrMan& addrman) { - return Erase(make_pair(string("addr"), addr.GetKey())); + return Write(string("addrman"), addrman); } bool CAddrDB::LoadAddresses() { - CRITICAL_BLOCK(cs_mapAddresses) + if (Read(string("addrman"), addrman)) { - // Get cursor - Dbc* pcursor = GetCursor(); - if (!pcursor) + printf("Loaded %i addresses\n", addrman.size()); + return true; + } + + // Read pre-0.6 addr records + + vector<CAddress> vAddr; + vector<vector<unsigned char> > vDelete; + + // Get cursor + Dbc* pcursor = GetCursor(); + if (!pcursor) + return false; + + loop + { + // Read next record + CDataStream ssKey; + CDataStream ssValue; + int ret = ReadAtCursor(pcursor, ssKey, ssValue); + if (ret == DB_NOTFOUND) + break; + else if (ret != 0) return false; - loop + // Unserialize + string strType; + ssKey >> strType; + if (strType == "addr") { - // Read next record - CDataStream ssKey; - CDataStream ssValue; - int ret = ReadAtCursor(pcursor, ssKey, ssValue); - if (ret == DB_NOTFOUND) - break; - else if (ret != 0) - return false; - - // Unserialize - string strType; - ssKey >> strType; - if (strType == "addr") - { - CAddress addr; - ssValue >> addr; - mapAddresses.insert(make_pair(addr.GetKey(), addr)); - } + CAddress addr; + ssValue >> addr; + vAddr.push_back(addr); } - pcursor->close(); - - printf("Loaded %d addresses\n", mapAddresses.size()); } + pcursor->close(); + + addrman.Add(vAddr, CNetAddr("0.0.0.0")); + printf("Loaded %i addresses\n", addrman.size()); + + // Note: old records left; we ran into hangs-on-startup + // bugs for some users who (we think) were running after + // an unclean shutdown. return true; } @@ -767,20 +876,24 @@ int CWalletDB::LoadWallet(CWallet* pwallet) vector<uint256> vWalletUpgrade; bool fIsEncrypted = false; - // Modify defaults -#ifndef WIN32 - // Tray icon sometimes disappears on 9.10 karmic koala 64-bit, leaving no way to access the program - fMinimizeToTray = false; - fMinimizeOnClose = false; -#endif - //// todo: shouldn't we catch exceptions and try to recover and continue? CRITICAL_BLOCK(pwallet->cs_wallet) { + int nMinVersion = 0; + if (Read((string)"minversion", nMinVersion)) + { + if (nMinVersion > CLIENT_VERSION) + return DB_TOO_NEW; + pwallet->LoadMinVersion(nMinVersion); + } + // Get cursor Dbc* pcursor = GetCursor(); if (!pcursor) + { + printf("Error getting wallet database cursor\n"); return DB_CORRUPT; + } loop { @@ -791,7 +904,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) if (ret == DB_NOTFOUND) break; else if (ret != 0) + { + printf("Error reading next record from wallet database\n"); return DB_CORRUPT; + } // Unserialize // Taking advantage of the fact that pair serialization @@ -810,7 +926,7 @@ int CWalletDB::LoadWallet(CWallet* pwallet) ssKey >> hash; CWalletTx& wtx = pwallet->mapWallet[hash]; ssValue >> wtx; - wtx.pwallet = pwallet; + wtx.BindWallet(pwallet); if (wtx.GetHash() != hash) printf("Error in wallet.dat, hash mismatch\n"); @@ -860,16 +976,41 @@ int CWalletDB::LoadWallet(CWallet* pwallet) { CPrivKey pkey; ssValue >> pkey; + key.SetPubKey(vchPubKey); key.SetPrivKey(pkey); + if (key.GetPubKey() != vchPubKey) + { + printf("Error reading wallet database: CPrivKey pubkey inconsistency\n"); + return DB_CORRUPT; + } + if (!key.IsValid()) + { + printf("Error reading wallet database: invalid CPrivKey\n"); + return DB_CORRUPT; + } } else { CWalletKey wkey; ssValue >> wkey; + key.SetPubKey(vchPubKey); key.SetPrivKey(wkey.vchPrivKey); + if (key.GetPubKey() != vchPubKey) + { + printf("Error reading wallet database: CWalletKey pubkey inconsistency\n"); + return DB_CORRUPT; + } + if (!key.IsValid()) + { + printf("Error reading wallet database: invalid CWalletKey\n"); + return DB_CORRUPT; + } } if (!pwallet->LoadKey(key)) + { + printf("Error reading wallet database: LoadKey failed\n"); return DB_CORRUPT; + } } else if (strType == "mkey") { @@ -878,7 +1019,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CMasterKey kMasterKey; ssValue >> kMasterKey; if(pwallet->mapMasterKeys.count(nID) != 0) + { + printf("Error reading wallet database: duplicate CMasterKey id %u\n", nID); return DB_CORRUPT; + } pwallet->mapMasterKeys[nID] = kMasterKey; if (pwallet->nMasterKeyMaxID < nID) pwallet->nMasterKeyMaxID = nID; @@ -890,7 +1034,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) vector<unsigned char> vchPrivKey; ssValue >> vchPrivKey; if (!pwallet->LoadCryptedKey(vchPubKey, vchPrivKey)) + { + printf("Error reading wallet database: LoadCryptedKey failed\n"); return DB_CORRUPT; + } fIsEncrypted = true; } else if (strType == "defaultkey") @@ -909,30 +1056,17 @@ int CWalletDB::LoadWallet(CWallet* pwallet) if (nFileVersion == 10300) nFileVersion = 300; } - else if (strType == "setting") - { - string strKey; - ssKey >> strKey; - - // Options -#ifndef QT_GUI - if (strKey == "fGenerateBitcoins") ssValue >> fGenerateBitcoins; -#endif - if (strKey == "nTransactionFee") ssValue >> nTransactionFee; - if (strKey == "fLimitProcessors") ssValue >> fLimitProcessors; - if (strKey == "nLimitProcessors") ssValue >> nLimitProcessors; - if (strKey == "fMinimizeToTray") ssValue >> fMinimizeToTray; - if (strKey == "fMinimizeOnClose") ssValue >> fMinimizeOnClose; - if (strKey == "fUseProxy") ssValue >> fUseProxy; - if (strKey == "addrProxy") ssValue >> addrProxy; - if (fHaveUPnP && strKey == "fUseUPnP") ssValue >> fUseUPnP; - } - else if (strType == "minversion") + else if (strType == "cscript") { - int nMinVersion = 0; - ssValue >> nMinVersion; - if (nMinVersion > VERSION) - return DB_TOO_NEW; + uint160 hash; + ssKey >> hash; + CScript script; + ssValue >> script; + if (!pwallet->LoadCScript(script)) + { + printf("Error reading wallet database: LoadCScript failed\n"); + return DB_CORRUPT; + } } } pcursor->close(); @@ -942,27 +1076,19 @@ int CWalletDB::LoadWallet(CWallet* pwallet) WriteTx(hash, pwallet->mapWallet[hash]); printf("nFileVersion = %d\n", nFileVersion); - printf("fGenerateBitcoins = %d\n", fGenerateBitcoins); - printf("nTransactionFee = %"PRI64d"\n", nTransactionFee); - printf("fMinimizeToTray = %d\n", fMinimizeToTray); - printf("fMinimizeOnClose = %d\n", fMinimizeOnClose); - printf("fUseProxy = %d\n", fUseProxy); - printf("addrProxy = %s\n", addrProxy.ToString().c_str()); - if (fHaveUPnP) - printf("fUseUPnP = %d\n", fUseUPnP); // Rewrite encrypted wallets of versions 0.4.0 and 0.5.0rc: if (fIsEncrypted && (nFileVersion == 40000 || nFileVersion == 50000)) return DB_NEED_REWRITE; - if (nFileVersion < VERSION) // Update + if (nFileVersion < CLIENT_VERSION) // Update { // Get rid of old debug.log file in current directory if (nFileVersion <= 105 && !pszSetDataDir[0]) unlink("debug.log"); - WriteVersion(VERSION); + WriteVersion(CLIENT_VERSION); } return DB_LOAD_OK; @@ -975,7 +1101,7 @@ void ThreadFlushWalletDB(void* parg) if (fOneThread) return; fOneThread = true; - if (mapArgs.count("-noflushwallet")) + if (!GetBoolArg("-flushwallet", true)) return; unsigned int nLastSeen = nWalletDBUpdated; @@ -1049,14 +1175,19 @@ bool BackupWallet(const CWallet& wallet, const string& strDest) filesystem::path pathDest(strDest); if (filesystem::is_directory(pathDest)) pathDest = pathDest / wallet.strWalletFile; + + try { #if BOOST_VERSION >= 104000 - filesystem::copy_file(pathSrc, pathDest, filesystem::copy_option::overwrite_if_exists); + filesystem::copy_file(pathSrc, pathDest, filesystem::copy_option::overwrite_if_exists); #else - filesystem::copy_file(pathSrc, pathDest); + filesystem::copy_file(pathSrc, pathDest); #endif - printf("copied wallet.dat to %s\n", pathDest.string().c_str()); - - return true; + printf("copied wallet.dat to %s\n", pathDest.string().c_str()); + return true; + } catch(const filesystem::filesystem_error &e) { + printf("error copying wallet.dat to %s - %s\n", pathDest.string().c_str(), e.what()); + return false; + } } } Sleep(100); @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_DB_H @@ -13,17 +13,18 @@ #include <db_cxx.h> -class CTxIndex; +class CAccount; +class CAccountingEntry; +class CAddress; +class CAddrMan; +class CBlockLocator; class CDiskBlockIndex; class CDiskTxPos; +class CMasterKey; class COutPoint; -class CAddress; -class CWalletTx; +class CTxIndex; class CWallet; -class CAccount; -class CAccountingEntry; -class CBlockLocator; - +class CWalletTx; extern unsigned int nWalletDBUpdated; extern DbEnv dbenv; @@ -33,7 +34,7 @@ void ThreadFlushWalletDB(void* parg); bool BackupWallet(const CWallet& wallet, const std::string& strDest); - +/** RAII class that provides access to a Berkeley database */ class CDB { protected: @@ -265,7 +266,7 @@ public: - +/** Access to the transaction database (blkindex.dat) */ class CTxDB : public CDB { public: @@ -296,7 +297,7 @@ public: - +/** Access to the (IP) address database (addr.dat) */ class CAddrDB : public CDB { public: @@ -305,15 +306,14 @@ private: CAddrDB(const CAddrDB&); void operator=(const CAddrDB&); public: - bool WriteAddress(const CAddress& addr); - bool EraseAddress(const CAddress& addr); + bool WriteAddrman(const CAddrMan& addr); bool LoadAddresses(); }; bool LoadAddresses(); - +/** A key pool entry */ class CKeyPool { public: @@ -342,7 +342,7 @@ public: - +/** Error statuses for the wallet database */ enum DBErrors { DB_LOAD_OK, @@ -352,6 +352,7 @@ enum DBErrors DB_NEED_REWRITE }; +/** Access to the wallet database (wallet.dat) */ class CWalletDB : public CDB { public: @@ -420,6 +421,19 @@ public: return Write(std::make_pair(std::string("mkey"), nID), kMasterKey, true); } + // Support for BIP 0013 : see https://en.bitcoin.it/wiki/BIP_0013 + bool ReadCScript(const uint160 &hash, CScript& redeemScript) + { + redeemScript.clear(); + return Read(std::make_pair(std::string("cscript"), hash), redeemScript); + } + + bool WriteCScript(const uint160& hash, const CScript& redeemScript) + { + nWalletDBUpdated++; + return Write(std::make_pair(std::string("cscript"), hash), redeemScript, false); + } + bool WriteBestBlock(const CBlockLocator& locator) { nWalletDBUpdated++; @@ -460,18 +474,29 @@ public: return Erase(std::make_pair(std::string("pool"), nPool)); } + // Settings are no longer stored in wallet.dat; these are + // used only for backwards compatibility: template<typename T> bool ReadSetting(const std::string& strKey, T& value) { return Read(std::make_pair(std::string("setting"), strKey), value); } - template<typename T> bool WriteSetting(const std::string& strKey, const T& value) { nWalletDBUpdated++; return Write(std::make_pair(std::string("setting"), strKey), value); } + bool EraseSetting(const std::string& strKey) + { + nWalletDBUpdated++; + return Erase(std::make_pair(std::string("setting"), strKey)); + } + + bool WriteMinVersion(int nVersion) + { + return Write(std::string("minversion"), nVersion); + } bool ReadAccount(const std::string& strAccount, CAccount& account); bool WriteAccount(const std::string& strAccount, const CAccount& account); diff --git a/src/headers.h b/src/headers.h index fd086faee8..ceee028977 100644 --- a/src/headers.h +++ b/src/headers.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -12,18 +12,17 @@ #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif -#define _WIN32_WINNT 0x0500 +#define _WIN32_WINNT 0x0501 #ifdef _WIN32_IE #undef _WIN32_IE #endif #define _WIN32_IE 0x0400 #define WIN32_LEAN_AND_MEAN 1 - +#ifndef NOMINMAX +#define NOMINMAX +#endif // Include boost/foreach here as it defines __STDC_LIMIT_MACROS on some systems. #include <boost/foreach.hpp> -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS // to enable UINT64_MAX from stdint.h -#endif #if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> // to get BSD define @@ -44,7 +43,6 @@ #include <stdlib.h> #include <time.h> #include <math.h> -#include <limits.h> #include <float.h> #include <assert.h> #include <iostream> @@ -83,16 +81,11 @@ #endif -#pragma hdrstop - #include "serialize.h" #include "uint256.h" #include "util.h" #include "bignum.h" #include "base58.h" #include "main.h" -#ifdef QT_GUI -#include "qtui.h" -#else -#include "noui.h" -#endif +#include "wallet.h" +#include "ui_interface.h" diff --git a/src/init.cpp b/src/init.cpp index a6d0ab56e3..3f900fc872 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" @@ -10,16 +10,11 @@ #include "strlcpy.h" #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> +#include <boost/filesystem/convenience.hpp> #include <boost/interprocess/sync/file_lock.hpp> -#if defined(BITCOIN_NEED_QT_PLUGINS) && !defined(_BITCOIN_QT_PLUGINS_INCLUDED) -#define _BITCOIN_QT_PLUGINS_INCLUDED -#define __INSURE__ -#include <QtPlugin> -Q_IMPORT_PLUGIN(qcncodecs) -Q_IMPORT_PLUGIN(qjpcodecs) -Q_IMPORT_PLUGIN(qtwcodecs) -Q_IMPORT_PLUGIN(qkrcodecs) +#ifdef WIN32 +#define strncasecmp strnicmp #endif using namespace std; @@ -148,94 +143,115 @@ bool AppInit2(int argc, char* argv[]) // // Parameters // + // If Qt is used, parameters/bitcoin.conf are parsed in qt/bitcoin.cpp's main() +#if !defined(QT_GUI) ParseParameters(argc, argv); - - if (mapArgs.count("-datadir")) + if (!ReadConfigFile(mapArgs, mapMultiArgs)) { - if (filesystem::is_directory(filesystem::system_complete(mapArgs["-datadir"]))) - { - filesystem::path pathDataDir = filesystem::system_complete(mapArgs["-datadir"]); - strlcpy(pszSetDataDir, pathDataDir.string().c_str(), sizeof(pszSetDataDir)); - } - else - { - fprintf(stderr, "Error: Specified directory does not exist\n"); - Shutdown(NULL); - } + fprintf(stderr, "Error: Specified directory does not exist\n"); + Shutdown(NULL); } - - - ReadConfigFile(mapArgs, mapMultiArgs); // Must be done after processing datadir +#endif if (mapArgs.count("-?") || mapArgs.count("--help")) { string strUsage = string() + _("Bitcoin version") + " " + FormatFullVersion() + "\n\n" + _("Usage:") + "\t\t\t\t\t\t\t\t\t\t\n" + - " bitcoin [options] \t " + "\n" + - " bitcoin [options] <command> [params]\t " + _("Send command to -server or bitcoind\n") + - " bitcoin [options] help \t\t " + _("List commands\n") + - " bitcoin [options] help <command> \t\t " + _("Get help for a command\n") + - _("Options:\n") + - " -conf=<file> \t\t " + _("Specify configuration file (default: bitcoin.conf)\n") + - " -pid=<file> \t\t " + _("Specify pid file (default: bitcoind.pid)\n") + - " -gen \t\t " + _("Generate coins\n") + - " -gen=0 \t\t " + _("Don't generate coins\n") + - " -min \t\t " + _("Start minimized\n") + - " -datadir=<dir> \t\t " + _("Specify data directory\n") + - " -timeout=<n> \t " + _("Specify connection timeout (in milliseconds)\n") + - " -proxy=<ip:port> \t " + _("Connect through socks4 proxy\n") + - " -dns \t " + _("Allow DNS lookups for addnode and connect\n") + - " -addnode=<ip> \t " + _("Add a node to connect to\n") + - " -connect=<ip> \t\t " + _("Connect only to the specified node\n") + - " -nolisten \t " + _("Don't accept connections from outside\n") + - " -banscore=<n> \t " + _("Threshold for disconnecting misbehaving peers (default: 100)\n") + - " -bantime=<n> \t " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)\n") + + " bitcoind [options] \t " + "\n" + + " bitcoind [options] <command> [params]\t " + _("Send command to -server or bitcoind") + "\n" + + " bitcoind [options] help \t\t " + _("List commands") + "\n" + + " bitcoind [options] help <command> \t\t " + _("Get help for a command") + "\n" + + _("Options:") + "\n" + + " -conf=<file> \t\t " + _("Specify configuration file (default: bitcoin.conf)") + "\n" + + " -pid=<file> \t\t " + _("Specify pid file (default: bitcoind.pid)") + "\n" + + " -gen \t\t " + _("Generate coins") + "\n" + + " -gen=0 \t\t " + _("Don't generate coins") + "\n" + + " -min \t\t " + _("Start minimized") + "\n" + + " -splash \t\t " + _("Show splash screen on startup (default: 1)") + "\n" + + " -datadir=<dir> \t\t " + _("Specify data directory") + "\n" + + " -dbcache=<n> \t\t " + _("Set database cache size in megabytes (default: 25)") + "\n" + + " -dblogsize=<n> \t\t " + _("Set database disk log size in megabytes (default: 100)") + "\n" + + " -timeout=<n> \t " + _("Specify connection timeout (in milliseconds)") + "\n" + + " -proxy=<ip:port> \t " + _("Connect through socks4 proxy") + "\n" + + " -dns \t " + _("Allow DNS lookups for addnode and connect") + "\n" + + " -port=<port> \t\t " + _("Listen for connections on <port> (default: 8333 or testnet: 18333)") + "\n" + + " -maxconnections=<n>\t " + _("Maintain at most <n> connections to peers (default: 125)") + "\n" + + " -addnode=<ip> \t " + _("Add a node to connect to and attempt to keep the connection open") + "\n" + + " -connect=<ip> \t\t " + _("Connect only to the specified node") + "\n" + + " -irc \t " + _("Find peers using internet relay chat (default: 0)") + "\n" + + " -listen \t " + _("Accept connections from outside (default: 1)") + "\n" + +#ifdef QT_GUI + " -lang=<lang> \t\t " + _("Set language, for example \"de_DE\" (default: system locale)") + "\n" + +#endif + " -dnsseed \t " + _("Find peers using DNS lookup (default: 1)") + "\n" + + " -banscore=<n> \t " + _("Threshold for disconnecting misbehaving peers (default: 100)") + "\n" + + " -bantime=<n> \t " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n" + + " -maxreceivebuffer=<n>\t " + _("Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)") + "\n" + + " -maxsendbuffer=<n>\t " + _("Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)") + "\n" + #ifdef USE_UPNP #if USE_UPNP - " -noupnp \t " + _("Don't attempt to use UPnP to map the listening port\n") + + " -upnp \t " + _("Use Universal Plug and Play to map the listening port (default: 1)") + "\n" + #else - " -upnp \t " + _("Attempt to use UPnP to map the listening port\n") + + " -upnp \t " + _("Use Universal Plug and Play to map the listening port (default: 0)") + "\n" + #endif #endif - " -paytxfee=<amt> \t " + _("Fee per KB to add to transactions you send\n") + -#ifdef GUI - " -server \t\t " + _("Accept command line and JSON-RPC commands\n") + + " -paytxfee=<amt> \t " + _("Fee per KB to add to transactions you send") + "\n" + +#ifdef QT_GUI + " -server \t\t " + _("Accept command line and JSON-RPC commands") + "\n" + #endif -#ifndef WIN32 - " -daemon \t\t " + _("Run in the background as a daemon and accept commands\n") + +#if !defined(WIN32) && !defined(QT_GUI) + " -daemon \t\t " + _("Run in the background as a daemon and accept commands") + "\n" + #endif - " -testnet \t\t " + _("Use the test network\n") + - " -rpcuser=<user> \t " + _("Username for JSON-RPC connections\n") + - " -rpcpassword=<pw>\t " + _("Password for JSON-RPC connections\n") + - " -rpcport=<port> \t\t " + _("Listen for JSON-RPC connections on <port> (default: 8332)\n") + - " -rpcallowip=<ip> \t\t " + _("Allow JSON-RPC connections from specified IP address\n") + - " -rpcconnect=<ip> \t " + _("Send commands to node running on <ip> (default: 127.0.0.1)\n") + - " -keypool=<n> \t " + _("Set key pool size to <n> (default: 100)\n") + - " -rescan \t " + _("Rescan the block chain for missing wallet transactions\n"); - -#ifdef USE_SSL - strUsage += string() + - _("\nSSL options: (see the Bitcoin Wiki for SSL setup instructions)\n") + - " -rpcssl \t " + _("Use OpenSSL (https) for JSON-RPC connections\n") + - " -rpcsslcertificatechainfile=<file.cert>\t " + _("Server certificate file (default: server.cert)\n") + - " -rpcsslprivatekeyfile=<file.pem> \t " + _("Server private key (default: server.pem)\n") + - " -rpcsslciphers=<ciphers> \t " + _("Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"); + " -testnet \t\t " + _("Use the test network") + "\n" + + " -debug \t\t " + _("Output extra debugging information") + "\n" + + " -logtimestamps \t " + _("Prepend debug output with timestamp") + "\n" + + " -printtoconsole \t " + _("Send trace/debug info to console instead of debug.log file") + "\n" + +#ifdef WIN32 + " -printtodebugger \t " + _("Send trace/debug info to debugger") + "\n" + #endif + " -rpcuser=<user> \t " + _("Username for JSON-RPC connections") + "\n" + + " -rpcpassword=<pw>\t " + _("Password for JSON-RPC connections") + "\n" + + " -rpcport=<port> \t\t " + _("Listen for JSON-RPC connections on <port> (default: 8332)") + "\n" + + " -rpcallowip=<ip> \t\t " + _("Allow JSON-RPC connections from specified IP address") + "\n" + + " -rpcconnect=<ip> \t " + _("Send commands to node running on <ip> (default: 127.0.0.1)") + "\n" + + " -blocknotify=<cmd> " + _("Execute command when the best block changes (%s in cmd is replaced by block hash)") + "\n" + + " -upgradewallet \t " + _("Upgrade wallet to latest format") + "\n" + + " -keypool=<n> \t " + _("Set key pool size to <n> (default: 100)") + "\n" + + " -rescan \t " + _("Rescan the block chain for missing wallet transactions") + "\n" + + " -checkblocks=<n> \t\t " + _("How many blocks to check at startup (default: 2500, 0 = all)") + "\n" + + " -checklevel=<n> \t\t " + _("How thorough the block verification is (0-6, default: 1)") + "\n"; strUsage += string() + - " -? \t\t " + _("This help message\n"); + _("\nSSL options: (see the Bitcoin Wiki for SSL setup instructions)") + "\n" + + " -rpcssl \t " + _("Use OpenSSL (https) for JSON-RPC connections") + "\n" + + " -rpcsslcertificatechainfile=<file.cert>\t " + _("Server certificate file (default: server.cert)") + "\n" + + " -rpcsslprivatekeyfile=<file.pem> \t " + _("Server private key (default: server.pem)") + "\n" + + " -rpcsslciphers=<ciphers> \t " + _("Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)") + "\n"; + + strUsage += string() + + " -? \t\t " + _("This help message") + "\n"; // Remove tabs strUsage.erase(std::remove(strUsage.begin(), strUsage.end(), '\t'), strUsage.end()); +#if defined(QT_GUI) && defined(WIN32) + // On windows, show a message box, as there is no stderr + ThreadSafeMessageBox(strUsage, _("Usage"), wxOK | wxMODAL); +#else fprintf(stderr, "%s", strUsage.c_str()); +#endif return false; } + fTestNet = GetBoolArg("-testnet"); + if (fTestNet) + { + SoftSetBoolArg("-irc", true); + } + fDebug = GetBoolArg("-debug"); - fAllowDNS = GetBoolArg("-dns"); -#ifndef WIN32 +#if !defined(WIN32) && !defined(QT_GUI) fDaemon = GetBoolArg("-daemon"); #else fDaemon = false; @@ -252,15 +268,11 @@ bool AppInit2(int argc, char* argv[]) #endif fPrintToConsole = GetBoolArg("-printtoconsole"); fPrintToDebugger = GetBoolArg("-printtodebugger"); - - fTestNet = GetBoolArg("-testnet"); - bool fTOR = (fUseProxy && addrProxy.port == htons(9050)); - fNoListen = GetBoolArg("-nolisten") || fTOR; fLogTimestamps = GetBoolArg("-logtimestamps"); #ifndef QT_GUI for (int i = 1; i < argc; i++) - if (!IsSwitchChar(argv[i][0])) + if (!IsSwitchChar(argv[i][0]) && !(strlen(argv[i]) > 7 && strncasecmp(argv[i], "bitcoin:", 8) == 0)) fCommandLine = true; if (fCommandLine) @@ -270,7 +282,7 @@ bool AppInit2(int argc, char* argv[]) } #endif -#ifndef WIN32 +#if !defined(WIN32) && !defined(QT_GUI) if (fDaemon) { // Daemonize @@ -313,41 +325,30 @@ bool AppInit2(int argc, char* argv[]) static boost::interprocess::file_lock lock(strLockFile.c_str()); if (!lock.try_lock()) { - wxMessageBox(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), GetDataDir().c_str()), "Bitcoin"); + ThreadSafeMessageBox(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), GetDataDir().c_str()), _("Bitcoin"), wxOK|wxMODAL); return false; } - // Bind to the port early so we can tell if another instance is already running. - string strErrors; - if (!fNoListen) - { - if (!BindListenPort(strErrors)) - { - wxMessageBox(strErrors, "Bitcoin"); - return false; - } - } - + std::ostringstream strErrors; // // Load data files // if (fDaemon) fprintf(stdout, "bitcoin server starting\n"); - strErrors = ""; int64 nStart; InitMessage(_("Loading addresses...")); printf("Loading addresses...\n"); nStart = GetTimeMillis(); if (!LoadAddresses()) - strErrors += _("Error loading addr.dat \n"); + strErrors << _("Error loading addr.dat") << "\n"; printf(" addresses %15"PRI64d"ms\n", GetTimeMillis() - nStart); InitMessage(_("Loading block index...")); printf("Loading block index...\n"); nStart = GetTimeMillis(); if (!LoadBlockIndex()) - strErrors += _("Error loading blkindex.dat \n"); + strErrors << _("Error loading blkindex.dat") << "\n"; printf(" block index %15"PRI64d"ms\n", GetTimeMillis() - nStart); InitMessage(_("Loading wallet...")); @@ -359,18 +360,50 @@ bool AppInit2(int argc, char* argv[]) if (nLoadWalletRet != DB_LOAD_OK) { if (nLoadWalletRet == DB_CORRUPT) - strErrors += _("Error loading wallet.dat: Wallet corrupted \n"); + strErrors << _("Error loading wallet.dat: Wallet corrupted") << "\n"; else if (nLoadWalletRet == DB_TOO_NEW) - strErrors += _("Error loading wallet.dat: Wallet requires newer version of Bitcoin \n"); + strErrors << _("Error loading wallet.dat: Wallet requires newer version of Bitcoin") << "\n"; else if (nLoadWalletRet == DB_NEED_REWRITE) { - strErrors += _("Wallet needed to be rewritten: restart Bitcoin to complete \n"); - wxMessageBox(strErrors, "Bitcoin", wxOK | wxICON_ERROR); + strErrors << _("Wallet needed to be rewritten: restart Bitcoin to complete") << "\n"; + printf("%s", strErrors.str().c_str()); + ThreadSafeMessageBox(strErrors.str(), _("Bitcoin"), wxOK | wxICON_ERROR | wxMODAL); return false; } else - strErrors += _("Error loading wallet.dat \n"); + strErrors << _("Error loading wallet.dat") << "\n"; + } + + if (GetBoolArg("-upgradewallet", fFirstRun)) + { + int nMaxVersion = GetArg("-upgradewallet", 0); + if (nMaxVersion == 0) // the -walletupgrade without argument case + { + printf("Performing wallet upgrade to %i\n", FEATURE_LATEST); + nMaxVersion = CLIENT_VERSION; + pwalletMain->SetMinVersion(FEATURE_LATEST); // permanently upgrade the wallet immediately + } + else + printf("Allowing wallet upgrade up to %i\n", nMaxVersion); + if (nMaxVersion < pwalletMain->GetVersion()) + strErrors << _("Cannot downgrade wallet") << "\n"; + pwalletMain->SetMaxVersion(nMaxVersion); + } + + if (fFirstRun) + { + // Create new keyUser and set as default key + RandAddSeedPerfmon(); + + std::vector<unsigned char> newDefaultKey; + if (!pwalletMain->GetKeyFromPool(newDefaultKey, false)) + strErrors << _("Cannot initialize keypool") << "\n"; + pwalletMain->SetDefaultKey(newDefaultKey); + if (!pwalletMain->SetAddressBookName(CBitcoinAddress(pwalletMain->vchDefaultKey), "")) + strErrors << _("Cannot write default address") << "\n"; } + + printf("%s", strErrors.str().c_str()); printf(" wallet %15"PRI64d"ms\n", GetTimeMillis() - nStart); RegisterWallet(pwalletMain); @@ -397,22 +430,26 @@ bool AppInit2(int argc, char* argv[]) InitMessage(_("Done loading")); printf("Done loading\n"); - //// debug print - printf("mapBlockIndex.size() = %d\n", mapBlockIndex.size()); - printf("nBestHeight = %d\n", nBestHeight); - printf("setKeyPool.size() = %d\n", pwalletMain->setKeyPool.size()); - printf("mapWallet.size() = %d\n", pwalletMain->mapWallet.size()); - printf("mapAddressBook.size() = %d\n", pwalletMain->mapAddressBook.size()); + //// debug print + printf("mapBlockIndex.size() = %d\n", mapBlockIndex.size()); + printf("nBestHeight = %d\n", nBestHeight); + printf("setKeyPool.size() = %d\n", pwalletMain->setKeyPool.size()); + printf("mapWallet.size() = %d\n", pwalletMain->mapWallet.size()); + printf("mapAddressBook.size() = %d\n", pwalletMain->mapAddressBook.size()); - if (!strErrors.empty()) + if (!strErrors.str().empty()) { - wxMessageBox(strErrors, "Bitcoin", wxOK | wxICON_ERROR); + ThreadSafeMessageBox(strErrors.str(), _("Bitcoin"), wxOK | wxICON_ERROR | wxMODAL); return false; } // Add wallet transactions that aren't already in a block to mapTransactions pwalletMain->ReacceptWalletTransactions(); + // Note: Bitcoin-QT stores several settings in the wallet, so we want + // to load the wallet BEFORE parsing command-line arguments, so + // the command-line/bitcoin.conf settings override GUI setting. + // // Parameters // @@ -452,15 +489,44 @@ bool AppInit2(int argc, char* argv[]) return false; } - fGenerateBitcoins = GetBoolArg("-gen"); - if (mapArgs.count("-proxy")) { fUseProxy = true; - addrProxy = CAddress(mapArgs["-proxy"]); + addrProxy = CService(mapArgs["-proxy"], 9050); if (!addrProxy.IsValid()) { - wxMessageBox(_("Invalid -proxy address"), "Bitcoin"); + ThreadSafeMessageBox(_("Invalid -proxy address"), _("Bitcoin"), wxOK | wxMODAL); + return false; + } + } + + bool fTor = (fUseProxy && addrProxy.GetPort() == 9050); + if (fTor) + { + // Use SoftSetBoolArg here so user can override any of these if they wish. + // Note: the GetBoolArg() calls for all of these must happen later. + SoftSetBoolArg("-listen", false); + SoftSetBoolArg("-irc", false); + SoftSetBoolArg("-dnsseed", false); + SoftSetBoolArg("-upnp", false); + SoftSetBoolArg("-dns", false); + } + + fAllowDNS = GetBoolArg("-dns"); + fNoListen = !GetBoolArg("-listen", true); + + // Continue to put "/P2SH/" in the coinbase to monitor + // BIP16 support. + // This can be removed eventually... + const char* pszP2SH = "/P2SH/"; + COINBASE_FLAGS << std::vector<unsigned char>(pszP2SH, pszP2SH+strlen(pszP2SH)); + + if (!fNoListen) + { + std::string strError; + if (!BindListenPort(strError)) + { + ThreadSafeMessageBox(strError, _("Bitcoin"), wxOK | wxMODAL); return false; } } @@ -469,38 +535,22 @@ bool AppInit2(int argc, char* argv[]) { BOOST_FOREACH(string strAddr, mapMultiArgs["-addnode"]) { - CAddress addr(strAddr, fAllowDNS); + CAddress addr(CService(strAddr, GetDefaultPort(), fAllowDNS)); addr.nTime = 0; // so it won't relay unless successfully connected if (addr.IsValid()) - AddAddress(addr); + addrman.Add(addr, CNetAddr("127.0.0.1")); } } - if (GetBoolArg("-nodnsseed")) - printf("DNS seeding disabled\n"); - else - DNSAddressSeed(); - if (mapArgs.count("-paytxfee")) { if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) { - wxMessageBox(_("Invalid amount for -paytxfee=<amount>"), "Bitcoin"); + ThreadSafeMessageBox(_("Invalid amount for -paytxfee=<amount>"), _("Bitcoin"), wxOK | wxMODAL); return false; } if (nTransactionFee > 0.25 * COIN) - wxMessageBox(_("Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction."), "Bitcoin", wxOK | wxICON_EXCLAMATION); - } - - if (fHaveUPnP) - { -#if USE_UPNP - if (GetBoolArg("-noupnp")) - fUseUPnP = false; -#else - if (GetBoolArg("-upnp")) - fUseUPnP = true; -#endif + ThreadSafeMessageBox(_("Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction."), _("Bitcoin"), wxOK | wxICON_EXCLAMATION | wxMODAL); } // @@ -512,11 +562,16 @@ bool AppInit2(int argc, char* argv[]) RandAddSeedPerfmon(); if (!CreateThread(StartNode, NULL)) - wxMessageBox(_("Error: CreateThread(StartNode) failed"), "Bitcoin"); + ThreadSafeMessageBox(_("Error: CreateThread(StartNode) failed"), _("Bitcoin"), wxOK | wxMODAL); if (fServer) CreateThread(ThreadRPCServer, NULL); +#ifdef QT_GUI + if(GetStartOnSystemStartup()) + SetStartOnSystemStartup(true); // Remove startup links to bitcoin-wx +#endif + #if !defined(QT_GUI) while (1) Sleep(5000); @@ -524,3 +579,152 @@ bool AppInit2(int argc, char* argv[]) return true; } + +#ifdef WIN32 +string StartupShortcutPath() +{ + return MyGetSpecialFolderPath(CSIDL_STARTUP, true) + "\\Bitcoin.lnk"; +} + +bool GetStartOnSystemStartup() +{ + return filesystem::exists(StartupShortcutPath().c_str()); +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + // If the shortcut exists already, remove it for updating + remove(StartupShortcutPath().c_str()); + + if (fAutoStart) + { + CoInitialize(NULL); + + // Get a pointer to the IShellLink interface. + IShellLink* psl = NULL; + HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, + CLSCTX_INPROC_SERVER, IID_IShellLink, + reinterpret_cast<void**>(&psl)); + + if (SUCCEEDED(hres)) + { + // Get the current executable path + TCHAR pszExePath[MAX_PATH]; + GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); + + TCHAR pszArgs[5] = TEXT("-min"); + + // Set the path to the shortcut target + psl->SetPath(pszExePath); + PathRemoveFileSpec(pszExePath); + psl->SetWorkingDirectory(pszExePath); + psl->SetShowCmd(SW_SHOWMINNOACTIVE); + psl->SetArguments(pszArgs); + + // Query IShellLink for the IPersistFile interface for + // saving the shortcut in persistent storage. + IPersistFile* ppf = NULL; + hres = psl->QueryInterface(IID_IPersistFile, + reinterpret_cast<void**>(&ppf)); + if (SUCCEEDED(hres)) + { + WCHAR pwsz[MAX_PATH]; + // Ensure that the string is ANSI. + MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().c_str(), -1, pwsz, MAX_PATH); + // Save the link by calling IPersistFile::Save. + hres = ppf->Save(pwsz, TRUE); + ppf->Release(); + psl->Release(); + CoUninitialize(); + return true; + } + psl->Release(); + } + CoUninitialize(); + return false; + } + return true; +} + +#elif defined(LINUX) + +// Follow the Desktop Application Autostart Spec: +// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html + +boost::filesystem::path GetAutostartDir() +{ + namespace fs = boost::filesystem; + + char* pszConfigHome = getenv("XDG_CONFIG_HOME"); + if (pszConfigHome) return fs::path(pszConfigHome) / fs::path("autostart"); + char* pszHome = getenv("HOME"); + if (pszHome) return fs::path(pszHome) / fs::path(".config/autostart"); + return fs::path(); +} + +boost::filesystem::path GetAutostartFilePath() +{ + return GetAutostartDir() / boost::filesystem::path("bitcoin.desktop"); +} + +bool GetStartOnSystemStartup() +{ + boost::filesystem::ifstream optionFile(GetAutostartFilePath()); + if (!optionFile.good()) + return false; + // Scan through file for "Hidden=true": + string line; + while (!optionFile.eof()) + { + getline(optionFile, line); + if (line.find("Hidden") != string::npos && + line.find("true") != string::npos) + return false; + } + optionFile.close(); + + return true; +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + if (!fAutoStart) + { +#if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 + unlink(GetAutostartFilePath().string().c_str()); +#else + unlink(GetAutostartFilePath().native_file_string().c_str()); +#endif + } + else + { + char pszExePath[MAX_PATH+1]; + memset(pszExePath, 0, sizeof(pszExePath)); + if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) + return false; + + boost::filesystem::create_directories(GetAutostartDir()); + + boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc); + if (!optionFile.good()) + return false; + // Write a bitcoin.desktop file to the autostart directory: + optionFile << "[Desktop Entry]\n"; + optionFile << "Type=Application\n"; + optionFile << "Name=Bitcoin\n"; + optionFile << "Exec=" << pszExePath << " -min\n"; + optionFile << "Terminal=false\n"; + optionFile << "Hidden=false\n"; + optionFile.close(); + } + return true; +} +#else + +// TODO: OSX startup stuff; see: +// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html + +bool GetStartOnSystemStartup() { return false; } +bool SetStartOnSystemStartup(bool fAutoStart) { return false; } + +#endif diff --git a/src/init.h b/src/init.h index 4017f25707..0d60e7549f 100644 --- a/src/init.h +++ b/src/init.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_INIT_H @@ -11,4 +11,7 @@ void Shutdown(void* parg); bool AppInit(int argc, char* argv[]); bool AppInit2(int argc, char* argv[]); +bool GetStartOnSystemStartup(); +bool SetStartOnSystemStartup(bool fAutoStart); + #endif diff --git a/src/irc.cpp b/src/irc.cpp index 5278488dcd..09bacc1658 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -22,22 +22,25 @@ void ThreadIRCSeed2(void* parg); #pragma pack(push, 1) struct ircaddr { - int ip; + struct in_addr ip; short port; }; #pragma pack(pop) -string EncodeAddress(const CAddress& addr) +string EncodeAddress(const CService& addr) { struct ircaddr tmp; - tmp.ip = addr.ip; - tmp.port = addr.port; + if (addr.GetInAddr(&tmp.ip)) + { + tmp.port = htons(addr.GetPort()); - vector<unsigned char> vch(UBEGIN(tmp), UEND(tmp)); - return string("u") + EncodeBase58Check(vch); + vector<unsigned char> vch(UBEGIN(tmp), UEND(tmp)); + return string("u") + EncodeBase58Check(vch); + } + return ""; } -bool DecodeAddress(string str, CAddress& addr) +bool DecodeAddress(string str, CService& addr) { vector<unsigned char> vch; if (!DecodeBase58Check(str.substr(1), vch)) @@ -48,7 +51,7 @@ bool DecodeAddress(string str, CAddress& addr) return false; memcpy(&tmp, &vch[0], sizeof(tmp)); - addr = CAddress(tmp.ip, ntohs(tmp.port), NODE_NETWORK); + addr = CService(tmp.ip, ntohs(tmp.port)); return true; } @@ -73,57 +76,6 @@ static bool Send(SOCKET hSocket, const char* pszSend) return true; } -bool RecvLine(SOCKET hSocket, string& strLine) -{ - strLine = ""; - loop - { - char c; - int nBytes = recv(hSocket, &c, 1, 0); - if (nBytes > 0) - { - if (c == '\n') - continue; - if (c == '\r') - return true; - strLine += c; - if (strLine.size() >= 9000) - return true; - } - else if (nBytes <= 0) - { - if (fShutdown) - return false; - if (nBytes < 0) - { - int nErr = WSAGetLastError(); - if (nErr == WSAEMSGSIZE) - continue; - if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) - { - Sleep(10); - continue; - } - } - if (!strLine.empty()) - return true; - if (nBytes == 0) - { - // socket closed - printf("IRC socket closed\n"); - return false; - } - else - { - // socket error - int nErr = WSAGetLastError(); - printf("IRC recv failed: %d\n", nErr); - return false; - } - } - } -} - bool RecvLineIRC(SOCKET hSocket, string& strLine) { loop @@ -204,7 +156,7 @@ bool RecvCodeLine(SOCKET hSocket, const char* psz1, string& strRet) } } -bool GetIPFromIRC(SOCKET hSocket, string strMyName, unsigned int& ipRet) +bool GetIPFromIRC(SOCKET hSocket, string strMyName, CNetAddr& ipRet) { Send(hSocket, strprintf("USERHOST %s\r", strMyName.c_str()).c_str()); @@ -227,10 +179,10 @@ bool GetIPFromIRC(SOCKET hSocket, string strMyName, unsigned int& ipRet) printf("GetIPFromIRC() got userhost %s\n", strHost.c_str()); if (fUseProxy) return false; - CAddress addr(strHost, 0, true); + CNetAddr addr(strHost, true); if (!addr.IsValid()) return false; - ipRet = addr.ip; + ipRet = addr; return true; } @@ -258,25 +210,21 @@ void ThreadIRCSeed2(void* parg) if (mapArgs.count("-connect") || fNoListen) return; - if (GetBoolArg("-noirc")) + if (!GetBoolArg("-irc", false)) return; + printf("ThreadIRCSeed started\n"); int nErrorWait = 10; int nRetryWait = 10; bool fNameInUse = false; - bool fTOR = (fUseProxy && addrProxy.port == htons(9050)); while (!fShutdown) { - //CAddress addrConnect("216.155.130.130:6667"); // chat.freenode.net - CAddress addrConnect("92.243.23.21", 6667); // irc.lfnet.org - if (!fTOR) - { - //struct hostent* phostent = gethostbyname("chat.freenode.net"); - CAddress addrIRC("irc.lfnet.org", 6667, true); - if (addrIRC.IsValid()) - addrConnect = addrIRC; - } + CService addrConnect("92.243.23.21", 6667); // irc.lfnet.org + + CService addrIRC("irc.lfnet.org", 6667, true); + if (addrIRC.IsValid()) + addrConnect = addrIRC; SOCKET hSocket; if (!ConnectSocket(addrConnect, hSocket)) @@ -330,15 +278,15 @@ void ThreadIRCSeed2(void* parg) Sleep(500); // Get our external IP from the IRC server and re-nick before joining the channel - CAddress addrFromIRC; - if (GetIPFromIRC(hSocket, strMyName, addrFromIRC.ip)) + CNetAddr addrFromIRC; + if (GetIPFromIRC(hSocket, strMyName, addrFromIRC)) { - printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToStringIP().c_str()); + printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToString().c_str()); if (!fUseProxy && addrFromIRC.IsRoutable()) { // IRC lets you to re-nick fGotExternalIP = true; - addrLocalHost.ip = addrFromIRC.ip; + addrLocalHost.SetIP(addrFromIRC); strMyName = EncodeAddress(addrLocalHost); Send(hSocket, strprintf("NICK %s\r", strMyName.c_str()).c_str()); } @@ -393,7 +341,7 @@ void ThreadIRCSeed2(void* parg) if (DecodeAddress(pszName, addr)) { addr.nTime = GetAdjustedTime(); - if (AddAddress(addr, 51 * 60)) + if (addrman.Add(addr, addrConnect, 51 * 60)) printf("IRC got new address: %s\n", addr.ToString().c_str()); nGotIRCAddresses++; } @@ -406,10 +354,6 @@ void ThreadIRCSeed2(void* parg) closesocket(hSocket); hSocket = INVALID_SOCKET; - // IRC usually blocks TOR, so only try once - if (fTOR) - return; - if (GetTime() - nStart > 20 * 60) { nErrorWait /= 3; @@ -1,11 +1,10 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_IRC_H #define BITCOIN_IRC_H -bool RecvLine(SOCKET hSocket, std::string& strLine); void ThreadIRCSeed(void* parg); extern int nGotIRCAddresses; diff --git a/src/key.cpp b/src/key.cpp new file mode 100644 index 0000000000..e0844412d9 --- /dev/null +++ b/src/key.cpp @@ -0,0 +1,117 @@ +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include <openssl/ec.h> +#include <openssl/ecdsa.h> + +// Generate a private key from just the secret parameter +int EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key) +{ + int ok = 0; + BN_CTX *ctx = NULL; + EC_POINT *pub_key = NULL; + + if (!eckey) return 0; + + const EC_GROUP *group = EC_KEY_get0_group(eckey); + + if ((ctx = BN_CTX_new()) == NULL) + goto err; + + pub_key = EC_POINT_new(group); + + if (pub_key == NULL) + goto err; + + if (!EC_POINT_mul(group, pub_key, priv_key, NULL, NULL, ctx)) + goto err; + + EC_KEY_set_private_key(eckey,priv_key); + EC_KEY_set_public_key(eckey,pub_key); + + ok = 1; + +err: + + if (pub_key) + EC_POINT_free(pub_key); + if (ctx != NULL) + BN_CTX_free(ctx); + + return(ok); +} + +// Perform ECDSA key recovery (see SEC1 4.1.6) for curves over (mod p)-fields +// recid selects which key is recovered +// if check is nonzero, additional checks are performed +int ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned char *msg, int msglen, int recid, int check) +{ + if (!eckey) return 0; + + int ret = 0; + BN_CTX *ctx = NULL; + + BIGNUM *x = NULL; + BIGNUM *e = NULL; + BIGNUM *order = NULL; + BIGNUM *sor = NULL; + BIGNUM *eor = NULL; + BIGNUM *field = NULL; + EC_POINT *R = NULL; + EC_POINT *O = NULL; + EC_POINT *Q = NULL; + BIGNUM *rr = NULL; + BIGNUM *zero = NULL; + int n = 0; + int i = recid / 2; + + const EC_GROUP *group = EC_KEY_get0_group(eckey); + if ((ctx = BN_CTX_new()) == NULL) { ret = -1; goto err; } + BN_CTX_start(ctx); + order = BN_CTX_get(ctx); + if (!EC_GROUP_get_order(group, order, ctx)) { ret = -2; goto err; } + x = BN_CTX_get(ctx); + if (!BN_copy(x, order)) { ret=-1; goto err; } + if (!BN_mul_word(x, i)) { ret=-1; goto err; } + if (!BN_add(x, x, ecsig->r)) { ret=-1; goto err; } + field = BN_CTX_get(ctx); + if (!EC_GROUP_get_curve_GFp(group, field, NULL, NULL, ctx)) { ret=-2; goto err; } + if (BN_cmp(x, field) >= 0) { ret=0; goto err; } + if ((R = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + if (!EC_POINT_set_compressed_coordinates_GFp(group, R, x, recid % 2, ctx)) { ret=0; goto err; } + if (check) + { + if ((O = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + if (!EC_POINT_mul(group, O, NULL, R, order, ctx)) { ret=-2; goto err; } + if (!EC_POINT_is_at_infinity(group, O)) { ret = 0; goto err; } + } + if ((Q = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + n = EC_GROUP_get_degree(group); + e = BN_CTX_get(ctx); + if (!BN_bin2bn(msg, msglen, e)) { ret=-1; goto err; } + if (8*msglen > n) BN_rshift(e, e, 8-(n & 7)); + zero = BN_CTX_get(ctx); + if (!BN_zero(zero)) { ret=-1; goto err; } + if (!BN_mod_sub(e, zero, e, order, ctx)) { ret=-1; goto err; } + rr = BN_CTX_get(ctx); + if (!BN_mod_inverse(rr, ecsig->r, order, ctx)) { ret=-1; goto err; } + sor = BN_CTX_get(ctx); + if (!BN_mod_mul(sor, ecsig->s, rr, order, ctx)) { ret=-1; goto err; } + eor = BN_CTX_get(ctx); + if (!BN_mod_mul(eor, e, rr, order, ctx)) { ret=-1; goto err; } + if (!EC_POINT_mul(group, Q, eor, R, sor, ctx)) { ret=-2; goto err; } + if (!EC_KEY_set_public_key(eckey, Q)) { ret=-2; goto err; } + + ret = 1; + +err: + if (ctx) { + BN_CTX_end(ctx); + BN_CTX_free(ctx); + } + if (R != NULL) EC_POINT_free(R); + if (O != NULL) EC_POINT_free(O); + if (Q != NULL) EC_POINT_free(Q); + return ret; +} @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_KEY_H @@ -14,7 +14,6 @@ #include "serialize.h" #include "uint256.h" -#include "base58.h" // secp160k1 // const unsigned int PRIVATE_KEY_SIZE = 192; @@ -39,116 +38,8 @@ // see www.keylength.com // script supports up to 75 for single byte push -// Generate a private key from just the secret parameter -int static inline EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key) -{ - int ok = 0; - BN_CTX *ctx = NULL; - EC_POINT *pub_key = NULL; - - if (!eckey) return 0; - - const EC_GROUP *group = EC_KEY_get0_group(eckey); - - if ((ctx = BN_CTX_new()) == NULL) - goto err; - - pub_key = EC_POINT_new(group); - - if (pub_key == NULL) - goto err; - - if (!EC_POINT_mul(group, pub_key, priv_key, NULL, NULL, ctx)) - goto err; - - EC_KEY_set_private_key(eckey,priv_key); - EC_KEY_set_public_key(eckey,pub_key); - - ok = 1; - -err: - - if (pub_key) - EC_POINT_free(pub_key); - if (ctx != NULL) - BN_CTX_free(ctx); - - return(ok); -} - -// Perform ECDSA key recovery (see SEC1 4.1.6) for curves over (mod p)-fields -// recid selects which key is recovered -// if check is nonzero, additional checks are performed -int static inline ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned char *msg, int msglen, int recid, int check) -{ - if (!eckey) return 0; - - int ret = 0; - BN_CTX *ctx = NULL; - - BIGNUM *x = NULL; - BIGNUM *e = NULL; - BIGNUM *order = NULL; - BIGNUM *sor = NULL; - BIGNUM *eor = NULL; - BIGNUM *field = NULL; - EC_POINT *R = NULL; - EC_POINT *O = NULL; - EC_POINT *Q = NULL; - BIGNUM *rr = NULL; - BIGNUM *zero = NULL; - int n = 0; - int i = recid / 2; - - const EC_GROUP *group = EC_KEY_get0_group(eckey); - if ((ctx = BN_CTX_new()) == NULL) { ret = -1; goto err; } - BN_CTX_start(ctx); - order = BN_CTX_get(ctx); - if (!EC_GROUP_get_order(group, order, ctx)) { ret = -2; goto err; } - x = BN_CTX_get(ctx); - if (!BN_copy(x, order)) { ret=-1; goto err; } - if (!BN_mul_word(x, i)) { ret=-1; goto err; } - if (!BN_add(x, x, ecsig->r)) { ret=-1; goto err; } - field = BN_CTX_get(ctx); - if (!EC_GROUP_get_curve_GFp(group, field, NULL, NULL, ctx)) { ret=-2; goto err; } - if (BN_cmp(x, field) >= 0) { ret=0; goto err; } - if ((R = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } - if (!EC_POINT_set_compressed_coordinates_GFp(group, R, x, recid % 2, ctx)) { ret=0; goto err; } - if (check) - { - if ((O = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } - if (!EC_POINT_mul(group, O, NULL, R, order, ctx)) { ret=-2; goto err; } - if (!EC_POINT_is_at_infinity(group, O)) { ret = 0; goto err; } - } - if ((Q = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } - n = EC_GROUP_get_degree(group); - e = BN_CTX_get(ctx); - if (!BN_bin2bn(msg, msglen, e)) { ret=-1; goto err; } - if (8*msglen > n) BN_rshift(e, e, 8-(n & 7)); - zero = BN_CTX_get(ctx); - if (!BN_zero(zero)) { ret=-1; goto err; } - if (!BN_mod_sub(e, zero, e, order, ctx)) { ret=-1; goto err; } - rr = BN_CTX_get(ctx); - if (!BN_mod_inverse(rr, ecsig->r, order, ctx)) { ret=-1; goto err; } - sor = BN_CTX_get(ctx); - if (!BN_mod_mul(sor, ecsig->s, rr, order, ctx)) { ret=-1; goto err; } - eor = BN_CTX_get(ctx); - if (!BN_mod_mul(eor, e, rr, order, ctx)) { ret=-1; goto err; } - if (!EC_POINT_mul(group, Q, eor, R, sor, ctx)) { ret=-2; goto err; } - if (!EC_KEY_set_public_key(eckey, Q)) { ret=-2; goto err; } - - ret = 1; - -err: - if (ctx) { - BN_CTX_end(ctx); - BN_CTX_free(ctx); - } - if (R != NULL) EC_POINT_free(R); - if (O != NULL) EC_POINT_free(O); - if (Q != NULL) EC_POINT_free(Q); - return ret; -} +int extern EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key); +int extern ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned char *msg, int msglen, int recid, int check); class key_error : public std::runtime_error { @@ -163,21 +54,36 @@ typedef std::vector<unsigned char, secure_allocator<unsigned char> > CPrivKey; // CSecret is a serialization of just the secret parameter (32 bytes) typedef std::vector<unsigned char, secure_allocator<unsigned char> > CSecret; +/** An encapsulated OpenSSL Elliptic Curve key (public and/or private) */ class CKey { protected: EC_KEY* pkey; bool fSet; + bool fCompressedPubKey; + + void SetCompressedPubKey() + { + EC_KEY_set_conv_form(pkey, POINT_CONVERSION_COMPRESSED); + fCompressedPubKey = true; + } public: - CKey() + + void Reset() { + fCompressedPubKey = false; pkey = EC_KEY_new_by_curve_name(NID_secp256k1); if (pkey == NULL) throw key_error("CKey::CKey() : EC_KEY_new_by_curve_name failed"); fSet = false; } + CKey() + { + Reset(); + } + CKey(const CKey& b) { pkey = EC_KEY_dup(b.pkey); @@ -204,10 +110,17 @@ public: return !fSet; } - void MakeNewKey() + bool IsCompressed() const + { + return fCompressedPubKey; + } + + void MakeNewKey(bool fCompressed) { if (!EC_KEY_generate_key(pkey)) throw key_error("CKey::MakeNewKey() : EC_KEY_generate_key failed"); + if (fCompressed) + SetCompressedPubKey(); fSet = true; } @@ -220,7 +133,7 @@ public: return true; } - bool SetSecret(const CSecret& vchSecret) + bool SetSecret(const CSecret& vchSecret, bool fCompressed = false) { EC_KEY_free(pkey); pkey = EC_KEY_new_by_curve_name(NID_secp256k1); @@ -229,16 +142,21 @@ public: if (vchSecret.size() != 32) throw key_error("CKey::SetSecret() : secret must be 32 bytes"); BIGNUM *bn = BN_bin2bn(&vchSecret[0],32,BN_new()); - if (bn == NULL) + if (bn == NULL) throw key_error("CKey::SetSecret() : BN_bin2bn failed"); if (!EC_KEY_regenerate_key(pkey,bn)) + { + BN_clear_free(bn); throw key_error("CKey::SetSecret() : EC_KEY_regenerate_key failed"); + } BN_clear_free(bn); fSet = true; + if (fCompressed || fCompressedPubKey) + SetCompressedPubKey(); return true; } - CSecret GetSecret() const + CSecret GetSecret(bool &fCompressed) const { CSecret vchRet; vchRet.resize(32); @@ -249,6 +167,7 @@ public: int n=BN_bn2bin(bn,&vchRet[32 - nBytes]); if (n != nBytes) throw key_error("CKey::GetSecret(): BN_bn2bin failed"); + fCompressed = fCompressedPubKey; return vchRet; } @@ -270,6 +189,8 @@ public: if (!o2i_ECPublicKey(&pkey, &pbegin, vchPubKey.size())) return false; fSet = true; + if (vchPubKey.size() == 33) + SetCompressedPubKey(); return true; } @@ -287,13 +208,14 @@ public: bool Sign(uint256 hash, std::vector<unsigned char>& vchSig) { - vchSig.clear(); - unsigned char pchSig[10000]; - unsigned int nSize = 0; - if (!ECDSA_sign(0, (unsigned char*)&hash, sizeof(hash), pchSig, &nSize, pkey)) + unsigned int nSize = ECDSA_size(pkey); + vchSig.resize(nSize); // Make sure it is big enough + if (!ECDSA_sign(0, (unsigned char*)&hash, sizeof(hash), &vchSig[0], &nSize, pkey)) + { + vchSig.clear(); return false; - vchSig.resize(nSize); - memcpy(&vchSig[0], pchSig, nSize); + } + vchSig.resize(nSize); // Shrink to fit actual size return true; } @@ -318,6 +240,8 @@ public: { CKey keyRec; keyRec.fSet = true; + if (fCompressedPubKey) + keyRec.SetCompressedPubKey(); if (ECDSA_SIG_recover_key_GFp(keyRec.pkey, sig, (unsigned char*)&hash, sizeof(hash), i, 1) == 1) if (keyRec.GetPubKey() == this->GetPubKey()) { @@ -329,7 +253,7 @@ public: if (nRecId == -1) throw key_error("CKey::SignCompact() : unable to construct recoverable key"); - vchSig[0] = nRecId+27; + vchSig[0] = nRecId+27+(fCompressedPubKey ? 4 : 0); BN_bn2bin(sig->r,&vchSig[33-(nBitsR+7)/8]); BN_bn2bin(sig->s,&vchSig[65-(nBitsS+7)/8]); fOk = true; @@ -346,7 +270,8 @@ public: { if (vchSig.size() != 65) return false; - if (vchSig[0]<27 || vchSig[0]>=31) + int nV = vchSig[0]; + if (nV<27 || nV>=35) return false; ECDSA_SIG *sig = ECDSA_SIG_new(); BN_bin2bn(&vchSig[1],32,sig->r); @@ -354,7 +279,12 @@ public: EC_KEY_free(pkey); pkey = EC_KEY_new_by_curve_name(NID_secp256k1); - if (ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), vchSig[0] - 27, 0) == 1) + if (nV >= 31) + { + SetCompressedPubKey(); + nV -= 4; + } + if (ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), nV - 27, 0) == 1) { fSet = true; ECDSA_SIG_free(sig); @@ -382,10 +312,16 @@ public: return true; } - // Get the address corresponding to this key - CBitcoinAddress GetAddress() const + bool IsValid() { - return CBitcoinAddress(GetPubKey()); + if (!fSet) + return false; + + bool fCompr; + CSecret secret = GetSecret(fCompr); + CKey key2; + key2.SetSecret(secret, fCompr); + return GetPubKey() == key2.GetPubKey(); } }; diff --git a/src/keystore.cpp b/src/keystore.cpp index 68f57e7e0e..23f9e32fa2 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -1,21 +1,12 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" -#include "db.h" #include "crypter.h" - -std::vector<unsigned char> CKeyStore::GenerateNewKey() -{ - RandAddSeedPerfmon(); - CKey key; - key.MakeNewKey(); - if (!AddKey(key)) - throw std::runtime_error("CKeyStore::GenerateNewKey() : AddKey failed"); - return key.GetPubKey(); -} +#include "db.h" +#include "script.h" bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char> &vchPubKeyOut) const { @@ -28,11 +19,43 @@ bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector<unsigned c bool CBasicKeyStore::AddKey(const CKey& key) { + bool fCompressed = false; + CSecret secret = key.GetSecret(fCompressed); CRITICAL_BLOCK(cs_KeyStore) - mapKeys[key.GetAddress()] = key.GetSecret(); + mapKeys[CBitcoinAddress(key.GetPubKey())] = make_pair(secret, fCompressed); return true; } +bool CBasicKeyStore::AddCScript(const CScript& redeemScript) +{ + CRITICAL_BLOCK(cs_KeyStore) + mapScripts[Hash160(redeemScript)] = redeemScript; + return true; +} + +bool CBasicKeyStore::HaveCScript(const uint160& hash) const +{ + bool result; + CRITICAL_BLOCK(cs_KeyStore) + result = (mapScripts.count(hash) > 0); + return result; +} + + +bool CBasicKeyStore::GetCScript(const uint160 &hash, CScript& redeemScriptOut) const +{ + CRITICAL_BLOCK(cs_KeyStore) + { + ScriptMap::const_iterator mi = mapScripts.find(hash); + if (mi != mapScripts.end()) + { + redeemScriptOut = (*mi).second; + return true; + } + } + return false; +} + bool CCryptoKeyStore::SetCrypted() { CRITICAL_BLOCK(cs_KeyStore) @@ -46,16 +69,6 @@ bool CCryptoKeyStore::SetCrypted() return true; } -std::vector<unsigned char> CCryptoKeyStore::GenerateNewKey() -{ - RandAddSeedPerfmon(); - CKey key; - key.MakeNewKey(); - if (!AddKey(key)) - throw std::runtime_error("CCryptoKeyStore::GenerateNewKey() : AddKey failed"); - return key.GetPubKey(); -} - bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn) { CRITICAL_BLOCK(cs_KeyStore) @@ -71,7 +84,10 @@ bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn) CSecret vchSecret; if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret, Hash(vchPubKey.begin(), vchPubKey.end()), vchSecret)) return false; + if (vchSecret.size() != 32) + return false; CKey key; + key.SetPubKey(vchPubKey); key.SetSecret(vchSecret); if (key.GetPubKey() == vchPubKey) break; @@ -94,7 +110,8 @@ bool CCryptoKeyStore::AddKey(const CKey& key) std::vector<unsigned char> vchCryptedSecret; std::vector<unsigned char> vchPubKey = key.GetPubKey(); - if (!EncryptSecret(vMasterKey, key.GetSecret(), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) + bool fCompressed; + if (!EncryptSecret(vMasterKey, key.GetSecret(fCompressed), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) return false; if (!AddCryptedKey(key.GetPubKey(), vchCryptedSecret)) @@ -131,6 +148,9 @@ bool CCryptoKeyStore::GetKey(const CBitcoinAddress &address, CKey& keyOut) const CSecret vchSecret; if (!DecryptSecret(vMasterKey, vchCryptedSecret, Hash(vchPubKey.begin(), vchPubKey.end()), vchSecret)) return false; + if (vchSecret.size() != 32) + return false; + keyOut.SetPubKey(vchPubKey); keyOut.SetSecret(vchSecret); return true; } @@ -163,14 +183,15 @@ bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial& vMasterKeyIn) return false; fUseCrypto = true; - CKey key; BOOST_FOREACH(KeyMap::value_type& mKey, mapKeys) { - if (!key.SetSecret(mKey.second)) + CKey key; + if (!key.SetSecret(mKey.second.first, mKey.second.second)) return false; const std::vector<unsigned char> vchPubKey = key.GetPubKey(); std::vector<unsigned char> vchCryptedSecret; - if (!EncryptSecret(vMasterKeyIn, key.GetSecret(), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) + bool fCompressed; + if (!EncryptSecret(vMasterKeyIn, key.GetSecret(fCompressed), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) return false; if (!AddCryptedKey(vchPubKey, vchCryptedSecret)) return false; diff --git a/src/keystore.h b/src/keystore.h index 4d889146fc..c32db2620a 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -1,13 +1,14 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_KEYSTORE_H #define BITCOIN_KEYSTORE_H #include "crypter.h" +#include "script.h" -// A virtual base class for key stores +/** A virtual base class for key stores */ class CKeyStore { protected: @@ -19,26 +20,34 @@ public: // Check whether a key corresponding to a given address is present in the store. virtual bool HaveKey(const CBitcoinAddress &address) const =0; - - // Retrieve a key corresponding to a given address from the store. - // Return true if succesful. virtual bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const =0; - - // Retrieve only the public key corresponding to a given address. - // This may succeed even if GetKey fails (e.g., encrypted wallets) + virtual void GetKeys(std::set<CBitcoinAddress> &setAddress) const =0; virtual bool GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char>& vchPubKeyOut) const; - // Generate a new key, and add it to the store - virtual std::vector<unsigned char> GenerateNewKey(); + // Support for BIP 0013 : see https://en.bitcoin.it/wiki/BIP_0013 + virtual bool AddCScript(const CScript& redeemScript) =0; + virtual bool HaveCScript(const uint160 &hash) const =0; + virtual bool GetCScript(const uint160 &hash, CScript& redeemScriptOut) const =0; + + virtual bool GetSecret(const CBitcoinAddress &address, CSecret& vchSecret, bool &fCompressed) const + { + CKey key; + if (!GetKey(address, key)) + return false; + vchSecret = key.GetSecret(fCompressed); + return true; + } }; -typedef std::map<CBitcoinAddress, CSecret> KeyMap; +typedef std::map<CBitcoinAddress, std::pair<CSecret, bool> > KeyMap; +typedef std::map<uint160, CScript > ScriptMap; -// Basic key store, that keeps keys in an address->secret map +/** Basic key store, that keeps keys in an address->secret map */ class CBasicKeyStore : public CKeyStore { protected: KeyMap mapKeys; + ScriptMap mapScripts; public: bool AddKey(const CKey& key); @@ -49,25 +58,43 @@ public: result = (mapKeys.count(address) > 0); return result; } - bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const + void GetKeys(std::set<CBitcoinAddress> &setAddress) const + { + setAddress.clear(); + CRITICAL_BLOCK(cs_KeyStore) + { + KeyMap::const_iterator mi = mapKeys.begin(); + while (mi != mapKeys.end()) + { + setAddress.insert((*mi).first); + mi++; + } + } + } + bool GetKey(const CBitcoinAddress &address, CKey &keyOut) const { CRITICAL_BLOCK(cs_KeyStore) { KeyMap::const_iterator mi = mapKeys.find(address); if (mi != mapKeys.end()) { - keyOut.SetSecret((*mi).second); + keyOut.Reset(); + keyOut.SetSecret((*mi).second.first, (*mi).second.second); return true; } } return false; } + virtual bool AddCScript(const CScript& redeemScript); + virtual bool HaveCScript(const uint160 &hash) const; + virtual bool GetCScript(const uint160 &hash, CScript& redeemScriptOut) const; }; typedef std::map<CBitcoinAddress, std::pair<std::vector<unsigned char>, std::vector<unsigned char> > > CryptedKeyMap; -// Keystore which keeps the private keys encrypted -// It derives from the basic key store, which is used if no encryption is active. +/** Keystore which keeps the private keys encrypted. + * It derives from the basic key store, which is used if no encryption is active. + */ class CCryptoKeyStore : public CBasicKeyStore { private: @@ -119,7 +146,6 @@ public: } virtual bool AddCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret); - std::vector<unsigned char> GenerateNewKey(); bool AddKey(const CKey& key); bool HaveKey(const CBitcoinAddress &address) const { @@ -133,6 +159,21 @@ public: } bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const; bool GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char>& vchPubKeyOut) const; + void GetKeys(std::set<CBitcoinAddress> &setAddress) const + { + if (!IsCrypted()) + { + CBasicKeyStore::GetKeys(setAddress); + return; + } + setAddress.clear(); + CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin(); + while (mi != mapCryptedKeys.end()) + { + setAddress.insert((*mi).first); + mi++; + } + } }; #endif diff --git a/src/main.cpp b/src/main.cpp index 47f1090727..7c49316b4a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,11 +1,13 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" +#include "checkpoints.h" #include "db.h" #include "net.h" #include "init.h" +#include <boost/algorithm/string/replace.hpp> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> @@ -16,6 +18,11 @@ using namespace boost; // Global state // +// Name of client reported in the 'version' message. Report the same name +// for both bitcoind and bitcoin-qt, to make it harder for attackers to +// target servers or GUI users specifically. +const std::string CLIENT_NAME("Satoshi"); + CCriticalSection cs_setpwalletRegistered; set<CWallet*> setpwalletRegistered; @@ -29,8 +36,6 @@ map<COutPoint, CInPoint> mapNextTx; map<uint256, CBlockIndex*> mapBlockIndex; uint256 hashGenesisBlock("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"); static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32); -const int nTotalBlocksEstimate = 140700; // Conservative estimate of total nr of blocks on main chain -const int nInitialBlockThreshold = 120; // Regard blocks up until N-threshold as "initial download" CBlockIndex* pindexGenesisBlock = NULL; int nBestHeight = -1; CBigNum bnBestChainWork = 0; @@ -47,22 +52,17 @@ multimap<uint256, CBlock*> mapOrphanBlocksByPrev; map<uint256, CDataStream*> mapOrphanTransactions; multimap<uint256, CDataStream*> mapOrphanTransactionsByPrev; +// Constant stuff for coinbase transactions we create: +CScript COINBASE_FLAGS; + +const string strMessageMagic = "Bitcoin Signed Message:\n"; double dHashesPerSec; int64 nHPSTimerStart; // Settings -int fGenerateBitcoins = false; int64 nTransactionFee = 0; -int fLimitProcessors = false; -int nLimitProcessors = 1; -int fMinimizeToTray = true; -int fMinimizeOnClose = true; -#if USE_UPNP -int fUseUPnP = true; -#else -int fUseUPnP = false; -#endif + ////////////////////////////////////////////////////////////////////////////// @@ -167,13 +167,14 @@ void static ResendWalletTransactions() // mapOrphanTransactions // -void static AddOrphanTx(const CDataStream& vMsg) +void AddOrphanTx(const CDataStream& vMsg) { CTransaction tx; CDataStream(vMsg) >> tx; uint256 hash = tx.GetHash(); if (mapOrphanTransactions.count(hash)) return; + CDataStream* pvMsg = mapOrphanTransactions[hash] = new CDataStream(vMsg); BOOST_FOREACH(const CTxIn& txin, tx.vin) mapOrphanTransactionsByPrev.insert(make_pair(txin.prevout.hash, pvMsg)); @@ -201,6 +202,23 @@ void static EraseOrphanTx(uint256 hash) mapOrphanTransactions.erase(hash); } +int LimitOrphanTxSize(int nMaxOrphans) +{ + int nEvicted = 0; + while (mapOrphanTransactions.size() > nMaxOrphans) + { + // Evict a random orphan: + std::vector<unsigned char> randbytes(32); + RAND_bytes(&randbytes[0], 32); + uint256 randomhash(randbytes); + map<uint256, CDataStream*>::iterator it = mapOrphanTransactions.lower_bound(randomhash); + if (it == mapOrphanTransactions.end()) + it = mapOrphanTransactions.begin(); + EraseOrphanTx(it->first); + ++nEvicted; + } + return nEvicted; +} @@ -241,6 +259,96 @@ bool CTransaction::ReadFromDisk(COutPoint prevout) return ReadFromDisk(txdb, prevout, txindex); } +bool CTransaction::IsStandard() const +{ + BOOST_FOREACH(const CTxIn& txin, vin) + { + // Biggest 'standard' txin is a 3-signature 3-of-3 CHECKMULTISIG + // pay-to-script-hash, which is 3 ~80-byte signatures, 3 + // ~65-byte public keys, plus a few script ops. + if (txin.scriptSig.size() > 500) + return false; + if (!txin.scriptSig.IsPushOnly()) + return false; + } + BOOST_FOREACH(const CTxOut& txout, vout) + if (!::IsStandard(txout.scriptPubKey)) + return false; + return true; +} + +// +// Check transaction inputs, and make sure any +// pay-to-script-hash transactions are evaluating IsStandard scripts +// +// Why bother? To avoid denial-of-service attacks; an attacker +// can submit a standard HASH... OP_EQUAL transaction, +// which will get accepted into blocks. The redemption +// script can be anything; an attacker could use a very +// expensive-to-check-upon-redemption script like: +// DUP CHECKSIG DROP ... repeated 100 times... OP_1 +// +bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const +{ + if (IsCoinBase()) + return true; // Coinbases don't use vin normally + + for (int i = 0; i < vin.size(); i++) + { + const CTxOut& prev = GetOutputFor(vin[i], mapInputs); + + vector<vector<unsigned char> > vSolutions; + txnouttype whichType; + // get the scriptPubKey corresponding to this input: + const CScript& prevScript = prev.scriptPubKey; + if (!Solver(prevScript, whichType, vSolutions)) + return false; + int nArgsExpected = ScriptSigArgsExpected(whichType, vSolutions); + + // Transactions with extra stuff in their scriptSigs are + // non-standard. Note that this EvalScript() call will + // be quick, because if there are any operations + // beside "push data" in the scriptSig the + // IsStandard() call returns false + vector<vector<unsigned char> > stack; + if (!EvalScript(stack, vin[i].scriptSig, *this, i, 0)) + return false; + + if (whichType == TX_SCRIPTHASH) + { + if (stack.empty()) + return false; + CScript subscript(stack.back().begin(), stack.back().end()); + vector<vector<unsigned char> > vSolutions2; + txnouttype whichType2; + if (!Solver(subscript, whichType2, vSolutions2)) + return false; + if (whichType2 == TX_SCRIPTHASH) + return false; + nArgsExpected += ScriptSigArgsExpected(whichType2, vSolutions2); + } + + if (stack.size() != nArgsExpected) + return false; + } + + return true; +} + +int +CTransaction::GetLegacySigOpCount() const +{ + int nSigOps = 0; + BOOST_FOREACH(const CTxIn& txin, vin) + { + nSigOps += txin.scriptSig.GetSigOpCount(false); + } + BOOST_FOREACH(const CTxOut& txout, vout) + { + nSigOps += txout.scriptPubKey.GetSigOpCount(false); + } + return nSigOps; +} int CMerkleTx::SetMerkleBranch(const CBlock* pblock) @@ -361,18 +469,9 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi return DoS(100, error("AcceptToMemoryPool() : coinbase as individual tx")); // To help v0.1.5 clients who would see it as a negative number - if ((int64)nLockTime > INT_MAX) + if ((int64)nLockTime > std::numeric_limits<int>::max()) return error("AcceptToMemoryPool() : not accepting nLockTime beyond 2038 yet"); - // Safety limits - unsigned int nSize = ::GetSerializeSize(*this, SER_NETWORK); - // Checking ECDSA signatures is a CPU bottleneck, so to avoid denial-of-service - // attacks disallow transactions with more than one SigOp per 34 bytes. - // 34 bytes because a TxOut is: - // 20-byte address + 8 byte bitcoin amount + 5 bytes of ops + 1 byte script length - if (GetSigOpCount() > nSize / 34 || nSize < 100) - return error("AcceptToMemoryPool() : transaction with out-of-bounds SigOpCount"); - // Rather not work on nonstandard transactions (unless -testnet) if (!fTestNet && !IsStandard()) return error("AcceptToMemoryPool() : nonstandard transaction type"); @@ -416,18 +515,31 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi if (fCheckInputs) { - // Check against previous transactions + MapPrevTx mapInputs; map<uint256, CTxIndex> mapUnused; - int64 nFees = 0; - if (!ConnectInputs(txdb, mapUnused, CDiskTxPos(1,1,1), pindexBest, nFees, false, false)) + bool fInvalid = false; + if (!FetchInputs(txdb, mapUnused, false, false, mapInputs, fInvalid)) { + if (fInvalid) + return error("AcceptToMemoryPool() : FetchInputs found invalid tx %s", hash.ToString().substr(0,10).c_str()); if (pfMissingInputs) *pfMissingInputs = true; - return error("AcceptToMemoryPool() : ConnectInputs failed %s", hash.ToString().substr(0,10).c_str()); + return error("AcceptToMemoryPool() : FetchInputs failed %s", hash.ToString().substr(0,10).c_str()); } + // Check for non-standard pay-to-script-hash in inputs + if (!AreInputsStandard(mapInputs) && !fTestNet) + return error("AcceptToMemoryPool() : nonstandard transaction input"); + + // Note: if you modify this code to accept non-standard transactions, then + // you should add code here to check that the transaction does a + // reasonable number of ECDSA signature verifications. + + int64 nFees = GetValueIn(mapInputs)-GetValueOut(); + unsigned int nSize = ::GetSerializeSize(*this, SER_NETWORK); + // Don't accept it if it can't get into a block - if (nFees < GetMinFee(1000, true, true)) + if (nFees < GetMinFee(1000, true, GMF_RELAY)) return error("AcceptToMemoryPool() : not enough fees"); // Continuously rate-limit free transactions @@ -454,6 +566,13 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi dFreeCount += nSize; } } + + // Check against previous transactions + // This is done last to help prevent CPU exhaustion denial-of-service attacks. + if (!ConnectInputs(mapInputs, mapUnused, CDiskTxPos(1,1,1), pindexBest, false, false)) + { + return error("AcceptToMemoryPool() : ConnectInputs failed %s", hash.ToString().substr(0,10).c_str()); + } } // Store transaction in memory @@ -482,8 +601,11 @@ bool CTransaction::AcceptToMemoryPool(bool fCheckInputs, bool* pfMissingInputs) return AcceptToMemoryPool(txdb, fCheckInputs, pfMissingInputs); } +uint64 nPooledTx = 0; + bool CTransaction::AddToMemoryPoolUnchecked() { + printf("AcceptToMemoryPoolUnchecked(): size %lu\n", mapTransactions.size()); // Add to memory pool without checking anything. Don't call this directly, // call AcceptToMemoryPool to properly check the transaction first. CRITICAL_BLOCK(cs_mapTransactions) @@ -493,6 +615,7 @@ bool CTransaction::AddToMemoryPoolUnchecked() for (int i = 0; i < vin.size(); i++) mapNextTx[vin[i].prevout] = CInPoint(&mapTransactions[hash], i); nTransactionsUpdated++; + ++nPooledTx; } return true; } @@ -503,10 +626,15 @@ bool CTransaction::RemoveFromMemoryPool() // Remove transaction from memory pool CRITICAL_BLOCK(cs_mapTransactions) { - BOOST_FOREACH(const CTxIn& txin, vin) - mapNextTx.erase(txin.prevout); - mapTransactions.erase(GetHash()); - nTransactionsUpdated++; + uint256 hash = GetHash(); + if (mapTransactions.count(hash)) + { + BOOST_FOREACH(const CTxIn& txin, vin) + mapNextTx.erase(txin.prevout); + mapTransactions.erase(hash); + nTransactionsUpdated++; + --nPooledTx; + } } return true; } @@ -516,7 +644,7 @@ bool CTransaction::RemoveFromMemoryPool() -int CMerkleTx::GetDepthInMainChain(int& nHeightRet) const +int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const { if (hashBlock == 0 || nIndex == -1) return 0; @@ -537,7 +665,7 @@ int CMerkleTx::GetDepthInMainChain(int& nHeightRet) const fMerkleVerified = true; } - nHeightRet = pindex->nHeight; + pindexRet = pindex; return pindexBest->nHeight - pindex->nHeight + 1; } @@ -659,19 +787,65 @@ int64 static GetBlockValue(int nHeight, int64 nFees) return nSubsidy + nFees; } -unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast) +static const int64 nTargetTimespan = 14 * 24 * 60 * 60; // two weeks +static const int64 nTargetSpacing = 10 * 60; +static const int64 nInterval = nTargetTimespan / nTargetSpacing; + +// +// minimum amount of work that could possibly be required nTime after +// minimum work required was nBase +// +unsigned int ComputeMinWork(unsigned int nBase, int64 nTime) +{ + // Testnet has min-difficulty blocks + // after nTargetSpacing*2 time between blocks: + if (fTestNet && nTime > nTargetSpacing*2) + return bnProofOfWorkLimit.GetCompact(); + + CBigNum bnResult; + bnResult.SetCompact(nBase); + while (nTime > 0 && bnResult < bnProofOfWorkLimit) + { + // Maximum 400% adjustment... + bnResult *= 4; + // ... in best-case exactly 4-times-normal target time + nTime -= nTargetTimespan*4; + } + if (bnResult > bnProofOfWorkLimit) + bnResult = bnProofOfWorkLimit; + return bnResult.GetCompact(); +} + +unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlock *pblock) { - const int64 nTargetTimespan = 14 * 24 * 60 * 60; // two weeks - const int64 nTargetSpacing = 10 * 60; - const int64 nInterval = nTargetTimespan / nTargetSpacing; + unsigned int nProofOfWorkLimit = bnProofOfWorkLimit.GetCompact(); // Genesis block if (pindexLast == NULL) - return bnProofOfWorkLimit.GetCompact(); + return nProofOfWorkLimit; // Only change once per interval if ((pindexLast->nHeight+1) % nInterval != 0) + { + // Special rules for testnet after 15 Feb 2012: + if (fTestNet && pblock->nTime > 1329264000) + { + // If the new block's timestamp is more than 2* 10 minutes + // then allow mining of a min-difficulty block. + if (pblock->nTime - pindexLast->nTime > nTargetSpacing*2) + return nProofOfWorkLimit; + else + { + // Return the last non-special-min-difficulty-rules-block + const CBlockIndex* pindex = pindexLast; + while (pindex->pprev && pindex->nHeight % nInterval != 0 && pindex->nBits == nProofOfWorkLimit) + pindex = pindex->pprev; + return pindex->nBits; + } + } + return pindexLast->nBits; + } // Go back by what we want to be 14 days worth of blocks const CBlockIndex* pindexFirst = pindexLast; @@ -721,28 +895,15 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits) return true; } -// Return conservative estimate of total number of blocks, 0 if unknown -int GetTotalBlocksEstimate() -{ - if(fTestNet) - { - return 0; - } - else - { - return nTotalBlocksEstimate; - } -} - // Return maximum amount of blocks that other nodes claim to have int GetNumBlocksOfPeers() { - return std::max(cPeerBlockCounts.median(), GetTotalBlocksEstimate()); + return std::max(cPeerBlockCounts.median(), Checkpoints::GetTotalBlocksEstimate()); } bool IsInitialBlockDownload() { - if (pindexBest == NULL || nBestHeight < (GetTotalBlocksEstimate()-nInitialBlockThreshold)) + if (pindexBest == NULL || nBestHeight < Checkpoints::GetTotalBlocksEstimate()) return true; static int64 nLastUpdate; static CBlockIndex* pindexLastBest; @@ -769,6 +930,15 @@ void static InvalidChainFound(CBlockIndex* pindexNew) printf("InvalidChainFound: WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.\n"); } +void CBlock::UpdateTime(const CBlockIndex* pindexPrev) +{ + nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + + // Updating time can change work required on testnet: + if (fTestNet) + nBits = GetNextWorkRequired(pindexPrev, this); +} + @@ -806,15 +976,135 @@ bool CTransaction::DisconnectInputs(CTxDB& txdb) } // Remove transaction from index - if (!txdb.EraseTxIndex(*this)) - return error("DisconnectInputs() : EraseTxPos failed"); + // This can fail if a duplicate of this transaction was in a chain that got + // reorganized away. This is only possible if this transaction was completely + // spent, so erasing it would be a no-op anway. + txdb.EraseTxIndex(*this); return true; } -bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPool, CDiskTxPos posThisTx, - CBlockIndex* pindexBlock, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee) +bool CTransaction::FetchInputs(CTxDB& txdb, const map<uint256, CTxIndex>& mapTestPool, + bool fBlock, bool fMiner, MapPrevTx& inputsRet, bool& fInvalid) +{ + // FetchInputs can return false either because we just haven't seen some inputs + // (in which case the transaction should be stored as an orphan) + // or because the transaction is malformed (in which case the transaction should + // be dropped). If tx is definitely invalid, fInvalid will be set to true. + fInvalid = false; + + if (IsCoinBase()) + return true; // Coinbase transactions have no inputs to fetch. + + for (int i = 0; i < vin.size(); i++) + { + COutPoint prevout = vin[i].prevout; + if (inputsRet.count(prevout.hash)) + continue; // Got it already + + // Read txindex + CTxIndex& txindex = inputsRet[prevout.hash].first; + bool fFound = true; + if ((fBlock || fMiner) && mapTestPool.count(prevout.hash)) + { + // Get txindex from current proposed changes + txindex = mapTestPool.find(prevout.hash)->second; + } + else + { + // Read txindex from txdb + fFound = txdb.ReadTxIndex(prevout.hash, txindex); + } + if (!fFound && (fBlock || fMiner)) + return fMiner ? false : error("FetchInputs() : %s prev tx %s index entry not found", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); + + // Read txPrev + CTransaction& txPrev = inputsRet[prevout.hash].second; + if (!fFound || txindex.pos == CDiskTxPos(1,1,1)) + { + // Get prev tx from single transactions in memory + CRITICAL_BLOCK(cs_mapTransactions) + { + if (!mapTransactions.count(prevout.hash)) + return error("FetchInputs() : %s mapTransactions prev not found %s", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); + txPrev = mapTransactions[prevout.hash]; + } + if (!fFound) + txindex.vSpent.resize(txPrev.vout.size()); + } + else + { + // Get prev tx from disk + if (!txPrev.ReadFromDisk(txindex.pos)) + return error("FetchInputs() : %s ReadFromDisk prev tx %s failed", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); + } + } + + // Make sure all prevout.n's are valid: + for (int i = 0; i < vin.size(); i++) + { + const COutPoint prevout = vin[i].prevout; + assert(inputsRet.count(prevout.hash) != 0); + const CTxIndex& txindex = inputsRet[prevout.hash].first; + const CTransaction& txPrev = inputsRet[prevout.hash].second; + if (prevout.n >= txPrev.vout.size() || prevout.n >= txindex.vSpent.size()) + { + // Revisit this if/when transaction replacement is implemented and allows + // adding inputs: + fInvalid = true; + return DoS(100, error("FetchInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str())); + } + } + + return true; +} + +const CTxOut& CTransaction::GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const +{ + MapPrevTx::const_iterator mi = inputs.find(input.prevout.hash); + if (mi == inputs.end()) + throw std::runtime_error("CTransaction::GetOutputFor() : prevout.hash not found"); + + const CTransaction& txPrev = (mi->second).second; + if (input.prevout.n >= txPrev.vout.size()) + throw std::runtime_error("CTransaction::GetOutputFor() : prevout.n out of range"); + + return txPrev.vout[input.prevout.n]; +} + +int64 CTransaction::GetValueIn(const MapPrevTx& inputs) const +{ + if (IsCoinBase()) + return 0; + + int64 nResult = 0; + for (int i = 0; i < vin.size(); i++) + { + nResult += GetOutputFor(vin[i], inputs).nValue; + } + return nResult; + +} + +int CTransaction::GetP2SHSigOpCount(const MapPrevTx& inputs) const +{ + if (IsCoinBase()) + return 0; + + int nSigOps = 0; + for (int i = 0; i < vin.size(); i++) + { + const CTxOut& prevout = GetOutputFor(vin[i], inputs); + if (prevout.scriptPubKey.IsPayToScriptHash()) + nSigOps += prevout.scriptPubKey.GetSigOpCount(vin[i].scriptSig); + } + return nSigOps; +} + +bool CTransaction::ConnectInputs(MapPrevTx inputs, + map<uint256, CTxIndex>& mapTestPool, const CDiskTxPos& posThisTx, + const CBlockIndex* pindexBlock, bool fBlock, bool fMiner, bool fStrictPayToScriptHash) { // Take over previous transactions' spent pointers // fBlock is true when this is called from AcceptBlock when a new best-block is added to the blockchain @@ -823,64 +1113,23 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPoo if (!IsCoinBase()) { int64 nValueIn = 0; + int64 nFees = 0; for (int i = 0; i < vin.size(); i++) { COutPoint prevout = vin[i].prevout; - - // Read txindex - CTxIndex txindex; - bool fFound = true; - if ((fBlock || fMiner) && mapTestPool.count(prevout.hash)) - { - // Get txindex from current proposed changes - txindex = mapTestPool[prevout.hash]; - } - else - { - // Read txindex from txdb - fFound = txdb.ReadTxIndex(prevout.hash, txindex); - } - if (!fFound && (fBlock || fMiner)) - return fMiner ? false : error("ConnectInputs() : %s prev tx %s index entry not found", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); - - // Read txPrev - CTransaction txPrev; - if (!fFound || txindex.pos == CDiskTxPos(1,1,1)) - { - // Get prev tx from single transactions in memory - CRITICAL_BLOCK(cs_mapTransactions) - { - if (!mapTransactions.count(prevout.hash)) - return error("ConnectInputs() : %s mapTransactions prev not found %s", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); - txPrev = mapTransactions[prevout.hash]; - } - if (!fFound) - txindex.vSpent.resize(txPrev.vout.size()); - } - else - { - // Get prev tx from disk - if (!txPrev.ReadFromDisk(txindex.pos)) - return error("ConnectInputs() : %s ReadFromDisk prev tx %s failed", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); - } + assert(inputs.count(prevout.hash) > 0); + CTxIndex& txindex = inputs[prevout.hash].first; + CTransaction& txPrev = inputs[prevout.hash].second; if (prevout.n >= txPrev.vout.size() || prevout.n >= txindex.vSpent.size()) return DoS(100, error("ConnectInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str())); // If prev is coinbase, check that it's matured if (txPrev.IsCoinBase()) - for (CBlockIndex* pindex = pindexBlock; pindex && pindexBlock->nHeight - pindex->nHeight < COINBASE_MATURITY; pindex = pindex->pprev) + for (const CBlockIndex* pindex = pindexBlock; pindex && pindexBlock->nHeight - pindex->nHeight < COINBASE_MATURITY; pindex = pindex->pprev) if (pindex->nBlockPos == txindex.pos.nBlockPos && pindex->nFile == txindex.pos.nFile) return error("ConnectInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight); - // Skip ECDSA signature verification when connecting blocks (fBlock=true) during initial download - // (before the last blockchain checkpoint). This is safe because block merkle hashes are - // still computed and checked, and any change will be caught at the next checkpoint. - if (!(fBlock && IsInitialBlockDownload())) - // Verify signature - if (!VerifySignature(txPrev, *this, i)) - return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str())); - // Check for conflicts (double-spend) // This doesn't trigger the DoS code on purpose; if it did, it would make it easier // for an attacker to attempt to split the network. @@ -892,6 +1141,23 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPoo if (!MoneyRange(txPrev.vout[prevout.n].nValue) || !MoneyRange(nValueIn)) return DoS(100, error("ConnectInputs() : txin values out of range")); + // Skip ECDSA signature verification when connecting blocks (fBlock=true) + // before the last blockchain checkpoint. This is safe because block merkle hashes are + // still computed and checked, and any change will be caught at the next checkpoint. + if (!(fBlock && (nBestHeight < Checkpoints::GetTotalBlocksEstimate()))) + { + // Verify signature + if (!VerifySignature(txPrev, *this, i, fStrictPayToScriptHash, 0)) + { + // only during transition phase for P2SH: do not invoke anti-DoS code for + // potentially old clients relaying bad P2SH transactions + if (fStrictPayToScriptHash && VerifySignature(txPrev, *this, i, false, 0)) + return error("ConnectInputs() : %s P2SH VerifySignature failed", GetHash().ToString().substr(0,10).c_str()); + + return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str())); + } + } + // Mark outpoints as spent txindex.vSpent[prevout.n] = posThisTx; @@ -909,24 +1175,11 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPoo int64 nTxFee = nValueIn - GetValueOut(); if (nTxFee < 0) return DoS(100, error("ConnectInputs() : %s nTxFee < 0", GetHash().ToString().substr(0,10).c_str())); - if (nTxFee < nMinFee) - return false; nFees += nTxFee; if (!MoneyRange(nFees)) return DoS(100, error("ConnectInputs() : nFees out of range")); } - if (fBlock) - { - // Add transaction to changes - mapTestPool[GetHash()] = CTxIndex(posThisTx, vout.size()); - } - else if (fMiner) - { - // Add transaction to test pool - mapTestPool[GetHash()] = CTxIndex(CDiskTxPos(1,1,1), vout.size()); - } - return true; } @@ -952,7 +1205,7 @@ bool CTransaction::ClientConnectInputs() return false; // Verify signature - if (!VerifySignature(txPrev, *this, i)) + if (!VerifySignature(txPrev, *this, i, true, 0)) return error("ConnectInputs() : VerifySignature failed"); ///// this is redundant with the mapNextTx stuff, not sure which I want to get rid of @@ -1005,19 +1258,71 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) if (!CheckBlock()) return false; + // Do not allow blocks that contain transactions which 'overwrite' older transactions, + // unless those are already completely spent. + // If such overwrites are allowed, coinbases and transactions depending upon those + // can be duplicated to remove the ability to spend the first instance -- even after + // being sent to another address. + // See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information. + // This logic is not necessary for memory pool transactions, as AcceptToMemoryPool + // already refuses previously-known transaction id's entirely. + // This rule applies to all blocks whose timestamp is after March 15, 2012, 0:00 UTC. + // On testnet it is enabled as of februari 20, 2012, 0:00 UTC. + if (pindex->nTime > 1331769600 || (fTestNet && pindex->nTime > 1329696000)) + BOOST_FOREACH(CTransaction& tx, vtx) + { + CTxIndex txindexOld; + if (txdb.ReadTxIndex(tx.GetHash(), txindexOld)) + BOOST_FOREACH(CDiskTxPos &pos, txindexOld.vSpent) + if (pos.IsNull()) + return false; + } + + // BIP16 didn't become active until Apr 1 2012 (Feb 15 on testnet) + int64 nBIP16SwitchTime = fTestNet ? 1329264000 : 1333238400; + bool fStrictPayToScriptHash = (pindex->nTime >= nBIP16SwitchTime); + //// issue here: it doesn't know the version unsigned int nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK) - 1 + GetSizeOfCompactSize(vtx.size()); map<uint256, CTxIndex> mapQueuedChanges; int64 nFees = 0; + int nSigOps = 0; BOOST_FOREACH(CTransaction& tx, vtx) { + nSigOps += tx.GetLegacySigOpCount(); + if (nSigOps > MAX_BLOCK_SIGOPS) + return DoS(100, error("ConnectBlock() : too many sigops")); + CDiskTxPos posThisTx(pindex->nFile, pindex->nBlockPos, nTxPos); nTxPos += ::GetSerializeSize(tx, SER_DISK); - if (!tx.ConnectInputs(txdb, mapQueuedChanges, posThisTx, pindex, nFees, true, false)) - return false; + MapPrevTx mapInputs; + if (!tx.IsCoinBase()) + { + bool fInvalid; + if (!tx.FetchInputs(txdb, mapQueuedChanges, true, false, mapInputs, fInvalid)) + return false; + + if (fStrictPayToScriptHash) + { + // Add in sigops done by pay-to-script-hash inputs; + // this is to prevent a "rogue miner" from creating + // an incredibly-expensive-to-validate block. + nSigOps += tx.GetP2SHSigOpCount(mapInputs); + if (nSigOps > MAX_BLOCK_SIGOPS) + return DoS(100, error("ConnectBlock() : too many sigops")); + } + + nFees += tx.GetValueIn(mapInputs)-tx.GetValueOut(); + + if (!tx.ConnectInputs(mapInputs, mapQueuedChanges, posThisTx, pindex, true, false, fStrictPayToScriptHash)) + return false; + } + + mapQueuedChanges[tx.GetHash()] = CTxIndex(posThisTx, tx.vout.size()); } + // Write queued txindex changes for (map<uint256, CTxIndex>::iterator mi = mapQueuedChanges.begin(); mi != mapQueuedChanges.end(); ++mi) { @@ -1074,6 +1379,9 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) vConnect.push_back(pindex); reverse(vConnect.begin(), vConnect.end()); + printf("REORGANIZE: Disconnect %i blocks; %s..%s\n", vDisconnect.size(), pfork->GetBlockHash().ToString().substr(0,20).c_str(), pindexBest->GetBlockHash().ToString().substr(0,20).c_str()); + printf("REORGANIZE: Connect %i blocks; %s..%s\n", vConnect.size(), pfork->GetBlockHash().ToString().substr(0,20).c_str(), pindexNew->GetBlockHash().ToString().substr(0,20).c_str()); + // Disconnect shorter branch vector<CTransaction> vResurrect; BOOST_FOREACH(CBlockIndex* pindex, vDisconnect) @@ -1082,7 +1390,7 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) if (!block.ReadFromDisk(pindex)) return error("Reorganize() : ReadFromDisk for disconnect failed"); if (!block.DisconnectBlock(txdb, pindex)) - return error("Reorganize() : DisconnectBlock failed"); + return error("Reorganize() : DisconnectBlock %s failed", pindex->GetBlockHash().ToString().substr(0,20).c_str()); // Queue memory transactions to resurrect BOOST_FOREACH(const CTransaction& tx, block.vtx) @@ -1102,7 +1410,7 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) { // Invalid block txdb.TxnAbort(); - return error("Reorganize() : ConnectBlock failed"); + return error("Reorganize() : ConnectBlock %s failed", pindex->GetBlockHash().ToString().substr(0,20).c_str()); } // Queue memory transactions to delete @@ -1134,10 +1442,45 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) BOOST_FOREACH(CTransaction& tx, vDelete) tx.RemoveFromMemoryPool(); + printf("REORGANIZE: done\n"); + return true; } +static void +runCommand(std::string strCommand) +{ + int nErr = ::system(strCommand.c_str()); + if (nErr) + printf("runCommand error: system(%s) returned %d\n", strCommand.c_str(), nErr); +} + +// Called from inside SetBestChain: attaches a block to the new best chain being built +bool CBlock::SetBestChainInner(CTxDB& txdb, CBlockIndex *pindexNew) +{ + uint256 hash = GetHash(); + + // Adding to current best branch + if (!ConnectBlock(txdb, pindexNew) || !txdb.WriteHashBestChain(hash)) + { + txdb.TxnAbort(); + InvalidChainFound(pindexNew); + return false; + } + if (!txdb.TxnCommit()) + return error("SetBestChain() : TxnCommit failed"); + + // Add to current best branch + pindexNew->pprev->pnext = pindexNew; + + // Delete redundant memory transactions + BOOST_FOREACH(CTransaction& tx, vtx) + tx.RemoveFromMemoryPool(); + + return true; +} + bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) { uint256 hash = GetHash(); @@ -1152,36 +1495,55 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) } else if (hashPrevBlock == hashBestChain) { - // Adding to current best branch - if (!ConnectBlock(txdb, pindexNew) || !txdb.WriteHashBestChain(hash)) + if (!SetBestChainInner(txdb, pindexNew)) + return error("SetBestChain() : SetBestChainInner failed"); + } + else + { + // the first block in the new chain that will cause it to become the new best chain + CBlockIndex *pindexIntermediate = pindexNew; + + // list of blocks that need to be connected afterwards + std::vector<CBlockIndex*> vpindexSecondary; + + // Reorganize is costly in terms of db load, as it works in a single db transaction. + // Try to limit how much needs to be done inside + while (pindexIntermediate->pprev && pindexIntermediate->pprev->bnChainWork > pindexBest->bnChainWork) { - txdb.TxnAbort(); - InvalidChainFound(pindexNew); - return error("SetBestChain() : ConnectBlock failed"); + vpindexSecondary.push_back(pindexIntermediate); + pindexIntermediate = pindexIntermediate->pprev; } - if (!txdb.TxnCommit()) - return error("SetBestChain() : TxnCommit failed"); - // Add to current best branch - pindexNew->pprev->pnext = pindexNew; + if (!vpindexSecondary.empty()) + printf("Postponing %i reconnects\n", vpindexSecondary.size()); - // Delete redundant memory transactions - BOOST_FOREACH(CTransaction& tx, vtx) - tx.RemoveFromMemoryPool(); - } - else - { - // New best branch - if (!Reorganize(txdb, pindexNew)) + // Switch to new best branch + if (!Reorganize(txdb, pindexIntermediate)) { txdb.TxnAbort(); InvalidChainFound(pindexNew); return error("SetBestChain() : Reorganize failed"); } + + // Connect futher blocks + BOOST_REVERSE_FOREACH(CBlockIndex *pindex, vpindexSecondary) + { + CBlock block; + if (!block.ReadFromDisk(pindex)) + { + printf("SetBestChain() : ReadFromDisk failed\n"); + break; + } + txdb.TxnBegin(); + // errors now are not fatal, we still did a reorganisation to a new chain in a valid way + if (!block.SetBestChainInner(txdb, pindex)) + break; + } } // Update best block in wallet (so we can detect restored wallets) - if (!IsInitialBlockDownload()) + bool fIsInitialDownload = IsInitialBlockDownload(); + if (!fIsInitialDownload) { const CBlockLocator locator(pindexNew); ::SetBestChain(locator); @@ -1196,6 +1558,14 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) nTransactionsUpdated++; printf("SetBestChain: new best=%s height=%d work=%s\n", hashBestChain.ToString().substr(0,20).c_str(), nBestHeight, bnBestChainWork.ToString().c_str()); + std::string strCmd = GetArg("-blocknotify", ""); + + if (!fIsInitialDownload && !strCmd.empty()) + { + boost::replace_all(strCmd, "%s", hashBestChain.GetHex()); + boost::thread t(runCommand, strCmd); // thread runs free + } + return true; } @@ -1278,8 +1648,12 @@ bool CBlock::CheckBlock() const if (!tx.CheckTransaction()) return DoS(tx.nDoS, error("CheckBlock() : CheckTransaction failed")); - // Check that it's not full of nonstandard transactions - if (GetSigOpCount() > MAX_BLOCK_SIGOPS) + int nSigOps = 0; + BOOST_FOREACH(const CTransaction& tx, vtx) + { + nSigOps += tx.GetLegacySigOpCount(); + } + if (nSigOps > MAX_BLOCK_SIGOPS) return DoS(100, error("CheckBlock() : out-of-bounds SigOpCount")); // Check merkleroot @@ -1304,7 +1678,7 @@ bool CBlock::AcceptBlock() int nHeight = pindexPrev->nHeight+1; // Check proof of work - if (nBits != GetNextWorkRequired(pindexPrev)) + if (nBits != GetNextWorkRequired(pindexPrev, this)) return DoS(100, error("AcceptBlock() : incorrect proof of work")); // Check timestamp against prev @@ -1317,17 +1691,8 @@ bool CBlock::AcceptBlock() return DoS(10, error("AcceptBlock() : contains a non-final transaction")); // Check that the block chain matches the known block chain up to a checkpoint - if (!fTestNet) - if ((nHeight == 11111 && hash != uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")) || - (nHeight == 33333 && hash != uint256("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")) || - (nHeight == 68555 && hash != uint256("0x00000000001e1b4903550a0b96e9a9405c8a95f387162e4944e8d9fbe501cd6a")) || - (nHeight == 70567 && hash != uint256("0x00000000006a49b14bcf27462068f1264c961f11fa2e0eddd2be0791e1d4124a")) || - (nHeight == 74000 && hash != uint256("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")) || - (nHeight == 105000 && hash != uint256("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")) || - (nHeight == 118000 && hash != uint256("0x000000000000774a7f8a7a12dc906ddb9e17e75d684f15e00f8767f9e8f36553")) || - (nHeight == 134444 && hash != uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")) || - (nHeight == 140700 && hash != uint256("0x000000000000033b512028abb90e1626d8b346fd0ed598ac0a3c371138dce2bd"))) - return DoS(100, error("AcceptBlock() : rejected by checkpoint lockin at %d", nHeight)); + if (!Checkpoints::CheckBlock(nHeight, hash)) + return DoS(100, error("AcceptBlock() : rejected by checkpoint lockin at %d", nHeight)); // Write block to history file if (!CheckDiskSpace(::GetSerializeSize(*this, SER_DISK))) @@ -1340,10 +1705,11 @@ bool CBlock::AcceptBlock() return error("AcceptBlock() : AddToBlockIndex failed"); // Relay inventory, but don't relay old inventory during initial block download + int nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(); if (hashBestChain == hash) CRITICAL_BLOCK(cs_vNodes) BOOST_FOREACH(CNode* pnode, vNodes) - if (nBestHeight > (pnode->nStartingHeight != -1 ? pnode->nStartingHeight - 2000 : 140700)) + if (nBestHeight > (pnode->nStartingHeight != -1 ? pnode->nStartingHeight - 2000 : nBlockEstimate)) pnode->PushInventory(CInv(MSG_BLOCK, hash)); return true; @@ -1362,6 +1728,30 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) if (!pblock->CheckBlock()) return error("ProcessBlock() : CheckBlock FAILED"); + CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex); + if (pcheckpoint && pblock->hashPrevBlock != hashBestChain) + { + // Extra checks to prevent "fill up memory by spamming with bogus blocks" + int64 deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime; + if (deltaTime < 0) + { + if (pfrom) + pfrom->Misbehaving(100); + return error("ProcessBlock() : block with timestamp before last checkpoint"); + } + CBigNum bnNewBlock; + bnNewBlock.SetCompact(pblock->nBits); + CBigNum bnRequired; + bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime)); + if (bnNewBlock > bnRequired) + { + if (pfrom) + pfrom->Misbehaving(100); + return error("ProcessBlock() : block with too little proof-of-work"); + } + } + + // If don't already have its previous block, shunt it off to holding area until we get it if (!mapBlockIndex.count(pblock->hashPrevBlock)) { @@ -1421,8 +1811,8 @@ bool CheckDiskSpace(uint64 nAdditionalBytes) string strMessage = _("Warning: Disk space is low "); strMiscWarning = strMessage; printf("*** %s\n", strMessage.c_str()); - ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION); - CreateThread(Shutdown, NULL); + ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION | wxMODAL); + QueueShutdown(); return false; } return true; @@ -1765,7 +2155,7 @@ unsigned char pchMessageStart[4] = { 0xf9, 0xbe, 0xb4, 0xd9 }; bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { - static map<unsigned int, vector<unsigned char> > mapReuseKey; + static map<CService, vector<unsigned char> > mapReuseKey; RandAddSeedPerfmon(); if (fDebug) { printf("%s ", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str()); @@ -1795,18 +2185,24 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CAddress addrFrom; uint64 nNonce = 1; vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; + if (pfrom->nVersion < 209) + { + // Since February 20, 2012, the protocol is initiated at version 209, + // and earlier versions are no longer supported + printf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString().c_str(), pfrom->nVersion); + pfrom->fDisconnect = true; + return false; + } + if (pfrom->nVersion == 10300) pfrom->nVersion = 300; - if (pfrom->nVersion >= 106 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> addrFrom >> nNonce; - if (pfrom->nVersion >= 106 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> pfrom->strSubVer; - if (pfrom->nVersion >= 209 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> pfrom->nStartingHeight; - if (pfrom->nVersion == 0) - return false; - // Disconnect if we connected to ourself if (nNonce == nLocalHostNonce && nNonce > 1) { @@ -1821,19 +2217,17 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->fClient = !(pfrom->nServices & NODE_NETWORK); - AddTimeData(pfrom->addr.ip, nTime); + AddTimeData(pfrom->addr, nTime); // Change version - if (pfrom->nVersion >= 209) - pfrom->PushMessage("verack"); - pfrom->vSend.SetVersion(min(pfrom->nVersion, VERSION)); - if (pfrom->nVersion < 209) - pfrom->vRecv.SetVersion(min(pfrom->nVersion, VERSION)); + pfrom->PushMessage("verack"); + pfrom->vSend.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); if (!pfrom->fInbound) { // Advertise our address - if (addrLocalHost.IsRoutable() && !fUseProxy) + if (!fNoListen && !fUseProxy && addrLocalHost.IsRoutable() && + !IsInitialBlockDownload()) { CAddress addr(addrLocalHost); addr.nTime = GetAdjustedTime(); @@ -1841,15 +2235,22 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } // Get recent addresses - if (pfrom->nVersion >= 31402 || mapAddresses.size() < 1000) + if (pfrom->nVersion >= 31402 || addrman.size() < 1000) { pfrom->PushMessage("getaddr"); pfrom->fGetAddr = true; } + addrman.Good(pfrom->addr); + } else { + if (((CNetAddr)pfrom->addr) == (CNetAddr)addrFrom) + { + addrman.Add(addrFrom, addrFrom); + addrman.Good(addrFrom); + } } // Ask the first connected node for block updates - static int nAskedForBlocks; + static int nAskedForBlocks = 0; if (!pfrom->fClient && (pfrom->nVersion < 32000 || pfrom->nVersion >= 32400) && (nAskedForBlocks < 1 || vNodes.size() <= 1)) @@ -1881,7 +2282,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "verack") { - pfrom->vRecv.SetVersion(min(pfrom->nVersion, VERSION)); + pfrom->vRecv.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); } @@ -1891,9 +2292,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) vRecv >> vAddr; // Don't want addr from older versions unless seeding - if (pfrom->nVersion < 209) - return true; - if (pfrom->nVersion < 31402 && mapAddresses.size() > 1000) + if (pfrom->nVersion < 31402 && addrman.size() > 1000) return true; if (vAddr.size() > 1000) { @@ -1902,8 +2301,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } // Store the new addresses - CAddrDB addrDB; - addrDB.TxnBegin(); int64 nNow = GetAdjustedTime(); int64 nSince = nNow - 10 * 60; BOOST_FOREACH(CAddress& addr, vAddr) @@ -1915,7 +2312,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) continue; if (addr.nTime <= 100000000 || addr.nTime > nNow + 10 * 60) addr.nTime = nNow - 5 * 24 * 60 * 60; - AddAddress(addr, 2 * 60 * 60, &addrDB); pfrom->AddAddressKnown(addr); if (addr.nTime > nSince && !pfrom->fGetAddr && vAddr.size() <= 10 && addr.IsRoutable()) { @@ -1927,7 +2323,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) static uint256 hashSalt; if (hashSalt == 0) RAND_bytes((unsigned char*)&hashSalt, sizeof(hashSalt)); - uint256 hashRand = hashSalt ^ (((int64)addr.ip)<<32) ^ ((GetTime()+addr.ip)/(24*60*60)); + int64 hashAddr = addr.GetHash(); + uint256 hashRand = hashSalt ^ (hashAddr<<32) ^ ((GetTime()+hashAddr)/(24*60*60)); hashRand = Hash(BEGIN(hashRand), END(hashRand)); multimap<uint256, CNode*> mapMix; BOOST_FOREACH(CNode* pnode, vNodes) @@ -1946,7 +2343,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } } } - addrDB.TxnCommit(); // Save addresses (it's ok if this fails) + addrman.Add(vAddr, pfrom->addr, 2 * 60 * 60); if (vAddr.size() < 1000) pfrom->fGetAddr = false; } @@ -1963,8 +2360,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } CTxDB txdb("r"); - BOOST_FOREACH(const CInv& inv, vInv) + for (int nInv = 0; nInv < vInv.size(); nInv++) { + const CInv &inv = vInv[nInv]; + if (fShutdown) return true; pfrom->AddInventoryKnown(inv); @@ -1973,9 +2372,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) if (fDebug) printf(" got inventory: %s %s\n", inv.ToString().c_str(), fAlreadyHave ? "have" : "new"); - if (!fAlreadyHave) + // Always request the last block in an inv bundle (even if we already have it), as it is the + // trigger for the other side to send further invs. If we are stuck on a (very long) side chain, + // this is necessary to connect earlier received orphan blocks to the chain again. + if (!fAlreadyHave || (inv.type == MSG_BLOCK && nInv==vInv.size()-1)) pfrom->AskFor(inv); - else if (inv.type == MSG_BLOCK && mapOrphanBlocks.count(inv.hash)) + if (inv.type == MSG_BLOCK && mapOrphanBlocks.count(inv.hash)) pfrom->PushGetBlocks(pindexBest, GetOrphanRoot(mapOrphanBlocks[inv.hash])); // Track requests for our stuff @@ -2102,8 +2504,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } vector<CBlock> vHeaders; - int nLimit = 2000 + locator.GetDistanceBack(); - printf("getheaders %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().substr(0,20).c_str(), nLimit); + int nLimit = 2000; + printf("getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().substr(0,20).c_str()); for (; pindex; pindex = pindex->pnext) { vHeaders.push_back(pindex->GetBlockHeader()); @@ -2163,6 +2565,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { printf("storing orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str()); AddOrphanTx(vMsg); + + // DoS prevention: do not allow mapOrphanTransactions to grow unbounded + int nEvicted = LimitOrphanTxSize(MAX_ORPHAN_TRANSACTIONS); + if (nEvicted > 0) + printf("mapOrphan overflow, removed %d tx\n", nEvicted); } if (tx.nDoS) pfrom->Misbehaving(tx.nDoS); } @@ -2187,25 +2594,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "getaddr") { - // Nodes rebroadcast an addr every 24 hours pfrom->vAddrToSend.clear(); - int64 nSince = GetAdjustedTime() - 3 * 60 * 60; // in the last 3 hours - CRITICAL_BLOCK(cs_mapAddresses) - { - unsigned int nCount = 0; - BOOST_FOREACH(const PAIRTYPE(vector<unsigned char>, CAddress)& item, mapAddresses) - { - const CAddress& addr = item.second; - if (addr.nTime > nSince) - nCount++; - } - BOOST_FOREACH(const PAIRTYPE(vector<unsigned char>, CAddress)& item, mapAddresses) - { - const CAddress& addr = item.second; - if (addr.nTime > nSince && GetRand(nCount) < 2500) - pfrom->PushAddress(addr); - } - } + vector<CAddress> vAddr = addrman.GetAddr(); + BOOST_FOREACH(const CAddress &addr, vAddr) + pfrom->PushAddress(addr); } @@ -2226,12 +2618,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) /// we have a chance to check the order here // Keep giving the same key to the same ip until they use it - if (!mapReuseKey.count(pfrom->addr.ip)) - pwalletMain->GetKeyFromPool(mapReuseKey[pfrom->addr.ip], true); + if (!mapReuseKey.count(pfrom->addr)) + pwalletMain->GetKeyFromPool(mapReuseKey[pfrom->addr], true); // Send back approval of order and pubkey to use CScript scriptPubKey; - scriptPubKey << mapReuseKey[pfrom->addr.ip] << OP_CHECKSIG; + scriptPubKey << mapReuseKey[pfrom->addr] << OP_CHECKSIG; pfrom->PushMessage("reply", hashReply, (int)0, scriptPubKey); } @@ -2353,17 +2745,14 @@ bool ProcessMessages(CNode* pfrom) } // Checksum - if (vRecv.GetVersion() >= 209) + uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + if (nChecksum != hdr.nChecksum) { - uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize); - unsigned int nChecksum = 0; - memcpy(&nChecksum, &hash, sizeof(nChecksum)); - if (nChecksum != hdr.nChecksum) - { - printf("ProcessMessage(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", - strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); - continue; - } + printf("ProcessMessage(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", + strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); + continue; } // Copy message to its own buffer @@ -2428,18 +2817,18 @@ bool SendMessages(CNode* pto, bool fSendTrickle) // Address refresh broadcast static int64 nLastRebroadcast; - if (GetTime() - nLastRebroadcast > 24 * 60 * 60) + if (!IsInitialBlockDownload() && (GetTime() - nLastRebroadcast > 24 * 60 * 60)) { - nLastRebroadcast = GetTime(); CRITICAL_BLOCK(cs_vNodes) { BOOST_FOREACH(CNode* pnode, vNodes) { // Periodically clear setAddrKnown to allow refresh broadcasts - pnode->setAddrKnown.clear(); + if (nLastRebroadcast) + pnode->setAddrKnown.clear(); // Rebroadcast our address - if (addrLocalHost.IsRoutable() && !fUseProxy) + if (!fNoListen && !fUseProxy && addrLocalHost.IsRoutable()) { CAddress addr(addrLocalHost); addr.nTime = GetAdjustedTime(); @@ -2447,37 +2836,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } } + nLastRebroadcast = GetTime(); } - // Clear out old addresses periodically so it's not too much work at once - static int64 nLastClear; - if (nLastClear == 0) - nLastClear = GetTime(); - if (GetTime() - nLastClear > 10 * 60 && vNodes.size() >= 3) - { - nLastClear = GetTime(); - CRITICAL_BLOCK(cs_mapAddresses) - { - CAddrDB addrdb; - int64 nSince = GetAdjustedTime() - 14 * 24 * 60 * 60; - for (map<vector<unsigned char>, CAddress>::iterator mi = mapAddresses.begin(); - mi != mapAddresses.end();) - { - const CAddress& addr = (*mi).second; - if (addr.nTime < nSince) - { - if (mapAddresses.size() < 1000 || GetTime() > nLastClear + 20) - break; - addrdb.EraseAddress(addr); - mapAddresses.erase(mi++); - } - else - mi++; - } - } - } - - // // Message: addr // @@ -2702,6 +3063,9 @@ public: }; +uint64 nLastBlockTx = 0; +uint64 nLastBlockSize = 0; + CBlock* CreateNewBlock(CReserveKey& reservekey) { CBlockIndex* pindexPrev = pindexBest; @@ -2789,6 +3153,7 @@ CBlock* CreateNewBlock(CReserveKey& reservekey) // Collect transactions into block map<uint256, CTxIndex> mapTestPool; uint64 nBlockSize = 1000; + uint64 nBlockTx = 0; int nBlockSigOps = 100; while (!mapPriority.empty()) { @@ -2801,25 +3166,43 @@ CBlock* CreateNewBlock(CReserveKey& reservekey) unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK); if (nBlockSize + nTxSize >= MAX_BLOCK_SIZE_GEN) continue; - int nTxSigOps = tx.GetSigOpCount(); + + // Legacy limits on sigOps: + int nTxSigOps = tx.GetLegacySigOpCount(); if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS) continue; // Transaction fee required depends on block size bool fAllowFree = (nBlockSize + nTxSize < 4000 || CTransaction::AllowFree(dPriority)); - int64 nMinFee = tx.GetMinFee(nBlockSize, fAllowFree, true); + int64 nMinFee = tx.GetMinFee(nBlockSize, fAllowFree, GMF_BLOCK); // Connecting shouldn't fail due to dependency on other memory pool transactions // because we're already processing them in order of dependency map<uint256, CTxIndex> mapTestPoolTmp(mapTestPool); - if (!tx.ConnectInputs(txdb, mapTestPoolTmp, CDiskTxPos(1,1,1), pindexPrev, nFees, false, true, nMinFee)) + MapPrevTx mapInputs; + bool fInvalid; + if (!tx.FetchInputs(txdb, mapTestPoolTmp, false, true, mapInputs, fInvalid)) + continue; + + int64 nTxFees = tx.GetValueIn(mapInputs)-tx.GetValueOut(); + if (nTxFees < nMinFee) + continue; + + nTxSigOps += tx.GetP2SHSigOpCount(mapInputs); + if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS) + continue; + + if (!tx.ConnectInputs(mapInputs, mapTestPoolTmp, CDiskTxPos(1,1,1), pindexPrev, false, true)) continue; + mapTestPoolTmp[tx.GetHash()] = CTxIndex(CDiskTxPos(1,1,1), tx.vout.size()); swap(mapTestPool, mapTestPoolTmp); // Added pblock->vtx.push_back(tx); nBlockSize += nTxSize; + ++nBlockTx; nBlockSigOps += nTxSigOps; + nFees += nTxFees; // Add transactions that depend on this one to the priority queue uint256 hash = tx.GetHash(); @@ -2836,14 +3219,19 @@ CBlock* CreateNewBlock(CReserveKey& reservekey) } } } + + nLastBlockTx = nBlockTx; + nLastBlockSize = nBlockSize; + printf("CreateNewBlock(): total size %lu\n", nBlockSize); + } pblock->vtx[0].vout[0].nValue = GetBlockValue(pindexPrev->nHeight+1, nFees); // Fill in header pblock->hashPrevBlock = pindexPrev->GetBlockHash(); pblock->hashMerkleRoot = pblock->BuildMerkleTree(); - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); - pblock->nBits = GetNextWorkRequired(pindexPrev); + pblock->UpdateTime(pindexPrev); + pblock->nBits = GetNextWorkRequired(pindexPrev, pblock.get()); pblock->nNonce = 0; return pblock.release(); @@ -2860,7 +3248,9 @@ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& hashPrevBlock = pblock->hashPrevBlock; } ++nExtraNonce; - pblock->vtx[0].vin[0].scriptSig = CScript() << pblock->nTime << CBigNum(nExtraNonce); + pblock->vtx[0].vin[0].scriptSig = (CScript() << pblock->nTime << CBigNum(nExtraNonce)) + COINBASE_FLAGS; + assert(pblock->vtx[0].vin[0].scriptSig.size() <= 100); + pblock->hashMerkleRoot = pblock->BuildMerkleTree(); } @@ -2949,6 +3339,10 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) void static ThreadBitcoinMiner(void* parg); +static bool fGenerateBitcoins = false; +static bool fLimitProcessors = false; +static int nLimitProcessors = -1; + void static BitcoinMiner(CWallet *pwallet) { printf("BitcoinMiner started\n"); @@ -2998,6 +3392,7 @@ void static BitcoinMiner(CWallet *pwallet) FormatHashBuffers(pblock.get(), pmidstate, pdata, phash1); unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); + unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8); unsigned int& nBlockNonce = *(unsigned int*)(pdata + 64 + 12); @@ -3055,14 +3450,12 @@ void static BitcoinMiner(CWallet *pwallet) dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); nHPSTimerStart = GetTimeMillis(); nHashCounter = 0; - string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0); - UIThreadCall(boost::bind(CalledSetStatusBar, strStatus, 0)); static int64 nLogTime; if (GetTime() - nLogTime > 30 * 60) { nLogTime = GetTime(); printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str()); - printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0); + printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[THREAD_MINER], dHashesPerSec/1000.0); } } } @@ -3073,7 +3466,7 @@ void static BitcoinMiner(CWallet *pwallet) return; if (!fGenerateBitcoins) return; - if (fLimitProcessors && vnThreadsRunning[3] > nLimitProcessors) + if (fLimitProcessors && vnThreadsRunning[THREAD_MINER] > nLimitProcessors) return; if (vNodes.empty()) break; @@ -3085,8 +3478,14 @@ void static BitcoinMiner(CWallet *pwallet) break; // Update nTime every few seconds - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + pblock->UpdateTime(pindexPrev); nBlockTime = ByteReverse(pblock->nTime); + if (fTestNet) + { + // Changing pblock->nTime can change work required on testnet: + nBlockBits = ByteReverse(pblock->nBits); + hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + } } } } @@ -3096,34 +3495,33 @@ void static ThreadBitcoinMiner(void* parg) CWallet* pwallet = (CWallet*)parg; try { - vnThreadsRunning[3]++; + vnThreadsRunning[THREAD_MINER]++; BitcoinMiner(pwallet); - vnThreadsRunning[3]--; + vnThreadsRunning[THREAD_MINER]--; } catch (std::exception& e) { - vnThreadsRunning[3]--; + vnThreadsRunning[THREAD_MINER]--; PrintException(&e, "ThreadBitcoinMiner()"); } catch (...) { - vnThreadsRunning[3]--; + vnThreadsRunning[THREAD_MINER]--; PrintException(NULL, "ThreadBitcoinMiner()"); } - UIThreadCall(boost::bind(CalledSetStatusBar, "", 0)); nHPSTimerStart = 0; - if (vnThreadsRunning[3] == 0) + if (vnThreadsRunning[THREAD_MINER] == 0) dHashesPerSec = 0; - printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[3]); + printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[THREAD_MINER]); } void GenerateBitcoins(bool fGenerate, CWallet* pwallet) { - if (fGenerateBitcoins != fGenerate) - { - fGenerateBitcoins = fGenerate; - WriteSetting("fGenerateBitcoins", fGenerateBitcoins); - MainFrameRepaint(); - } - if (fGenerateBitcoins) + fGenerateBitcoins = fGenerate; + nLimitProcessors = GetArg("-genproclimit", -1); + if (nLimitProcessors == 0) + fGenerateBitcoins = false; + fLimitProcessors = (nLimitProcessors != -1); + + if (fGenerate) { int nProcessors = boost::thread::hardware_concurrency(); printf("%d processors\n", nProcessors); @@ -3131,7 +3529,7 @@ void GenerateBitcoins(bool fGenerate, CWallet* pwallet) nProcessors = 1; if (fLimitProcessors && nProcessors > nLimitProcessors) nProcessors = nLimitProcessors; - int nAddThreads = nProcessors - vnThreadsRunning[3]; + int nAddThreads = nProcessors - vnThreadsRunning[THREAD_MINER]; printf("Starting %d BitcoinMiner threads\n", nAddThreads); for (int i = 0; i < nAddThreads; i++) { diff --git a/src/main.h b/src/main.h index 60ca318381..6c81abad56 100644 --- a/src/main.h +++ b/src/main.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_MAIN_H @@ -11,6 +11,10 @@ #include "script.h" #include "db.h" +#ifdef WIN32 +#include <io.h> /* for _commit */ +#endif + #include <list> class CBlock; @@ -25,11 +29,15 @@ class CAddress; class CInv; class CRequestTracker; class CNode; -class CBlockIndex; + +static const int CLIENT_VERSION = 60099; +static const bool VERSION_IS_BETA = true; +extern const std::string CLIENT_NAME; static const unsigned int MAX_BLOCK_SIZE = 1000000; static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2; static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50; +static const int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; static const int64 COIN = 100000000; static const int64 CENT = 1000000; static const int64 MIN_TX_FEE = 50000; @@ -46,6 +54,9 @@ static const int fHaveUPnP = false; #endif +extern CScript COINBASE_FLAGS; + + @@ -59,7 +70,11 @@ extern CBigNum bnBestChainWork; extern CBigNum bnBestInvalidWork; extern uint256 hashBestChain; extern CBlockIndex* pindexBest; +extern uint64 nPooledTx; extern unsigned int nTransactionsUpdated; +extern uint64 nLastBlockTx; +extern uint64 nLastBlockSize; +extern const std::string strMessageMagic; extern double dHashesPerSec; extern int64 nHPSTimerStart; extern int64 nTimeBestReceived; @@ -67,13 +82,7 @@ extern CCriticalSection cs_setpwalletRegistered; extern std::set<CWallet*> setpwalletRegistered; // Settings -extern int fGenerateBitcoins; extern int64 nTransactionFee; -extern int fLimitProcessors; -extern int nLimitProcessors; -extern int fMinimizeToTray; -extern int fMinimizeOnClose; -extern int fUseUPnP; @@ -99,7 +108,7 @@ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1); bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); bool CheckProofOfWork(uint256 hash, unsigned int nBits); -int GetTotalBlocksEstimate(); +unsigned int ComputeMinWork(unsigned int nBase, int64 nTime); int GetNumBlocksOfPeers(); bool IsInitialBlockDownload(); std::string GetWarnings(std::string strFor); @@ -117,21 +126,7 @@ std::string GetWarnings(std::string strFor); bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); -template<typename T> -bool WriteSetting(const std::string& strKey, const T& value) -{ - bool fOk = false; - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - { - std::string strWalletFile; - if (!GetWalletFile(pwallet, strWalletFile)) - continue; - fOk |= CWalletDB(strWalletFile).WriteSetting(strKey, value); - } - return fOk; -} - - +/** Position on disk for a particular transaction. */ class CDiskTxPos { public: @@ -170,7 +165,7 @@ public: std::string ToString() const { if (IsNull()) - return strprintf("null"); + return "null"; else return strprintf("(nFile=%d, nBlockPos=%d, nTxPos=%d)", nFile, nBlockPos, nTxPos); } @@ -183,7 +178,7 @@ public: - +/** An inpoint - a combination of a transaction and an index n into its vin */ class CInPoint { public: @@ -198,7 +193,7 @@ public: - +/** An outpoint - a combination of a transaction hash and an index n into its vout */ class COutPoint { public: @@ -240,11 +235,10 @@ public: -// -// An input of a transaction. It contains the location of the previous -// transaction's output that it claims and a signature that matches the -// output's public key. -// +/** An input of a transaction. It contains the location of the previous + * transaction's output that it claims and a signature that matches the + * output's public key. + */ class CTxIn { public: @@ -254,17 +248,17 @@ public: CTxIn() { - nSequence = UINT_MAX; + nSequence = std::numeric_limits<unsigned int>::max(); } - explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=UINT_MAX) + explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits<unsigned int>::max()) { prevout = prevoutIn; scriptSig = scriptSigIn; nSequence = nSequenceIn; } - CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=UINT_MAX) + CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits<unsigned int>::max()) { prevout = COutPoint(hashPrevTx, nOut); scriptSig = scriptSigIn; @@ -280,7 +274,7 @@ public: bool IsFinal() const { - return (nSequence == UINT_MAX); + return (nSequence == std::numeric_limits<unsigned int>::max()); } friend bool operator==(const CTxIn& a, const CTxIn& b) @@ -298,13 +292,13 @@ public: std::string ToString() const { std::string str; - str += strprintf("CTxIn("); + str += "CTxIn("; str += prevout.ToString(); if (prevout.IsNull()) str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); else str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); - if (nSequence != UINT_MAX) + if (nSequence != std::numeric_limits<unsigned int>::max()) str += strprintf(", nSequence=%u", nSequence); str += ")"; return str; @@ -319,10 +313,9 @@ public: -// -// An output of a transaction. It contains the public key that the next input -// must be able to sign with to claim it. -// +/** An output of a transaction. It contains the public key that the next input + * must be able to sign with to claim it. + */ class CTxOut { public: @@ -389,10 +382,18 @@ public: -// -// The basic transaction that is broadcasted on the network and contained in -// blocks. A transaction can contain multiple inputs and outputs. -// +enum GetMinFee_mode +{ + GMF_BLOCK, + GMF_RELAY, + GMF_SEND, +}; + +typedef std::map<uint256, std::pair<CTxIndex, CTransaction> > MapPrevTx; + +/** The basic transaction that is broadcasted on the network and contained in + * blocks. A transaction can contain multiple inputs and outputs. + */ class CTransaction { public: @@ -464,7 +465,7 @@ public: return false; bool fNewer = false; - unsigned int nLowest = UINT_MAX; + unsigned int nLowest = std::numeric_limits<unsigned int>::max(); for (int i = 0; i < vin.size(); i++) { if (vin[i].nSequence != old.vin[i].nSequence) @@ -489,27 +490,35 @@ public: return (vin.size() == 1 && vin[0].prevout.IsNull()); } - int GetSigOpCount() const - { - int n = 0; - BOOST_FOREACH(const CTxIn& txin, vin) - n += txin.scriptSig.GetSigOpCount(); - BOOST_FOREACH(const CTxOut& txout, vout) - n += txout.scriptPubKey.GetSigOpCount(); - return n; - } + /** Check for standard transaction types + @return True if all outputs (scriptPubKeys) use only standard transaction forms + */ + bool IsStandard() const; - bool IsStandard() const - { - BOOST_FOREACH(const CTxIn& txin, vin) - if (!txin.scriptSig.IsPushOnly()) - return error("nonstandard txin: %s", txin.scriptSig.ToString().c_str()); - BOOST_FOREACH(const CTxOut& txout, vout) - if (!::IsStandard(txout.scriptPubKey)) - return error("nonstandard txout: %s", txout.scriptPubKey.ToString().c_str()); - return true; - } + /** Check for standard transaction types + @param[in] mapInputs Map of previous transactions that have outputs we're spending + @return True if all inputs (scriptSigs) use only standard transaction forms + @see CTransaction::FetchInputs + */ + bool AreInputsStandard(const MapPrevTx& mapInputs) const; + + /** Count ECDSA signature operations the old-fashioned (pre-0.6) way + @return number of sigops this transaction's outputs will produce when spent + @see CTransaction::FetchInputs + */ + int GetLegacySigOpCount() const; + + /** Count ECDSA signature operations in pay-to-script-hash inputs. + @param[in] mapInputs Map of previous transactions that have outputs we're spending + @return maximum number of sigops required to validate this transaction's inputs + @see CTransaction::FetchInputs + */ + int GetP2SHSigOpCount(const MapPrevTx& mapInputs) const; + + /** Amount of bitcoins spent by this transaction. + @return sum of all outputs (note: does not include fees) + */ int64 GetValueOut() const { int64 nValueOut = 0; @@ -522,6 +531,16 @@ public: return nValueOut; } + /** Amount of bitcoins coming in to this transaction + Note that lightweight clients may not know anything besides the hash of previous transactions, + so may not be able to calculate this. + + @param[in] mapInputs Map of previous transactions that have outputs we're spending + @return Sum of value of all inputs (scriptSigs) + @see CTransaction::FetchInputs + */ + int64 GetValueIn(const MapPrevTx& mapInputs) const; + static bool AllowFree(double dPriority) { // Large (in bytes) low-priority (new, small-coin) transactions @@ -529,10 +548,10 @@ public: return dPriority > COIN * 144 / 250; } - int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=true, bool fForRelay=false) const + int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=true, enum GetMinFee_mode mode=GMF_BLOCK) const { // Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE - int64 nBaseFee = fForRelay ? MIN_RELAY_TX_FEE : MIN_TX_FEE; + int64 nBaseFee = (mode == GMF_RELAY) ? MIN_RELAY_TX_FEE : MIN_TX_FEE; unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK); unsigned int nNewBlockSize = nBlockSize + nBytes; @@ -636,13 +655,42 @@ public: bool ReadFromDisk(CTxDB& txdb, COutPoint prevout); bool ReadFromDisk(COutPoint prevout); bool DisconnectInputs(CTxDB& txdb); - bool ConnectInputs(CTxDB& txdb, std::map<uint256, CTxIndex>& mapTestPool, CDiskTxPos posThisTx, - CBlockIndex* pindexBlock, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee=0); + + /** Fetch from memory and/or disk. inputsRet keys are transaction hashes. + + @param[in] txdb Transaction database + @param[in] mapTestPool List of pending changes to the transaction index database + @param[in] fBlock True if being called to add a new best-block to the chain + @param[in] fMiner True if being called by CreateNewBlock + @param[out] inputsRet Pointers to this transaction's inputs + @param[out] fInvalid returns true if transaction is invalid + @return Returns true if all inputs are in txdb or mapTestPool + */ + bool FetchInputs(CTxDB& txdb, const std::map<uint256, CTxIndex>& mapTestPool, + bool fBlock, bool fMiner, MapPrevTx& inputsRet, bool& fInvalid); + + /** Sanity check previous transactions, then, if all checks succeed, + mark them as spent by this transaction. + + @param[in] inputs Previous transactions (from FetchInputs) + @param[out] mapTestPool Keeps track of inputs that need to be updated on disk + @param[in] posThisTx Position of this transaction on disk + @param[in] pindexBlock + @param[in] fBlock true if called from ConnectBlock + @param[in] fMiner true if called from CreateNewBlock + @param[in] fStrictPayToScriptHash true if fully validating p2sh transactions + @return Returns true if all checks succeed + */ + bool ConnectInputs(MapPrevTx inputs, + std::map<uint256, CTxIndex>& mapTestPool, const CDiskTxPos& posThisTx, + const CBlockIndex* pindexBlock, bool fBlock, bool fMiner, bool fStrictPayToScriptHash=true); bool ClientConnectInputs(); bool CheckTransaction() const; bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL); bool AcceptToMemoryPool(bool fCheckInputs=true, bool* pfMissingInputs=NULL); + protected: + const CTxOut& GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const; bool AddToMemoryPoolUnchecked(); public: bool RemoveFromMemoryPool(); @@ -652,9 +700,7 @@ public: -// -// A transaction with a merkle branch linking it to the block chain -// +/** A transaction with a merkle branch linking it to the block chain. */ class CMerkleTx : public CTransaction { public: @@ -695,8 +741,8 @@ public: int SetMerkleBranch(const CBlock* pblock=NULL); - int GetDepthInMainChain(int& nHeightRet) const; - int GetDepthInMainChain() const { int nHeight; return GetDepthInMainChain(nHeight); } + int GetDepthInMainChain(CBlockIndex* &pindexRet) const; + int GetDepthInMainChain() const { CBlockIndex *pindexRet; return GetDepthInMainChain(pindexRet); } bool IsInMainChain() const { return GetDepthInMainChain() > 0; } int GetBlocksToMaturity() const; bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true); @@ -706,11 +752,10 @@ public: -// -// A txdb record that contains the disk location of a transaction and the -// locations of transactions that spend its outputs. vSpent is really only -// used as a flag, but having the location is very helpful for debugging. -// +/** A txdb record that contains the disk location of a transaction and the + * locations of transactions that spend its outputs. vSpent is really only + * used as a flag, but having the location is very helpful for debugging. + */ class CTxIndex { public: @@ -758,23 +803,23 @@ public: return !(a == b); } int GetDepthInMainChain() const; + }; -// -// Nodes collect new transactions into a block, hash them into a hash tree, -// and scan through nonce values to make the block's hash satisfy proof-of-work -// requirements. When they solve the proof-of-work, they broadcast the block -// to everyone and the block is added to the block chain. The first transaction -// in the block is a special one that creates a new coin owned by the creator -// of the block. -// -// Blocks are appended to blk0001.dat files on disk. Their location on disk -// is indexed by CBlockIndex objects in memory. -// +/** Nodes collect new transactions into a block, hash them into a hash tree, + * and scan through nonce values to make the block's hash satisfy proof-of-work + * requirements. When they solve the proof-of-work, they broadcast the block + * to everyone and the block is added to the block chain. The first transaction + * in the block is a special one that creates a new coin owned by the creator + * of the block. + * + * Blocks are appended to blk0001.dat files on disk. Their location on disk + * is indexed by CBlockIndex objects in memory. + */ class CBlock { public: @@ -846,13 +891,7 @@ public: return (int64)nTime; } - int GetSigOpCount() const - { - int n = 0; - BOOST_FOREACH(const CTransaction& tx, vtx) - n += tx.GetSigOpCount(); - return n; - } + void UpdateTime(const CBlockIndex* pindexPrev); uint256 BuildMerkleTree() const @@ -988,6 +1027,9 @@ public: bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos); bool CheckBlock() const; bool AcceptBlock(); + +private: + bool SetBestChainInner(CTxDB& txdb, CBlockIndex *pindexNew); }; @@ -995,14 +1037,13 @@ public: -// -// The block chain is a tree shaped structure starting with the -// genesis block at the root, with each block potentially having multiple -// candidates to be the next block. pprev and pnext link a path through the -// main/longest chain. A blockindex may have multiple pprev pointing back -// to it, but pnext will only point forward to the longest branch, or will -// be null if the block is not part of the longest chain. -// +/** The block chain is a tree shaped structure starting with the + * genesis block at the root, with each block potentially having multiple + * candidates to be the next block. pprev and pnext link a path through the + * main/longest chain. A blockindex may have multiple pprev pointing back + * to it, but pnext will only point forward to the longest branch, or will + * be null if the block is not part of the longest chain. + */ class CBlockIndex { public: @@ -1159,9 +1200,7 @@ public: -// -// Used to marshal pointers into hashes for db storage. -// +/** Used to marshal pointers into hashes for db storage. */ class CDiskBlockIndex : public CBlockIndex { public: @@ -1236,11 +1275,10 @@ public: -// -// Describes a place in the block chain to another node such that if the -// other node doesn't have the same branch, it can find a recent common trunk. -// The further back it is, the further before the fork it may be. -// +/** Describes a place in the block chain to another node such that if the + * other node doesn't have the same branch, it can find a recent common trunk. + * The further back it is, the further before the fork it may be. + */ class CBlockLocator { protected: @@ -1263,6 +1301,11 @@ public: Set((*mi).second); } + CBlockLocator(const std::vector<uint256>& vHaveIn) + { + vHave = vHaveIn; + } + IMPLEMENT_SERIALIZE ( if (!(nType & SER_GETHASH)) @@ -1367,13 +1410,12 @@ public: -// -// Alerts are for notifying old versions if they become too obsolete and -// need to upgrade. The message is displayed in the status bar. -// Alert messages are broadcast as a vector of signed data. Unserializing may -// not read the entire buffer if the alert is for a newer version, but older -// versions can still relay the original data. -// +/** Alerts are for notifying old versions if they become too obsolete and + * need to upgrade. The message is displayed in the status bar. + * Alert messages are broadcast as a vector of signed data. Unserializing may + * not read the entire buffer if the alert is for a newer version, but older + * versions can still relay the original data. + */ class CUnsignedAlert { public: @@ -1473,6 +1515,7 @@ public: } }; +/** An alert is a combination of a serialized CUnsignedAlert and a signature. */ class CAlert : public CUnsignedAlert { public: @@ -1521,6 +1564,7 @@ public: bool AppliesTo(int nVersion, std::string strSubVerIn) const { + // TODO: rework for client-version-embedded-in-strSubVer ? return (IsInEffect() && nMinVer <= nVersion && nVersion <= nMaxVer && (setSubVer.empty() || setSubVer.count(strSubVerIn))); @@ -1528,7 +1572,7 @@ public: bool AppliesToMe() const { - return AppliesTo(VERSION, ::pszSubVer); + return AppliesTo(PROTOCOL_VERSION, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<std::string>())); } bool RelayTo(CNode* pnode) const diff --git a/src/makefile.linux-mingw b/src/makefile.linux-mingw index 29b433f851..3f7e6114ec 100644 --- a/src/makefile.linux-mingw +++ b/src/makefile.linux-mingw @@ -26,30 +26,9 @@ LIBS= \ -l ssl \ -l crypto -DEFS=-D_MT -DWIN32 -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB +DEFS=-D_MT -DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB DEBUGFLAGS=-g CFLAGS=-O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -HEADERS = \ - base58.h \ - bignum.h \ - crypter.h \ - db.h \ - headers.h \ - init.h \ - irc.h \ - key.h \ - keystore.h \ - main.h \ - net.h \ - noui.h \ - protocol.h \ - bitcoinrpc.h \ - script.h \ - serialize.h \ - strlcpy.h \ - uint256.h \ - util.h \ - wallet.h ifdef USE_UPNP @@ -60,8 +39,15 @@ endif LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l shlwapi +# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are +HEADERS = $(wildcard *.h) + OBJS= \ + obj/checkpoints.o \ + obj/netbase.o \ + obj/addrman.o \ obj/crypter.o \ + obj/key.o \ obj/db.o \ obj/init.o \ obj/irc.o \ @@ -70,29 +56,30 @@ OBJS= \ obj/net.o \ obj/protocol.o \ obj/bitcoinrpc.o \ + obj/rpcdump.o \ obj/script.o \ obj/util.o \ - obj/wallet.o + obj/wallet.o \ + obj/noui.o all: bitcoind.exe -obj/nogui/%.o: %.cpp $(HEADERS) +obj/%.o: %.cpp $(HEADERS) i586-mingw32msvc-g++ -c $(CFLAGS) -o $@ $< -bitcoind.exe: $(OBJS:obj/%=obj/nogui/%) +bitcoind.exe: $(OBJS:obj/%=obj/%) i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) obj/test/%.o: obj/test/%.cpp $(HEADERS) i586-mingw32msvc-g++ -c $(CFLAGS) -o $@ $< -test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%)) +test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lboost_unit_test_framework-mt-s clean: -rm -f obj/*.o - -rm -f obj/nogui/*.o -rm -f obj/test/*.o -rm -f test/*.o -rm -f headers.h.gch diff --git a/src/makefile.mingw b/src/makefile.mingw index 95d09f8770..33cc68b62b 100644 --- a/src/makefile.mingw +++ b/src/makefile.mingw @@ -23,30 +23,10 @@ LIBS= \ -l ssl \ -l crypto -DEFS=-DWIN32 -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB +DEFS=-DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB DEBUGFLAGS=-g CFLAGS=-mthreads -O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -HEADERS = \ - base58.h \ - bignum.h \ - crypter.h \ - db.h \ - headers.h \ - init.h \ - irc.h \ - key.h \ - keystore.h \ - main.h \ - net.h \ - noui.h \ - protocol.h \ - bitcoinrpc.h \ - script.h \ - serialize.h \ - strlcpy.h \ - uint256.h \ - util.h \ - wallet.h + ifdef USE_UPNP INCLUDEPATHS += -I"C:\miniupnpc-1.6-mgw" @@ -57,8 +37,15 @@ endif LIBS += -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l shlwapi +# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are +HEADERS = $(wildcard *.h) + OBJS= \ + obj/checkpoints.o \ + obj/netbase.o \ + obj/addrman.o \ obj/crypter.o \ + obj/key.o \ obj/db.o \ obj/init.o \ obj/irc.o \ @@ -67,23 +54,25 @@ OBJS= \ obj/net.o \ obj/protocol.o \ obj/bitcoinrpc.o \ + obj/rpcdump.o \ obj/script.o \ obj/util.o \ - obj/wallet.o + obj/wallet.o \ + obj/noui.o all: bitcoind.exe -obj/nogui/%.o: %.cpp $(HEADERS) +obj/%.o: %.cpp $(HEADERS) g++ -c $(CFLAGS) -o $@ $< -bitcoind.exe: $(OBJS:obj/%=obj/nogui/%) +bitcoind.exe: $(OBJS:obj/%=obj/%) g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS) g++ -c $(CFLAGS) -o $@ test/test_bitcoin.cpp -test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%)) +test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) clean: diff --git a/src/makefile.osx b/src/makefile.osx index 7830f3bad5..ed35b33ecb 100644 --- a/src/makefile.osx +++ b/src/makefile.osx @@ -10,6 +10,7 @@ CXX=llvm-g++ DEPSDIR=/opt/local INCLUDEPATHS= \ + -I"$(CURDIR)" \ -I"$(DEPSDIR)/include" \ -I"$(DEPSDIR)/include/db48" @@ -22,6 +23,8 @@ USE_UPNP:=1 LIBS= -dead_strip ifdef STATIC # Build STATIC if you are redistributing the bitcoind binary +TESTLIBS += \ + $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a LIBS += \ $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ $(DEPSDIR)/lib/libboost_system-mt.a \ @@ -29,8 +32,11 @@ LIBS += \ $(DEPSDIR)/lib/libboost_program_options-mt.a \ $(DEPSDIR)/lib/libboost_thread-mt.a \ $(DEPSDIR)/lib/libssl.a \ - $(DEPSDIR)/lib/libcrypto.a + $(DEPSDIR)/lib/libcrypto.a \ + -lz else +TESTLIBS += \ + -lboost_unit_test_framework-mt LIBS += \ -ldb_cxx-4.8 \ -lboost_system-mt \ @@ -38,38 +44,32 @@ LIBS += \ -lboost_program_options-mt \ -lboost_thread-mt \ -lssl \ - -lcrypto + -lcrypto \ + -lz +TESTDEFS += -DBOOST_TEST_DYN_LINK endif -DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DUSE_SSL +DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 + +ifdef RELEASE +# Compile for maximum compatibility and smallest size. +# This requires that dependencies are compiled +# the same way. +CFLAGS = -mmacosx-version-min=10.5 -arch i386 -O3 +else +CFLAGS = -g +endif -DEBUGFLAGS=-g # ppc doesn't work because we don't support big-endian -CFLAGS=-mmacosx-version-min=10.5 -arch i386 -O3 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -HEADERS = \ - base58.h \ - bignum.h \ - crypter.h \ - db.h \ - headers.h \ - init.h \ - irc.h \ - key.h \ - keystore.h \ - main.h \ - net.h \ - noui.h \ - protocol.h \ - bitcoinrpc.h \ - script.h \ - serialize.h \ - strlcpy.h \ - uint256.h \ - util.h \ - wallet.h +CFLAGS += -Wextra -Wno-sign-compare -Wno-char-subscripts -Wno-invalid-offsetof -Wformat-security \ + $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) OBJS= \ + obj/checkpoints.o \ + obj/netbase.o \ + obj/addrman.o \ obj/crypter.o \ + obj/key.o \ obj/db.o \ obj/init.o \ obj/irc.o \ @@ -78,9 +78,11 @@ OBJS= \ obj/net.o \ obj/protocol.o \ obj/bitcoinrpc.o \ + obj/rpcdump.o \ obj/script.o \ obj/util.o \ - obj/wallet.o + obj/wallet.o \ + obj/noui.o ifdef USE_UPNP DEFS += -DUSE_UPNP=$(USE_UPNP) @@ -91,38 +93,37 @@ else endif endif - all: bitcoind # auto-generated dependencies: --include obj/nogui/*.P --include obj/test/*.P +-include obj/*.P +-include obj-test/*.P -obj/nogui/%.o: %.cpp +obj/%.o: %.cpp $(CXX) -c $(CFLAGS) -MMD -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -bitcoind: $(OBJS:obj/%=obj/nogui/%) +bitcoind: $(OBJS:obj/%=obj/%) $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -obj/test/%.o: test/%.cpp - $(CXX) -c $(CFLAGS) -MMD -o $@ $< +TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) + +obj-test/%.o: test/%.cpp + $(CXX) -c $(TESTDEFS) $(CFLAGS) -MMD -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -test_bitcoin: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%)) - $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a +test_bitcoin: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) + $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) $(TESTLIBS) clean: -rm -f bitcoind test_bitcoin -rm -f obj/*.o - -rm -f obj/nogui/*.o - -rm -f obj/test/*.o + -rm -f obj-test/*.o -rm -f obj/*.P - -rm -f obj/nogui/*.P - -rm -f obj/test/*.P + -rm -f obj-test/*.P diff --git a/src/makefile.unix b/src/makefile.unix index 5f841ea0fe..1fb8e270fb 100644 --- a/src/makefile.unix +++ b/src/makefile.unix @@ -6,8 +6,8 @@ USE_UPNP:=0 DEFS=-DNOPCH -DEFS += $(addprefix -I,$(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) -LIBS += $(addprefix -l,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) +DEFS += $(addprefix -I,$(CURDIR) $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) +LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) LMODE = dynamic LMODE2 = dynamic @@ -16,10 +16,12 @@ ifdef STATIC ifeq (${STATIC}, all) LMODE2 = static endif +else + TESTDEFS += -DBOOST_TEST_DYN_LINK endif # for boost 1.37, add -mt to the boost libraries -LIBS= \ +LIBS += \ -Wl,-B$(LMODE) \ -l boost_system$(BOOST_LIB_SUFFIX) \ -l boost_filesystem$(BOOST_LIB_SUFFIX) \ @@ -37,10 +39,6 @@ ifneq (${USE_UPNP}, -) DEFS += -DUSE_UPNP=$(USE_UPNP) endif -ifneq (${USE_SSL}, 0) - DEFS += -DUSE_SSL -endif - LIBS+= \ -Wl,-B$(LMODE2) \ -l z \ @@ -83,31 +81,15 @@ LIBS+= \ DEBUGFLAGS=-g CXXFLAGS=-O2 -xCXXFLAGS=-pthread -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) -HEADERS = \ - base58.h \ - bignum.h \ - crypter.h \ - db.h \ - headers.h \ - init.h \ - irc.h \ - key.h \ - keystore.h \ - main.h \ - net.h \ - noui.h \ - protocol.h \ - bitcoinrpc.h \ - script.h \ - serialize.h \ - strlcpy.h \ - uint256.h \ - util.h \ - wallet.h +xCXXFLAGS=-pthread -Wextra -Wno-sign-compare -Wno-char-subscripts -Wno-invalid-offsetof -Wformat -Wformat-security \ + $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) OBJS= \ + obj/checkpoints.o \ + obj/netbase.o \ + obj/addrman.o \ obj/crypter.o \ + obj/key.o \ obj/db.o \ obj/init.o \ obj/irc.o \ @@ -116,42 +98,44 @@ OBJS= \ obj/net.o \ obj/protocol.o \ obj/bitcoinrpc.o \ + obj/rpcdump.o \ obj/script.o \ obj/util.o \ - obj/wallet.o + obj/wallet.o \ + obj/noui.o all: bitcoind # auto-generated dependencies: --include obj/nogui/*.P --include obj/test/*.P +-include obj/*.P +-include obj-test/*.P -obj/nogui/%.o: %.cpp +obj/%.o: %.cpp $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -bitcoind: $(OBJS:obj/%=obj/nogui/%) +bitcoind: $(OBJS:obj/%=obj/%) $(CXX) $(xCXXFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) -obj/test/%.o: test/%.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< +TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) + +obj-test/%.o: test/%.cpp + $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -o $@ $< @cp $(@:%.o=%.d) $(@:%.o=%.P); \ sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -test_bitcoin: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%)) - $(CXX) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ -Wl,-Bstatic -lboost_unit_test_framework $(LDFLAGS) $(LIBS) +test_bitcoin: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) + $(CXX) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ -Wl,-B$(LMODE) -lboost_unit_test_framework $(LDFLAGS) $(LIBS) clean: -rm -f bitcoind test_bitcoin -rm -f obj/*.o - -rm -f obj/nogui/*.o - -rm -f obj/test/*.o + -rm -f obj-test/*.o -rm -f obj/*.P - -rm -f obj/nogui/*.P - -rm -f obj/test/*.P + -rm -f obj-test/*.P diff --git a/src/makefile.vc b/src/makefile.vc deleted file mode 100644 index c7e8578a95..0000000000 --- a/src/makefile.vc +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file license.txt or http://www.opensource.org/licenses/mit-license.php. - - -INCLUDEPATHS= \ - /I"/boost" \ - /I"/db/build_windows" \ - /I"/openssl/include" \ - /I"/miniupnpc" - -LIBPATHS= \ - /LIBPATH:"/boost/stage/lib" \ - /LIBPATH:"/db/build_windows/Release" \ - /LIBPATH:"/openssl/lib" \ - /LIBPATH:"/miniupnpc/msvc/Release" \ - /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib \ - /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib \ - /NODEFAULTLIB:msvcrtd.lib - -USE_UPNP=0 - -DEFS=/DWIN32 /D_WINDOWS /DNOPCH /DNOMINMAX - -LIBS= \ - libboost_system-vc100-mt.lib \ - libboost_filesystem-vc100-mt.lib \ - libboost_program_options-vc100-mt.lib \ - libboost_thread-vc100-mt.lib \ - libdb47s.lib \ - libeay32.lib - -!IFDEF USE_UPNP -LIBS=$(LIBS) miniupnpc.lib -DEFS=$(DEFS) /DUSE_UPNP=$(USE_UPNP) -!ENDIF - -LIBS=$(LIBS) \ - kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib ws2_32.lib shlwapi.lib iphlpapi.lib - -DEBUGFLAGS=/Os -CFLAGS=/MD /c /nologo /EHsc /GR /Zm300 $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -HEADERS = \ - base58.h \ - bignum.h \ - crypter.h \ - db.h \ - headers.h \ - init.h \ - irc.h \ - key.h \ - keystore.h \ - main.h \ - net.h \ - noui.h \ - protocol.h \ - bitcoinrpc.h \ - script.h \ - serialize.h \ - strlcpy.h \ - ui.h \ - uibase.h \ - uint256.h \ - util.h \ - wallet.h - -OBJS= \ - obj\crypter.o \ - obj\db.o \ - obj\init.o \ - obj\irc.o \ - obj\keystore.o \ - obj\main.o \ - obj\net.o \ - obj\rpc.o \ - obj\protocol.o \ - obj\script.o \ - obj\util.o \ - obj\wallet.o - -RC=../share - - -all: bitcoind.exe - - -.cpp{obj}.obj: - cl $(CFLAGS) /DGUI /Fo$@ %s - -obj\util.obj: $(HEADERS) - -obj\script.obj: $(HEADERS) - -obj\db.obj: $(HEADERS) - -obj\net.obj: $(HEADERS) - -obj\irc.obj: $(HEADERS) - -obj\keystore.obj: $(HEADERS) - -obj\main.obj: $(HEADERS) - -obj\wallet.obj: $(HEADERS) - -obj\rpc.obj: $(HEADERS) - -obj\init.obj: $(HEADERS) - -obj\crypter.obj: $(HEADERS) - -obj\ui.obj: $(HEADERS) - -obj\uibase.obj: $(HEADERS) - -.cpp{obj\nogui}.obj: - cl $(CFLAGS) /Fo$@ %s - -obj\nogui\util.obj: $(HEADERS) - -obj\nogui\script.obj: $(HEADERS) - -obj\nogui\db.obj: $(HEADERS) - -obj\nogui\net.obj: $(HEADERS) - -obj\nogui\irc.obj: $(HEADERS) - -obj\nogui\keystore.obj: $(HEADERS) - -obj\nogui\main.obj: $(HEADERS) - -obj\nogui\wallet.obj: $(HEADERS) - -obj\nogui\rpc.obj: $(HEADERS) - -obj\nogui\init.obj: $(HEADERS) - -bitcoind.exe: $(OBJS:obj\=obj\nogui\) obj\ui.res - link /nologo /OUT:$@ $(LIBPATHS) $** $(LIBS) - -clean: - -del /Q obj\* - -del /Q obj\nogui\* - -del /Q *.ilk - -del /Q *.pdb - -del /Q bitcoind.exe diff --git a/src/mruset.h b/src/mruset.h new file mode 100644 index 0000000000..b21f18563c --- /dev/null +++ b/src/mruset.h @@ -0,0 +1,64 @@ +// Copyright (c) 2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_MRUSET_H +#define BITCOIN_MRUSET_H + +#include <set> +#include <deque> + +/** STL-like set container that only keeps the most recent N elements. */ +template <typename T> class mruset +{ +public: + typedef T key_type; + typedef T value_type; + typedef typename std::set<T>::iterator iterator; + typedef typename std::set<T>::const_iterator const_iterator; + typedef typename std::set<T>::size_type size_type; + +protected: + std::set<T> set; + std::deque<T> queue; + size_type nMaxSize; + +public: + mruset(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; } + iterator begin() const { return set.begin(); } + iterator end() const { return set.end(); } + size_type size() const { return set.size(); } + bool empty() const { return set.empty(); } + iterator find(const key_type& k) const { return set.find(k); } + size_type count(const key_type& k) const { return set.count(k); } + bool inline friend operator==(const mruset<T>& a, const mruset<T>& b) { return a.set == b.set; } + bool inline friend operator==(const mruset<T>& a, const std::set<T>& b) { return a.set == b; } + bool inline friend operator<(const mruset<T>& a, const mruset<T>& b) { return a.set < b.set; } + std::pair<iterator, bool> insert(const key_type& x) + { + std::pair<iterator, bool> ret = set.insert(x); + if (ret.second) + { + if (nMaxSize && queue.size() == nMaxSize) + { + set.erase(queue.front()); + queue.pop_front(); + } + queue.push_back(x); + } + return ret; + } + size_type max_size() const { return nMaxSize; } + size_type max_size(size_type s) + { + if (s) + while (queue.size() >= s) + { + set.erase(queue.front()); + queue.pop_front(); + } + nMaxSize = s; + return nMaxSize; + } +}; + +#endif diff --git a/src/net.cpp b/src/net.cpp index 0c28eaa379..7dc2d4c22a 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -9,6 +9,7 @@ #include "net.h" #include "init.h" #include "strlcpy.h" +#include "addrman.h" #ifdef WIN32 #include <string.h> @@ -29,41 +30,39 @@ static const int MAX_OUTBOUND_CONNECTIONS = 8; void ThreadMessageHandler2(void* parg); void ThreadSocketHandler2(void* parg); void ThreadOpenConnections2(void* parg); +void ThreadOpenAddedConnections2(void* parg); #ifdef USE_UPNP void ThreadMapPort2(void* parg); #endif +void ThreadDNSAddressSeed2(void* parg); bool OpenNetworkConnection(const CAddress& addrConnect); - - // // Global state variables // bool fClient = false; bool fAllowDNS = false; +static bool fUseUPnP = false; uint64 nLocalServices = (fClient ? 0 : NODE_NETWORK); -CAddress addrLocalHost("0.0.0.0", 0, false, nLocalServices); +CAddress addrLocalHost(CService("0.0.0.0", 0), nLocalServices); static CNode* pnodeLocalHost = NULL; uint64 nLocalHostNonce = 0; -array<int, 10> vnThreadsRunning; +array<int, THREAD_MAX> vnThreadsRunning; static SOCKET hListenSocket = INVALID_SOCKET; +CAddrMan addrman; vector<CNode*> vNodes; CCriticalSection cs_vNodes; -map<vector<unsigned char>, CAddress> mapAddresses; -CCriticalSection cs_mapAddresses; map<CInv, CDataStream> mapRelay; deque<pair<int64, CInv> > vRelayExpiration; CCriticalSection cs_mapRelay; map<CInv, int64> mapAlreadyAskedFor; -// Settings -int fUseProxy = false; -int nConnectTimeout = 5000; -CAddress addrProxy("127.0.0.1",9050); +set<CNetAddr> setservAddNodeAddresses; +CCriticalSection cs_setservAddNodeAddresses; @@ -85,215 +84,60 @@ void CNode::PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd) - - -bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout) +bool RecvLine(SOCKET hSocket, string& strLine) { - hSocketRet = INVALID_SOCKET; - - SOCKET hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (hSocket == INVALID_SOCKET) - return false; -#ifdef SO_NOSIGPIPE - int set = 1; - setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)); -#endif - - bool fProxy = (fUseProxy && addrConnect.IsRoutable()); - struct sockaddr_in sockaddr = (fProxy ? addrProxy.GetSockAddr() : addrConnect.GetSockAddr()); - -#ifdef WIN32 - u_long fNonblock = 1; - if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) -#else - int fFlags = fcntl(hSocket, F_GETFL, 0); - if (fcntl(hSocket, F_SETFL, fFlags | O_NONBLOCK) == -1) -#endif - { - closesocket(hSocket); - return false; - } - - - if (connect(hSocket, (struct sockaddr*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) + strLine = ""; + loop { - // WSAEINVAL is here because some legacy version of winsock uses it - if (WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINVAL) + char c; + int nBytes = recv(hSocket, &c, 1, 0); + if (nBytes > 0) { - struct timeval timeout; - timeout.tv_sec = nTimeout / 1000; - timeout.tv_usec = (nTimeout % 1000) * 1000; - - fd_set fdset; - FD_ZERO(&fdset); - FD_SET(hSocket, &fdset); - int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout); - if (nRet == 0) - { - printf("connection timeout\n"); - closesocket(hSocket); + if (c == '\n') + continue; + if (c == '\r') + return true; + strLine += c; + if (strLine.size() >= 9000) + return true; + } + else if (nBytes <= 0) + { + if (fShutdown) return false; - } - if (nRet == SOCKET_ERROR) + if (nBytes < 0) { - printf("select() for connection failed: %i\n",WSAGetLastError()); - closesocket(hSocket); - return false; + int nErr = WSAGetLastError(); + if (nErr == WSAEMSGSIZE) + continue; + if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) + { + Sleep(10); + continue; + } } - socklen_t nRetSize = sizeof(nRet); -#ifdef WIN32 - if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char*)(&nRet), &nRetSize) == SOCKET_ERROR) -#else - if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR) -#endif + if (!strLine.empty()) + return true; + if (nBytes == 0) { - printf("getsockopt() for connection failed: %i\n",WSAGetLastError()); - closesocket(hSocket); + // socket closed + printf("socket closed\n"); return false; } - if (nRet != 0) + else { - printf("connect() failed after select(): %s\n",strerror(nRet)); - closesocket(hSocket); + // socket error + int nErr = WSAGetLastError(); + printf("recv failed: %d\n", nErr); return false; } } -#ifdef WIN32 - else if (WSAGetLastError() != WSAEISCONN) -#else - else -#endif - { - printf("connect() failed: %i\n",WSAGetLastError()); - closesocket(hSocket); - return false; - } - } - - /* - this isn't even strictly necessary - CNode::ConnectNode immediately turns the socket back to non-blocking - but we'll turn it back to blocking just in case - */ -#ifdef WIN32 - fNonblock = 0; - if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) -#else - fFlags = fcntl(hSocket, F_GETFL, 0); - if (fcntl(hSocket, F_SETFL, fFlags & !O_NONBLOCK) == SOCKET_ERROR) -#endif - { - closesocket(hSocket); - return false; - } - - if (fProxy) - { - printf("proxy connecting %s\n", addrConnect.ToString().c_str()); - char pszSocks4IP[] = "\4\1\0\0\0\0\0\0user"; - memcpy(pszSocks4IP + 2, &addrConnect.port, 2); - memcpy(pszSocks4IP + 4, &addrConnect.ip, 4); - char* pszSocks4 = pszSocks4IP; - int nSize = sizeof(pszSocks4IP); - - int ret = send(hSocket, pszSocks4, nSize, MSG_NOSIGNAL); - if (ret != nSize) - { - closesocket(hSocket); - return error("Error sending to proxy"); - } - char pchRet[8]; - if (recv(hSocket, pchRet, 8, 0) != 8) - { - closesocket(hSocket); - return error("Error reading proxy response"); - } - if (pchRet[1] != 0x5a) - { - closesocket(hSocket); - if (pchRet[1] != 0x5b) - printf("ERROR: Proxy returned error %d\n", pchRet[1]); - return false; - } - printf("proxy connected %s\n", addrConnect.ToString().c_str()); } - - hSocketRet = hSocket; - return true; } -// portDefault is in host order -bool Lookup(const char *pszName, vector<CAddress>& vaddr, int nServices, int nMaxSolutions, bool fAllowLookup, int portDefault, bool fAllowPort) -{ - vaddr.clear(); - if (pszName[0] == 0) - return false; - int port = portDefault; - char psz[256]; - char *pszHost = psz; - strlcpy(psz, pszName, sizeof(psz)); - if (fAllowPort) - { - char* pszColon = strrchr(psz+1,':'); - char *pszPortEnd = NULL; - int portParsed = pszColon ? strtoul(pszColon+1, &pszPortEnd, 10) : 0; - if (pszColon && pszPortEnd && pszPortEnd[0] == 0) - { - if (psz[0] == '[' && pszColon[-1] == ']') - { - // Future: enable IPv6 colon-notation inside [] - pszHost = psz+1; - pszColon[-1] = 0; - } - else - pszColon[0] = 0; - port = portParsed; - if (port < 0 || port > USHRT_MAX) - port = USHRT_MAX; - } - } - - unsigned int addrIP = inet_addr(pszHost); - if (addrIP != INADDR_NONE) - { - // valid IP address passed - vaddr.push_back(CAddress(addrIP, port, nServices)); - return true; - } - - if (!fAllowLookup) - return false; - - struct hostent* phostent = gethostbyname(pszHost); - if (!phostent) - return false; - if (phostent->h_addrtype != AF_INET) - return false; - char** ppAddr = phostent->h_addr_list; - while (*ppAddr != NULL && vaddr.size() != nMaxSolutions) - { - CAddress addr(((struct in_addr*)ppAddr[0])->s_addr, port, nServices); - if (addr.IsValid()) - vaddr.push_back(addr); - ppAddr++; - } - - return (vaddr.size() > 0); -} - -// portDefault is in host order -bool Lookup(const char *pszName, CAddress& addr, int nServices, bool fAllowLookup, int portDefault, bool fAllowPort) -{ - vector<CAddress> vaddr; - bool fRet = Lookup(pszName, vaddr, nServices, 1, fAllowLookup, portDefault, fAllowPort); - if (fRet) - addr = vaddr[0]; - return fRet; -} - -bool GetMyExternalIP2(const CAddress& addrConnect, const char* pszGet, const char* pszKeyword, unsigned int& ipRet) +bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet) { SOCKET hSocket; if (!ConnectSocket(addrConnect, hSocket)) @@ -327,11 +171,11 @@ bool GetMyExternalIP2(const CAddress& addrConnect, const char* pszGet, const cha strLine = strLine.substr(strspn(strLine.c_str(), " \t\n\r")); while (strLine.size() > 0 && isspace(strLine[strLine.size()-1])) strLine.resize(strLine.size()-1); - CAddress addr(strLine,0,true); + CService addr(strLine,0,true); printf("GetMyExternalIP() received [%s] %s\n", strLine.c_str(), addr.ToString().c_str()); - if (addr.ip == 0 || addr.ip == INADDR_NONE || !addr.IsRoutable()) + if (!addr.IsValid() || !addr.IsRoutable()) return false; - ipRet = addr.ip; + ipRet.SetIP(addr); return true; } } @@ -340,13 +184,13 @@ bool GetMyExternalIP2(const CAddress& addrConnect, const char* pszGet, const cha } // We now get our external IP from the IRC server first and only use this as a backup -bool GetMyExternalIP(unsigned int& ipRet) +bool GetMyExternalIP(CNetAddr& ipRet) { - CAddress addrConnect; + CService addrConnect; const char* pszGet; const char* pszKeyword; - if (fUseProxy) + if (fNoListen||fUseProxy) return false; for (int nLookup = 0; nLookup <= 1; nLookup++) @@ -358,11 +202,11 @@ bool GetMyExternalIP(unsigned int& ipRet) // <?php echo $_SERVER["REMOTE_ADDR"]; ?> if (nHost == 1) { - addrConnect = CAddress("91.198.22.70",80); // checkip.dyndns.org + addrConnect = CService("91.198.22.70",80); // checkip.dyndns.org if (nLookup == 1) { - CAddress addrIP("checkip.dyndns.org", 80, true); + CService addrIP("checkip.dyndns.org", 80, true); if (addrIP.IsValid()) addrConnect = addrIP; } @@ -377,11 +221,11 @@ bool GetMyExternalIP(unsigned int& ipRet) } else if (nHost == 2) { - addrConnect = CAddress("74.208.43.192", 80); // www.showmyip.com + addrConnect = CService("74.208.43.192", 80); // www.showmyip.com if (nLookup == 1) { - CAddress addrIP("www.showmyip.com", 80, true); + CService addrIP("www.showmyip.com", 80, true); if (addrIP.IsValid()) addrConnect = addrIP; } @@ -405,7 +249,7 @@ bool GetMyExternalIP(unsigned int& ipRet) void ThreadGetMyExternalIP(void* parg) { // Wait for IRC to get it first - if (!GetBoolArg("-noirc")) + if (GetBoolArg("-irc", false)) { for (int i = 0; i < 2 * 60; i++) { @@ -416,7 +260,7 @@ void ThreadGetMyExternalIP(void* parg) } // Fallback in case IRC fails to get it - if (GetMyExternalIP(addrLocalHost.ip)) + if (GetMyExternalIP(addrLocalHost)) { printf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP().c_str()); if (addrLocalHost.IsRoutable()) @@ -436,109 +280,9 @@ void ThreadGetMyExternalIP(void* parg) -bool AddAddress(CAddress addr, int64 nTimePenalty, CAddrDB *pAddrDB) -{ - if (!addr.IsRoutable()) - return false; - if (addr.ip == addrLocalHost.ip) - return false; - addr.nTime = max((int64)0, (int64)addr.nTime - nTimePenalty); - bool fUpdated = false; - bool fNew = false; - CAddress addrFound = addr; - - CRITICAL_BLOCK(cs_mapAddresses) - { - map<vector<unsigned char>, CAddress>::iterator it = mapAddresses.find(addr.GetKey()); - if (it == mapAddresses.end()) - { - // New address - printf("AddAddress(%s)\n", addr.ToString().c_str()); - mapAddresses.insert(make_pair(addr.GetKey(), addr)); - fUpdated = true; - fNew = true; - } - else - { - addrFound = (*it).second; - if ((addrFound.nServices | addr.nServices) != addrFound.nServices) - { - // Services have been added - addrFound.nServices |= addr.nServices; - fUpdated = true; - } - bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); - int64 nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); - if (addrFound.nTime < addr.nTime - nUpdateInterval) - { - // Periodically update most recently seen time - addrFound.nTime = addr.nTime; - fUpdated = true; - } - } - } - // There is a nasty deadlock bug if this is done inside the cs_mapAddresses - // CRITICAL_BLOCK: - // Thread 1: begin db transaction (locks inside-db-mutex) - // then AddAddress (locks cs_mapAddresses) - // Thread 2: AddAddress (locks cs_mapAddresses) - // ... then db operation hangs waiting for inside-db-mutex - if (fUpdated) - { - if (pAddrDB) - pAddrDB->WriteAddress(addrFound); - else - CAddrDB().WriteAddress(addrFound); - } - return fNew; -} - -void AddressCurrentlyConnected(const CAddress& addr) -{ - CRITICAL_BLOCK(cs_mapAddresses) - { - // Only if it's been published already - map<vector<unsigned char>, CAddress>::iterator it = mapAddresses.find(addr.GetKey()); - if (it != mapAddresses.end()) - { - CAddress& addrFound = (*it).second; - int64 nUpdateInterval = 20 * 60; - if (addrFound.nTime < GetAdjustedTime() - nUpdateInterval) - { - // Periodically update most recently seen time - addrFound.nTime = GetAdjustedTime(); - CAddrDB addrdb; - addrdb.WriteAddress(addrFound); - } - } - } -} - - - - - -void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1) +void AddressCurrentlyConnected(const CService& addr) { - // If the dialog might get closed before the reply comes back, - // call this in the destructor so it doesn't get called after it's deleted. - CRITICAL_BLOCK(cs_vNodes) - { - BOOST_FOREACH(CNode* pnode, vNodes) - { - CRITICAL_BLOCK(pnode->cs_mapRequests) - { - for (map<uint256, CRequestTracker>::iterator mi = pnode->mapRequests.begin(); mi != pnode->mapRequests.end();) - { - CRequestTracker& tracker = (*mi).second; - if (tracker.fn == fn && tracker.param1 == param1) - pnode->mapRequests.erase(mi++); - else - mi++; - } - } - } - } + addrman.Connected(addr); } @@ -547,95 +291,23 @@ void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1) -// -// Subscription methods for the broadcast and subscription system. -// Channel numbers are message numbers, i.e. MSG_TABLE and MSG_PRODUCT. -// -// The subscription system uses a meet-in-the-middle strategy. -// With 100,000 nodes, if senders broadcast to 1000 random nodes and receivers -// subscribe to 1000 random nodes, 99.995% (1 - 0.99^1000) of messages will get through. -// - -bool AnySubscribed(unsigned int nChannel) -{ - if (pnodeLocalHost->IsSubscribed(nChannel)) - return true; - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->IsSubscribed(nChannel)) - return true; - return false; -} - -bool CNode::IsSubscribed(unsigned int nChannel) -{ - if (nChannel >= vfSubscribe.size()) - return false; - return vfSubscribe[nChannel]; -} - -void CNode::Subscribe(unsigned int nChannel, unsigned int nHops) -{ - if (nChannel >= vfSubscribe.size()) - return; - - if (!AnySubscribed(nChannel)) - { - // Relay subscribe - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode != this) - pnode->PushMessage("subscribe", nChannel, nHops); - } - - vfSubscribe[nChannel] = true; -} - -void CNode::CancelSubscribe(unsigned int nChannel) -{ - if (nChannel >= vfSubscribe.size()) - return; - - // Prevent from relaying cancel if wasn't subscribed - if (!vfSubscribe[nChannel]) - return; - vfSubscribe[nChannel] = false; - - if (!AnySubscribed(nChannel)) - { - // Relay subscription cancel - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode != this) - pnode->PushMessage("sub-cancel", nChannel); - } -} - - - - - - - - - -CNode* FindNode(unsigned int ip) +CNode* FindNode(const CNetAddr& ip) { CRITICAL_BLOCK(cs_vNodes) { BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->addr.ip == ip) + if ((CNetAddr)pnode->addr == ip) return (pnode); } return NULL; } -CNode* FindNode(CAddress addr) +CNode* FindNode(const CService& addr) { CRITICAL_BLOCK(cs_vNodes) { BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->addr == addr) + if ((CService)pnode->addr == addr) return (pnode); } return NULL; @@ -643,11 +315,11 @@ CNode* FindNode(CAddress addr) CNode* ConnectNode(CAddress addrConnect, int64 nTimeout) { - if (addrConnect.ip == addrLocalHost.ip) + if ((CNetAddr)addrConnect == (CNetAddr)addrLocalHost) return NULL; // Look for an existing connection - CNode* pnode = FindNode(addrConnect.ip); + CNode* pnode = FindNode((CService)addrConnect); if (pnode) { if (nTimeout != 0) @@ -658,13 +330,11 @@ CNode* ConnectNode(CAddress addrConnect, int64 nTimeout) } /// debug print - printf("trying connection %s lastseen=%.1fhrs lasttry=%.1fhrs\n", + printf("trying connection %s lastseen=%.1fhrs\n", addrConnect.ToString().c_str(), - (double)(addrConnect.nTime - GetAdjustedTime())/3600.0, - (double)(addrConnect.nLastTry - GetAdjustedTime())/3600.0); + (double)(addrConnect.nTime - GetAdjustedTime())/3600.0); - CRITICAL_BLOCK(cs_mapAddresses) - mapAddresses[addrConnect.GetKey()].nLastTry = GetAdjustedTime(); + addrman.Attempt(addrConnect); // Connect SOCKET hSocket; @@ -711,22 +381,31 @@ void CNode::CloseSocketDisconnect() printf("disconnecting node %s\n", addr.ToString().c_str()); closesocket(hSocket); hSocket = INVALID_SOCKET; + vRecv.clear(); } } void CNode::Cleanup() { - // All of a nodes broadcasts and subscriptions are automatically torn down - // when it goes down, so a node has to stay up to keep its broadcast going. +} + - // Cancel subscriptions - for (unsigned int nChannel = 0; nChannel < vfSubscribe.size(); nChannel++) - if (vfSubscribe[nChannel]) - CancelSubscribe(nChannel); +void CNode::PushVersion() +{ + /// when NTP implemented, change to just nTime = GetAdjustedTime() + int64 nTime = (fInbound ? GetAdjustedTime() : GetTime()); + CAddress addrYou = (fUseProxy ? CAddress(CService("0.0.0.0",0)) : addr); + CAddress addrMe = (fUseProxy || !addrLocalHost.IsRoutable() ? CAddress(CService("0.0.0.0",0)) : addrLocalHost); + RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); + PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe, + nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<string>()), nBestHeight); } -std::map<unsigned int, int64> CNode::setBanned; + + + +std::map<CNetAddr, int64> CNode::setBanned; CCriticalSection CNode::cs_setBanned; void CNode::ClearBanned() @@ -734,12 +413,12 @@ void CNode::ClearBanned() setBanned.clear(); } -bool CNode::IsBanned(unsigned int ip) +bool CNode::IsBanned(CNetAddr ip) { bool fResult = false; CRITICAL_BLOCK(cs_setBanned) { - std::map<unsigned int, int64>::iterator i = setBanned.find(ip); + std::map<CNetAddr, int64>::iterator i = setBanned.find(ip); if (i != setBanned.end()) { int64 t = (*i).second; @@ -763,8 +442,8 @@ bool CNode::Misbehaving(int howmuch) { int64 banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban CRITICAL_BLOCK(cs_setBanned) - if (setBanned[addr.ip] < banTime) - setBanned[addr.ip] = banTime; + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; CloseSocketDisconnect(); printf("Disconnected %s for misbehavior (score=%d)\n", addr.ToString().c_str(), nMisbehavior); return true; @@ -788,15 +467,15 @@ void ThreadSocketHandler(void* parg) IMPLEMENT_RANDOMIZE_STACK(ThreadSocketHandler(parg)); try { - vnThreadsRunning[0]++; + vnThreadsRunning[THREAD_SOCKETHANDLER]++; ThreadSocketHandler2(parg); - vnThreadsRunning[0]--; + vnThreadsRunning[THREAD_SOCKETHANDLER]--; } catch (std::exception& e) { - vnThreadsRunning[0]--; + vnThreadsRunning[THREAD_SOCKETHANDLER]--; PrintException(&e, "ThreadSocketHandler()"); } catch (...) { - vnThreadsRunning[0]--; + vnThreadsRunning[THREAD_SOCKETHANDLER]--; throw; // support pthread_cancel() } printf("ThreadSocketHandler exiting\n"); @@ -898,9 +577,9 @@ void ThreadSocketHandler2(void* parg) } } - vnThreadsRunning[0]--; + vnThreadsRunning[THREAD_SOCKETHANDLER]--; int nSelect = select(hSocketMax + 1, &fdsetRecv, &fdsetSend, &fdsetError, &timeout); - vnThreadsRunning[0]++; + vnThreadsRunning[THREAD_SOCKETHANDLER]++; if (fShutdown) return; if (nSelect == SOCKET_ERROR) @@ -926,13 +605,17 @@ void ThreadSocketHandler2(void* parg) struct sockaddr_in sockaddr; socklen_t len = sizeof(sockaddr); SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len); - CAddress addr(sockaddr); + CAddress addr; int nInbound = 0; + if (hSocket != INVALID_SOCKET) + addr = CAddress(sockaddr); + CRITICAL_BLOCK(cs_vNodes) BOOST_FOREACH(CNode* pnode, vNodes) if (pnode->fInbound) nInbound++; + if (hSocket == INVALID_SOCKET) { if (WSAGetLastError() != WSAEWOULDBLOCK) @@ -940,11 +623,13 @@ void ThreadSocketHandler2(void* parg) } else if (nInbound >= GetArg("-maxconnections", 125) - MAX_OUTBOUND_CONNECTIONS) { - closesocket(hSocket); + CRITICAL_BLOCK(cs_setservAddNodeAddresses) + if (!setservAddNodeAddresses.count(addr)) + closesocket(hSocket); } - else if (CNode::IsBanned(addr.ip)) + else if (CNode::IsBanned(addr)) { - printf("connetion from %s dropped (banned)\n", addr.ToString().c_str()); + printf("connection from %s dropped (banned)\n", addr.ToString().c_str()); closesocket(hSocket); } else @@ -1107,15 +792,15 @@ void ThreadMapPort(void* parg) IMPLEMENT_RANDOMIZE_STACK(ThreadMapPort(parg)); try { - vnThreadsRunning[5]++; + vnThreadsRunning[THREAD_UPNP]++; ThreadMapPort2(parg); - vnThreadsRunning[5]--; + vnThreadsRunning[THREAD_UPNP]--; } catch (std::exception& e) { - vnThreadsRunning[5]--; + vnThreadsRunning[THREAD_UPNP]--; PrintException(&e, "ThreadMapPort()"); } catch (...) { - vnThreadsRunning[5]--; + vnThreadsRunning[THREAD_UPNP]--; PrintException(NULL, "ThreadMapPort()"); } printf("ThreadMapPort exiting\n"); @@ -1128,14 +813,19 @@ void ThreadMapPort2(void* parg) char port[6]; sprintf(port, "%d", GetListenPort()); - const char * rootdescurl = 0; const char * multicastif = 0; const char * minissdpdpath = 0; - int error = 0; struct UPNPDev * devlist = 0; char lanaddr[64]; +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0); +#else + /* miniupnpc 1.6 */ + int error = 0; devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error); +#endif struct UPNPUrls urls; struct IGDdatas data; @@ -1144,17 +834,43 @@ void ThreadMapPort2(void* parg) r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); if (r == 1) { - char intClient[16]; - char intPort[6]; + if (!addrLocalHost.IsRoutable()) + { + char externalIPAddress[40]; + r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); + if(r != UPNPCOMMAND_SUCCESS) + printf("UPnP: GetExternalIPAddress() returned %d\n", r); + else + { + if(externalIPAddress[0]) + { + printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); + CAddress addrExternalFromUPnP(CService(externalIPAddress, 0), nLocalServices); + if (addrExternalFromUPnP.IsRoutable()) + addrLocalHost = addrExternalFromUPnP; + } + else + printf("UPnP: GetExternalIPAddress failed.\n"); + } + } + string strDesc = "Bitcoin " + FormatFullVersion(); +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port, port, lanaddr, strDesc.c_str(), "TCP", 0); +#else + /* miniupnpc 1.6 */ r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, - port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0"); + port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0"); +#endif if(r!=UPNPCOMMAND_SUCCESS) printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", port, port, lanaddr, r, strupnperror(r)); else printf("UPnP Port Mapping successful.\n"); + int i = 1; loop { if (fShutdown || !fUseUPnP) { @@ -1164,7 +880,26 @@ void ThreadMapPort2(void* parg) FreeUPNPUrls(&urls); return; } + if (i % 600 == 0) // Refresh every 20 minutes + { +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port, port, lanaddr, strDesc.c_str(), "TCP", 0); +#else + /* miniupnpc 1.6 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0"); +#endif + + if(r!=UPNPCOMMAND_SUCCESS) + printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + port, port, lanaddr, r, strupnperror(r)); + else + printf("UPnP Port Mapping successful.\n");; + } Sleep(2000); + i++; } } else { printf("No valid UPnP IGDs found\n"); @@ -1184,9 +919,8 @@ void MapPort(bool fMapPort) if (fUseUPnP != fMapPort) { fUseUPnP = fMapPort; - WriteSetting("fUseUPnP", fUseUPnP); } - if (fUseUPnP && vnThreadsRunning[5] < 1) + if (fUseUPnP && vnThreadsRunning[THREAD_UPNP] < 1) { if (!CreateThread(ThreadMapPort, NULL)) printf("Error: ThreadMapPort(ThreadMapPort) failed\n"); @@ -1207,39 +941,61 @@ void MapPort(bool /* unused fMapPort */) - -static const char *strDNSSeed[] = { - "bitseed.xf2.org", - "dnsseed.bluematt.me", +// DNS seeds +// Each pair gives a source name and a seed name. +// The first name is used as information source for addrman. +// The second name should resolve to a list of seed addresses. +static const char *strDNSSeed[][2] = { + {"xf2.org", "bitseed.xf2.org"}, + {"bluematt.me", "dnsseed.bluematt.me"}, + {"bitcoin.sipa.be", "seed.bitcoin.sipa.be"}, + {"dashjr.org", "dnsseed.bitcoin.dashjr.org"}, }; -void DNSAddressSeed() +void ThreadDNSAddressSeed(void* parg) { + IMPLEMENT_RANDOMIZE_STACK(ThreadDNSAddressSeed(parg)); + try + { + vnThreadsRunning[THREAD_DNSSEED]++; + ThreadDNSAddressSeed2(parg); + vnThreadsRunning[THREAD_DNSSEED]--; + } + catch (std::exception& e) { + vnThreadsRunning[THREAD_DNSSEED]--; + PrintException(&e, "ThreadDNSAddressSeed()"); + } catch (...) { + vnThreadsRunning[THREAD_DNSSEED]--; + throw; // support pthread_cancel() + } + printf("ThreadDNSAddressSeed exiting\n"); +} + +void ThreadDNSAddressSeed2(void* parg) +{ + printf("ThreadDNSAddressSeed started\n"); int found = 0; if (!fTestNet) { printf("Loading addresses from DNS seeds (could take a while)\n"); - CAddrDB addrDB; - addrDB.TxnBegin(); for (int seed_idx = 0; seed_idx < ARRAYLEN(strDNSSeed); seed_idx++) { - vector<CAddress> vaddr; - if (Lookup(strDNSSeed[seed_idx], vaddr, NODE_NETWORK, -1, true)) + vector<CNetAddr> vaddr; + vector<CAddress> vAdd; + if (LookupHost(strDNSSeed[seed_idx][1], vaddr)) { - BOOST_FOREACH (CAddress& addr, vaddr) + BOOST_FOREACH(CNetAddr& ip, vaddr) { - if (addr.GetByte(3) != 127) - { - addr.nTime = 0; - AddAddress(addr, 0, &addrDB); - found++; - } + int nOneDay = 24*3600; + CAddress addr = CAddress(CService(ip, GetDefaultPort())); + addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old + vAdd.push_back(addr); + found++; } } + addrman.Add(vAdd, CNetAddr(strDNSSeed[seed_idx][0], true)); } - - addrDB.TxnCommit(); // Save addresses (it's ok if this fails) } printf("%d addresses found from DNS seeds\n", found); @@ -1247,90 +1003,142 @@ void DNSAddressSeed() + + + + + + + + + unsigned int pnSeed[] = { - 0x6884ac63, 0x3ffecead, 0x2919b953, 0x0942fe50, 0x7a1d922e, 0xcdd6734a, 0x953a5bb6, 0x2c46922e, - 0xe2a5f143, 0xaa39103a, 0xa06afa5c, 0x135ffd59, 0xe8e82863, 0xf61ef029, 0xf75f042e, 0x2b363532, - 0x29b2df42, 0x16b1f64e, 0xd46e281b, 0x5280bf58, 0x60372229, 0x1be58e4f, 0xa8496f45, 0x1fb1a057, - 0x756b3844, 0x3bb79445, 0x0b375518, 0xcccb0102, 0xb682bf2e, 0x46431c02, 0x3a81073a, 0xa3771f1f, - 0x213a121f, 0x85dc2c1b, 0x56b4323b, 0xb34e8945, 0x3c40b33d, 0xfa276418, 0x1f818d29, 0xebe1e344, - 0xf6160a18, 0xf4fa384a, 0x34b09558, 0xb882b543, 0xe3ce2253, 0x6abf56d8, 0xe91b1155, 0x688ee6ad, - 0x2efc6058, 0x4792cd47, 0x0c32f757, 0x4c813a46, 0x8c93644a, 0x37507444, 0x813ad218, 0xdac06d4a, - 0xe4c63e4b, 0x21a1ea3c, 0x8d88556f, 0x30e9173a, 0x041f681b, 0xdc77ba50, 0xc0072753, 0xceddd44f, - 0x052d1743, 0xe3c77a4a, 0x13981c3a, 0x5685d918, 0x3c0e4e70, 0x3e56fb54, 0xb676ae0c, 0xac93c859, - 0x22279f43, 0x975a4542, 0xe527f071, 0xea162f2e, 0x3c65a32e, 0x5be5713b, 0x961ec418, 0xb202922e, - 0x5ef7be50, 0xce49f53e, 0x05803b47, 0x8463b055, 0x78576153, 0x3ec2ae3a, 0x4bbd7118, 0xafcee043, - 0x56a3e8ba, 0x6174de4d, 0x8d01ba4b, 0xc9af564e, 0xdbc9c547, 0xa627474d, 0xdada9244, 0xd3b3083a, - 0x523e071f, 0xd6b96f18, 0xbd527c46, 0xdf2bbb4d, 0xd37b4a4b, 0x3a6a2158, 0xc064b055, 0x18a8e055, - 0xec4dae3b, 0x0540416c, 0x475b4fbe, 0x064803b2, 0x48e9f062, 0x2898524b, 0xd315ff43, 0xf786d247, - 0xc7ea2f3e, 0xc087f043, 0xc163354b, 0x8250284d, 0xed300029, 0xbf36e05c, 0x8eb3ae4c, 0xe7aa623e, - 0x7ced0274, 0xdd362c1b, 0x362b995a, 0xca26b629, 0x3fc41618, 0xb97b364e, 0xa05b8729, 0x0f5e3c43, - 0xdf942618, 0x6aeb9b5b, 0xbf04762e, 0xfaaeb118, 0x87579958, 0x76520044, 0xc2660c5b, 0x628b201b, - 0xf193932e, 0x1c0ad045, 0xff908346, 0x8da9d4da, 0xed201c1f, 0xa47a2b1b, 0x330007d4, 0x8ba1ed47, - 0xb2f02d44, 0x7db62c1b, 0x781c454b, 0xc0300029, 0xb7062a45, 0x88b52e3a, 0x78dd6b63, 0x1cb9b718, - 0x5d358e47, 0x59912c3b, 0x79607544, 0x5197f759, 0xc023be48, 0xd1013743, 0x0f354057, 0x8e3aac3b, - 0x4114693e, 0x22316318, 0xe27dda50, 0x878eac3b, 0x4948a21f, 0x5db7f24c, 0x8ccb6157, 0x26a5de18, - 0x0a11bd43, 0x27bb1e41, 0x60a7a951, 0x3e16b35e, 0x07888b53, 0x5648a853, 0x0149fe50, 0xd070a34f, - 0x6454c96d, 0xd6e54758, 0xa96dc152, 0x65447861, 0xf6bdf95e, 0x10400202, 0x2c29d483, 0x18174732, - 0x1d840618, 0x12e61818, 0x089d3f3c, 0x917e931f, 0xd1b0c90e, 0x25bd3c42, 0xeb05775b, 0x7d550c59, - 0x6cfacb01, 0xe4224444, 0xa41dd943, 0x0f5aa643, 0x5e33731b, 0x81036d50, 0x6f46a0d1, 0x7731be43, - 0x14840e18, 0xf1e8d059, 0x661d2b1f, 0x40a3201b, 0x9407b843, 0xedf0254d, 0x7bd1a5bc, 0x073dbe51, - 0xe864a97b, 0x2efd947b, 0xb9ca0e45, 0x4e2113ad, 0xcc305731, 0xd39ca63c, 0x733df918, 0xda172b1f, - 0xaa03b34d, 0x7230fd4d, 0xf1ce6e3a, 0x2e9fab43, 0xa4010750, 0xa928bd18, 0x6809be42, 0xb19de348, - 0xff956270, 0x0d795f51, 0xd2dec247, 0x6df5774b, 0xbac11f79, 0xdfb05c75, 0x887683d8, 0xa1e83632, - 0x2c0f7671, 0x28bcb65d, 0xac2a7545, 0x3eebfc60, 0x304ad7c4, 0xa215a462, 0xc86f0f58, 0xcfb92ebe, - 0x5e23ed82, 0xf506184b, 0xec0f19b7, 0x060c59ad, 0x86ee3174, 0x85380774, 0xa199a562, 0x02b507ae, - 0x33eb2163, 0xf2112b1f, 0xb702ba50, 0x131b9618, 0x90ccd04a, 0x08f3273b, 0xecb61718, 0x64b8b44d, - 0x182bf4dc, 0xc7b68286, 0x6e318d5f, 0xfdb03654, 0xb3272e54, 0xe014ad4b, 0x274e4a31, 0x7806375c, - 0xbc34a748, 0x1b5ad94a, 0x6b54d10e, 0x73e2ae6e, 0x5529d483, 0x8455a76d, 0x99c13f47, 0x1d811741, - 0xa9782a78, 0x0b00464d, 0x7266ea50, 0x532dab46, 0x33e1413e, 0x780d0c18, 0x0fb0854e, 0x03370155, - 0x2693042e, 0xfa3d824a, 0x2bb1681b, 0x37ea2a18, 0x7fb8414b, 0x32e0713b, 0xacf38d3f, 0xa282716f, - 0xb1a09d7b, 0xa04b764b, 0x83c94d18, 0x05ee4c6d, 0x0e795f51, 0x46984352, 0xf80fc247, 0x3fccb946, - 0xd7ae244b, 0x0a8e0a4c, 0x57b141bc, 0x3647bed1, 0x1431b052, 0x803a8bbb, 0xfc69056b, 0xf5991862, - 0x14963b2e, 0xd35d5dda, 0xc6c73574, 0xc8f1405b, 0x0ca4224d, 0xecd36071, 0xa9461754, 0xe7a0ed72, - 0x559e8346, 0x1c9beec1, 0xc786ea4a, 0x9561b44d, 0x9788074d, 0x1a69934f, 0x23c5614c, 0x07c79d4b, - 0xc7ee52db, 0xc72df351, 0xcb135e44, 0xa0988346, 0xc211fc4c, 0x87dec34b, 0x1381074d, 0x04a65cb7, - 0x4409083a, 0x4a407a4c, 0x92b8d37d, 0xacf50b4d, 0xa58aa5bc, 0x448f801f, 0x9c83762e, 0x6fd5734a, - 0xfe2d454b, 0x84144c55, 0x05190e4c, 0xb2151448, 0x63867a3e, 0x16099018, 0x9c010d3c, 0x962d8f3d, - 0xd51ee453, 0x9d86801f, 0x68e87b47, 0x6bf7bb73, 0x5fc7910e, 0x10d90118, 0x3db04442, 0x729d3e4b, - 0xc397d842, 0x57bb15ad, 0x72f31f4e, 0xc9380043, 0x2bb24e18, 0xd9b8ab50, 0xb786801f, 0xf4dc4847, - 0x85f4bb51, 0x4435995b, 0x5ba07e40, 0x2c57392e, 0x3628124b, 0x9839b64b, 0x6fe8b24d, 0xaddce847, - 0x75260e45, 0x0c572a43, 0xfea21902, 0xb9f9742e, 0x5a70d443, 0x8fc5910e, 0x868d4744, 0x56245e02, - 0xd7eb5f02, 0x35c12c1b, 0x4373034b, 0x8786554c, 0xa6facf18, 0x4b11a31f, 0x3570664e, 0x5a64bc42, - 0x0b03983f, 0x8f457e4c, 0x0fd874c3, 0xb6cf31b2, 0x2bbc2d4e, 0x146ca5b2, 0x9d00b150, 0x048a4153, - 0xca4dcd43, 0xc1607cca, 0x8234cf57, 0x9c7daead, 0x3dc07658, 0xea5c6e4c, 0xf1a0084e, 0x16d2ee53, - 0x1b849418, 0xfe913a47, 0x1e988f62, 0x208b644c, 0xc55ee980, 0xbdbce747, 0xf59a384e, 0x0f56091b, - 0x7417b745, 0x0c37344e, 0x2c62ab47, 0xf8533a4d, 0x8030084d, 0x76b93c4b, 0xda6ea0ad, 0x3c54f618, - 0x63b0de1f, 0x7370d858, 0x1a70bb4c, 0xdda63b2e, 0x60b2ba50, 0x1ba7d048, 0xbe1b2c1b, 0xabea5747, - 0x29ad2e4d, 0xe8cd7642, 0x66c80e18, 0x138bf34a, 0xc6145e44, 0x2586794c, 0x07bc5478, 0x0da0b14d, - 0x8f95354e, 0x9eb11c62, 0xa1545e46, 0x2e7a2602, 0x408c9c3d, 0x59065d55, 0xf51d1a4c, 0x3bbc6a4e, - 0xc71b2a2e, 0xcdaaa545, 0x17d659d0, 0x5202e7ad, 0xf1b68445, 0x93375961, 0xbd88a043, 0x066ad655, - 0x890f6318, 0x7b7dca47, 0x99bdd662, 0x3bb4fc53, 0x1231efdc, 0xc0a99444, 0x96bbea47, 0x61ed8748, - 0x27dfa73b, 0x8d4d1754, 0x3460042e, 0x551f0c4c, 0x8d0e0718, 0x162ddc53, 0x53231718, 0x1ecd65d0, - 0x944d28bc, 0x3b79d058, 0xaff97fbc, 0x4860006c, 0xc101c90e, 0xace41743, 0xa5975d4c, 0x5cc2703e, - 0xb55a4450, 0x02d18840, 0xee2765ae, 0xd6012fd5, 0x24c94d7d, 0x8c6eec47, 0x7520ba5d, 0x9e15e460, - 0x8510b04c, 0x75ec3847, 0x1dfa6661, 0xe172b3ad, 0x5744c90e, 0x52a0a152, 0x8d6fad18, 0x67b74b6d, - 0x93a089b2, 0x0f3ac5d5, 0xe5de1855, 0x43d25747, 0x4bad804a, 0x55b408d8, 0x60a36441, 0xf553e860, - 0xdb2fa2c8, 0x03152b32, 0xdd27a7d5, 0x3116a8b8, 0x0a1d708c, 0xeee2f13c, 0x6acf436f, 0xce6eb4ca, - 0x101cd3d9, 0x1c48a6b8, 0xe57d6f44, 0x93dcf562, + 0x959bd347, 0xf8de42b2, 0x73bc0518, 0xea6edc50, 0x21b00a4d, 0xc725b43d, 0xd665464d, 0x1a2a770e, + 0x27c93946, 0x65b2fa46, 0xb80ae255, 0x66b3b446, 0xb1877a3e, 0x6ee89e3e, 0xc3175b40, 0x2a01a83c, + 0x95b1363a, 0xa079ad3d, 0xe6ca801f, 0x027f4f4a, 0x34f7f03a, 0xf790f04a, 0x16ca801f, 0x2f4d5e40, + 0x3a4d5e40, 0xc43a322e, 0xc8159753, 0x14d4724c, 0x7919a118, 0xe0bdb34e, 0x68a16b2e, 0xff64b44d, + 0x6099115b, 0x9b57b05b, 0x7bd1b4ad, 0xdf95944f, 0x29d2b73d, 0xafa8db79, 0xe247ba41, 0x24078348, + 0xf722f03c, 0x33567ebc, 0xace64ed4, 0x984d3932, 0xb5f34e55, 0x27b7024d, 0x94579247, 0x8894042e, + 0x9357d34c, 0x1063c24b, 0xcaa228b1, 0xa3c5a8b2, 0x5dc64857, 0xa2c23643, 0xa8369a54, 0x31203077, + 0x00707c5c, 0x09fc0b3a, 0x272e9e2e, 0xf80f043e, 0x9449ca3e, 0x5512c33e, 0xd106b555, 0xe8024157, + 0xe288ec29, 0xc79c5461, 0xafb63932, 0xdb02ab4b, 0x0e512777, 0x8a145a4c, 0xb201ff4f, 0x5e09314b, + 0xcd9bfbcd, 0x1c023765, 0x4394e75c, 0xa728bd4d, 0x65331552, 0xa98420b1, 0x89ecf559, 0x6e80801f, + 0xf404f118, 0xefd62b51, 0x05918346, 0x9b186d5f, 0xacabab46, 0xf912e255, 0xc188ea62, 0xcc55734e, + 0xc668064d, 0xd77a4558, 0x46201c55, 0xf17dfc80, 0xf7142f2e, 0x87bfb718, 0x8aa54fb2, 0xc451d518, + 0xc4ae8831, 0x8dd44d55, 0x5bbd206c, 0x64536b5d, 0x5c667e60, 0x3b064242, 0xfe963a42, 0xa28e6dc8, + 0xe8a9604a, 0xc989464e, 0xd124a659, 0x50065140, 0xa44dfe5e, 0x1079e655, 0x3fb986d5, 0x47895b18, + 0x7d3ce4ad, 0x4561ba50, 0x296eec62, 0x255b41ad, 0xaed35ec9, 0x55556f12, 0xc7d3154d, 0x3297b65d, + 0x8930121f, 0xabf42e4e, 0x4a29e044, 0x1212685d, 0x676c1e40, 0xce009744, 0x383a8948, 0xa2dbd0ad, + 0xecc2564d, 0x07dbc252, 0x887ee24b, 0x5171644c, 0x6bb798c1, 0x847f495d, 0x4cbb7145, 0x3bb81c32, + 0x45eb262e, 0xc8015a4e, 0x250a361b, 0xf694f946, 0xd64a183e, 0xd4f1dd59, 0x8f20ffd4, 0x51d9e55c, + 0x09521763, 0x5e02002e, 0x32c8074d, 0xe685762e, 0x8290b0bc, 0x762a922e, 0xfc5ee754, 0x83a24829, + 0x775b224d, 0x6295bb4d, 0x38ec0555, 0xbffbba50, 0xe5560260, 0x86b16a7c, 0xd372234e, 0x49a3c24b, + 0x2f6a171f, 0x4d75ed60, 0xae94115b, 0xcb543744, 0x63080c59, 0x3f9c724c, 0xc977ce18, 0x532efb18, + 0x69dc3b2e, 0x5f94d929, 0x1732bb4d, 0x9c814b4d, 0xe6b3762e, 0xc024f662, 0x8face35b, 0x6b5b044d, + 0x798c7b57, 0x79a6b44c, 0x067d3057, 0xf9e94e5f, 0x91cbe15b, 0x71405eb2, 0x2662234e, 0xcbcc4a6d, + 0xbf69d54b, 0xa79b4e55, 0xec6d3e51, 0x7c0b3c02, 0x60f83653, 0x24c1e15c, 0x1110b62e, 0x10350f59, + 0xa56f1d55, 0x3509e7a9, 0xeb128354, 0x14268e2e, 0x934e28bc, 0x8e32692e, 0x8331a21f, 0x3e633932, + 0xc812b12e, 0xc684bf2e, 0x80112d2e, 0xe0ddc96c, 0xc630ca4a, 0x5c09b3b2, 0x0b580518, 0xc8e9d54b, + 0xd169aa43, 0x17d0d655, 0x1d029963, 0x7ff87559, 0xcb701f1f, 0x6fa3e85d, 0xe45e9a54, 0xf05d1802, + 0x44d03b2e, 0x837b692e, 0xccd4354e, 0x3d6da13c, 0x3423084d, 0xf707c34a, 0x55f6db3a, 0xad26e442, + 0x6233a21f, 0x09e80e59, 0x8caeb54d, 0xbe870941, 0xb407d20e, 0x20b51018, 0x56fb152e, 0x460d2a4e, + 0xbb9a2946, 0x560eb12e, 0xed83dd29, 0xd6724f53, 0xa50aafb8, 0x451346d9, 0x88348e2e, 0x7312fead, + 0x8ecaf96f, 0x1bda4e5f, 0xf1671e40, 0x3c8c3e3b, 0x4716324d, 0xdde24ede, 0xf98cd17d, 0xa91d4644, + 0x28124eb2, 0x147d5129, 0xd022042e, 0x61733d3b, 0xad0d5e02, 0x8ce2932e, 0xe5c18502, 0x549c1e32, + 0x9685801f, 0x86e217ad, 0xd948214b, 0x4110f462, 0x3a2e894e, 0xbd35492e, 0x87e0d558, 0x64b8ef7d, + 0x7c3eb962, 0x72a84b3e, 0x7cd667c9, 0x28370a2e, 0x4bc60e7b, 0x6fc1ec60, 0x14a6983f, 0x86739a4b, + 0x46954e5f, 0x32e2e15c, 0x2e9326cf, 0xe5801c5e, 0x379607b2, 0x32151145, 0xf0e39744, 0xacb54c55, + 0xa37dfb60, 0x83b55cc9, 0x388f7ca5, 0x15034f5f, 0x3e94965b, 0x68e0ffad, 0x35280f59, 0x8fe190cf, + 0x7c6ba5b2, 0xa5e9db43, 0x4ee1fc60, 0xd9d94e5f, 0x04040677, 0x0ea9b35e, 0x5961f14f, 0x67fda063, + 0xa48a5a31, 0xc6524e55, 0x283d325e, 0x3f37515f, 0x96b94b3e, 0xacce620e, 0x6481cc5b, 0xa4a06d4b, + 0x9e95d2d9, 0xe40c03d5, 0xc2f4514b, 0xb79aad44, 0xf64be843, 0xb2064070, 0xfca00455, 0x429dfa4e, + 0x2323f173, 0xeda4185e, 0xabd5227d, 0x9efd4d58, 0xb1104758, 0x4811e955, 0xbd9ab355, 0xe921f44b, + 0x9f166dce, 0x09e279b2, 0xe0c9ac7b, 0x7901a5ad, 0xa145d4b0, 0x79104671, 0xec31e35a, 0x4fe0b555, + 0xc7d9cbad, 0xad057f55, 0xe94cc759, 0x7fe0b043, 0xe4529f2e, 0x0d4dd4b2, 0x9f11a54d, 0x031e2e4e, + 0xe6014f5f, 0x11d1ca6c, 0x26bd7f61, 0xeb86854f, 0x4d347b57, 0x116bbe2e, 0xdba7234e, 0x7bcbfd2e, + 0x174dd4b2, 0x6686762e, 0xb089ba50, 0xc6258246, 0x087e767b, 0xc4a8cb4a, 0x595dba50, 0x7f0ae502, + 0x7b1dbd5a, 0xa0603492, 0x57d1af4b, 0x9e21ffd4, 0x6393064d, 0x7407376e, 0xe484762e, 0x122a4e53, + 0x4a37aa43, 0x3888a6be, 0xee77864e, 0x039c8dd5, 0x688d89af, 0x0e988f62, 0x08218246, 0xfc2f8246, + 0xd1d97040, 0xd64cd4b2, 0x5ae4a6b8, 0x7d0de9bc, 0x8d304d61, 0x06c5c672, 0xa4c8bd4d, 0xe0fd373b, + 0x575ebe4d, 0x72d26277, 0x55570f55, 0x77b154d9, 0xe214293a, 0xfc740f4b, 0xfe3f6a57, 0xa9c55f02, + 0xae4054db, 0x2394d918, 0xb511b24a, 0xb8741ab2, 0x0758e65e, 0xc7b5795b, 0xb0a30a4c, 0xaf7f170c, + 0xf3b4762e, 0x8179576d, 0x738a1581, 0x4b95b64c, 0x9829b618, 0x1bea932e, 0x7bdeaa4b, 0xcb5e0281, + 0x65618f54, 0x0658474b, 0x27066acf, 0x40556d65, 0x7d204d53, 0xf28bc244, 0xdce23455, 0xadc0ff54, + 0x3863c948, 0xcee34e5f, 0xdeb85e02, 0x2ed17a61, 0x6a7b094d, 0x7f0cfc40, 0x59603f54, 0x3220afbc, + 0xb5dfd962, 0x125d21c0, 0x13f8d243, 0xacfefb4e, 0x86c2c147, 0x3d8bbd59, 0xbd02a21f, 0x2593042e, + 0xc6a17a7c, 0x28925861, 0xb487ed44, 0xb5f4fd6d, 0x90c28a45, 0x5a14f74d, 0x43d71b4c, 0x728ebb5d, + 0x885bf950, 0x08134dd0, 0x38ec046e, 0xc575684b, 0x50082d2e, 0xa2f47757, 0x270f86ae, 0xf3ff6462, + 0x10ed3f4e, 0x4b58d462, 0xe01ce23e, 0x8c5b092e, 0x63e52f4e, 0x22c1e85d, 0xa908f54e, 0x8591624f, + 0x2c0fb94e, 0xa280ba3c, 0xb6f41b4c, 0x24f9aa47, 0x27201647, 0x3a3ea6dc, 0xa14fc3be, 0x3c34bdd5, + 0x5b8d4f5b, 0xaadeaf4b, 0xc71cab50, 0x15697a4c, 0x9a1a734c, 0x2a037d81, 0x2590bd59, 0x48ec2741, + 0x53489c5b, 0x7f00314b, 0x2170d362, 0xf2e92542, 0x42c10b44, 0x98f0f118, 0x883a3456, 0x099a932e, + 0xea38f7bc, 0x644e9247, 0xbb61b62e, 0x30e0863d, 0x5f51be54, 0x207215c7, 0x5f306c45, 0xaa7f3932, + 0x98da7d45, 0x4e339b59, 0x2e411581, 0xa808f618, 0xad2c0c59, 0x54476741, 0x09e99fd1, 0x5db8f752, + 0xc16df8bd, 0x1dd4b44f, 0x106edf2e, 0x9e15c180, 0x2ad6b56f, 0x633a5332, 0xff33787c, 0x077cb545, + 0x6610be6d, 0x75aad2c4, 0x72fb4d5b, 0xe81e0f59, 0x576f6332, 0x47333373, 0x351ed783, 0x2d90fb50, + 0x8d5e0f6c, 0x5b27a552, 0xdb293ebb, 0xe55ef950, 0x4b133ad8, 0x75df975a, 0x7b6a8740, 0xa899464b, + 0xfab15161, 0x10f8b64d, 0xd055ea4d, 0xee8e146b, 0x4b14afb8, 0x4bc1c44a, 0x9b961dcc, 0xd111ff43, + 0xfca0b745, 0xc800e412, 0x0afad9d1, 0xf751c350, 0xf9f0cccf, 0xa290a545, 0x8ef13763, 0x7ec70d59, + 0x2b066acf, 0x65496c45, 0xade02c1b, 0xae6eb077, 0x92c1e65b, 0xc064e6a9, 0xc649e56d, 0x5287a243, + 0x36de4f5b, 0x5b1df6ad, 0x65c39a59, 0xdba805b2, 0x20067aa8, 0x6457e56d, 0x3cee26cf, 0xfd3ff26d, + 0x04f86d4a, 0x06b8e048, 0xa93bcd5c, 0x91135852, 0xbe90a643, 0x8fa0094d, 0x06d8215f, 0x2677094d, + 0xd735685c, 0x164a00c9, 0x5209ac5f, 0xa9564c5c, 0x3b504f5f, 0xcc826bd0, 0x4615042e, 0x5fe13b4a, + 0x8c81b86d, 0x879ab68c, 0x1de564b8, 0x434487d8, 0x2dcb1b63, 0x82ab524a, 0xb0676abb, 0xa13d9c62, + 0xdbb5b86d, 0x5b7f4b59, 0xaddfb44d, 0xad773532, 0x3997054c, 0x72cebd89, 0xb194544c, 0xc5b8046e, + 0x6e1adeb2, 0xaa5abb51, 0xefb54b44, 0x15efc54f, 0xe9f1bc4d, 0x5f401b6c, 0x97f018ad, 0xc82f9252, + 0x2cdc762e, 0x8e52e56d, 0x1827175e, 0x9b7d7d80, 0xb2ad6845, 0x51065140, 0x71180a18, 0x5b27006c, + 0x0621e255, 0x721cbe58, 0x670c0cb8, 0xf8bd715d, 0xe0bdc5d9, 0xed843501, 0x4b84554d, 0x7f1a18bc, + 0x53bcaf47, 0x5729d35f, 0xf0dda246, 0x22382bd0, 0x4d641fb0, 0x316afcde, 0x50a22f1f, 0x73608046, + 0xc461d84a, 0xb2dbe247, }; +void DumpAddresses() +{ + CAddrDB adb; + adb.WriteAddrman(addrman); +} +void ThreadDumpAddress2(void* parg) +{ + vnThreadsRunning[THREAD_DUMPADDRESS]++; + while (!fShutdown) + { + DumpAddresses(); + vnThreadsRunning[THREAD_DUMPADDRESS]--; + Sleep(100000); + vnThreadsRunning[THREAD_DUMPADDRESS]++; + } + vnThreadsRunning[THREAD_DUMPADDRESS]--; +} + +void ThreadDumpAddress(void* parg) +{ + IMPLEMENT_RANDOMIZE_STACK(ThreadDumpAddress(parg)); + try + { + ThreadDumpAddress2(parg); + } + catch (std::exception& e) { + PrintException(&e, "ThreadDumpAddress()"); + } + printf("ThreadDumpAddress exiting\n"); +} void ThreadOpenConnections(void* parg) { IMPLEMENT_RANDOMIZE_STACK(ThreadOpenConnections(parg)); try { - vnThreadsRunning[1]++; + vnThreadsRunning[THREAD_OPENCONNECTIONS]++; ThreadOpenConnections2(parg); - vnThreadsRunning[1]--; + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; } catch (std::exception& e) { - vnThreadsRunning[1]--; + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; PrintException(&e, "ThreadOpenConnections()"); } catch (...) { - vnThreadsRunning[1]--; + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; PrintException(NULL, "ThreadOpenConnections()"); } printf("ThreadOpenConnections exiting\n"); @@ -1347,7 +1155,7 @@ void ThreadOpenConnections2(void* parg) { BOOST_FOREACH(string strAddr, mapMultiArgs["-connect"]) { - CAddress addr(strAddr, fAllowDNS); + CAddress addr(CService(strAddr, GetDefaultPort(), fAllowDNS)); if (addr.IsValid()) OpenNetworkConnection(addr); for (int i = 0; i < 10 && i < nLoop; i++) @@ -1360,32 +1168,22 @@ void ThreadOpenConnections2(void* parg) } } - // Connect to manually added nodes first - if (mapArgs.count("-addnode")) - { - BOOST_FOREACH(string strAddr, mapMultiArgs["-addnode"]) - { - CAddress addr(strAddr, fAllowDNS); - if (addr.IsValid()) - { - OpenNetworkConnection(addr); - Sleep(500); - if (fShutdown) - return; - } - } - } - // Initiate network connections int64 nStart = GetTime(); loop { - // Limit outbound connections - vnThreadsRunning[1]--; + int nOutbound = 0; + + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; Sleep(500); + vnThreadsRunning[THREAD_OPENCONNECTIONS]++; + if (fShutdown) + return; + + // Limit outbound connections loop { - int nOutbound = 0; + nOutbound = 0; CRITICAL_BLOCK(cs_vNodes) BOOST_FOREACH(CNode* pnode, vNodes) if (!pnode->fInbound) @@ -1394,104 +1192,73 @@ void ThreadOpenConnections2(void* parg) nMaxOutboundConnections = min(nMaxOutboundConnections, (int)GetArg("-maxconnections", 125)); if (nOutbound < nMaxOutboundConnections) break; + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; Sleep(2000); + vnThreadsRunning[THREAD_OPENCONNECTIONS]++; if (fShutdown) return; } - vnThreadsRunning[1]++; - if (fShutdown) - return; - CRITICAL_BLOCK(cs_mapAddresses) + bool fAddSeeds = false; + + // Add seed nodes if IRC isn't working + bool fTOR = (fUseProxy && addrProxy.GetPort() == 9050); + if (addrman.size()==0 && (GetTime() - nStart > 60 || fTOR) && !fTestNet) { - // Add seed nodes if IRC isn't working - bool fTOR = (fUseProxy && addrProxy.port == htons(9050)); - if (mapAddresses.empty() && (GetTime() - nStart > 60 || fTOR) && !fTestNet) + std::vector<CAddress> vAdd; + for (int i = 0; i < ARRAYLEN(pnSeed); i++) { - for (int i = 0; i < ARRAYLEN(pnSeed); i++) - { - // It'll only connect to one or two seed nodes because once it connects, - // it'll get a pile of addresses with newer timestamps. - // Seed nodes are given a random 'last seen time' of between one and two - // weeks ago. - const int64 nOneWeek = 7*24*60*60; - CAddress addr; - addr.ip = pnSeed[i]; - addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; - AddAddress(addr); - } + // It'll only connect to one or two seed nodes because once it connects, + // it'll get a pile of addresses with newer timestamps. + // Seed nodes are given a random 'last seen time' of between one and two + // weeks ago. + const int64 nOneWeek = 7*24*60*60; + struct in_addr ip; + memcpy(&ip, &pnSeed[i], sizeof(ip)); + CAddress addr(CService(ip, GetDefaultPort())); + addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; + vAdd.push_back(addr); } + addrman.Add(vAdd, CNetAddr("127.0.0.1")); } - // // Choose an address to connect to based on most recently seen // CAddress addrConnect; - int64 nBest = INT64_MIN; + int64 nBest = std::numeric_limits<int64>::min(); // Only connect to one address per a.b.?.? range. // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. - set<unsigned int> setConnected; + set<vector<unsigned char> > setConnected; CRITICAL_BLOCK(cs_vNodes) BOOST_FOREACH(CNode* pnode, vNodes) - setConnected.insert(pnode->addr.ip & 0x0000ffff); + setConnected.insert(pnode->addr.GetGroup()); int64 nANow = GetAdjustedTime(); - CRITICAL_BLOCK(cs_mapAddresses) + int nTries = 0; + loop { - BOOST_FOREACH(const PAIRTYPE(vector<unsigned char>, CAddress)& item, mapAddresses) - { - const CAddress& addr = item.second; - if (!addr.IsIPv4() || !addr.IsValid() || setConnected.count(addr.ip & 0x0000ffff)) - continue; - int64 nSinceLastSeen = nANow - addr.nTime; - int64 nSinceLastTry = nANow - addr.nLastTry; - - // Randomize the order in a deterministic way, putting the standard port first - int64 nRandomizer = (uint64)(nStart * 4951 + addr.nLastTry * 9567851 + addr.ip * 7789) % (2 * 60 * 60); - if (addr.port != htons(GetDefaultPort())) - nRandomizer += 2 * 60 * 60; - - // Last seen Base retry frequency - // <1 hour 10 min - // 1 hour 1 hour - // 4 hours 2 hours - // 24 hours 5 hours - // 48 hours 7 hours - // 7 days 13 hours - // 30 days 27 hours - // 90 days 46 hours - // 365 days 93 hours - int64 nDelay = (int64)(3600.0 * sqrt(fabs((double)nSinceLastSeen) / 3600.0) + nRandomizer); - - // Fast reconnect for one hour after last seen - if (nSinceLastSeen < 60 * 60) - nDelay = 10 * 60; - - // Limit retry frequency - if (nSinceLastTry < nDelay) - continue; + // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) + CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); - // If we have IRC, we'll be notified when they first come online, - // and again every 24 hours by the refresh broadcast. - if (nGotIRCAddresses > 0 && vNodes.size() >= 2 && nSinceLastSeen > 24 * 60 * 60) - continue; + // if we selected an invalid address, restart + if (!addr.IsIPv4() || !addr.IsValid() || setConnected.count(addr.GetGroup()) || addr == addrLocalHost) + break; - // Only try the old stuff if we don't have enough connections - if (vNodes.size() >= 8 && nSinceLastSeen > 24 * 60 * 60) - continue; + nTries++; - // If multiple addresses are ready, prioritize by time since - // last seen and time since last tried. - int64 nScore = min(nSinceLastTry, (int64)24 * 60 * 60) - nSinceLastSeen - nRandomizer; - if (nScore > nBest) - { - nBest = nScore; - addrConnect = addr; - } - } + // only consider very recently tried nodes after 30 failed attempts + if (nANow - addr.nLastTry < 600 && nTries < 30) + continue; + + // do not allow non-default ports, unless after 50 invalid addresses selected already + if (addr.GetPort() != GetDefaultPort() && nTries < 50) + continue; + + addrConnect = addr; + break; } if (addrConnect.IsValid()) @@ -1499,6 +1266,76 @@ void ThreadOpenConnections2(void* parg) } } +void ThreadOpenAddedConnections(void* parg) +{ + IMPLEMENT_RANDOMIZE_STACK(ThreadOpenAddedConnections(parg)); + try + { + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++; + ThreadOpenAddedConnections2(parg); + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; + } + catch (std::exception& e) { + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; + PrintException(&e, "ThreadOpenAddedConnections()"); + } catch (...) { + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; + PrintException(NULL, "ThreadOpenAddedConnections()"); + } + printf("ThreadOpenAddedConnections exiting\n"); +} + +void ThreadOpenAddedConnections2(void* parg) +{ + printf("ThreadOpenAddedConnections started\n"); + + if (mapArgs.count("-addnode") == 0) + return; + + vector<vector<CService> > vservAddressesToAdd(0); + BOOST_FOREACH(string& strAddNode, mapMultiArgs["-addnode"]) + { + vector<CService> vservNode(0); + if(Lookup(strAddNode.c_str(), vservNode, GetDefaultPort(), fAllowDNS, 0)) + { + vservAddressesToAdd.push_back(vservNode); + CRITICAL_BLOCK(cs_setservAddNodeAddresses) + BOOST_FOREACH(CService& serv, vservNode) + setservAddNodeAddresses.insert(serv); + } + } + loop + { + vector<vector<CService> > vservConnectAddresses = vservAddressesToAdd; + // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry + // (keeping in mind that addnode entries can have many IPs if fAllowDNS) + CRITICAL_BLOCK(cs_vNodes) + BOOST_FOREACH(CNode* pnode, vNodes) + for (vector<vector<CService> >::iterator it = vservConnectAddresses.begin(); it != vservConnectAddresses.end(); it++) + BOOST_FOREACH(CService& addrNode, *(it)) + if (pnode->addr == addrNode) + { + it = vservConnectAddresses.erase(it); + it--; + break; + } + BOOST_FOREACH(vector<CService>& vserv, vservConnectAddresses) + { + OpenNetworkConnection(CAddress(*(vserv.begin()))); + Sleep(500); + if (fShutdown) + return; + } + if (fShutdown) + return; + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; + Sleep(120000); // Retry every 2 minutes + vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++; + if (fShutdown) + return; + } +} + bool OpenNetworkConnection(const CAddress& addrConnect) { // @@ -1506,13 +1343,13 @@ bool OpenNetworkConnection(const CAddress& addrConnect) // if (fShutdown) return false; - if (addrConnect.ip == addrLocalHost.ip || !addrConnect.IsIPv4() || - FindNode(addrConnect.ip) || CNode::IsBanned(addrConnect.ip)) + if ((CNetAddr)addrConnect == (CNetAddr)addrLocalHost || !addrConnect.IsIPv4() || + FindNode((CNetAddr)addrConnect) || CNode::IsBanned(addrConnect)) return false; - vnThreadsRunning[1]--; + vnThreadsRunning[THREAD_OPENCONNECTIONS]--; CNode* pnode = ConnectNode(addrConnect); - vnThreadsRunning[1]++; + vnThreadsRunning[THREAD_OPENCONNECTIONS]++; if (fShutdown) return false; if (!pnode) @@ -1534,15 +1371,15 @@ void ThreadMessageHandler(void* parg) IMPLEMENT_RANDOMIZE_STACK(ThreadMessageHandler(parg)); try { - vnThreadsRunning[2]++; + vnThreadsRunning[THREAD_MESSAGEHANDLER]++; ThreadMessageHandler2(parg); - vnThreadsRunning[2]--; + vnThreadsRunning[THREAD_MESSAGEHANDLER]--; } catch (std::exception& e) { - vnThreadsRunning[2]--; + vnThreadsRunning[THREAD_MESSAGEHANDLER]--; PrintException(&e, "ThreadMessageHandler()"); } catch (...) { - vnThreadsRunning[2]--; + vnThreadsRunning[THREAD_MESSAGEHANDLER]--; PrintException(NULL, "ThreadMessageHandler()"); } printf("ThreadMessageHandler exiting\n"); @@ -1590,11 +1427,11 @@ void ThreadMessageHandler2(void* parg) // Wait and allow messages to bunch up. // Reduce vnThreadsRunning so StopNode has permission to exit while // we're sleeping, but we must always check fShutdown after doing this. - vnThreadsRunning[2]--; + vnThreadsRunning[THREAD_MESSAGEHANDLER]--; Sleep(100); if (fRequestShutdown) Shutdown(NULL); - vnThreadsRunning[2]++; + vnThreadsRunning[THREAD_MESSAGEHANDLER]++; if (fShutdown) return; } @@ -1609,7 +1446,7 @@ bool BindListenPort(string& strError) { strError = ""; int nOne = 1; - addrLocalHost.port = htons(GetListenPort()); + addrLocalHost.SetPort(GetListenPort()); #ifdef WIN32 // Initialize Windows Sockets @@ -1687,20 +1524,28 @@ bool BindListenPort(string& strError) void StartNode(void* parg) { +#ifdef USE_UPNP +#if USE_UPNP + fUseUPnP = GetBoolArg("-upnp", true); +#else + fUseUPnP = GetBoolArg("-upnp", false); +#endif +#endif + if (pnodeLocalHost == NULL) - pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress("127.0.0.1", 0, false, nLocalServices)); + pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices)); #ifdef WIN32 // Get local host ip char pszHostName[1000] = ""; if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR) { - vector<CAddress> vaddr; - if (Lookup(pszHostName, vaddr, nLocalServices, -1, true)) - BOOST_FOREACH (const CAddress &addr, vaddr) - if (addr.GetByte(3) != 127) + vector<CNetAddr> vaddr; + if (LookupHost(pszHostName, vaddr)) + BOOST_FOREACH (const CNetAddr &addr, vaddr) + if (!addr.IsLocal()) { - addrLocalHost = addr; + addrLocalHost.SetIP(addr); break; } } @@ -1723,8 +1568,8 @@ void StartNode(void* parg) printf("ipv4 %s: %s\n", ifa->ifa_name, pszIP); // Take the first IP that isn't loopback 127.x.x.x - CAddress addr(*(unsigned int*)&s4->sin_addr, GetListenPort(), nLocalServices); - if (addr.IsValid() && addr.GetByte(3) != 127) + CAddress addr(CService(s4->sin_addr, GetListenPort()), nLocalServices); + if (addr.IsValid() && !addr.IsLocal()) { addrLocalHost = addr; break; @@ -1745,7 +1590,7 @@ void StartNode(void* parg) if (fUseProxy || mapArgs.count("-connect") || fNoListen) { // Proxies can't take incoming connections - addrLocalHost.ip = CAddress("0.0.0.0").ip; + addrLocalHost.SetIP(CNetAddr("0.0.0.0")); printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str()); } else @@ -1757,6 +1602,12 @@ void StartNode(void* parg) // Start threads // + if (!GetBoolArg("-dnsseed", true)) + printf("DNS seeding disabled\n"); + else + if (!CreateThread(ThreadDNSAddressSeed, NULL)) + printf("Error: CreateThread(ThreadDNSAddressSeed) failed\n"); + // Map ports with UPnP if (fHaveUPnP) MapPort(fUseUPnP); @@ -1769,6 +1620,10 @@ void StartNode(void* parg) if (!CreateThread(ThreadSocketHandler, NULL)) printf("Error: CreateThread(ThreadSocketHandler) failed\n"); + // Initiate outbound connections from -addnode + if (!CreateThread(ThreadOpenAddedConnections, NULL)) + printf("Error: CreateThread(ThreadOpenAddedConnections) failed\n"); + // Initiate outbound connections if (!CreateThread(ThreadOpenConnections, NULL)) printf("Error: CreateThread(ThreadOpenConnections) failed\n"); @@ -1777,8 +1632,12 @@ void StartNode(void* parg) if (!CreateThread(ThreadMessageHandler, NULL)) printf("Error: CreateThread(ThreadMessageHandler) failed\n"); + // Dump network addresses + if (!CreateThread(ThreadDumpAddress, NULL)) + printf("Error; CreateThread(ThreadDumpAddress) failed\n"); + // Generate coins in the background - GenerateBitcoins(fGenerateBitcoins, pwalletMain); + GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain); } bool StopNode() @@ -1787,26 +1646,30 @@ bool StopNode() fShutdown = true; nTransactionsUpdated++; int64 nStart = GetTime(); - while (vnThreadsRunning[0] > 0 || vnThreadsRunning[2] > 0 || vnThreadsRunning[3] > 0 || vnThreadsRunning[4] > 0 -#ifdef USE_UPNP - || vnThreadsRunning[5] > 0 -#endif - ) + do { + int nThreadsRunning = 0; + for (int n = 0; n < THREAD_MAX; n++) + nThreadsRunning += vnThreadsRunning[n]; + if (nThreadsRunning == 0) + break; if (GetTime() - nStart > 20) break; Sleep(20); - } - if (vnThreadsRunning[0] > 0) printf("ThreadSocketHandler still running\n"); - if (vnThreadsRunning[1] > 0) printf("ThreadOpenConnections still running\n"); - if (vnThreadsRunning[2] > 0) printf("ThreadMessageHandler still running\n"); - if (vnThreadsRunning[3] > 0) printf("ThreadBitcoinMiner still running\n"); - if (vnThreadsRunning[4] > 0) printf("ThreadRPCServer still running\n"); - if (fHaveUPnP && vnThreadsRunning[5] > 0) printf("ThreadMapPort still running\n"); - while (vnThreadsRunning[2] > 0 || vnThreadsRunning[4] > 0) + } while(true); + if (vnThreadsRunning[THREAD_SOCKETHANDLER] > 0) printf("ThreadSocketHandler still running\n"); + if (vnThreadsRunning[THREAD_OPENCONNECTIONS] > 0) printf("ThreadOpenConnections still running\n"); + if (vnThreadsRunning[THREAD_MESSAGEHANDLER] > 0) printf("ThreadMessageHandler still running\n"); + if (vnThreadsRunning[THREAD_MINER] > 0) printf("ThreadBitcoinMiner still running\n"); + if (vnThreadsRunning[THREAD_RPCSERVER] > 0) printf("ThreadRPCServer still running\n"); + if (fHaveUPnP && vnThreadsRunning[THREAD_UPNP] > 0) printf("ThreadMapPort still running\n"); + if (vnThreadsRunning[THREAD_DNSSEED] > 0) printf("ThreadDNSAddressSeed still running\n"); + if (vnThreadsRunning[THREAD_ADDEDCONNECTIONS] > 0) printf("ThreadOpenAddedConnections still running\n"); + if (vnThreadsRunning[THREAD_DUMPADDRESS] > 0) printf("ThreadDumpAddresses still running\n"); + while (vnThreadsRunning[THREAD_MESSAGEHANDLER] > 0 || vnThreadsRunning[THREAD_RPCSERVER] > 0) Sleep(20); Sleep(50); - + DumpAddresses(); return true; } @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_NET_H @@ -14,33 +14,29 @@ #include <arpa/inet.h> #endif +#include "mruset.h" +#include "netbase.h" #include "protocol.h" +#include "addrman.h" class CAddrDB; class CRequestTracker; class CNode; class CBlockIndex; extern int nBestHeight; -extern int nConnectTimeout; inline unsigned int ReceiveBufferSize() { return 1000*GetArg("-maxreceivebuffer", 10*1000); } inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 10*1000); } -static const unsigned int PUBLISH_HOPS = 5; - -bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout=nConnectTimeout); -bool Lookup(const char *pszName, std::vector<CAddress>& vaddr, int nServices, int nMaxSolutions, bool fAllowLookup = false, int portDefault = 0, bool fAllowPort = false); -bool Lookup(const char *pszName, CAddress& addr, int nServices, bool fAllowLookup = false, int portDefault = 0, bool fAllowPort = false); -bool GetMyExternalIP(unsigned int& ipRet); -bool AddAddress(CAddress addr, int64 nTimePenalty=0, CAddrDB *pAddrDB=NULL); -void AddressCurrentlyConnected(const CAddress& addr); -CNode* FindNode(unsigned int ip); + +bool RecvLine(SOCKET hSocket, std::string& strLine); +bool GetMyExternalIP(CNetAddr& ipRet); +void AddressCurrentlyConnected(const CService& addr); +CNode* FindNode(const CNetAddr& ip); +CNode* FindNode(const CService& ip); CNode* ConnectNode(CAddress addrConnect, int64 nTimeout=0); -void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1); -bool AnySubscribed(unsigned int nChannel); void MapPort(bool fMapPort); -void DNSAddressSeed(); bool BindListenPort(std::string& strError=REF(std::string())); void StartNode(void* parg); bool StopNode(); @@ -70,34 +66,43 @@ public: }; - - +/** Thread types */ +enum threadId +{ + THREAD_SOCKETHANDLER, + THREAD_OPENCONNECTIONS, + THREAD_MESSAGEHANDLER, + THREAD_MINER, + THREAD_RPCSERVER, + THREAD_UPNP, + THREAD_DNSSEED, + THREAD_ADDEDCONNECTIONS, + THREAD_DUMPADDRESS, + + THREAD_MAX +}; extern bool fClient; extern bool fAllowDNS; extern uint64 nLocalServices; extern CAddress addrLocalHost; extern uint64 nLocalHostNonce; -extern boost::array<int, 10> vnThreadsRunning; +extern boost::array<int, THREAD_MAX> vnThreadsRunning; +extern CAddrMan addrman; extern std::vector<CNode*> vNodes; extern CCriticalSection cs_vNodes; -extern std::map<std::vector<unsigned char>, CAddress> mapAddresses; -extern CCriticalSection cs_mapAddresses; extern std::map<CInv, CDataStream> mapRelay; extern std::deque<std::pair<int64, CInv> > vRelayExpiration; extern CCriticalSection cs_mapRelay; extern std::map<CInv, int64> mapAlreadyAskedFor; -// Settings -extern int fUseProxy; -extern CAddress addrProxy; - +/** Information about a peer */ class CNode { public: @@ -127,7 +132,7 @@ protected: // Denial-of-service detection/prevention // Key is ip address, value is banned-until-time - static std::map<unsigned int, int64> setBanned; + static std::map<CNetAddr, int64> setBanned; static CCriticalSection cs_setBanned; int nMisbehavior; @@ -147,28 +152,19 @@ public: std::set<uint256> setKnown; // inventory based relay - std::set<CInv> setInventoryKnown; + mruset<CInv> setInventoryKnown; std::vector<CInv> vInventoryToSend; CCriticalSection cs_inventory; std::multimap<int64, CInv> mapAskFor; - // publish and subscription - std::vector<char> vfSubscribe; - CNode(SOCKET hSocketIn, CAddress addrIn, bool fInboundIn=false) { nServices = 0; hSocket = hSocketIn; vSend.SetType(SER_NETWORK); - vSend.SetVersion(0); vRecv.SetType(SER_NETWORK); - vRecv.SetVersion(0); - // Version 0.2 obsoletes 20 Feb 2012 - if (GetTime() > 1329696000) - { - vSend.SetVersion(209); - vRecv.SetVersion(209); - } + vSend.SetVersion(209); + vRecv.SetVersion(209); nLastSend = 0; nLastRecv = 0; nLastSendEmpty = GetTime(); @@ -190,8 +186,8 @@ public: hashLastGetBlocksEnd = 0; nStartingHeight = -1; fGetAddr = false; - vfSubscribe.assign(256, false); nMisbehavior = 0; + setInventoryKnown.max_size(SendBufferSize() / 1000); // Be shy and don't send version until we hear if (!fInbound) @@ -272,7 +268,9 @@ public: // Make sure not to reuse time indexes to keep things in the same order int64 nNow = (GetTime() - 1) * 1000000; static int64 nLastTime; - nLastTime = nNow = std::max(nNow, ++nLastTime); + ++nLastTime; + nNow = std::max(nNow, nLastTime); + nLastTime = nNow; // Each retry is 2 minutes after the last nRequestTime = std::max(nRequestTime + 2 * 60 * 1000000, nNow); @@ -283,7 +281,7 @@ public: void BeginMessage(const char* pszCommand) { - cs_vSend.Enter("cs_vSend", __FILE__, __LINE__); + ENTER_CRITICAL_SECTION(cs_vSend); if (nHeaderStart != -1) AbortMessage(); nHeaderStart = vSend.size(); @@ -302,7 +300,7 @@ public: vSend.resize(nHeaderStart); nHeaderStart = -1; nMessageStart = -1; - cs_vSend.Leave(); + LEAVE_CRITICAL_SECTION(cs_vSend); if (fDebug) printf("(aborted)\n"); @@ -325,14 +323,11 @@ public: memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nMessageSize), &nSize, sizeof(nSize)); // Set the checksum - if (vSend.GetVersion() >= 209) - { - uint256 hash = Hash(vSend.begin() + nMessageStart, vSend.end()); - unsigned int nChecksum = 0; - memcpy(&nChecksum, &hash, sizeof(nChecksum)); - assert(nMessageStart - nHeaderStart >= offsetof(CMessageHeader, nChecksum) + sizeof(nChecksum)); - memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nChecksum), &nChecksum, sizeof(nChecksum)); - } + uint256 hash = Hash(vSend.begin() + nMessageStart, vSend.end()); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + assert(nMessageStart - nHeaderStart >= offsetof(CMessageHeader, nChecksum) + sizeof(nChecksum)); + memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nChecksum), &nChecksum, sizeof(nChecksum)); if (fDebug) { printf("(%d bytes)\n", nSize); @@ -340,7 +335,7 @@ public: nHeaderStart = -1; nMessageStart = -1; - cs_vSend.Leave(); + LEAVE_CRITICAL_SECTION(cs_vSend); } void EndMessageAbortIfEmpty() @@ -356,18 +351,7 @@ public: - void PushVersion() - { - /// when NTP implemented, change to just nTime = GetAdjustedTime() - int64 nTime = (fInbound ? GetAdjustedTime() : GetTime()); - CAddress addrYou = (fUseProxy ? CAddress("0.0.0.0") : addr); - CAddress addrMe = (fUseProxy ? CAddress("0.0.0.0") : addrLocalHost); - RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); - PushMessage("version", VERSION, nLocalServices, nTime, addrYou, addrMe, - nLocalHostNonce, std::string(pszSubVer), nBestHeight); - } - - + void PushVersion(); void PushMessage(const char* pszCommand) @@ -592,7 +576,7 @@ public: // between nodes running old code and nodes running // new code. static void ClearBanned(); // needed for unit testing - static bool IsBanned(unsigned int ip); + static bool IsBanned(CNetAddr ip); bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot }; @@ -643,58 +627,4 @@ inline void RelayMessage<>(const CInv& inv, const CDataStream& ss) } - - - - - - -// -// Templates for the publish and subscription system. -// The object being published as T& obj needs to have: -// a set<unsigned int> setSources member -// specializations of AdvertInsert and AdvertErase -// Currently implemented for CTable and CProduct. -// - -template<typename T> -void AdvertStartPublish(CNode* pfrom, unsigned int nChannel, unsigned int nHops, T& obj) -{ - // Add to sources - obj.setSources.insert(pfrom->addr.ip); - - if (!AdvertInsert(obj)) - return; - - // Relay - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode != pfrom && (nHops < PUBLISH_HOPS || pnode->IsSubscribed(nChannel))) - pnode->PushMessage("publish", nChannel, nHops, obj); -} - -template<typename T> -void AdvertStopPublish(CNode* pfrom, unsigned int nChannel, unsigned int nHops, T& obj) -{ - uint256 hash = obj.GetHash(); - - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode != pfrom && (nHops < PUBLISH_HOPS || pnode->IsSubscribed(nChannel))) - pnode->PushMessage("pub-cancel", nChannel, nHops, hash); - - AdvertErase(obj); -} - -template<typename T> -void AdvertRemoveSource(CNode* pfrom, unsigned int nChannel, unsigned int nHops, T& obj) -{ - // Remove a source - obj.setSources.erase(pfrom->addr.ip); - - // If no longer supported by any sources, cancel it - if (obj.setSources.empty()) - AdvertStopPublish(pfrom, nChannel, nHops, obj); -} - #endif diff --git a/src/netbase.cpp b/src/netbase.cpp new file mode 100644 index 0000000000..baf7c412a0 --- /dev/null +++ b/src/netbase.cpp @@ -0,0 +1,738 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include "netbase.h" +#include "util.h" + +#ifndef WIN32 +#include <sys/fcntl.h> +#endif + +#include "strlcpy.h" + +using namespace std; + +// Settings +int fUseProxy = false; +CService addrProxy("127.0.0.1",9050); +int nConnectTimeout = 5000; + + +static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; + +bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions, bool fAllowLookup) +{ + vIP.clear(); + struct addrinfo aiHint; + memset(&aiHint, 0, sizeof(struct addrinfo)); + + aiHint.ai_socktype = SOCK_STREAM; + aiHint.ai_protocol = IPPROTO_TCP; +#ifdef WIN32 +# ifdef USE_IPV6 + aiHint.ai_family = AF_UNSPEC; + aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST; +# else + aiHint.ai_family = AF_INET; + aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST; +# endif +#else +# ifdef USE_IPV6 + aiHint.ai_family = AF_UNSPEC; + aiHint.ai_flags = AI_ADDRCONFIG | (fAllowLookup ? 0 : AI_NUMERICHOST); +# else + aiHint.ai_family = AF_INET; + aiHint.ai_flags = AI_ADDRCONFIG | (fAllowLookup ? 0 : AI_NUMERICHOST); +# endif +#endif + struct addrinfo *aiRes = NULL; + int nErr = getaddrinfo(pszName, NULL, &aiHint, &aiRes); + if (nErr) + return false; + + struct addrinfo *aiTrav = aiRes; + while (aiTrav != NULL && (nMaxSolutions == 0 || vIP.size() < nMaxSolutions)) + { + if (aiTrav->ai_family == AF_INET) + { + assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in)); + vIP.push_back(CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr)); + } + +#ifdef USE_IPV6 + if (aiTrav->ai_family == AF_INET6) + { + assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in6)); + vIP.push_back(CNetAddr(((struct sockaddr_in6*)(aiTrav->ai_addr))->sin6_addr)); + } +#endif + + aiTrav = aiTrav->ai_next; + } + + freeaddrinfo(aiRes); + + return (vIP.size() > 0); +} + +bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions, bool fAllowLookup) +{ + if (pszName[0] == 0) + return false; + char psz[256]; + char *pszHost = psz; + strlcpy(psz, pszName, sizeof(psz)); + if (psz[0] == '[' && psz[strlen(psz)-1] == ']') + { + pszHost = psz+1; + psz[strlen(psz)-1] = 0; + } + + return LookupIntern(pszHost, vIP, nMaxSolutions, fAllowLookup); +} + +bool LookupHostNumeric(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions) +{ + return LookupHost(pszName, vIP, nMaxSolutions, false); +} + +bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault, bool fAllowLookup, int nMaxSolutions) +{ + if (pszName[0] == 0) + return false; + int port = portDefault; + char psz[256]; + char *pszHost = psz; + strlcpy(psz, pszName, sizeof(psz)); + char* pszColon = strrchr(psz+1,':'); + char *pszPortEnd = NULL; + int portParsed = pszColon ? strtoul(pszColon+1, &pszPortEnd, 10) : 0; + if (pszColon && pszPortEnd && pszPortEnd[0] == 0) + { + if (psz[0] == '[' && pszColon[-1] == ']') + { + pszHost = psz+1; + pszColon[-1] = 0; + } + else + pszColon[0] = 0; + if (port >= 0 && port <= USHRT_MAX) + port = portParsed; + } + else + { + if (psz[0] == '[' && psz[strlen(psz)-1] == ']') + { + pszHost = psz+1; + psz[strlen(psz)-1] = 0; + } + + } + + std::vector<CNetAddr> vIP; + bool fRet = LookupIntern(pszHost, vIP, nMaxSolutions, fAllowLookup); + if (!fRet) + return false; + vAddr.resize(vIP.size()); + for (int i = 0; i < vIP.size(); i++) + vAddr[i] = CService(vIP[i], port); + return true; +} + +bool Lookup(const char *pszName, CService& addr, int portDefault, bool fAllowLookup) +{ + std::vector<CService> vService; + bool fRet = Lookup(pszName, vService, portDefault, fAllowLookup, 1); + if (!fRet) + return false; + addr = vService[0]; + return true; +} + +bool LookupNumeric(const char *pszName, CService& addr, int portDefault) +{ + return Lookup(pszName, addr, portDefault, false); +} + +bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) +{ + hSocketRet = INVALID_SOCKET; + + SOCKET hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (hSocket == INVALID_SOCKET) + return false; +#ifdef SO_NOSIGPIPE + int set = 1; + setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)); +#endif + + bool fProxy = (fUseProxy && addrDest.IsRoutable()); + struct sockaddr_in sockaddr; + if (fProxy) + addrProxy.GetSockAddr(&sockaddr); + else + addrDest.GetSockAddr(&sockaddr); + +#ifdef WIN32 + u_long fNonblock = 1; + if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) +#else + int fFlags = fcntl(hSocket, F_GETFL, 0); + if (fcntl(hSocket, F_SETFL, fFlags | O_NONBLOCK) == -1) +#endif + { + closesocket(hSocket); + return false; + } + + + if (connect(hSocket, (struct sockaddr*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) + { + // WSAEINVAL is here because some legacy version of winsock uses it + if (WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINVAL) + { + struct timeval timeout; + timeout.tv_sec = nTimeout / 1000; + timeout.tv_usec = (nTimeout % 1000) * 1000; + + fd_set fdset; + FD_ZERO(&fdset); + FD_SET(hSocket, &fdset); + int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout); + if (nRet == 0) + { + printf("connection timeout\n"); + closesocket(hSocket); + return false; + } + if (nRet == SOCKET_ERROR) + { + printf("select() for connection failed: %i\n",WSAGetLastError()); + closesocket(hSocket); + return false; + } + socklen_t nRetSize = sizeof(nRet); +#ifdef WIN32 + if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char*)(&nRet), &nRetSize) == SOCKET_ERROR) +#else + if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR) +#endif + { + printf("getsockopt() for connection failed: %i\n",WSAGetLastError()); + closesocket(hSocket); + return false; + } + if (nRet != 0) + { + printf("connect() failed after select(): %s\n",strerror(nRet)); + closesocket(hSocket); + return false; + } + } +#ifdef WIN32 + else if (WSAGetLastError() != WSAEISCONN) +#else + else +#endif + { + printf("connect() failed: %i\n",WSAGetLastError()); + closesocket(hSocket); + return false; + } + } + + // this isn't even strictly necessary + // CNode::ConnectNode immediately turns the socket back to non-blocking + // but we'll turn it back to blocking just in case +#ifdef WIN32 + fNonblock = 0; + if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) +#else + fFlags = fcntl(hSocket, F_GETFL, 0); + if (fcntl(hSocket, F_SETFL, fFlags & !O_NONBLOCK) == SOCKET_ERROR) +#endif + { + closesocket(hSocket); + return false; + } + + if (fProxy) + { + printf("proxy connecting %s\n", addrDest.ToString().c_str()); + char pszSocks4IP[] = "\4\1\0\0\0\0\0\0user"; + struct sockaddr_in addr; + addrDest.GetSockAddr(&addr); + memcpy(pszSocks4IP + 2, &addr.sin_port, 2); + memcpy(pszSocks4IP + 4, &addr.sin_addr, 4); + char* pszSocks4 = pszSocks4IP; + int nSize = sizeof(pszSocks4IP); + + int ret = send(hSocket, pszSocks4, nSize, MSG_NOSIGNAL); + if (ret != nSize) + { + closesocket(hSocket); + return error("Error sending to proxy"); + } + char pchRet[8]; + if (recv(hSocket, pchRet, 8, 0) != 8) + { + closesocket(hSocket); + return error("Error reading proxy response"); + } + if (pchRet[1] != 0x5a) + { + closesocket(hSocket); + if (pchRet[1] != 0x5b) + printf("ERROR: Proxy returned error %d\n", pchRet[1]); + return false; + } + printf("proxy connected %s\n", addrDest.ToString().c_str()); + } + + hSocketRet = hSocket; + return true; +} + +void CNetAddr::Init() +{ + memset(ip, 0, 16); +} + +void CNetAddr::SetIP(const CNetAddr& ipIn) +{ + memcpy(ip, ipIn.ip, sizeof(ip)); +} + +CNetAddr::CNetAddr() +{ + Init(); +} + +CNetAddr::CNetAddr(const struct in_addr& ipv4Addr) +{ + memcpy(ip, pchIPv4, 12); + memcpy(ip+12, &ipv4Addr, 4); +} + +#ifdef USE_IPV6 +CNetAddr::CNetAddr(const struct in6_addr& ipv6Addr) +{ + memcpy(ip, &ipv6Addr, 16); +} +#endif + +CNetAddr::CNetAddr(const char *pszIp, bool fAllowLookup) +{ + Init(); + std::vector<CNetAddr> vIP; + if (LookupHost(pszIp, vIP, 1, fAllowLookup)) + *this = vIP[0]; +} + +CNetAddr::CNetAddr(const std::string &strIp, bool fAllowLookup) +{ + Init(); + std::vector<CNetAddr> vIP; + if (LookupHost(strIp.c_str(), vIP, 1, fAllowLookup)) + *this = vIP[0]; +} + +int CNetAddr::GetByte(int n) const +{ + return ip[15-n]; +} + +bool CNetAddr::IsIPv4() const +{ + return (memcmp(ip, pchIPv4, sizeof(pchIPv4)) == 0); +} + +bool CNetAddr::IsRFC1918() const +{ + return IsIPv4() && ( + GetByte(3) == 10 || + (GetByte(3) == 192 && GetByte(2) == 168) || + (GetByte(3) == 172 && (GetByte(2) >= 16 && GetByte(2) <= 31))); +} + +bool CNetAddr::IsRFC3927() const +{ + return IsIPv4() && (GetByte(3) == 169 && GetByte(2) == 254); +} + +bool CNetAddr::IsRFC3849() const +{ + return GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0x0D && GetByte(12) == 0xB8; +} + +bool CNetAddr::IsRFC3964() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x02); +} + +bool CNetAddr::IsRFC6052() const +{ + static const unsigned char pchRFC6052[] = {0,0x64,0xFF,0x9B,0,0,0,0,0,0,0,0}; + return (memcmp(ip, pchRFC6052, sizeof(pchRFC6052)) == 0); +} + +bool CNetAddr::IsRFC4380() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0 && GetByte(12) == 0); +} + +bool CNetAddr::IsRFC4862() const +{ + static const unsigned char pchRFC4862[] = {0xFE,0x80,0,0,0,0,0,0}; + return (memcmp(ip, pchRFC4862, sizeof(pchRFC4862)) == 0); +} + +bool CNetAddr::IsRFC4193() const +{ + return ((GetByte(15) & 0xFE) == 0xFC); +} + +bool CNetAddr::IsRFC6145() const +{ + static const unsigned char pchRFC6145[] = {0,0,0,0,0,0,0,0,0xFF,0xFF,0,0}; + return (memcmp(ip, pchRFC6145, sizeof(pchRFC6145)) == 0); +} + +bool CNetAddr::IsRFC4843() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0x00 && (GetByte(12) & 0xF0) == 0x10); +} + +bool CNetAddr::IsLocal() const +{ + // IPv4 loopback + if (IsIPv4() && (GetByte(3) == 127 || GetByte(3) == 0)) + return true; + + // IPv6 loopback (::1/128) + static const unsigned char pchLocal[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; + if (memcmp(ip, pchLocal, 16) == 0) + return true; + + return false; +} + +bool CNetAddr::IsMulticast() const +{ + return (IsIPv4() && (GetByte(3) & 0xF0) == 0xE0) + || (GetByte(15) == 0xFF); +} + +bool CNetAddr::IsValid() const +{ + // Clean up 3-byte shifted addresses caused by garbage in size field + // of addr messages from versions before 0.2.9 checksum. + // Two consecutive addr messages look like this: + // header20 vectorlen3 addr26 addr26 addr26 header20 vectorlen3 addr26 addr26 addr26... + // so if the first length field is garbled, it reads the second batch + // of addr misaligned by 3 bytes. + if (memcmp(ip, pchIPv4+3, sizeof(pchIPv4)-3) == 0) + return false; + + // unspecified IPv6 address (::/128) + unsigned char ipNone[16] = {}; + if (memcmp(ip, ipNone, 16) == 0) + return false; + + // documentation IPv6 address + if (IsRFC3849()) + return false; + + if (IsIPv4()) + { + // INADDR_NONE + uint32_t ipNone = INADDR_NONE; + if (memcmp(ip+12, &ipNone, 4) == 0) + return false; + + // 0 + ipNone = 0; + if (memcmp(ip+12, &ipNone, 4) == 0) + return false; + } + + return true; +} + +bool CNetAddr::IsRoutable() const +{ + return IsValid() && !(IsRFC1918() || IsRFC3927() || IsRFC4862() || IsRFC4193() || IsRFC4843() || IsLocal()); +} + +std::string CNetAddr::ToStringIP() const +{ + if (IsIPv4()) + return strprintf("%u.%u.%u.%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0)); + else + return strprintf("%x:%x:%x:%x:%x:%x:%x:%x", + GetByte(15) << 8 | GetByte(14), GetByte(13) << 8 | GetByte(12), + GetByte(11) << 8 | GetByte(10), GetByte(9) << 8 | GetByte(8), + GetByte(7) << 8 | GetByte(6), GetByte(5) << 8 | GetByte(4), + GetByte(3) << 8 | GetByte(2), GetByte(1) << 8 | GetByte(0)); +} + +std::string CNetAddr::ToString() const +{ + return ToStringIP(); +} + +bool operator==(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) == 0); +} + +bool operator!=(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) != 0); +} + +bool operator<(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) < 0); +} + +bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const +{ + if (!IsIPv4()) + return false; + memcpy(pipv4Addr, ip+12, 4); + return true; +} + +#ifdef USE_IPV6 +bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const +{ + memcpy(pipv6Addr, ip, 16); + return true; +} +#endif + +// get canonical identifier of an address' group +// no two connections will be attempted to addresses with the same group +std::vector<unsigned char> CNetAddr::GetGroup() const +{ + std::vector<unsigned char> vchRet; + int nClass = 0; // 0=IPv6, 1=IPv4, 254=local, 255=unroutable + int nStartByte = 0; + int nBits = 16; + + // all local addresses belong to the same group + if (IsLocal()) + { + nClass = 254; + nBits = 0; + } + + // all unroutable addresses belong to the same group + if (!IsRoutable()) + { + nClass = 255; + nBits = 0; + } + // for IPv4 addresses, '1' + the 16 higher-order bits of the IP + // includes mapped IPv4, SIIT translated IPv4, and the well-known prefix + else if (IsIPv4() || IsRFC6145() || IsRFC6052()) + { + nClass = 1; + nStartByte = 12; + } + // for 6to4 tunneled addresses, use the encapsulated IPv4 address + else if (IsRFC3964()) + { + nClass = 1; + nStartByte = 2; + } + // for Teredo-tunneled IPv6 addresses, use the encapsulated IPv4 address + else if (IsRFC4380()) + { + vchRet.push_back(1); + vchRet.push_back(GetByte(3) ^ 0xFF); + vchRet.push_back(GetByte(2) ^ 0xFF); + return vchRet; + } + // for he.net, use /36 groups + else if (GetByte(15) == 0x20 && GetByte(14) == 0x11 && GetByte(13) == 0x04 && GetByte(12) == 0x70) + nBits = 36; + // for the rest of the IPv6 network, use /32 groups + else + nBits = 32; + + vchRet.push_back(nClass); + while (nBits >= 8) + { + vchRet.push_back(GetByte(15 - nStartByte)); + nStartByte++; + nBits -= 8; + } + if (nBits > 0) + vchRet.push_back(GetByte(15 - nStartByte) | ((1 << nBits) - 1)); + + return vchRet; +} + +int64 CNetAddr::GetHash() const +{ + uint256 hash = Hash(&ip[0], &ip[16]); + int64 nRet; + memcpy(&nRet, &hash, sizeof(nRet)); + return nRet; +} + +void CNetAddr::print() const +{ + printf("CNetAddr(%s)\n", ToString().c_str()); +} + +void CService::Init() +{ + port = 0; +} + +CService::CService() +{ + Init(); +} + +CService::CService(const CNetAddr& cip, unsigned short portIn) : CNetAddr(cip), port(portIn) +{ +} + +CService::CService(const struct in_addr& ipv4Addr, unsigned short portIn) : CNetAddr(ipv4Addr), port(portIn) +{ +} + +#ifdef USE_IPV6 +CService::CService(const struct in6_addr& ipv6Addr, unsigned short portIn) : CNetAddr(ipv6Addr), port(portIn) +{ +} +#endif + +CService::CService(const struct sockaddr_in& addr) : CNetAddr(addr.sin_addr), port(ntohs(addr.sin_port)) +{ + assert(addr.sin_family == AF_INET); +} + +#ifdef USE_IPV6 +CService::CService(const struct sockaddr_in6 &addr) : CNetAddr(addr.sin6_addr), port(ntohs(addr.sin6_port)) +{ + assert(addr.sin6_family == AF_INET6); +} +#endif + +CService::CService(const char *pszIpPort, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(pszIpPort, ip, 0, fAllowLookup)) + *this = ip; +} + +CService::CService(const char *pszIpPort, int portDefault, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(pszIpPort, ip, portDefault, fAllowLookup)) + *this = ip; +} + +CService::CService(const std::string &strIpPort, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(strIpPort.c_str(), ip, 0, fAllowLookup)) + *this = ip; +} + +CService::CService(const std::string &strIpPort, int portDefault, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(strIpPort.c_str(), ip, portDefault, fAllowLookup)) + *this = ip; +} + +unsigned short CService::GetPort() const +{ + return port; +} + +bool operator==(const CService& a, const CService& b) +{ + return (CNetAddr)a == (CNetAddr)b && a.port == b.port; +} + +bool operator!=(const CService& a, const CService& b) +{ + return (CNetAddr)a != (CNetAddr)b || a.port != b.port; +} + +bool operator<(const CService& a, const CService& b) +{ + return (CNetAddr)a < (CNetAddr)b || ((CNetAddr)a == (CNetAddr)b && a.port < b.port); +} + +bool CService::GetSockAddr(struct sockaddr_in* paddr) const +{ + if (!IsIPv4()) + return false; + memset(paddr, 0, sizeof(struct sockaddr_in)); + if (!GetInAddr(&paddr->sin_addr)) + return false; + paddr->sin_family = AF_INET; + paddr->sin_port = htons(port); + return true; +} + +#ifdef USE_IPV6 +bool CService::GetSockAddr6(struct sockaddr_in6* paddr) const +{ + memset(paddr, 0, sizeof(struct sockaddr_in6)); + if (!GetIn6Addr(&paddr->sin6_addr)) + return false; + paddr->sin6_family = AF_INET6; + paddr->sin6_port = htons(port); + return true; +} +#endif + +std::vector<unsigned char> CService::GetKey() const +{ + std::vector<unsigned char> vKey; + vKey.resize(18); + memcpy(&vKey[0], ip, 16); + vKey[16] = port / 0x100; + vKey[17] = port & 0x0FF; + return vKey; +} + +std::string CService::ToStringPort() const +{ + return strprintf(":%i", port); +} + +std::string CService::ToStringIPPort() const +{ + return ToStringIP() + ToStringPort(); +} + +std::string CService::ToString() const +{ + return ToStringIPPort(); +} + +void CService::print() const +{ + printf("CService(%s)\n", ToString().c_str()); +} + +void CService::SetPort(unsigned short portIn) +{ + port = portIn; +} diff --git a/src/netbase.h b/src/netbase.h new file mode 100644 index 0000000000..9e79de4253 --- /dev/null +++ b/src/netbase.h @@ -0,0 +1,148 @@ +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_NETBASE_H +#define BITCOIN_NETBASE_H + +#include <string> +#include <vector> + +#ifdef WIN32 +#define _WIN32_WINNT 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include <winsock2.h> +#include <mswsock.h> +#include <ws2tcpip.h> +#else +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <net/if.h> +#include <ifaddrs.h> +#endif +#ifdef BSD +#include <netinet/in.h> +#endif + +#include "serialize.h" +#include "compat.h" + +extern int nConnectTimeout; + +#ifdef WIN32 +// In MSVC, this is defined as a macro, undefine it to prevent a compile and link error +#undef SetPort +#endif + +/** IP address (IPv6, or IPv4 using mapped IPv6 range (::FFFF:0:0/96)) */ +class CNetAddr +{ + protected: + unsigned char ip[16]; // in network byte order + + public: + CNetAddr(); + CNetAddr(const struct in_addr& ipv4Addr); + explicit CNetAddr(const char *pszIp, bool fAllowLookup = false); + explicit CNetAddr(const std::string &strIp, bool fAllowLookup = false); + void Init(); + void SetIP(const CNetAddr& ip); + bool IsIPv4() const; // IPv4 mapped address (::FFFF:0:0/96, 0.0.0.0/0) + bool IsRFC1918() const; // IPv4 private networks (10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12) + bool IsRFC3849() const; // IPv6 documentation address (2001:0DB8::/32) + bool IsRFC3927() const; // IPv4 autoconfig (169.254.0.0/16) + bool IsRFC3964() const; // IPv6 6to4 tunneling (2002::/16) + bool IsRFC4193() const; // IPv6 unique local (FC00::/15) + bool IsRFC4380() const; // IPv6 Teredo tunneling (2001::/32) + bool IsRFC4843() const; // IPv6 ORCHID (2001:10::/28) + bool IsRFC4862() const; // IPv6 autoconfig (FE80::/64) + bool IsRFC6052() const; // IPv6 well-known prefix (64:FF9B::/96) + bool IsRFC6145() const; // IPv6 IPv4-translated address (::FFFF:0:0:0/96) + bool IsLocal() const; + bool IsRoutable() const; + bool IsValid() const; + bool IsMulticast() const; + std::string ToString() const; + std::string ToStringIP() const; + int GetByte(int n) const; + int64 GetHash() const; + bool GetInAddr(struct in_addr* pipv4Addr) const; + std::vector<unsigned char> GetGroup() const; + void print() const; + +#ifdef USE_IPV6 + CNetAddr(const struct in6_addr& pipv6Addr); + bool GetIn6Addr(struct in6_addr* pipv6Addr) const; +#endif + + friend bool operator==(const CNetAddr& a, const CNetAddr& b); + friend bool operator!=(const CNetAddr& a, const CNetAddr& b); + friend bool operator<(const CNetAddr& a, const CNetAddr& b); + + IMPLEMENT_SERIALIZE + ( + READWRITE(FLATDATA(ip)); + ) +}; + +/** A combination of a network address (CNetAddr) and a (TCP) port */ +class CService : public CNetAddr +{ + protected: + unsigned short port; // host order + + public: + CService(); + CService(const CNetAddr& ip, unsigned short port); + CService(const struct in_addr& ipv4Addr, unsigned short port); + CService(const struct sockaddr_in& addr); + explicit CService(const char *pszIpPort, int portDefault, bool fAllowLookup = false); + explicit CService(const char *pszIpPort, bool fAllowLookup = false); + explicit CService(const std::string& strIpPort, int portDefault, bool fAllowLookup = false); + explicit CService(const std::string& strIpPort, bool fAllowLookup = false); + void Init(); + void SetPort(unsigned short portIn); + unsigned short GetPort() const; + bool GetSockAddr(struct sockaddr_in* paddr) const; + friend bool operator==(const CService& a, const CService& b); + friend bool operator!=(const CService& a, const CService& b); + friend bool operator<(const CService& a, const CService& b); + std::vector<unsigned char> GetKey() const; + std::string ToString() const; + std::string ToStringPort() const; + std::string ToStringIPPort() const; + void print() const; + +#ifdef USE_IPV6 + CService(const struct in6_addr& ipv6Addr, unsigned short port); + bool GetSockAddr6(struct sockaddr_in6* paddr) const; + CService(const struct sockaddr_in6& addr); +#endif + + IMPLEMENT_SERIALIZE + ( + CService* pthis = const_cast<CService*>(this); + READWRITE(FLATDATA(ip)); + unsigned short portN = htons(port); + READWRITE(portN); + if (fRead) + pthis->port = ntohs(portN); + ) +}; + +bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions = 0, bool fAllowLookup = true); +bool LookupHostNumeric(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions = 0); +bool Lookup(const char *pszName, CService& addr, int portDefault = 0, bool fAllowLookup = true); +bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault = 0, bool fAllowLookup = true, int nMaxSolutions = 0); +bool LookupNumeric(const char *pszName, CService& addr, int portDefault = 0); +bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, int nTimeout = nConnectTimeout); + +// Settings +extern int fUseProxy; +extern CService addrProxy; + +#endif diff --git a/src/noui.cpp b/src/noui.cpp new file mode 100644 index 0000000000..077e460a70 --- /dev/null +++ b/src/noui.cpp @@ -0,0 +1,45 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. +#include "ui_interface.h" + +#include <string> +#include "headers.h" +#include "init.h" + +int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style) +{ + printf("%s: %s\n", caption.c_str(), message.c_str()); + fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str()); + return 4; +} + +bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption) +{ + return true; +} + +void MainFrameRepaint() +{ +} + +void AddressBookRepaint() +{ +} + +void InitMessage(const std::string &message) +{ +} + +std::string _(const char* psz) +{ + return psz; +} + +void QueueShutdown() +{ + // Without UI, Shutdown can simply be started in a new thread + CreateThread(Shutdown, NULL); +} + diff --git a/src/noui.h b/src/noui.h deleted file mode 100644 index 754c2225fc..0000000000 --- a/src/noui.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_NOUI_H -#define BITCOIN_NOUI_H - -#include <string> -#include <boost/function.hpp> -#include "wallet.h" - -typedef void wxWindow; -#define wxYES 0x00000002 -#define wxOK 0x00000004 -#define wxNO 0x00000008 -#define wxYES_NO (wxYES|wxNO) -#define wxCANCEL 0x00000010 -#define wxAPPLY 0x00000020 -#define wxCLOSE 0x00000040 -#define wxOK_DEFAULT 0x00000000 -#define wxYES_DEFAULT 0x00000000 -#define wxNO_DEFAULT 0x00000080 -#define wxCANCEL_DEFAULT 0x80000000 -#define wxICON_EXCLAMATION 0x00000100 -#define wxICON_HAND 0x00000200 -#define wxICON_WARNING wxICON_EXCLAMATION -#define wxICON_ERROR wxICON_HAND -#define wxICON_QUESTION 0x00000400 -#define wxICON_INFORMATION 0x00000800 -#define wxICON_STOP wxICON_HAND -#define wxICON_ASTERISK wxICON_INFORMATION -#define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800) -#define wxFORWARD 0x00001000 -#define wxBACKWARD 0x00002000 -#define wxRESET 0x00004000 -#define wxHELP 0x00008000 -#define wxMORE 0x00010000 -#define wxSETUP 0x00020000 - -inline int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1) -{ - printf("%s: %s\n", caption.c_str(), message.c_str()); - fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str()); - return 4; -} -#define wxMessageBox MyMessageBox - -inline int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1) -{ - return MyMessageBox(message, caption, style, parent, x, y); -} - -inline bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent) -{ - return true; -} - -inline void CalledSetStatusBar(const std::string& strText, int nField) -{ -} - -inline void UIThreadCall(boost::function0<void> fn) -{ -} - -inline void MainFrameRepaint() -{ -} - -inline void InitMessage(const std::string &message) -{ -} - -#endif diff --git a/src/obj-test/.gitignore b/src/obj-test/.gitignore new file mode 100644 index 0000000000..d6b7ef32c8 --- /dev/null +++ b/src/obj-test/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/src/protocol.cpp b/src/protocol.cpp index f46570e21c..15fbf9fc0d 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -1,20 +1,16 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "protocol.h" #include "util.h" +#include "netbase.h" #ifndef WIN32 # include <arpa/inet.h> #endif -// Prototypes from net.h, but that header (currently) stinks, can't #include it without breaking things -bool Lookup(const char *pszName, std::vector<CAddress>& vaddr, int nServices, int nMaxSolutions, bool fAllowLookup = false, int portDefault = 0, bool fAllowPort = false); -bool Lookup(const char *pszName, CAddress& addr, int nServices, bool fAllowLookup = false, int portDefault = 0, bool fAllowPort = false); - -static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; static const char* ppszTypeName[] = { "ERROR", @@ -77,185 +73,26 @@ bool CMessageHeader::IsValid() const return true; } -CAddress::CAddress() -{ - Init(); -} - -CAddress::CAddress(unsigned int ipIn, unsigned short portIn, uint64 nServicesIn) -{ - Init(); - ip = ipIn; - port = htons(portIn == 0 ? GetDefaultPort() : portIn); - nServices = nServicesIn; -} - -CAddress::CAddress(const struct sockaddr_in& sockaddr, uint64 nServicesIn) -{ - Init(); - ip = sockaddr.sin_addr.s_addr; - port = sockaddr.sin_port; - nServices = nServicesIn; -} - -CAddress::CAddress(const char* pszIn, int portIn, bool fNameLookup, uint64 nServicesIn) -{ - Init(); - Lookup(pszIn, *this, nServicesIn, fNameLookup, portIn); -} -CAddress::CAddress(const char* pszIn, bool fNameLookup, uint64 nServicesIn) -{ - Init(); - Lookup(pszIn, *this, nServicesIn, fNameLookup, 0, true); -} -CAddress::CAddress(std::string strIn, int portIn, bool fNameLookup, uint64 nServicesIn) +CAddress::CAddress() : CService() { Init(); - Lookup(strIn.c_str(), *this, nServicesIn, fNameLookup, portIn); } -CAddress::CAddress(std::string strIn, bool fNameLookup, uint64 nServicesIn) +CAddress::CAddress(CService ipIn, uint64 nServicesIn) : CService(ipIn) { Init(); - Lookup(strIn.c_str(), *this, nServicesIn, fNameLookup, 0, true); + nServices = nServicesIn; } void CAddress::Init() { nServices = NODE_NETWORK; - memcpy(pchReserved, pchIPv4, sizeof(pchReserved)); - ip = INADDR_NONE; - port = htons(GetDefaultPort()); nTime = 100000000; nLastTry = 0; } -bool operator==(const CAddress& a, const CAddress& b) -{ - return (memcmp(a.pchReserved, b.pchReserved, sizeof(a.pchReserved)) == 0 && - a.ip == b.ip && - a.port == b.port); -} - -bool operator!=(const CAddress& a, const CAddress& b) -{ - return (!(a == b)); -} - -bool operator<(const CAddress& a, const CAddress& b) -{ - int ret = memcmp(a.pchReserved, b.pchReserved, sizeof(a.pchReserved)); - if (ret < 0) - return true; - else if (ret == 0) - { - if (ntohl(a.ip) < ntohl(b.ip)) - return true; - else if (a.ip == b.ip) - return ntohs(a.port) < ntohs(b.port); - } - return false; -} - -std::vector<unsigned char> CAddress::GetKey() const -{ - CDataStream ss; - ss.reserve(18); - ss << FLATDATA(pchReserved) << ip << port; - - #if defined(_MSC_VER) && _MSC_VER < 1300 - return std::vector<unsigned char>((unsigned char*)&ss.begin()[0], (unsigned char*)&ss.end()[0]); - #else - return std::vector<unsigned char>(ss.begin(), ss.end()); - #endif -} - -struct sockaddr_in CAddress::GetSockAddr() const -{ - struct sockaddr_in sockaddr; - memset(&sockaddr, 0, sizeof(sockaddr)); - sockaddr.sin_family = AF_INET; - sockaddr.sin_addr.s_addr = ip; - sockaddr.sin_port = port; - return sockaddr; -} - -bool CAddress::IsIPv4() const -{ - return (memcmp(pchReserved, pchIPv4, sizeof(pchIPv4)) == 0); -} - -bool CAddress::IsRFC1918() const -{ - return IsIPv4() && (GetByte(3) == 10 || - (GetByte(3) == 192 && GetByte(2) == 168) || - (GetByte(3) == 172 && - (GetByte(2) >= 16 && GetByte(2) <= 31))); -} - -bool CAddress::IsRFC3927() const -{ - return IsIPv4() && (GetByte(3) == 169 && GetByte(2) == 254); -} - -bool CAddress::IsLocal() const -{ - return IsIPv4() && (GetByte(3) == 127 || - GetByte(3) == 0); -} - -bool CAddress::IsRoutable() const -{ - return IsValid() && - !(IsRFC1918() || IsRFC3927() || IsLocal()); -} - -bool CAddress::IsValid() const -{ - // Clean up 3-byte shifted addresses caused by garbage in size field - // of addr messages from versions before 0.2.9 checksum. - // Two consecutive addr messages look like this: - // header20 vectorlen3 addr26 addr26 addr26 header20 vectorlen3 addr26 addr26 addr26... - // so if the first length field is garbled, it reads the second batch - // of addr misaligned by 3 bytes. - if (memcmp(pchReserved, pchIPv4+3, sizeof(pchIPv4)-3) == 0) - return false; - - return (ip != 0 && ip != INADDR_NONE && port != htons(USHRT_MAX)); -} - -unsigned char CAddress::GetByte(int n) const -{ - return ((unsigned char*)&ip)[3-n]; -} - -std::string CAddress::ToStringIPPort() const -{ - return strprintf("%u.%u.%u.%u:%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0), ntohs(port)); -} - -std::string CAddress::ToStringIP() const -{ - return strprintf("%u.%u.%u.%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0)); -} - -std::string CAddress::ToStringPort() const -{ - return strprintf("%u", ntohs(port)); -} - -std::string CAddress::ToString() const -{ - return strprintf("%u.%u.%u.%u:%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0), ntohs(port)); -} - -void CAddress::print() const -{ - printf("CAddress(%s)\n", ToString().c_str()); -} - CInv::CInv() { type = 0; @@ -310,3 +147,4 @@ void CInv::print() const { printf("CInv(%s)\n", ToString().c_str()); } + diff --git a/src/protocol.h b/src/protocol.h index 53d3eef4d5..e639127355 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -11,6 +11,8 @@ #define __INCLUDED_PROTOCOL_H__ #include "serialize.h" +#include "netbase.h" +#include "util.h" #include <string> #include "uint256.h" @@ -20,15 +22,15 @@ static inline unsigned short GetDefaultPort(const bool testnet = fTestNet) return testnet ? 18333 : 8333; } -// -// Message header -// (4) message start -// (12) command -// (4) size -// (4) checksum extern unsigned char pchMessageStart[4]; +/** Message header. + * (4) message start. + * (12) command. + * (4) size. + * (4) checksum. + */ class CMessageHeader { public: @@ -43,7 +45,6 @@ class CMessageHeader READWRITE(FLATDATA(pchMessageStart)); READWRITE(FLATDATA(pchCommand)); READWRITE(nMessageSize); - if (nVersion >= 209) READWRITE(nChecksum); ) @@ -56,71 +57,49 @@ class CMessageHeader unsigned int nChecksum; }; +/** nServices flags */ enum { NODE_NETWORK = (1 << 0), }; -class CAddress +/** A CService with information about it as peer */ +class CAddress : public CService { public: CAddress(); - CAddress(unsigned int ipIn, unsigned short portIn=0, uint64 nServicesIn=NODE_NETWORK); - explicit CAddress(const struct sockaddr_in& sockaddr, uint64 nServicesIn=NODE_NETWORK); - explicit CAddress(const char* pszIn, int portIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK); - explicit CAddress(const char* pszIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK); - explicit CAddress(std::string strIn, int portIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK); - explicit CAddress(std::string strIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK); + explicit CAddress(CService ipIn, uint64 nServicesIn=NODE_NETWORK); void Init(); IMPLEMENT_SERIALIZE ( + CAddress* pthis = const_cast<CAddress*>(this); + CService* pip = (CService*)pthis; if (fRead) - const_cast<CAddress*>(this)->Init(); + pthis->Init(); if (nType & SER_DISK) READWRITE(nVersion); if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH))) READWRITE(nTime); READWRITE(nServices); - READWRITE(FLATDATA(pchReserved)); // for IPv6 - READWRITE(ip); - READWRITE(port); + READWRITE(*pip); ) - friend bool operator==(const CAddress& a, const CAddress& b); - friend bool operator!=(const CAddress& a, const CAddress& b); - friend bool operator<(const CAddress& a, const CAddress& b); - - std::vector<unsigned char> GetKey() const; - struct sockaddr_in GetSockAddr() const; - bool IsIPv4() const; - bool IsRFC1918() const; - bool IsRFC3927() const; - bool IsLocal() const; - bool IsRoutable() const; - bool IsValid() const; - unsigned char GetByte(int n) const; - std::string ToStringIPPort() const; - std::string ToStringIP() const; - std::string ToStringPort() const; - std::string ToString() const; void print() const; // TODO: make private (improves encapsulation) public: uint64 nServices; - unsigned char pchReserved[12]; - unsigned int ip; - unsigned short port; // disk and network only unsigned int nTime; // memory only - unsigned int nLastTry; + int64 nLastTry; }; +/** inv message data */ class CInv { public: diff --git a/src/qt/aboutdialog.cpp b/src/qt/aboutdialog.cpp index a3aa6de841..08d7774067 100644 --- a/src/qt/aboutdialog.cpp +++ b/src/qt/aboutdialog.cpp @@ -7,7 +7,6 @@ AboutDialog::AboutDialog(QWidget *parent) : ui(new Ui::AboutDialog) { ui->setupUi(this); - } void AboutDialog::setModel(ClientModel *model) diff --git a/src/qt/aboutdialog.h b/src/qt/aboutdialog.h index d2caa3eedf..2ed9e9e7c4 100644 --- a/src/qt/aboutdialog.h +++ b/src/qt/aboutdialog.h @@ -8,6 +8,7 @@ namespace Ui { } class ClientModel; +/** "About" dialog box */ class AboutDialog : public QDialog { Q_OBJECT diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index 0a147c9e10..88212835de 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -2,13 +2,19 @@ #include "ui_addressbookpage.h" #include "addresstablemodel.h" +#include "bitcoingui.h" #include "editaddressdialog.h" #include "csvmodelwriter.h" +#include "guiutil.h" #include <QSortFilterProxyModel> #include <QClipboard> -#include <QFileDialog> #include <QMessageBox> +#include <QMenu> + +#ifdef USE_QRCODE +#include "qrcodedialog.h" +#endif AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : QDialog(parent), @@ -25,6 +31,10 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : ui->deleteButton->setIcon(QIcon()); #endif +#ifndef USE_QRCODE + ui->showQRCode->setVisible(false); +#endif + switch(mode) { case ForSending: @@ -33,19 +43,44 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : ui->tableView->setFocus(); break; case ForEditing: - ui->buttonBox->hide(); + ui->buttonBox->setVisible(false); break; } switch(tab) { case SendingTab: - ui->labelExplanation->hide(); + ui->labelExplanation->setVisible(false); + ui->deleteButton->setVisible(true); + ui->signMessage->setVisible(false); break; case ReceivingTab: + ui->deleteButton->setVisible(false); + ui->signMessage->setVisible(true); break; } ui->tableView->setTabKeyNavigation(false); + ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu); + + // Context menu actions + QAction *copyAddressAction = new QAction(tr("Copy address"), this); + QAction *copyLabelAction = new QAction(tr("Copy label"), this); + QAction *editAction = new QAction(tr("Edit"), this); + deleteAction = new QAction(tr("Delete"), this); + + contextMenu = new QMenu(); + contextMenu->addAction(copyAddressAction); + contextMenu->addAction(copyLabelAction); + contextMenu->addAction(editAction); + contextMenu->addAction(deleteAction); + connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(on_copyToClipboard_clicked())); + connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(onCopyLabelAction())); + connect(editAction, SIGNAL(triggered()), this, SLOT(onEditAction())); + connect(deleteAction, SIGNAL(triggered()), this, SLOT(on_deleteButton_clicked())); + + connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); + + // Pass through accept action from button box connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); } @@ -59,8 +94,6 @@ void AddressBookPage::setModel(AddressTableModel *model) this->model = model; if(!model) return; - // Refresh list from core - model->updateList(); proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(model); @@ -100,18 +133,48 @@ void AddressBookPage::setModel(AddressTableModel *model) void AddressBookPage::on_copyToClipboard_clicked() { - // Copy currently selected address to clipboard - // (or nothing, if nothing selected) - QTableView *table = ui->tableView; - if(!table->selectionModel()) + GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Address); +} + +void AddressBookPage::onCopyLabelAction() +{ + GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Label); +} + +void AddressBookPage::onEditAction() +{ + if(!ui->tableView->selectionModel()) + return; + QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); + if(indexes.isEmpty()) return; + + EditAddressDialog dlg( + tab == SendingTab ? + EditAddressDialog::EditSendingAddress : + EditAddressDialog::EditReceivingAddress); + dlg.setModel(model); + QModelIndex origIndex = proxyModel->mapToSource(indexes.at(0)); + dlg.loadRow(origIndex.row()); + dlg.exec(); +} + +void AddressBookPage::on_signMessage_clicked() +{ + QTableView *table = ui->tableView; QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + QString addr; foreach (QModelIndex index, indexes) { QVariant address = index.data(); - QApplication::clipboard()->setText(address.toString()); + addr = address.toString(); } + + QObject *qoGUI = parent()->parent(); + BitcoinGUI *gui = qobject_cast<BitcoinGUI *>(qoGUI); + if (gui) + gui->gotoMessagePage(addr); } void AddressBookPage::on_newAddressButton_clicked() @@ -162,18 +225,31 @@ void AddressBookPage::selectionChanged() switch(tab) { case SendingTab: + // In sending tab, allow deletion of selection ui->deleteButton->setEnabled(true); + ui->deleteButton->setVisible(true); + deleteAction->setEnabled(true); + ui->signMessage->setEnabled(false); + ui->signMessage->setVisible(false); break; case ReceivingTab: + // Deleting receiving addresses, however, is not allowed ui->deleteButton->setEnabled(false); + ui->deleteButton->setVisible(false); + deleteAction->setEnabled(false); + ui->signMessage->setEnabled(true); + ui->signMessage->setVisible(true); break; } ui->copyToClipboard->setEnabled(true); + ui->showQRCode->setEnabled(true); } else { ui->deleteButton->setEnabled(false); + ui->showQRCode->setEnabled(false); ui->copyToClipboard->setEnabled(false); + ui->signMessage->setEnabled(false); } } @@ -197,6 +273,7 @@ void AddressBookPage::done(int retval) if(returnValue.isEmpty()) { + // If no address entry selected, return rejected retval = Rejected; } @@ -206,10 +283,9 @@ void AddressBookPage::done(int retval) void AddressBookPage::exportClicked() { // CSV is currently the only supported format - QString filename = QFileDialog::getSaveFileName( + QString filename = GUIUtil::getSaveFileName( this, - tr("Export Address Book Data"), - QDir::currentPath(), + tr("Export Address Book Data"), QString(), tr("Comma separated file (*.csv)")); if (filename.isNull()) return; @@ -227,3 +303,32 @@ void AddressBookPage::exportClicked() QMessageBox::Abort, QMessageBox::Abort); } } + +void AddressBookPage::on_showQRCode_clicked() +{ +#ifdef USE_QRCODE + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + + QRCodeDialog *d; + foreach (QModelIndex index, indexes) + { + QString address = index.data().toString(), + label = index.sibling(index.row(), 0).data().toString(), + title = QString("%1 << %2 >>").arg(label).arg(address); + + QRCodeDialog *d = new QRCodeDialog(title, address, label, tab == ReceivingTab, this); + d->show(); + } +#endif +} + +void AddressBookPage::contextualMenu(const QPoint &point) +{ + QModelIndex index = ui->tableView->indexAt(point); + if(index.isValid()) + { + contextMenu->exec(QCursor::pos()); + } +} diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h index ef64d17539..b2cf2db979 100644 --- a/src/qt/addressbookpage.h +++ b/src/qt/addressbookpage.h @@ -12,8 +12,11 @@ QT_BEGIN_NAMESPACE class QTableView; class QItemSelection; class QSortFilterProxyModel; +class QMenu; QT_END_NAMESPACE +/** Widget that shows a list of sending or receiving addresses. + */ class AddressBookPage : public QDialog { Q_OBJECT @@ -25,8 +28,8 @@ public: }; enum Mode { - ForSending, // Pick address for sending - ForEditing // Open address book for editing + ForSending, /**< Open address book to pick address for sending */ + ForEditing /**< Open address book for editing */ }; explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent = 0); @@ -46,12 +49,24 @@ private: Tabs tab; QString returnValue; QSortFilterProxyModel *proxyModel; + QMenu *contextMenu; + QAction *deleteAction; private slots: void on_deleteButton_clicked(); void on_newAddressButton_clicked(); + /** Copy address of currently selected address entry to clipboard */ void on_copyToClipboard_clicked(); + void on_signMessage_clicked(); void selectionChanged(); + void on_showQRCode_clicked(); + /** Spawn contextual menu (right mouse menu) for address book entry */ + void contextualMenu(const QPoint &point); + + /** Copy label of currently selected address entry to clipboard */ + void onCopyLabelAction(); + /** Edit currently selected address entry */ + void onEditAction(); }; #endif // ADDRESSBOOKDIALOG_H diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 8fd6d52b7e..198a857b2d 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -231,7 +231,7 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex & pa } } -void AddressTableModel::updateList() +void AddressTableModel::update() { // Update address book model from Bitcoin core beginResetModel(); @@ -285,10 +285,9 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con { return QString(); } - // Add entry and update list + // Add entry CRITICAL_BLOCK(wallet->cs_wallet) wallet->SetAddressBookName(strAddress, strLabel); - updateList(); return QString::fromStdString(strAddress); } @@ -306,15 +305,9 @@ bool AddressTableModel::removeRows(int row, int count, const QModelIndex & paren { wallet->DelAddressBookName(rec->address.toStdString()); } - updateList(); return true; } -void AddressTableModel::update() -{ - -} - /* Look up label for address in address book, if not found return empty string. */ QString AddressTableModel::labelForAddress(const QString &address) const diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h index f4a8dad845..7fd07cfb81 100644 --- a/src/qt/addresstablemodel.h +++ b/src/qt/addresstablemodel.h @@ -8,6 +8,9 @@ class AddressTablePriv; class CWallet; class WalletModel; +/** + Qt model of the address book in the core. This allows views to access and modify the address book. + */ class AddressTableModel : public QAbstractTableModel { Q_OBJECT @@ -16,27 +19,28 @@ public: ~AddressTableModel(); enum ColumnIndex { - Label = 0, /* User specified label */ - Address = 1 /* Bitcoin address */ + Label = 0, /**< User specified label */ + Address = 1 /**< Bitcoin address */ }; enum RoleIndex { - TypeRole = Qt::UserRole + TypeRole = Qt::UserRole /**< Type of address (#Send or #Receive) */ }; - // Return status of last edit/insert operation + /** Return status of edit/insert operation */ enum EditStatus { OK, - INVALID_ADDRESS, - DUPLICATE_ADDRESS, - WALLET_UNLOCK_FAILURE, - KEY_GENERATION_FAILURE + INVALID_ADDRESS, /**< Unparseable address */ + DUPLICATE_ADDRESS, /**< Address already in address book */ + WALLET_UNLOCK_FAILURE, /**< Wallet could not be unlocked to create new receiving address */ + KEY_GENERATION_FAILURE /**< Generating a new public key for a receiving address failed */ }; - static const QString Send; /* Send addres */ - static const QString Receive; /* Receive address */ + static const QString Send; /**< Specifies send address */ + static const QString Receive; /**< Specifies receive address */ - /* Overridden methods from QAbstractTableModel */ + /** @name Methods overridden from QAbstractTableModel + @{*/ int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; @@ -45,16 +49,13 @@ public: QModelIndex index(int row, int column, const QModelIndex & parent) const; bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); Qt::ItemFlags flags(const QModelIndex & index) const; + /*@}*/ /* Add an address to the model. Returns the added address on success, and an empty string otherwise. */ QString addRow(const QString &type, const QString &label, const QString &address); - /* Update address list from core. Invalidates any indices. - */ - void updateList(); - /* Look up label for address in address book, if not found return empty string. */ QString labelForAddress(const QString &address) const; @@ -77,6 +78,8 @@ signals: void defaultAddressChanged(const QString &address); public slots: + /* Update address list from core. Invalidates any indices. + */ void update(); }; diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index a574ef925b..31e4040d1d 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -6,17 +6,25 @@ #include <QMessageBox> #include <QPushButton> +#include <QKeyEvent> AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : QDialog(parent), ui(new Ui::AskPassphraseDialog), mode(mode), - model(0) + model(0), + fCapsLock(false) { ui->setupUi(this); ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE); + + // Setup Caps Lock detection. + ui->passEdit1->installEventFilter(this); + ui->passEdit2->installEventFilter(this); + ui->passEdit3->installEventFilter(this); + ui->capsLabel->clear(); switch(mode) { @@ -47,7 +55,6 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : ui->warningLabel->setText(tr("Enter the old and new passphrase to the wallet.")); break; } - resize(minimumSize()); // Get rid of extra space in dialog textChanged(); connect(ui->passEdit1, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); @@ -71,16 +78,17 @@ void AskPassphraseDialog::setModel(WalletModel *model) void AskPassphraseDialog::accept() { - std::string oldpass, newpass1, newpass2; + SecureString oldpass, newpass1, newpass2; if(!model) return; - // TODO: mlock memory / munlock on return so they will not be swapped out, really need "mlockedstring" wrapper class to do this safely oldpass.reserve(MAX_PASSPHRASE_SIZE); newpass1.reserve(MAX_PASSPHRASE_SIZE); newpass2.reserve(MAX_PASSPHRASE_SIZE); - oldpass.assign(ui->passEdit1->text().toStdString()); - newpass1.assign(ui->passEdit2->text().toStdString()); - newpass2.assign(ui->passEdit3->text().toStdString()); + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make this input mlock()'d to begin with. + oldpass.assign(ui->passEdit1->text().toStdString().c_str()); + newpass1.assign(ui->passEdit2->text().toStdString().c_str()); + newpass2.assign(ui->passEdit3->text().toStdString().c_str()); switch(mode) { @@ -187,3 +195,46 @@ void AskPassphraseDialog::textChanged() } ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(acceptable); } + +bool AskPassphraseDialog::event(QEvent *event) +{ + // Detect Caps Lock key press. + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast<QKeyEvent *>(event); + if (ke->key() == Qt::Key_CapsLock) { + fCapsLock = !fCapsLock; + } + if (fCapsLock) { + ui->capsLabel->setText(tr("Warning: The Caps Lock key is on.")); + } else { + ui->capsLabel->clear(); + } + } + return QWidget::event(event); +} + +bool AskPassphraseDialog::eventFilter(QObject *, QEvent *event) +{ + /* Detect Caps Lock. + * There is no good OS-independent way to check a key state in Qt, but we + * can detect Caps Lock by checking for the following condition: + * Shift key is down and the result is a lower case character, or + * Shift key is not down and the result is an upper case character. + */ + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast<QKeyEvent *>(event); + QString str = ke->text(); + if (str.length() != 0) { + const QChar *psz = str.unicode(); + bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0; + if ((fShift && psz->isLower()) || (!fShift && psz->isUpper())) { + fCapsLock = true; + ui->capsLabel->setText(tr("Warning: The Caps Lock key is on.")); + } else if (psz->isLetter()) { + fCapsLock = false; + ui->capsLabel->clear(); + } + } + } + return false; +} diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index 761612cbfd..b500ff49bf 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -9,16 +9,18 @@ namespace Ui { class WalletModel; +/** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase. + */ class AskPassphraseDialog : public QDialog { Q_OBJECT public: enum Mode { - Encrypt, // Ask passphrase x2 - Unlock, // Ask passphrase - ChangePass, // Ask old passphrase + new passphrase x2 - Decrypt // Ask passphrase + Encrypt, /**< Ask passphrase twice and encrypt */ + Unlock, /**< Ask passphrase and unlock */ + ChangePass, /**< Ask old passphrase + new passphrase twice */ + Decrypt /**< Ask passphrase and decrypt wallet */ }; explicit AskPassphraseDialog(Mode mode, QWidget *parent = 0); @@ -32,9 +34,12 @@ private: Ui::AskPassphraseDialog *ui; Mode mode; WalletModel *model; + bool fCapsLock; private slots: void textChanged(); + bool event(QEvent *event); + bool eventFilter(QObject *, QEvent *event); }; #endif // ASKPASSPHRASEDIALOG_H diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 6afa9671d0..394e4a7661 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -1,52 +1,55 @@ /* - * W.J. van der Laan 2011 + * W.J. van der Laan 2011-2012 */ #include "bitcoingui.h" #include "clientmodel.h" #include "walletmodel.h" #include "optionsmodel.h" +#include "guiutil.h" #include "headers.h" #include "init.h" +#include "qtipcserver.h" #include <QApplication> #include <QMessageBox> -#include <QThread> #include <QTextCodec> #include <QLocale> #include <QTranslator> #include <QSplashScreen> #include <QLibraryInfo> -// Need a global reference for the notifications to find the GUI -BitcoinGUI *guiref; -QSplashScreen *splashref; +#include <boost/interprocess/ipc/message_queue.hpp> -int MyMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y) -{ - // Message from main thread - if(guiref) - { - guiref->error(QString::fromStdString(caption), - QString::fromStdString(message)); - } - else - { - QMessageBox::critical(0, QString::fromStdString(caption), - QString::fromStdString(message), - QMessageBox::Ok, QMessageBox::Ok); - } - return 4; -} +#if defined(BITCOIN_NEED_QT_PLUGINS) && !defined(_BITCOIN_QT_PLUGINS_INCLUDED) +#define _BITCOIN_QT_PLUGINS_INCLUDED +#define __INSURE__ +#include <QtPlugin> +Q_IMPORT_PLUGIN(qcncodecs) +Q_IMPORT_PLUGIN(qjpcodecs) +Q_IMPORT_PLUGIN(qtwcodecs) +Q_IMPORT_PLUGIN(qkrcodecs) +Q_IMPORT_PLUGIN(qtaccessiblewidgets) +#endif + +// Need a global reference for the notifications to find the GUI +static BitcoinGUI *guiref; +static QSplashScreen *splashref; +static WalletModel *walletmodel; +static ClientModel *clientmodel; -int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y) +int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style) { // Message from network thread if(guiref) { - QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection, + bool modal = (style & wxMODAL); + // in case of modal message, use blocking connection to wait for user to click OK + QMetaObject::invokeMethod(guiref, "error", + modal ? GUIUtil::blockingGUIThreadConnection() : Qt::QueuedConnection, Q_ARG(QString, QString::fromStdString(caption)), - Q_ARG(QString, QString::fromStdString(message))); + Q_ARG(QString, QString::fromStdString(message)), + Q_ARG(bool, modal)); } else { @@ -56,7 +59,7 @@ int ThreadSafeMessageBox(const std::string& message, const std::string& caption, return 4; } -bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent) +bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption) { if(!guiref) return false; @@ -64,33 +67,34 @@ bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindo return true; bool payFee = false; - // Call slot on GUI thread. - // If called from another thread, use a blocking QueuedConnection. - Qt::ConnectionType connectionType = Qt::DirectConnection; - if(QThread::currentThread() != QCoreApplication::instance()->thread()) - { - connectionType = Qt::BlockingQueuedConnection; - } - - QMetaObject::invokeMethod(guiref, "askFee", connectionType, + QMetaObject::invokeMethod(guiref, "askFee", GUIUtil::blockingGUIThreadConnection(), Q_ARG(qint64, nFeeRequired), Q_ARG(bool*, &payFee)); return payFee; } -void CalledSetStatusBar(const std::string& strText, int nField) +void ThreadSafeHandleURL(const std::string& strURL) { - // Only used for built-in mining, which is disabled, simple ignore + if(!guiref) + return; + + QMetaObject::invokeMethod(guiref, "handleURL", GUIUtil::blockingGUIThreadConnection(), + Q_ARG(QString, QString::fromStdString(strURL))); } -void UIThreadCall(boost::function0<void> fn) +void MainFrameRepaint() { - // Only used for built-in mining, which is disabled, simple ignore + if(clientmodel) + QMetaObject::invokeMethod(clientmodel, "update", Qt::QueuedConnection); + if(walletmodel) + QMetaObject::invokeMethod(walletmodel, "update", Qt::QueuedConnection); } -void MainFrameRepaint() +void AddressBookRepaint() { + if(walletmodel) + QMetaObject::invokeMethod(walletmodel, "updateAddressList", Qt::QueuedConnection); } void InitMessage(const std::string &message) @@ -102,6 +106,11 @@ void InitMessage(const std::string &message) } } +void QueueShutdown() +{ + QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); +} + /* Translate string to current locale using Qt. */ @@ -110,19 +119,71 @@ std::string _(const char* psz) return QCoreApplication::translate("bitcoin-core", psz).toStdString(); } +#ifdef WIN32 +#define strncasecmp strnicmp +#endif +#ifndef BITCOIN_QT_TEST int main(int argc, char *argv[]) { +#if !defined(MAC_OSX) && !defined(WIN32) +// TODO: implement qtipcserver.cpp for Mac and Windows + + // Do this early as we don't want to bother initializing if we are just calling IPC + for (int i = 1; i < argc; i++) + { + if (strlen(argv[i]) > 7 && strncasecmp(argv[i], "bitcoin:", 8) == 0) + { + const char *strURL = argv[i]; + try { + boost::interprocess::message_queue mq(boost::interprocess::open_only, "BitcoinURL"); + if(mq.try_send(strURL, strlen(strURL), 0)) + exit(0); + else + break; + } + catch (boost::interprocess::interprocess_exception &ex) { + break; + } + } + } +#endif + + // Internal string conversion is all UTF-8 QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForTr()); Q_INIT_RESOURCE(bitcoin); QApplication app(argc, argv); - // Load language files for system locale: + // Command-line options take precedence: + ParseParameters(argc, argv); + + // ... then bitcoin.conf: + if (!ReadConfigFile(mapArgs, mapMultiArgs)) + { + fprintf(stderr, "Error: Specified directory does not exist\n"); + return 1; + } + + // Application identification (must be set before OptionsModel is initialized, + // as it is used to locate QSettings) + app.setOrganizationName("Bitcoin"); + app.setOrganizationDomain("bitcoin.org"); + if(GetBoolArg("-testnet")) // Separate UI settings for testnet + app.setApplicationName("Bitcoin-Qt-testnet"); + else + app.setApplicationName("Bitcoin-Qt"); + + // ... then GUI settings: + OptionsModel optionsModel; + + // Get desired locale ("en_US") from command line or system locale + QString lang_territory = QString::fromStdString(GetArg("-lang", QLocale::system().name().toStdString())); + // Load language files for configured locale: // - First load the translator for the base language, without territory // - Then load the more specific locale translator - QString lang_territory = QLocale::system().name(); // "en_US" QString lang = lang_territory; + lang.truncate(lang_territory.lastIndexOf('_')); // "en" QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator; @@ -142,12 +203,13 @@ int main(int argc, char *argv[]) if (!translator.isEmpty()) app.installTranslator(&translator); - app.setApplicationName(QApplication::translate("main", "Bitcoin-Qt")); - QSplashScreen splash(QPixmap(":/images/splash"), 0); - splash.show(); - splash.setAutoFillBackground(true); - splashref = &splash; + if (GetBoolArg("-splash", true) && !GetBoolArg("-min")) + { + splash.show(); + splash.setAutoFillBackground(true); + splashref = &splash; + } app.processEvents(); @@ -155,26 +217,65 @@ int main(int argc, char *argv[]) try { + BitcoinGUI window; + guiref = &window; if(AppInit2(argc, argv)) { { - // Put this in a block, so that BitcoinGUI is cleaned up properly before + // Put this in a block, so that the Model objects are cleaned up before // calling Shutdown(). - BitcoinGUI window; - splash.finish(&window); - OptionsModel optionsModel(pwalletMain); + + optionsModel.Upgrade(); // Must be done after AppInit2 + + if (splashref) + splash.finish(&window); + ClientModel clientModel(&optionsModel); + clientmodel = &clientModel; WalletModel walletModel(pwalletMain, &optionsModel); + walletmodel = &walletModel; - guiref = &window; window.setClientModel(&clientModel); window.setWalletModel(&walletModel); - window.show(); + // If -min option passed, start window minimized. + if(GetBoolArg("-min")) + { + window.showMinimized(); + } + else + { + window.show(); + } + + // Place this here as guiref has to be defined if we dont want to lose URLs + ipcInit(); + +#if !defined(MAC_OSX) && !defined(WIN32) +// TODO: implement qtipcserver.cpp for Mac and Windows + // Check for URL in argv + for (int i = 1; i < argc; i++) + { + if (strlen(argv[i]) > 7 && strncasecmp(argv[i], "bitcoin:", 8) == 0) + { + const char *strURL = argv[i]; + try { + boost::interprocess::message_queue mq(boost::interprocess::open_only, "BitcoinURL"); + mq.try_send(strURL, strlen(strURL), 0); + } + catch (boost::interprocess::interprocess_exception &ex) { + } + } + } +#endif app.exec(); + window.setClientModel(0); + window.setWalletModel(0); guiref = 0; + clientmodel = 0; + walletmodel = 0; } Shutdown(NULL); } @@ -189,3 +290,4 @@ int main(int argc, char *argv[]) } return 0; } +#endif // BITCOIN_QT_TEST diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index e90cdae45c..e631a65155 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -1,5 +1,5 @@ <RCC> - <qresource prefix="/icons" lang="edit"> + <qresource prefix="/icons"> <file alias="bitcoin">res/icons/bitcoin.png</file> <file alias="address-book">res/icons/address-book.png</file> <file alias="quit">res/icons/quit.png</file> @@ -37,23 +37,48 @@ <file alias="lock_closed">res/icons/lock_closed.png</file> <file alias="lock_open">res/icons/lock_open.png</file> <file alias="key">res/icons/key.png</file> + <file alias="filesave">res/icons/filesave.png</file> </qresource> <qresource prefix="/images"> <file alias="about">res/images/about.png</file> <file alias="splash">res/images/splash2.jpg</file> + <file alias="qrcode">res/images/qrcode.png</file> </qresource> <qresource prefix="/movies"> <file alias="update_spinner">res/movies/update_spinner.mng</file> </qresource> <qresource prefix="/translations"> + <file alias="ca_ES">locale/bitcoin_ca_ES.qm</file> + <file alias="cs">locale/bitcoin_cs.qm</file> <file alias="da">locale/bitcoin_da.qm</file> <file alias="de">locale/bitcoin_de.qm</file> <file alias="en">locale/bitcoin_en.qm</file> - <file alias="es">locale/bitcoin_es.qm</file> <file alias="es_CL">locale/bitcoin_es_CL.qm</file> + <file alias="es">locale/bitcoin_es.qm</file> + <file alias="et">locale/bitcoin_et.qm</file> + <file alias="eu_ES">locale/bitcoin_eu_ES.qm</file> + <file alias="fa_IR">locale/bitcoin_fa_IR.qm</file> + <file alias="fa">locale/bitcoin_fa.qm</file> + <file alias="fi">locale/bitcoin_fi.qm</file> + <file alias="fr_CA">locale/bitcoin_fr_CA.qm</file> + <file alias="fr_FR">locale/bitcoin_fr_FR.qm</file> + <file alias="he">locale/bitcoin_he.qm</file> + <file alias="hr">locale/bitcoin_hr.qm</file> + <file alias="hu">locale/bitcoin_hu.qm</file> + <file alias="it">locale/bitcoin_it.qm</file> + <file alias="lt">locale/bitcoin_lt.qm</file> <file alias="nb">locale/bitcoin_nb.qm</file> <file alias="nl">locale/bitcoin_nl.qm</file> + <file alias="pl">locale/bitcoin_pl.qm</file> + <file alias="pt_BR">locale/bitcoin_pt_BR.qm</file> + <file alias="ro_RO">locale/bitcoin_ro_RO.qm</file> <file alias="ru">locale/bitcoin_ru.qm</file> + <file alias="sk">locale/bitcoin_sk.qm</file> + <file alias="sr">locale/bitcoin_sr.qm</file> + <file alias="sv">locale/bitcoin_sv.qm</file> + <file alias="tr">locale/bitcoin_tr.qm</file> + <file alias="uk">locale/bitcoin_uk.qm</file> + <file alias="zh_CN">locale/bitcoin_zh_CN.qm</file> <file alias="zh_TW">locale/bitcoin_zh_TW.qm</file> </qresource> </RCC> diff --git a/src/qt/bitcoinaddressvalidator.h b/src/qt/bitcoinaddressvalidator.h index 73f6ea1f61..9710d122b6 100644 --- a/src/qt/bitcoinaddressvalidator.h +++ b/src/qt/bitcoinaddressvalidator.h @@ -3,7 +3,7 @@ #include <QRegExpValidator> -/* Base48 entry widget validator. +/** Base48 entry widget validator. Corrects near-miss characters and refuses characters that are no part of base48. */ class BitcoinAddressValidator : public QValidator @@ -14,7 +14,7 @@ public: State validate(QString &input, int &pos) const; - static const int MaxAddressLength = 34; + static const int MaxAddressLength = 35; signals: public slots: diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp index 19cd5655cc..9514ec8465 100644 --- a/src/qt/bitcoinamountfield.cpp +++ b/src/qt/bitcoinamountfield.cpp @@ -22,6 +22,7 @@ BitcoinAmountField::BitcoinAmountField(QWidget *parent): amount->setDecimals(8); amount->installEventFilter(this); amount->setMaximumWidth(170); + amount->setSingleStep(0.001); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(amount); diff --git a/src/qt/bitcoinamountfield.h b/src/qt/bitcoinamountfield.h index 8457a418c2..ead8bdb84b 100644 --- a/src/qt/bitcoinamountfield.h +++ b/src/qt/bitcoinamountfield.h @@ -8,8 +8,8 @@ class QDoubleSpinBox; class QValueComboBox; QT_END_NAMESPACE -// Coin amount entry widget with separate parts for whole -// coins and decimals. +/** Widget for entering bitcoin amounts. + */ class BitcoinAmountField: public QWidget { Q_OBJECT @@ -20,25 +20,27 @@ public: qint64 value(bool *valid=0) const; void setValue(qint64 value); - // Mark current valid as invalid in UI + /** Mark current value as invalid in UI. */ void setValid(bool valid); + /** Perform input validation, mark field as invalid if entered value is not valid. */ bool validate(); - // Change current unit + /** Change unit used to display amount. */ void setDisplayUnit(int unit); - // Make field empty and ready for new input + /** Make field empty and ready for new input. */ void clear(); - // Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907) - // Hence we have to set it up manually + /** Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907), + in these cases we have to set it up manually. + */ QWidget *setupTabChain(QWidget *prev); signals: void textChanged(); protected: - // Intercept focus-in event and ',' keypresses + /** Intercept focus-in event and ',' keypresses */ bool eventFilter(QObject *object, QEvent *event); private: diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 8641c723b0..a60b585225 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1,12 +1,14 @@ /* * Qt4 bitcoin GUI. * - * W.J. van der Laan 2011 + * W.J. van der Laan 20011-2012 + * The Bitcoin Developers 20011-2012 */ #include "bitcoingui.h" #include "transactiontablemodel.h" #include "addressbookpage.h" #include "sendcoinsdialog.h" +#include "messagepage.h" #include "optionsdialog.h" #include "aboutdialog.h" #include "clientmodel.h" @@ -44,6 +46,9 @@ #include <QStackedWidget> #include <QDateTime> #include <QMovie> +#include <QFileDialog> +#include <QDesktopServices> +#include <QTimer> #include <QDragEnterEvent> #include <QUrl> @@ -56,6 +61,7 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): walletModel(0), encryptWalletAction(0), changePassphraseAction(0), + aboutQtAction(0), trayIcon(0), notificator(0) { @@ -97,12 +103,17 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): sendCoinsPage = new SendCoinsDialog(this); + messagePage = new MessagePage(this); + centralWidget = new QStackedWidget(this); centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); centralWidget->addWidget(addressBookPage); centralWidget->addWidget(receiveCoinsPage); centralWidget->addWidget(sendCoinsPage); +#ifdef FIRST_CLASS_MESSAGING + centralWidget->addWidget(messagePage); +#endif setCentralWidget(centralWidget); // Create status bar @@ -110,7 +121,6 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): // Status bar notification icons QFrame *frameBlocks = new QFrame(); - //frameBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setMinimumWidth(56); frameBlocks->setMaximumWidth(56); @@ -128,17 +138,20 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); - // Progress bar for blocks download - progressBarLabel = new QLabel(tr("Synchronizing with network...")); + // Progress bar and label for blocks download + progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new QProgressBar(); - progressBar->setToolTip(tr("Block chain synchronization in progress")); progressBar->setVisible(false); statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); + // define OS independent progress bar style (has to be placed after addWidget(), otherwise we crash) + // we did this, because with some OSes default style, text on the progress bar is unreadable + progressBar->setStyleSheet("QProgressBar { background-color: transparent; border: 1px solid grey; border-radius: 2px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); margin: 0px; }"); + syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this); // Clicking on a transaction on the overview page simply sends you to transaction history page @@ -152,6 +165,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): BitcoinGUI::~BitcoinGUI() { + if(trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu) + trayIcon->hide(); #ifdef Q_WS_MAC delete appMenuBar; #endif @@ -191,11 +206,25 @@ void BitcoinGUI::createActions() sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2)); tabGroup->addAction(sendCoinsAction); + messageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message"), this); + messageAction->setToolTip(tr("Prove you control an address")); +#ifdef FIRST_CLASS_MESSAGING + messageAction->setCheckable(true); +#endif + tabGroup->addAction(messageAction); + + connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage())); + connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); + connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage())); + connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); + connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage())); + connect(messageAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(messageAction, SIGNAL(triggered()), this, SLOT(gotoMessagePage())); quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); quitAction->setToolTip(tr("Quit application")); @@ -203,25 +232,32 @@ void BitcoinGUI::createActions() quitAction->setMenuRole(QAction::QuitRole); aboutAction = new QAction(QIcon(":/icons/bitcoin"), tr("&About %1").arg(qApp->applicationName()), this); aboutAction->setToolTip(tr("Show information about Bitcoin")); - aboutAction->setMenuRole(QAction::AboutQtRole); + aboutAction->setMenuRole(QAction::AboutRole); + aboutQtAction = new QAction(tr("About &Qt"), this); + aboutQtAction->setToolTip(tr("Show information about Qt")); + aboutQtAction->setMenuRole(QAction::AboutQtRole); optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this); optionsAction->setToolTip(tr("Modify configuration options for bitcoin")); optionsAction->setMenuRole(QAction::PreferencesRole); openBitcoinAction = new QAction(QIcon(":/icons/bitcoin"), tr("Open &Bitcoin"), this); openBitcoinAction->setToolTip(tr("Show the Bitcoin window")); exportAction = new QAction(QIcon(":/icons/export"), tr("&Export..."), this); - exportAction->setToolTip(tr("Export the current view to a file")); + exportAction->setToolTip(tr("Export the data in the current tab to a file")); encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet"), this); encryptWalletAction->setToolTip(tr("Encrypt or decrypt wallet")); encryptWalletAction->setCheckable(true); + backupWalletAction = new QAction(QIcon(":/icons/filesave"), tr("&Backup Wallet"), this); + backupWalletAction->setToolTip(tr("Backup wallet to another location")); changePassphraseAction = new QAction(QIcon(":/icons/key"), tr("&Change Passphrase"), this); changePassphraseAction->setToolTip(tr("Change the passphrase used for wallet encryption")); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); connect(optionsAction, SIGNAL(triggered()), this, SLOT(optionsClicked())); connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked())); - connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(encryptWalletAction, SIGNAL(triggered(bool)), this, SLOT(encryptWallet(bool))); + connect(backupWalletAction, SIGNAL(triggered()), this, SLOT(backupWallet())); connect(changePassphraseAction, SIGNAL(triggered()), this, SLOT(changePassphrase())); } @@ -237,6 +273,12 @@ void BitcoinGUI::createMenuBar() // Configure the menus QMenu *file = appMenuBar->addMenu(tr("&File")); + file->addAction(backupWalletAction); + file->addAction(exportAction); +#ifndef FIRST_CLASS_MESSAGING + file->addAction(messageAction); +#endif + file->addSeparator(); file->addAction(quitAction); QMenu *settings = appMenuBar->addMenu(tr("&Settings")); @@ -247,6 +289,7 @@ void BitcoinGUI::createMenuBar() QMenu *help = appMenuBar->addMenu(tr("&Help")); help->addAction(aboutAction); + help->addAction(aboutQtAction); } void BitcoinGUI::createToolBars() @@ -258,6 +301,9 @@ void BitcoinGUI::createToolBars() toolbar->addAction(receiveCoinsAction); toolbar->addAction(historyAction); toolbar->addAction(addressBookAction); +#ifdef FIRST_CLASS_MESSAGING + toolbar->addAction(messageAction); +#endif QToolBar *toolbar2 = addToolBar(tr("Actions toolbar")); toolbar2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); @@ -293,7 +339,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int))); // Report errors from network/worker thread - connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString))); + connect(clientModel, SIGNAL(error(QString,QString, bool)), this, SLOT(error(QString,QString,bool))); } } @@ -303,7 +349,7 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel) if(walletModel) { // Report errors from wallet thread - connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString))); + connect(walletModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool))); // Put transaction list in tabs transactionView->setModel(walletModel); @@ -312,6 +358,7 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel) addressBookPage->setModel(walletModel->getAddressTableModel()); receiveCoinsPage->setModel(walletModel->getAddressTableModel()); sendCoinsPage->setModel(walletModel); + messagePage->setModel(walletModel); setEncryptionStatus(walletModel->getEncryptionStatus()); connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int))); @@ -332,7 +379,7 @@ void BitcoinGUI::createTrayIcon() trayIcon = new QSystemTrayIcon(this); trayIconMenu = new QMenu(this); trayIcon->setContextMenu(trayIconMenu); - trayIcon->setToolTip("Bitcoin client"); + trayIcon->setToolTip(tr("Bitcoin client")); trayIcon->setIcon(QIcon(":/icons/toolbar")); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); @@ -347,6 +394,10 @@ void BitcoinGUI::createTrayIcon() // Configuration of the tray icon (or dock icon) icon menu trayIconMenu->addAction(openBitcoinAction); trayIconMenu->addSeparator(); + trayIconMenu->addAction(messageAction); +#ifndef FIRST_CLASS_MESSAGING + trayIconMenu->addSeparator(); +#endif trayIconMenu->addAction(receiveCoinsAction); trayIconMenu->addAction(sendCoinsAction); trayIconMenu->addSeparator(); @@ -367,7 +418,6 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) // Click on system tray icon triggers "open bitcoin" openBitcoinAction->trigger(); } - } #endif @@ -404,23 +454,49 @@ void BitcoinGUI::setNumConnections(int count) void BitcoinGUI::setNumBlocks(int count) { - if(!clientModel) + // don't show / hide progressBar and it's label if we have no connection(s) to the network + if (!clientModel || clientModel->getNumConnections() == 0) + { + progressBarLabel->setVisible(false); + progressBar->setVisible(false); + return; - int initTotal = clientModel->getNumBlocksAtStartup(); - int total = clientModel->getNumBlocksOfPeers(); + } + + int nTotalBlocks = clientModel->getNumBlocksOfPeers(); QString tooltip; - if(count < total) + if(count < nTotalBlocks) { - progressBarLabel->setVisible(true); - progressBar->setVisible(true); - progressBar->setMaximum(total - initTotal); - progressBar->setValue(count - initTotal); - tooltip = tr("Downloaded %1 of %2 blocks of transaction history.").arg(count).arg(total); + int nRemainingBlocks = nTotalBlocks - count; + float nPercentageDone = count / (nTotalBlocks * 0.01f); + + if (clientModel->getStatusBarWarnings() == "") + { + progressBarLabel->setText(tr("Synchronizing with network...")); + progressBarLabel->setVisible(true); + progressBar->setFormat(tr("~%n block(s) remaining", "", nRemainingBlocks)); + progressBar->setMaximum(nTotalBlocks); + progressBar->setValue(count); + progressBar->setVisible(true); + } + else + { + progressBarLabel->setText(clientModel->getStatusBarWarnings()); + progressBarLabel->setVisible(true); + progressBar->setVisible(false); + } + tooltip = tr("Downloaded %1 of %2 blocks of transaction history (%3% done).").arg(count).arg(nTotalBlocks).arg(nPercentageDone, 0, 'f', 2); } else { - progressBarLabel->setVisible(false); + if (clientModel->getStatusBarWarnings() == "") + progressBarLabel->setVisible(false); + else + { + progressBarLabel->setText(clientModel->getStatusBarWarnings()); + progressBarLabel->setVisible(true); + } progressBar->setVisible(false); tooltip = tr("Downloaded %1 blocks of transaction history.").arg(count); } @@ -431,7 +507,11 @@ void BitcoinGUI::setNumBlocks(int count) QString text; // Represent time from last generated block in human readable text - if(secs < 60) + if(secs <= 0) + { + // Fully up to date. Leave text empty. + } + else if(secs < 60) { text = tr("%n second(s) ago","",secs); } @@ -449,9 +529,9 @@ void BitcoinGUI::setNumBlocks(int count) } // Set icon state: spinning if catching up, tick otherwise - if(secs < 30*60) + if(secs < 90*60) { - tooltip = tr("Up to date") + QString("\n") + tooltip; + tooltip = tr("Up to date") + QString(".\n") + tooltip; labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); } else @@ -461,41 +541,45 @@ void BitcoinGUI::setNumBlocks(int count) syncIconMovie->start(); } - tooltip += QString("\n"); - tooltip += tr("Last received block was generated %1.").arg(text); + if(!text.isEmpty()) + { + tooltip += QString("\n"); + tooltip += tr("Last received block was generated %1.").arg(text); + } labelBlocksIcon->setToolTip(tooltip); progressBarLabel->setToolTip(tooltip); progressBar->setToolTip(tooltip); } -void BitcoinGUI::error(const QString &title, const QString &message) +void BitcoinGUI::error(const QString &title, const QString &message, bool modal) { // Report errors from network/worker thread - notificator->notify(Notificator::Critical, title, message); + if(modal) + { + QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok); + } else { + notificator->notify(Notificator::Critical, title, message); + } } void BitcoinGUI::changeEvent(QEvent *e) { + QMainWindow::changeEvent(e); #ifndef Q_WS_MAC // Ignored on Mac if(e->type() == QEvent::WindowStateChange) { if(clientModel && clientModel->getOptionsModel()->getMinimizeToTray()) { - if(isMinimized()) + QWindowStateChangeEvent *wsevt = static_cast<QWindowStateChangeEvent*>(e); + if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized()) { - hide(); + QTimer::singleShot(0, this, SLOT(hide())); e->ignore(); } - else - { - show(); - e->accept(); - } } } #endif - QMainWindow::changeEvent(e); } void BitcoinGUI::closeEvent(QCloseEvent *event) @@ -563,7 +647,6 @@ void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int void BitcoinGUI::gotoOverviewPage() { - show(); overviewAction->setChecked(true); centralWidget->setCurrentWidget(overviewPage); @@ -573,7 +656,6 @@ void BitcoinGUI::gotoOverviewPage() void BitcoinGUI::gotoHistoryPage() { - show(); historyAction->setChecked(true); centralWidget->setCurrentWidget(transactionsPage); @@ -584,7 +666,6 @@ void BitcoinGUI::gotoHistoryPage() void BitcoinGUI::gotoAddressBookPage() { - show(); addressBookAction->setChecked(true); centralWidget->setCurrentWidget(addressBookPage); @@ -595,7 +676,6 @@ void BitcoinGUI::gotoAddressBookPage() void BitcoinGUI::gotoReceiveCoinsPage() { - show(); receiveCoinsAction->setChecked(true); centralWidget->setCurrentWidget(receiveCoinsPage); @@ -606,7 +686,6 @@ void BitcoinGUI::gotoReceiveCoinsPage() void BitcoinGUI::gotoSendCoinsPage() { - show(); sendCoinsAction->setChecked(true); centralWidget->setCurrentWidget(sendCoinsPage); @@ -614,6 +693,26 @@ void BitcoinGUI::gotoSendCoinsPage() disconnect(exportAction, SIGNAL(triggered()), 0, 0); } +void BitcoinGUI::gotoMessagePage() +{ +#ifdef FIRST_CLASS_MESSAGING + messageAction->setChecked(true); + centralWidget->setCurrentWidget(messagePage); + + exportAction->setEnabled(false); + disconnect(exportAction, SIGNAL(triggered()), 0, 0); +#else + messagePage->show(); + messagePage->setFocus(); +#endif +} + +void BitcoinGUI::gotoMessagePage(QString addr) +{ + gotoMessagePage(); + messagePage->setAddress(addr); +} + void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event) { // Accept only URLs @@ -629,13 +728,24 @@ void BitcoinGUI::dropEvent(QDropEvent *event) QList<QUrl> urls = event->mimeData()->urls(); foreach(const QUrl &url, urls) { - sendCoinsPage->handleURL(&url); + sendCoinsPage->handleURL(url.toString()); } } event->acceptProposedAction(); } +void BitcoinGUI::handleURL(QString strURL) +{ + gotoSendCoinsPage(); + sendCoinsPage->handleURL(strURL); + + if(!isActiveWindow()) + activateWindow(); + + showNormalIfMinimized(); +} + void BitcoinGUI::setEncryptionStatus(int status) { switch(status) @@ -677,6 +787,17 @@ void BitcoinGUI::encryptWallet(bool status) setEncryptionStatus(walletModel->getEncryptionStatus()); } +void BitcoinGUI::backupWallet() +{ + QString saveDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + QString filename = QFileDialog::getSaveFileName(this, tr("Backup Wallet"), saveDir, tr("Wallet Data (*.dat)")); + if(!filename.isEmpty()) { + if(!walletModel->backupWallet(filename)) { + QMessageBox::warning(this, tr("Backup Failed"), tr("There was an error trying to save the wallet data to the new location.")); + } + } +} + void BitcoinGUI::changePassphrase() { AskPassphraseDialog dlg(AskPassphraseDialog::ChangePass, this); @@ -696,3 +817,11 @@ void BitcoinGUI::unlockWallet() dlg.exec(); } } + +void BitcoinGUI::showNormalIfMinimized() +{ + if(!isVisible()) // Show, if hidden + show(); + if(isMinimized()) // Unminimize, if minimized + showNormal(); +} diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index a912192196..c684d7cc3a 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -11,6 +11,7 @@ class TransactionView; class OverviewPage; class AddressBookPage; class SendCoinsDialog; +class MessagePage; class Notificator; QT_BEGIN_NAMESPACE @@ -24,6 +25,10 @@ class QStackedWidget; class QUrl; QT_END_NAMESPACE +/** + Bitcoin GUI main class. This class represents the main window of the Bitcoin UI. It communicates with both the client and + wallet models to give the user an up-to-date view of the current core state. +*/ class BitcoinGUI : public QMainWindow { Q_OBJECT @@ -31,17 +36,16 @@ public: explicit BitcoinGUI(QWidget *parent = 0); ~BitcoinGUI(); + /** Set the client model. + The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic. + */ void setClientModel(ClientModel *clientModel); + /** Set the wallet model. + The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending + functionality. + */ void setWalletModel(WalletModel *walletModel); - /* Transaction table tab indices */ - enum { - AllTransactions = 0, - SentReceived = 1, - Sent = 2, - Received = 3 - } TabIndex; - protected: void changeEvent(QEvent *e); void closeEvent(QCloseEvent *event); @@ -59,6 +63,7 @@ private: AddressBookPage *addressBookPage; AddressBookPage *receiveCoinsPage; SendCoinsDialog *sendCoinsPage; + MessagePage *messagePage; QLabel *labelEncryptionIcon; QLabel *labelConnectionsIcon; @@ -72,13 +77,16 @@ private: QAction *quitAction; QAction *sendCoinsAction; QAction *addressBookAction; + QAction *messageAction; QAction *aboutAction; QAction *receiveCoinsAction; QAction *optionsAction; QAction *openBitcoinAction; QAction *exportAction; QAction *encryptWalletAction; + QAction *backupWalletAction; QAction *changePassphraseAction; + QAction *aboutQtAction; QSystemTrayIcon *trayIcon; Notificator *notificator; @@ -86,42 +94,78 @@ private: QMovie *syncIconMovie; + /** Create the main UI actions. */ void createActions(); + /** Create the menu bar and submenus. */ void createMenuBar(); + /** Create the toolbars */ void createToolBars(); - QWidget *createTabs(); + /** Create system tray (notification) icon */ void createTrayIcon(); public slots: + /** Set number of connections shown in the UI */ void setNumConnections(int count); + /** Set number of blocks shown in the UI */ void setNumBlocks(int count); + /** Set the encryption status as shown in the UI. + @param[in] status current encryption status + @see WalletModel::EncryptionStatus + */ void setEncryptionStatus(int status); - void error(const QString &title, const QString &message); - /* It is currently not possible to pass a return value to another thread through - BlockingQueuedConnection, so use an indirected pointer. + /** Notify the user of an error in the network or transaction handling code. */ + void error(const QString &title, const QString &message, bool modal); + /** Asks the user whether to pay the transaction fee or to cancel the transaction. + It is currently not possible to pass a return value to another thread through + BlockingQueuedConnection, so an indirected pointer is used. http://bugreports.qt.nokia.com/browse/QTBUG-10440 + + @param[in] nFeeRequired the required fee + @param[out] payFee true to pay the fee, false to not pay the fee */ void askFee(qint64 nFeeRequired, bool *payFee); + void handleURL(QString strURL); + + void gotoMessagePage(); + void gotoMessagePage(QString); private slots: - // UI pages + /** Switch to overview (home) page */ void gotoOverviewPage(); + /** Switch to history (transactions) page */ void gotoHistoryPage(); + /** Switch to address book page */ void gotoAddressBookPage(); + /** Switch to receive coins page */ void gotoReceiveCoinsPage(); + /** Switch to send coins page */ void gotoSendCoinsPage(); - // Misc actions + /** Show configuration dialog */ void optionsClicked(); + /** Show about dialog */ void aboutClicked(); #ifndef Q_WS_MAC + /** Handle tray icon clicked */ void trayIconActivated(QSystemTrayIcon::ActivationReason reason); #endif + /** Show incoming transaction notification for new transactions. + + The new items are those between start and end inclusive, under the given parent item. + */ void incomingTransaction(const QModelIndex & parent, int start, int end); + /** Encrypt the wallet */ void encryptWallet(bool status); + /** Backup the wallet */ + void backupWallet(); + /** Change encrypted wallet passphrase */ void changePassphrase(); + /** Ask for pass phrase to unlock wallet temporarily */ void unlockWallet(); + + /** Show window if hidden, unminimize when minimized */ + void showNormalIfMinimized(); }; #endif diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 647adb9c53..73db1fe46c 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -2,61 +2,70 @@ // Automatically generated by extract_strings.py static const char *bitcoin_strings[] = {QT_TRANSLATE_NOOP("bitcoin-core", "Bitcoin version"), QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or bitcoind\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "List commands\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Options:\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: bitcoin.conf)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: bitcoind.pid)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't generate coins\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Start minimized\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout (in milliseconds)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks4 proxy\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for addnode and connect\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't accept connections from outside\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)\n"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or bitcoind"), +QT_TRANSLATE_NOOP("bitcoin-core", "List commands"), +QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command"), +QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: bitcoin.conf)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: bitcoind.pid)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins"), +QT_TRANSLATE_NOOP("bitcoin-core", "Don't generate coins"), +QT_TRANSLATE_NOOP("bitcoin-core", "Start minimized"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout (in milliseconds)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks4 proxy"), +QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for addnode and connect"), +QT_TRANSLATE_NOOP("bitcoin-core", "Listen for connections on <port> (default: 8333 or testnet: 18333)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most <n> connections to peers (default: 125)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to"), +QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node"), +QT_TRANSLATE_NOOP("bitcoin-core", "Don't accept connections from outside"), +QT_TRANSLATE_NOOP("bitcoin-core", "Don't bootstrap list of peers using DNS"), +QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Number of seconds to keep misbehaving peers from reconnecting (default: " -"86400)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't attempt to use UPnP to map the listening port\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to use UPnP to map the listening port\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Fee per KB to add to transactions you send\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Listen for JSON-RPC connections on <port> (default: 8332)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on <ip> (default: 127.0.0.1)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: 100)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions\n"), +"86400)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Don't attempt to use UPnP to map the listening port"), +QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to use UPnP to map the listening port"), +QT_TRANSLATE_NOOP("bitcoin-core", "Fee per kB to add to transactions you send"), +QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"), +QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), +QT_TRANSLATE_NOOP("bitcoin-core", "Output extra debugging information"), +QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to console instead of debug.log file"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to debugger"), +QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), +QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), +QT_TRANSLATE_NOOP("bitcoin-core", "Listen for JSON-RPC connections on <port> (default: 8332)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on <ip> (default: 127.0.0.1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: 100)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), QT_TRANSLATE_NOOP("bitcoin-core", "" "\n" -"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: server.cert)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: server.pem)\n"), +"SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections"), +QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: server.cert)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: server.pem)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:" -"@STRENGTH)\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "This help message\n"), +"@STRENGTH)"), +QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Cannot obtain a lock on data directory %s. Bitcoin is probably already " "running."), QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading addr.dat \n"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading addr.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading blkindex.dat \n"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading blkindex.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted \n"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Error loading wallet.dat: Wallet requires newer version of Bitcoin \n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat \n"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of Bitcoin"), +QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Bitcoin to complete"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address"), @@ -73,4 +82,4 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: Please check that your computer's date and time are correct. If " "your clock is wrong Bitcoin will not work properly."), QT_TRANSLATE_NOOP("bitcoin-core", "beta"), -};
\ No newline at end of file +}; diff --git a/src/qt/bitcoinunits.h b/src/qt/bitcoinunits.h index a7bebbc3e4..18fa36a0b7 100644 --- a/src/qt/bitcoinunits.h +++ b/src/qt/bitcoinunits.h @@ -4,51 +4,60 @@ #include <QString> #include <QAbstractListModel> -// Bitcoin unit definitions, encapsulates parsing and formatting -// and serves as list model for dropdown selection boxes. +/** Bitcoin unit definitions. Encapsulates parsing and formatting + and serves as list model for dropdown selection boxes. +*/ class BitcoinUnits: public QAbstractListModel { public: explicit BitcoinUnits(QObject *parent); + /** Bitcoin units. + @note Source: https://en.bitcoin.it/wiki/Units . Please add only sensible ones + */ enum Unit { - // Source: https://en.bitcoin.it/wiki/Units - // Please add only sensible ones BTC, mBTC, uBTC }; - /// Static API - // Get list of units, for dropdown box + //! @name Static API + //! Unit conversion and formatting + ///@{ + + //! Get list of units, for dropdown box static QList<Unit> availableUnits(); - // Is unit ID valid? + //! Is unit ID valid? static bool valid(int unit); - // Short name + //! Short name static QString name(int unit); - // Longer description + //! Longer description static QString description(int unit); - // Number of satoshis / unit + //! Number of Satoshis (1e-8) per unit static qint64 factor(int unit); - // Number of amount digits (to represent max number of coins) + //! Number of amount digits (to represent max number of coins) static int amountDigits(int unit); - // Number of decimals left + //! Number of decimals left static int decimals(int unit); - // Format as string + //! Format as string static QString format(int unit, qint64 amount, bool plussign=false); - // Format as string (with unit) + //! Format as string (with unit) static QString formatWithUnit(int unit, qint64 amount, bool plussign=false); - // Parse string to coin amount + //! Parse string to coin amount static bool parse(int unit, const QString &value, qint64 *val_out); + ///@} - /// AbstractListModel implementation - enum { - // Unit identifier + //! @name AbstractListModel implementation + //! List model for unit dropdown selection box. + ///@{ + enum RoleIndex { + /** Unit identifier */ UnitRole = Qt::UserRole - } RoleIndex; + }; int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; + ///@} private: QList<BitcoinUnits::Unit> unitlist; }; diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 2ed3ce51df..8163da0915 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -6,19 +6,12 @@ #include "headers.h" -#include <QTimer> #include <QDateTime> ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : QObject(parent), optionsModel(optionsModel), cachedNumConnections(0), cachedNumBlocks(0) { - // Until signal notifications is built into the bitcoin core, - // simply update everything after polling using a timer. - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(update())); - timer->start(MODEL_UPDATE_DELAY); - numBlocksAtStartup = -1; } @@ -47,14 +40,23 @@ void ClientModel::update() { int newNumConnections = getNumConnections(); int newNumBlocks = getNumBlocks(); + QString newStatusBar = getStatusBarWarnings(); if(cachedNumConnections != newNumConnections) emit numConnectionsChanged(newNumConnections); - if(cachedNumBlocks != newNumBlocks) + if(cachedNumBlocks != newNumBlocks || cachedStatusBar != newStatusBar) + { + // Simply emit a numBlocksChanged for now in case the status message changes, + // so that the view updates the status bar. + // TODO: It should send a notification. + // (However, this might generate looped notifications and needs to be thought through and tested carefully) + // error(tr("Network Alert"), newStatusBar); emit numBlocksChanged(newNumBlocks); + } cachedNumConnections = newNumConnections; cachedNumBlocks = newNumBlocks; + cachedStatusBar = newStatusBar; } bool ClientModel::isTestNet() const @@ -72,6 +74,11 @@ int ClientModel::getNumBlocksOfPeers() const return GetNumBlocksOfPeers(); } +QString ClientModel::getStatusBarWarnings() const +{ + return QString::fromStdString(GetWarnings("statusbar")); +} + OptionsModel *ClientModel::getOptionsModel() { return optionsModel; diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index c68fb0f035..6366b4d617 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -12,7 +12,7 @@ QT_BEGIN_NAMESPACE class QDateTime; QT_END_NAMESPACE -// Model for Bitcoin network client +/** Model for Bitcoin network client. */ class ClientModel : public QObject { Q_OBJECT @@ -27,12 +27,14 @@ public: QDateTime getLastBlockDate() const; - // Return true if client connected to testnet + //! Return true if client connected to testnet bool isTestNet() const; - // Return true if core is doing initial block download + //! Return true if core is doing initial block download bool inInitialBlockDownload() const; - // Return conservative estimate of total number of blocks, or 0 if unknown + //! Return conservative estimate of total number of blocks, or 0 if unknown int getNumBlocksOfPeers() const; + //! Return warnings to be displayed in status bar + QString getStatusBarWarnings() const; QString formatFullVersion() const; @@ -41,6 +43,7 @@ private: int cachedNumConnections; int cachedNumBlocks; + QString cachedStatusBar; int numBlocksAtStartup; @@ -48,8 +51,8 @@ signals: void numConnectionsChanged(int count); void numBlocksChanged(int count); - // Asynchronous error notification - void error(const QString &title, const QString &message); + //! Asynchronous error notification + void error(const QString &title, const QString &message, bool modal); public slots: diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h index 7367f3a6a9..6c9dcbaf3b 100644 --- a/src/qt/csvmodelwriter.h +++ b/src/qt/csvmodelwriter.h @@ -8,7 +8,9 @@ QT_BEGIN_NAMESPACE class QAbstractItemModel; QT_END_NAMESPACE -// Export TableModel to CSV file +/** Export a Qt table model to a CSV file. This is useful for analyzing or post-processing the data in + a spreadsheet. + */ class CSVModelWriter : public QObject { Q_OBJECT @@ -18,8 +20,9 @@ public: void setModel(const QAbstractItemModel *model); void addColumn(const QString &title, int column, int role=Qt::EditRole); - // Perform write operation - // Returns true on success, false otherwise + /** Perform export of the model to CSV. + @returns true on success, false otherwise + */ bool write(); private: diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h index 9c9769d407..7ec053f135 100644 --- a/src/qt/editaddressdialog.h +++ b/src/qt/editaddressdialog.h @@ -12,6 +12,8 @@ namespace Ui { } class AddressTableModel; +/** Dialog for editing an address and associated information. + */ class EditAddressDialog : public QDialog { Q_OBJECT diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index cf7997326c..127b90965a 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -82,7 +82,7 @@ <item> <widget class="QLabel" name="label_2"> <property name="text"> - <string>Copyright © 2009-2011 Bitcoin Developers + <string>Copyright © 2009-2012 Bitcoin Developers This is experimental software. diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui index fb098c8280..b31a9ce997 100644 --- a/src/qt/forms/addressbookpage.ui +++ b/src/qt/forms/addressbookpage.ui @@ -80,6 +80,31 @@ </widget> </item> <item> + <widget class="QPushButton" name="showQRCode"> + <property name="text"> + <string>Show &QR Code</string> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/images/qrcode</normaloff>:/images/qrcode</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="signMessage"> + <property name="toolTip"> + <string>Sign a message to prove you own this address</string> + </property> + <property name="text"> + <string>&Sign Message</string> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/icons/edit</normaloff>:/icons/edit</iconset> + </property> + </widget> + </item> + <item> <widget class="QPushButton" name="deleteButton"> <property name="toolTip"> <string>Delete the currently selected address from the list. Only sending addresses can be deleted.</string> diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui index 70d9180e75..3f6b668e06 100644 --- a/src/qt/forms/askpassphrasedialog.ui +++ b/src/qt/forms/askpassphrasedialog.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>589</width> - <height>228</height> + <width>598</width> + <height>198</height> </rect> </property> <property name="sizePolicy"> @@ -34,6 +34,9 @@ <property name="textFormat"> <enum>Qt::RichText</enum> </property> + <property name="wordWrap"> + <bool>true</bool> + </property> </widget> </item> <item> @@ -83,22 +86,24 @@ </property> </widget> </item> + <item row="4" column="1"> + <widget class="QLabel" name="capsLabel"> + <property name="styleSheet"> + <string notr="true">#capsLabel { + font: bold; +}</string> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> </layout> </item> <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> diff --git a/src/qt/forms/messagepage.ui b/src/qt/forms/messagepage.ui new file mode 100644 index 0000000000..131e15bdb3 --- /dev/null +++ b/src/qt/forms/messagepage.ui @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MessagePage</class> + <widget class="QWidget" name="MessagePage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>627</width> + <height>380</height> + </rect> + </property> + <property name="windowTitle"> + <string>Message</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="labelExplanation"> + <property name="text"> + <string>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</string> + </property> + <property name="textFormat"> + <enum>Qt::AutoText</enum> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <widget class="QValidatedLineEdit" name="signFrom"> + <property name="toolTip"> + <string>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string> + </property> + <property name="maxLength"> + <number>34</number> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="addressBookButton"> + <property name="toolTip"> + <string>Choose adress from address book</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset> + </property> + <property name="shortcut"> + <string>Alt+A</string> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + <property name="flat"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pasteButton"> + <property name="toolTip"> + <string>Paste address from clipboard</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset> + </property> + <property name="shortcut"> + <string>Alt+P</string> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QPlainTextEdit" name="message"> + <property name="toolTip"> + <string>Enter the message you want to sign here</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="signature"> + <property name="font"> + <font> + <italic>true</italic> + </font> + </property> + <property name="text"> + <string>Click "Sign Message" to get signature</string> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="signMessage"> + <property name="toolTip"> + <string>Sign a message to prove you own this address</string> + </property> + <property name="text"> + <string>&Sign Message</string> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/icons/edit</normaloff>:/icons/edit</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="copyToClipboard"> + <property name="toolTip"> + <string>Copy the currently selected address to the system clipboard</string> + </property> + <property name="text"> + <string>&Copy to Clipboard</string> + </property> + <property name="icon"> + <iconset resource="../bitcoin.qrc"> + <normaloff>:/icons/editcopy</normaloff>:/icons/editcopy</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>QValidatedLineEdit</class> + <extends>QLineEdit</extends> + <header>qvalidatedlineedit.h</header> + </customwidget> + </customwidgets> + <resources> + <include location="../bitcoin.qrc"/> + </resources> + <connections/> +</ui> diff --git a/src/qt/forms/qrcodedialog.ui b/src/qt/forms/qrcodedialog.ui new file mode 100644 index 0000000000..fa21f60b9e --- /dev/null +++ b/src/qt/forms/qrcodedialog.ui @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>QRCodeDialog</class> + <widget class="QDialog" name="QRCodeDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>320</width> + <height>404</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QLabel" name="lblQRCode"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>300</width> + <height>300</height> + </size> + </property> + <property name="text"> + <string>QR Code</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="widget" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="chkReq"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="text"> + <string>Request Payment</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="lblAm1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Amount:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>lnReqAmount</cstring> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="lnReqAmount"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>60</width> + <height>0</height> + </size> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lblAm2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>BTC</string> + </property> + <property name="buddy"> + <cstring>lnReqAmount</cstring> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Label:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>lnLabel</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="lnLabel"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Message:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>lnMessage</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="lnMessage"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="btnSaveAs"> + <property name="text"> + <string>&Save As...</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>chkReq</sender> + <signal>clicked(bool)</signal> + <receiver>lnReqAmount</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>92</x> + <y>285</y> + </hint> + <hint type="destinationlabel"> + <x>98</x> + <y>311</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index e5e19e1015..04cf404ae3 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -80,6 +80,9 @@ <verstretch>0</verstretch> </sizepolicy> </property> + <property name="toolTip"> + <string>Remove all transaction fields</string> + </property> <property name="text"> <string>Clear all</string> </property> diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui index 0297d17f15..22a3f8fdc6 100644 --- a/src/qt/forms/sendcoinsentry.ui +++ b/src/qt/forms/sendcoinsentry.ui @@ -100,7 +100,7 @@ <item> <widget class="QToolButton" name="addressBookButton"> <property name="toolTip"> - <string>Choose adress from address book</string> + <string>Choose address from address book</string> </property> <property name="text"> <string/> diff --git a/src/qt/forms/transactiondescdialog.ui b/src/qt/forms/transactiondescdialog.ui index 2f70a38214..9a9f6db158 100644 --- a/src/qt/forms/transactiondescdialog.ui +++ b/src/qt/forms/transactiondescdialog.ui @@ -19,6 +19,9 @@ <property name="toolTip"> <string>This pane shows a detailed description of the transaction</string> </property> + <property name="readOnly"> + <bool>true</bool> + </property> </widget> </item> <item> diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 158b84a285..ad530a78e4 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -11,6 +11,13 @@ #include <QFont> #include <QLineEdit> #include <QUrl> +#include <QTextDocument> // For Qt::escape +#include <QAbstractItemView> +#include <QApplication> +#include <QClipboard> +#include <QFileDialog> +#include <QDesktopServices> +#include <QThread> QString GUIUtil::dateTimeStr(qint64 nTime) { @@ -45,26 +52,43 @@ void GUIUtil::setupAmountWidget(QLineEdit *widget, QWidget *parent) widget->setAlignment(Qt::AlignRight|Qt::AlignVCenter); } -bool GUIUtil::parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out) +bool GUIUtil::parseBitcoinURL(const QUrl &url, SendCoinsRecipient *out) { - if(url->scheme() != QString("bitcoin")) + if(url.scheme() != QString("bitcoin")) return false; SendCoinsRecipient rv; - rv.address = url->path(); - rv.label = url->queryItemValue("label"); - - QString amount = url->queryItemValue("amount"); - if(amount.isEmpty()) - { - rv.amount = 0; - } - else // Amount is non-empty + rv.address = url.path(); + rv.amount = 0; + QList<QPair<QString, QString> > items = url.queryItems(); + for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++) { - if(!BitcoinUnits::parse(BitcoinUnits::BTC, amount, &rv.amount)) + bool fShouldReturnFalse = false; + if (i->first.startsWith("req-")) { - return false; + i->first.remove(0, 4); + fShouldReturnFalse = true; + } + + if (i->first == "label") + { + rv.label = i->second; + fShouldReturnFalse = false; } + else if (i->first == "amount") + { + if(!i->second.isEmpty()) + { + if(!BitcoinUnits::parse(BitcoinUnits::BTC, i->second, &rv.amount)) + { + return false; + } + } + fShouldReturnFalse = false; + } + + if (fShouldReturnFalse) + return false; } if(out) { @@ -72,3 +96,103 @@ bool GUIUtil::parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out) } return true; } + +bool GUIUtil::parseBitcoinURL(QString url, SendCoinsRecipient *out) +{ + // Convert bitcoin:// to bitcoin: + // + // Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host, + // which will lowercase it (and thus invalidate the address). + if(url.startsWith("bitcoin://")) + { + url.replace(0, 10, "bitcoin:"); + } + QUrl urlInstance(url); + return parseBitcoinURL(urlInstance, out); +} + +QString GUIUtil::HtmlEscape(const QString& str, bool fMultiLine) +{ + QString escaped = Qt::escape(str); + if(fMultiLine) + { + escaped = escaped.replace("\n", "<br>\n"); + } + return escaped; +} + +QString GUIUtil::HtmlEscape(const std::string& str, bool fMultiLine) +{ + return HtmlEscape(QString::fromStdString(str), fMultiLine); +} + +void GUIUtil::copyEntryData(QAbstractItemView *view, int column, int role) +{ + if(!view || !view->selectionModel()) + return; + QModelIndexList selection = view->selectionModel()->selectedRows(column); + + if(!selection.isEmpty()) + { + // Copy first item + QApplication::clipboard()->setText(selection.at(0).data(role).toString()); + } +} + +QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption, + const QString &dir, + const QString &filter, + QString *selectedSuffixOut) +{ + QString selectedFilter; + QString myDir; + if(dir.isEmpty()) // Default to user documents location + { + myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + } + else + { + myDir = dir; + } + QString result = QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter); + + /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString selectedSuffix; + if(filter_re.exactMatch(selectedFilter)) + { + selectedSuffix = filter_re.cap(1); + } + + /* Add suffix if needed */ + QFileInfo info(result); + if(!result.isEmpty()) + { + if(info.suffix().isEmpty() && !selectedSuffix.isEmpty()) + { + /* No suffix specified, add selected suffix */ + if(!result.endsWith(".")) + result.append("."); + result.append(selectedSuffix); + } + } + + /* Return selected suffix if asked to */ + if(selectedSuffixOut) + { + *selectedSuffixOut = selectedSuffix; + } + return result; +} + +Qt::ConnectionType GUIUtil::blockingGUIThreadConnection() +{ + if(QThread::currentThread() != QCoreApplication::instance()->thread()) + { + return Qt::BlockingQueuedConnection; + } + else + { + return Qt::DirectConnection; + } +} diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index bc4ddb8aae..06426d76bc 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -9,9 +9,12 @@ class QLineEdit; class QWidget; class QDateTime; class QUrl; +class QAbstractItemView; QT_END_NAMESPACE class SendCoinsRecipient; +/** Static utility functions used by the Bitcoin Qt UI. + */ class GUIUtil { public: @@ -28,7 +31,43 @@ public: // Parse "bitcoin:" URL into recipient object, return true on succesful parsing // See Bitcoin URL definition discussion here: https://bitcointalk.org/index.php?topic=33490.0 - static bool parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out); + static bool parseBitcoinURL(const QUrl &url, SendCoinsRecipient *out); + static bool parseBitcoinURL(QString url, SendCoinsRecipient *out); + + // HTML escaping for rich text controls + static QString HtmlEscape(const QString& str, bool fMultiLine=false); + static QString HtmlEscape(const std::string& str, bool fMultiLine=false); + + /** Copy a field of the currently selected entry of a view to the clipboard. Does nothing if nothing + is selected. + @param[in] column Data column to extract from the model + @param[in] role Data role to extract from the model + @see TransactionView::copyLabel, TransactionView::copyAmount, TransactionView::copyAddress + */ + static void copyEntryData(QAbstractItemView *view, int column, int role=Qt::EditRole); + + /** Get save file name, mimics QFileDialog::getSaveFileName, except that it appends a default suffix + when no suffix is provided by the user. + + @param[in] parent Parent window (or 0) + @param[in] caption Window caption (or empty, for default) + @param[in] dir Starting directory (or empty, to default to documents directory) + @param[in] filter Filter specification such as "Comma Separated Files (*.csv)" + @param[out] selectedSuffixOut Pointer to return the suffix (file type) that was selected (or 0). + Can be useful when choosing the save file format based on suffix. + */ + static QString getSaveFileName(QWidget *parent=0, const QString &caption=QString(), + const QString &dir=QString(), const QString &filter=QString(), + QString *selectedSuffixOut=0); + + + /** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking. + + @returns If called from the GUI thread, return a Qt::DirectConnection. + If called from another thread, return a Qt::BlockingQueuedConnection. + */ + static Qt::ConnectionType blockingGUIThreadConnection(); + }; #endif // GUIUTIL_H diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts new file mode 100644 index 0000000000..0340550960 --- /dev/null +++ b/src/qt/locale/bitcoin_ca_ES.ts @@ -0,0 +1,1963 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="ca_ES" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Sobre Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> versió</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>llibreta d'adreces</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Feu doble clic per editar la direcció o l'etiqueta</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Crear una nova adreça</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nova Adreça ...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copieu l'adreça seleccionada al porta-retalls del sistema</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Borrar</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etiqueta</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Direcció</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Xifrar la cartera</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Sincronització amb la xarxa ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Sincronització de la cadena en el progrés</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Mostra panorama general de la cartera</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Cerca a l'historial de transaccions</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Edita la llista d'adreces emmagatzemada i etiquetes</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Rebre monedes</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Sortir de l'aplicació</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Mostra informació sobre Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opcions ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Modificar les opcions de configuració per bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Ajuda</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Accions de la barra d'eines</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Al dia</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Posar-se al dia ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>L'enviament de ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Transacció enviada</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Editar Adreça</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Port obert amb &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copieu l'adreça seleccionada al porta-retalls del sistema</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Balanç:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Sense confirmar:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>El seu balanç actual</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Enviar monedes</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Balanç:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>La quantitat a pagar ha de ser major que 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Import superi el saldo de la seva compte</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Direcció</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etiqueta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Direcció</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>L'enviament de ...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts new file mode 100644 index 0000000000..fafcf54d53 --- /dev/null +++ b/src/qt/locale/bitcoin_cs.ts @@ -0,0 +1,1979 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="cs" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>O Bitcoinu</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> verze</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Copyright © 2009-2012 Vývojáři Bitcoinu + +Tohle je experimentální program. + +Šířen pod licencí MIT/X11, viz přiložený soubor license.txt nebo http://www.opensource.org/licenses/mit-license.php. + +Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v OpenSSL Toolkitu (http://www.openssl.org/) a kryptografický program od Erika Younga (eay@cryptsoft.com) a program UPnP od Thomase Bernarda.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adresář</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Tohle jsou tvé Bitcoinové adresy pro příjem plateb. Můžeš pokaždé dát každému odesílateli jinou adresu, abys věděl, kdo ti kdy kolik platil.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dvojklikem myši začneš upravovat označení adresy</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Vytvoř novou adresu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>Nová &adresa...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Zkopíruj aktuálně vybranou adresu do systémové schránky</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Zkopíruj do schránky</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Zobraz &QR kód</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této adresy</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>Po&depiš zprávu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Smaž aktuálně vybranou adresu ze seznamu. Smazány mohou být pouze adresy příjemců.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>S&maž</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopíruj adresu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopíruj označení</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Uprav</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Smaž</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exportuj data adresáře</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>CSV formát (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Chyba při exportu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Nemohu zapisovat do souboru %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Označení</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(bez označení)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Textový popisek</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Zadej platné heslo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Zadej nové heslo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Totéž heslo ještě jednou</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Zadej nové heslo k peněžence.<br/>Použij <b>alespoň 10 náhodných znaků</b> nebo <b>alespoň osm slov</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Zašifruj peněženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>K provedení této operace musíš zadat heslo k peněžence, aby se mohla odemknout.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Odemkni peněženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>K provedení této operace musíš zadat heslo k peněžence, aby se mohla dešifrovat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Dešifruj peněženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Změň heslo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Zadej staré a nové heslo k peněžence.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Potvrď zašifrování peněženky</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>VAROVÁNÍ: Pokud zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY BITCOINY</b>! +Jsi si jistý, že chceš peněženku zašifrovat?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Peněženka je zašifrována</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin se teď ukončí, aby dokončil zašifrování. Pamatuj však, že pouhé zašifrování peněženky úplně nezabraňuje krádeži tvých bitcoinů malwarem, kterým se může počítač nakazit.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Upozornění: Caps Lock je zapnutý.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Zašifrování peněženky selhalo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Zašifrování peněženky selhalo kvůli vnitřní chybě. Tvá peněženka tedy nebyla zašifrována.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Zadaná hesla nejsou shodná.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Odemčení peněženky selhalo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Nezadal jsi správné heslo pro dešifrování peněženky.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Dešifrování peněženky selhalo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Heslo k peněžence bylo v pořádku změněno.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoinová peněženka</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synchronizuji se sítí...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Provádí se synchronizace řetězce bloků</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Přehled</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Zobraz celkový přehled peněženky</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transakce</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Procházet historii transakcí</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adresář</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Uprav seznam uložených adres a jejich označení</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>Pří&jem mincí</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Zobraz seznam adres pro příjem plateb</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>P&oslání mincí</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Pošli mince na Bitcoinovou adresu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Po&depiš zprávu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Prokaž vlastnictví adresy</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Konec</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Ukončit aplikaci</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&O %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Zobraz informace o Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>O &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Zobraz informace o Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Možnosti...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Uprav nastavení Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Otevři &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Zobraz okno Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Export...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Exportovat data z tohoto panelu do souboru</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>Zaši&fruj peněženku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Zašifruj nebo dešifruj peněženku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>&Zazálohovat peněženku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>Zazálohuj peněženku na jiné místo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>Změň &heslo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Změň heslo k šifrování peněženky</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Soubor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Nastavení</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>Ná&pověda</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Panel s listy</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Panel akcí</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktivní spojení do Bitcoinové sítě</numerusform><numerusform>%n aktivní spojení do Bitcoinové sítě</numerusform><numerusform>%n aktivních spojení do Bitcoinové sítě</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Staženo %1 z %2 bloků transakční historie.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Staženo %1 bloků transakční historie.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>před vteřinou</numerusform><numerusform>před %n vteřinami</numerusform><numerusform>před %n vteřinami</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>před minutou</numerusform><numerusform>před %n minutami</numerusform><numerusform>před %n minutami</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>před hodinou</numerusform><numerusform>před %n hodinami</numerusform><numerusform>před %n hodinami</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>včera</numerusform><numerusform>před %n dny</numerusform><numerusform>před %n dny</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>aktuální</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Stahuji...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Poslední stažený blok byl vygenerován %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Tahle transakce přesahuje velikostní limit. I tak ji ale můžeš poslat, pokud za ni zaplatíš poplatek %1, který půjde uzlům, které tvou transakci zpracují, a navíc tak podpoříš síť. Chceš zaplatit poplatek?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Posílám...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Odeslané transakce</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Příchozí transakce</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Datum: %1 +Částka: %2 +Typ: %3 +Adresa: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Peněženka je <b>zašifrovaná</b> a momentálně <b>odemčená</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Peněženka je <b>zašifrovaná</b> a momentálně <b>zamčená</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Záloha peněženky</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Data peněženky (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>Zálohování selhalo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Při ukládání peněženky na nové místo se přihodila nějaká chyba.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Jednotka pro částky: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Zvol výchozí podjednotku, která se bude zobrazovat v programu a při posílání mincí</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Ukazovat adresy ve výpisu transakcí</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Uprav adresu</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Označení</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Označení spojené s tímto záznamem v adresáři</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresa</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Adresa spojená s tímto záznamem v adresáři. Lze upravovat jen pro odesílací adresy.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nová přijímací adresa</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nová odesílací adresa</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Uprav přijímací adresu</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Uprav odesílací adresu</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Zadaná adresa "%1" už v adresáři je.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Zadaná adresa "%1" není platná Bitcoinová adresa.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Nemohu odemknout peněženku.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Nepodařilo se mi vygenerovat nový klíč.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Spustit Bitcoin při startu systému</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automaticky spustí Bitcoin po zapnutí počítače</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimalizovávat do ikony v panelu</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Po minimalizaci okna zobrazí pouze ikonu v panelu</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Namapovat port přes &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automaticky otevře potřebný port na routeru. Tohle funguje jen za předpokladu, že tvůj router podporuje UPnP a že je UPnP povolené.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>&Zavřením minimalizovat</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Zavřením se aplikace minimalizuje. Pokud je tato volba zaškrtnuta, tak se aplikace ukončí pouze zvolením Konec v menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Připojit přes SOCKS4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Připojí se do Bitcoinové sítě přes SOCKS4 proxy (např. když se připojuje přes Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>&IP adresa proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP adresa proxy (např. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>P&ort: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port proxy (např. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Dobrovolný transakční poplatek za každý započatý kB dopomáhá k rychlému zpracování tvých transakcí. Většina transakcí má do 1 kB. Doporučená výše poplatku je 0.01.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Platit &transakční poplatek</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Dobrovolný transakční poplatek za každý započatý kB dopomáhá k rychlému zpracování tvých transakcí. Většina transakcí má do 1 kB. Doporučená výše poplatku je 0.01.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Zpráva</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Podepsáním zprávy svými adresami můžeš prokázat, že je skutečně vlastníš. Buď opatrný a nepodepisuj nic vágního; například při phishingových útocích můžeš být lákán, abys něco takového podepsal. Podepisuj pouze zcela úplná a detailní prohlášení, se kterými souhlasíš.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Tvá adresa (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Vyber adresu z adresáře</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Vlož adresu ze schránky</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+V</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Sem vepiš zprávu, kterou chceš podepsat</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Kliknutím na "Podepiš zprávu" získáš podpis</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této adresy</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Podepiš zprávu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Zkopíruj podpis do systémové schránky</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Zkopíruj do schránky</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Chyba při podepisování</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 není platná adresa.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Soukromý klíč pro %1 není dostupný.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Podepisování selhalo</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Hlavní</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Zobrazení</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Možnosti</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Formulář</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Stav účtu:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Počet transakcí:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Nepotvrzeno:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Peněženka</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Poslední transakce</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Aktuální stav tvého účtu</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Celkem z transakcí, které ještě nejsou potvrzené a které se ještě nezapočítávají do celkového stavu účtu</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Celkový počet transakcí v peněžence</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR kód</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Požadovat platbu</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Částka:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Označení:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Zpráva:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Ulož jako...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Ulož obrázek...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG obrázky (*.png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Pošli mince</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Pošli více příjemcům naráz</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>Při&dej příjemce...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Smaž všechny transakční formuláře</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Všechno smaž</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Stav účtu:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Potvrď odeslání</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Pošli</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> pro %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Potvrď odeslání mincí</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Jsi si jistý, že chceš poslat %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> a </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Adresa příjemce je neplatná, překontroluj ji prosím.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Odesílaná částka musí být větší než 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Částka překračuje stav účtu</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Celková částka při připočítání poplatku %1 překročí stav účtu</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Zaznamenána duplikovaná adresa; každá adresa může být v odesílané platbě pouze jednou</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Chyba: Vytvoření transakce selhalo </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Chyba Transakce byla odmítnuta. Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Formulář</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Čá&stka:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>&Komu:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Zadej označení této adresy; obojí se ti pak uloží do adresáře</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Označení:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa příjemce (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Vyber adresu z adresáře</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Vlož adresu ze schránky</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Smaž tohoto příjemce</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Zadej Bitcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Otevřeno pro %1 bloků</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Otřevřeno dokud %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/nepotvrzeno</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 potvrzení</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Stav:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, ještě nebylo rozesláno</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, rozesláno přes %1 uzel</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, rozesláno přes %1 uzlů</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Datum:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Zdroj:</b> Vygenerováno<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Od:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>neznámo</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Pro:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (tvoje, označení: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (tvoje)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Příjem:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 dozraje po %2 blocích)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(neakceptováno)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Výdaj:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Transakční poplatek:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Čistá částka:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Zpráva:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Komentář:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID transakce:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Vygenerované mince musí čekat 120 bloků, než mohou být utraceny. Když jsi vygeneroval tenhle blok, tak byl rozposlán do sítě, aby byl přidán do řetězce bloků. Pokud se mu nepodaří dostat se do řetězce, změní se na "neakceptovaný" a nepůjde utratit. Občas se to může stát, když jiný uzel vygeneruje blok zhruba ve stejném okamžiku jako ty.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Detaily transakce</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Toto okno zobrazuje detailní popis transakce</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Částka</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Otevřeno pro 1 blok</numerusform><numerusform>Otevřeno pro %n bloky</numerusform><numerusform>Otevřeno pro %n bloků</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Otřevřeno dokud %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 potvrzení)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Nepotvrzeno (%1 z %2 potvrzení)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Potvrzeno (%1 potvrzení)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Vytěžené mince budou použitelné po jednom bloku</numerusform><numerusform>Vytěžené mince budou použitelné po %n blocích</numerusform><numerusform>Vytěžené mince budou použitelné po %n blocích</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Tento blok nedostal žádný jiný uzel a pravděpodobně nebude akceptován!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Vygenerováno, ale neakceptováno</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Přijato do</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Přijato od</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Posláno na</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Platba sama sobě</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Vytěženo</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Stav transakce. Najetím myši na toto políčko si zobrazíš počet potvrzení.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Datum a čas přijetí transakce.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Druh transakce.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Cílová adresa transakce.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Částka odečtená z nebo přičtená k účtu.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Vše</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Dnes</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Tento týden</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Tento měsíc</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Minulý měsíc</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Letos</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Rozsah...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Přijato</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Posláno</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Sám sobě</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Vytěženo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Ostatní</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Zadej adresu nebo označení pro její vyhledání</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Minimální částka</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopíruj adresu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopíruj její označení</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopíruj částku</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Uprav označení</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Zobraz detaily....</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Exportuj transakční data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>CSV formát (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Potvrzeno</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Označení</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Částka</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Chyba při exportu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Nemohu zapisovat do souboru %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Rozsah:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>až</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Posílám...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Verze Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Užití:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Poslat příkaz pro -server nebo bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Výpis příkazů</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Získat nápovědu pro příkaz</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Možnosti:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Konfigurační soubor (výchozí: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>PID soubor (výchozí: bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generovat mince</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Negenerovat mince</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Startovat minimalizovaně</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Adresář pro data</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Zadej časový limit spojení (v milisekundách)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Připojovat se přes socks4 proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Povolit DNS dotazy pro addnode (přidání uzlu) a connect (připojení)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Čekat na spojení na <portu> (výchozí: 8333 nebo testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Povol nejvýše <n> připojení k uzlům (výchozí: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Přidat uzel, ke kterému se připojit</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Připojovat se pouze k udanému uzlu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Nepřijímat připojení zvenčí</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Nenačítat seznam uzlů z DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Práh pro odpojování nesprávně se chovajících uzlů (výchozí: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Doba ve vteřinách, po kterou se nebudou moci nesprávně se chovající uzly znovu připojit (výchozí: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximální velikost přijímacího bufferu pro každé spojení, <n>*1000 bytů (výchozí: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximální velikost odesílacího bufferu pro každé spojení, <n>*1000 bytů (výchozí: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Nesnažit se použít UPnP k namapování naslouchacího portu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Snažit se použít UPnP k namapování naslouchacího portu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Poplatek za kB, který se přidá ke každé odeslané transakci</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Akceptovat příkazy z příkazové řádky a přes JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Běžet na pozadí jako démon a akceptovat příkazy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Použít testovací síť (testnet)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Tisknout speciální ladící informace</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Připojit před ladící výstup časové razítko</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Posílat stopovací/ladící informace do konzole místo do souboru debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Posílat stopovací/ladící informace do debuggeru</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Uživatelské jméno pro JSON-RPC spojení</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Heslo pro JSON-RPC spojení</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Čekat na JSON-RPC spojení na <portu> (výchozí: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Povolit JSON-RPC spojení ze specifikované IP adresy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Posílat příkazy uzlu běžícím na <ip> (výchozí: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Nastavit zásobník klíčů na velikost <n> (výchozí: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Přeskenovat řetězec bloků na chybějící transakce tvé pěněženky</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +Možnosti SSL: (viz instrukce nastavení SSL v Bitcoin Wiki)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Použít OpenSSL (https) pro JSON-RPC spojení</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Soubor se serverovým certifikátem (výchozí: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Soubor se serverovým soukromým klíčem (výchozí: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Akceptovatelné šifry (výchozí: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Tato nápověda</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Nedaří se mi získat zámek na datový adresář %s. Bitcoin pravděpodobně už jednou běží.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Načítám adresy...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Chyba při načítání addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Chyba při načítání blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Chyba při načítání wallet.dat: peněženka je poškozená</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Soubor s peněženkou potřeboval přepsat: restartuj Bitcoin, aby se operace dokončila</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Chyba při načítání wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Načítám index bloků...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Načítám peněženku...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Přeskenovávám...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Načítání dokončeno</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Neplatná -proxy adresa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Neplatná částka pro -paytxfee=<částka></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Upozornění: -paytxfee je nastaveno velmi vysoko. Toto je transakční poplatek, který zaplatíš za každou poslanou transakci.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Chyba: Selhalo CreateThread(StartNode)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Upozornění: Na disku je málo místa </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Nedaří se mi připojit na port %d na tomhle počítači. Bitcoin už pravděpodobně jednou běží.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Upozornění: Zkontroluj, že máš v počítači správně nastavený datum a čas. Pokud jsou nastaveny špatně, Bitcoin nebude fungovat správně.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 74928d32c5..1a7f916ae0 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -14,20 +14,14 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Bitcoin Developers - -Dette er eksperimentel software. - -Distribueret under MIT/X11 softwarelicensen. Se den vedlagte fil, license.txt, eller http://www.opensource.org/licenses/mit-license.php. - -Dette produkt indeholder software udviklet af OpenSSL Project til brug i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk software skrevet af Eric Young (eay@cryptsoft.com) og UPnP software skrevet af Thomas Bernhard.</translation> + <translation type="unfinished"/> </message> </context> <context> @@ -40,12 +34,12 @@ Dette produkt indeholder software udviklet af OpenSSL Project til brug i OpenSSL <message> <location filename="../forms/addressbookpage.ui" line="20"/> <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> - <translation>Dette er dine Bitcoinadresser for at modtage betalinger. Du kan give en forskellig adresse til hver afsender, så du kan holde styr på hvem der betaler dig.</translation> + <translation>Dette er dine Bitcoinadresser til at modtage betalinger med. Du kan give en forskellig adresse til hver afsender, så du kan holde styr på hvem der betaler dig.</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="33"/> <source>Double-click to edit address or label</source> - <translation>Dobbeltklik for at redigere adresse eller etiket</translation> + <translation>Dobbeltklik for at redigere adresse eller mærkat</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="57"/> @@ -69,31 +63,66 @@ Dette produkt indeholder software udviklet af OpenSSL Project til brug i OpenSSL </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>Slet den valgte adresse fra listen. Kun adresser brugt til afsendelse kan slettes.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Slet</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopier adresse</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopier etiket</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Eksporter Adressekartoteketsdata</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Kommasepareret fil (*. csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Fejl under eksport</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>Kunne ikke skrive til filen %1.</translation> </message> @@ -125,125 +154,132 @@ Dette produkt indeholder software udviklet af OpenSSL Project til brug i OpenSSL </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation>TekstEtiket</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>Indtast adgangskode</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Ny adgangskode</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Gentag ny adgangskode</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation>Indtast den nye adgangskode til tegnebogen.<br/>Brug venligst en adgangskode på <b>10 eller flere tilfældige tegn</b>, eller <b>otte eller flere ord</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Krypter tegnebog</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Denne funktion har brug for din tegnebogs kodeord for at låse tegnebogen op.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Lås tegnebog op</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Denne funktion har brug for din tegnebogs kodeord for at dekryptere tegnebogen.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Dekryptér tegnebog</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>Skift adgangskode</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>Indtast den gamle og nye adgangskode til tegnebogen.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>Bekræft tegnebogskryptering</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>ADVARSEL: Hvis du krypterer din tegnebog og mister dit kodeord vil du <b>miste alle dine BITCOINS</b>! Er du sikker på at du ønsker at kryptere din tegnebog?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Tegnebog krypteret</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Husk, at kryptere din tegnebog vil ikke fuldt ud beskytte dine bitcoins mod at blive stjålet af malware på din computer.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Tegnebogskryptering mislykkedes</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>Tegnebogskryptering mislykkedes på grund af en intern fejl. Din tegnebog blev ikke krypteret.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>De angivne kodeord stemmer ikke overens.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Tegnebogsoplåsning mislykkedes</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>Det angivne kodeord for tegnebogsdekrypteringen er forkert.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Tegnebogsdekryptering mislykkedes</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>Tegnebogskodeord blev ændret.</translation> </message> @@ -251,247 +287,278 @@ Er du sikker på at du ønsker at kryptere din tegnebog?</translation> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Bitcoin Tegnebog</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Synkroniserer med netværk ...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>Blokkæde synkronisering i gang</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Oversigt</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Vis generel oversigt over tegnebog</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transaktioner</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Gennemse transaktionshistorik</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Adressebog</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>Rediger listen over gemte adresser og etiketter</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>&Modtag coins</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Vis listen over adresser for at modtage betalinger</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>&Send coins</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Send coins til en bitcoinadresse</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> - <source>E&xit</source> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Luk</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Afslut program</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>&Om %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Vis oplysninger om Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>&Indstillinger ...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>Rediger konfigurationsindstillinger af bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>Åbn &Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Vis Bitcoinvinduet</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Eksporter...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Eksportér den aktuelle visning til en fil</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>&Kryptér tegnebog</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Kryptér eller dekryptér tegnebog</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation>&Skift adgangskode</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>Skift kodeord anvendt til tegnebogskryptering</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Fil</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Indstillinger</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Hjælp</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Faneværktøjslinje</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Handlingsværktøjslinje</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnet]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n aktiv(e) forbindelse(r) til Bitcoinnetværket</numerusform><numerusform>%n aktiv(e) forbindelse(r) til Bitcoinnetværket</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>Downloadet %1 af %2 blokke af transaktionshistorie.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>Downloadet %1 blokke af transaktionshistorie.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>%n sekund(er) siden</numerusform><numerusform>%n sekund(er) siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>%n minut(ter) siden</numerusform><numerusform>%n minut(ter) siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>%n time(r) siden</numerusform><numerusform>%n time(r) siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>%n dag(e) siden</numerusform><numerusform>%n dag(e) siden</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Opdateret</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Indhenter...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>Sidst modtagne blok blev genereret %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Denne transaktion er over størrelsesbegrænsningen. Du kan stadig sende den for et gebyr på %1 som går til de noder der behandler din transaktion, og som hjælper med at støtte netværket. Ønsker du at betale gebyret?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Sender...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Afsendt transaktion</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Indgående transaktion</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -504,15 +571,35 @@ Adresse: %4 </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>Tegnebog er <b>krypteret</b> og i øjeblikket <b>ulåst</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>Tegnebog er <b>krypteret</b> og i øjeblikket <b>låst</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -580,22 +667,22 @@ Adresse: %4 <translation>Rediger afsendelsesadresse</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>Den indtastede adresse "%1" er allerede i adressebogen.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>Den indtastede adresse "%1" er ikke en gyldig bitcoinadresse.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>Kunne ikke låse tegnebog op.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>Ny nøglegenerering mislykkedes.</translation> </message> @@ -674,8 +761,8 @@ Adresse: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Valgfri transaktionsgebyr pr. KB, der hjælper dine transaktioner med at blive behandlet hurtigt. De fleste transaktioner er på 1KB. Gebyr på 0.01 anbefales.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -684,8 +771,98 @@ Adresse: %4 </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Valgfri transaktionsgebyr pr. KB, der hjælper dine transaktioner med at blive behandlet hurtigt. De fleste transaktioner er på 1KB. Gebyr på 0.01 anbefales.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresse som betalingen skal sendes til (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Vælg adresse fra adressebog</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Indsæt adresse fra udklipsholderen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopier den valgte adresse til systemets udklipsholder</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopier til Udklipsholder</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> </message> </context> <context> @@ -753,7 +930,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> </message> <message> @@ -764,7 +941,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../overviewpage.cpp" line="103"/> <source>Your current balance</source> - <translation>Din aktuelle saldo</translation> + <translation>Din nuværende saldo</translation> </message> <message> <location filename="../overviewpage.cpp" line="108"/> @@ -778,16 +955,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Besked:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Send Coins</translation> </message> @@ -803,81 +1033,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>Ryd alle</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Saldo:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Bekræft afsendelsen</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Afsend</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> til %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Bekræft afsendelse af coins</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Er du sikker på at du vil sende %1?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation> og </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>Modtagerens adresse er ikke gyldig. Tjek venligst adressen igen.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>Beløbet til betaling skal være større end 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>Beløbet overstiger din saldo</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>Totalen overstiger din saldo når %1 transaktionsgebyr er inkluderet</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Duplikeret adresse fundet. Du kan kun sende til hver adresse en gang pr. afsendelse.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Fejl: Oprettelse af transaktionen mislykkedes </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Fejl: Transaktionen blev afvist. Dette kan ske hvis nogle af dine coins i din tegnebog allerede var brugt, som hvis du brugte en kopi af wallet.dat og dine coins er blevet brugt i kopien, men ikke er markeret som brugt her.</translation> </message> @@ -917,7 +1152,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation>Vælg adresse fra adressebog</translation> </message> <message> @@ -949,135 +1184,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Åben for %1 blokke</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Åben indtil %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/offline?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/ubekræftet</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 bekræftelser</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Status:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, er ikke blevet transmitteret endnu</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> <translation>, transmitteret via %1 node</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> <translation>, transmitteret via %1 noder</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Dato:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Kilde:</b> Genereret<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>Fra:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>ukendt</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>Til:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation> (din, etiket:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (din)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Kredit:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> <translation>(%1 modnes i %2 blokke mere)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(ikke accepteret)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Debet:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Transaktionsgebyr:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Nettobeløb:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Besked:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Kommentar:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation>Genererede coins skal vente 120 blokke, før de kan blive brugt. Da du genererede denne blok blev det transmitteret til netværket, for at blive føjet til blokkæden. Hvis det mislykkes at komme ind i kæden, vil den skifte til "ikke godkendt", og ikke blive kunne bruges. Dette kan lejlighedsvis ske, hvis en anden node genererer en blok inden for få sekunder af din.</translation> </message> @@ -1164,56 +1404,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Modtaget fra IP</translation> + <source>Received from</source> + <translation type="unfinished"/> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Sendt til</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Sendt til IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>Betaling til dig selv</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Minerede</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(n/a)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Transactionsstatus. Hold musen over dette felt for at vise antallet af bekræftelser.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Dato og tid for at transaktionen blev modtaget.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Type af transaktion.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Destinationsadresse for transaktion.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Beløb fjernet eller tilføjet balance.</translation> </message> @@ -1292,16 +1527,21 @@ p, li { white-space: pre-wrap; } <translation>Min. beløb</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Kopier adresse</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Kopier etiket</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Rediger etiket</translation> @@ -1312,67 +1552,67 @@ p, li { white-space: pre-wrap; } <translation>Vis detaljer...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Eksportér Transaktionsdata</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Kommasepareret fil (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Bekræftet</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Dato</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Type</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Etiket</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Beløb</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Fejl under eksport</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>Kunne ikke skrive til filen %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Interval:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>til</translation> </message> @@ -1380,7 +1620,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Sender...</translation> </message> @@ -1399,935 +1639,366 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation>Send kommando til -server eller bitcoind </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation>Liste over kommandoer </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>Få hjælp til en kommando </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>Indstillinger: </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation>Angiv konfigurationsfil (standard: bitcoin.conf) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation>Angiv pid-fil (default: bitcoind.pid) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation>Generér coins </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation>Generér ikke coins </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>Start minimeret </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation>Angiv databibliotek </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation>Angiv tilslutningstimeout (i millisekunder) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation>Tilslut via SOCKS4 proxy </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>Tillad DNS-opslag for addnode og connect </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> <translation>Tilføj en node til at forbinde til </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> <translation>Tilslut kun til den angivne node </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> <translation>Acceptér ikke forbindelser udefra </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> <translation>Forsøg ikke at bruge UPnP til at konfigurere den lyttende port</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> <translation>Forsøg at bruge UPnP til at kofnigurere den lyttende port</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Gebyr pr. KB, som skal tilføjes til transaktioner du sender -</translation> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> <translation>Accepter kommandolinje- og JSON-RPC-kommandoer </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> <translation>Kør i baggrunden som en service, og acceptér kommandoer </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> <translation>Brug test-netværket </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> <translation>Brugernavn til JSON-RPC-forbindelser </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> <translation>Password til JSON-RPC-forbindelser </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation>Lyt til JSON-RPC-forbindelser på <port> (standard: 8332) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> <translation>Tillad JSON-RPC-forbindelser fra bestemt IP-adresse </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation>Send kommandoer til node, der kører på <ip> (standard: 127.0.0.1) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation>Sæt nøglepoolstørrelse til <n> (standard: 100) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> <translation>Gennemsøg blokkæden for manglende tegnebogstransaktioner </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation> SSL-indstillinger: (se Bitcoin Wiki for SSL opsætningsinstruktioner)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation>Brug OpenSSL (https) for JSON-RPC-forbindelser </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> <translation>Servercertifikat-fil (standard: server.cert) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> <translation>Server private nøgle (standard: server.pem) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation>Acceptabele ciphers (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> <translation>Denne hjælpebesked </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="57"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation>Kan låse data-biblioteket %s. Bitcoin kører sikkert allerede.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> <source>Loading addresses...</source> <translation>Indlæser adresser...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Fejl ved indlæsning af addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Indlæser blok-indeks...</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Fejl ved indlæsning af blkindex.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Indlæser tegnebog...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Fejl ved indlæsning af wallet.dat: Tegnebog ødelagt -</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af Bitcoin -</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Fejl ved indlæsning af wallet.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Indlæser blok-indeks...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Indlæser tegnebog...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> <source>Rescanning...</source> <translation>Genindlæser...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="70"/> <source>Done loading</source> <translation>Indlæsning gennemført</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="58"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>Invalid -proxy address</source> <translation>Ugyldig -proxy adresse</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="59"/> + <location filename="../bitcoinstrings.cpp" line="72"/> <source>Invalid amount for -paytxfee=<amount></source> <translation>Ugyldigt beløb for -paytxfee=<amount></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation>Advarsel:-paytxfee er sat meget højt. Dette er det gebyr du vil betale, hvis du sender en transaktion.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="76"/> <source>Error: CreateThread(StartNode) failed</source> <translation>Fejl: CreateThread(StartNode) mislykkedes</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Warning: Disk space is low </source> <translation>Advarsel: Diskplads er lav </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation>Kunne ikke binde sig til port %d på denne computer. Bitcoin kører sikkert allerede.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Denne transaktion er over størrelsesbegrænsningen. Du kan stadig sende den for et gebyr på %s som går til de noder der behandler din transaktion, og som hjælper med at støtte netværket. Ønsker du at betale gebyret?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Indtast den nuværende adgangskode til tegnebogen.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Adgangskode</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Angiv venligst det nuværende kodeord til dekryptering af tegnebog.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>Det angivne kodeord for tegnebogsdekrypteringen er forkert.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Status</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Dato</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Beskrivelse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Kredit</translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Åben for %d blokke</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Åben indtil %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/offline?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/ubekræftet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d bekræftelser</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Genereret</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Genereret (%s modnes om %d blokke)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Genereret - Advarsel: Denne blok blev ikke modtaget af nogen andre noder, og vil formentlig ikke blive accepteret!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Genereret (ikke accepteret)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>Fra: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Modtaget med: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Betaling til dig selv</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Til: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> Generering</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(ikke tilsluttet)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d forbindelser %d blokke %d transaktioner</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>Tegnebog er allerede krypteret.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Indtast den nye adgangskode til tegnebogen. -Brug venligst en adgangskode på 10 eller flere tilfældige tegn, eller otte eller flere ord.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Fejl: Den angivne kodeord var for kort.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>ADVARSEL: Hvis du krypterer din tegnebog og mister dit kodeord, vil du miste alle dine BITCOINS! -Er du sikker på at du ønsker at kryptere din tegnebog?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Angiv venligst dit nye tegneborgskodeord igen.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Fejl: de angive kodeord stemte ikke overens.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Tegnebogskryptering mislykkedes.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Tegnebog Krypteret. -Husk at kryptere din tegnebog ikke fuldt ud kan beskytte din bitcoins mod at blive stjålet af malware inficerer din computer.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="213"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> - <translation type="unfinished"/> + <translation>Advarsel: Undersøg venligst at din computers dato og klokkeslet er korrekt indstillet. Hvis der er fejl i disse vil Bitcoin ikke fungere korrekt.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> + <translation>beta</translation> </message> </context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 97eb5cb642..42cb17d64c 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -14,20 +14,20 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Bitcoin Entwickler + <translation>Copyright © 2009-2012 Bitcoin Entwickler Dies ist experimentelle Software. -Veröffentlicht unter der MIT/X11 Software-Lizenz. Sie können diese in der beiligenden Datei license.txt oder unter http://www.opensource.org/licenses/mit-license.php nachlesen. +Veröffentlicht unter der MIT/X11 Software-Lizenz, siehe beiligende Datei license.txt oder http://www.opensource.org/licenses/mit-license.php. -Dieses Produkt enthält Software, welche vom OpenSSL Projekt zur Verwendung im OpenSSL Toolkit (http://www.openssl.org/) entwickelt wurde, kryptographische Software von Eric Young (eay@cryptsoft.com) und UPnP Software von Thomas-Bernard.</translation> +Dieses Produkt enthält Software, die vom OpenSSL Projekt zur Verwendung im OpenSSL Toolkit (http://www.openssl.org/) entwickelt wurde, sowie kryptographische Software geschrieben von Eric Young (eay@cryptsoft.com) und UPnP Software geschrieben von Thomas Bernard.</translation> </message> </context> <context> @@ -40,22 +40,22 @@ Dieses Produkt enthält Software, welche vom OpenSSL Projekt zur Verwendung im O <message> <location filename="../forms/addressbookpage.ui" line="20"/> <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> - <translation>Dies sind ihre Bitcoin-Adressen zum Empfangen von Zahlungen. Um Ihre Zahlungen zurückverfolgen zu können, schlagen wir vor, jedem Sender eine andere Empfangsaddresse mitzuteilen.</translation> + <translation>Dies sind Ihre Bitcoin-Adressen zum Empfangen von Zahlungen. Es steht Ihnen frei, jedem Absender eine andere mitzuteilen, um einen besseren Überblick über eingehende Zahlungen zu erhalten.</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="33"/> <source>Double-click to edit address or label</source> - <translation>Doppelklick zum Ändern der Adresse oder der Bezeichnung</translation> + <translation>Doppelklicken, um die Adresse oder die Bezeichnung zu bearbeiten</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="57"/> <source>Create a new address</source> - <translation>Neue Adresse erstellen</translation> + <translation>Eine neue Adresse erstellen</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="60"/> <source>&New Address...</source> - <translation>&Neue Adresse...</translation> + <translation>&Neue Adresse</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="71"/> @@ -65,37 +65,72 @@ Dieses Produkt enthält Software, welche vom OpenSSL Projekt zur Verwendung im O <message> <location filename="../forms/addressbookpage.ui" line="74"/> <source>&Copy to Clipboard</source> - <translation>&In die Zwischenablage kopieren</translation> + <translation>In die Zwischenablage &kopieren</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>&QR-Code anzeigen</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Eine Nachricht signieren, um den Besitz einer Adresse zu beweisen</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>Nachricht &signieren</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> - <translation>Die ausgewählte Adresse aus der Liste entfernen. Sie können nur ausgehende Adressen entfernen.</translation> + <translation>Die ausgewählte Adresse aus der Liste entfernen. Sie können nur Zahlungsadressen entfernen.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Adresse kopieren</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Bezeichnung kopieren</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Bearbeiten</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Löschen</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Adressbuch exportieren</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Kommagetrennte Datei (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Fehler beim Exportieren</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> - <translation>Konnte Datei %1 nicht zum Schreiben öffnen.</translation> + <translation>Konnte nicht in Datei %1 schreiben.</translation> </message> </context> <context> @@ -125,125 +160,131 @@ Dieses Produkt enthält Software, welche vom OpenSSL Projekt zur Verwendung im O </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> - <translation>Text Bezeichnung</translation> + <translation>Textbezeichnung</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>Passphrase eingeben</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Neue Passphrase</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Neue Passphrase wiederholen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> - <translation>Geben Sie die neue Passphrase für die Brieftasche ein.<br/>Bitte benutzen Sie eine Passphrase von <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörter</b>.</translation> + <translation>Geben Sie die neue Passphrase für die Brieftasche ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>10 oder mehr zufälligen Zeichen</b> oder <b>8 oder mehr Wörtern</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Brieftasche verschlüsseln</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Dieser Vorgang benötigt Ihre Passphrase um die Brieftasche zu entsperren.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Brieftasche entsperren</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Dieser Vorgang benötigt Ihre Passphrase um die Brieftasche zu entschlüsseln.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Brieftasche entschlüsseln</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>Passphrase ändern</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>Geben Sie die alte und die neue Passphrase der Brieftasche ein.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> - <translation>Bestätige die Verschlüsselung der Brieftasche</translation> + <translation>Verschlüsselung der Brieftasche bestätigen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> - <translation>WARNUNG: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>ALLE IHRE BITCOINS VERLIEREN</b>! -Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</translation> + <translation>WARNUNG: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>ALLE IHRE BITCOINS VERLIEREN</b>!<br><br>Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Brieftasche verschlüsselt</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Beachten Sie, dass das Verschlüsseln Ihrer Brieftasche nicht komplett vor Diebstahl Ihrer Bitcoins durch Malware schützt, die Ihren Computer infiziert hat.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Verschlüsselung Ihrer Brieftasche nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadsoftware schützt, die Ihren Computer befällt.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Warnung: Die Feststelltaste ist aktiviert.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Verschlüsselung der Brieftasche fehlgeschlagen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> - <translation>Die Verschlüsselung der Brieftasche ist wegen eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt.</translation> + <translation>Die Verschlüsselung der Brieftasche ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>Die eingegebenen Passphrasen stimmen nicht überein.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Entsperrung der Brieftasche fehlgeschlagen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>Die eingegebene Passphrase zum Entschlüsseln der Brieftasche war nicht korrekt.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Entschlüsselung der Brieftasche fehlgeschlagen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>Die Passphrase der Brieftasche wurde erfolgreich geändert.</translation> </message> @@ -251,247 +292,278 @@ Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</transl <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Bitcoin-Brieftasche</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Synchronisiere mit Netzwerk...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> - <translation>Synchronisiere mit der Blockkette</translation> + <translation>Synchronisation der Blockkette wird durchgeführt</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Übersicht</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> - <translation>Zeige allgemeine Übersicht der Brieftasche</translation> + <translation>Allgemeine Übersicht der Brieftasche anzeigen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transaktionen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Transaktionsverlauf durchsehen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Adressbuch</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> - <translation>Gespeicherte Adressen und Bezeichnungen bearbeiten</translation> + <translation>Liste der gespeicherten Zahlungsadressen und Bezeichnungen bearbeiten</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> - <translation>&Bitcoins empfangen</translation> + <translation>Bitcoins &empfangen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> - <translation>Liste der Adressen zum Empfangen von Zahlungen anzeigen</translation> + <translation>Liste der Empfangsadressen anzeigen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> - <translation>&Bitcoins überweisen</translation> + <translation>Bitcoins &überweisen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Bitcoins an eine Bitcoin-Adresse überweisen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>&Nachricht signieren...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Beweisen Sie die Kontrolle einer Adresse</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>&Beenden</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Anwendung beenden</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>&Über %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Informationen über Bitcoin anzeigen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Über &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Informationen über Qt anzeigen</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> - <translation>&Einstellungen...</translation> + <translation>&Erweiterte Einstellungen...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> - <translation>Einstellungen für Bitcoin ändern</translation> + <translation>Erweiterte Bitcoin-Einstellungen ändern</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>&Bitcoin öffnen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Bitcoin-Fenster anzeigen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> - <translation>&Exportieren...</translation> + <translation>&Exportieren nach...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Aktuelle Ansicht in eine Datei exportieren</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Daten der aktuellen Ansicht in eine Datei exportieren</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> - <translation>Brieftasche &verschlüsseln</translation> + <translation>Brieftasche &verschlüsseln...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Brieftasche ent- oder verschlüsseln</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>Brieftasche &sichern...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>Eine Sicherungskopie der Brieftasche erstellen und abspeichern</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> - <translation>Passphrase &ändern</translation> + <translation>Passphrase &ändern...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>Ändert die Passphrase, die für die Verschlüsselung der Brieftasche benutzt wird</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Datei</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Einstellungen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Registerkarten-Leiste</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Aktionen-Werkzeugleiste</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnet]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n aktive Verbindung zum Bitcoin-Netzwerk</numerusform><numerusform>%n aktive Verbindungen zum Bitcoin-Netzwerk</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> - <translation>%1 von %2 Blöcken des Transaktionsverlauf heruntergeladen.</translation> + <translation>%1 von %2 Blöcken des Transaktionsverlaufs heruntergeladen.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>%1 Blöcke des Transaktionsverlaufs heruntergeladen.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>vor %n Sekunde</numerusform><numerusform>vor %n Sekunden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>vor %n Minute</numerusform><numerusform>vor %n Minuten</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>vor %n Stunde</numerusform><numerusform>vor %n Stunden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>vor %n Tag</numerusform><numerusform>vor %n Tagen</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Auf aktuellem Stand</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Hole auf...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> - <translation>Der letzte empfangene Block wurde am %1 generiert.</translation> + <translation>Der letzte empfangene Block wurde %1 generiert.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Die Transaktion übersteigt das Größenlimit. Sie können sie jedoch senden, wenn Sie einen zusätzlichen Betrag von %1 zahlen. Dieser geht an die Knoten, die Ihre Transaktion bearbeiten und unterstützt das Bitcoin-Netzwerk. Möchten Sie die Gebühr bezahlen?</translation> + <translation>Die Transaktion übersteigt das Größenlimit. Sie können sie trotzdem senden, wenn Sie eine zusätzliche Transaktionsgebühr in Höhe von %1 zahlen. Diese wird an die Knoten verteilt, die Ihre Transaktion bearbeiten und unterstützt damit das Bitcoin-Netzwerk.<br><br>Möchten Sie die Gebühr bezahlen?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> - <translation>Senden...</translation> + <translation>Transaktionsgebühr bestätigen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Gesendete Transaktion</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> - <translation>Empfangene Transaktion</translation> + <translation>Eingehende Transaktion</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -503,14 +575,34 @@ Typ: %3 Adresse: %4</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> - <translation>Brieftasche ist <b>verschlüsselt</b> und momentan <b>entsperrt</b></translation> + <translation>Brieftasche ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> - <translation>Brieftasche ist <b>verschlüsselt</b> und momentan <b>gesperrt</b></translation> + <translation>Brieftasche ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Brieftasche sichern</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Brieftaschen-Datei (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>Sicherung der Brieftasche fehlgeschlagen</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Fehler beim abspeichern der Sicherungskopie der Brieftasche.</translation> </message> </context> <context> @@ -523,7 +615,7 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="274"/> <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> - <translation>Wählen Sie die Standard-Unterteilungseinheit, die in der Benutzeroberfläche und beim Senden von Bitcoins angezeigt werden soll</translation> + <translation>Wählen Sie die Standard-Untereinheit, die in der Benutzeroberfläche und beim Überweisen von Bitcoins angezeigt werden soll</translation> </message> <message> <location filename="../optionsdialog.cpp" line="281"/> @@ -579,24 +671,24 @@ Adresse: %4</translation> <translation>Zahlungsadresse bearbeiten</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>Die eingegebene Adresse "%1" ist keine gültige Bitcoin-Adresse.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>Die Brieftasche konnte nicht entsperrt werden.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> - <translation>Neue Schlüsselgenerierung fehlgeschlagen.</translation> + <translation>Generierung eines neuen Schlüssels fehlgeschlagen.</translation> </message> </context> <context> @@ -604,22 +696,22 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="170"/> <source>&Start Bitcoin on window system startup</source> - <translation>&Bitcoin beim Systemstart ausführen</translation> + <translation>Bitcoin beim &Systemstart ausführen</translation> </message> <message> <location filename="../optionsdialog.cpp" line="171"/> <source>Automatically start Bitcoin after the computer is turned on</source> - <translation>Bitcoin automatisch starten, wenn der Computer eingeschaltet wird</translation> + <translation>Bitcoin automatisch ausführen, wenn der Computer eingeschaltet wird</translation> </message> <message> <location filename="../optionsdialog.cpp" line="175"/> <source>&Minimize to the tray instead of the taskbar</source> - <translation>&In den Infobereich statt in die Taskleiste minimieren</translation> + <translation>In den Infobereich anstatt in die Taskleiste &minimieren</translation> </message> <message> <location filename="../optionsdialog.cpp" line="176"/> <source>Show only a tray icon after minimizing the window</source> - <translation>Nur ein Symbol im Infobereich anzeigen, wenn das Fenster minimiert wird</translation> + <translation>Nur ein Symbol im Infobereich anzeigen, nachdem das Fenster minimiert wurde</translation> </message> <message> <location filename="../optionsdialog.cpp" line="180"/> @@ -634,7 +726,7 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="185"/> <source>M&inimize on close</source> - <translation>Beim Schließen m&inimieren</translation> + <translation>Beim Schließen &minimieren</translation> </message> <message> <location filename="../optionsdialog.cpp" line="186"/> @@ -644,12 +736,12 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="190"/> <source>&Connect through SOCKS4 proxy:</source> - <translation>&Über einen SOCKS4-Proxy verbinden:</translation> + <translation>Über einen SOCKS4-Proxy &verbinden:</translation> </message> <message> <location filename="../optionsdialog.cpp" line="191"/> <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> - <translation>Über einen SOCKS4-Proxy zum Bitcoin-Netzwerk verbinden (bspw. für eine Verbindung über Tor)</translation> + <translation>Über einen SOCKS4-Proxy zum Bitcoin-Netzwerk verbinden (z.B. bei einer Verbindung über Tor)</translation> </message> <message> <location filename="../optionsdialog.cpp" line="196"/> @@ -673,8 +765,8 @@ Adresse: %4</translation> </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Zusätzliche Transaktionsgebühr pro KB, welche sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 KB groß. Eine Gebühr von 0.01 wird empfohlen.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Optionale Transaktionsgebühr pro kB, die sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. Eine Gebühr von 0.01 wird empfohlen.</translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -683,8 +775,98 @@ Adresse: %4</translation> </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Zusätzliche Transaktionsgebühr pro KB, welche sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 KB groß. Eine Gebühr von 0.01 wird empfohlen.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Optionale Transaktionsgebühr pro kB, die sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. Eine Gebühr von 0.01 wird empfohlen.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Nachricht signieren</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Sie können Nachrichten mit Ihren Adressen signieren, um den Besitz dieser Adressen zu beweisen. Bitte nutzen Sie diese Funktion mit Vorsicht und nehmen Sie sich vor Phishing-Angriffen in Acht, um nicht ungewollt etwas zu signieren, dass für Sie negative Auswirkungen haben könnte.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Die Adresse mit der die Nachricht signiert wird (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Adresse aus dem Adressbuch auswählen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Adresse aus der Zwischenablage einfügen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Zu signierende Nachricht hier eingeben</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Auf "Nachricht signieren" klicken, um die Signatur zu erhalten. Diese wird dann hier angezeigt.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Die Nachricht signieren, um den Besitz der angegebenen Adresse nachzuweisen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>Nachricht &signieren</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Aktuelle Signatur in die Zwischenablage kopieren</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>Signatur in die Zwischenablage &kopieren</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Fehler beim Signieren</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 ist keine gültige Adresse.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Privater Schlüssel für %1 ist nicht verfügbar.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Signierung der Nachricht fehlgeschlagen</translation> </message> </context> <context> @@ -692,7 +874,7 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="79"/> <source>Main</source> - <translation>Haupt</translation> + <translation>Allgemein</translation> </message> <message> <location filename="../optionsdialog.cpp" line="84"/> @@ -702,7 +884,7 @@ Adresse: %4</translation> <message> <location filename="../optionsdialog.cpp" line="104"/> <source>Options</source> - <translation>Einstellungen</translation> + <translation>Erweiterte Einstellungen</translation> </message> </context> <context> @@ -752,7 +934,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Brieftasche</span></p></body></html></translation> </message> <message> @@ -768,7 +950,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../overviewpage.cpp" line="108"/> <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> - <translation>Anzahl der Transaktionen, die noch bestätigt werden müssen und noch nicht zum aktuellen Kontostand zählen</translation> + <translation>Betrag aus unbestätigten Transaktionen, der noch nicht im aktuellen Kontostand enthalten ist</translation> </message> <message> <location filename="../overviewpage.cpp" line="111"/> @@ -777,108 +959,166 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR-Code</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Zahlung anfordern</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Betrag:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Bezeichnung:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Nachricht:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Speichern unter...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>QR-Code abspeichern</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG Bild (*.png)</translation> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Bitcoins überweisen</translation> </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="64"/> <source>Send to multiple recipients at once</source> - <translation>An mehrere Empfänger auf einmal überweisen</translation> + <translation>In einer Transaktion an mehrere Empfänger auf einmal überweisen</translation> </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="67"/> <source>&Add recipient...</source> - <translation>&Empfänger hinzufügen...</translation> + <translation>&Empfänger hinzufügen</translation> </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Alle Überweisungsfelder zurücksetzen</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>Zurücksetzen</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Kontostand:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Überweisung bestätigen</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Überweisen</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> an %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Überweisung bestätigen</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> - <translation>Sind Sie sich sicher, dass Sie folgendes überweisen möchten: %1?</translation> + <translation>Sind Sie sich sicher, dass Sie die folgende Überweisung ausführen möchten?<br>%1</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation> und </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> - <translation>Die Empfangsadresse ist ungültig, bitte nochmals überprüfen.</translation> + <translation>Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> - <translation>Der zu zahlende Betrag muss mehr als 0 betragen.</translation> + <translation>Der zu zahlende Betrag muss größer 0 sein.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> - <translation>Der Betrag übersteigt Ihren Kontostand</translation> + <translation>Der angegebene Betrag übersteigt Ihren Kontostand.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> - <translation>Summe übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand</translation> + <translation>Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> - <translation>Doppelte Adresse gefunden. Pro Vorgang kann an eine Adresse nur einmalig etwas überwiesen werden</translation> + <translation>Doppelte Adresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Fehler: Transaktionserstellung fehlgeschlagen</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>Fehler: Die Transaktion wurde abgelehnt. Dies kann passieren, wenn einige Ihrer Bitcoins aus Ihrer Brieftasche bereits ausgegeben wurden (z.B. aus einer Sicherungskopie Ihrer wallet.dat).</translation> + <translation>Fehler: Die Transaktion wurde abgelehnt. Dies kann passieren, wenn einige Bitcoins aus Ihrer Brieftasche bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie Ihrer wallet.dat genutzt, die Bitcoins dort ausgegeben haben und dies daher in der derzeit aktiven Brieftasche nicht vermerkt ist.</translation> </message> </context> <context> @@ -902,7 +1142,7 @@ p, li { white-space: pre-wrap; } <location filename="../forms/sendcoinsentry.ui" line="66"/> <location filename="../sendcoinsentry.cpp" line="26"/> <source>Enter a label for this address to add it to your address book</source> - <translation>Geben Sie hier eine Bezeichnung der Adresse ein, um sie zum Adressbuch hinzuzufügen</translation> + <translation>Adressbezeichnung eingeben (diese wird bei unbekannten Adressen inkl. der Adresse dem Adressbuch hinzugefügt)</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="75"/> @@ -912,12 +1152,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../forms/sendcoinsentry.ui" line="93"/> <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> - <translation>Die Empfangsadresse für die Überweisung (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + <translation>Die Zahlungsadresse der Überweisung (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> - <translation>Adresse aus dem Adressbuch auswählen</translation> + <source>Choose address from address book</source> + <translation>Adresse aus Adressbuch wählen</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="113"/> @@ -948,137 +1188,142 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Offen für %1 Blöcke</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Offen bis %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/offline?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/unbestätigt</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 Bestätigungen</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Status:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> - <translation>; wurde noch nicht erfolgreich gesendet</translation> + <translation>, wurde noch nicht erfolgreich übertragen</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> - <translation>; über %1 Knoten gesendet</translation> + <translation>, über %1 Knoten übertragen</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> - <translation>; über %1 Knoten gesendet</translation> + <translation>, über %1 Knoten übertragen</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Datum:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Quelle:</b> Generiert<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>Von:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>unbekannt</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>An:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> - <translation> (Ihre, Bezeichnung: </translation> + <translation> (Eigene Adresse, Bezeichnung: </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> - <translation> (Ihre)</translation> + <translation> (Eigene Adresse)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Gutschrift:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation>(%1 reift in weiteren %2 Blöcken)</translation> + <translation>%1 (reift noch %2 weitere Blöcke)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(nicht angenommen)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Belastung:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Transaktionsgebühr:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Nettobetrag:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Nachricht:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Kommentar:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Transaktions-ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Generierte Bitcoins müssen 120 Blöcke lang warten, bevor sie ausgegeben werden können. Als Sie diesen Block generierten, wurde er an das Netzwerk gesendet, um ihn der Blockkette hinzuzufügen. Falls dies fehlschlägt wird der Status in "nicht angenommen" geändert und der Betrag wird nicht verfügbar werden. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block zur selben Zeit wie Sie generierte.</translation> + <translation>Generierte Bitcoins müssen 120 Blöcke lang warten, bevor sie ausgegeben werden können. Als Sie diesen Block generierten, wurde er an das Netzwerk übertragen, um ihn der Blockkette hinzuzufügen. Falls dies fehlschlägt wird der Status in "nicht angenommen" geändert und der Betrag wird nicht verfügbar werden. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block zur selben Zeit wie Sie generierte.</translation> </message> </context> <context> @@ -1159,62 +1404,57 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactiontablemodel.cpp" line="347"/> <source>Received with</source> - <translation>Empfangen durch</translation> + <translation>Empfangen über</translation> </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Empfangen von IP</translation> + <source>Received from</source> + <translation>Empfangen von</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Überwiesen an</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Überwiesen an IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> - <translation>Zahlung an Sie selbst</translation> + <translation>Eigenüberweisung</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Erarbeitet</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(k.A.)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Datum und Uhrzeit als die Transaktion empfangen wurde.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> - <translation>Art der Transaktion.</translation> + <translation>Art der Transaktion</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> - <translation>Empfangsadresse der Transaktion.</translation> + <translation>Zieladresse der Transaktion.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> - <translation>Betrag vom Kontostand entfernt oder hinzugefügt.</translation> + <translation>Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde.</translation> </message> </context> <context> @@ -1253,12 +1493,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactionview.cpp" line="61"/> <source>Range...</source> - <translation>Bereich...</translation> + <translation>Zeitraum</translation> </message> <message> <location filename="../transactionview.cpp" line="72"/> <source>Received with</source> - <translation>Empfangen durch</translation> + <translation>Empfangen über</translation> </message> <message> <location filename="../transactionview.cpp" line="74"/> @@ -1268,7 +1508,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactionview.cpp" line="76"/> <source>To yourself</source> - <translation>Zu Ihnen selbst</translation> + <translation>Eigenüberweisung</translation> </message> <message> <location filename="../transactionview.cpp" line="77"/> @@ -1288,19 +1528,24 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactionview.cpp" line="90"/> <source>Min amount</source> - <translation>Kleinster Betrag</translation> + <translation>Minimaler Betrag</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Adresse kopieren</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Bezeichnung kopieren</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Betrag kopieren</translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Bezeichnung bearbeiten</translation> @@ -1308,70 +1553,70 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactionview.cpp" line="128"/> <source>Show details...</source> - <translation>Details anzeigen...</translation> + <translation>Transaktionsdetails anzeigen</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Transaktionen exportieren</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Kommagetrennte Datei (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Bestätigt</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Datum</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Typ</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Bezeichnung</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Betrag</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Fehler beim Exportieren</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>Konnte nicht in Datei %1 schreiben.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> - <translation>Bereich:</translation> + <translation>Zeitraum:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>bis</translation> </message> @@ -1379,7 +1624,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Überweise...</translation> </message> @@ -1398,917 +1643,335 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> - <translation>Sende Befehl an -server oder bitcoind -</translation> + <source>Send command to -server or bitcoind</source> + <translation>Befehl an -server oder bitcoind senden</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> - <translation>Befehle auflisten -</translation> + <source>List commands</source> + <translation>Befehle auflisten</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> - <translation>Hilfe für Befehl erhalten -</translation> + <source>Get help for a command</source> + <translation>Hilfe zu einem Befehl erhalten</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>Einstellungen:</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> - <translation>Bitte wählen Sie eine Konfigurationsdatei (Standard: bitcoin.conf)</translation> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Konfigurationsdatei angeben (Standard: bitcoin.conf)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> - <translation>Bitte wählen Sie den Namen der PID Datei (Standard bitcoind.pid)</translation> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>PID-Datei angeben (Standard: bitcoind.pid)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> - <translation>Erarbeite Bitcoins</translation> + <source>Generate coins</source> + <translation>Bitcoins generieren</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> - <translation>Keine Bitcoins erarbeiten -</translation> + <source>Don't generate coins</source> + <translation>Keine Bitcoins generieren</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> - <translation>minimiert starten</translation> + <source>Start minimized</source> + <translation>Minimiert starten</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> - <translation>Bitte wählen Sie das Datenverzeichnis</translation> + <source>Specify data directory</source> + <translation>Datenverzeichnis angeben</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> - <translation>Netzwerkverbindungsabbruch nach (in Millisekunden)</translation> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Verbindungstimeout angeben (in Millisekunden)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> - <translation>Durch SOCKS4-Proxy verbinden</translation> + <source>Connect through socks4 proxy</source> + <translation>Über einen SOCKS4-Proxy verbinden:</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>Erlaube DNS Namensauflösung für addnode und connect</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> - <translation>Bitcoin Knoten hinzufügen -</translation> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Verbindungen erwarten an <port> (Standard: 8333 oder test-Netzwerk: 18333)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> - <translation>Nur zu angegebenen Knoten verbinden -</translation> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Maximal <n> Verbindungen zu Peers aufrechterhalten (Standard: 125)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> - <translation>Keine externen Transatkionen akzeptieren</translation> + <source>Add a node to connect to</source> + <translation>Einen Knoten hinzufügen, mit dem sich verbunden werden soll</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> - <translation>UPnP nicht verwenden</translation> + <source>Connect only to the specified node</source> + <translation>Nur mit dem angegebenem Knoten verbinden</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> - <translation>Versuche eine Verbindung mittels UPnP herzustellen</translation> + <source>Don't accept connections from outside</source> + <translation>Keine Verbindungen von außen akzeptieren</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Gebühr pro KB, die gesendeten Transaktionen hinzugefügt wird -</translation> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Keine Peerliste durch die Nutzung von DNS erzeugen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> - <translation>Erlaube Kommandozeilen und JSON-RPC Befehle -</translation> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Schwellenwert, um Verbindungen zu sich nicht konform verhaltenden Peers zu beenden (Standard: 100)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> - <translation>Als Hintergrunddienst starten und Befehle akzeptieren -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> - <translation>Das Test Netzwerk verwenden -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> - <translation>Benutzername für JSON-RPC Verbindungen -</translation> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Anzahl Sekunden, während denen sich nicht konform verhaltenden Peers die Wiederverbindung verweigert wird (Standard: 86400)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> - <translation>Passwort für JSON-RPC Verbindungen -</translation> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximale Größe des Empfangspuffers pro Verbindung, <n>*1000 Bytes (Standard: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> - <translation>Port für JSON-RPC Befehle (Standard: 8332) -</translation> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximale Größe des Sendepuffers pro Verbindung, <n>*1000 Bytes (Standard: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> - <translation>JSON-RPC Befehle nur von dieser IP-Adresse erlauben -</translation> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Nicht versuchen UPnP zu verwenden, um den abgehörten Port weiterzuleiten</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> - <translation>Befehle an Bitcoin Knoten <ip> senden (Standard: 127.0.0.1) -</translation> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Versuchen UPnP zu verwenden, um den abgehörten Port weiterzuleiten</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> - <translation>Menge der vorgenerierten Adressen (Standard: 100) -</translation> + <source>Fee per kB to add to transactions you send</source> + <translation>Gebühr pro kB, die gesendeten Transaktionen hinzugefügt wird</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> - <translation>Blockkette nach verlorenen Transaktionen durchsuchen (rescan)</translation> + <source>Accept command line and JSON-RPC commands</source> + <translation>Kommandozeilenbefehle und JSON-RPC Befehle annehmen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="34"/> - <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> - <translation>SSL Einstellungen: (Siehe im BitCoin-Wiki für eine detallierte Beschreibung) -</translation> + <source>Run in the background as a daemon and accept commands</source> + <translation>Als Hintergrunddienst starten und Befehle akzeptieren</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Das test-Netzwerk verwenden</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Ausgabe zusätzlicher Debugging-Informationen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> - <translation>JSON-RPC Befehle über OpenSSL (https) -</translation> + <source>Prepend debug output with timestamp</source> + <translation>Der Debug-Ausgabe einen Zeitstempel voranstellen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> - <translation>SSL Server Zertifikat (Standard: server.cert) -</translation> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Rückverfolgungs- und Debug-Informationen an die Konsole senden anstatt sie in die debug.log Datei zu schreiben</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> - <translation>Privater SSL Schlüssel (Standard: server.pem)</translation> + <source>Send trace/debug info to debugger</source> + <translation>Rückverfolgungs- und Debug-Informationen an den Debugger senden</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> - <translation>Erlaubte Kryptographiealgorithmen (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + <source>Username for JSON-RPC connections</source> + <translation>Benutzername für JSON-RPC Verbindungen</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Passwort für JSON-RPC Verbindungen</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>JSON-RPC Verbindungen erwarten an <port> (Standard: 8332)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> - <translation>Dieser Hilfetext</translation> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>JSON-RPC Verbindungen von der angegebenen IP-Adresse erlauben</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="44"/> - <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> - <translation>Konnte das Datenverzeichnis %s nicht sperren. Evtl. wurde das Programm mehrfach gestartet.</translation> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Sende Befehle an Knoten <ip> (Standard: 127.0.0.1)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> - <source>Loading addresses...</source> - <translation>Lade Adressen...</translation> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Setze Größe des Schlüsselpools auf <n> (Standard: 100)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Fehler beim Laden der addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Blockkette erneut nach fehlenden Transaktionen der Brieftasche durchsuchen</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Lade Blockindex...</translation> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL Einstellungen: (siehe Bitcoin-Wiki für SSL Installationsanweisungen)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Fehler beim laden der blkindex.dat</translation> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>OpenSSL (https) für JSON-RPC Verbindungen benutzen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Lade Geldbörse...</translation> + <source>Server certificate file (default: server.cert)</source> + <translation>Server Zertifikat (Standard: server.cert)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Fehler beim Laden von wallet.dat: Brieftasche beschädigt -</translation> + <source>Server private key (default: server.pem)</source> + <translation>Privater Serverschlüssel (Standard: server.pem)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Fehler beim Laden von wallet.dat: Neuere Version von Bitcoin notwendig -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Fehler beim Laden von wallet.dat</translation> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Akzeptierte Chiffren (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="56"/> - <source>Rescanning...</source> - <translation>Lade neu...</translation> + <source>This help message</source> + <translation>Dieser Hilfetext</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="57"/> - <source>Done loading</source> - <translation>Laden abgeschlossen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="58"/> - <source>Invalid -proxy address</source> - <translation>Fehlerhafte Proxy Adresse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="59"/> - <source>Invalid amount for -paytxfee=<amount></source> - <translation>Ungültige Angabe für -paytxfee=<Betrag></translation> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Konnte das Datenverzeichnis %s nicht sperren. Evtl. wurde Bitcoin bereits gestartet.</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="60"/> - <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> - <translation>Warnung: -paytxfee ist auf einen sehr hohen Wert gesetzt. Dies ist die Gebühr die beim senden einer Transaktion fällig wird.</translation> + <source>Loading addresses...</source> + <translation>Lade Adressen...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> - <source>Error: CreateThread(StartNode) failed</source> - <translation>Fehler: CreateThread(StartNode) fehlerhaft</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Fehler beim Laden von addr.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> - <source>Warning: Disk space is low </source> - <translation>Warnung: Festplattenplatz wird knapp.</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Fehler beim Laden von blkindex.dat</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="65"/> - <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> - <translation>Fehler beim registrieren des Ports %d auf diesem Computer. Evtl. läuft BitCoin bereits</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Geben Sie bitte das Passwort für die Brieftasche ein.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Passwort</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Bitte die aktuelle Passphrase zur Entschlüsselung eingeben.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>Das eingegebene Passwort für die Brieftasche war fehlerhaft</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Status</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Datum</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Beschreibung</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debitoren</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Kreditoren</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Öffne für %d Blöcke</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Geöffnet bis %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/offline?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/unbestätigt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d Bestätigungen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Generiert</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Erstellt (%s reift nach %d weiteren Blöcken)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Generiert - Warnung: Dieser Block wurde bei keinem anderen Knoten empfangen und wird wahrscheinlich nicht akzeptiert!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Generiert (nicht akzeptiert)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>Von:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Erhalten mit:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Bezahlung an sich selbst</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>An:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation>Erzeuge</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(nicht verbunden)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation>%d Verbindungen %d Blöcke %d Transaktionen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>Brieftasche ist bereits verschlüsselt.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Geben Sie die neue Passphrase für die Brieftasche ein -Bitte benutzen Sie eine Passphrase von 10 oder mehr zufälligen Zeichen oder acht oder mehr Wörtern.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Fehler: Das eingegebene Passwort war zu kurz.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>WARNUNG: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>ALLE IHRE BITCOINS VERLIEREN</b>! Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Bitte geben Sie Ihr neues Brieftaschenpasswort erneut ein.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Fehler: Die eingegebenen Passphrasen stimmen nicht überein.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Neue Empfangsadresse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Senden...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Unzureichender Kontostand</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation type="unfinished"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Fehler beim Laden von wallet.dat: Brieftasche beschädigt</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Fehler beim Laden von wallet.dat: Brieftasche benötigt neuere Version von Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Brieftasche muss neu geschrieben werden: starten Sie Bitcoin zur Fertigstellung neu</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Fehler beim Laden von wallet.dat (Brieftasche)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Lade Blockindex...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Lade Geldbörse...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Durchsuche erneut...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Laden abgeschlossen</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Fehlerhafte Proxy-Adresse</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Ungültige Angabe für -paytxfee=<Betrag></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Warnung: -paytxfee ist auf einen sehr hohen Wert gesetzt. Dies ist die Gebühr die beim Senden einer Transaktion fällig wird.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Fehler: CreateThread(StartNode) fehlgeschlagen</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Warnung: Festplattenplatz wird knapp</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Fehler beim registrieren des Ports %d auf diesem Computer. Evtl. wurde Bitcoin bereits gestartet.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="213"/> + <location filename="../bitcoinstrings.cpp" line="81"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> - <translation>Bitte prüfen Sie Ihre Datums- und Uhrzeiteinstellungen, ansonsten kann es sein das BitCoin nicht ordnungsgemäss funktioniert.</translation> + <translation>Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen Ihres Computers, da Bitcoin ansonsten nicht ordnungsgemäß funktionieren wird.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> + <translation>Beta</translation> </message> </context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index df964c91e6..d83d4bc2d1 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -16,7 +16,7 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. @@ -65,31 +65,66 @@ This product includes software developed by the OpenSSL Project for use in the O </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation type="unfinished"></translation> </message> @@ -121,124 +156,131 @@ This product includes software developed by the OpenSSL Project for use in the O </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation type="unfinished"></translation> </message> @@ -246,177 +288,208 @@ Are you sure you wish to encrypt your wallet?</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation type="unfinished"> <numerusform>%n active connection to Bitcoin network</numerusform> @@ -424,17 +497,17 @@ Are you sure you wish to encrypt your wallet?</source> </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation type="unfinished"> <numerusform>%n second ago</numerusform> @@ -442,7 +515,7 @@ Are you sure you wish to encrypt your wallet?</source> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation type="unfinished"> <numerusform>%n minute ago</numerusform> @@ -450,7 +523,7 @@ Are you sure you wish to encrypt your wallet?</source> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation type="unfinished"> <numerusform>%n hour ago</numerusform> @@ -458,7 +531,7 @@ Are you sure you wish to encrypt your wallet?</source> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation type="unfinished"> <numerusform>%n day ago</numerusform> @@ -466,42 +539,42 @@ Are you sure you wish to encrypt your wallet?</source> </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -510,15 +583,35 @@ Address: %4 <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -586,22 +679,22 @@ Address: %4 <translation type="unfinished"></translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation type="unfinished"></translation> </message> @@ -680,7 +773,7 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> <translation type="unfinished"></translation> </message> <message> @@ -690,7 +783,97 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> <translation type="unfinished"></translation> </message> </context> @@ -780,16 +963,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation type="unfinished"></translation> </message> @@ -805,81 +1041,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation type="unfinished"></translation> </message> @@ -919,7 +1160,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation type="unfinished"></translation> </message> <message> @@ -951,135 +1192,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation type="unfinished"></translation> </message> @@ -1172,56 +1418,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> + <source>Received from</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation type="unfinished"></translation> </message> @@ -1300,16 +1541,21 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation type="unfinished"></translation> @@ -1320,67 +1566,67 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation type="unfinished"></translation> </message> @@ -1388,7 +1634,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation type="unfinished"></translation> </message> @@ -1407,894 +1653,334 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <source>Maintain at most <n> connections to peers (default: 125)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <source>Add a node to connect to</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <source>Connect only to the specified node</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <source>Don't accept connections from outside</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> + <source>Don't bootstrap list of peers using DNS</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <source>Don't attempt to use UPnP to map the listening port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> + <source>Attempt to use UPnP to map the listening port</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <source>Fee per kB to add to transactions you send</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> + <source>Accept command line and JSON-RPC commands</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="34"/> - <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <source>Prepend debug output with timestamp</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <source>Send trace/debug info to console instead of debug.log file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <source>Send trace/debug info to debugger</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <source>Allow JSON-RPC connections from specified IP address</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="44"/> - <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> - <source>Loading addresses...</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> + <source>Server certificate file (default: server.cert)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> + <source>Server private key (default: server.pem)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="56"/> - <source>Rescanning...</source> + <source>This help message</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="57"/> - <source>Done loading</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="58"/> - <source>Invalid -proxy address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="59"/> - <source>Invalid amount for -paytxfee=<amount></source> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="60"/> - <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <source>Loading addresses...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> - <source>Error: CreateThread(StartNode) failed</source> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> - <source>Warning: Disk space is low </source> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="65"/> - <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> + <source>Error loading wallet.dat: Wallet corrupted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="213"/> + <location filename="../bitcoinstrings.cpp" line="81"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation type="unfinished"></translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"></translation> - </message> -</context> </TS> diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index e2ec6bff54..a388508ff8 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -14,23 +14,14 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright (c) 2009-2010 Bitcoin Developers - -Este es un software experimental. - -Distribuido bajo la licencia MIT/X11, vea el archivo adjunto -license.txt o http://www.opensource.org/licenses/mit-license.php. - -Este producto incluye software desarrollado por OpenSSL Project para su uso en -el OpenSSL Toolkit (http://www.openssl.org) y software criptográfico escrito por -Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</translation> + <translation type="unfinished"/> </message> </context> <context> @@ -72,31 +63,66 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</tran </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>Borra la dirección seleccionada de la lista. Solo las direcciónes de envio se pueden borrar.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>Bo&rrar</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copia dirección</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copia etiqueta</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Exporta datos de la Guia de direcciones</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Archivos separados por coma (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Exportar errores</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>No se pudo escribir al archivo %1.</translation> </message> @@ -128,125 +154,132 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</tran </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation>Cambiar contraseña:</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>Introduce contraseña actual </translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Nueva contraseña</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Repite nueva contraseña:</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation>Introduce la nueva contraseña de cartera.<br/>Por favor utiliza un contraseña <b>de 10 o mas caracteres aleatorios</b>, u <b>ocho o mas palabras</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Encriptar cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Esta operación necesita la contraseña para desbloquear la cartera.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Desbloquea cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Esta operación necesita la contraseña para decriptar la cartera.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Decriptar cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>Cambia contraseña</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>Introduce la contraseña anterior y la nueva de cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>Confirma la encriptación de cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>ATENCION: ¡Si encriptas tu cartera y pierdes la contraseña perderas <b>TODOS TUS BITCOINS</b>!" ¿Seguro que quieres seguir encriptando la cartera?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Cartera encriptada</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Recuerda que encriptando tu cartera no garantiza mantener a salvo tus bitcoins en caso de tener viruses en el ordenador.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Encriptación de cartera fallida</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>Encriptación de cartera fallida debido a un error interno. Tu cartera no ha sido encriptada.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>Las contraseñas no coinciden.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Desbloqueo de cartera fallido</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>La contraseña introducida para decriptar la cartera es incorrecta.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Decriptación de cartera fallida</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>La contraseña de cartera ha sido cambiada con exit.</translation> </message> @@ -254,247 +287,278 @@ Are you sure you wish to encrypt your wallet?</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Cartera Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Sincronizando con la red...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>Sincronización cadena de bloques en progreso</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Vista general</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Muestra una vista general de cartera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transacciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Visiona el historial de transacciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Guia de direcciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>Edita la lista de las direcciónes y etiquetas almacenada</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>&Recibe monedas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Muestra la lista de direcciónes utilizadas para recibir pagos</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>&Envia monedas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Envia monedas a una dirección bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> - <source>E&xit</source> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Salir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Salir de la aplicación</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>S&obre %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Muestra información sobre Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>&Opciones</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>Modifica opciones de configuración</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>Abre &Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Muestra la ventana de Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Exporta...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Exporta la vista actual a un archivo</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>&Encriptar cartera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Encriptar o decriptar cartera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation>&Cambiar la contraseña</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>Cambiar la contraseña utilizada para la encriptación de cartera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Archivo</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Configuración</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Ayuda</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Barra de pestañas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Barra de acciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnet]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n conexión activa hacia la red Bitcoin</numerusform><numerusform>%n conexiones activas hacia la red Bitcoin</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>Se han bajado %1 de %2 bloques de historial.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>Se han bajado %1 bloques de historial.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>Hace %n segundo</numerusform><numerusform>Hace %n segundos</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>Hace %n minuto</numerusform><numerusform>Hace %n minutos</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>Hace %n hora</numerusform><numerusform>Hace %n horas</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>Hace %n día</numerusform><numerusform>Hace %n días</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Actualizado</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Recuperando...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>El ultimo bloque recibido fue generado %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Enviando...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Transacción enviada</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Transacción entrante</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -506,15 +570,35 @@ Tipo: %3 Dirección: %4</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>La cartera esta <b>encriptada</b> y actualmente <b>desbloqueda</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>La cartera esta <b>encriptada</b> y actualmente <b>bloqueda</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -582,22 +666,22 @@ Dirección: %4</translation> <translation>Editar dirección de envio</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>La dirección introducia "%1" ya esta guardada en la guia.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>La dirección introducida "%1" no es una dirección Bitcoin valida.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>No se pudo desbloquear la cartera.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>La generación de nueva clave fallida.</translation> </message> @@ -676,8 +760,8 @@ Dirección: %4</translation> </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Comisión opcional a las transacciones por KB que ayuda a asegurar que tus transacciones son procesadas rápidamente. La mayoría de las transacciones son de 1KB. Se recomienda una comisión de 0.01.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -686,8 +770,98 @@ Dirección: %4</translation> </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Comisión opcional a las transacciones por KB que ayuda a asegurar que tus transacciones son procesadas rápidamente. La mayoría de las transacciones son de 1KB. Se recomienda una comisión de 0.01.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>La dirección donde enviar el pago (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Elije dirección de la guia</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Pega dirección desde portapapeles</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copia la dirección seleccionada al portapapeles</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copiar al portapapeles</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> </message> </context> <context> @@ -755,7 +929,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cartera</span></p></body></html></translation> </message> <message> @@ -780,16 +954,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Cambiar contraseña</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Mensaje:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Envia monedas</translation> </message> @@ -805,81 +1032,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>&Borra todos</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Balance:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Confirma el envio</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Envía</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> to %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Confirmar el envio de monedas</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Estas seguro que quieres enviar %1?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation>y</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>La dirección de destinatarion no es valida, comprueba otra vez.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>La cantidad por pagar tiene que ser mayor 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>La cantidad sobrepasa tu saldo</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Error: La transacción no se pudo crear </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation> </message> @@ -919,7 +1151,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation>Elije dirección de la guia</translation> </message> <message> @@ -951,135 +1183,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Abierto hasta %1 bloques</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Abierto hasta %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/fuera de linea?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/no confirmado</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 confirmaciónes</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Estado:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, no ha sido emitido satisfactoriamente todavía</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> - <translation>, emitido mediante %d nodo</translation> + <translation>, emitido mediante %1 nodo</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> - <translation>, emitido mediante %d nodos</translation> + <translation>, emitido mediante %1 nodos</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Fecha:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Fuente:</b> Generado<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>De:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>desconocido</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>Para:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation>(tuya, etiqueta: </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (tuya)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Crédito:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation>(%s madura en %d bloques mas)</translation> + <translation>(%1 madura en %1 bloques mas)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(no aceptada)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Débito:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Comisión transacción:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Cantidad total:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Mensaje:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Comentario:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation> </message> @@ -1166,56 +1403,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Recibido de IP</translation> + <source>Received from</source> + <translation type="unfinished"/> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Enviado a</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Enviado a IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>Pago proprio</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Minado</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(n/a)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Fecha y hora cuando se recibió la transaccion</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Tipo de transacción.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Dirección de destino para la transacción</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Cantidad restada o añadida al balance</translation> </message> @@ -1294,16 +1526,21 @@ p, li { white-space: pre-wrap; } <translation>Cantidad minima</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Copia dirección</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Copia etiqueta</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Edita etiqueta</translation> @@ -1314,67 +1551,67 @@ p, li { white-space: pre-wrap; } <translation>Muestra detalles...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Exportar datos de transacción</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Archivos separados por coma (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Confirmado</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Fecha</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Tipo</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Etiqueta</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Dirección</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Cantidad</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Error exportando</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>No se pudo escribir en el archivo %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Rango:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>para</translation> </message> @@ -1382,7 +1619,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Enviando...</translation> </message> @@ -1401,942 +1638,369 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation>Envia comando a bitcoin lanzado con -server u bitcoind </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation>Muestra comandos </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>Recibir ayuda para un comando </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>Opciones: </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation>Especifica archivo de configuración (predeterminado: bitcoin.conf) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation>Especifica archivo pid (predeterminado: bitcoin.pid) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation>Genera monedas </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation>No generar monedas </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>Arranca minimizado </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation>Especifica directorio para los datos </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation>Especifica tiempo de espera para conexion (en milisegundos) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation>Conecta mediante proxy socks4 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>Permite búsqueda DNS para addnode y connect </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> <translation>Agrega un nodo para conectarse </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> <translation>Conecta solo al nodo especificado </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> <translation>No aceptar conexiones desde el exterior </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> <translation>No intentar usar UPnP para mapear el puerto de entrada </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> <translation>Intenta usar UPnP para mapear el puerto de escucha. </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Comisión por KB para agregar a las transacciones que envias -</translation> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> <translation>Aceptar comandos consola y JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> <translation>Correr como demonio y acepta comandos </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> <translation>Usa la red de pruebas </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> <translation>Usuario para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> <translation>Contraseña para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation>Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 8332) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> <translation>Permite conexiones JSON-RPC desde la dirección IP especificada </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation>Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation>Ajusta el numero de claves en reserva <n> (predeterminado: 100) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> <translation>Rescanea la cadena de bloques para transacciones perdidas de la cartera </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation>Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation>Usa OpenSSL (https) para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> <translation>Certificado del servidor (Predeterminado: server.cert) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> <translation>Clave privada del servidor (Predeterminado: server.pem) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation>Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> <translation>Este mensaje de ayuda </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="57"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation>No se puede obtener permiso de trabajo en la carpeta de datos %s. Probablemente Bitcoin ya se está ejecutando. </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> <source>Loading addresses...</source> <translation>Cargando direcciónes...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Error cargando addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Cargando el index de bloques...</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Error cargando blkindex.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Cargando cartera...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Error cargando wallet.dat: Cartera dañada -</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Error cargando el archivo wallet.dat: Se necesita una versión mas nueva de Bitcoin -</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Error cargando wallet.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Cargando el index de bloques...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Cargando cartera...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> <source>Rescanning...</source> <translation>Rescaneando...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="70"/> <source>Done loading</source> <translation>Carga completa</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="58"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>Invalid -proxy address</source> <translation>Dirección -proxy invalida</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="59"/> + <location filename="../bitcoinstrings.cpp" line="72"/> <source>Invalid amount for -paytxfee=<amount></source> <translation>Cantidad inválida para -paytxfee=<amount></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation>Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="76"/> <source>Error: CreateThread(StartNode) failed</source> <translation>Error: CreateThread(StartNode) fallido</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Warning: Disk space is low </source> <translation>Atención: Poco espacio en el disco duro</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation>No es posible escuchar en el puerto %d en este ordenador. Probablemente Bitcoin ya se está ejecutando.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Introduce la contraseña actual de la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Contraseña</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Por favor introduce la contraseña actual de la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>La contraseña introducida para decriptar la cartera es incorrecta.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Estado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Fecha</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Descripción</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debito</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Credito</translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Abierto para %d bloques</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Abierto hasta %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/fuera de linea?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/no confirmado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d confirmaciónes</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Generado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Generado (%s madura en %d bloques)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Generado - Cuidado: Este bloque no se recibió de otros nodos y probablemente no sea aceptado!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Generado (no aceptado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>De: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Recibido con: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Pago a ti mismo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Para: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> Generando</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(no conectado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d conexiones %d bloques %d transacciones</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>La cartera ya esta encriptada.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Introduce la nueva contraseña de cartera. -Por favor utiliza un contraseña de 10 o mas caracteres aleatorios, u ocho o mas palabras.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Error: La contraseña introducida es demasiado corta.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>ATENCION: ¡Si encriptas tu cartera y pierdes la contraseña perderas TODOS TUS BITCOINS! -¿Estas seguro que quieres seguir encriptando la cartera?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Por favor vuelve introducir la nueva contraseña.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Error: las contraseñas no son identicas.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Encriptacion de cartera fallida.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Cartera Encriptada. -Recuerda que encriptando tu cartera no garantiza mantener a salvo tus bitcoins en caso de tener viruses en el ordenador.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>Cartera no encriptada, intenta encriptar primero.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>Introduce la nueva contraseña para la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>Reintroduce la nueva contraseña para la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>Contraseña de cartera cambiada.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Nueva dirección de recepción</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>Debes usar una nueva dirección para cada pago que usted recibe. - -Etiqueta</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>Estado:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, no ha sido emitido satisfactoriamente todavía</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, emitido mediante %d nodo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, emitido mediante %d nodos</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>Fecha:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>Fuente:</b> Generado<br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>De:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>desconocido</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>Para:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation>(tuya, etiqueta: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation>(tuya)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>Crédito:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s madura en %d bloques)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(no aceptada)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>Débito:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>Comisión transacción:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>Cantidad total:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>Mensaje:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>Comentario:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>No se puede escribir el fichero autostart/bitcoin.desktop</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>Principal</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>&Arranca Bitcoin al iniciar el sistema</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>&Minimiza al cerrar</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>versión %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>Error en la cantidad </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>Envia monedas</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>La cantidad sobrepasa tu balance </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>El total sobrepasa tu balance cuando se </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation>incluyen las tasas de transacción </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>Pago enviado </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Enviando...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>Dirección inválida </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>Enviando %s a %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>CANCELADO</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>Cancelado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>Transferencia cancelada </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>Error: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Fondos insuficientes</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>Conectando...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>No es posible conectar</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>Pidiendo clave pública...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>Clave pública recibida...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>El destinatario no accepta transacciones enviadas a direcciones IP</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>La transferencia no fue aceptada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>Respuesta inválida recibida</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>Creando transacción...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>Esta transacción requiere una comisión de al menos %s por su cantidad, complejidad o uso de fondos recibidos recientemente</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>Fallo al crear la transacción.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>Transacción abortada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>Conexión perdida, transacción cancelada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>Enviando pago...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>Esperando confirmación...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>El pago se ha enviado, pero el receptor no pudo verificarlo. -La transacción se grabó y el saldo fue transferido, -pero la información de los comentarios quedará en blanco.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>El pago fue enviado, pero se recibió una respuesta inválida</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>Pago completado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>Nombre</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>Dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>Etiqueta</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>Dirección Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>Esta es una de sus direcciones para recibir pagos y no puede incluirse en la libreta de direcciones. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>Edita dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>Edita etiqueta dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>Agrega dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation>Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>Bitcoin - Generando</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>Bitcoin - (no conectado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>&Abre Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>&Envia Bitcoins</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>O&pciones</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>S&alir</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>El programa ha detectado un error y va a cerrarse. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="213"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation>Precaución: Por favor revisa que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal Bitcoin no funcionará correctamente.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>beta</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts index b44c143446..d0986b691d 100644 --- a/src/qt/locale/bitcoin_es_CL.ts +++ b/src/qt/locale/bitcoin_es_CL.ts @@ -14,23 +14,14 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Bitcoin Developers - -Este es un software experimental. - -Distribuido bajo la licencia MIT/X11, vea el archivo adjunto -license.txt o http://www.opensource.org/licenses/mit-license.php. - -Este producto incluye software desarrollado por OpenSSL Project para su uso en -el OpenSSL Toolkit (http://www.openssl.org/), software criptográfico escrito por -Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</translation> + <translation type="unfinished"/> </message> </context> <context> @@ -72,31 +63,66 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</tran </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Mostrar Código &QR </translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Firmar un mensaje para provar que usted es dueño de esta dirección</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>Firmar Mensaje</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>Borra la dirección seleccionada de la lista. Solo las direcciónes de envio se pueden borrar.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Borrar</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copia dirección</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copia etiqueta</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Editar</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Borrar</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Exporta datos de la guia de direcciones</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Archivos separados por coma (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Exportar errores</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>No se pudo escribir al archivo %1.</translation> </message> @@ -128,125 +154,132 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</tran </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation>Cambiar contraseña:</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>Introduce contraseña actual </translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Nueva contraseña</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Repite nueva contraseña:</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation>Introduce la nueva contraseña para la billetera.<br/>Por favor utiliza un contraseña <b>de 10 o mas caracteres aleatorios</b>, u <b>ocho o mas palabras</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Codificar billetera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Esta operación necesita la contraseña para desbloquear la billetera.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Desbloquea billetera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Esta operación necesita la contraseña para decodificar la billetara.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Decodificar cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>Cambia contraseña</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>Introduce la contraseña anterior y la nueva de cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>Confirma la codificación de cartera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>ATENCIÓN: ¡Si codificas tu billetera y pierdes la contraseña perderás <b>TODOS TUS BITCOINS</b>!" ¿Seguro que quieres seguir codificando la billetera?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Billetera codificada</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Recuerda que codificando tu billetera no garantiza mantener a salvo tus bitcoins en caso de tener virus en el computador.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus bitcoins de ser robados por malware que infecte su computador</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Precaucion: Mayúsculas Activadas</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Falló la codificación de la billetera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>La codificación de la billetera falló debido a un error interno. Tu billetera no ha sido codificada.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>Las contraseñas no coinciden.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Ha fallado el desbloqueo de la billetera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>La contraseña introducida para decodificar la billetera es incorrecta.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Ha fallado la decodificación de la billetera</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>La contraseña de billetera ha sido cambiada con éxito.</translation> </message> @@ -254,247 +287,278 @@ Are you sure you wish to encrypt your wallet?</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Billetera Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Sincronizando con la red...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>Sincronización de la cadena de bloques en progreso</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Vista general</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Muestra una vista general de la billetera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transacciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Explora el historial de transacciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Guia de direcciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>Edita la lista de direcciones y etiquetas almacenadas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>&Recibir monedas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Muestra la lista de direcciónes utilizadas para recibir pagos</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>&Envíar monedas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Enviar monedas a una dirección bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Firmar Mensaje</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Suministre dirección de control</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>&Salir</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Salir del programa</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>S&obre %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Muestra información acerca de Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Acerca de</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Mostrar Información sobre QT</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>&Opciones</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>Modifica las opciones de configuración de bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>Abre &Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Muestra la ventana de Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Exportar...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Exportar la vista actual a un archivo</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>&Codificar la billetera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Codificar o decodificar la billetera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation>&Cambiar la contraseña</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>Cambiar la contraseña utilizada para la codificación de la billetera</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Archivo</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Configuración</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Ayuda</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Barra de pestañas</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Barra de acciónes</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[red-de-pruebas]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n conexión activa hacia la red Bitcoin</numerusform><numerusform>%n conexiones activas hacia la red Bitcoin</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>Descargados %1 de %2 bloques del historial de transacciones.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>Descargado %1 bloques del historial de transacciones.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>Hace %n segundo</numerusform><numerusform>Hace %n segundos</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>Hace %n minuto</numerusform><numerusform>Hace %n minutos</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>Hace %n hora</numerusform><numerusform>Hace %n horas</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>Hace %n día</numerusform><numerusform>Hace %n días</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Actualizado</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Recuperando...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>El ultimo bloque recibido fue generado %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Enviando...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Transacción enviada</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Transacción entrante</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -506,15 +570,35 @@ Tipo: %3 Dirección: %4</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>La billetera esta <b>codificada</b> y actualmente <b>desbloqueda</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>La billetera esta <b>codificada</b> y actualmente <b>bloqueda</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -582,22 +666,22 @@ Dirección: %4</translation> <translation>Editar dirección de envio</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>La dirección introducida "%1" ya esta guardada en la libreta de direcciones.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>La dirección introducida "%1" no es una dirección Bitcoin valida.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>No se pudo desbloquear la billetera.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>La generación de nueva clave falló.</translation> </message> @@ -676,18 +760,108 @@ Dirección: %4</translation> </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Comisión de operación opcional por KB que ayuda a asegurar que tus transacciones sean procesadas rápidamente. La mayoría de las transacciones son de 1KB. Se recomienda una comisión de 0.01.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Comisión opcional por kB que ayuda a asegurar que sus transacciones son procesadas rápidamente. La mayoria de transacciones son de 1 KB. Se recomienda comisión de 0.01 </translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> <source>Pay transaction &fee</source> - <translation>Comision de &transacciónes</translation> + <translation>Comisión de &transacciónes</translation> </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Comisión de operación opcional por KB que ayuda a asegurar que tus transacciones sean procesadas rápidamente. La mayoría de las transacciones son de 1KB. Se recomienda una comisión de 0.01.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Comisión opcional por kB que ayuda a asegurar que sus transacciones son procesadas rápidamente. La mayoria de transacciones son de 1 KB. Se recomienda comisión de 0.01 </translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Mensaje</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>La dirección donde enviar el pago (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Elije dirección de la guia</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Pega dirección desde portapapeles</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Escriba el mensaje que desea firmar</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Click en "Firmar Mensage" para conseguir firma</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Firmar un mensjage para probar que usted es dueño de esta dirección</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>& Firmar Mensaje</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copiar la dirección seleccionada al portapapeles</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copiar al portapapeles</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Error al firmar</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 no es una dirección válida.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Llave privada para %q no esta disponible.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Falló Firma</translation> </message> </context> <context> @@ -755,7 +929,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cartera</span></p></body></html></translation> </message> <message> @@ -780,16 +954,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Cambiar contraseña</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>Código QR </translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Solicitar Pago</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Cantidad:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Etiqueta</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Mensaje:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Guardar Como...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Enviar monedas</translation> </message> @@ -805,81 +1032,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Remover todos los campos de la transacción</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>&Borra todos</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Balance:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Confirma el envio</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Envía</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> to %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Confirmar el envio de monedas</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Estas seguro que quieres enviar %1?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation>y</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>La dirección de destinatarion no es valida, comprueba otra vez.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>La cantidad por pagar tiene que ser mayor 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>La cantidad sobrepasa tu saldo</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Error: La transacción no se pudo crear </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation> </message> @@ -919,8 +1151,8 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> - <translation>Elije dirección de la guia</translation> + <source>Choose address from address book</source> + <translation>Elije dirección de la guia</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="113"/> @@ -951,135 +1183,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Abierto hasta %1 bloques</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Abierto hasta %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/fuera de linea?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/no confirmado</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 confirmaciónes</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Estado:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, no ha sido emitido satisfactoriamente todavía</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> - <translation>, emitido mediante %d nodo</translation> + <translation>, emitido mediante %1 nodo</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> - <translation>, emitido mediante %d nodos</translation> + <translation>, emitido mediante %1 nodos</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Fecha:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Fuente:</b> Generado<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>De:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>desconocido</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>Para:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation>(tuya, etiqueta: </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (tuya)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Crédito:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation>(%s madura en %d bloques mas)</translation> + <translation>(%1 madura en %2 bloques mas)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(no aceptada)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Débito:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Comisión transacción:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Cantidad total:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Mensaje:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Comentario:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID de Transacción:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation> </message> @@ -1166,56 +1403,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Recibido de IP</translation> + <source>Received from</source> + <translation>Recibido de</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Enviado a</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Enviado a IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> - <translation>Pago proprio</translation> + <translation>Pagar a usted mismo</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Minado</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(n/a)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Fecha y hora cuando se recibió la transaccion</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Tipo de transacción.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Dirección de destino para la transacción</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Cantidad restada o añadida al balance</translation> </message> @@ -1294,16 +1526,21 @@ p, li { white-space: pre-wrap; } <translation>Cantidad minima</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Copia dirección</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Copia etiqueta</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Copiar Cantidad</translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Edita etiqueta</translation> @@ -1314,67 +1551,67 @@ p, li { white-space: pre-wrap; } <translation>Muestra detalles...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Exportar datos de transacción</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Archivos separados por coma (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Confirmado</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Fecha</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Tipo</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Etiqueta</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Dirección</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Cantidad</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Error exportando</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>No se pudo escribir en el archivo %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Rango:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>para</translation> </message> @@ -1382,7 +1619,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Enviando...</translation> </message> @@ -1401,942 +1638,369 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation>Envia comando a bitcoin lanzado con -server u bitcoind </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation>Muestra comandos </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>Recibir ayuda para un comando </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>Opciones: </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation>Especifica archivo de configuración (predeterminado: bitcoin.conf) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation>Especifica archivo pid (predeterminado: bitcoin.pid) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation>Genera monedas </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation>No generar monedas </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>Arranca minimizado </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation>Especifica directorio para los datos </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation>Especifica tiempo de espera para conexion (en milisegundos) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation>Conecta mediante proxy socks4 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>Permite búsqueda DNS para addnode y connect </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Escuchar por conecciones en <puerto> (Por defecto: 8333 o red de prueba: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Mantener al menos <n> conecciones por cliente (por defecto: 125) </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> <translation>Agrega un nodo para conectarse </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> <translation>Conecta solo al nodo especificado </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> <translation>No aceptar conexiones desde el exterior </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Umbral de desconección de clientes con mal comportamiento (por defecto: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> <translation>No intentar usar UPnP para mapear el puerto de entrada </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> <translation>Intenta usar UPnP para mapear el puerto de escucha. </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Comisión por KB para agregar a las transacciones que envias -</translation> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Comisión por kB para adicionarla a las transacciones enviadas</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> <translation>Aceptar comandos consola y JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> <translation>Correr como demonio y acepta comandos </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> <translation>Usa la red de pruebas </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Adjuntar informacion extra de depuracion</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Anteponer salida de depuracion con marca de tiempo</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Enviar informacion de seguimiento a la consola en vez del archivo debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Enviar informacion de seguimiento al depurador</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> <translation>Usuario para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> <translation>Contraseña para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation>Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 8332) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> <translation>Permite conexiones JSON-RPC desde la dirección IP especificada </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation>Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation>Ajusta el numero de claves en reserva <n> (predeterminado: 100) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> <translation>Rescanea la cadena de bloques para transacciones perdidas de la cartera </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation>Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation>Usa OpenSSL (https) para las conexiones JSON-RPC </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> <translation>Certificado del servidor (Predeterminado: server.cert) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> <translation>Clave privada del servidor (Predeterminado: server.pem) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation>Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> <translation>Este mensaje de ayuda </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="57"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation>No se puede obtener permiso de trabajo en la carpeta de datos %s. Probablemente Bitcoin ya se está ejecutando. </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> <source>Loading addresses...</source> <translation>Cargando direcciónes...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Error cargando addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Error cargando addr.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Cargando el index de bloques...</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Error cargando blkindex.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Error cargando blkindex.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Error cargando wallet.dat: Billetera corrupta</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Cargando cartera...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Error cargando wallet.dat: Billetera necesita una vercion reciente de Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Error cargando wallet.dat: Cartera dañada -</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>La billetera necesita ser reescrita: reinicie Bitcoin para completar</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Error cargando el archivo wallet.dat: Se necesita una versión mas nueva de Bitcoin -</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Error cargando wallet.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Error cargando wallet.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Cargando el index de bloques...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Cargando cartera...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> <source>Rescanning...</source> <translation>Rescaneando...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="70"/> <source>Done loading</source> <translation>Carga completa</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="58"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>Invalid -proxy address</source> <translation>Dirección -proxy invalida</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="59"/> + <location filename="../bitcoinstrings.cpp" line="72"/> <source>Invalid amount for -paytxfee=<amount></source> <translation>Cantidad inválida para -paytxfee=<amount></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation>Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="76"/> <source>Error: CreateThread(StartNode) failed</source> <translation>Error: CreateThread(StartNode) fallido</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Warning: Disk space is low </source> <translation>Atención: Poco espacio en el disco duro</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation>No es posible escuchar en el puerto %d en este ordenador. Probablemente Bitcoin ya se está ejecutando.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Introduce la contraseña actual de la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Contraseña</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Por favor introduce la contraseña actual de la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>La contraseña introducida para decriptar la cartera es incorrecta.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Estado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Fecha</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Descripción</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debito</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Credito</translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Abierto para %d bloques</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Abierto hasta %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/fuera de linea?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/no confirmado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d confirmaciónes</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Generado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Generado (%s madura en %d bloques)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Generado - Cuidado: Este bloque no se recibió de otros nodos y probablemente no sea aceptado!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Generado (no aceptado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>De: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Recibido con: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Pago a ti mismo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Para: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> Generando</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(no conectado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d conexiones %d bloques %d transacciones</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>La cartera ya esta encriptada.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Introduce la nueva contraseña de cartera. -Por favor utiliza un contraseña de 10 o mas caracteres aleatorios, u ocho o mas palabras.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Error: La contraseña introducida es demasiado corta.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>ATENCION: ¡Si encriptas tu cartera y pierdes la contraseña perderas TODOS TUS BITCOINS! -¿Estas seguro que quieres seguir encriptando la cartera?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Por favor vuelve introducir la nueva contraseña.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Error: las contraseñas no son identicas.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Encriptacion de cartera fallida.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Cartera Encriptada. -Recuerda que encriptando tu cartera no garantiza mantener a salvo tus bitcoins en caso de tener viruses en el ordenador.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>Cartera no encriptada, intenta encriptar primero.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>Introduce la nueva contraseña para la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>Reintroduce la nueva contraseña para la cartera.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>Contraseña de cartera cambiada.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Nueva dirección de recepción</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>Debes usar una nueva dirección para cada pago que usted recibe. - -Etiqueta</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>Estado:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, no ha sido emitido satisfactoriamente todavía</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, emitido mediante %d nodo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, emitido mediante %d nodos</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>Fecha:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>Fuente:</b> Generado<br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>De:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>desconocido</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>Para:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation>(tuya, etiqueta: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation>(tuya)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>Crédito:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s madura en %d bloques)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(no aceptada)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>Débito:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>Comisión transacción:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>Cantidad total:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>Mensaje:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>Comentario:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>No se puede escribir el fichero autostart/bitcoin.desktop</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>Principal</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>&Arranca Bitcoin al iniciar el sistema</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>&Minimiza al cerrar</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>versión %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>Error en la cantidad </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>Envia monedas</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>La cantidad sobrepasa tu balance </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>El total sobrepasa tu balance cuando se </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation>incluyen las tasas de transacción </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>Pago enviado </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Enviando...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>Dirección inválida </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>Enviando %s a %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>CANCELADO</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>Cancelado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>Transferencia cancelada </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>Error: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Fondos insuficientes</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>Conectando...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>No es posible conectar</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>Pidiendo clave pública...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>Clave pública recibida...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>El destinatario no accepta transacciones enviadas a direcciones IP</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>La transferencia no fue aceptada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>Respuesta inválida recibida</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>Creando transacción...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>Esta transacción requiere una comisión de al menos %s por su cantidad, complejidad o uso de fondos recibidos recientemente</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>Fallo al crear la transacción.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>Transacción abortada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>Conexión perdida, transacción cancelada</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>Enviando pago...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>Esperando confirmación...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>El pago se ha enviado, pero el receptor no pudo verificarlo. -La transacción se grabó y el saldo fue transferido, -pero la información de los comentarios quedará en blanco.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>El pago fue enviado, pero se recibió una respuesta inválida</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>Pago completado</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>Nombre</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>Dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>Etiqueta</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>Dirección Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>Esta es una de sus direcciones para recibir pagos y no puede incluirse en la libreta de direcciones. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>Edita dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>Edita etiqueta dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>Agrega dirección</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation>Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>Bitcoin - Generando</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>Bitcoin - (no conectado)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>&Abre Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>&Envia Bitcoins</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>O&pciones</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>S&alir</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>El programa ha detectado un error y va a cerrarse. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="213"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> - <translation>Precaución: Por favor revisa que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal Bitcoin no funcionará correctamente.</translation> + <translation>Precaución: Por favor revise que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal configurado Bitcoin no funcionará correctamente.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>beta</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts new file mode 100644 index 0000000000..a14037f069 --- /dev/null +++ b/src/qt/locale/bitcoin_et.ts @@ -0,0 +1,1963 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="et" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Loo uus aadress</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Uus aadress...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>Kopeeri lõikelauale</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Kustuta</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Viga eksportimisel</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Silt</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Aadress</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(silti pole)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialoog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Ülevaade</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Tehingud</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Sirvi tehingute ajalugu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Aadressiraamat</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Valikud...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Ekspordi...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Fail</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Seaded</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Abiinfo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Muuda aadressi</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>Si&lt</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>Kopeeri lõikelauale</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialoog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Sõnum:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>tundmatu</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Sõnum:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Kommentaar:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Kuupäev</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tüüp</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Aadress</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Kogus</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Kuupäev</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tüüp</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Silt</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Aadress</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Kogus</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Viga eksportimisel</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts new file mode 100644 index 0000000000..b4e71af2e2 --- /dev/null +++ b/src/qt/locale/bitcoin_eu_ES.ts @@ -0,0 +1,1963 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="eu_ES" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> Bertsio</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Helbide-liburua</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Sortu helbide berria</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Ezabatu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Helbidea</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Helbidea</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Helbidea</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts new file mode 100644 index 0000000000..ed2aff6ac2 --- /dev/null +++ b/src/qt/locale/bitcoin_fa.ts @@ -0,0 +1,1980 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="fa" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>در مورد بیتکویین +</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation>نسخه </translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>کپی رایت © 2012-2009 Bitcoin Developers + +این یک نرمافزار آزمایشی است. + +توزیع شده تحت امتیاز نرمافزار MIT/X11، از فایل همراه با عنوان license.txt یا http://www.opensource.org/licenses/mit-license.php دیدن کنید. + +این محصول از نرمافزار ساخته شده در OpenSSL Project برای استفاده در جعبه ابزار OpenSSL (http://www.openssl.org/)، نرمافزار نهفته نوشته شده توسط اریک یانگ (eay@cryptsoft.com) و نرمافزار UPnP نوشته شده توسط توماس برنارد تشکیل شده است.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>دفتر آدرس</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>ااینجا آدرسهای بیتکویین هستند برای در یافت پر داختها. شما می توانید از مسیر های متفاوت پر داخت در بیابید بدین دلیل شما می توانید مسیر پر داخت کننده نگهداری کنید +درس روی پنجره اصلی نمایش می شود</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>برای ویرایش آدرس یا بر چسب دو بار کلیک کنید</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>آدرس نو ایجاد کنید</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>آدرس نو...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>آدرس انتخاب شده در سیستم تخته رسم گیره دار کپی کنید</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>کپی در تخته رسم گیره دار</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>نمایش &کد QR</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>یک پیام را امضا کنید تا ثابت کنید صاحب این نشانی هستید</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&امضای پیام</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>آدرس انتخاب شده از لیست حذف کنید. فقط آدرسهای ارسال شده می شود حفذ کرد</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>آدرس نو</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>کپی آدرس </translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>کپی بر چسب</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>ویرایش</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>حذف</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>آدرس انتخاب شده در سیستم تخته رسم گیره دار کپی کنید</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Comma فایل جدا </translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>خطای صادرت</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>تا فایل %1 نمی شود نوشت</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>ر چسب</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>ایل جدا </translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>خطای صادرت</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>تگفتگو</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>بر چسب</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>وارد عبارت عبور</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>عبارت عبور نو</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>تکرار عبارت عبور نو</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>وارد کنید..&lt;br/&gt عبارت عبور نو در پنجره + 10 یا بیشتر کاراکتورهای تصادفی استفاده کنید &lt;b&gt لطفا عبارت عبور</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>رمز بندی پنجره</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>این عملیت نیاز عبارت عبور پنجره شما دارد برای رمز گشایی آن</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>تکرار عبارت عبور نو</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>این عملیت نیاز عبارت عبور شما دارد برای رمز بندی آن</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>رمز بندی پنجره</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>تغییر عبارت عبور</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>عبارت عبور نو و قدیم در پنجره وارد کنید</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>تایید رمز گذاری</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>هشدار اگر شما روی پنجره رمز بگذارید و عبارت عبور فراموش کنید همه بیتکویینس شما گم می کنید. متماینید کن که می خواهید رمز بگذارید</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>تغییر عبارت عبور</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Biticon هم اکنون بسته میشود تا فرایند رمزگذاری را تمام کند. به خاطر داشته باشید که رمزگذاری کیف پولتان نمیتواند به طور کامل بیتیکونهای شما را در برابر دزدیده شدن توسط بدافزارهایی که رایانه شما را آلوده میکنند، محافظت نماید.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>هشدار: کلید حروف بزرگ روشن است.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>عبارت عبور نو و قدیم در پنجره وارد کنید</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>تنا موفق رمز بندی پنجره ناشی از خطای داخل شد. پنجره شما مرز بندی نشده است</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>عبارت عبور عرضه تطابق نشد</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>نجره رمز گذار شد</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>اموفق رمز بندی پنجر</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>ناموفق رمز بندی پنجره</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>عبارت عبور با موفقیت تغییر شد</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>پنجره بیتکویین</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>همگام سازی با شبکه ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>همگام زنجیر بلوک در حال پیشرفت</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>بررسی اجمالی</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>نمای کلی پنجره نشان بده</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&amp;معاملات</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>نمایش تاریخ معاملات</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>دفتر آدرس</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>ویرایش لیست آدرسها و بر چسب های ذخیره ای</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>در یافت سکه</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>نمایش لیست آدرس ها برای در یافت پر داخت ها</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>رسال سکه ها</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>ارسال سکه به آدرس بیتکویین </translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>امضای &پیام</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>اثبات کنید که روی یک نشانی کنترل دارید</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>خروج</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>خروج از برنامه </translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&حدود%1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>نمایش اطلاعات در مورد بیتکویین</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>درباره &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>نمایش اطلاعات درباره Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>تنظیمات...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>صلاح تنظیمات برای بیتکویین</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>باز کردن &amp;بیتکویین </translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>نمایش پنجره بیتکویین</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&;صادرات</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&رمز بندی پنجره</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>رمز بندی یا رمز گشایی پنجره</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>تغییر عبارت عبور</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>عبارت عبور رمز گشایی پنجره تغییر کنید</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>فایل</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>تنظیمات</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>کمک</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>نوار ابزار زبانه ها</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>نوار ابزار عملیت</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>آزمایش شبکه</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>بیتکویین</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>در صد ارتباطات فعال بیتکویین با شبکه %n</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation> %1 %2 دانلود 1% 2% بلوک معاملات</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>دانلود بلوکهای معملات %1</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n بعد از چند دقیقه</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n بعد از چند دقیقه </numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n بعد از چند دقیقه </numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n بعد از چند روزز </numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>تا تاریخ</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>ابتلا به بالا</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>خرین بلوک در یافت شده تولید شده بود %1 </translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>این معامله از اندازه محدوده بیشتر است. شما می توانید آد را با دستمزد 1% بفرستید که شامل گره معامله شما می باشد و به شبکه های اینترنتی کمک خواهد کردو آیا شما می خواهید این پول پر داخت%1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>ارسال...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>معامله ارسال شده</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>معامله در یافت شده</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>تاریخ %1 +مبلغ%2 +نوع %3 +آدرس %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>زمایش شبکهه</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>زمایش شبکه</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&;واحد نمایش مبلغ</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>زیر بخش پیش فرض در واسط انتخاب کنید و سکه ها ارسال کنید</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>نمایش آدرس ها در لیست معامله</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>اصلاح آدرس</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>بر چسب</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>بر چسب با دفتر آدرس ورود مرتبط است</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>آدرس</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>آدرس با دفتر آدرس ورودی مرتبط است. این فقط در مورد آدرسهای ارسال شده است</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>آدرس در یافت نو</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>آدرس ارسال نو</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>اصلاح آدرس در یافت</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>اصلاح آدرس ارسال</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>%1آدرس وارد شده دیگر در دفتر آدرس است</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>آدرس وارد شده آدرس معتبر بیتکویید نیست %1 </translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>رمز گشایی پنجره امکان پذیر نیست</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>کلید نسل جدید ناموفق است</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>شروع بیتکویین از پنجره سیستم استارت</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>شروع بیتکویین اتوماتین بعد از روشن کامپیوتر</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>حد اقل رساندن در جای نوار ابزار ها</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>نمایش فقط نماد سینی بعد از حد اقل رساندن پنجره</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>درگاه با استفاده از</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>اتوماتیک باز کردن بندر بیتکویین در روتر . این فقط در مواردی می باشد که روتر با کمک یو پ ن پ کار می کند</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>حد اقل رساندن در نزدیک</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>حد اقل رساندن در جای خروج بر نامه وقتیکه پنجره بسته است.وقتیکه این فعال است برنامه خاموش می شود بعد از انتخاب دستور خاموش در منیو</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>ارتباط با توسط</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>وسل به شبکه بیتکویین با توسط</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>درس پروکسی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>درس پروکسی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>پورت پروکسی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>ورت پروکسی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>نرخ اختیاری تراکنش هر کیلوبایت که به شما کمک میکند اطمینان پیدا کنید که تراکنشها به سرعت پردازش میشوند. بیشتر تراکنشها ۱ کیلوبایت هستند. نرخ 0.01 پیشنهاد میشود.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>دستمزد&amp;پر داخت معامله</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>نرخ اختیاری تراکنش هر کیلوبایت که به شما کمک میکند اطمینان پیدا کنید که تراکنشها به سرعت پردازش میشوند. بیشتر تراکنشها ۱ کیلوبایت هستند. نرخ 0.01 پیشنهاد میشود.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>پیام</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>آدرس برای ارسال پر داخت (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>آدرس از دفتر انتخاب کنید </translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>آدرس از تخته رسم گیره دار پست کنید </translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>پیامی را که میخواهید امضا کنید در اینجا وارد کنید</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>روی «امضای پیام» کلیک کنید تا امضا را دریافت نمایید</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>یک پیام را امضا کنید تا ثابت کنید صاحب این نشانی هستید</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&امضای پیام</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>آدرس انتخاب شده در سیستم تخته رسم گیره دار کپی کنید</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>کپی در تخته رسم گیره دار</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>خطا در امضا</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 یک نشانی معتبر نیست.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>کلید خصوصی برای %1 در دسترس نیست.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>امضا موفق نبود</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>صلی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>دیسپلی</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>اصلی</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>تراز</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>راز:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 بتس</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>تعداد معامله</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>تایید نشده</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 </translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">⏎ +<html><head><meta name="qrichtext" content="1" /><style type="text/css">⏎ +p, li { white-space: pre-wrap; }⏎ +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">⏎ +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">کیف پول</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation>اخرین معاملات&lt</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>تزار جاری شما</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>تعداد معاملات که تایید شده ولی هنوز در تزار جاری شما بر شمار نرفته است</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>تعداد معاملات در صندوق</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>تگفتگو</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>کد QR</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>درخواست پرداخت</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>مقدار:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>برچسب:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>پیام</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&ذخیره به عنوان...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>ارسال سکه ها</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>ارسال چندین در یافت ها فورا</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&;در یافت کننده اضافه کنید ...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>پاک کردن تمام ستونهای تراکنش</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>>همه چیز پاک کنید</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>تزار :</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 بتس</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>عملیت دوم تایید کنید</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&;ارسال</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation>(%3) تا <b>%1</b> درصد%2</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>ارسال سکه ها تایید کنید</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation> %1شما متماینید که می خواهید 1% ارسال کنید ؟</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation>و</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>آدرس در یافت دو باره چک کنید</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>مبلغ پر داخت باید از 0 بیشتر باشد </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>مبلغ از تزار بیشتر است </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>مجموعه از تزار شما بیشتر می باشد وقتیکه 1% معامله شامل می شود %1 </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>نشانی تکراری مشاهده شد. در یک عملیات ارسال فقط میتوان یک بار به هر نشانی ارسال کرد</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>خطا ایجاد معامله اشتباه است</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>خطا . معامله رد شد.این هنگامی که سکه ها در والت شما هنوز ارسال شده اند ولی شما کپی والت استفاده می کنید و سکه ها روی کپی فرستاده شده اند و به عنوان ارسال شنه مشخص نشده اتفاقی می افتد.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>تراز</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>A&amp;مبلغ :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>به&amp;پر داخت :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>برای آدرس بر پسب وارد کنید که در دفتر آدرس اضافه شود</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>& بر چسب </translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>آدرس برای ارسال پر داخت (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>اآدرسن ازدفتر آدرس انتخاب کنید</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>آدرس از تخته رسم گیره دار پست کنید </translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>بر داشتن این در یافت کننده</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>آدرس بیتکویین وارد کنید (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>باز کردن 1% بلوک 1%1 </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>باز کردن تا%1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1 انلاین نیست </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1 تایید نشده </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>ایید %1 </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation>&lt;b&gt;وضعیت :&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>هنوز با مو فقیت ارسال نشده</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>ارسال توسط گره %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>رسال توسط گره های %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation>&lt;b&gt;تاریخ :&lt;/b&gt</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation>&lt;b&gt;منبع :&lt;/b&gt; Generated&lt;br&gt</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation>&lt;b&gt;از:&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>مشخص نیست </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation>&lt;b&gt;به :&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation>مال شما ، بر چسب( </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>مال شما) (</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation>&lt;b&gt;اعتبار :&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 )بالغ در بلوک 2% و بیشتر%2</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>قابل قبول نیست ( )</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation>&lt;b&gt;مقدار خالص:&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation>&lt;b&gt;پر داخت معامله :&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation>&lt;b&gt;مبلغ خالص :&lt;/b&gt;</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>پیام</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>مورد نظر</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>شماره تراکنش:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation> برای ارسال واحد های تولید شده باید 120 بلوک باشند. هنگامی که بلون ایجاد می شود به شبکه ارسال می شود تا در زنجیر بلوکها اضافه شود. و گر نه بلوک به غیر قابول و غیر ارسال عوض می شود. این اتفاقی می افتد وقتی که همزمان گره دیگر در بلوک ایجاد می شود.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>جزییات معاملات</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>در این قاب شیشه توصیف دقیق معامله نشان می شود</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>تاریخ</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>نوع</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>ایل جدا </translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>مبلغ</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>بلوک %n باز شده برای</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>از شده تا 1%1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>افلایین (%1)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>تایید نشده (%1/%2)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>تایید شده (%1)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>و بیشتر باشند قابل قابول می شود %n تزار اصلی بعد از اینکه بلوکها</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>این بلوک از دیگر گره ها در یافت نشده بدین دلیل شاید قابل قابول نیست</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>تولید شده ولی قبول نشده</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>در یافت با :</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>دریافتی از</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>ارسال به :</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>پر داخت به خودتان</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>استخراج</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(کاربرد ندارد)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>وضعیت معالمه . عرصه که تعداد تایید نشان می دهد</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>تاریخ و ساعت در یافت معامله</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>نوع معاملات</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>آدرس مقصود معاملات </translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>مبلغ از تزار شما خارج یا وارد شده</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>همه</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>امروز</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>این هفته</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>این ماه</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>ماه گذشته</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>امسال</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>محدوده </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>در یافت با</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>ارسال به</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>به خودتان </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>استخراج</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>یگر </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>برای جستوجو نشانی یا برچسب را وارد کنید</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>حد اقل مبلغ </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>کپی آدرس </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>کپی بر چسب</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>روگرفت مقدار</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>اصلاح بر چسب</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>جزییت نشان بده</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>صادرات تاریخ معامله</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Comma فایل جدا </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>تایید شده</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>تاریخ </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>نوع </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>ر چسب</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>ایل جدا </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>مبلغ</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>آی دی</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>خطای صادرت</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>تا فایل %1 نمی شود نوشت</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>>محدوده</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>به</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>ارسال...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>سخه بیتکویین</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>ستفاده :</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>ارسال فرمان به سرور یا باتکویین</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>لیست فومان ها</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>کمک برای فرمان </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>تنظیمات</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>(: bitcoin.confپیش فرض: )فایل تنظیمی خاص </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>(bitcoind.pidپیش فرض : ) فایل پید خاص</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>سکه های تولید شده</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>تولید سکه ها</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>شروع حد اقل</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>دایرکتور اطلاعاتی خاص</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>(میلی ثانیه )فاصله ارتباط خاص</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>socks4 proxy ارتباط توسط</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>اجازه متغیر دی ان اس برای اضافه گره یا ارتباط</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>برای اتصالات به <port> (پیشفرض: 8333 یا تستنت: 18333) گوش کنید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>حداکثر <n> اتصال با همکاران برقرار داشته باشید (پیشفرض: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>ضافه گره برای ارتباط به</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>ارتباط فقط به گره خاص</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>قابل ارتباطات از بیرون</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>فهرست همکاران را با استفاده از DNS خودراهاندازی نکنید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>آستانه برای قطع ارتباط با همکاران بدرفتار (پیشفرض: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>مدت زمان به ثانیه برای جلوگیری از همکاران بدرفتار برای اتصال دوباره (پیشفرض: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>حداکثر بافر دریافتی در هر اتصال، 1000*<n> (پیشفرض: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>حداکثر بافر ارسالی در هر اتصال، 1000*<n> (پیشفرض: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>برای ترسیم بندر شنیدنی UPnP استفاده</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>برای ترسیم بندر شنیدنی UPnP استفاده</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>نرخ هر کیلوبایت برای اضافه کردن به تراکنشهایی که میفرستید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>JSON-RPC قابل فرمانها و</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>اجرای در پس زمینه به عنوان شبح و قبول فرمان ها</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>استفاده شبکه آزمایش</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>اطلاعات اشکالزدایی اضافی خروجی</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>به خروجی اشکالزدایی برچسب زمان بزنید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>اطلاعات ردگیری/اشکالزدایی را به جای فایل لاگ اشکالزدایی به کنسول بفرستید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>اطلاعات ردگیری/اشکالزدایی را به اشکالزدا بفرستید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>JSON-RPC شناسه برای ارتباطات</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>JSON-RPC عبارت عبور برای ارتباطات</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>( 8332پیش فرض :) &lt;poort&gt; JSON-RPC شنوایی برای ارتباطات</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>از آدرس آی پی خاص JSON-RPC قبول ارتباطات</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>(127.0.0.1پیش فرض: ) &lt;ip&gt; دادن فرمانها برای استفاده گره ها روی</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation> (100پیش فرض:)&lt;n&gt; گذاشتن اندازه کلید روی </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>اسکان مجدد زنجیر بلوکها برای گم والت معامله</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +( نگاه کنید Bitcoin Wiki در SSLتنظیمات ):SSL گزینه های</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>JSON-RPCبرای ارتباطات استفاده کنید OpenSSL (https)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation> (server.certپیش فرض: )گواهی نامه سرور</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>(server.pemپیش فرض: ) کلید خصوصی سرور</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>رمز های قابل قبول( TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>پیام کمکی</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>رمز گشایی دایرکتور داده ها امکان پذیر نیست. شاید بیت کویین در حال فعال می باشد%s</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>بار گیری آدرس ها</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>خطا در بارگیری addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>خطا در بارگیری blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>خطا در بارگیری wallet.dat: کیف پول خراب شده است</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>خطا در بارگیری wallet.dat: کیف پول به ویرایش جدیدتری از Biticon نیاز دارد</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>سلام</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>خطا در بارگیری wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>بار گیری شاخص بلوک</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>بار گیری والت</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>اسکان مجدد</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>بار گیری انجام شده است</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>آدرس پروکسی معتبر نیست </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>paytxfee=&lt;بالغ &gt;مبلغ نا معتبر</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>خطا : پر داخت خیلی بالا است. این پر داخت معامله است که شما هنگام ارسال معامله باید پر داخت کنید</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>خطا :ایجاد موضوع(گره) اشتباه بود</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>هشدار: جای دیسک پایین است </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>وسل بندر به کامپیوتر امکان پذیر نیست. شاید بیتکویید در حال فعال است%d</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>هشدار: تاریخ و ساعت کامپیوتر شما چک کنید. اگر ساعت درست نیست بیتکویین مناسب نخواهد کار کرد</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>بتا</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts new file mode 100644 index 0000000000..2e8df62f04 --- /dev/null +++ b/src/qt/locale/bitcoin_fa_IR.ts @@ -0,0 +1,1963 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="fa_IR" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>در مورد بیتکویین</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> version</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts new file mode 100644 index 0000000000..8b6481930c --- /dev/null +++ b/src/qt/locale/bitcoin_fi.ts @@ -0,0 +1,1978 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="fi" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Tietoa Bitcoinista</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> versio</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Osoitekirja</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Nämä ovat sinun Bitcoin-osoitteesi suoritusten vastaanottamiseen. Voit halutessasi antaa kullekin lähettäjälle eri osoitteen, jotta voit seurata kuka sinulle maksaa.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Kaksoisnapauta muokataksesi osoitetta tai nimeä</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Luo uusi osoite</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Uusi osoite</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopioi valittu osoite leikepöydälle</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Kopioi leikepöydälle</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Näytä &QR-koodi</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Allekirjoita viesti millä todistat omistavasi tämän osoitteen</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Allekirjoita viesti</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Poista valittuna oleva osoite listasta. Vain lähettämiseen käytettäviä osoitteita voi poistaa.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Poista</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopioi osoite</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopioi nimi</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Muokkaa</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Poista</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Vie osoitekirja</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Comma separated file (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Virhe viedessä osoitekirjaa</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Ei voida kirjoittaa tiedostoon %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Nimi</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Osoite</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(ei nimeä)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialogi</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TekstiMerkki</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Anna tunnuslause</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Uusi tunnuslause</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Toista uusi tunnuslause</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Anna lompakolle uusi tunnuslause.<br/>Käytä tunnuslausetta, jossa on ainakin <b>10 satunnaista mekkiä</b> tai <b>kahdeksan sanaa</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Salaa lompakko</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause sen avaamiseksi.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Avaa lompakko</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause salauksen purkuun.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Pura lompakon salaus</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Vaihda tunnuslause</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Anna vanha ja uusi tunnuslause.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Hyväksy lompakon salaus</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>VAROITUS: Mikäli salaat lompakkosi ja unohdat tunnuslauseen, <b>MENETÄT LOMPAKON KOKO SISÄLLÖN</b>! +Tahdotko varmasti salata lompakon?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Lompakko salattu</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin sulkeutuu lopettaessaan salausprosessin. Muista että salattu lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Varoitus: Caps Lock on päällä.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Lompakon salaus epäonnistui</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Lompakon salaaminen epäonnistui sisäisen virheen vuoksi. Lompakkoa ei salattu.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Annetut tunnuslauseet eivät täsmää.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Lompakon avaaminen epäonnistui.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Annettu tunnuslause oli väärä.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Lompakon salauksen purku epäonnistui.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Lompakon tunnuslause on vaihdettu.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin-lompakko</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synkronoidaan verkon kanssa...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Block chainin synkronointi kesken</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Yleisnäkymä</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Näyttää kokonaiskatsauksen lompakon tilanteesta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Rahansiirrot</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Selaa rahansiirtohistoriaa</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Osoitekirja</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Muokkaa tallennettujen nimien ja osoitteiden listaa</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Bitcoinien vastaanottaminen</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Näytä Bitcoinien vastaanottamiseen käytetyt osoitteet</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Lähetä Bitcoineja</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Lähetä Bitcoin-osoitteeseen</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Allekirjoita &viesti</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Todista että hallitset osoitetta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>L&opeta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Lopeta ohjelma</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&Tietoja %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Näytä tietoa Bitcoin-projektista</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Tietoja &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Näytä tietoja QT:ta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Asetukset...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Muokkaa asetuksia</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Avaa &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Näytä Bitcoin-ikkuna</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Vie...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Vie aukiolevan välilehden tiedot tiedostoon</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Salaa lompakko</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Kryptaa tai dekryptaa lompakko</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>&Varmuuskopioi lompakko</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>Varmuuskopioi lompakko toiseen sijaintiin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Vaihda tunnuslause</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Vaihda lompakon salaukseen käytettävä tunnuslause</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Tiedosto</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Asetukset</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Apua</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Välilehtipalkki</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Toimintopalkki</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktiivinen yhteys Bitcoin-verkkoon</numerusform><numerusform>%n aktiivista yhteyttä Bitcoin-verkkoon</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Ladattu %1 of %2 rahansiirtohistorian lohkoa.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Ladattu %1 lohkoa rahansiirron historiasta.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n sekunti sitten</numerusform><numerusform>%n sekuntia sitten</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n minuutti sitten</numerusform><numerusform>%n minuuttia sitten</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n tunti sitten</numerusform><numerusform>%n tuntia sitten</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n päivä sitten</numerusform><numerusform>%n päivää sitten</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Ohjelmisto on ajan tasalla</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Kurotaan kiinni...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Viimeisin vastaanotettu lohko tuotettu %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Tämä rahansiirto ylittää kokorajoituksen. Voit siitä huolimatta lähettää sen %1 siirtopalkkion mikä menee solmuille jotka käsittelevät rahansiirtosi tämä auttaa myös verkostoa. Haluatko maksaa siirtopalkkion? </translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Lähetetään...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Lähetetyt rahansiirrot</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Saapuva rahansiirto</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Päivä: %1 +Määrä: %2 +Tyyppi: %3 +Osoite: %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Lompakko on <b>salattu</b> ja tällä hetkellä <b>avoinna</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Lompakko on <b>salattu</b> ja tällä hetkellä <b>lukittuna</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Varmuuskopioi lompakko</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Lompakkodata (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>Varmuuskopio epäonnistui</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Virhe tallennettaessa lompakkodataa uuteen sijaintiin.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Yksikkö, jossa määrät näytetään: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Valitse oletus lisämääre mikä näkyy käyttöliittymässä ja kun lähetät kolikoita</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Näytä osoitteet rahansiirtoluettelossa</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Muokkaa osoitetta</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Nimi</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Tähän osoitteeseen liitetty nimi</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Osoite</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Osoite, joka liittyy tämän osoitekirjan merkintään. Tätä voidaan muuttaa vain lähtevissä osoitteissa.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Uusi vastaanottava osoite</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Uusi lähettävä osoite</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Muokkaa vastaanottajan osoitetta</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Muokkaa lähtevää osoitetta</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Osoite "%1" on jo osoitekirjassa.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Osoite "%1" ei ole kelvollinen Bitcoin-osoite.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Lompakkoa ei voitu avata.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Uuden avaimen luonti epäonnistui.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Käynnistä Bitcoin kun kirjaudutaan sisään</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Käynnistä Bitcoin automaattisesti, kun tietokone kytketään päälle</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Pienennä ilmaisinalueelle työkalurivin sijasta</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Näytä ainoastaan pikkukuvake ikkunan pienentämisen jälkeen</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Portin uudelleenohjaus &UPnP:llä</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Avaa Bitcoin-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>P&ienennä ikkuna suljettaessa</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Ikkunaa suljettaessa vain pienentää Bitcoin-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Yhdistä SOCKS4-välityspalvelimen kautta:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Yhdistä Bitcoin-verkkoon SOCKS4-välityspalvelimen kautta (esimerkiksi käyttäessä Tor:ia)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Palvelimen &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Välityspalvelimen IP-osoite (esim. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Portti: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Portti, johon Bitcoin-asiakasohjelma yhdistää (esim. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Vapaaehtoinen rahansiirtopalkkio per kB auttaa nopeuttamaan siirtoja. Useimmat rahansiirrot ovat 1 kB. 0.01 palkkio on suositeltava.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Maksa rahansiirtopalkkio</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Vapaaehtoinen rahansiirtopalkkio per kB auttaa nopeuttamaan siirtoja. Useimmat rahansiirrot ovat 1 kB. 0.01 palkkio on suositeltava.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Viesti</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Voit allekirjoittaa viestit omalla osoitteellasi todistaaksesi että omistat ne. Ole huolellinen, että et allekirjoita mitään epämääräistä, phishing-hyökkääjät voivat huijata sinua allekirjoittamaan luovuttamalla henkilöllisyytesi. Allekirjoita selvitys täysin yksityiskohtaisesti mihin olet sitoutunut.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Osoite, johon Bitcoinit lähetetään (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Valitse osoite osoitekirjasta</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Liitä osoite leikepöydältä</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Kirjoita tähän viesti minkä haluat allekirjoittaa</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Klikkaa "Allekirjoita viesti" saadaksesi allekirjoituksen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Allekirjoita viesti millä todistat omistavasi tämän osoitteen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Allekirjoita viesti</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopioi valittu osoite leikepöydälle</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopioi leikepöydälle</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Virhe allekirjoitettaessa</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 ei ole kelvollinen osoite.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Yksityisavain %1 :lle ei ole saatavilla.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Allekirjoittaminen epäonnistui</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Yleiset</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Näyttö</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Asetukset</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Lomake</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Rahansiirtojen lukumäärä:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Vahvistamatta:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Lompakko</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Viimeisimmät rahansiirrot</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Tililläsi tällä hetkellä olevien Bitcoinien määrä</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Niiden saapuvien rahansiirtojen määrä, joita Bitcoin-verkko ei vielä ole ehtinyt vahvistaa ja siten eivät vielä näy saldossa.</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Lompakolla tehtyjen rahansiirtojen yhteismäärä</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialogi</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR-koodi</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Vastaanota maksu</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Määrä:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Tunniste:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Viesti:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Tallenna nimellä...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Tallenna kuva...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG kuvat (*png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Lähetä Bitcoineja</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Lähetä monelle vastaanottajalle</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Lisää vastaanottaja...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Poista kaikki rahansiiron kentät</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Tyhjennä lista</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Vahvista lähetys</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Lähetä</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> to %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Hyväksy Bitcoinien lähettäminen</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Haluatko varmasti lähettää %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> ja </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Vastaanottajan osoite ei kelpaa, ole hyvä ja tarkista</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Maksettavan summan tulee olla suurempi kuin 0 Bitcoinia.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Määrä on suurempi kuin tilisi tämänhetkinen saldo.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Kokonaissumma ylittäää tilisi saldon, kun siihen lisätään %1 BTC rahansiirtomaksu.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Tuplaosite löytynyt, voit ainoastaan lähettää kunkin osoitteen kerran yhdessä lähetysoperaatiossa.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Virhe: Rahansiirron luonti epäonnistui</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Virhe: Rahansiirto hylättiin. Tämä voi tapahtua jos jotkin bitcoineistasi on jo käytetty, esimerkiksi jos olet käyttänyt kopiota wallet.dat-lompakkotiedostosta ja bitcoinit on merkitty käytetyksi vain kopiossa.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Lomake</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>M&äärä:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Maksun saaja:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Anna nimi tälle osoitteelle, jos haluat lisätä sen osoitekirjaan</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Nimi:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Osoite, johon Bitcoinit lähetetään (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Valitse osoite osoitekirjasta</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Liitä osoite leikepöydältä</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Poista </translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Anna Bitcoin-osoite (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Avoinna %1 lohkolle</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Avoinna %1 asti</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/ei linjalla?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/vahvistamaton</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 vahvistusta</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Tila:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, ei ole vielä onnistuneesti lähetetty</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, lähetetään %1 solmun kautta</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, lähetetään %1 solmunkautta</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Päivä:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Lähde:</b> Generoitu<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Lähettäjä:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>tuntematon</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Vast. ott.:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation>(sinun, tunniste: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(sinun)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Krediitti:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 erääntyy %2 useammassa lohkossa)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(ei hyväksytty)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Rahansiirtomaksu:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Nettomäärä:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Viesti:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Kommentti:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Rahansiirron ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Luotujen kolikoiden on odotettava 120 lohkoa ennen kuin ne voidaan käyttää. Kun loit tämän lohkon, se lähetettiin verkkoon lisättäväksi lohkoketjuun. Jos se epäonnistuu ketjuun liittymisessä, se tila tulee muuttumaan "ei hyväksytty" eikä sitä voi käyttää. Tätä voi silloin tällöin esiintyä jos toinen solmu luo lohkon muutamia sekunteja omastasi.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Rahansiirron yksityiskohdat</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Tämä ruutu näyttää yksityiskohtaisen tiedon rahansiirrosta</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Päivämäärä</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Laatu</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Osoite</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Määrä</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Auki %n lohkolle</numerusform><numerusform>Auki %n lohkoille</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Avoinna %1 asti</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Ei yhteyttä verkkoon (%1 vahvistusta)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Vahvistamatta (%1/%2 vahvistusta)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Vahvistettu (%1 vahvistusta)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Louhittu saldo tulee saataville %n lohkossa</numerusform><numerusform>Louhittu saldo tulee saataville %n lohkossa</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Tätä lohkoa ei vastaanotettu mistään muusta solmusta ja sitä ei mahdollisesti hyväksytty!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Generoitu mutta ei hyväksytty</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Vastaanotettu osoitteella</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Vastaanotettu</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Saaja</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Maksu itsellesi</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Louhittu</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(ei saatavilla)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Rahansiirron tila. Siirrä osoitin kentän päälle nähdäksesi vahvistusten lukumäärä.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Rahansiirron vastaanottamisen päivämäärä ja aika.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Rahansiirron laatu.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Rahansiirron kohteen Bitcoin-osoite</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Saldoon lisätty tai siitä vähennetty määrä.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Kaikki</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Tänään</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Tällä viikolla</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Tässä kuussa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Viime kuussa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Tänä vuonna</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Alue...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Vastaanotettu osoitteella</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Saaja</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Itsellesi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Louhittu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Muu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Anna etsittävä osoite tai tunniste</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Minimimäärä</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopioi osoite</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopioi nimi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopioi määrä</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Muokkaa nimeä</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Näytä tarkemmat tiedot...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Vie transaktion tiedot</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Comma separated file (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Vahvistettu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Aika</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Laatu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Nimi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Osoite</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Määrä</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Virhe tietojen viennissä</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Ei voida kirjoittaa tiedostoon %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Alue:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>kenelle</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Lähetetään...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoinin versio</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Käyttö:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Lähetä käsky palvelimelle tai bitcoind:lle</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Lista komennoista</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Hanki apua käskyyn</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Asetukset:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Määritä asetustiedosto (oletus: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Määritä pid-tiedosto (oletus: bitcoin.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generoi kolikoita</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Älä generoi kolikoita</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Käynnistä pienennettynä</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Määritä data-hakemisto</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Määritä yhteyden aikakatkaisu (millisekunneissa)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Yhteys socks4-proxyn kautta</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Salli DNS haut lisäsolmulle ja yhdistä</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Kuuntele yhteyksiä portista <port> (oletus: 8333 tai testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Pidä enintään <n> yhteyttä verkkoihin (oletus: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Lisää solmu mihin yhdistetään</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Ota yhteys vain tiettyyn solmuun</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Älä hyväksy ulkopuolisia yhteyksiä</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Älä alkulataa listaa verkoista DNS:ää käyttäen</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Kynnysarvo aikakatkaisulle heikosti toimiville verkoille (oletus: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Sekuntien määrä, kuinka kauan uudelleenkytkeydytään verkkoihin (oletus: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimi verkkoyhteyden vastaanottopuskuri, <n>*1000 tavua (oletus: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimi verkkoyhteyden lähetyspuskuri, <n>*1000 tavua (oletus: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Älä käytä UPnP toimintoa kartoittamaan avointa porttia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Yritä käyttää UPnP toimintoa kartoittamaan avointa porttia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>palkkio per kB lisätty lähettämiisi rahansiirtoihin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Hyväksy merkkipohjaiset- ja JSON-RPC-käskyt</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Aja taustalla daemonina ja hyväksy komennot</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Käytä test -verkkoa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Tulosta ylimääräistä debuggaustietoa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Lisää debuggaustiedon tulostukseen aikaleima</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Lähetä jäljitys/debug-tieto konsoliin, debug.log-tiedoston sijaan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Lähetä jäljitys/debug-tieto debuggeriin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Käyttäjätunnus JSON-RPC-yhteyksille</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Salasana JSON-RPC-yhteyksille</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Kuuntele JSON-RPC -yhteyksiä portista <port> (oletus: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Salli JSON-RPC yhteydet tietystä ip-osoitteesta</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Lähetä käskyjä solmuun osoitteessa <ip> (oletus: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Aseta avainpoolin koko arvoon <n> (oletus: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Skannaa uudelleen lohkoketju lompakon puuttuvien rahasiirtojen vuoksi</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation>SSL-asetukset: (lisätietoja Bitcoin-Wikistä)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Käytä OpenSSL:ää (https) JSON-RPC-yhteyksille</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Palvelimen sertifikaatti-tiedosto (oletus: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Palvelimen yksityisavain (oletus: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Hyväksyttävä salaus (oletus: +TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Tämä ohjeviesti</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>En pääse käsiksi data-hakemiston lukitukseen %s. Bitcoin on todennäköisesti jo käynnistetty.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Ladataan osoitteita...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Virhe ladattaessa addr.dat-tiedostoa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Virhe ladattaessa blkindex.dat-tiedostoa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Virhe ladattaessa wallet.dat-tiedostoa: Lompakko vioittunut</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version Bitcoinista</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Lompakko tarvitsee uudelleenkirjoittaa: käynnistä Bitcoin uudelleen</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Virhe ladattaessa wallet.dat-tiedostoa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Ladataan lohkoindeksiä...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Ladataan lompakkoa...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Skannataan uudelleen...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Lataus on valmis</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Virheellinen proxy-osoite</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Virheellinen määrä -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Varoitus:-paytxfee on erittäin korkea. Tämä on palkkio siirrosta minkä suoritat rahansiirrosta.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Virhe: CreateThread(StartNode) epäonnistui</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Varoitus: Kiintolevytila on loppumassa </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>En pysty varaamaan porttia %d tähän koneeseen. Ehkä Bitcoin on jo käynnissä.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Varoitus: Tarkista, ovatko tietokoneesi päivämäärä ja aika oikein. Mikäli aika on väärin, Bitcoin-ohjelma ei toimi oikein.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts new file mode 100644 index 0000000000..cc0a0fd59f --- /dev/null +++ b/src/qt/locale/bitcoin_fr_CA.ts @@ -0,0 +1,1963 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="fr_CA" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>A propos de Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> version</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Carnet d'adresses</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Ceux-ci sont vos adresses Bitcoin qui vous permettent de recevoir des paiements. Vous pouvez en donner une différente à chaque expédieur afin de savoir qui vous payent.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Double-cliquez afin de modifier l'adress ou l'étiquette</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Créer une nouvelle adresse</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>$Nouvelle Adresse</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copier l'adresse surligné a votre presse-papier</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Copier dans le presse papier</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Supprimer l'adresse sélectionnée dans la liste. Seules les adresses d'envoi peuvent être supprimé.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exporter les données du carnet d'adresses</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copier l'adresse surligné a votre presse-papier</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copier dans le presse papier</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_fr_FR.ts b/src/qt/locale/bitcoin_fr_FR.ts new file mode 100644 index 0000000000..08cea95b93 --- /dev/null +++ b/src/qt/locale/bitcoin_fr_FR.ts @@ -0,0 +1,1979 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="fr_FR" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>À propos de Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> version</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Copyright © 2009-2012 Développeurs de Bitcoin + +Ce logiciel est en phase expérimentale. + +Distribué sous licence MIT/X11, voir le fichier license.txt ou http://www.opensource.org/licenses/mit-license.php. + +Ce produit inclut des logiciels développés par OpenSSL Project pour utilisation dans le OpenSSL Toolkit (http://www.openssl.org/), un logiciel cryptographique écrit par Eric Young (eay@cryptsoft.com) et un logiciel UPnP écrit par Thomas Bernard.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Carnet d'adresses</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Voici vos adresses Bitcoin qui vous permettent de recevoir des paiements. Vous pouvez donner une adresse différente à chaque expéditeur afin de savoir qui vous paye.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Double cliquez afin de modifier l'adresse ou l'étiquette</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Créer une nouvelle adresse</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nouvelle Adresse...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copier l'adresse surlignée dans votre presse-papiers</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Copier dans le presse-papiers</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Afficher le &QR Code</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Signer un message pour prouver que vous détenez cette adresse</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Signer un message</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Supprimer l'adresse sélectionnée dans la liste. Seules les adresses d'envoi peuvent être supprimées.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copier l'adresse</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copier l'étiquette</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Éditer</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Effacer</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exporter les données du carnet d'adresses</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Valeurs séparées par des virgules (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Erreur lors de l'exportation</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Impossible d'écrire sur le fichier %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Étiquette</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresse</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(aucune étiquette)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialogue</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TextLabel</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Entrez la phrase de passe</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nouvelle phrase de passe</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Répétez la phrase de passe</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Entrez une nouvelle phrase de passe pour le porte-monnaie.<br/>Veuillez utiliser une phrase de <b>10 caractères au hasard ou plus</b> ou bien de <b>huit mots ou plus</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Chiffrer le porte-monnaie</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Cette opération nécessite votre phrase de passe pour déverrouiller le porte-monnaie.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Déverrouiller le porte-monnaie</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Cette opération nécessite votre phrase de passe pour décrypter le porte-monnaie.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Décrypter le porte-monnaie</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Changer la phrase de passe</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Entrez l’ancienne phrase de passe pour le porte-monnaie ainsi que la nouvelle.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Confirmer le chiffrement du porte-monnaie</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>ATTENTION : Si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS BITCOINS</b> ! +Êtes-vous sûr de vouloir chiffrer votre porte-monnaie ?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Porte-monnaie chiffré</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin va à présent se fermer pour terminer la procédure de cryptage. N'oubliez pas que le chiffrement de votre porte-monnaie ne peut pas fournir une protection totale contre le vol par des logiciels malveillants qui infecteraient votre ordinateur.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Attention : la touche Verrouiller Maj est activée.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Le chiffrement du porte-monnaie a échoué</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Le chiffrement du porte-monnaie a échoué en raison d'une erreur interne. Votre porte-monnaie n'a pas été chiffré.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Les phrases de passe entrées ne correspondent pas.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Le déverrouillage du porte-monnaie a échoué</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>La phrase de passe entrée pour décrypter le porte-monnaie était incorrecte.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Le décryptage du porte-monnaie a échoué</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>La phrase de passe du porte-monnaie a été modifiée avec succès.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Porte-monnaie Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synchronisation avec le réseau...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Synchronisation de la chaîne de blocs en cours</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Vue d'ensemble</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Affiche une vue d'ensemble du porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transactions</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Permet de parcourir l'historique des transactions</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>Carnet d'&adresses</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Éditer la liste des adresses et des étiquettes stockées</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Recevoir des pièces</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Affiche la liste des adresses pour recevoir des paiements</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Envoyer des pièces</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Envoyer des pièces à une adresse bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Signer un &message</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Prouver que vous contrôlez une adresse</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>Q&uitter</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Quitter l'application</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&À propos de %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Afficher des informations à propos de Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>À propos de &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Afficher des informations sur Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Options...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Modifier les options de configuration pour bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Ouvrir &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Afficher la fenêtre de Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Exporter...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Exporter les données de l'onglet courant vers un fichier</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Chiffrer le porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Chiffrer ou décrypter le porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>&Sauvegarder le porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>Sauvegarder le porte-monnaie à un autre emplacement</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Modifier la phrase de passe</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Modifier la phrase de passe utilisée pour le cryptage du porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Fichier</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Réglages</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Aide</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Barre d'outils des onglets</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Barre d'outils des actions</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n connexion active avec le réseau Bitcoin</numerusform><numerusform>%n connexions actives avec le réseau Bitcoin</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>%1 blocs de l'historique des transactions téléchargés sur un total de %2.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>%1 blocs de l'historique de transaction téléchargé.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>il y a %n seconde</numerusform><numerusform>il y a %n secondes</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>il y a %n minute</numerusform><numerusform>il y a %n minutes</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>il y a %n heure</numerusform><numerusform>il y a %n heures</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>il y a %n jour</numerusform><numerusform>il y a %n jours</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>À jour</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Rattrapage...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Le dernier bloc reçu a été généré %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Cette transaction dépasse la limite de taille. Vous pouvez quand-même l'envoyer en vous acquittant de frais d'un montant de %1, qui iront aux nœuds qui traitent la transaction et aideront à soutenir le réseau. Voulez-vous payer les frais ?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Envoi en cours...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Transaction envoyée</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Transaction entrante</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Date : %1 +Montant : %2 +Type : %3 +Adresse : %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Le porte-monnaie est <b>chiffré</b> et est actuellement <b>déverrouillé</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Le porte-monnaie est <b>chiffré</b> et est actuellement <b>verrouillé</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Sauvegarder le porte-monnaie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Données de porte-monnaie (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>La sauvegarde a échoué</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Une erreur est survenue lors de l'enregistrement des données de porte-monnaie à un autre emplacement.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Unité d'affichage des montants : </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Choisissez la sous-unité par défaut pour l'affichage dans l'interface et lors de l'envoi de pièces</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Afficher les adresses dans la liste des transactions</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Éditer l'adresse</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Étiquette</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>L'étiquette associée à cette entrée du carnet d'adresses</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresse</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>L'adresse associée avec cette entrée du carnet d'adresses. Ne peut être modifiée que pour les adresses d'envoi.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nouvelle adresse de réception</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nouvelle adresse d'envoi</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Éditer l'adresse de réception</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Éditer l'adresse d'envoi</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>L'adresse fournie « %1 » est déjà présente dans le carnet d'adresses.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>L'adresse fournie « %1 » n'est pas une adresse bitcoin valide.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Impossible de déverrouiller le porte-monnaie.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Échec de la génération de la nouvelle clef.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Démarrer Bitcoin avec le système de fenêtres</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Lancer automatiquement Bitcoin lorsque l'ordinateur est allumé</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimiser dans la barre système au lieu de la barre des tâches</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Montrer uniquement une icône système après minimisation</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Ouvrir le port avec l'&UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Ouvrir le port du client Bitcoin automatiquement sur le routeur. Cela ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimiser lors de la fermeture</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimiser au lieu quitter l'application lorsque la fenêtre est fermée. Lorsque cette option est activée, l'application ne pourra être fermée qu'en sélectionnant Quitter dans le menu déroulant.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Connexion à travers un proxy SOCKS4 :</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Connexion au réseau Bitcoin à travers un proxy SOCKS4 (par ex. lors d'une connexion via Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>&IP du proxy : </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Adresse IP du proxy (par ex. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port : </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port du proxy (par ex. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Frais de transaction optionnels par ko qui aident à garantir un traitement rapide des transactions. La plupart des transactions occupent 1 ko. Des frais de 0.01 sont recommandés.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Payer des &frais de transaction</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Frais de transaction optionnels par ko qui aident à garantir un traitement rapide des transactions. La plupart des transactions occupent 1 ko. Des frais de 0.01 sont recommandés.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Message</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Vous pouvez signer des messages avec vos adresses pour prouver que les détenez. Faites attention à ne pas signer quoi que ce soit de vague car des attaques d'hameçonnage peuvent essayer d'obtenir votre identité par votre signature. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous serez d'accord.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>L'adresse à laquelle le paiement sera envoyé (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Choisir une adresse depuis le carnet d'adresses</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Coller une adresse depuis le presse-papiers</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Entrez ici le message que vous désirez signer</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Cliquez sur « Signer le message » pour obtenir la signature</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Signer le message pour prouver que vous détenez cette adresse</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Signer le message</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copier l'adresse surlignée dans votre presse-papiers</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copier dans le presse-papiers</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Une erreur est survenue lors de la signature</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 n'est pas une adresse valide.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>La clef privée pour %1 n'est pas disponible.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Échec de la signature</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Principal</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Affichage</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Options</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Solde :</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Nombre de transactions :</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Non confirmé :</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Porte-monnaie</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Transactions récentes</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Votre solde actuel</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Total des transactions qui doivent encore être confirmées et qui ne sont pas pris en compte pour le solde actuel</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Nombre total de transactions dans le porte-monnaie</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialogue</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR Code</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Demande de paiement</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Montant :</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Étiquette :</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Message :</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Enregistrer sous...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Enregistrer l'image...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>Images PNG (*.png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Envoyer des pièces</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Envoyer des pièces à plusieurs destinataires à la fois</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Ajouter un destinataire...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Enlever tous les champs de transaction</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Tout effacer</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Solde :</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Confirmez l'action d'envoi</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Envoyer</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> à %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Confirmez l'envoi des pièces</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Êtes-vous sûr de vouloir envoyer %1 ?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> et </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>L'adresse du destinataire n'est pas valide, veuillez la vérifier.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Le montant à payer doit être supérieur à 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Le montant dépasse votre solde</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Le total dépasse votre solde lorsque les frais de transaction de %1 sont inclus</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Adresse dupliquée trouvée, un seul envoi par adresse est possible à chaque opération d'envoi</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Erreur : échec de la création de la transaction </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Erreur : la transaction a été rejetée. Cela peut arriver si certaines pièces de votre porte-monnaie ont déjà été dépensées, par exemple si vous avez utilisé une copie de wallet.dat et si des pièces ont été dépensées avec cette copie sans être marquées comme telles ici.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>&Montant :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Payer &à :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Entrez une étiquette pour cette adresse afin de l'ajouter à votre carnet d'adresses</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Étiquette :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>L'adresse à laquelle le paiement sera envoyé (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Choisir une adresse dans le carnet d'adresses </translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Coller une adresse depuis le presse-papiers</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Enlever ce destinataire</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Entez une adresse Bitcoin (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Ouvert pour %1 blocs</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Ouvert jusqu'à %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/hors ligne ?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/non confirmée</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 confirmations</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>État :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, n'a pas encore été diffusée avec succès</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, diffusée à travers %1 nœud</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, diffusée à travers %1 nœuds</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Date :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Source :</b> Généré<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>De :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>inconnue</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>À :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (vôtre, étiquette : </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (vôtre)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Crédit : </b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 sera considérée comme mûre suite à %2 blocs de plus)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(pas accepté)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Débit : </b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Frais de transaction :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Montant net :</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Message :</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Commentaire :</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID de la transaction :</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Les pièces générées doivent attendre 120 blocs avant de pouvoir être dépensées. Lorsque vous avez généré ce bloc, il a été diffusé sur le réseau pour être ajouté à la chaîne des blocs. S'il échoue a intégrer la chaîne, il sera modifié en « pas accepté » et il ne sera pas possible de le dépenser. Cela peut arriver occasionnellement si un autre nœud génère un bloc quelques secondes avant ou après vous.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Détails de la transaction</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Ce panneau affiche une description détaillée de la transaction</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Date</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresse</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Montant</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Ouvert pour %n bloc</numerusform><numerusform>Ouvert pour %n blocs</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Ouvert jusqu'à %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Hors ligne (%1 confirmations)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Non confirmée (%1 confirmations sur un total de %2)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Confirmée (%1 confirmations)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Le solde d'extraction (mined) sera disponible dans %n bloc</numerusform><numerusform>Le solde d'extraction (mined) sera disponible dans %n blocs</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Ce bloc n'a été reçu par aucun autre nœud et ne sera probablement pas accepté !</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Généré mais pas accepté</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Reçue avec</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Reçue de</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Envoyée à</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Paiement à vous-même</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Extraction</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(indisponible)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Date et heure de réception de la transaction.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Type de transaction.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>L'adresse de destination de la transaction.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Montant ajouté au ou enlevé du solde.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Toutes</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Aujourd'hui</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Cette semaine</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Ce mois</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Mois dernier</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Cette année</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Intervalle...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Reçu avec</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Envoyé à</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>À vous-même</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Extraction</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Autre</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Entrez une adresse ou une étiquette à rechercher</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Montant min</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Copier l'adresse</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Copier l'étiquette</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Copier le montant</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Éditer l'étiquette</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Afficher les détails...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Exporter les données de transaction</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Valeurs séparées par des virgules (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Confirmée</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Date</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Étiquette</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresse</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Montant</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Erreur lors de l'exportation</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Impossible d'écrire sur le fichier %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Intervalle :</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>à</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Envoi en cours...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Version de bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Utilisation :</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Envoyer une commande à -server ou à bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Lister les commandes</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Obtenir de l'aide pour une commande</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Options :</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Spécifier le fichier de configuration (par défaut : bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Spécifier le fichier pid (par défaut : bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Générer des pièces</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Ne pas générer de pièces</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Démarrer sous forme minimisée</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Spécifier le répertoire de données</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Spécifier le délai d'expiration de la connexion (en millisecondes)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Connexion via un proxy socks4</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Autoriser les recherches DNS pour l'ajout de nœuds et la connexion</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Écouter les connexions sur le <port> (par défaut : 8333 ou testnet : 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Garder au plus <n> connexions avec les pairs (par défaut : 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Ajouter un nœud auquel se connecter</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Ne se connecter qu'au nœud spécifié</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Ne pas accepter les connexion depuis l'extérieur</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Ne pas amorcer la liste des pairs en utilisant le DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Seuil de déconnexion des pairs de mauvaise qualité (par défaut : 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Délai en secondes de refus de reconnexion aux pairs de mauvaise qualité (par défaut : 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Tampon maximal de réception par connexion, <n>*1000 octets (par défaut : 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Tampon maximal d'envoi par connexion, <n>*1000 octets (par défaut : 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Ne pas tenter d'utiliser l'UPnP pour ouvrir le port d'écoute</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Essayer d'utiliser l'UPnP pour ouvrir le port d'écoute</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Frais par ko à ajouter aux transactions que vous enverrez</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Accepter les commandes de JSON-RPC et de la ligne de commande</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Fonctionner en arrière-plan en tant que démon et accepter les commandes</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Utiliser le réseau de test</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Informations de débogage supplémentaires</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Faire précéder les données de débogage par un horodatage</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Envoyer les informations de débogage/trace au débogueur</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Nom d'utilisateur pour les connexions JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Mot de passe pour les connexions JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Écouter les connexions JSON-RPC sur le <port> (par défaut : 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Autoriser les connexions JSON-RPC depuis l'adresse IP spécifiée</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Envoyer des commandes au nœud fonctionnant à <ip> (par défaut : 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Régler la taille de la plage de clefs sur <n> (par défaut : 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Réanalyser la chaîne de blocs pour les transactions de porte-monnaie manquantes</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +Options SSL : (cf. le wiki Bitcoin pour les réglages SSL)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Utiliser OpenSSL (https) pour les connexions JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Fichier de certificat serveur (par défaut : server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Clef privée du serveur (par défaut : server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Clefs de chiffrement acceptables (par défaut : TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Ce message d'aide</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Impossible d'obtenir un verrou sur le répertoire de données %s. Bitcoin fonctionne probablement déjà.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Chargement des adresses...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Erreur lors du chargement de addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Erreur lors du chargement de blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Erreur lors du chargement de wallet.dat : porte-monnaie corrompu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Erreur lors du chargement de wallet.dat : le porte-monnaie nécessite une version plus récente de Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Le porte-monnaie nécessitait une réécriture. Veuillez redémarrer Bitcoin pour terminer l'opération</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Erreur lors du chargement de wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Chargement de l'index des blocs...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Chargement du porte-monnaie...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Nouvelle analyse...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Chargement terminé</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Adresse -proxy invalide</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Montant invalide pour -paytxfee=<montant></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Attention : -paytxfee est réglée sur un montant très élevé. Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Erreur : CreateThread(StartNode) a échoué</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Attention : l'espace disque est faible</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Impossible de s'attacher au port %d sur cet ordinateur. Bitcoin fonctionne probablement déjà.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Attention : veuillez vérifier que l'heure et la date de votre ordinateur sont corrects. Si votre horloge n'est pas à l'heure, Bitcoin ne fonctionnera pas correctement.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>bêta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts new file mode 100644 index 0000000000..627245092a --- /dev/null +++ b/src/qt/locale/bitcoin_he.ts @@ -0,0 +1,1977 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="he" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>אודות ביטקוין</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation>גרסת <b>ביטקוין</b></translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>זכויות יוצרים © 2009-2012 שמורות למפתחי ביטקוין + +זוהי תוכנה ניסיונית. + +מופץ תחת רישיון תוכנה MIT/X11, ראה את הקובץ המלווה license.txt או http://www.opensource.org/licenses/mit-license.php. + +המוצר הזה כולל תוכנה שפותחה על ידי פרויקט OpenSSL עבור שימוש בערכת הכלים של OpenSSL (http://www.openssl.org/) ובתוכנה קריפטוגרפית שנכתבה על ידי אריק יאנג (eay@cryptsoft.com) ותוכנת UPnP שנכתבה על ידי תומס ברנרד.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>פנקס כתובות</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>אלה כתובות הביטקוין שלך עבור קבלת תשלומים. אתה עשוי לרצות לתת כתובת שונה לכל שולח כדי שתוכל לעקוב אחר מי משלם לך.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>לחץ לחיצה כפולה לערוך כתובת או תוית</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>יצירת כתובת חדשה</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>כתובת &חדשה</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>העתק את הכתובת המסומנת ללוח העריכה</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&העתק ללוח</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>הצג &קוד QR</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>חתום על הודעה כדי להוכיח שכתובת זו בבעלותך</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>חתום על הו&דעה</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>מחק את הכתובת המסומנת מהרשימה. ניתן למחוק רק כתובות לשליחה.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&מחיקה</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>העתק כתובת</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>העתק תוית</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>ערוך</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>מחק</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>יצוא נתוני פנקס כתובות</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>קובץ מופרד בפסיקים (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>שגיאה ביצוא</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>לא מסוגל לכתוב לקובץ %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>תוית</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>כתובת</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(ללא כתובת)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>שיח</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>טקסטתוית</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>הכנס סיסמא</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>סיסמה חדשה</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>חזור על הסיסמה החדשה</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>הכנס את הסיסמה החדשה לארנק. <br/>אנא השתמש בסיסמה המכילה <b>10 תוים אקראיים או יותר</b>, או <b>שמונה מילים או יותר</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>הצפנת ארנק</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפתוח את הארנק.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>פתיחת ארנק</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפענח את הארנק.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>פענוח ארנק</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>שינוי סיסמה</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>הכנס את הסיסמות הישנה והחדשה לארנק.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>אשר הצפנת ארנק</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>אזהרה: אם תצפין את הארנק שלך ותאבד את הסיסמה אתה <b>תאבד את כל הביטקוין שלך</b>! +אתה בטוח שברצונך להצפין את הארנק?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>הארנק הוצפן</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>ביטקוין ייסגר עכשיו כדי להשלים את תהליך ההצפנה. זכור שהצפנת הארנק שלך אינו יכול להגן באופן מלא על הביטקוינים שלך מתוכנות זדוניות המושתלות על המחשב.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>אזהרה: מקש Caps Lock מופעל.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>הצפנת הארנק נכשלה</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>הצפנת הארנק נכשלה עקב שגיאה פנימית. הארנק שלך לא הוצפן.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>הסיסמות שניתנו אינן תואמות.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>פתיחת הארנק נכשלה</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>הסיסמה שהוכנסה לפענוח הארנק שגויה.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>פענוח הארנק נכשל</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>סיסמת הארנק שונתה בהצלחה.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>ארנק ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>מסתנכרן עם הרשת...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>סנכרון עם שרשרת הבלוקים בעיצומו</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&סקירה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>הצג סקירה כללית של הארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&פעולות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>דפדף בהיסטוריית הפעולות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>פנקס &כתובות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>ערוך את רשימת הכתובות והתויות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&קבלת מטבעות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>הצג את רשימת הכתובות לקבלת תשלומים</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&שלח מטבעות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>שלח מטבעות לכתובת ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>חתום על הו&דעה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>הוכח שאתה שולט בכתובת</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>י&ציאה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>סגור תוכנה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&אודות %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>הצג מידע על ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>אודות Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>הצג מידע על Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&אפשרויות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>שנה הגדרות עבור ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>פתח את &ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>הצג את חלון ביטקוין</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>י&צא</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>יצוא הנתונים בטאב הנוכחי לקובץ</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>הצ&פן ארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>הצפן או פענח ארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>&גיבוי ארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>גיבוי הארנק למקום אחר</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>שנה &סיסמה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>שנה את הסיסמה להצפנת הארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&קובץ</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>ה&גדרות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&עזרה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>סרגל כלים טאבים</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>סרגל כלים פעולות</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[רשת-בדיקה]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>חיבור פעיל אחד לרשת הביטקוין</numerusform><numerusform>%n חיבורים פעילים לרשת הביטקוין</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>הורדו %1 מתוך %2 בלוקים של היסטוריית פעולות.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>הורדו %1 בלוקים של היסטוריית פעולות.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>לפני שניה</numerusform><numerusform>לפני %n שניות</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>לפני דקה</numerusform><numerusform>לפני %n דקות</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>לפני שעה</numerusform><numerusform>לפני %n שעות</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>לפני יום</numerusform><numerusform>לפני %n ימים</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>עדכני</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>מתעדכן...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>הבלוק האחרון שהתקבל נוצר ב-%1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>הפעולה הזאת חורגת מהמגבלה. ניתן לשלוח אותה תמורת עמלה בסך %1, שמגיעה לצמתים שמעבדים את הפעולה ועוזרת לתמוך ברשת. האם אתה מעוניין לשלם את העמלה?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>שולח...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>פעולה שנשלחה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>פעולה שהתקבלה</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>תאריך: %1 +כמות: %2 +סוג: %3 +כתובת: %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>הארנק <b>מוצפן</b> וכרגע <b>פתוח</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>הארנק <b>מוצפן</b> וכרגע <b>נעול</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>גיבוי ארנק</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>נתוני ארנק (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>הגיבוי נכשל</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>היתה שגיאה בניסיון לשמור את מידע הארנק למיקום החדש.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&יחידת מדידה להציג בה כמויות: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>בחר את יחידת החלוקה להצגה בממשק, ובעת שליחת מטבעות</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>הצג כתובות ברשימת הפעולות</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>ערוך כתובת</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>ת&וית</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>התוית המשויכת לרשומה הזו בפנקס הכתובות</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&כתובת</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>הכתובת המשויכת לרשומה זו בפנקס הכתובות. ניתן לשנות זאת רק עבור כתובות לשליחה.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>כתובת חדשה לקבלה</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>כתובת חדשה לשליחה</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>ערוך כתובת לקבלה</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>ערוך כתובת לשליחה</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>הכתובת שהכנסת "%1" כבר נמצאת בפנקס הכתובות.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>הכתובת שהכנסת "%1" אינה כתובת ביטקוין תקינה.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>פתיחת הארנק נכשלה.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>יצירת מפתח חדש נכשלה.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>התח&ל את ביטקוין בהפעלת מערכת חלונות</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>התחל את ביטקוין אוטומטית כשהמחשב נדלק</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>מ&זער למגש במקום לשורת המשימות</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>הצג אייקון מגש בלבד לאחר מזעור החלון</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>מיפוי פורט באמצעות UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>פתח את פורט ביטקוין בנתב באופן אוטומטי. עובד רק אם UPnP מאופשר ונתמך ע"י הנתב.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>מז&ער בעת סגירה</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>מזער את התוכנה במקום לצאת ממנה כשהחלון נסגר. כשאפשרות זו פעילה, התוכנה תיסגר רק לאחר בחירת יציאה מהתפריט.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>התח&בר דרך פרוקסי SOCKS4:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>התחבר לרשת הביטקוין דרך פרוקסי SOCKS4 (למשל, בעת חיבור דרך Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>IP של פרוקסי:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>כתובת האינטרנט של הפרוקסי (למשל 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&פורט: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>הפורט של הפרוקסי (למשל 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>עמלת פעולה אופציונלית לכל kB תבטיח שהפעולה שלך תעובד בזריזות. רוב הפעולות הן 1 kB. מומלצת עמלה בסך 0.01.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>שלם &עמלת פעולה</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>עמלת פעולה אופציונלית לכל kB תבטיח שהפעולה שלך תעובד בזריזות. רוב הפעולות הן 1 kB. מומלצת עמלה בסך 0.01.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>הודעה</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>אתה יכול לחתום על הודעות עם הכתובות שלך כדי להוכיח שהן בבעלותך. היזהר לא לחתום על משהו מעורפל, שכן התקפות פישינג עשויות לגרום לך בעורמה למסור את זהותך. חתום רק על אמרות מפורטות לחלוטין שאתה מסכים עימן.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>הכתובת אליה יישלח התשלום (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>בחר כתובת מפנקס הכתובות</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>הדבק כתובת מהלוח</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>הכנס כאן את ההודעה שעליך ברצונך לחתום</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>לחץ על "חתום על הודעה" לקבלת חתימה</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>חתום על הודעה כדי להוכיח שכתובת זו בבעלותך</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>חתום על הו&דעה</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>העתק את הכתובת שסומנה ללוח המערכת</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>ה&עתק ללוח</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>שגיאה בחתימה</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 אינה כתובת תקינה.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>המפתח הפרטי עבור %1 אינו זמין.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>החתימה נכשלה</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>ראשי</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>תצוגה</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>אפשרויות</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>טופס</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>יתרה:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 ביטקוין</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>מספר פעולות:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>ממתין לאישור:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 ביטקוין</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>פעולות אחרונות</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>היתרה הנוכחית שלך</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>הסכום הכולל של פעולות שטרם אושרו, ועוד אינן נספרות בחישוב היתרה הנוכחית</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>המספר הכולל של פעולות בארנק</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>שיח</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>קוד QR</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>בקש תשלום</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>כמות:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>ביטקוין</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>תוית:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>הודעה:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&שמור בשם...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>שמור תמונה...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>תמונות PNG (*.png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>שלח מטבעות</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>שלח למספר מקבלים בו-זמנית</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&הוסף מקבל...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>הסר את כל השדות בפעולה</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>נקה הכל</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>יתרה:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 ביטקוין</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>אשר את פעולת השליחה</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&שלח</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> ל- %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>אשר שליחת מטבעות</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>האם אתה בטוח שברצונך לשלוח %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> ו- </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>כתובת המקבל אינה תקינה, אנא בדוק שנית.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>הכמות לשלם חייבת להיות גדולה מ-0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>הכמות חורגת מהיתרה שלך.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>הסכום חורג מהיתרה לאחר הכללת עמלת פעולה בסך %1.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>כתובת כפולה נמצאה, ניתן לשלוח לכל כתובת רק פעם אחת בכל פעולה שליחה</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>שגיאה: יצירת הפעולה נכשלה </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>שגיאה: הפעולה נדחתה. זה עשוי לקרות אם חלק מהמטבעות בארנק שלך כבר נוצלו, למשל אם השתמשת בעותק של הקובץ wallet.dat ומטבעות נוצלו בהעתק אך לא סומנו כמנוצלות כאן.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>טופס</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>כ&מות:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>שלם &ל:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>הכנס תוית לכתובת הזאת כדי להכניס לפנקס הכתובות</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>ת&וית:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>הכתובת אליה יישלח התשלום (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>בחר כתובת מפנקס הכתובות</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>הדבר כתובת מהלוח</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>הסר את המקבל הזה</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>הכנס כתובת ביטקוין (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>פתוח למשך %1 בלוקים</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>פתוח עד %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/לא מחובר?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/ממתין לאישור</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 אישורים</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>מצב:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, טרם שודר בהצלחה</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, שודר דרך צומת %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, שודר דרך %1 צמתים</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>תאריך:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>מקור:</b> נוצר<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>מאת:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>לא ידוע</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>אל:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (שלך, תוית: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(שלך)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>זיכוי:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 יבגור עוד %2 בלוקים)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(לא התקבל)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b<חיוב:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>עמלת פעולה:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>כמות נטו:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>הודעה:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>הערה:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>מזהה פעולה:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>מטבעות שנוצרו חייבים לחכות 120 בלוקים לפני שניתן לנצל אותם. כשיצרת את הבלוק הזה, הוא שודר לרשת כדי להתווסף לשרשרת הבלוקים. אם הוא אינו מצליח להיכנס לשרשרת, הוא ישתנה ל"לא התקבל" ולא ניתן יהיה לנצל אותו. זה יכול לקרות מדי פעם אם צומת אחר מייצר בלוק בהפרש של מספר שניות מהבלוק שלך.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>פרטי הפעולה</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>חלונית זו מציגה תיאור מפורט של הפעולה</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>תאריך</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>סוג</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>כתובת</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>כמות</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>פתוח למשך בלוק אחד</numerusform><numerusform>פתוח למשך %n בלוקים</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>פתוח עד %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>לא מחובר (%1 אישורים)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>ממתין לאישור (%1 מתוך %2 אישורים)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>מאושר (%1 אישורים)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>יתרה שנכרתה תהיה זמינה עוד בלוק אחד</numerusform><numerusform>יתרה שנכרתה תהיה זמינה עוד %n בלוקים</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>הבלוק הזה לא נקלט על ידי אף צומת אחר, וכנראה לא יתקבל!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>נוצר אך לא התקבל</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>התקבל עם</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>התקבל מאת</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>נשלח ל</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>תשלום לעצמך</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>נכרה</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>מצב הפעולה. השהה את הסמן מעל שדה זה כדי לראות את מספר האישורים.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>התאריך והשעה בה הפעולה הזאת התקבלה.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>סוג הפעולה.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>כתובת היעד של הפעולה.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>הכמות שהתווספה או הוסרה מהיתרה.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>הכל</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>היום</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>השבוע</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>החודש</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>החודש שעבר</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>השנה</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>טווח...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>התקבל עם</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>נשלח ל</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>לעצמך</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>נכרה</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>אחר</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>הכנס כתובת או תוית לחפש</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>כמות מזערית</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>העתק כתובת</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>העתק תוית</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>העתק כמות</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>ערוך תוית</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>הצג פרטים...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>יצוא נתוני פעולות</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>קובץ מופרד בפסיקים (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>מאושר</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>תאריך</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>סוג</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>תוית</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>כתובת</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>כמות</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>מזהה</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>שגיאה ביצוא</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>לא מסוגל לכתוב לקובץ %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>טווח:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>אל</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>שולח...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>גרסת ביטקוין</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>שימוש:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>שלח פקודה ל -server או bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>רשימת פקודות</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>קבל עזרה עבור פקודה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>אפשרויות:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>ציין קובץ הגדרות (ברירת מחדל: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>ציין קובץ pid (ברירת מחדל: bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>צור מטבעות</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>אל תייצר מטבעות</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>התחל ממוזער</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>ציין תיקיית נתונים</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>ציין הגבלת זמן לחיבור (במילישניות)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>התחבר דרך פרוקסי socks4</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>אפשר עיון ב-DNS להוספת צומת וחיבור</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>האזן לחיבורים ב<פורט> (ברירת מחדל: 8333 או ברשת הבדיקה: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>החזק לכל היותר <n> חיבורים לעמיתים (ברירת מחדל: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>הוסף צומת להתחבר אליו</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>התחבר רק לצומת המצוין</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>אל תקבל חיבורים מבחוץ</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>אל תשתמש ב-DNS לאתחול רשימת עמיתים</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>סף להתנתקות מעמיתים הנוהגים שלא כהלכה (ברירת מחדל: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>מספר שניות למנוע מעמיתים הנוהגים שלא כהלכה מלהתחבר מחדש (ברירת מחדל: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>חוצץ מירבי לקבלה לכל חיבור, <n>*1000 בתים (ברירת מחדל: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>חוצץ מירבי לשליחה לכל חיבור, <n>*1000 בתים (ברירת מחדל: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>אל תנסה להשתמש ב-UPnP כדי למפות את הפורט להאזנה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>נסה להשתמש ב-UPnP כדי למפות את הפורט להאזנה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>עמלה לכל kB להוסיף לפעולות שאתה שולח</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>קבל פקודות משורת הפקודה ו- JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>רוץ ברקע כדימון וקבל פקודות</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>השתמש ברשת הבדיקה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>פלוט מידע דיבאג נוסף </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>הוסף חותמת זמן לפני פלט דיבאג</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>שלח מידע דיבאג ועקבה לקונסולה במקום לקובץ debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>שלח מידע דיבאג ועקבה לכלי דיבאג</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>שם משתמש לחיבורי JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>סיסמה לחיבורי JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>האזן לחיבורי JSON-RPC ב<פורט> (ברירת מחדל: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>אפשר חיבורי JSON-RPC מכתובת האינטרנט המצוינת</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>שלח פקודות לצומת ב-<ip> (ברירת מחדל: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>קבע את גודל המאגר ל -<n> (ברירת מחדל: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>סרוק מחדש את שרשרת הבלוקים למציאת פעולות חסרות בארנק</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation>אפשרויות SSL: (ראה את הויקי של ביטקוין עבור הוראות להתקנת SSL)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>השתמש ב-OpenSSL (https( עבור חיבורי JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>קובץ תעודת שרת (ברירת מחדל: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>מפתח פרטי של השרת (ברירת מחדל: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>צפנים קבילים (ברירת מחדל: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>הודעת העזרה הזו</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>אינו מסוגל לנעול את תיקיית הנתונים %s. כנראה שביטקוין כבר רץ.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>טוען כתובות...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>שגיאה בטעינת הקובץ addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>שגיאה בטעינת הקובץ blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>שגיאה בטעינת הקובץ wallet.dat: הארנק מושחת</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>שגיאה בטעינת הקובץ wallet.dat: הארנק דורש גרסה חדשה יותר של ביטקוין</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>יש לכתוב מחדש את הארנק: אתחל את ביטקוין לסיום</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>שגיאה בטעינת הקובץ wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>טוען את אינדקס הבלוקים...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>טוען ארנק...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>סורק מחדש...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>טעינה הושלמה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>כתובת פרוקסי לא תקינה</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>כמות לא תקינה בפרמטר -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>אזהרה: ערך גבוה מדי הושם בפרמטר -paytxfee. זו העמלה שתשלם אם אתה שולח פעולה.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>שגיאה: כישלון ב- CreateThread(StartNode)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>אזהרה: מעט מקום בדיסק </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>לא מסוגל להיקשר לפורט %d במחשב הזה. כנראה שביטקוין כבר רץ.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>אזהרה: אנא בדוק שהתאריך והשעה של המחשב הזה נכונים. אם השעון שלך שגוי ביטקוין לא יפעל כהלכה.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>בטא</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts new file mode 100644 index 0000000000..9d9e2695ae --- /dev/null +++ b/src/qt/locale/bitcoin_hr.ts @@ -0,0 +1,1972 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="hr" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>O Bitcoinu</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> verzija</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adresar</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Ovo su vaše Bitcoin adrese za primanje isplate. Možda želite dati drukčiju adresu svakom primatelju tako da možete pratiti tko je platio.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dvostruki klik za uređivanje adrese ili oznake</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Dodajte novu adresu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nova adresa...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopiraj trenutno odabranu adresu u međuspremnik</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Kopiraj u međuspremnik</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Brisanje trenutno odabrane adrese s popisa. Samo adrese za slanje se mogu izbrisati.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Brisanje</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopirati adresu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopirati oznaku</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Izvoz podataka adresara</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Datoteka vrijednosti odvojenih zarezom (*. csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Pogreška kod izvoza</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Ne mogu pisati u datoteku %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Oznaka</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(bez oznake)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dijalog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TekstualnaOznaka</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Unesite lozinku</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nova lozinka</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Ponovite novu lozinku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Unesite novi lozinku za novčanik. <br/> Molimo Vas da koristite zaporku od <b>10 ili više slučajnih znakova,</b> ili <b>osam ili više riječi.</b></translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Šifriranje novčanika</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Ova operacija treba lozinku vašeg novčanika kako bi se novčanik otključao.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Otključaj novčanik</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Ova operacija treba lozinku vašeg novčanika kako bi se novčanik dešifrirao.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Dešifriranje novčanika.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Promjena lozinke</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Unesite staru i novu lozinku za novčanik.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Potvrdi šifriranje novčanika</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>UPOZORENJE: Ako šifrirate vaš novčanik i izgubite lozinku, <b>IZGUBIT ĆETE SVE SVOJE BITCOINSE!</b> +Jeste li sigurni da želite šifrirati svoj novčanik?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Novčanik šifriran</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Šifriranje novčanika nije uspjelo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Šifriranje novčanika nije uspjelo zbog interne pogreške. Vaš novčanik nije šifriran.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Priložene lozinke se ne podudaraju.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Otključavanje novčanika nije uspjelo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Lozinka za dešifriranje novčanika nije točna.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Dešifriranje novčanika nije uspjelo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Lozinka novčanika je uspješno promijenjena.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin novčanik</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Usklađivanje s mrežom ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Sinkronizacija lanca blokova u tijeku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Pregled</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Prikaži opći pregled novčanika</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transakcije</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Pretraži povijest transakcija</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adresar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Uređivanje popisa pohranjenih adresa i oznaka</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Primanje novca</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Prikaži popis adresa za primanje isplate</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Pošalji novac</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Slanje novca na bitcoin adresu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Izlaz</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Izlazak iz programa</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&Više o %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Prikaži informacije o Bitcoinu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Postavke</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Promijeni postavke konfiguracije za bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Otvori &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Prikaži Bitcoin prozor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Izvoz...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Šifriraj novčanik</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Šifriranje ili dešifriranje novčanika</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Promijena lozinke</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Promijenite lozinku za šifriranje novčanika</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Konfiguracija</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Pomoć</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Traka kartica</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Traka akcija</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktivna veza na Bitcoin mrežu</numerusform><numerusform>%n aktivne veze na Bitcoin mrežu</numerusform><numerusform>%n aktivnih veza na Bitcoin mrežu</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Preuzeto %1 od %2 blokova povijesti transakcije.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Preuzeto %1 blokova povijesti transakcije.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>prije %n sekunde</numerusform><numerusform>prije %n sekunde</numerusform><numerusform>prije %n sekundi</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>prije %n minute</numerusform><numerusform>prije %n minute</numerusform><numerusform>prije %n minuta</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>prije %n sata</numerusform><numerusform>prije %n sata</numerusform><numerusform>prije %n sati</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>prije %n dana</numerusform><numerusform>prije %n dana</numerusform><numerusform>prije %n dana</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Ažurno</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Ažuriranje...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Zadnji primljeni blok je generiran %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Ova transakcija je preko ograničenja veličine. Možete ju ipak poslati za naknadu od %1, koja se daje čvorovima koji procesiraju vaše transakcije i tako podržavate mrežu. Želite li platiti naknadu?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Slanje...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Poslana transakcija</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Dolazna transakcija</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Datum:%1 +Iznos:%2 +Tip:%3 +Adresa:%4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Novčanik je <b>šifriran</b> i trenutno <b>otključan</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Novčanik je <b>šifriran</b> i trenutno <b>zaključan</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Jedinica za prikazivanje iznosa:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Izaberite željeni najmanji dio bitcoina koji će biti prikazan u sučelju i koji će se koristiti za plaćanje.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Prikaži adrese u popisu transakcija</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Izmjeni adresu</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Oznaka</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Oznaka ovog upisa u adresar</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresa</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Adresa ovog upisa u adresar. Može se mjenjati samo kod adresa za slanje.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nova adresa za primanje</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nova adresa za slanje</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Uredi adresu za primanje</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Uredi adresu za slanje</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Upisana adresa "%1" je već u adresaru.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Upisana adresa "%1" nije valjana bitcoin adresa.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Ne mogu otključati novčanik.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Stvaranje novog ključa nije uspjelo.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Pokreni Bitcoin kod pokretanja sustava</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automatski pokreni Bitcoin kad se uključi računalo</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimiziraj u sistemsku traku umjesto u traku programa</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Prikaži samo ikonu u sistemskoj traci nakon minimiziranja prozora</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Mapiraj port koristeći &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automatski otvori port Bitcoin klijenta na ruteru. To radi samo ako ruter podržava UPnP i ako je omogućen.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimiziraj kod zatvaranja</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimizirati umjesto izaći iz aplikacije kada je prozor zatvoren. Kada je ova opcija omogućena, aplikacija će biti zatvorena tek nakon odabira Izlaz u izborniku.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Povezivanje putem SOCKS4 proxy-a:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Spojite se na Bitcon mrežu putem SOCKS4 proxy-a (npr. kod povezivanja kroz Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP adresa proxy-a (npr. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port od proxy-a (npr. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Plati &naknadu za transakciju</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa za slanje plaćanja (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Odaberite adresu iz adresara</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Zalijepi adresu iz međuspremnika</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopiraj trenutno odabranu adresu u međuspremnik</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopiraj u međuspremnik</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Glavno</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Prikaz</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Postavke</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Oblik</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Stanje:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Broj transakcija:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Nepotvrđene:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Lisnica</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Nedavne transakcije</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Vaše trenutno stanje računa</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Ukupni iznos transakcija koje tek trebaju biti potvrđene, i još uvijek nisu uračunate u trenutni saldo</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Ukupni broj tansakcija u lisnici</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dijalog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Poruka:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Pošalji novac</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Pošalji k nekoliko primatelja odjednom</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Dodaj primatelja...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Obriši sve</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Stanje:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Potvrdi akciju slanja</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Pošalji</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> do %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Potvrdi slanje novca</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Jeste li sigurni da želite poslati %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation>i</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Adresa primatelja je nevaljala, molimo provjerite je ponovo.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Iznos mora biti veći od 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Iznos je veći od stanja računa</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Iznos je veći od stanja računa kad se doda naknada za transakcije od %1</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Pronašli smo adresu koja se ponavlja. U svakom plaćanju program može svaku adresu koristiti samo jedanput</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Greška: priprema transakcije nije uspjela</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Generirani novčići moraju pričekati nastanak 120 blokova prije nego što ih je moguće potrošiti. Kad ste generirali taj blok, on je bio emitiran u mrežu kako bi bio dodan postojećim lancima blokova. Ako ne uspije biti dodan, njegov status bit će promijenjen u "nije prihvatljiv" i on neće biti potrošiv. S vremena na vrijeme tako nešto se može desiti ako neki drugi nod približno istovremeno generira blok.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Oblik</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>&Iznos:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>&Primatelj plaćanja:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Unesite oznaku za ovu adresu kako bi ju dodali u vaš adresar</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Oznaka:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa za slanje plaćanja (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Odaberite adresu iz adresara</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Zalijepi adresu iz međuspremnika</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Ukloni ovog primatelja</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Unesite Bitcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Otvori za %1 blokova</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Otvoren do %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1 nije dostupan?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/nepotvrđeno</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 potvrda</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Status:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, još nije bio uspješno emitiran</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, emitiran kroz nod %1 </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, emitiran kroz nodove %1 </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Datum:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Izvor:</b> Generirano<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Od:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>nepoznato</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Za:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation>(tvoje, oznaka:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(tvoje)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Uplaćeno:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 stasava za %2 dodatna bloka)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(Nije prihvaćeno)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Potrošeno:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Naknada za transakciju:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Neto iznos:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Poruka:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Komentar:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Generirani novčići moraju pričekati nastanak 120 blokova prije nego što ih je moguće potrošiti. Kad ste generirali taj blok, on je bio emitiran u mrežu kako bi bio dodan postojećim lancima blokova. Ako ne uspije biti dodan, njegov status bit će promijenjen u "nije prihvaćen" i on neće biti potrošiv. S vremena na vrijeme tako nešto se može desiti ako neki drugi nod generira blok u približno isto vrijeme.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Detalji transakcije</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Ova panela prikazuje detaljni opis transakcije</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tip</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Iznos</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Otvoren za %n bloka</numerusform><numerusform>Otvoren za %n blokova</numerusform><numerusform>Otvoren za %n blokova</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Otvoren do %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Nije na mreži (%1 potvrda)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Nepotvrđen (%1 od %2 potvrda)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Potvrđen (%1 potvrda)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Saldo iskovanih novčićća bit de dostupan nakon %n dodatnog bloka</numerusform><numerusform>Saldo iskovanih novčićća bit de dostupan nakon %n dodatnih blokova</numerusform><numerusform>Saldo iskovanih novčićća bit de dostupan nakon %n dodatnih blokova</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Generirano - Upozorenje: ovaj blok nije bio primljen od strane bilo kojeg drugog noda i vjerojatno neće biti prihvaćen!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Generirano, ali nije prihvaćeno</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Primljeno s</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Poslano za</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Plaćanje samom sebi</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Rudareno</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/d)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Status transakcije</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Datum i vrijeme kad je transakcija primljena</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Vrsta transakcije.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Odredište transakcije</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Iznos odbijen od ili dodan k saldu.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Sve</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Danas</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Ovaj tjedan</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Ovaj mjesec</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Prošli mjesec</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Ove godine</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Raspon...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Primljeno s</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Poslano za</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Tebi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Rudareno</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Ostalo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Unesite adresu ili oznaku za pretraživanje</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Min iznos</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopirati adresu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopirati oznaku</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Izmjeniti oznaku</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Prikazati detalje...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Izvoz podataka transakcija</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Datoteka podataka odvojenih zarezima (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Potvrđeno</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tip</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Oznaka</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Iznos</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Izvoz pogreške</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Ne mogu pisati u datoteku %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Raspon:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>za</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Slanje...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin verzija</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Upotreba:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Pošalji komandu usluzi -server ili bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Prikaži komande</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Potraži pomoć za komandu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Postavke:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Odredi konfiguracijsku datoteku (ugrađeni izbor: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Odredi proces ID datoteku (ugrađeni izbor: bitcoin.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generiraj novčiće</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Ne generiraj novčiće</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Pokreni minimiziran</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Odredi direktorij za datoteke</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Odredi vremenski prozor za spajanje na mrežu (u milisekundama)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Poveži se kroz socks4 proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Dozvoli DNS upite za dodavanje nodova i povezivanje</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Unesite nod s kojim se želite spojiti</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Poveži se samo sa određenim nodom</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Ne prihvaćaj povezivanje izvana</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Ne pokušaj koristiti UPnP da otvoriš port za uslugu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Pokušaj koristiti UPnP da otvoriš port za uslugu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Prihvati komande iz tekst moda i JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Izvršavaj u pozadini kao uslužnik i prihvaćaj komande</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Koristi test mrežu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Korisničko ime za JSON-RPC veze</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Lozinka za JSON-RPC veze</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Prihvaćaj JSON-RPC povezivanje na portu broj <port> (ugrađeni izbor: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Dozvoli JSON-RPC povezivanje s određene IP adrese</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Pošalji komande nodu na adresi <ip> (ugrađeni izbor: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Podesi memorijski prostor za ključeve na <n> (ugrađeni izbor: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Ponovno pretraži lanac blokova za transakcije koje nedostaju</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation>SSL postavke: (za detalje o podešavanju SSL opcija vidi Bitcoin Wiki)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Koristi OpenSSL (https) za JSON-RPC povezivanje</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Uslužnikov SSL certifikat (ugrađeni izbor: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Uslužnikov privatni ključ (ugrađeni izbor: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Prihvaljivi načini šifriranja (ugrađeni izbor: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Ova poruka za pomoć</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Program ne može pristupiti direktoriju s datotekama %s. Bitcoin program je vjerojatno već pokrenut.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Učitavanje adresa...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Učitavanje indeksa blokova...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Učitavanje novčanika...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Rescaniranje</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Učitavanje gotovo</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Nevaljala -proxy adresa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Nevaljali iznos za opciju -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Upozorenje: -paytxfee je podešen na preveliki iznos. To je iznos koji ćete platiti za obradu transakcije.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Greška: CreateThread(StartNode) nije uspjela</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Upozorenje: Malo diskovnog prostora</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Program ne može koristiti port %d na ovom računalu. Bitcoin program je vjerojatno već pokrenut.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Upozorenje: Molimo provjerite jesu li datum i vrijeme na vašem računalu točni. Ako vaš sat ide krivo, Bitcoin neće raditi ispravno.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts new file mode 100644 index 0000000000..7a66fa6c10 --- /dev/null +++ b/src/qt/locale/bitcoin_hu.ts @@ -0,0 +1,2008 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="hu" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>A Bitcoinról</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> verzió</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Címjegyzék</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Ezekkel a Bitcoin-címekkel fogadhatod kifizetéseket. Érdemes lehet minden egyes kifizető számára külön címet létrehozni, hogy könnyebben nyomon követhesd, kitől kaptál már pénzt.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dupla-katt a cím vagy a címke szerkesztéséhez</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Új cím létrehozása</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Új cím...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>A kiválasztott cím másolása a vágólapra</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Másolás a vágólapra</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>A kiválasztott cím törlése a listáról. Csak a küldő címek törölhetőek.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Törlés</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Cím másolása</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Címke másolása</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Címjegyzék adatainak exportálása</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Vesszővel elválasztott fájl (*. csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Hiba exportálás közben</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>%1 nevű fájl nem írható.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Címke</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Cím</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(nincs címke)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Párbeszéd</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>SzövegCímke</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Add meg a jelszót</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Új jelszó</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Új jelszó újra</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Írd be az új jelszót a tárcához.<br/>Használj legalább 10<br/>véletlenszerű karaktert</b> vagy <b>legalább nyolc szót</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Tárca kódolása</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>A tárcád megnyitásához a műveletnek szüksége van a tárcád jelszavára.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Tárca megnyitása</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>A tárcád dekódolásához a műveletnek szüksége van a tárcád jelszavára.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Tárca dekódolása</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Jelszó megváltoztatása</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Írd be a tárca régi és új jelszavát.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Biztosan kódolni akarod a tárcát?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>FIGYELEM: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor <b>AZ ÖSSZES BITCOINODAT IS EL FOGOD VESZÍTENI!</b> +Biztosan kódolni akarod a tárcát?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Tárca kódolva</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Tárca kódolása sikertelen.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Tárca kódolása belső hiba miatt sikertelen. A tárcád nem lett kódolva.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>A megadott jelszavak nem egyeznek.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Tárca megnyitása sikertelen</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Hibás jelszó.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Dekódolás sikertelen.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Jelszó megváltoztatva.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin-tárca</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Szinkronizálás a hálózattal...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Blokklánc-szinkronizálás folyamatban</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Áttekintés</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Tárca általános áttekintése</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Tranzakciók</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Tranzakciótörténet megtekintése</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>Cím&jegyzék</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Tárolt címek és címkék listájának szerkesztése</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>Érmék &fogadása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Kiizetést fogadó címek listája</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>Érmék &küldése</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Érmék küldése megadott címre</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Kilépés</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Kilépés</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&A %1-ról</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Információk a Bitcoinról</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opciók...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Bitcoin konfigurációs opciók</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>A &Bitcoin megnyitása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>A Bitcoin-ablak mutatása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Exportálás...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>Tárca &kódolása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Tárca kódolása vagy dekódolása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>Jelszó &megváltoztatása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Tárcakódoló jelszó megváltoztatása</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Fájl</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Beállítások</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Súgó</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Fül eszköztár</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Parancsok eszköztár</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[teszthálózat]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktív kapcsolat a Bitcoin-hálózattal</numerusform><numerusform>%n aktív kapcsolat a Bitcoin-hálózattal</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>%1 blokk letöltve a tranzakciótörténet %2 blokkjából.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>%1 blokk letöltve a tranzakciótörténetből.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n másodperccel ezelőtt</numerusform><numerusform>%n másodperccel ezelőtt</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n perccel ezelőtt</numerusform><numerusform>%n perccel ezelőtt</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n órával ezelőtt</numerusform><numerusform>%n órával ezelőtt</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n nappal ezelőtt</numerusform><numerusform>%n nappal ezelőtt</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Naprakész</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Frissítés...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Az utolsóként kapott blokk generálva: %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Ez a tranzakció túllépi a mérethatárt, de %1 tranzakciós díj ellenében így is elküldheted. Ezt a plusz összeget a tranzakcióidat feldolgozó csomópontok kapják, így magát a hálózatot támogatod vele. Hajlandó vagy megfizetni a díjat?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Küldés...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Tranzakció elküldve.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Beérkező tranzakció</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Dátum: %1 +Összeg: %2 +Típus: %3 +Cím: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Tárca <b>kódolva</b> és jelenleg <b>nyitva</b>.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Tárca <b>kódolva</b> és jelenleg <b>zárva</b>.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Mértékegység: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Válaszd ki az interfészen és érmék küldésekor megjelenítendő alapértelmezett alegységet.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Címek megjelenítése a tranzakciólistában</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Cím szerkesztése</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>Cím&ke</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>A címhez tartozó címke</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Cím</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Az ehhez a címjegyzék-bejegyzéshez tartozó cím. Ez csak a küldő címeknél módosítható.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Új fogadó cím</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Új küldő cím</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Fogadó cím szerkesztése</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Küldő cím szerkesztése</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>A megadott "%1" cím már szerepel a címjegyzékben.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>A megadott "%1" cím nem egy érvényes Bitcoin-cím.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Tárca feloldása sikertelen</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Új kulcs generálása sikertelen</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Induljon el a számítógép bekapcsolásakor</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Induljon el a Bitcoin a számítógép bekapcsolásakor</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Kicsinyítés a tálcára az eszköztár helyett</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Kicsinyítés után csak eszköztár-ikont mutass</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>&UPnP port-feltérképezés</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>A Bitcoin-kliens portjának automatikus megnyitása a routeren. Ez csak akkor működik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>K&icsinyítés záráskor</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Az alkalmazásból való kilépés helyett az eszköztárba kicsinyíti az alkalmazást az ablak bezárásakor. Ez esetben az alkalmazás csak a Kilépés menüponttal zárható be.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Csatlakozás SOCKS4 proxyn keresztül:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>SOCKS4 proxyn keresztüli csatlakozás a Bitcoin hálózatához (pl. Tor-on keresztüli csatlakozás esetén)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Proxy IP címe (pl.: 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Proxy portja (pl.: 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Tranzakciós &díj fizetése</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Címzett címe (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L )</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Válassz egy címet a címjegyzékből</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Cím beillesztése a vágólapról</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>A kiválasztott cím másolása a vágólapra</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Másolás a vágólapra</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Fő</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Megjelenítés</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Opciók</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Űrlap</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Egyenleg:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Tranzakciók száma:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Megerősítetlen:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Legutóbbi tranzakciók</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Aktuális egyenleged</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Még megerősítésre váró, a jelenlegi egyenlegbe be nem számított tranzakciók</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Tárca összes tranzakcióinak száma</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Párbeszéd</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Üzenet:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Érmék küldése</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Küldés több címzettnek egyszerre</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Címzett hozzáadása ...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Mindent töröl</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Egyenleg:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Küldés megerősítése</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Küldés</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> %2-re (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Küldés megerősítése</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Valóban el akarsz küldeni %1-t?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> és</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>A címzett címe érvénytelen, kérlek, ellenőrizd.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>A fizetendő összegnek nagyobbnak kell lennie 0-nál.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Nincs ennyi bitcoin az egyenlegeden.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>A küldeni kívánt összeg és a %1 tranzakciós díj együtt meghaladja az egyenlegeden rendelkezésedre álló összeget.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Többször szerepel ugyanaz a cím. Egy küldési műveletben egy címre csak egyszer lehet küldeni.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Hiba: nem sikerült létrehozni a tranzakciót </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Hiba: a tranzakciót elutasították. Ezt az okozhatja, ha már elköltöttél valamennyi érmét a tárcádból - például ha a wallet.dat-od egy másolatát használtad, és így az elköltés csak abban lett jelölve, de itt nem.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Űrlap</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Összeg:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Címzett:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Milyen címkével kerüljön be ez a cím a címtáradba? +</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>Címke:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Címzett címe (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L )</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Válassz egy címet a címjegyzékből</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Cím beillesztése a vágólapról</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Címzett eltávolítása</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L )</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Megnyitva %1 blokkra</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Megnyitva %1-ig</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/megerősítetlen</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 megerősítés</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Állapot:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, még nem sikerült elküldeni.</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, %1 csomóponton keresztül elküldve.</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, elküldve %1 csomóponton keresztül.</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Dátum:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Forrás:</b> Generálva <br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Űrlap:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>ismeretlen</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Címzett:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (tiéd, címke: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (tiéd)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Jóváírás</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1, %2 múlva készül el)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(elutasítva)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Terhelés</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Tranzakciós díj:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Nettó összeg:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Üzenet:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Megjegyzés:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>A frissen generált érméket csak 120 blokkal később tudod elkölteni. Ez a blokk nyomban szétküldésre került a hálózatba, amint legeneráltad, hogy hozzáadhassák a blokklánchoz. Ha nem kerül be a láncba, úgy az állapota "elutasítva"-ra módosul, és nem költheted el az érméket. Ez akkor következhet be időnként, ha egy másik csomópont mindössze néhány másodperc különbséggel generált le egy blokkot a tiédhez képest.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Tranzakció részletei</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Ez a mező a tranzakció részleteit mutatja</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Dátum</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Típus</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Cím</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Összeg</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>%n blokkra megnyitva</numerusform><numerusform>%n blokkra megnyitva</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>%1-ig megnyitva</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 megerősítés)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Megerősítetlen (%1 %2 megerősítésből)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Megerősítve (%1 megerősítés)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>%n blokk múlva lesz elérhető a bányászott egyenleg.</numerusform><numerusform>%n blokk múlva lesz elérhető a bányászott egyenleg.</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Ezt a blokkot egyetlen másik csomópont sem kapta meg, így valószínűleg nem lesz elfogadva!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Legenerálva, de még el nem fogadva.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Erre a címre</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Erre a címre</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Magadnak kifizetve</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Kibányászva</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(nincs)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Tranzakció állapota. Húzd ide a kurzort, hogy lásd a megerősítések számát.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Tranzakció fogadásának dátuma és időpontja.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Tranzakció típusa.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>A tranzakció címzettjének címe.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Az egyenleghez jóváírt vagy ráterhelt összeg.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Mind</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Mai</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Ezen a héten</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Ebben a hónapban</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Múlt hónapban</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Ebben az évben</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Tartomány ...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Erre a címre</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Erre a címre</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Magadnak</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Kibányászva</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Más</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Írd be a keresendő címet vagy címkét</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Minimális összeg</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Cím másolása</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Címke másolása</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Címke szerkesztése</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Részletek...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Tranzakció adatainak exportálása</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Vesszővel elválasztott fájl (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Megerősítve</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Dátum</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Típus</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Címke</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Cím</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Összeg</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>Azonosító</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Hiba lépett fel exportálás közben</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>%1 fájlba való kiírás sikertelen.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Tartomány:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>meddig</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Küldés ...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin verzió</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Használat:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Parancs küldése a -serverhez vagy a bitcoindhez +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Parancsok kilistázása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Segítség egy parancsról +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Opciók +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Konfigurációs fájl (alapértelmezett: bitcoin.conf) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>pid-fájl (alapértelmezett: bitcoind.pid) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Érmék generálása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Bitcoin-generálás leállítása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Indítás lekicsinyítve +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Adatkönyvtár +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Csatlakozás időkerete (milliszekundumban) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Csatlakozás SOCKS4 proxyn keresztül +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>DNS-kikeresés engedélyezése az addnode-nál és a connect-nél +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Elérendő csomópont megadása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Csatlakozás csak a megadott csomóponthoz +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Külső csatlakozások elutasítása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>UPnP-használat letiltása a figyelő port feltérképezésénél +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>UPnP-használat engedélyezése a figyelő port feltérképezésénél +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Parancssoros és JSON-RPC parancsok elfogadása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Háttérben futtatás daemonként és parancsok elfogadása +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Teszthálózat használata +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Felhasználói név JSON-RPC csatlakozásokhoz +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Jelszó JSON-RPC csatlakozásokhoz +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>JSON-RPC csatlakozásokhoz figyelendő <port> (alapértelmezett: 8332) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>JSON-RPC csatlakozások engedélyezése meghatározott IP-címről +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Parancsok küldése <ip> címen működő csomóponthoz (alapértelmezett: 127.0.0.1) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Kulcskarika mérete <n> (alapértelmezett: 100) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Blokklánc újraszkennelése hiányzó tárca-tranzakciók után +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL-opciók: (lásd a Bitcoin Wiki SSL-beállítási instrukcióit) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>OpenSSL (https) használata JSON-RPC csatalkozásokhoz +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Szervertanúsítvány-fájl (alapértelmezett: server.cert) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Szerver titkos kulcsa (alapértelmezett: server.pem) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Elfogadható rejtjelkulcsok (alapértelmezett: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH ) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Ez a súgó-üzenet +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Az %s adatkönyvtár nem zárható. A Bitcoin valószínűleg fut már.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Címek betöltése...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Blokkindex betöltése...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Tárca betöltése...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Újraszkennelés...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Betöltés befejezve.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Érvénytelen -proxy cím</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Étvénytelen -paytxfee=<összeg> összeg</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Figyelem: a -paytxfee nagyon magas. Ennyi tranzakciós díjat fogsz fizetni, ha elküldöd a tranzakciót.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Hiba: CreateThread(StartNode) sikertelen</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Figyelem: kevés a hely a lemezen. </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>A %d port nem elérhető ezen a gépen. A Bitcoin valószínűleg fut már.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő. A Bitcoin nem fog megfelelően működni, ha rosszul van beállítvaaz órád.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>béta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts new file mode 100644 index 0000000000..98dc47e5ed --- /dev/null +++ b/src/qt/locale/bitcoin_it.ts @@ -0,0 +1,2014 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="it" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Info su Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation>Versione di <b>Bitcoin</b></translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Copyright © 2009-2012 Bitcoin Developers + +Questo è un software sperimentale. + +Distribuito sotto la licenza software MIT/X11, vedi il file license.txt incluso oppure su http://www.opensource.org/licenses/mit-license.php. + +Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso del Toolkit OpenSSL (http://www.openssl.org/), software crittografico scritto da Eric Young (eay@cryptsoft.com) e software UPnP scritto da Thomas Bernard.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Rubrica</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Questi sono i tuoi indirizzi Bitcoin per ricevere pagamenti. Potrai darne uno diverso ad ognuno per tenere così traccia di chi ti sta pagando.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Fai doppio click per modificare o cancellare l'etichetta</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Crea un nuovo indirizzo</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nuovo indirizzo...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copia l'indirizzo attualmente selezionato nella clipboard</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Copia nella clipboard</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Mostra il codice &QR</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Firma un messaggio per dimostrare di possedere questo indirizzo</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Firma il messaggio</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Cancella l'indirizzo attualmente selezionato dalla lista. Solo indirizzi d'invio possono essere cancellati.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Cancella</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copia l'indirizzo</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copia l'etichetta</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Modifica</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Cancella</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Esporta gli indirizzi della rubrica</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Testo CSV (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Errore nell'esportazione</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Impossibile scrivere sul file %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etichetta</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Indirizzo</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(nessuna etichetta)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialogo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Etichetta</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Inserisci la passphrase</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nuova passphrase</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Ripeti la passphrase</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Inserisci la passphrase per il portamonete.<br/>Per piacere usare unapassphrase di <b>10 o più caratteri casuali</b>, o <b>otto o più parole</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Cifra il portamonete</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Quest'operazione necessita della passphrase per sbloccare il portamonete.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Sblocca il portamonete</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Quest'operazione necessita della passphrase per decifrare il portamonete,</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Decifra il portamonete</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Cambia la passphrase</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Inserisci la vecchia e la nuova passphrase per il portamonete.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Conferma la cifratura del portamonete</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>ATTENZIONE: se si cifra il portamonete e si perde la frase d'ordine, <b>SI PERDERANNO TUTTI I PROPRI BITCOIN</b>! +Si è sicuri di voler cifrare il portamonete?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Portamonete cifrato</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin verrà ora chiuso per finire il processo di crittazione. Ricorda che criptare il tuo portamonete non può fornire una protezione totale contro furti causati da malware che dovessero infettare il tuo computer.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Attenzione: tasto Blocco maiuscole attivo.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Cifratura del portamonete fallita</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Le passphrase inserite non corrispondono.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Sblocco del portamonete fallito</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>La passphrase inserita per la decifrazione del portamonete è errata.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Decifrazione del portamonete fallita</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Passphrase del portamonete modificata con successo.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Portamonete di bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Sto sincronizzando con la rete...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>sincronizzazione della catena di blocchi in corso</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Sintesi</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Mostra lo stato generale del portamonete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transazioni</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Cerca nelle transazioni</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Rubrica</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Modifica la lista degli indirizzi salvati e delle etichette</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Ricevi monete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Mostra la lista di indirizzi su cui ricevere pagamenti</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Invia monete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Invia monete ad un indirizzo bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Firma il &messaggio</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Dimostra di controllare un indirizzo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Esci</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Chiudi applicazione</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&Informazioni su %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Mostra informazioni su Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Informazioni su &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Mostra informazioni su Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opzioni...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Modifica configurazione opzioni per bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Apri &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Mostra la finestra Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Esporta...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Cifra il portamonete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Cifra o decifra il portamonete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Cambia la passphrase</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Cambia la passphrase per la cifratura del portamonete</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&File</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Impostazioni</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Aiuto</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Barra degli strumenti "Tabs"</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Barra degli strumenti "Azioni"</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n connessione attiva alla rete Bitcoin</numerusform><numerusform>%n connessioni attive alla rete Bitcoin</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Scaricati %1 dei %2 blocchi dello storico transazioni.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Scaricati %1 blocchi dello storico transazioni.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n secondo fa</numerusform><numerusform>%n secondi fa</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n minuto fa</numerusform><numerusform>%n minuti fa</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n ora fa</numerusform><numerusform>%n ore fa</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n giorno fa</numerusform><numerusform>%n giorni fa</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Aggiornato</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>In aggiornamento...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>L'ultimo blocco ricevuto è stato generato %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Questa transazione è superiore al limite di dimensione. È comunque possibile inviarla con una commissione di %1, che va ai nodi che processano la tua transazione e contribuisce a sostenere la rete. Vuoi pagare la commissione?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Invio...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Transazione inviata</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Transazione ricevuta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Data: %1 +Quantità: %2 +Tipo: %3 +Indirizzo: %4 + +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Il portamonete è <b>cifrato</b> e attualmente <b>sbloccato</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Il portamonete è <b>cifrato</b> e attualmente <b>bloccato</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Unità di misura degli importi in: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Scegli l'unità di suddivisione di default per l'interfaccia e per l'invio di monete</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Mostra gli indirizzi nella lista delle transazioni</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Modifica l'indirizzo</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Etichetta</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>L'etichetta associata a questo indirizzo nella rubrica</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Indirizzo</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>L'indirizzo associato a questa voce della rubrica. Si può modificare solo negli indirizzi di spedizione.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nuovo indirizzo di ricezione</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nuovo indirizzo d'invio</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Modifica indirizzo di ricezione</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Modifica indirizzo d'invio</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>L'indirizzo inserito "%1" è già in rubrica.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>L'indirizzo inserito "%1" non è un indirizzo bitcoin valido.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Impossibile sbloccare il portamonete.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Generazione della nuova chiave non riuscita.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Fai partire Bitcoin all'avvio del sistema</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Avvia automaticamente Bitcoin all'accensione del computer</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimizza sul tray invece che sulla barra delle applicazioni</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Mostra solo un'icona nel tray quando si minimizza la finestra</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Mappa le porte tramite l'&UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Apri automaticamente la porta del client Bitcoin sul router. Questo funziona solo se il router supporta UPnP ed è abilitato.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimizza alla chiusura</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Riduci ad icona, invece di uscire dall'applicazione quando la finestra viene chiusa. Quando questa opzione è attivata, l'applicazione verrà chiusa solo dopo aver selezionato Esci nel menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Collegati tramite SOCKS4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Connettiti alla rete Bitcon attraverso un proxy SOCKS4 (ad esempio quando ci si collega via Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>&IP del proxy: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Indirizzo IP del proxy (ad esempio 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Porta: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Porta del proxy (es. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Commissione di transazione per kB; è opzionale e contribuisce ad assicurare che le transazioni siano elaborate velocemente. Le transazioni sono per la maggior parte da 1 kB. Commissione raccomandata 0,01.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Paga la &commissione</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Commissione di transazione per kB; è opzionale e contribuisce ad assicurare che le transazioni siano elaborate velocemente. Le transazioni sono per la maggior parte da 1 kB. Commissione raccomandata 0,01.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Messaggio</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>L'indirizzo del beneficiario cui inviare il pagamento (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Scegli l'indirizzo dalla rubrica</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Incollare l'indirizzo dagli appunti</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Inserisci qui il messaggio che vuoi firmare</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Clicca "Firma il messaggio" per ottenere la firma</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Firma un messaggio per dimostrare di possedere questo indirizzo</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Firma il messaggio</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copia l'indirizzo attualmente selezionato nella clipboard</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copia nella clipboard</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Errore nel firmare</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 non è un indirizzo valido.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>La chiave privata per %1 non è disponibile.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Firma non riuscita</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Principale</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Mostra</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Opzioni</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Modulo</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Saldo</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Numero di transazioni:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Non confermato:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">⏎ +<html><head><meta name="qrichtext" content="1" /><style type="text/css">⏎ +p, li { white-space: pre-wrap; }⏎ +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">⏎ +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Transazioni recenti</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Saldo attuale</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Totale delle transazioni in corso di conferma, che non sono ancora incluse nel saldo attuale</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Numero delle transazioni effettuate</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialogo</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>Codice QR</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Richiedi pagamento</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Importo:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Etichetta:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Messaggio:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Salva come...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Spedisci Bitcoin</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Spedisci a diversi beneficiari in una volta sola</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Aggiungi beneficiario...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Rimuovi tutti i campi della transazione</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Cancella tutto</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Conferma la spedizione</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Spedisci</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> to %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Conferma la spedizione di bitcoin</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Si è sicuri di voler spedire %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> e </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>L'indirizzo del beneficiario non è valido, per cortesia controlla.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>L'importo da pagare dev'essere maggiore di 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>L'importo è superiore al saldo attuale</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Il totale è superiore al saldo attuale includendo la commissione %1</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Trovato un indirizzo doppio, si può spedire solo una volta a ciascun indirizzo in una singola operazione.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Errore: creazione della transazione fallita </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Errore: la transazione è stata rifiutata. Ciò accade se alcuni bitcoin nel portamonete sono stati già spesi, ad esempio se è stata usata una copia del file wallet.dat e i bitcoin sono stati spesi dalla copia ma non segnati come spesi qui.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Modulo</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>&Importo:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Paga &a:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Inserisci un'etichetta per questo indirizzo, per aggiungerlo nella rubrica</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Etichetta</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>L'indirizzo del beneficiario cui inviare il pagamento (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Scegli l'indirizzo dalla rubrica</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Incollare l'indirizzo dagli appunti</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Rimuovere questo beneficiario</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Inserisci un indirizzo Bitcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Aperto per %1 blocchi</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Aperto fino a %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/non confermato</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 conferme</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Stato:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, non è stato ancora trasmesso con successo</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, trasmesso attraverso %1 nodo</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, trasmesso attraverso %1 nodi</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Data:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Fonte:</b> Generato<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Da:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>sconosciuto</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Per:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (vostro, etichetta: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (vostro)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Credito:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 matura in altri %2 blocchi)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(non accettate)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debito:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Commissione:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Importo netto:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Messaggio:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Commento:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID della transazione:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Bisogna attendere 120 blocchi prima di spendere I bitcoin generati. Quando è stato generato questo blocco, è stato trasmesso alla rete per aggiungerlo alla catena di blocchi. Se non riesce a entrare nella catena, verrà modificato in "non accettato" e non sarà spendibile. Questo può accadere a volte, se un altro nodo genera un blocco entro pochi secondi del tuo.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Dettagli sulla transazione</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Questo pannello mostra una descrizione dettagliata della transazione</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tipo</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Indirizzo</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Importo</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Aperto per %n blocco</numerusform><numerusform>Aperto per %n blocchi</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Aperto fino a %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 conferme)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Non confermati (%1 su %2 conferme)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Confermato (%1 conferme)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Il saldo generato sarà disponibile tra %n altro blocco</numerusform><numerusform>Il saldo generato sarà disponibile tra %n altri blocchi</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Questo blocco non è stato ricevuto da altri nodi e probabilmente non sarà accettato!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Generati, ma non accettati</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Ricevuto tramite</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Ricevuto da</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Spedito a</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Pagamento a te stesso</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Ottenuto dal mining</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(N / a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Data e ora in cui la transazione è stata ricevuta.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Tipo di transazione.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Indirizzo di destinazione della transazione.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Importo rimosso o aggiunto al saldo.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Tutti</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Oggi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Questa settimana</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Questo mese</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Il mese scorso</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Quest'anno</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Intervallo...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Ricevuto tramite</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Spedito a</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>A te</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Ottenuto dal mining</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Altro</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Inserisci un indirizzo o un'etichetta da cercare</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Importo minimo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Copia l'indirizzo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Copia l'etichetta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Copia l'importo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Modifica l'etichetta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Mostra i dettagli...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Esporta i dati della transazione</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Testo CSV (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Confermato</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tipo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etichetta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Indirizzo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Importo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Errore nell'esportazione</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Impossibile scrivere sul file %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Intervallo:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>a</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Invio...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Versione di Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Utilizzo:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Manda il comando a -server o bitcoind +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Lista comandi +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Aiuto su un comando +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Opzioni: +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Specifica il file di configurazione (di default: bitcoin.conf) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Specifica il file pid (default: bitcoind.pid) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Genera Bitcoin +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Non generare Bitcoin +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Parti in icona +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Specifica la cartella dati +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Specifica il timeout di connessione (in millisecondi) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Connessione tramite socks4 proxy +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Consenti ricerche DNS per aggiungere nodi e collegare +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Ascolta le connessioni JSON-RPC su <porta> (default: 8333 o testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Mantieni al massimo <n> connessioni ai peer (default: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Aggiungi un nodo e connetti a +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Connetti solo al nodo specificato +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Non accettare connessioni dall'esterno +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Non avviare la lista dei peer usando il DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Soglia di disconnessione dei peer di cattiva qualità (default: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Numero di secondi di sospensione che i peer di cattiva qualità devono trascorrere prima di riconnettersi (default: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Buffer di ricezione massimo per connessione, <n>*1000 byte (default: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Buffer di invio massimo per connessione, <n>*1000 byte (default: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Non usare l'UPnP per mappare la porta +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Prova ad usare l'UPnp per mappare la porta +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Commissione per kB da aggiungere alle transazioni in uscita</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Accetta da linea di comando e da comandi JSON-RPC +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Esegui in background come demone e accetta i comandi +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Utilizza la rete di prova +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Produci informazioni extra utili al debug</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Anteponi all'output di debug una marca temporale</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Invia le informazioni di trace/debug alla console invece che al file debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Invia le informazioni di trace/debug al debugger</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Nome utente per connessioni JSON-RPC +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Password per connessioni JSON-RPC +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Attendi le connessioni JSON-RPC su <porta> (default: 8332) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Consenti connessioni JSON-RPC dall'indirizzo IP specificato +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Inviare comandi al nodo in esecuzione su <ip> (default: 127.0.0.1) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Impostare la quantità di chiavi di riserva a <n> (default: 100) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Ripeti analisi della catena dei blocchi per cercare le transazioni mancanti dal portamonete +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +Opzioni SSL: (vedi il wiki di Bitcoin per le istruzioni di configurazione SSL) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Utilizzare OpenSSL (https) per le connessioni JSON-RPC +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>File certificato del server (default: server.cert) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Chiave privata del server (default: server.pem) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Cifrari accettabili (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Questo messaggio di aiuto +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Non è possibile ottenere i dati sulla directory %s. Probabilmente Bitcoin è già in esecuzione.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Caricamento indirizzi...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Errore caricamento addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Errore caricamento blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Errore caricamento wallet.dat: Wallet corrotto</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Errore caricamento wallet.dat: il wallet richiede una versione nuova di Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Il portamonete deve essere riscritto: riavviare Bitcoin per completare</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Errore caricamento wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Caricamento dell'indice del blocco...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Caricamento portamonete...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Ripetere la scansione...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Caricamento completato</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Indirizzo -proxy non valido</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Importo non valido per -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Attenzione: -paytxfee è molto alta. Questa è la commissione che si paga quando si invia una transazione.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Errore: CreateThread(StartNode) non riuscito</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Attenzione: lo spazio su disco è scarso </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Impossibile collegarsi alla porta %d su questo computer. Probabilmente Bitcoin è già in esecuzione.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Attenzione: si prega di controllare che la data del computer e l'ora siano corrette. Se il vostro orologio è sbagliato Bitcoin non funziona correttamente.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts new file mode 100644 index 0000000000..d733f1a725 --- /dev/null +++ b/src/qt/locale/bitcoin_lt.ts @@ -0,0 +1,1978 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="lt" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Apie Bitcoiną</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> versija</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Autorystės teisės© 2009-2012 Bitcoin Developers +DĖMESIO: programa eksperimentinė! + +Platinama pagal licenziją MIT/X11, papildomą informaciją rasite faile license.txt arba dokumente pagal nuorodą: http://www.opensource.org/licenses/mit-license.php. + +Šiame produkte yra projekto OpenSSL (http://www.openssl.org/), Eriko Jango (eay@cryptsoft.com) parašyti kriptografinės funkcijos ir algoritmai ir UPnP darbui skirtos funkcijos parašytos Tomo Bernardo. + </translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adresų knygelė</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Čia yra Jūsų adresai skirti mokėjimams gauti. Jūs galite skirtingiems žmonėms duoti skirtingus adresus. Tai Jums palengvins kontroliuoti mokėjimus bei padidins anonimiškumą. + </translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Tam, kad pakeisti ar redaguoti adresą arba žymę turite objektą dukart spragtelti pele.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Sukurti naują adresą</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Naujas adresas...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopijuoti esamą adresą į mainų atmintį</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&C Kopijuoti į mainų atmintų</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Rodyti &QR kodą</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Registruotis žinute įrodančia, kad turite šį adresą</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&S Registruotis žinute</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Pašalinti iš sąrašo pažymėtą adresą(gali būti pašalinti tiktai adresų knygelės įrašai).</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&D Pašalinti</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copijuoti adresą</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopijuoti žymę</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Redaguoti</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Pašalinti</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Eksportuoti adresų knygelės duomenis</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Kableliais išskirtas failas (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Eksportavimo klaida</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Nepavyko įrašyti į failą %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Žymė</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresas</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(nėra žymės)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialogas</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Teksto žymė</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Įvesti slaptažodį</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Naujas slaptažodis</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Pakartoti naują slaptažodį</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Įveskite naują slaptažodį piniginei <br/> Prašome naudoti slaptažodį iš <b> 10 ar daugiau atsitiktinių simbolių </b> arba <b> aštuonių ar daugiau žodžių </b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Užšifruoti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Ši operacija reikalauja jūsų piniginės slaptažodžio jai atrakinti.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Atrakinti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Ši operacija reikalauja jūsų piniginės slaptažodžio jai iššifruoti.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Iššifruoti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Pakeisti slaptažodį</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Įveskite seną ir naują piniginės slaptažodžius</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Patvirtinkite piniginės užšifravimą</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>ĮSPĖJIMAS: Jei užšifruosite savo piniginę ir prarasite savo slaptažodį, Jūs <b> PRARASITE VISUS SAVO BITKOINUS, </b>! +Ar jūs tikrai norite užšifruoti savo piniginę?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Piniginė užšifruota</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti bitcoinų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>ĮSPĖJIMAS: Įjungtos didžiosios raidės</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Nepavyko užšifruoti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Dėl vidinės klaidos nepavyko užšifruoti piniginę.Piniginė neužšifruota.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Įvestas slaptažodis nesutampa</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Nepavyko atrakinti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation> Neteisingai įvestas slaptažodis piniginės iššifravimui</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Nepavyko iššifruoti piniginę</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Sėkmingai pakeistas piniginės slaptažodis</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitkoinų piniginė</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Sinchronizavimas su tinklu ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Vyksta blokų grandinės sinchronizavimas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&O Apžvalga</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Rodyti piniginės bendrą apžvalgą</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&T Sandoriai</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Apžvelgti sandorių istoriją</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adresų knygelė</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Redaguoti išsaugotus adresus bei žymes</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&R Gautos monetos</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Parodyti adresų sąraša mokėjimams gauti</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Siųsti monetas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Siųsti monetas bitkoinų adresu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Registruoti praneši&mą</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Įrodyti, kad jūs valdyti adresą</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&x išėjimas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Išjungti programą</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&Apie %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Rodyti informaciją apie Bitkoiną</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Apie &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Rodyti informaciją apie Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opcijos...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Keisti bitcoin konfigūracijos galimybes</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Atidaryti &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Rodyti Bitcoin langą</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Eksportas...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&E Užšifruoti piniginę</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Užšifruoti ar iššifruoti piniginę</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&C Pakeisti slaptažodį</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Pakeisti slaptažodį naudojamą piniginės užšifravimui</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Failas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>Nu&Statymai</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&H Pagelba</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Tabs įrankių juosta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Veiksmų įrankių juosta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testavimotinklas]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n Bitcoin tinklo aktyvus ryšys</numerusform><numerusform>%n Bitcoin tinklo aktyvūs ryšiai</numerusform><numerusform>%n Bitcoin tinklo aktyvūs ryšiai</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Atsisiuntė %1 iš %2 sandorių istorijos blokų</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Atsisiuntė %1 iš %2 sandorių istorijos blokų</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>Prieš %n sekundę</numerusform><numerusform>Prieš %n sekundes</numerusform><numerusform>Prieš %n sekundžių</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>Prieš %n minutę</numerusform><numerusform>Prieš %n minutes</numerusform><numerusform>Prieš %n minutčių</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>Prieš %n valandą</numerusform><numerusform>Prieš %n valandas</numerusform><numerusform>Prieš %n valandų</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>Prieš %n dieną</numerusform><numerusform>Prieš %n dienas</numerusform><numerusform>Prieš %n dienų</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Iki šiol</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Gaudo...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Paskutinis gautas blokas buvo sukurtas %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Šis sandoris viršija leistiną dydį. Jūs galite įvykdyti jį papildomai sumokėję %1 mokesčių, kurie bus išsiųsti tais pačiais mazgais kuriais vyko sandoris ir padės palaikyti tinklą. Ar jūs norite apmokėti papildomą mokestį?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Siunčiama...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Sandoris nusiųstas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Ateinantis sandoris</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Data: %1 +Suma: %2 +Tipas: %3 +Adresas: %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Piniginė <b>užšifruota</b> ir šiuo metu <b>atrakinta</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Piniginė <b>užšifruota</b> ir šiuo metu <b>užrakinta</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&U vienetų rodyti sumas:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Rodomų ir siunčiamų monetų kiekio matavimo vienetai</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Rodyti adresus sandorių sąraše </translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Redaguoti adresą</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&L Žymė</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Žymė yra susieta su šios adresų knygelęs turiniu</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresas</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Adresas yra susietas su šios adresų knygelęs turiniu. Tai gali būti keičiama tik siuntimo adresams.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Naujas gavimo adresas</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Naujas siuntimo adresas</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Taisyti gavimo adresą</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Taisyti siuntimo adresą</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Įvestas adresas "%1"yra adresų knygelėje</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Įvestas adresas "%1"nėra galiojantis bitkoinų adresas</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Neįmanoma atrakinti piniginės</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Naujas raktas nesukurtas</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&S Paleisti Bitcoin programą su window sistemos paleidimu</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automatiškai paleisti Bitkoin programą kai yra įjungiamas kompiuteris</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&M sumažinti langą bet ne užduočių juostą</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Po programos lango sumažinimo rodyti tik programos ikoną.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Prievado struktūra naudojant & UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automatiškai atidaryti Bitcoin kliento maršrutizatoriaus prievadą. Tai veikia tik tada, kai jūsų maršrutizatorius palaiko UPnP ir ji įjungta.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>&i Sumažinti uždarant</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Uždarant langą neuždaryti programos. Kai ši parinktis įjungta, programa bus uždaryta tik pasirinkus meniu komandą Baigti.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&C Jungtis per socks4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Jungtis į Bitkoin tinklą per socks4 proxy (pvz. jungiantis per Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP adresas proxy (pvz. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Prievadas: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Proxy prievadas (pvz. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Neprivaloma sandorio mokestis už KB, kuris padeda įsitikinti, kad jūsų sandoriai tvarkomi greitai. Daugelis sandorių yra tik 1KB dydžio. Rekomenduojamas 0,01 mokestis.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>&f Mokėti sandorio mokestį</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Neprivaloma sandorio mokestis už KB, kuris padeda įsitikinti, kad jūsų sandoriai tvarkomi greitai. Daugelis sandorių yra tik 1KB dydžio. Rekomenduojamas 0,01 mokestis.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Žinutė</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Nurodyti adresą mokėjimui siųsti (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Pasirinkite adresą iš adresų knygelės</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Įvesti adresą iš mainų atminties</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Įveskite pranešimą, kurį norite pasirašyti čia</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Spragtelėkite "Registruotis žinutę" tam, kad gauti parašą</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Registruotis žinute įrodymuii, kad turite šį adresą</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&S Registravimosi žinutė</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopijuoti pasirinktą adresą į sistemos mainų atmintį</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>Kopijuoti į mainų atmintį</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Klaida pasirašant</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 tai negaliojantis adresas</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Privataus rakto %1 nėra</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Registravimas nepavyko</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Pagrindinis</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Ekranas</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Opcijos</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Forma</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Balansas</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Sandorių kiekis</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Nepatvirtinti:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Naujausi sandoris</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Jūsų einamasis balansas</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Iš viso sandorių, įskaitant tuos kurie dar turi būti patvirtinti, ir jie dar nėra įskaičiuotii į einamosios sąskaitos balansą</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Bandras sandorių kiekis piniginėje</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialogas</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR kodas</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Prašau išmokėti</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Suma:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Žymė:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Žinutė:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&S išsaugoti kaip...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Siųsti monetas</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Siųsti keliems gavėjams vienu metu</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&A Pridėti gavėją</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Pašalinti visus sandorio laukus</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Ištrinti viską</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Balansas:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Patvirtinti siuntimo veiksmą</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Siųsti</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> to %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Patvirtinti siuntimui monetas</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Ar esate įsitikinę, kad norite siųsti %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation>ir</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Negaliojantis gavėjo adresas. Patikrinkite.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Apmokėjimo suma turi būti didesnė negu 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Suma viršija jūsų balansą</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Jei pridedame sandorio mokestį %1 bendra suma viršija jūsų balansą</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Rastas adreso dublikatas</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>KLAIDA:nepavyko sudaryti sandorio</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Klaida: sandoris buvo atmestas.Tai gali įvykti, jei kai kurios monetos iš jūsų piniginėje jau buvo panaudotos, pvz. jei naudojote wallet.dat kopiją ir monetos buvo išleistos kopijoje, bet nepažymėtos kaip skirtos išleisti čia.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Forma</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Su&ma:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Mokėti &T gavėjui:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Įveskite žymę šiam adresui kad galėtumėte įtraukti ją į adresų knygelę</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&L žymė:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresas mokėjimo siuntimui (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Pasirinkite adresą iš adresų knygelės</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Įvesti adresą iš mainų atminties</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Pašalinti šitą gavėją</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Atidaryta %1 blokams</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Atidaryta iki %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/atjungtas?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/nepatvirtintas</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 patvirtinimai</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Būsena:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, transliavimas dar nebuvo sėkmingas</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, transliuota per %1 mazgą</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, transliuota per %1 mazgus</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Data:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Šaltinis:</b> Sukurta<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Nuo:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>nežinomas</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Skirta:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (jūsų, žymė: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (jūsų)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Kreditas:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 apmokėtinas %2 daugiau blokais)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(nepriimta)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debitas:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Sandorio mokestis:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Neto suma:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Žinutė:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Komentaras:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Sandorio ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Išgautos monetos turi sulaukti 120 blokų, kol jos gali būti naudojamos. Kai sukūrėte šį bloką, jis buvo transliuojamas tinkle ir turėjo būti įtrauktas į blokų grandinę. Jei nepavyksta patekti į grandinę, bus pakeista į "nepriėmė", o ne "vartojamas". Tai kartais gali atsitikti, jei kitas mazgas per keletą sekundžių sukuria bloką po jūsų bloko.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Sandorio išsami informacija</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Šis langas sandorio detalų aprašymą</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tipas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Suma</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Atidaryta %n blokui</numerusform><numerusform>Atidaryta %n blokams</numerusform><numerusform>Atidaryta %n blokų</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Atidaryta kol %n</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Atjungta (%1 patvirtinimai)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Nepatvirtintos (%1 iš %2 patvirtinimų)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Patvirtinta (%1 patvirtinimai)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Išgautas balansas bus pasiekiamas po %n bloko</numerusform><numerusform>Išgautas balansas bus pasiekiamas po %n blokų</numerusform><numerusform>Išgautas balansas bus pasiekiamas po %n blokų</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Šis blokas negautas nė vienu iš mazgų ir matomai nepriimtas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Išgauta bet nepriimta</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Gauta su</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Gauta iš</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Siųsta </translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Mokėjimas sau</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Išgauta</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>nepasiekiama</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Sandorio būklė. Užvedus pelės žymeklį ant šios srities matysite patvirtinimų skaičių.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Sandorio gavimo data ir laikas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Sandorio tipas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Sandorio paskirties adresas</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Suma pridėta ar išskaičiuota iš balanso</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Visi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Šiandien</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Šią savaitę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Šį mėnesį</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Paskutinį mėnesį</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Šiais metais</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Grupė</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Gauta su</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Išsiųsta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Skirta sau</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Išgauta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Kita</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Įveskite adresą ar žymę į paiešką</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Minimali suma</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopijuoti adresą</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopijuoti žymę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopijuoti sumą</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Taisyti žymę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Parodyti išsamiai</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Sandorio duomenų eksportavimas</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Kableliais atskirtų duomenų failas (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Patvirtintas</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tipas</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Žymė</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresas</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Suma</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Eksportavimo klaida</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Neįmanoma įrašyti į failą %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Grupė:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>skirta</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Siunčiama</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin versija</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Naudojimas:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Siųsti komandą serveriui arba bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Komandų sąrašas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Suteikti pagalba komandai</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Opcijos:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Nurodyti konfigūracijos failą (pagal nutylėjimąt: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Nurodyti pid failą (pagal nutylėjimą: bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Sukurti monetas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Neišgavinėti monetų</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Pradžia sumažinta</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Nustatyti duomenų direktoriją</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Nustatyti sujungimo trukmę (milisekundėmis)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Prisijungti per socks4 proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Leisti DNS paiešką sujungimui ir mazgo pridėjimui</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Sujungimo klausymas prijungčiai <port> (pagal nutylėjimą: 8333 arba testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Palaikyti ne daugiau <n> jungčių kolegoms (pagal nutylėjimą: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Pridėti mazgą prie sujungti su</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Prisijungti tik prie nurodyto mazgo</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Nepriimti išorinio sujungimo</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Neleisti kolegų sąrašo naudojant DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Atjungimo dėl netinkamo kolegų elgesio riba (pagal nutylėjimą: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Sekundžių kiekis eikiamas palaikyti ryšį dėl lygiarangių nestabilumo (pagal nutylėjimą: 86.400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimalus buferis priėmimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimalus buferis siuntimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Nenaudoti UPnP klausymo prievado struktūros</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Bandymas naudoti UPnP struktūra klausymosi prievadui</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation> Įtraukti mokestį už kB siunčiamiems sandoriams</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Priimti komandinę eilutę ir JSON-RPC komandas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Dirbti fone kaip šešėlyje ir priimti komandas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Naudoti testavimo tinklą</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Išėjimo papildomas derinimo informacija</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Prideėti laiko žymę derinimo rezultatams</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Siųsti atsekimo/derinimo info į konsolę vietoj debug.log failo</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Siųsti sekimo/derinimo info derintojui</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Vartotojo vardas JSON-RPC jungimuisi</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Slaptažodis JSON-RPC sujungimams</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Klausymas JSON-RPC sujungimui prijungčiai <port> (pagal nutylėjimą: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Leisti JSON-RPC tik iš nurodytų IP adresų</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Siųsti komandą mazgui dirbančiam <ip> (pagal nutylėjimą: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Nustatyti rakto apimties dydį <n> (pagal nutylėjimą: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Ieškoti prarastų piniginės sandorių blokų grandinėje</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation>SSL opcijos (žr.e Bitcoin Wiki for SSL setup instructions)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Naudoti OpenSSL (https) jungimuisi JSON-RPC </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Serverio sertifikato failas (pagal nutylėjimą: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Serverio privatus raktas (pagal nutylėjimą: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Priimtini šifrai (pagal nutylėjimą: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Pagelbos žinutė</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Negali gauti duomenų katalogo %s rakto. Bitcoin tikriausiai jau veikia.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Užkraunami adresai...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>addr.dat pakrovimo klaida</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>blkindex.dat pakrovimo klaida</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation> wallet.dat pakrovimo klaida, wallet.dat sugadintas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation> wallet.dat pakrovimo klaida, wallet.dat reikalauja naujasnės Bitcoin versijos</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Piniginė turi būti prrašyta: įvykdymui perkraukite Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation> wallet.dat pakrovimo klaida</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Užkraunami blokų indeksai...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Užkraunama piniginė...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Peržiūra</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Pakrovimas baigtas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Neteisingas proxy adresas</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Neteisinga suma -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Įspėjimas: -paytxfee yra nustatytas per didelis. Tai sandorio mokestis, kurį turėsite mokėti, jei siųsite sandorį.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Klaida: nepasileidžia CreateThread(StartNode) </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Įspėjimas: nepakanka vietos diske</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Nepavyko susieti šiame kompiuteryje prievado %d. Bitcoin tikriausiai jau veikia.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas Bitcoin, veiks netinkamai.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 018bc62910..eac291c846 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -14,20 +14,20 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Bitcoin Developers + <translation>Copyright © 2009-2012 Bitcoin Utviklerne Dette er eksperimentell programvare. -Distribuert under MIT/X11 programvarelisens. Se den medfølgende filen license.txt eller http://www.opensource.org/licenses/mit-license.php. +Distribuert under MIT/X11 programvarelisensen, se medfølgende fil license.txt eller http://www.opensource.org/licenses/mit-license.php. -Dette produktet inneholder programvare utviklet av OpenSSL Prosjektet for bruk i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard.</translation> +Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard.</translation> </message> </context> <context> @@ -69,31 +69,66 @@ Dette produktet inneholder programvare utviklet av OpenSSL Prosjektet for bruk i </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Vis &QR Kode</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Signér en melding for å bevise at du eier denne adressen</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Signér Melding</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>Slett den valgte adressen fra listen. Bare adresser for sending kan slettes.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Slett</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopier adresse</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopier merkelapp</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Rediger</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Slett</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Eksporter adressebok</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Kommaseparert fil (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Feil ved eksportering</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>Kunne ikke skrive til filen %1.</translation> </message> @@ -125,125 +160,132 @@ Dette produktet inneholder programvare utviklet av OpenSSL Prosjektet for bruk i </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation>Merkelapp</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>Angi adgangsfrase</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Ny adgangsfrase</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Gjenta ny adgangsfrase</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation>Skriv inn den nye adgangsfrasen for lommeboken.<br/>Vennligst bruk en adgangsfrase med <b>10 eller flere tilfeldige tegn</b>, eller <b>åtte eller flere ord</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Krypter lommebok</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Denne operasjonen krever adgangsfrasen til lommeboken for å låse den opp.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Lås opp lommebok</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Denne operasjonen krever adgangsfrasen til lommeboken for å dekryptere den.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Dekrypter lommebok</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>Endre adgangsfrase</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>Skriv inn gammel og ny adgangsfrase for lommeboken.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>Bekreft kryptering av lommebok</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>ADVARSEL: Hvis du krypterer lommeboken og mister adgangsfrasen vil du <b>MISTE ALLE DINE BITCOINS</b>! Er du sikker på at du vil kryptere lommeboken?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Lommebok kryptert</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Husk at å kryptere lommeboken ikke vil beskytte dine bitcoins fullstendig fra å bli stjålet av skadevare som infiserer datamaskinen din.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine bitcoins fra å bli stjålet om skadevare infiserer datamaskinen.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Advarsel: Caps lock tasten er på.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Kryptering av lommebok feilet</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>Kryptering av lommebok feilet på grunn av en intern feil. Din lommebok ble ikke kryptert.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>De angitte adgangsfrasene er ulike.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Opplåsing av lommebok feilet</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>Adgangsfrasen angitt for dekryptering av lommeboken var feil.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Dekryptering av lommebok feilet</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>Lommebokens adgangsfrase ble endret.</translation> </message> @@ -251,247 +293,278 @@ Er du sikker på at du vil kryptere lommeboken?</translation> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Bitcoin Lommebok</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Synkroniserer med nettverk...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>Synkronisering av blokk-kjede igang</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Oversikt</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Vis generell oversikt over lommeboken</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transaksjoner</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Vis transaksjonshistorikk</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Adressebok</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>Rediger listen over adresser og deres merkelapper</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>&Motta bitcoins</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Vis listen over adresser for mottak av betalinger</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>&Send bitcoins</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Send bitcoins til en adresse</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Signér &melding</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Bevis at du kontrollerer en adresse</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>&Avslutt</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Avslutt applikasjonen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation> &Om %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Vis informasjon om Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Om &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Vis informasjon om Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>&Innstillinger...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>Endre innstillinger for bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>Åpne &Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Vis Bitcoin-vinduet</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Eksporter...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Eksporter visningen til en fil</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>&Krypter Lommebok</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Krypter eller dekrypter lommebok</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation>&Endre Adgangsfrase</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>Endre adgangsfrasen brukt for kryptering av lommebok</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Fil</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Innstillinger</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Hjelp</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Verktøylinje for faner</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Verktøylinje for handlinger</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnett]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> - <translation><numerusform>%n aktiv forbindelse til Bitcoin nettverket</numerusform><numerusform>%n aktive forbindelser to Bitcoin nettverket</numerusform></translation> + <translation><numerusform>%n aktiv forbindelse til Bitcoin-nettverket</numerusform><numerusform>%n aktive forbindelser til Bitcoin-nettverket</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>Lastet ned %1 av %2 blokker med transaksjonshistorikk.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>Lastet ned %1 blokker med transaksjonshistorikk.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> - <translation><numerusform>%n sekund igjen</numerusform><numerusform>%n sekunder igjen</numerusform></translation> + <translation><numerusform>for %n sekund siden</numerusform><numerusform>for %n sekunder siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> - <translation><numerusform>%n minutt siden</numerusform><numerusform>%n minutter siden</numerusform></translation> + <translation><numerusform>for %n minutt siden</numerusform><numerusform>for %n minutter siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> - <translation><numerusform>%n time siden</numerusform><numerusform>%n timer siden</numerusform></translation> + <translation><numerusform>for %n time siden</numerusform><numerusform>for %n timer siden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> - <translation><numerusform>%n dag siden</numerusform><numerusform>%n dager siden</numerusform></translation> + <translation><numerusform>for %n dag siden</numerusform><numerusform>for %n dager siden</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Ajour</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Kommer ajour...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>Siste mottatte blokk ble generert %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Denne transaksjonen overstiger størrelsesbegrensningen. Du kan likevel sende den med et gebyr på %1, som går til nodene som prosesserer transaksjonen din og støtter nettverket. Vil du betale gebyret?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Sender...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Sendt transaksjon</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Innkommende transaksjon</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -504,15 +577,35 @@ Adresse: %4 </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>Lommeboken er <b>kryptert</b> og for tiden <b>ulåst</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>Lommeboken er <b>kryptert</b> og for tiden <b>låst</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -580,22 +673,22 @@ Adresse: %4 <translation>Rediger utsendingsadresse</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>Den oppgitte adressen "%1" er allerede i adresseboken.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>en oppgitte adressen "%1" er ikke en gyldig bitcoin-adresse.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>Kunne ikke låse opp lommeboken.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>Generering av ny nøkkel feilet.</translation> </message> @@ -674,8 +767,8 @@ Adresse: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Valgfritt transaksjonsgebyr per KB som hjelper for å sikre at transaksjonene dine blir raskt prosessert. De fleste transaksjoner er 1KB. Et gebyr på 0.01 anbefales.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Valgfritt transaksjonsgebyr per kB som sikrer at dine transaksjoner blir raskt prosessert. De fleste transaksjoner er 1 kB. Et gebyr på 0.01 er anbefalt.</translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -684,8 +777,98 @@ Adresse: %4 </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Valgfritt transaksjonsgebyr per KB som hjelper for å sikre at transaksjonene dine blir raskt prosessert. De fleste transaksjoner er 1KB. Et gebyr på 0.01 anbefales.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Valgfritt transaksjonsgebyr per kB som sikrer at dine transaksjoner blir raskt prosessert. De fleste transaksjoner er 1 kB. Et gebyr på 0.01 er anbefalt.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Melding</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adressen betalingen skal sendes til (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Velg adresse fra adresseboken</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Lim inn adresse fra utklippstavlen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Skriv inn meldingen du vil signere her</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Klikk "Signér Melding" for signatur</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Signér en melding for å bevise at du eier denne adressen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Signér Melding</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopier den valgte adressen til systemets utklippstavle</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopier til utklippstavle</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Feil ved signering</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 er ikke en gyldig adresse</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Privat nøkkel for %1 er ikke tilgjengelig.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Signering feilet</translation> </message> </context> <context> @@ -753,7 +936,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Lommebok</span></p></body></html></translation> </message> <message> @@ -778,16 +961,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR Kode</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Etterspør Betaling</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Beløp:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Merkelapp:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Melding:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Lagre Som...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Send Bitcoins</translation> </message> @@ -803,81 +1039,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Fjern alle transaksjonsfelter</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>Fjern alle</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Saldo:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Bekreft sending</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Send</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> til %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Bekreft sending av bitcoins</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Er du sikker på at du vil sende %1?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation> og </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>Mottaksadressen er ugyldig, prøv igjen.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>Beløpen som skal betales må være over 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>Beløpet overstiger saldoen din</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>Totalen overgår din saldo når transaksjonsgebyret på %1 tas med</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Duplikate adresser funnet, kan kun sende til hver adresse en gang i hver sendeoperasjon</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Feil: Opprettelse av transaksjon feilet </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Feil: Transaksjonen ble avvist. Dette kan skje hvis noen av myntene i lommeboken allerede var brukt, f.eks. hvis du kopierte wallet.dat og mynter ble brukt i kopien uten å bli markert brukt her.</translation> </message> @@ -917,7 +1158,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation>Velg adresse fra adresseboken</translation> </message> <message> @@ -949,135 +1190,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Åpen for %1 blokker</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Åpen til %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/frakoblet?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/ubekreftet</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 bekreftelser</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Status:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, har ikke blitt kringkastet uten problemer enda.</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> <translation>, kringkast gjennom %1 node</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> <translation>, kringkast gjennom %1 noder</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Dato:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Kilde:</b> Generert<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>Fra:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>ukjent</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>Til:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation> (din, merkelapp: </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (din)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Kredit:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> <translation>(%1 modnes om %2 flere blokker)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(ikke akseptert)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Debet:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Transaksjonsgebyr:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Nettobeløp:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Melding:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Kommentar:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Transaksjons-ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation>Genererte mynter må vente 120 blokker før de kan brukes. Da du genererte denne blokken ble den kringkastet på nettverket for å bli lagt til i kjeden av blokker. Hvis den ikke kommer med i kjeden vil den endre seg til "ikke akseptert og pengene vil ikke kunne brukes. Dette vil noen ganger skje hvis en annen node genererer en blokk noen sekunder i tid fra din egen.</translation> </message> @@ -1164,56 +1410,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Mottatt fra IP</translation> + <source>Received from</source> + <translation>Mottatt fra</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Sendt til</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Sendt til IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>Betaling til deg selv</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Utvunnet</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>-</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Transaksjonsstatus. Hold muspekeren over dette feltet for å se antall bekreftelser.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Dato og tid for da transaksjonen ble mottat.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Type transaksjon.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Mottaksadresse for transaksjonen</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Beløp fjernet eller lagt til saldo.</translation> </message> @@ -1292,16 +1533,21 @@ p, li { white-space: pre-wrap; } <translation>Minimumsbeløp</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Kopier adresse</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Kopier merkelapp</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopiér beløp</translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Rediger merkelapp</translation> @@ -1312,67 +1558,67 @@ p, li { white-space: pre-wrap; } <translation>Vis detaljer...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Eksporter transaksjonsdata</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Kommaseparert fil (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Bekreftet</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Dato</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Type</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Merkelapp</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Beløp</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Feil ved eksport</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>Kunne ikke skrive til filen %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Intervall:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>til</translation> </message> @@ -1380,7 +1626,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Sender...</translation> </message> @@ -1399,940 +1645,336 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> - <translation>Send kommando til -server eller bitcoind -</translation> + <source>Send command to -server or bitcoind</source> + <translation>Send kommando til -server eller bitcoind</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> - <translation>Vis liste over kommandoer -</translation> + <source>List commands</source> + <translation>List opp kommandoer</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> - <translation>Få hjelp til kommando -</translation> + <source>Get help for a command</source> + <translation>Vis hjelpetekst for en kommando</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> - <translation>Innstillinger: -</translation> + <source>Options:</source> + <translation>Innstillinger:</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> - <translation>Angi konfigurasjonsfil (standard: bitcoin.conf) -</translation> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Angi konfigurasjonsfil (standardverdi: bitcoin.conf)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> - <translation>Angi pid-fil (standard: bitcoind.pid) -</translation> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Angi pid-fil (standardverdi: bitcoind.pid)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> - <translation>Generer mynter -</translation> + <source>Generate coins</source> + <translation>Generér bitcoins</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> - <translation>Ikke generer mynter - -</translation> + <source>Don't generate coins</source> + <translation>Ikke generér bitcoins</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>Start minimert </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> - <translation>Angi mappe for data -</translation> + <source>Specify data directory</source> + <translation>Angi mappe for datafiler</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> - <translation>Angi tidsavbrudd for forbindelser (i millisekunder) -</translation> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Angi tidsavbrudd for forbindelse (i millisekunder)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> - <translation>Koble til gjennom sock4 mellomtjener -</translation> + <source>Connect through socks4 proxy</source> + <translation>Koble til gjennom socks4 proxy</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> - <translation>Tillat DNS-oppslag for addnode og connect -</translation> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Tillat DNS-oppslag for addnode og connect</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> - <translation>Legg til node for tilkobling -</translation> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Lytt etter tilkoblinger på <port> (standardverdi: 8333 eller testnet: 18333)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> - <translation>Koble kun til en oppgitt node -</translation> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Hold maks <n> koblinger åpne til andre noder (standardverdi: 125)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> - <translation>Ikke ta imot tilkoblinger fra utsiden -</translation> + <source>Add a node to connect to</source> + <translation>Legg til node for tilkobling</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> - <translation>Ikke forsøk å bruke UPnP for å sette opp lytteport</translation> + <source>Connect only to the specified node</source> + <translation>Koble kun til angitt node</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> - <translation>Forsøk å bruke UPnP for å sette opp lytteport</translation> + <source>Don't accept connections from outside</source> + <translation>Ikke ta imot tilkoblinger fra omverden</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Gebyr per KB som skal legges til transaksjoner du sender -</translation> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Ikke lag initiell nodeliste ved hjelp av DNS</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> - <translation>Ta imot kommandoer fra både kommandolinje og JSON-RPC -</translation> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Grenseverdi for å koble fra noder med dårlig oppførsel (standardverdi: 100)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> - <translation>Kjør som bakgrunnsprosess og ta imot kommandoer -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> - <translation>Bruk testnettet -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> - <translation>Brukernavn for JSON-RPC forbindelser -</translation> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Antall sekunder noder med dårlig oppførsel hindres fra å koble til på nytt (standardverdi: 86400)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> - <translation>Passord for JSON-RPC forbindelser -</translation> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimum mottaksbuffer per tilkobling, <n>*1000 bytes (standardverdi: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> - <translation>Lytt etter JSON-RPC forbindelser på <port> (standard: 8332) -</translation> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksimum sendebuffer per tilkobling, <n>*1000 bytes (standardverdi: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> - <translation>Tillat JSON-RPC forbindelser fra oppgitt IP-adresse -</translation> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Ikke sett opp port vha. UPnP</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> - <translation>Send kommandoer til noden som kjører på <ip> (standard: 127.0.0.1) -</translation> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Sett opp port vha. UPnP</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> - <translation>Sett størrelsen på lager for nye nøkler til <n> (standard: 100) -</translation> + <source>Fee per kB to add to transactions you send</source> + <translation>Gebyr per kB for transaksjoner du sender</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> - <translation>Se igjennom blokk-kjeden på nytt etter manglende lommebokstransaksjoner -</translation> + <source>Accept command line and JSON-RPC commands</source> + <translation>Ta imot kommandolinje- og JSON-RPC-kommandoer</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="34"/> - <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> - <translation>SSL innstillinger: (se Bitcoin Wikien for instruksjoner for SSL-oppsett) -</translation> + <source>Run in the background as a daemon and accept commands</source> + <translation>Kjør i bakgrunnen som daemon og ta imot kommandoer</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Bruk testnettverket</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Gi ut ekstra debuginformasjon</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> - <translation>Bruk OpenSSL (https) for JSON-RPC forbindelser -</translation> + <source>Prepend debug output with timestamp</source> + <translation>Sett tidsstempel på debugmeldinger</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> - <translation>Fil for tjenersertifikat (standard: server.cert) -</translation> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Send spor/debug informasjon til konsollet istedenfor debug.log filen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> - <translation>Privat nøkkel for tjener (standard: server.pem) -</translation> + <source>Send trace/debug info to debugger</source> + <translation>Send spor/debug informasjon til debugger</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> - <translation>Akseptable krypteringsmetoder (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</translation> + <source>Username for JSON-RPC connections</source> + <translation>Brukernavn for JSON-RPC forbindelser</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Passord for JSON-RPC forbindelser</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: 8332)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> - <translation>Denne hjelpemeldingen -</translation> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Tillat JSON-RPC tilkoblinger fra angitt IP-adresse</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="44"/> - <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> - <translation>Kunne ikke låse datamappen %s. Bitcoin kjører sannsynligvis allerede.</translation> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Send kommandoer til node på <ip> (standardverdi: 127.0.0.1)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> - <source>Loading addresses...</source> - <translation>Laster adresser...</translation> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Angi størrelse på nøkkel-lager til <n> (standardverdi: 100)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Feil ved lasting av addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Se gjennom blokk-kjeden etter manglende lommeboktransaksjoner</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Laster blokkindeks...</translation> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL innstillinger: (se Bitcoin Wiki for instruksjoner om SSL oppsett)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Feil ved lasting av blkindex.dat -</translation> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Bruk OpenSSL (https) for JSON-RPC forbindelser</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Laster lommebok...</translation> + <source>Server certificate file (default: server.cert)</source> + <translation>Servers sertifikat (standardverdi: server.cert)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Feil ved lasting av wallet.dat: Skadde data i lommeboken -</translation> + <source>Server private key (default: server.pem)</source> + <translation>Servers private nøkkel (standardverdi: server.pem)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av Bitcoin -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Feil ved lasting av wallet.dat -</translation> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Akseptable krypteringsmetoder (standardverdi: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="56"/> - <source>Rescanning...</source> - <translation>Leser gjennom...</translation> + <source>This help message</source> + <translation>Denne hjelpemeldingen</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="57"/> - <source>Done loading</source> - <translation>Ferdig med lasting</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="58"/> - <source>Invalid -proxy address</source> - <translation>Ugyldig -proxy adresse for mellomtjener</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="59"/> - <source>Invalid amount for -paytxfee=<amount></source> - <translation>Ugyldig gebyrbeløp for -paytxfee=<beløp></translation> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Kunne ikke låse datamappen %s. Bitcoin kjører sannsynligvis allerede.</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="60"/> - <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> - <translation>Advarsel: -paytxfee er satt veldig høyt. Dette er transaksjonsgebyret du betaler når du sender en transaksjon.</translation> + <source>Loading addresses...</source> + <translation>Laster adresser...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> - <source>Error: CreateThread(StartNode) failed</source> - <translation>Feil: CreateThread(StartNode) feilet</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Feil ved lasting av addr.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> - <source>Warning: Disk space is low </source> - <translation>Advarsel: Lite ledig diskplass </translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Feil ved lasting av blkindex.dat</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="65"/> - <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> - <translation>Klarer ikke binde til port %d på denne datamaskinen. Bitcoin kjører sannsynligvis allerede.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Denne transaksjonen er over maks-størrelsen. Du kan likevel sende med et gebyr på %s, som vil bli gitt til noder som prosesserer transaksjonen din og støtter nettverket. Vil du betale gebyret?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Skriv inn nåværende adgangsfrase for lommeboken.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Adgangsfrase</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Vennligst oppgå nåværende adgangsfrase for dekryptering.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>Adgangsfrasen oppgitt for dekryptering av lommeboken var feil.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Status</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Dato</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Beskrivelse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Kredit</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Åpen for %d blokker</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Åpen til %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/frakoblet?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/ubekreftet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d bekreftelser</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Generert</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Generert (%s modnes om %d blokker)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Generert - Advarsel: Denne blokken ble ikke mottatt av noen andre noder og vil sannsynligvis ikke bli akseptert!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Generert (ikke akseptert)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>Fra: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Mottatt med: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Betaling til deg selv</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Til: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> Genererer</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(ikke tilkoblet)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d forbindelser %d blokker %d transaksjoner</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>Lommebok allerede kryptert.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Skriv inn adgangsfrasen for lommeboken. -Vennligst bruk en adgangsfrase på 10 eller flere tilfeldige tegn, eller åtte eller flere ord.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Feil: Angitt adgangsfrase var for kort.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>ADVARSEL: Hvis du krypterer lommeboken din og mister adgangsfrasen vil du MISTE ALLE DINE BITCOINS! -Er du sikker på at du vil kryptere lommeboken?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Vennligst gjenta adgangsfrasen for lommeboken.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Feil: de angitte adgangsfrasene er ulike.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Kryptering av lommebok feilet.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Lommebok kryptert. -Husk at det å kryptere lommeboken ikke kan beskytte dine bitcoins fullstendig fra å bli stjålet av skadevare som infiserer datamaskinen din.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>Lommeboken er ukryptert, vennligst krypter den først.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>Skriv inn ny adgangsfrase for lommeboken.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>Gjenta adgangsfrasen for lommeboken.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>Adgangsfrasen for Lommeboken er Endret.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Ny Mottaksadresse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>Du bør bruke en ny adresse for hver betaling du mottar. - -Merkelapp</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>Status:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, har ikke blitt kringkastet uten problemer enda</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, kringkastet gjennom %d node</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, kringkastet gjennom %d noder</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>Dato:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>Kilde:</b> Generert<br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>Fra:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>ukjent</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>Til:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation> (din, merkelapp: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation> (din)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>Kredit:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s modnes om %d blokker)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(ikke akseptert)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>Debet:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>Transaksjonsgebyr:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>Nettobeløp:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>Melding:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>Kommentar:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Genererte mynter må vente 120 blokker før de kan brukes. Da du genererte denne blokken ble den kringkastet til nettverket for å legges til i blokk-kjeden. Hvis den ikke kommer med i kjeden vil den endres til "ikke akseptert" og ikke kunne brukes. Dette vil skje noen ganger når en annen node genererer en blokk bare sekunder fra din egen i tid.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>Kan ikke skrive til autostart/bitcoin.desktop filen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>Hoved</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>&Start Bitcoin når systemet starter</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>&Minimer ved lukking</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>versjon %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>Feil i beløp </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>Send bitcoins</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>Beløpet overstiger saldoen </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>Totalbeløpet overstiger saldoen når </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation> transaksjonsgebyret tas med </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>Betaling sendt </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Sender...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>Ugyldig adresse </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>Sender %s til %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>AVBRUTT</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>Avbrutt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>Overføring avbrutt </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>Feil: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Utilstrekkelige midler</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>Kobler til...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>Kunne ikke koble til</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>Ber om offentlig nøkkel...</translation> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Feil ved lasting av wallet.dat: Lommeboken er skadet</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>Mottok offentlig nøkkel...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>Mottaker tar ikke imot transaksjoner sendt via IP-adresse</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Lommeboken måtte skrives om: start Bitcoin på nytt for å fullføre</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>Overføring ble ikke akseptert</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>Ugyldig svar mottatt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>Oppretter transaksjon...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>Denne transaksjonen krever et gebyr på minst %s pga. beløpet, kompleksiteten, eller bruk av nylig mottatte midler</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>Opprettelse av transaksjon feilet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>Transaksjon avbrutt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>Mistet forbindelsen, transaksjonen avbrutt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>Sender betaling...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>Transaksjonen ble avvist. Dette kan skje hvis noen av myntene i lommeboken allerede er brukt, f.eks. hvis du kopierte wallet.dat og mynter ble brukt i kopien uten å bli markert som brukt her.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>Venter på bekreftelse...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>Betalingen ble sendt, men mottaker kunne ikke verifisere den. -Transaksjonen er lagret og beløpet vil bli kreditert mottaker, -men kommentaren vil bli blank.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>Betaling ble sendt, men et ugyldig svar kom tilbake</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>Betaling fullført</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>Navn</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>Adresse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>Merkelapp</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>Bitcoin-Adresse</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>Dette er en av dine egne adresser for mottak av betalinger og kan ikke legges inn i adresseboken. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>Rediger Adresse</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Feil ved lasting av wallet.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>Rediger Merkelapp</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Laster blokkindeks...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>Legg til Adresse</translation> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Laster lommebok...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation>Bitcoin</translation> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Leser gjennom...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>Bitcoin - Genererer</translation> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Ferdig med lasting</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>Bitcoin - (ikke tilkoblet)</translation> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Ugyldig -proxy adresse for mellomtjener</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>&Åpne Bitcoin</translation> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Ugyldig gebyrbeløp for -paytxfee=<beløp></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>&Send Bitcoins</translation> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Advarsel: -paytxfee er satt veldig høyt. Dette er transaksjonsgebyret du betaler når du sender en transaksjon.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>&Innstillinger...</translation> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Feil: CreateThread(StartNode) feilet</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>&Avslutt</translation> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Advarsel: Lite ledig diskplass </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>Programmet har kræsjet og vil avslutte. </translation> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Klarer ikke binde til port %d på denne datamaskinen. Bitcoin kjører sannsynligvis allerede.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="213"/> + <location filename="../bitcoinstrings.cpp" line="81"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation>Advarsel: Vennligst sjekk at dato og klokke er riktig innstilt på datamaskinen. Hvis klokken er feil vil ikke Bitcoin fungere ordentlig.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>beta</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index d26e016b8b..7425d21563 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -15,20 +15,20 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Bitcoin-ontwikkelaars + <translation>Copyright © 2009-2012 Bitcoin Ontwikkelaars Dit is experimentele software. -Gedistributeerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand license.txt of kijk op http://www.opensource.org/licenses/mit-license.php. +Gedistribueerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand license.txt of http://www.opensource.org/licenses/mit-license.php. -Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in de OpenSSL Toolkit (http://www.openssl.org/), en cryptografische software geschreven door Eric Young (eay@cryptsoft.com) en UPnP software geschreven door Thomas Bernard.</translation> +Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in de OpenSSL Toolkit (http://www.openssl.org/) en cryptografische software gemaakt door Eric Young (eay@cryptsoft.com) en UPnP software geschreven door Thomas Bernard.</translation> </message> </context> <context> @@ -46,7 +46,7 @@ Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in d <message> <location filename="../forms/addressbookpage.ui" line="33"/> <source>Double-click to edit address or label</source> - <translation>Dubbelklik om adres of etiket te wijzigen</translation> + <translation>Dubbelklik om adres of label te wijzigen</translation> </message> <message> <location filename="../forms/addressbookpage.ui" line="57"/> @@ -70,31 +70,66 @@ Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in d </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Toon &QR-Code</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Onderteken een bericht om te bewijzen dat u dit adres bezit</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Onderteken Bericht</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> - <translation>Verwijder het huidige geselecteerde adres van de lijst. Alleen afzenderadressen kunnen verwijderd worden.</translation> + <translation>Verwijder het huidige geselecteerde adres van de lijst. Alleen zend-adressen kunnen verwijderd worden, niet uw ontvangstadressen.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Verwijder</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopieer adres</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopieer label</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Bewerk</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Verwijder</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Exporteer Gegevens van het Adresboek</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Kommagescheiden bestand (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Fout bij exporteren</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>Kon niet schrijven naar bestand %1.</translation> </message> @@ -104,7 +139,7 @@ Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in d <message> <location filename="../addresstablemodel.cpp" line="77"/> <source>Label</source> - <translation>Etiket</translation> + <translation>Label</translation> </message> <message> <location filename="../addresstablemodel.cpp" line="77"/> @@ -114,7 +149,7 @@ Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in d <message> <location filename="../addresstablemodel.cpp" line="113"/> <source>(no label)</source> - <translation>(geen etiket)</translation> + <translation>(geen label)</translation> </message> </context> <context> @@ -126,373 +161,411 @@ Dit product bevat software ontwikkeld door het OpenSSL project voor gebruik in d </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> - <translation>TekstEtiket</translation> + <translation>TekstLabel</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> - <translation>Enter wachtwoord</translation> + <translation>Huidig wachtwoord</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>Nieuwe wachtwoord</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>Herhaal wachtwoord</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> - <translation>Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer lukrake karakters</b>, of <8> acht of meer woorden</b> . </translation> + <translation>Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer lukrake karakters</b>, of <b> acht of meer woorden</b> . </translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>Versleutel portemonnee</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>Deze operatie vereist uw portemonneewachtwoord om de portemonnee te openen.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>Open portemonnee</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>Deze operatie vereist uw portemonneewachtwoord om de portemonnee te ontsleutelen</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>Ontsleutel portemonnee</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> - <translation>Verander wachtwoord</translation> + <translation>Wijzig wachtwoord</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> - <translation>vul uw oude en nieuwe portemonneewachtwoord in.</translation> + <translation>Vul uw oude en nieuwe portemonneewachtwoord in.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>Bevestig versleuteling van de portemonnee</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>WAARSCHUWING: Wanneer uw portemonnee wordt versleuteld en u verliest uw wachtwoord, dan verliest u<b>AL UW BITCOINS</b>! Bent u er zeker van uw dat u uw portemonnee wilt versleutelen?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>Portemonnee versleuteld</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Onthoud dat het versleutelen van uw portemonnee uw bitcoins niet volledig kan beschermen tegen diefstal, bijvoorbeeld door malware die uw computer infecteert.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin zal nu afsluiten om het versleutelingsproces te voltooien. Onthoud dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw bitcoins stelen.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Waarschuwing: De Caps-Lock-toets staat aan.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>Portemonneeversleuteling mislukt</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>Portemonneeversleuteling mislukt door een interne fout, Uw portemonnee is niet versleuteld.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>Het opgegeven wachtwoord is niet correct</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>Portemonnee openen mislukt</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>Het opgegeven wachtwoord voor de portemonnee-ontsleuteling is niet correct.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>Portemonnee-ontsleuteling mislukt</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> - <translation>Portemonneewachtwoord is succesvol veranderd</translation> + <translation>Portemonneewachtwoord is succesvol gewijzigd</translation> </message> </context> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Bitcoin-portemonnee</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Synchroniseren met netwerk...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> - <translation>Bezig met blokkenketting-synchronisatie</translation> + <translation>Bezig met blokkenketen-synchronisatie</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>&Overzicht</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Toon algemeen overzicht van de portemonnee</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Transacties</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Blader door transactieverleden</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Adresboek</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> - <translation>Bewerk de lijst van opgeslagen adressen en etiketten</translation> + <translation>Bewerk de lijst van opgeslagen adressen en labels</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>&Ontvang munten</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Toon lijst van adressen om betalingen mee te ontvangen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>&Verstuur munten</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Verstuur munten naar een bitcoin-adres</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>&Onderteken Bericht</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Bewijs dat u een adres bezit</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>&Afsluiten</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Programma afsluiten</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>&Over %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Laat informatie zien over Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Over &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Toon informatie over Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>&Opties...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> - <translation>Verander instellingen van Bitcoin</translation> + <translation>Wijzig instellingen van Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>Open &Bitcoin</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Toon Bitcoin-venster </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Exporteer...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Exporteer huidige overzicht naar een bestand</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Exporteer de data in de huidige tab naar een bestand</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>&Versleutel Portemonnee</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>Versleutel of ontsleutel portemonnee</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>Backup &Portemonnee</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>&Backup portemonnee naar een andere locatie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> - <translation>&Verander wachtwoord</translation> + <translation>&Wijzig Wachtwoord</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> - <translation>Verander het wachtwoord voor uw portemonneversleuteling</translation> + <translation>wijzig het wachtwoord voor uw portemonneversleuteling</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Bestand</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Instellingen</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Hulp</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Tab-werkbalk</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Actie-werkbalk</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnetwerk]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> - <translation><numerusform>%n actieve connectie(s) naar Bitcoinnetwerk</numerusform><numerusform>%n actieve connectie(s) naar Bitcoinnetwerk</numerusform></translation> + <translation><numerusform>%n actieve connectie naar Bitcoinnetwerk</numerusform><numerusform>%n actieve connecties naar Bitcoinnetwerk</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> - <translation>%1 van %2 blokken van transactiehistorie opgehaald</translation> + <translation>%1 van %2 blokken van transactiehistorie opgehaald.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>%1 blokken van transactiehistorie opgehaald.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> - <translation><numerusform>%n seconde(n) geleden</numerusform><numerusform>%n seconde(n) geleden</numerusform></translation> + <translation><numerusform>%n seconde geleden</numerusform><numerusform>%n seconden geleden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> - <translation><numerusform>%n minu(u)t(en) geleden</numerusform><numerusform>%n minu(u)t(en) geleden</numerusform></translation> + <translation><numerusform>%n minuut geleden</numerusform><numerusform>%n minuten geleden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> - <translation><numerusform>%n u(u)r(en) geleden</numerusform><numerusform>%n u(u)r(en) geleden</numerusform></translation> + <translation><numerusform>%n uur geleden</numerusform><numerusform>%n uur geleden</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> - <translation><numerusform>%n dag(en) geleden</numerusform><numerusform>%n dag(en) geleden</numerusform></translation> + <translation><numerusform>%n dag geleden</numerusform><numerusform>%n dagen geleden</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Bijgewerkt</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Aan het bijwerken...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> - <translation>Laatst ontvangen blok gegenereerd is %1</translation> + <translation>Laatst ontvangen blok is %1 gegenereerd.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Deze transactie overschrijdt de groottelimiet. Om de transactie alsnog te versturen kunt u transactiekosten betalen van %1. Deze transactiekosten gaan naar de nodes die uw transactie verwerken en het helpt op deze manier bij het ondersteunen van het netwerk. Wilt u de transactiekosten betalen?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Versturen...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Verzonden transactie</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Binnenkomende transactie</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -505,15 +578,35 @@ Adres: %4 </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>Portemonnee is <b>versleuteld</b> en momenteel <b>geopend</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Backup Portemonnee</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Portemonnee-data (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>Backup Mislukt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Er is een fout opgetreden bij het wegschrijven van de portemonnee-data naar de nieuwe locatie.</translation> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -543,12 +636,12 @@ Adres: %4 <message> <location filename="../forms/editaddressdialog.ui" line="25"/> <source>&Label</source> - <translation>&Etiket</translation> + <translation>&Label</translation> </message> <message> <location filename="../forms/editaddressdialog.ui" line="35"/> <source>The label associated with this address book entry</source> - <translation>Het etiket dat geassocieerd is met dit adres</translation> + <translation>Het label dat geassocieerd is met dit adres</translation> </message> <message> <location filename="../forms/editaddressdialog.ui" line="42"/> @@ -558,45 +651,45 @@ Adres: %4 <message> <location filename="../forms/editaddressdialog.ui" line="52"/> <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> - <translation>Het adres dat geassocieerd is met deze adresboek-opgave. Dit kan alleen worden veranderd voor afzenderadressen.</translation> + <translation>Het adres dat geassocieerd is met deze adresboek-opgave. Dit kan alleen worden veranderd voor zend-adressen.</translation> </message> <message> <location filename="../editaddressdialog.cpp" line="20"/> <source>New receiving address</source> - <translation>Nieuw ontvangst-adres</translation> + <translation>Nieuw ontvangstadres</translation> </message> <message> <location filename="../editaddressdialog.cpp" line="24"/> <source>New sending address</source> - <translation>Nieuw afzender-adres</translation> + <translation>Nieuw adres om naar te verzenden</translation> </message> <message> <location filename="../editaddressdialog.cpp" line="27"/> <source>Edit receiving address</source> - <translation>Bewerk ontvangst-adres</translation> + <translation>Bewerk ontvangstadres</translation> </message> <message> <location filename="../editaddressdialog.cpp" line="31"/> <source>Edit sending address</source> - <translation>Bewerk afzender-adres</translation> + <translation>Bewerk adres om naar te verzenden</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>Het opgegeven adres "%1" bestaat al in uw adresboek.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>Het opgegeven adres "%1" is een ongeldig bitcoinadres</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>Kon de portemonnee niet openen.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>Genereren nieuwe sleutel mislukt.</translation> </message> @@ -606,7 +699,7 @@ Adres: %4 <message> <location filename="../optionsdialog.cpp" line="170"/> <source>&Start Bitcoin on window system startup</source> - <translation>&Start Bitcoin wanneer het systeem opstart</translation> + <translation>Start &Bitcoin wanneer het systeem opstart</translation> </message> <message> <location filename="../optionsdialog.cpp" line="171"/> @@ -636,7 +729,7 @@ Adres: %4 <message> <location filename="../optionsdialog.cpp" line="185"/> <source>M&inimize on close</source> - <translation>&Minimaliseer bij sluiten van het venster</translation> + <translation>Minimaliseer bij &sluiten van het venster</translation> </message> <message> <location filename="../optionsdialog.cpp" line="186"/> @@ -675,18 +768,108 @@ Adres: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Optionele transactiekosten per KB die helpen ervoor te zorgen dat uw transacties snel verwerkt worden. De meeste transacties zijn 1KB. Transactiekosten van 0.01 wordt aangeraden.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Optionele transactiekosten per kB die helpen om uw transacties snel te verwerken. De meeste transacties zijn 1 kB. Transactiekosten van 0,01 wordt aangeraden</translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> <source>Pay transaction &fee</source> - <translation>Betaal transactie&kosten</translation> + <translation>Betaal &transactiekosten</translation> </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Optionele transactiekosten per KB die helpen ervoor te zorgen dat uw transacties snel verwerkt worden. De meeste transacties zijn 1KB. Transactiekosten van 0.01 wordt aangeraden.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Optionele transactiekosten per kB die helpen om uw transacties snel te verwerken. De meeste transacties zijn 1 kB. Transactiekosten van 0,01 wordt aangeraden</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Bericht</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>U kunt berichten ondertekenen met een van uw adressen om te bewijzen dat u dit adres bezit. Pas op dat u geen onduidelijke dingen ondertekent, want phishingaanvallen zouden u voor de gek kunnen houden om zo uw identiteit te stelen. Onderteken alleen berichten waarmee u het volledig eens bent.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Het adres waaraan u wilt betalen (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Kies adres uit adresboek</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Plak adres vanuit klembord</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Typ hier het bericht dat u wilt ondertekenen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Klik "Onderteken Bericht" om de handtekening te verkrijgen</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Onderteken een bericht om te bewijzen dat u dit adres bezit</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Onderteken Bericht</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopieer het huidig geselecteerde adres naar het klembord</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopieer naar Klembord</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Fout bij het ondertekenen</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 is geen geldig adres.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Geheime sleutel voor %1 is niet beschikbaar.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Ondertekenen mislukt</translation> </message> </context> <context> @@ -754,7 +937,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Portemonnee</span></p></body></html></translation> </message> <message> @@ -779,16 +962,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialoog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR-code</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Vraag betaling aan</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Bedrag:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Label:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Bericht:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Opslaan Als...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Afbeelding Opslaan...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG-Afbeeldingen (*.png)</translation> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Verstuur munten</translation> </message> @@ -800,85 +1036,90 @@ p, li { white-space: pre-wrap; } <message> <location filename="../forms/sendcoinsdialog.ui" line="67"/> <source>&Add recipient...</source> - <translation>&Voeg ontvanger toe...</translation> + <translation>Voeg &ontvanger toe...</translation> </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Verwijder alle transactievelden</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>Verwijder alles</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>Saldo:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Bevestig de verstuuractie</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Verstuur</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> aan %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Bevestig versturen munten</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Weet u zeker dat u %1 wil versturen?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation> en </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> - <translation>Het ontvangstadres is niet geldig, controleer ingave.</translation> + <translation>Het ontvangstadres is niet geldig, controleer uw opgave.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>Het ingevoerde gedrag moet groter zijn dan 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>Bedrag overschrijdt uw huidige saldo</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Dubbel adres gevonden, u kunt slechts eenmaal naar een bepaald adres verzenden per verstuurtransactie</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Fout: Aanmaak transactie mislukt</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Fout: De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation> </message> @@ -893,7 +1134,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../forms/sendcoinsentry.ui" line="29"/> <source>A&mount:</source> - <translation>B&edrag:</translation> + <translation>Bedra&g:</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="42"/> @@ -904,12 +1145,12 @@ p, li { white-space: pre-wrap; } <location filename="../forms/sendcoinsentry.ui" line="66"/> <location filename="../sendcoinsentry.cpp" line="26"/> <source>Enter a label for this address to add it to your address book</source> - <translation>Vul een etiket in voor dit adres om het toe te voegen aan uw adresboek</translation> + <translation>Vul een label in voor dit adres om het toe te voegen aan uw adresboek</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="75"/> <source>&Label:</source> - <translation>&Etiket:</translation> + <translation>&Label:</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="93"/> @@ -918,7 +1159,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation>Kies adres uit adresboek</translation> </message> <message> @@ -950,137 +1191,142 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>Openen voor %1 blokken</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>Openen totdat %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/niet verbonden?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/onbevestigd</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 bevestigingen</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Status:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> - <translation>,is nog niet succesvol uitgezonden</translation> + <translation>, is nog niet succesvol uitgezonden</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> - <translation>, uitzending langs %1 node</translation> + <translation>, uitgezonden naar %1 node</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> - <translation>,uitzending langs %1 nodes</translation> + <translation>, uitgezonden naar %1 nodes</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Datum:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Bron:</b>Gegenereerd<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>Van:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>onbekend</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b> Aan:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> - <translation>(Uw, etiket:</translation> + <translation>(Uw adres, label:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation>(uw)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> - <translation><b>Tegoed:</b></translation> + <translation><b>Bij:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation>(%1 verwezenlijkt in %2 meer blokken)</translation> + <translation>(%1 komt beschikbaar na %2 blokken)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(niet geaccepteerd)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> - <translation><b>Debet:</b></translation> + <translation><b>Af:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Transactiekosten:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Netto bedrag:</b></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Bericht:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Opmerking:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Transactie-ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Gegeneerde munten moeten 120 blokken wachten voor ze kunnen worden uitgegeven. Je net gegenereerde blok is uitgezonden aan het netwerk om te worden toegevoegd aan de blokkenketting. Als het niet wordt geaccepteerd in de ketting, zal het blok als "ongeldig" worden aangemerkt en kan het niet worden uitgegeven. Dit kan soms gebeuren als een andere node net iets sneller een blok heeft gegenereerd; een paar seconden voor de uwe.</translation> + <translation>Gegeneerde munten moeten 120 blokken wachten voor ze kunnen worden uitgegeven. Uw net gegenereerde blok is uitgezonden aan het netwerk om te worden toegevoegd aan de blokkenketen. Als het niet wordt geaccepteerd in de keten, zal het blok als "ongeldig" worden aangemerkt en kan het niet worden uitgegeven. Dit kan soms gebeuren als een andere node net iets sneller een blok heeft gegenereerd; een paar seconden voor het uwe.</translation> </message> </context> <context> @@ -1121,7 +1367,7 @@ p, li { white-space: pre-wrap; } <message numerus="yes"> <location filename="../transactiontablemodel.cpp" line="274"/> <source>Open for %n block(s)</source> - <translation><numerusform>Open gedurende %n blok(ken)</numerusform><numerusform>Open gedurende %n blok(ken)</numerusform></translation> + <translation><numerusform>Open gedurende %n blok</numerusform><numerusform>Open gedurende %n blokken</numerusform></translation> </message> <message> <location filename="../transactiontablemodel.cpp" line="277"/> @@ -1146,7 +1392,7 @@ p, li { white-space: pre-wrap; } <message numerus="yes"> <location filename="../transactiontablemodel.cpp" line="295"/> <source>Mined balance will be available in %n more blocks</source> - <translation><numerusform>Ontgonnen saldo word beschikbaar na %n blokken meer</numerusform><numerusform>Ontgonnen saldo word beschikbaar na %n blokken meer</numerusform></translation> + <translation><numerusform>Ontgonnen saldo komt beschikbaar na %n blok</numerusform><numerusform>Ontgonnen saldo komt beschikbaar na %n blokken</numerusform></translation> </message> <message> <location filename="../transactiontablemodel.cpp" line="301"/> @@ -1165,56 +1411,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Ontvangen van IP</translation> + <source>Received from</source> + <translation>Ontvangen van</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Verzonden aan</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Verzonden aan IP</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>Betaling aan uzelf</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Ontgonnen</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(nvt)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Datum en tijd waarop deze transactie is ontvangen.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Type transactie.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Ontvangend adres van transactie</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Bedrag verwijderd van of toegevoegd aan saldo</translation> </message> @@ -1285,7 +1526,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../transactionview.cpp" line="84"/> <source>Enter address or label to search</source> - <translation>Vul adres of etiket in om te zoeken</translation> + <translation>Vul adres of label in om te zoeken</translation> </message> <message> <location filename="../transactionview.cpp" line="90"/> @@ -1293,19 +1534,24 @@ p, li { white-space: pre-wrap; } <translation>Min. bedrag</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Kopieer adres</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> - <translation>Kopieer etiket</translation> + <translation>Kopieer label</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopieer bedrag</translation> </message> <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> - <translation>Verander Etiket</translation> + <translation>Bewerk label</translation> </message> <message> <location filename="../transactionview.cpp" line="128"/> @@ -1313,67 +1559,67 @@ p, li { white-space: pre-wrap; } <translation>Toon details...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Exporteer transactiegegevens</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Kommagescheiden bestand (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Bevestigd</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Datum</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Type</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> - <translation>Etiket</translation> + <translation>Label</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Adres</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Bedrag</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Fout bij exporteren</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>Kon niet schrijven naar bestand %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Bereik:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>naar</translation> </message> @@ -1381,7 +1627,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Versturen...</translation> </message> @@ -1400,938 +1646,367 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation>Stuur commando naar -server of bitcoind </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> - <translation>List van commando's + <source>List commands</source> + <translation>List van commando's </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>Toon hulp voor een commando </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>Opties: </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation>Specifieer configuratiebestand (standaard: bitcoin.conf) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation>Specifieer pid-bestand (standaard: bitcoind.pid) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation>Genereer munten </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation>Genereer geen munten </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>Geminimaliseerd starten </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation>Stel datamap in </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation>Specificeer de time-out tijd (in milliseconden) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation>Verbind via socks4 proxy </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>Sta DNS-naslag toe voor addnode en connect </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Luister voor verbindingen op <poort> (standaard: 8333 of testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Onderhoud maximaal <n> verbindingen naar peers (standaard: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> <translation>Voeg een node toe om mee te verbinden </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> <translation>Verbind alleen met deze node </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> <translation>Sta geen verbindingen van buitenaf toe </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Gebruik geen DNS om de lijst met peers op te starten</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Drempel om verbinding te verbreken naar zich misdragende peers (standaard: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Aantal seconden dat zich misdragende peers niet opnieuw mogen verbinden (standaard: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximale ontvangstbuffer per connectie, <n>*1000 bytes (standaard: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximale zendbuffer per connectie, <n>*1000 bytes (standaard: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> <translation>Probeer geen UPnP te gebruiken om de poort waarop geluisterd wordt te mappen </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> <translation>Probeer UPnP te gebruiken om de poort waarop geluisterd wordt te mappen </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Kosten per KB om aan transacties toe te voegen die u verstuurt -</translation> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Transactiekosten per kB om toe te voegen aan transacties die u verzendt</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> - <translation>Aanvaard commandoregel en JSON-RPC commando's + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Aanvaard commandoregel en JSON-RPC commando's </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> - <translation>Draai in de achtergrond als daemon en aanvaard commando's + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Draai in de achtergrond als daemon en aanvaard commando's </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> <translation>Gebruik het testnetwerk </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Toon extra debuggingsinformatie</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Voorzie de debuggingsuitvoer van een tijdsaanduiding</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Stuur trace/debug-info naar de console in plaats van het debug.log bestand</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Stuur trace/debug-info naar debugger</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> <translation>Gebruikersnaam voor JSON-RPC verbindingen </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> <translation>Wachtwoord voor JSON-RPC verbindingen </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation>Luister voor JSON-RPC verbindingen op <poort> (standaard: 8332) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> <translation>Sta JSON-RPC verbindingen van opgegeven IP adres toe </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> - <translation>Verstuur commando's naar proces dat op <ip> draait (standaard: 127.0.0.1) + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Verstuur commando's naar proces dat op <ip> draait (standaard: 127.0.0.1) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation>Stel sleutelpoelgrootte in op <n> (standaard: 100) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> - <translation>Doorzoek de blokkenketting op ontbrekende portemonnee-transacties -</translation> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Doorzoek de blokkenketen op ontbrekende portemonnee-transacties</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation> SSL opties: (zie de Bitcoin wiki voor SSL instructies) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation>Gebruik OpenSSL (https) voor JSON-RPC verbindingen </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> <translation>Certificaat-bestand voor server (standaard: server.cert) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> <translation>Geheime sleutel voor server (standaard: server.pem) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation>Aanvaardbare ciphers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> <translation>Dit helpbericht </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="57"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation>Kan geen lock op de gegevensdirectory %s verkrijgen. Bitcoin draait vermoedelijk reeds.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> <source>Loading addresses...</source> <translation>Adressen aan het laden...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Fout bij laden van bestand addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Fout bij laden addr.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Blokindex aan het laden...</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Fout bij laden blkindex.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Fout bij laden van bestand addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Fout bij laden wallet.dat: Portemonnee corrupt</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Portemonnee aan het laden...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Fout bij het laden van wallet.dat: Portemonnee corrupt -</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Portemonnee moest herschreven worden: Herstart Bitcoin om te voltooien</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Fout bij het laden van wallet.dat: Portemonnee vereist nieuwere versie van Bitcoin</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Fout bij laden wallet.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Fout bij laden van bestand wallet.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Blokindex aan het laden...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Portemonnee aan het laden...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> <source>Rescanning...</source> <translation>Opnieuw aan het scannen ...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="70"/> <source>Done loading</source> <translation>Klaar met laden</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="58"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>Invalid -proxy address</source> <translation>Foutief -proxy adres</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="59"/> + <location filename="../bitcoinstrings.cpp" line="72"/> <source>Invalid amount for -paytxfee=<amount></source> <translation>Ongeldig bedrag voor -paytxfee=<bedrag></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation>Waarschuwing: -paytxfee is zeer hoog ingesteld. Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="76"/> <source>Error: CreateThread(StartNode) failed</source> <translation>Fout: CreateThread(StartNode) is mislukt</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Warning: Disk space is low </source> <translation>Waarschuwing: Weinig schijfruimte over </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation>Kan niet binden aan poort %d op deze computer. Bitcoin draait vermoedelijk reeds.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Deze transactie overschrijdt de groottelimiet. Om de transactie alsnog te versturen kunt u transactiekosten betalen van %s. Deze transactiekosten gaan naar de nodes die uw transactie verwerken en het helpt op deze manier bij het ondersteunen van het netwerk. Wilt u de transactiekosten betalen?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Voer het huidige portemonneewachtwoord in.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Wachtwoordzin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Voer het huidige portemonnee-ontsleutel-wachtwoord in.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>Het wachtwoord voor de portemonnee-ontsleuteling was incorrect.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Status</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Datum</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Omschrijving</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Debet</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Credit</translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Open voor %d blokken</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Open tot %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/niet verbonden?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/onbevestigd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d bevestigingen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Gegenereerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Gegenereerd (%s wordt volwassen in %d meer blokken)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Gegenereerd - Waarschuwing: Dit blok werd door geen enkele andere node ontvangen en zal waarschijnlijk niet worden geaccepteerd!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Gegenereerd (niet geaccepteerd)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>Van:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Ontvangen met:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Betaling aan uzelf</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Aan:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation>Aan het genereren</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(Niet verbonden)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation>%d verbindingen %d blokken %d transacties</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>Portemonnee reeds versleuteld.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Voer het nieuwe portemonneewachtwoord in. Gebruik een wachtwoord van 10 of meer willekeurige tekens, of acht of meer woorden.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>Fout: Het opgegeven wachtwoord was te kort.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>WAARSCHUWING: Als u uw portemonnee versleutelt en uw wachtwoord verliest, verliest u AL UW BITCOINS! Bent u er zeker van dat u uw portemonnee wilt versleutelen?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Voer uw nieuwe portemonneewachtwoord nogmaals in.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>Fout: De opgegeven wachtwoorden kwamen niet overeen.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Portemonneeversleuteling mislukt.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Portemonnee versleuteld. -Onthoud dat het versleutelen van uw portemonnee uw bitcoins niet volledig kan beschermen tegen diefstal, bijvoorbeeld door malware die uw computer infecteert.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>Portemonnee is onversleuteld, gelieve deze eerst te versleutelen.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>Voer het nieuwe portemonneewachtwoord in.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>Voer het nieuwe portemonneewachtwoord opnieuw in.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>Portemonnewachtwoord veranderd.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Nieuw Ontvangstadres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>Het is aan te raden om een nieuw adres te gebruiken voor elke betaling die u ontvangt. - -Etiket</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>Status:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, is nog niet succesvol uitgezonden</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, uitgezonden door %d node</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, uitgezonden door %d nodes</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>Datum:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>Bron:</b> Gegenereerd <br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>Uit:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>onbekend</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>Aan:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation>(uw, etiket:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation>(uw)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>Credit:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s wordt verwezenlijkt in %d meer blokken)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(Niet geaccepteerd)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>Debet:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>Transactiekosten:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>Netto bedrag:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>Bericht:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>Commentaar:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Gegeneerde munten moeten 120 blokken wachten voor ze kunnen worden uitgegeven. Je net gegenereerde blok is uitgezonden aan het netwerk om te worden toegevoegd aan de blokkenketting. Als het niet wordt geaccepteerd in de ketting, zal het blok als "ongeldig" worden aangemerkt en kan het niet worden uitgegeven. Dit kan soms gebeuren als een andere node net iets sneller een blok heeft gegenereerd; een paar seconden voor de uwe.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>Kan niet schrijven naar bestand autostart/bitcoin.desktop</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>Algemeen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>&Start Bitcoin bij het opstarten van het systeem</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>&Minimaliseer bij afsluiten</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>versie %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>Fout in bedrag</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>Verstuur munten</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>Bedrag is hoger dan uw saldo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>Totaal is hoger dan uw saldo als de</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation>transactiekosten zijn meegerekend</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>Betaling verzonden</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Aan het versturen...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>Ongeldig adres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>%s aan het versturen naar %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>GEANNULEERD</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>Geannuleerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>Overschrijving geannuleerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>Fout:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Ontoereikend saldo</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>Aan het verbinden...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>Kan geen verbinding maken</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>Publieke sleutel aan het aanvragen ...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>Publieke sleutel ontvangen...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>Ontvanger accepteert geen transacties verzonden per IP-adres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>Overschrijving was niet geaccepteerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>Ongeldig antwoord ontvangen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>Transactie aan het creëren...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>Deze transactie vereist transactiekosten van tenminste %s vanwege het bedrag, de complexiteit, of het gebruik van recentelijk ontvangen munten</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>Transactiecreatie mislukt</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>Transactie geannuleerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>Verbinding verbroken, transactie geannuleerd</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>Betaling aan het versturen...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>Aan het wachten voor bevestiging...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>De betaling was verzonden, maar de ontvanger was niet in staat om deze te verifiëren. -De transactie is opgeslagen en zal ten goede komen aan de ontvanger, -maar het commentaarveld zal leeg zijn</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>Betaling is verzonden, maar een ongeldig antwoord was ontvangen</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>Betaling voltooid</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>Naam</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>Adres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>Etiket</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>Bitcoinadres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>Dit is een van uw eigen adressen voor het ontvangen van betalingen en kan niet worden ingevoerd in het adresboek.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>Bewerk Adres</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>Bewerk Adresetiket</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>Voeg Adres Toe</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation>Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>Bitcoin - Aan het genereren</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>Bitcoin - (niet verbonden)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>&Open Bitcoin</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>&Verstuur Bitcoins</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>O&pties...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>A&fsluiten</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>Het programma is gecrasht en zal worden beëindigd. </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="213"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation>Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal Bitcoin niet correct werken.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>beta</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts new file mode 100644 index 0000000000..af42dc0249 --- /dev/null +++ b/src/qt/locale/bitcoin_pl.ts @@ -0,0 +1,1984 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="pl" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>O Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation>Wersja <b>Bitcoin</b></translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Copyright © 2009-2012 Bitcoin Developers + +Oprogramowanie eksperymentalne. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + +Pomóż w tłumaczeniu: +www.transifex.net/projects/p/bitcoin/</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adresy</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Tutaj znajdują się twoje adresy Bitcoin do odbioru płatności. Możesz nadać oddzielne adresy dla każdego z wysyłających monety, żeby śledzić oddzielnie ich opłaty.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Kliknij dwukrotnie, aby edytować adres lub etykietę</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Utwórz nowy adres</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nowy adres...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Skopiuj aktualnie wybrany adres do schowka</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Kopiuj do schowka</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Pokaż Kod &QR</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Podpisz wiadomość aby dowieść, że ten adres jest twój</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>Podpi&sz Wiadomość</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Usuń aktualnie wybrany adres z listy. Tylko adresy nadawcze mogą być usunięte.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Usuń</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopiuj adres</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopiuj etykietę</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Edytuj</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Usuń</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Eksportuj książkę adresową</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>CSV (rozdzielany przecinkami)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Błąd podczas eksportowania</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Błąd zapisu do pliku %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etykieta</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(bez etykiety)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TekstEtykiety</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Wpisz hasło</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nowe hasło</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Powtórz nowe hasło</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Wprowadź nowe hasło dla portfela.<br/>Proszę użyć hasła składającego się z <b>10 lub więcej losowych znaków</b> lub <b>ośmiu lub więcej słów</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Zaszyfruj portfel</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Ta operacja wymaga hasła do portfela ażeby odblokować portfel.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Odblokuj portfel</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Ta operacja wymaga hasła do portfela ażeby odszyfrować portfel.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Odszyfruj portfel</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Zmień hasło</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Podaj stare i nowe hasło do portfela.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Potwierdź szyfrowanie portfela</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>OSTRZEŻENIE: Jeśli zaszyfrujesz portfel i zgubisz hasło, wtedy <b>STRACISZ WSZYSTKIE SWOJE BITMONETY</b> +Czy na pewno chcesz zaszyfrować swój portfel?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Portfel zaszyfrowany</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Ostrzeżenie: Caps Lock jest włączony.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Szyfrowanie portfela nie powiodło się</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Szyfrowanie portfela nie powiodło się z powodu wewnętrznego błędu. Twój portfel nie został zaszyfrowany.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Podane hasła nie są takie same.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Odblokowanie portfela nie powiodło się</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Wprowadzone hasło do odszyfrowania portfela jest niepoprawne.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Odszyfrowywanie portfela nie powiodło się</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Hasło do portfela zostało pomyślnie zmienione.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Portfel Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synchronizacja z siecią...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Synchronizacja bloku łańcucha w toku.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>P&odsumowanie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Pokazuje ogólny zarys portfela</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transakcje</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Przeglądaj historię transakcji</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>Książka &adresowa</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Edytuj listę zapisanych adresów i i etykiet</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>Odbie&rz monety</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Pokaż listę adresów do otrzymywania płatności</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>Wy&syłka monet</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Wyślij monety na adres bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Podpisz wiado&mość</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Udowodnij, że kontrolujesz adres</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Zakończ</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Zamknij program</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&O %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Pokaż informację o Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>O &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Pokazuje informacje o Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opcje...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Zmienia opcje konfiguracji bitcoina</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Otwórz &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Pokaż okno Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Eksportuj...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>Zaszyfruj portf&el</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Zaszyfruj lub odszyfruj portfel</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>Zmień h&asło</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Zmień hasło użyte do szyfrowania portfela</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Plik</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>P&referencje</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>Pomo&c</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Pasek zakładek</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Pasek akcji</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktywne połączenie do sieci Bitcoin</numerusform><numerusform>%n aktywne połączenia do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Pobrano %1 z %2 bloków z historią transakcji.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Pobrano %1 bloków z historią transakcji.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n sekundę temu</numerusform><numerusform>%n sekundy temu</numerusform><numerusform>%n sekund temu</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n minutę temu</numerusform><numerusform>%n minuty temu</numerusform><numerusform>%n minut temu</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n godzinę temu</numerusform><numerusform>%n godziny temu</numerusform><numerusform>%n godzin temu</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n dzień temu</numerusform><numerusform>%n dni temu</numerusform><numerusform>%n dni temu</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Aktualny</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Łapanie bloków...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Ostatnio otrzymany blok została wygenerowany %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Wysyłanie...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Transakcja wysłana</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Transakcja przychodząca</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Data: %1 +Kwota: %2 +Typ: %3 +Adres: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Portfel jest <b>zaszyfrowany</b> i obecnie <b>niezablokowany</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Jednostka pokazywana przy kwocie:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Wybierz podział jednostki pokazywany w interfejsie oraz podczas wysyłania monet</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Wyświetlaj adresy w liście transakcji</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Edytuj adres</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Etykieta</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Etykieta skojarzona z tym wpisem w książce adresowej</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adres</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Ten adres jest skojarzony z wpisem w książce adresowej. Może być zmodyfikowany jedynie dla adresów wysyłających.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nowy adres odbiorczy</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nowy adres wysyłania</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Edytuj adres odbioru</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Edytuj adres wysyłania</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Wprowadzony adres "%1" już istnieje w książce adresowej.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Wprowadzony adres "%1" nie jest prawidłowym adresem bitcoin.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Nie można było odblokować portfela.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Tworzenie nowego klucza nie powiodło się.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>Uruchom Bitcoin wraz ze &startem systemu okien</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automatyczne uruchamia Bitcoin po włączeniu komputera</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimalizuj do paska przy zegarku zamiast do paska zadań</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Pokazuje tylko ikonę przy zegarku po zminimalizowaniu okna</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Mapuj port używając &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automatycznie otwiera port klienta Bitcoin na routerze. Ta opcja dzieła tylko jeśli twój router wspiera UPnP i jest ono włączone.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimalizuj przy zamykaniu</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimalizuje zamiast zakończyć działanie programu przy zamykaniu okna. Kiedy ta opcja jest włączona, program zakończy działanie po wybieraniu Zamknij w menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>Połącz przez proxy SO&CKS4:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Łączy się z siecią Bitcoin przez proxy SOCKS4 (np. kiedy łączysz się przez Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Adres IP serwera proxy (np. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port proxy (np. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Opcjonalna prowizja za transakcje za kB, wspomaga ona szybkość przebiegu transakcji. Większość transakcji jest 1 kB. Zalecana prowizja 0.01 .</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Płać prowizję za t&ransakcje</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Opcjonalna prowizja za transakcje za kB, wspomaga ona szybkość przebiegu transakcji. Większość transakcji jest 1 kB. Zalecana prowizja 0.01 .</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Wiadomość</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adres do wysłania należności do (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Wybierz adres z książki adresowej</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Wklej adres ze schowka</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Wprowadź wiadomość, którą chcesz podpisać, tutaj</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Kliknij "Podpisz Wiadomość" żeby uzyskać podpis</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Podpisz wiadomość aby dowieść, że ten adres jest twój</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>Podpi&sz Wiadomość</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Skopiuj aktualnie wybrany adres do schowka</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopiuj do schowka</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Błąd podpisywania</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 nie jest poprawnym adresem.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Klucz prywatny dla %1 jest niedostępny.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Podpisywanie nie powiodło się.</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Główny</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Wyświetlanie</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Opcje</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Formularz</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Liczba transakcji:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Niepotwierdzony:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Portfel</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Ostatnie transakcje</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Twoje obecne saldo</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Suma transakcji, które nie zostały jeszcze potwierdzone, i które nie zostały wliczone do twojego obecnego salda</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Całkowita liczba transakcji w portfelu</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>Kod QR</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Prośba o płatność</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Kwota:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Etykieta:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Wiadomość:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>Zapi&sz jako...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Wyślij płatność</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Wyślij do wielu odbiorców na raz</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>Dod&aj odbiorcę...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Wyczyść wszystkie pola transakcji</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Wyczyść wszystko</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Potwierdź akcję wysyłania</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>Wy&syłka</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> do %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Potwierdź wysyłanie monet</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Czy na pewno chcesz wysłać %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> i </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Adres odbiorcy jest niepoprawny, proszę go sprawdzić.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Kwota do zapłacenie musi być większa od 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Kwota przekracza twoje saldo</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Suma przekracza twoje saldo, gdy doliczymy %1 prowizji transakcyjnej</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Znaleziono powtórzony adres, można wysłać tylko raz na adres, w jednej operacji wysyłania</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Błąd: Tworzenie transakcji nie powiodło się </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Formularz</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Su&ma:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Płać &Do:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Wprowadź etykietę dla tego adresu by dodać go do książki adresowej</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Etykieta:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adres do wysłania należności do (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Wybierz adres z książki adresowej</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Wklej adres ze schowka</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Usuń tego odbiorce</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Wprowadź adres Bitcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Otwórz dla %1 bloków</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Otwórz do %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/niezatwierdzone</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 potwierdzeń</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Status:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, nie został jeszcze pomyślnie wyemitowany</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, emitowany przez %1 węzeł</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, emitowany przez %1 węzły</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Data:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Źródło:</b> Wygenerowano<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Od:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>nieznany</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Do:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (twoje, etykieta: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (twoje)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Przypisy:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(niezaakceptowane)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debet:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Prowizja transakcyjna:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Kwota netto:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Wiadomość:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Komentarz:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID transakcji:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Wygenerowane monety muszą zaczekać 120 bloków zanim będzie można je wydać. Kiedy wygenerowałeś ten blok, został on wyemitowany do sieci, aby dodać go do łańcucha bloków. Jeśli to się nie powiedzie nie zostanie on zaakceptowany i wygenerowanych monet nie będzie można wysyłać. Może się to czasami zdarzyć jeśli inny węzeł wygeneruje blok tuż przed tobą.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Szczegóły transakcji</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Ten panel pokazuje szczegółowy opis transakcji</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Kwota</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Otwórz dla %n bloku</numerusform><numerusform>Otwórz dla %n bloków</numerusform><numerusform>Otwórz dla %n bloków</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Otwórz do %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 potwierdzeń)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Niezatwierdzony (%1 z %2 potwierdzeń)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Zatwierdzony (%1 potwierdzeń)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Wydobyta kwota będzie dostępna za %n blok</numerusform><numerusform>Wydobyta kwota będzie dostępna za %n bloków</numerusform><numerusform>Wydobyta kwota będzie dostępna za %n bloki</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Ten blok nie został odebrany przez jakikolwiek inny węzeł i prawdopodobnie nie zostanie zaakceptowany!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Wygenerowano ale nie zaakceptowano</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Otrzymane przez</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Odebrano od</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Wysłano do</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Płatność do siebie</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Wydobyto</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(brak)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Status transakcji. Najedź na pole, aby zobaczyć liczbę potwierdzeń.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Data i czas odebrania transakcji.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Rodzaj transakcji.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Adres docelowy transakcji.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Kwota usunięta z lub dodana do konta.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Wszystko</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Dzisiaj</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>W tym tygodniu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>W tym miesiącu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>W zeszłym miesiącu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>W tym roku</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Zakres...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Otrzymane przez</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Wysłano do</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Do siebie</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Wydobyto</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Inne</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Wprowadź adres albo etykietę żeby wyszukać</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Min suma</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopiuj adres</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopiuj etykietę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopiuj kwotę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Edytuj etykietę</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Pokaż szczegóły...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Eksportuj Dane Transakcyjne</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>CSV (rozdzielany przecinkami)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Potwierdzony</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etykieta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Kwota</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Błąd podczas eksportowania</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Błąd zapisu do pliku %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Zakres:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>do</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Wysyłanie...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Wersja Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Użycie:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Wyślij polecenie do -server lub bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Lista poleceń</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Uzyskaj pomoc do polecenia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Opcje:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Wskaż plik konfiguracyjny (domyślnie: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Wskaż plik pid (domyślnie: bitcoin.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generuj monety</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Nie generuj monet</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Uruchom zminimalizowany</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Wskaż folder danych</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Wskaż czas oczekiwania bezczynności połączenia (w milisekundach)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Łączy przez proxy socks4</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Nasłuchuj połączeń na <port> (domyślnie: 8333 lub testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Utrzymuj maksymalnie <n> połączeń z peerami (domyślnie: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Dodaj węzeł do łączenia się</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Łącz tylko do wskazanego węzła</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Nie akceptuj połączeń zewnętrznych</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksymalny bufor odbioru na połączenie, <n>*1000 bajtów (domyślnie: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maksymalny bufor wysyłu na połączenie, <n>*1000 bajtów (domyślnie: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Nie próbuj używać UPnP do mapowania portu nasłuchu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Próbuj używać UPnP do mapowania portu nasłuchu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Prowizja za kB dodawana do wysyłanej transakcji</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Uruchom w tle jako daemon i przyjmuj polecenia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Użyj sieci testowej</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Nazwa użytkownika dla połączeń JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Hasło do połączeń JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Nasłuchuj połączeń JSON-RPC na <port> (domyślnie: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Przyjmuj połączenia JSON-RPC ze wskazanego adresu IP</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Wysyłaj polecenia do węzła działającego na <ip> (domyślnie: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Ustaw rozmiar puli kluczy na <n> (domyślnie: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Przeskanuj blok łańcuchów żeby znaleźć zaginione transakcje portfela</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +opcje SSL: (sprawdź Bitcoin Wiki dla instrukcje konfiguracji SSL)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Użyj OpenSSL (https) do połączeń JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Plik certyfikatu serwera (domyślnie: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Klucz prywatny serwera (domyślnie: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Aceptowalne szyfry (domyślnie: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Ta wiadomość pomocy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Nie można zablokować folderu danych %s. Bitcoin prawdopodobnie już działa.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Wczytywanie adresów...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Błąd ładowania addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Błąd ładownia blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Błąd ładowania wallet.dat: Uszkodzony portfel</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Błąd ładowania wallet.dat: Portfel wymaga nowszej wersji Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Portfel wymaga przepisania: zrestartuj Bitcoina żeby ukończyć</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Błąd ładowania wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Ładowanie indeksu bloku...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Wczytywanie portfela...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Ponowne skanowanie...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Wczytywanie zakończone</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Nieprawidłowy adres -proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Nieprawidłowa kwota dla -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Ostrzeżenie: -paytxfee jest bardzo duży. To jest prowizja za transakcje, którą płacisz, gdy wysyłasz monety.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Błąd: CreateThread(StartNode) nie powiodło się</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Ostrzeżenie: kończy się miejsce na dysku</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Nie można przywiązać portu %d na tym komputerze. Bitcoin prawdopodobnie już działa.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Ostrzeżenie: Proszę sprawdzić poprawność czasu i daty na tym komputerze. Jeśli czas jest zły Bitcoin może nie działać prawidłowo.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts new file mode 100644 index 0000000000..69568f4a94 --- /dev/null +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -0,0 +1,2005 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="pt_BR" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Sobre o Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> versão</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Catálogo de endereços</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Estes são os seus endereços Bitcoin para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Clique duas vezes para editar o endereço ou o etiqueta</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Criar um novo endereço</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&amp; Novo endereço ...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copie o endereço selecionado para a área de transferência do sistema</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&amp; Copie para a área de transferência do sistema</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Excluir o endereço selecionado da lista. Apenas endereços de envio podem ser excluídos.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&amp; Excluir</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copy address</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copy label</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exportação de dados do Catálogo de Endereços</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Arquivo separado por vírgulas (*. csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Erro ao exportar</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Could not write to file %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Rótulo</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Endereço</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(Sem rótulo)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Diálogo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TextoDoRótulo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Digite a frase de segurança</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nova frase de segurança</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Repita a nova frase de segurança</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Digite a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras.</b></translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Criptografar carteira</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Esta operação precisa de sua frase de segurança para desbloquear a carteira.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Desbloquear carteira</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Esta operação precisa de sua frase de segurança para descriptografar a carteira.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Descriptografar carteira</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Alterar frase de segurança</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Digite a frase de segurança antiga e nova para a carteira.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Confirmar criptografia da carteira</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>AVISO: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus BITCOINS!</b> Tem certeza de que deseja criptografar sua carteira?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Carteira criptografada</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>A criptografia da carteira falhou</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>A criptografia da carteira falhou devido a um erro interno. Sua carteira não estava criptografada.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>A frase de segurança fornecida não confere.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>A abertura da carteira falhou</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>A frase de segurança digitada para a descriptografia da carteira estava incorreta.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>A descriptografia da carteira falhou</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>A frase de segurança da carteira foi alterada com êxito.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Carteira Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Sincronizando com a rede...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Sincronização da corrente de blocos em andamento</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Visão geral</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Mostrar visão geral da carteira</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transações</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Navegar pelo histórico de transações</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Catálogo de endereços</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Editar a lista de endereços e rótulos</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Receber moedas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Mostrar a lista de endereços para receber pagamentos</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Enviar moedas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Enviar moedas para um endereço bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>E&xit</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Sair da aplicação</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&About %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Mostrar informação sobre Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Opções...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Modificar opções de configuração para bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Abrir &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Mostrar a janela Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Exportar...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Criptografar Carteira</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Criptografar ou decriptogravar carteira</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Mudar frase de segurança</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Mudar a frase de segurança utilizada na criptografia da carteira</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&amp; Arquivo</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>E configurações</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&amp; Ajuda</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Barra de ferramentas</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Barra de ações</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n conexão ativa na rede Bitcoin</numerusform><numerusform>%n conexões ativas na rede Bitcoin</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Carregados %1 de %2 blocos do histórico de transações.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Carregados %1 blocos do histórico de transações.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n segundo atrás</numerusform><numerusform>%n segundos atrás</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n minutos atrás</numerusform><numerusform>%n minutos atrás</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n hora atrás</numerusform><numerusform>%n horas atrás</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n dia atrás</numerusform><numerusform>%n dias atrás</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Atualizado</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Recuperando o atraso ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Last received block was generated %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Sending...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Sent transaction</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Incoming transaction</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Data: %1 +Quantidade: %2 +Tipo: %3 +Endereço: %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Wallet is <b>encrypted</b> and currently <b>unlocked</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Wallet is <b>encrypted</b> and currently <b>locked</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Unit to show amounts in: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Choose the default subdivision unit to show in the interface, and when sending coins</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Display addresses in transaction list</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Edit Address</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Label</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>The label associated with this address book entry</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Address</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>The address associated with this address book entry. This can only be modified for sending addresses.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>New receiving address</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>New sending address</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Edit receiving address</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Edit sending address</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>The entered address "%1" is already in the address book.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>The entered address "%1" is not a valid bitcoin address.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Could not unlock wallet.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>New key generation failed.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Start Bitcoin on window system startup</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automatically start Bitcoin after the computer is turned on</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimize to the tray instead of the taskbar</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Show only a tray icon after minimizing the window</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Map port using &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimize on close</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Connect through SOCKS4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP address of the proxy (e.g. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port of the proxy (e.g. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Pay transaction &fee</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Escolher endereço </translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Paste address from clipboard</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copie o endereço selecionado para a área de transferência do sistema</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&amp; Copie para a área de transferência do sistema</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Main</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Display</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Options</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Balance:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Number of transactions:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Unconfirmed:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Recent transactions</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Your current balance</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Total number of transactions in wallet</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Diálogo</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Message:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Send Coins</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Send to multiple recipients at once</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Add recipient...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Clear all</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Balance:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Confirm the send action</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Send</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> to %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Confirm send coins</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Are you sure you want to send %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> and </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>The recepient address is not valid, please recheck.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>The amount to pay must be larger than 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Amount exceeds your balance</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Total exceeds your balance when the %1 transaction fee is included</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Duplicate address found, can only send to each address once in one send operation</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Error: Transaction creation failed </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>A&mount:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Pay &To:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Enter a label for this address to add it to your address book</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Label:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Choose address from address book</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Paste address from clipboard</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Remove this recipient</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Open for %1 blocks</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Open until %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/unconfirmed</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 confirmations</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Status:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, has not been successfully broadcast yet</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, broadcast through %1 node</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, broadcast through %1 nodes</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Date:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Source:</b> Generated<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>From:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>unknown</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>To:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (yours, label: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (yours)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Credit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 matures in %2 more blocks)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(not accepted)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Transaction fee:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Net amount:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Message:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Comment:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Transaction details</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>This pane shows a detailed description of the transaction</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Date</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Address</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Amount</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Open for %n block</numerusform><numerusform>Open for %n blocks</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Open until %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 confirmations)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Unconfirmed (%1 of %2 confirmations)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Confirmed (%1 confirmations)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Mined balance will be available in %n more block</numerusform><numerusform>Mined balance will be available in %n more blocks</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>This block was not received by any other nodes and will probably not be accepted!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Generated but not accepted</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Received with</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Sent to</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Payment to yourself</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Mined</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Transaction status. Hover over this field to show number of confirmations.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Date and time that the transaction was received.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Type of transaction.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Destination address of transaction.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Amount removed from or added to balance.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>All</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Today</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>This week</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>This month</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Last month</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>This year</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Range...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Received with</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Sent to</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>To yourself</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Mined</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Other</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Enter address or label to search</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Min amount</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Copy address</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Copy label</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Edit label</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Show details...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Export Transaction Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Comma separated file (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Confirmed</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Date</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Label</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Address</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Amount</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Error exporting</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Could not write to file %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Range:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>to</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Sending...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin version</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Usage:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Send command to -server or bitcoind +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>List commands +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Get help for a command +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Options: +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Specify configuration file (default: bitcoin.conf) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Specify pid file (default: bitcoind.pid) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generate coins +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Don't generate coins +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Start minimized +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Specify data directory +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Specify connection timeout (in milliseconds) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Connect through socks4 proxy +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Allow DNS lookups for addnode and connect +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Add a node to connect to +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Connect only to the specified node +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Don't accept connections from outside +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Don't attempt to use UPnP to map the listening port +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Attempt to use UPnP to map the listening port +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Accept command line and JSON-RPC commands +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Run in the background as a daemon and accept commands +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Use the test network +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Username for JSON-RPC connections +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Password for JSON-RPC connections +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Listen for JSON-RPC connections on <port> (default: 8332) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Allow JSON-RPC connections from specified IP address +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Send commands to node running on <ip> (default: 127.0.0.1) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Set key pool size to <n> (default: 100) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Rescan the block chain for missing wallet transactions +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL options: (see the Bitcoin Wiki for SSL setup instructions) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Use OpenSSL (https) for JSON-RPC connections +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Server certificate file (default: server.cert) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Server private key (default: server.pem) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>This help message +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Loading addresses...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Loading block index...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Loading wallet...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Rescanning...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Done loading</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Invalid -proxy address</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Invalid amount for -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Error: CreateThread(StartNode) failed</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Warning: Disk space is low </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Unable to bind to port %d on this computer. Bitcoin is probably already running.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts new file mode 100644 index 0000000000..17c71e48f6 --- /dev/null +++ b/src/qt/locale/bitcoin_ro_RO.ts @@ -0,0 +1,1968 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="ro_RO" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Despre Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> versiunea</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Listă de adrese</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Acestea sunt adresele dumneavoastră Bitcoin pentru a primi plăţi. Dacă doriţi, puteți da o adresa diferită fiecărui expeditor, pentru a putea ţine evidenţa plăţilor.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dublu-click pentru a edita adresa sau eticheta</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Creaţi o adresă nouă</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Adresă nouă...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copiați adresa selectată în clipboard</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Copiere în Clipboard</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Ștergeți adresa selectată din listă. Doar adresele de trimitere pot fi șterse.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Șterge</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Copiază adresa</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Copiază eticheta</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exportă Lista de adrese</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Fisier csv: valori separate prin virgulă (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Eroare la exportare.</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Eroare la scrierea în fişerul %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etichetă</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresă</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(fără etichetă)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Textul etichetei</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Introduceți fraza de acces.</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Frază de acces nouă </translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Repetaţi noua frază de acces</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Introduceţi noua parolă a portofelului electronic.<br/>Vă rugăm să folosiţi <b>minimum 10 caractere aleatoare</b>, sau <b>minimum 8 cuvinte</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Criptează portofelul</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Aceasta operație are nevoie de un portofel deblocat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Deblochează portofelul</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Această operaţiune necesită parola pentru decriptarea portofelului electronic.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Decriptează portofelul.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Schimbă fraza de acces</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Introduceţi vechea parola a portofelului eletronic şi apoi pe cea nouă.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Confirmă criptarea portofelului.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>ATENŢIE: Dacă pierdeţi parola portofelului electronic dupa criptare, <b>VEŢI PIERDE ÎNTREAGA SUMĂ DE BITCOIN ACUMULATĂ</b>! +Sunteţi sigur că doriţi să criptaţi portofelul electronic?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Portofel criptat </translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Criptarea portofelului a eșuat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Criptarea portofelului a eșuat din cauza unei erori interne. Portofelul tău nu a fost criptat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Fraza de acces introdusă nu se potrivește.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Deblocarea portofelului electronic a eşuat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Parola introdusă pentru decriptarea portofelului electronic a fost incorectă.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Decriptarea portofelului electronic a eşuat.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Parola portofelului electronic a fost schimbată.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Portofel electronic Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Se sincronizează cu reţeaua...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Se sincronizează blocurile.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Detalii</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Afişează detalii despre portofelul electronic</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Tranzacţii</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Istoricul tranzacţiilor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Lista de adrese</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Editaţi lista de adrese şi etichete.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Primiţi Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Lista de adrese pentru recepţionarea plăţilor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Trimiteţi Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>&Trimiteţi Bitcoin către o anumită adresă</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Părăsiţi aplicaţia</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Informaţii despre Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Setări...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Modifică setările pentru Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Deschide &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Afişează fereastra Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Exportă...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>Criptează portofelul electronic</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Criptează şi decriptează portofelul electronic</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Schimbă parola</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>&Schimbă parola folosită pentru criptarea portofelului electronic</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Fişier</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Setări</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Ajutor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Bara de ferestre de lucru</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Bara de acţiuni</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n active connections to Bitcoin network</numerusform><numerusform>%n active connections to Bitcoin network</numerusform><numerusform>%n active connections to Bitcoin network</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>S-au descărcat %1 din %2 blocuri din istoricul tranzaciilor.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>S-au descărcat %1 blocuri din istoricul tranzaciilor.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n seconds ago</numerusform><numerusform>%n seconds ago</numerusform><numerusform>%n seconds ago</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>Acum %n minut</numerusform><numerusform>Acum %n minute</numerusform><numerusform>Acum %n minute</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>Acum %n oră</numerusform><numerusform>Acum %n ore</numerusform><numerusform>Acum %n ore</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>Acum %n zi</numerusform><numerusform>Acum %n zile</numerusform><numerusform>Acum %n zile</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Actualizat</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Se actualizează...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Ultimul bloc primit a fost generat %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Această tranzacţie depăşeşte limita. Puteţi iniţia tranzacţia platind un comision de %1, de care vor beneficia nodurile care procesează tranzacţia şi ajută la menţinerea reţelei. Acceptaţi plata comisionului?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Expediază...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Tranzacţie expediată</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Tranzacţie recepţionată</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Portofelul electronic este <b>criptat</b> iar in momentul de faţă este <b>deblocat</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Portofelul electronic este <b>criptat</b> iar in momentul de faţă este <b>blocat</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Unitatea de măsură pentru afişarea sumelor: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Alege subdiviziunea folosită la afişarea interfeţei şi la trimiterea de bitcoin.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Afişează adresele în lista de tranzacţii</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Editează adresa</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Eticheta</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Eticheta asociată cu această înregistrare în Lista de adrese</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresă</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Adresa asociată cu această înregistrare în Lista de adrese. Aceasta poate fi modificată doar pentru expediere.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Noua adresă de primire</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Noua adresă de trimitere</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Editează adresa de primire</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Editează adresa de trimitere</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Adresa introdusă "%1" se află deja în Lista de adrese.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Adresa introdusă "%1" nu este o adresă bitcoin valabilă.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Portofelul electronic nu a putut fi deblocat .</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>New key generation failed.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&S Porneşte Bitcoin la pornirea sistemului</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Porneşte automat programul Bitcoin la pornirea computerului.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&M Ascunde în tray în loc de taskbar</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Afişează doar un icon in tray la ascunderea ferestrei</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Mapeaza portul folosind &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Deschide automat în router portul aferent clientului Bitcoin. Funcţionează doar în cazul în care routerul e compatibil UPnP şi opţiunea e activată.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>&i Ascunde fereastra în locul închiderii programului</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Ascunde fereastra în locul părăsirii programului în momentul închiderii ferestrei. Când acestă opţiune e activă, aplicaţia se va opri doar în momentul selectării comenzii Quit din menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Conectează prin proxy SOCKS4:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Conectare la reţeaua Bitcoin folosind un proxy SOCKS4 (de exemplu, când conexiunea se stabileşte prin reţeaua Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Adresa de IP a proxy serverului (de exemplu: 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Portul pe care se concetează proxy serverul (de exemplu: 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Plăteşte comision pentru tranzacţie &f</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa către care se va face plata (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Alegeţi adresa din Listă</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Lipiţi adresa copiată in clipboard.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Copiați adresa selectată în clipboard</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Copiere în Clipboard</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Principal</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Afişare</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Setări</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Balanţă:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Număr total de tranzacţii:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Neconfirmat:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Ultimele tranzacţii</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Soldul contul</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Totalul tranzacţiilor care aşteaptă să fie confirmate şi care nu sunt încă luate în calcul la afişarea soldului contului.</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Numărul total de tranzacţii din portofelul electronic</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Mesaj:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Trimite Bitcoin</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Trimite simultan către mai mulţi destinatari</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Adaugă destinatar...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Şterge tot</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Balanţă:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Confirmă operaţiunea de trimitere</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&S Trimite</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> la %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Confirmaţi trimiterea de bitcoin</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Sunteţi sigur că doriţi să trimiteţi %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> şi </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Adresa destinatarului nu este validă, vă rugăm să o verificaţi.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Suma de plată trebuie să fie mai mare decât 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Suma depăşeşte soldul contului.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Total depăşeşte soldul contului in cazul plăţii comisionului de %1.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>S-a descoperit o adresă care figurează de două ori. Expedierea se poate realiza către fiecare adresă doar o singură dată pe operaţiune.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Eroare: Tranyacţia nu a putut fi iniţiată </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Eroare: Tranyacţia a fost respinsă. Acesta poate fi rezultatul cheltuirii prealabile a unei sume de bitcoin din portofelul electronic, ca în cazul folosirii unei copii a fisierului wallet.dat, în care s-au efectuat tranzacţii neînregistrate în fisierul curent.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Su&mă :</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Plăteşte Că&tre:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Adaugă o etichetă acestei adrese pentru a o trece în Lista de adrese</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&L Etichetă:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa către care se va face plata (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Lipiţi adresa copiată in clipboard.</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Şterge destinatarul</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Introduceţi o adresă Bitcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Deschis pentru %1 blocuri</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Deschis până la %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/offline?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/neconfirmat</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 confirmări</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Stare:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, nu s-a propagat încă</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, se propagă prin %1 nod</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, se propagă prin %1 noduri</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Data:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Sursă:</b> Generat<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>De la:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>necunoscut</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Către:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (propriu, etichetă: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (propriu)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Credit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 se definitivează peste %2 blocuri)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(nu este acceptat)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Comisionul tranzacţiei:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Suma netă:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Mesaj:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Comentarii:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Monedele bitcoin generate se pot cheltui dupa parcurgerea a 120 de blocuri. După ce a fost generat, s-a propagat în reţea, urmând să fie adăugat lanţului de blocuri. Dacă nu poate fi inclus in lanţ, starea sa va deveni "neacceptat" si nu va putea fi folosit la tranzacţii. Acest fenomen se întâmplă atunci cand un alt nod a generat un bloc la o diferenţa de câteva secunde.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Detaliile tranzacţiei</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Afişează detalii despre tranzacţie</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tipul</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Cantitate</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Deschis pentru for %n bloc</numerusform><numerusform>Deschis pentru %n blocuri</numerusform><numerusform>Deschis pentru %n blocuri</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Deschis până la %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Neconectat (%1 confirmări)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Neconfirmat (%1 din %2 confirmări)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Confirmat (%1 confirmări)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Soldul de bitcoin produs va fi disponibil după încă %n bloc</numerusform><numerusform>Soldul de bitcoin produs va fi disponibil după încă %n blocuri</numerusform><numerusform>Soldul de bitcoin produs va fi disponibil după încă %n blocuri</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Blocul nu a fost recepţionat de niciun alt nod şi e probabil că nu va fi acceptat.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Generat, dar neacceptat</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Recepţionat cu</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Trimis către</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Plată către un cont propriu</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Produs</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Starea tranzacţiei. Treceţi cu mouse-ul peste acest câmp pentru afişarea numărului de confirmări.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Data şi ora la care a fost recepţionată tranzacţia.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Tipul tranzacţiei.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Adresa de destinaţie a tranzacţiei.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Suma extrasă sau adăugată la sold.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Toate</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Astăzi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Săptămâna aceasta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Luna aceasta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Luna trecută</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Anul acesta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Între...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Recepţionat cu...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Trimis către</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Către propriul cont</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Produs</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Altele</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Introduceţi adresa sau eticheta pentru căutare</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Cantitatea produsă</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Copiază adresa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Copiază eticheta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Editează eticheta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Afişează detalii...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Exportă tranzacţiile</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Fişier text cu valori separate prin virgulă (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Confirmat</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tipul</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etichetă</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresă</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Sumă</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Eroare în timpul exportului</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Fisierul %1 nu a putut fi accesat pentru scriere.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Interval:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>către</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Se expediază...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>versiunea Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Uz:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Trimite comanda la -server sau bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Listă de comenzi</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Ajutor pentru o comandă</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Setări:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Încarc adrese...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Încarc indice bloc...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Încarc portofel...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Rescanez...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Încărcare terminată</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index 804781b01a..d706b33b97 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -5,29 +5,29 @@ <message> <location filename="../forms/aboutdialog.ui" line="14"/> <source>About Bitcoin</source> - <translation>О Bitcoin'е</translation> + <translation>О Bitcoin</translation> </message> <message> <location filename="../forms/aboutdialog.ui" line="53"/> <source><b>Bitcoin</b> version</source> - <translation>Версия Bitcoin'а</translation> + <translation><b>Bitcoin</b> версия</translation> </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>Copyright © 2009-2011 Разработчики сети Bitcoin + <translation>Все права защищены © 2009-2012 Разработчики Bitcoin -ВНИМАНИЕ: этот софт является экспериментальным! +Это экспериментальная программа. -Распространяется под лицензией MIT/X11, за дополнительной информацией обращайтесь к прилагающемуся файлу license.txt или документу по данной ссылке: http://www.opensource.org/licenses/mit-license.php. +Распространяется на правах лицензии MIT/X11, см. файл license.txt или http://www.opensource.org/licenses/mit-license.php. -Данный продукт включает в себя разработки проекта OpenSSL (http://www.openssl.org/), криптографические функции и алгоритмы, написанные Эриком Янгом (eay@cryptsoft.com) и функции для работы с UPnP за авторством Томаса Бернарда.</translation> +Этот продукт включате ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (http://www.openssl.org/) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com) и ПО для работы с UPnP, написанное Thomas Bernard.</translation> </message> </context> <context> @@ -69,31 +69,66 @@ This product includes software developed by the OpenSSL Project for use in the O </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Показать &QR код</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Подпишите сообщение для доказательства </translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Подписать сообщение</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>Удалить выделенный адрес из списка (могут быть удалены только записи из адресной книги).</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>&Удалить</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Копировать адрес</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Копировать метку</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Правка</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Удалить</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>Экспортировать адресную книгу</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>Текст, разделённый запятыми (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>Ошибка экспорта</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>Невозможно записать в файл %1.</translation> </message> @@ -121,391 +156,454 @@ This product includes software developed by the OpenSSL Project for use in the O <message> <location filename="../forms/askpassphrasedialog.ui" line="26"/> <source>Dialog</source> - <translation type="unfinished"/> + <translation>Dialog</translation> </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> - <translation type="unfinished"/> + <translation>TextLabel</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> - <translation type="unfinished"/> + <translation>Введите пароль</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> - <translation type="unfinished"/> + <translation>Новый пароль</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> - <translation type="unfinished"/> + <translation>Повторите новый пароль</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> - <translation type="unfinished"/> + <translation>Введите новый пароль для бумажника. <br/> Пожалуйста, используйте фразы из <b>10 или более случайных символов,</b> или <b>восьми и более слов.</b></translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> - <translation type="unfinished"/> + <translation>Зашифровать бумажник</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> - <translation type="unfinished"/> + <translation>Для выполнения операции требуется пароль вашего бумажника.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> - <translation type="unfinished"/> + <translation>Разблокировать бумажник</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> - <translation type="unfinished"/> + <translation>Для выполнения операции требуется пароль вашего бумажника.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> - <translation type="unfinished"/> + <translation>Расшифровать бумажник</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> - <translation type="unfinished"/> + <translation>Сменить пароль</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> - <translation type="unfinished"/> + <translation>Введите старый и новый пароль для бумажника.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> - <translation type="unfinished"/> + <translation>Подтвердите шифрование бумажника</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> - <translation type="unfinished"/> + <translation>ВНИМАНИЕ: Если вы зашифруете бумажник и потеряете свой пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОИНЫ!</b> +Вы действительно хотите зашифровать ваш бумажник?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> - <translation type="unfinished"/> + <translation>Бумажник зашифрован</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation type="unfinished"/> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткоины от кражи с помощью инфицирования вашего компьютера вредоносным ПО.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Внимание: Caps Lock включен.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> - <translation type="unfinished"/> + <translation>Не удалось зашифровать бумажник</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> - <translation type="unfinished"/> + <translation>Шифрование бумажника не удалось из-за внутренней ошибки. Ваш бумажник не был зашифрован.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> - <translation type="unfinished"/> + <translation>Введённые пароли не совпадают.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> - <translation type="unfinished"/> + <translation>Разблокировка бумажника не удалась</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation type="unfinished"/> + <translation>Указанный пароль не подходит.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> - <translation type="unfinished"/> + <translation>Расшифрование бумажника не удалось</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> - <translation type="unfinished"/> + <translation>Пароль бумажника успешно изменён.</translation> </message> </context> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>Bitcoin-бумажник</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>Синхронизация с сетью...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>Идёт синхронизация цепочки блоков</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>О&бзор</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>Показать общий обзор действий с бумажником</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>&Транзакции</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>Показать историю транзакций</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>&Адресная книга</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>Изменить список сохранённых адресов и меток к ним</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> - <translation>&Получение</translation> + <translation>&Получение монет</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>Показать список адресов для получения платежей</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> - <translation>Отп&равка</translation> + <translation>Отп&равка монет</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>Отправить монеты на указанный адрес</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Подписать &сообщение</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Доказать, что вы владеете адресом</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>В&ыход</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>Закрыть приложение</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>&О %1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>Показать информацию о Bitcoin'е</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>О &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Показать информацию о Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>Оп&ции...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>Изменить настройки</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>&Показать бумажник</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>Показать окно бумажника</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>&Экспорт...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>Экспортировать в файл</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> - <translation type="unfinished"/> + <translation>&Зашифровать бумажник</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> + <translation>Зашифровать или расшифровать бумажник</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> - <source>&Change Passphrase</source> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> <translation type="unfinished"/> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Изменить пароль</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> - <translation type="unfinished"/> + <translation>Изменить пароль шифрования бумажника</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>&Файл</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>&Настройки</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>&Помощь</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>Панель вкладок</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>Панель действий</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[тестовая сеть]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> - <translation type="unfinished"/> + <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n активное соединение с сетью</numerusform><numerusform>%n активных соединений с сетью</numerusform><numerusform>%n активных соединений с сетью</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>Загружено %1 из %2 блоков истории транзакций.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>Загружено %1 блоков истории транзакций.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>%n секунду назад</numerusform><numerusform>%n секунды назад</numerusform><numerusform>%n секунд назад</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>%n минуту назад</numerusform><numerusform>%n минуты назад</numerusform><numerusform>%n минут назад</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>%n час назад</numerusform><numerusform>%n часа назад</numerusform><numerusform>%n часов назад</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>%n день назад</numerusform><numerusform>%n дня назад</numerusform><numerusform>%n дней назад</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>Синхронизированно</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>Синхронизируется...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>Последний полученный блок был сгенерирован %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation>Данная транзакция превышает предельно допустимый размер. Но Вы можете всё равно совершить ей, добавив комиссию в %1, которая отправится тем узлам, которые обработают Вашу транзакцию и поможет поддержать сеть. Вы хотите добавить комиссию?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>Отправка...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>Исходящая транзакция</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>Входящая транзакция</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 Address: %4 </source> - <translation type="unfinished"/> + <translation>Дата: %1 +Количество: %2 +Тип: %3 +Адрес: %4 +</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> - <translation type="unfinished"/> + <translation>Бумажник <b>зашифрован</b> и в настоящее время <b>разблокирован</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Бумажник <b>зашифрован</b> и в настоящее время <b>заблокирован</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Данные Кошелька (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> <translation type="unfinished"/> </message> </context> @@ -575,24 +673,24 @@ Address: %4 <translation>Изменение адреса для отправки</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>Введённый адрес «%1» уже находится в адресной книге.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>Введённый адрес «%1» не является правильным Bitcoin-адресом.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> - <translation type="unfinished"/> + <translation>Не удается разблокировать бумажник.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> - <translation type="unfinished"/> + <translation>Генерация нового ключа не удалась.</translation> </message> </context> <context> @@ -669,8 +767,8 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Опциональная комиссия за кадый KB транзакции, которое позволяет быть уверенным, что Ваша транзакция будет обработана быстро. Большинство транщакций занимают 1 KB. Рекомендованная комиссия: 0.01 BTC.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Опциональная комиссия за каждый КБ транзакции, которая позволяет быть уверенным, что Ваша транзакция будет обработано быстро. Большинство транзакций занимают 1КБ. Рекомендуется комиссия 0.01.</translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -679,8 +777,98 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>Опциональная комиссия за кадый KB транзакции, которая позволяет быть уверенным, что Ваша транзакция будет обработана быстро. Большинство транзакций занимают 1 KB. Рекомендованная комиссия: 0.01 BTC.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Опциональная комиссия за каждый КБ транзакции, которая позволяет быть уверенным, что Ваша транзакция будет обработано быстро. Большинство транзакций занимают 1КБ. Рекомендуется комиссия 0.01.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Сообщение</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Адрес получателя платежа (например 1LA5FtQhnnWnkK6zjFfutR7Stiit4wKd63)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Выбрать адрес из адресной книги</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Вставить адрес из буфера обмена</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Введите сообщение для подписи</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Для создания подписи нажмите на "Подписать сообщение"</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Подпишите сообщение для доказательства </translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Подписать сообщение</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Копировать текущий выделенный адрес в буфер обмена</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kопировать</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Ошибка создания подписи</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 не является правильным адресом.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Секретный ключ для %1 не доступен</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Подписание не удалось.</translation> </message> </context> <context> @@ -748,7 +936,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Бумажник</span></p></body></html></translation> </message> <message> @@ -769,20 +957,73 @@ p, li { white-space: pre-wrap; } <message> <location filename="../overviewpage.cpp" line="111"/> <source>Total number of transactions in wallet</source> - <translation>Общая количество транзакций в Вашем бумажнике</translation> + <translation>Общее количество транзакций в Вашем бумажнике</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR код</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Запросить платёж</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Количество:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Метка:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Сообщение:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Сохранить как...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Сохранить изображение...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> </message> </context> <context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>Отправка</translation> </message> @@ -798,81 +1039,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Удалить все поля транзакции</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> - <translation type="unfinished"/> + <translation>Очистить всё</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> - <translation type="unfinished"/> + <translation>Баланс:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> - <translation type="unfinished"/> + <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>Подтвердить отправку</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>&Отправить</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> <translation><b>%1</b> адресату %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>Подтвердите отправку монет</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> <translation>Вы уверены, что хотите отправить %1?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation> и </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>Адрес получателя неверный, пожалуйста, перепроверьте.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>Количество монет для отправки должно быть больше 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>Количество отправляемых монет превышает Ваш баланс</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> <translation>Сумма превысит Ваш баланс, если комиссия в %1 будет добавлена к транзакции</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> <translation>Обнаружен дублирующийся адрес. Отправка на один и тот же адрес возможна только один раз за одну операцию отправки</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>Ошибка: Создание транзакции не удалось </translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>Ошибка: В транзакции отказано. Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. Или в случае кражи (компрометации) Вашего бумажника.</translation> </message> @@ -912,13 +1158,13 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> - <translation>Выбрать адрес из адресной книги</translation> + <source>Choose address from address book</source> + <translation>Выберите адрес из адресной книги</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="113"/> <source>Alt+A</source> - <translation type="unfinished"/> + <translation>Alt+A</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="120"/> @@ -928,7 +1174,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../forms/sendcoinsentry.ui" line="130"/> <source>Alt+P</source> - <translation type="unfinished"/> + <translation>Alt+P</translation> </message> <message> <location filename="../forms/sendcoinsentry.ui" line="137"/> @@ -944,137 +1190,142 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> - <translation type="unfinished"/> + <translation>Открыто до получения %1 блоков</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> - <translation type="unfinished"/> + <translation>Открыто до %1</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/оффлайн?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/не подтверждено</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>%1 подтверждений</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>Статус:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, ещё не было успешно разослано</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> <translation>, разослано через %1 узел</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> <translation>, разослано через %1 узлов</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>Дата:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>Источник:</b> [сгенерированно]<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>Отправитель:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>неизвестно</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>Получатель:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation> (Ваш, метка:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (ваш)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>Кредит:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation type="unfinished"/> + <translation>(%1 станет доступно через %2 блоков)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(не принято)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>Дебет:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>Комиссия:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>Общая сумма:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>Сообщение:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>Комментарий:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Идентификатор транзакции:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation type="unfinished"/> + <translation>Сгенерированные монеты должны подождать 120 блоков прежде, чем они смогут быть отправлены. Когда Вы сгенерировали этот блок он был отправлен в сеть, чтобы он был добавлен к цепочке блоков. Если данная процедура не удастся, статус изменится на «не подтверждено» и монеты будут непередаваемыми. Такое может случайно происходить в случае, если другой узел сгенерирует блок на несколько секунд раньше.</translation> </message> </context> <context> @@ -1115,12 +1366,12 @@ p, li { white-space: pre-wrap; } <message numerus="yes"> <location filename="../transactiontablemodel.cpp" line="274"/> <source>Open for %n block(s)</source> - <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + <translation><numerusform>Открыто для %n блока</numerusform><numerusform>Открыто для %n блоков</numerusform><numerusform>Открыто для %n блоков</numerusform></translation> </message> <message> <location filename="../transactiontablemodel.cpp" line="277"/> <source>Open until %1</source> - <translation type="unfinished"/> + <translation>Открыто до %1</translation> </message> <message> <location filename="../transactiontablemodel.cpp" line="280"/> @@ -1159,56 +1410,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>Получено с IP-адреса </translation> + <source>Received from</source> + <translation>Получено от</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>Отправлено</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>Отправлено на IP-адрес </translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>Отправлено себе</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>Добыто</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>[не доступно]</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>Статус транзакции. Подведите курсор к нужному полю для того, чтобы увидеть количество подтверждений.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>Дата и время, когда транзакция была получена.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>Тип транзакции.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>Адрес назначения транзакции.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>Сумма, добавленная, или снятая с баланса.</translation> </message> @@ -1287,16 +1533,21 @@ p, li { white-space: pre-wrap; } <translation>Мин. сумма</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>Копировать адрес</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>Копировать метку</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Скопировать сумму</translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>Изменить метку</translation> @@ -1307,67 +1558,67 @@ p, li { white-space: pre-wrap; } <translation>Показать детали...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>Экспортировать данные транзакций</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>Текс, разделённый запятыми (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>Подтверждено</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>Дата</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>Тип</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>Метка</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>Адрес</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>Количество</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> - <translation type="unfinished"/> + <translation>ID</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>Ошибка экспорта</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>Невозможно записать в файл %1.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>Промежуток от:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>до</translation> </message> @@ -1375,7 +1626,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>Отправка....</translation> </message> @@ -1394,939 +1645,336 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> - <translation>Отправить команду на сервер ( -server ) или демону -</translation> + <source>Send command to -server or bitcoind</source> + <translation>Отправить команду на -server или bitcoind</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation>Список команд </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>Получить помощь по команде</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> - <translation>Опции: -</translation> + <source>Options:</source> + <translation>Опции:</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> - <translation>Указать конфигурационный файл вместо используемого по умолчанию (bitcoin.conf) -</translation> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Указать конфигурационный файл (по умолчанию: bitcoin.conf)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> - <translation>Указать pid-файл вместо используемого по умолчанию (bitcoin.pid) -</translation> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Указать pid-файл (по умолчанию: bitcoin.pid)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> - <translation>Включить добычу монет -</translation> + <source>Generate coins</source> + <translation>Генерировать монеты</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> - <translation>Выключить добычу монет -</translation> + <source>Don't generate coins</source> + <translation>Не генерировать монеты</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> - <translation>Запускать минимизированным -</translation> + <source>Start minimized</source> + <translation>Запускать свёрнутым</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> - <translation>Указать рабочую директорию -</translation> + <source>Specify data directory</source> + <translation>Укажите каталог данных</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> - <translation>Указать таймаут соединения (в миллисекундах) -</translation> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Укажите таймаут соединения (в миллисекундах)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> - <translation>Соединяться через socks4-прокси -</translation> + <source>Connect through socks4 proxy</source> + <translation>Подключаться через socks4 прокси</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> - <translation>Разрешить поиск в DNS для комманд "addnode" и "connect" -</translation> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Разрешить обращения к DNS для addnode и подключения</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> - <translation>Добавить узел для соединения -</translation> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Принимать входящие подключения на <port> (по умолчанию: 8333 или 18333 в тестовой сети)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> - <translation>Соединяться только с указанным узлом -</translation> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Поддерживать не более <n> подключений к узлам (по умолчанию: 125)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> - <translation>Не принимать внешние соединения -</translation> + <source>Add a node to connect to</source> + <translation>Добавить узел для подключения</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> - <translation>Не пытаться использовать UPnP -</translation> + <source>Connect only to the specified node</source> + <translation>Подключаться только к указанному узлу</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> - <translation>Попытаться использовать UPnP для проброса прослушиваемого порта на роутере -</translation> + <source>Don't accept connections from outside</source> + <translation>Не принимать входящие подключения</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>Комиссия (за каждый KB транзакции) -</translation> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Не получать начальный список узлов через DNS</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> - <translation>Принимать команды из командной строки и через JSON-RPC -</translation> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Порог для отключения неправильно ведущих себя узлов (по умолчанию: 100)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> - <translation>Запустить в бекграунде (как демон) и принимать команды -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> - <translation>Использовать тестовую сеть -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> - <translation>Имя пользователя для JSON-RPC соединений -</translation> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Число секунд блокирования неправильно ведущих себя узлов (по умолчанию: 86400)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> - <translation>Пароль для JSON-RPC соединений -</translation> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Максимальный размер буфера приёма на соединение, <n>*1000 байт (по умолчанию: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> - <translation>Слушать <порт> для JSON-RPC соединений (по умолчанию: 8332) -</translation> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Максимальный размер буфера отправки на соединение, <n>*1000 байт (по умолчанию: 10000)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> - <translation>Разрешить JSON-RPC соединения с указанного адреса -</translation> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Не пытаться использовать UPnP для назначения входящего порта</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> - <translation>Отправлять команды на узел,запущенный на <IP> (по умолчанию: 127.0.0.1) -</translation> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Пытаться использовать UPnP для назначения входящего порта</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> - <translation>Установить размер key pool'а в <n> (по умолчанию: 100) -</translation> + <source>Fee per kB to add to transactions you send</source> + <translation>Комиссия на Кб, добавляемая к вашим переводам</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> - <translation>Просканировать цепочку блоков в поисках пропущенных транзакций для бумажника -</translation> + <source>Accept command line and JSON-RPC commands</source> + <translation>Принимать командную строку и команды JSON-RPC</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="34"/> - <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> - <translation>Опции SSL: (см. Bitcoin Wiki для инструкций) -</translation> + <source>Run in the background as a daemon and accept commands</source> + <translation>Запускаться в фоне как демон и принимать команды</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Использовать тестовую сеть</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Выводить дополнительную отладочную информацию</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> - <translation>Использовать OpenSSL (https) для JSON-RPC соединений -</translation> + <source>Prepend debug output with timestamp</source> + <translation>Дописывать отметки времени к отладочному выводу</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> - <translation>Сертификат (публичный ключ) сервера (по умолчанию: server.cert) -</translation> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Выводить информацию трассировки/отладки на консоль вместо файла debug.log</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> - <translation>Закрытый ключ сервера (по умолчанию: server.pem) -</translation> + <source>Send trace/debug info to debugger</source> + <translation>Отправлять информацию трассировки/отладки в отладчик</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> - <translation>Допустимые Cipher'ы для сервера (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</translation> + <source>Username for JSON-RPC connections</source> + <translation>Имя для подключений JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Пароль для подключений JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Ожидать подключения JSON-RPC на <порт> (по умолчанию: 8332)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> - <translation>Данная справка -</translation> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Разрешить подключения JSON-RPC с указанного IP</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="44"/> - <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> - <translation>Невозможно установить блокировку на рабочую директорию %s. Возможно, бумажник уже запущен.</translation> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Посылать команды узлу, запущенному на <ip> (по умолчанию: 127.0.0.1)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> - <source>Loading addresses...</source> - <translation>Загрузка адресов...</translation> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Установить размер запаса ключей в <n> (по умолчанию: 100)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>Ошибка при загрузке addr.dat -</translation> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Перепроверить цепь блоков на предмет отсутствующих в кошельке транзакций</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>Загрузка индекса блоков...</translation> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +Параметры SSL: (см. Bitcoin Wiki для инструкций по настройке SSL)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>Ошибка при загрузке blkindex.dat -</translation> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Использовать OpenSSL (https) для подключений JSON-RPC</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>Загрузка бумажника...</translation> + <source>Server certificate file (default: server.cert)</source> + <translation>Файл серверного сертификата (по умолчанию: server.cert)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>Ошибка загрузки wallet.dat: Бумажник повреждён</translation> + <source>Server private key (default: server.pem)</source> + <translation>Приватный ключ сервера (по умолчанию: server.pem)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>Ошибка загрузки wallet.dat: Для данного бумажника требуется более новая версия Bitcoin -</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>Ошибка при загрузке wallet.dat -</translation> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Разрешённые алгоритмы (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="56"/> - <source>Rescanning...</source> - <translation>Сканирование...</translation> + <source>This help message</source> + <translation>Эта справка</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="57"/> - <source>Done loading</source> - <translation>Загрузка завершена</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="58"/> - <source>Invalid -proxy address</source> - <translation>Ошибка в адресе прокси</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="59"/> - <source>Invalid amount for -paytxfee=<amount></source> - <translation>Ошибка в сумме комиссии</translation> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Невозможно установить блокировку на рабочую директорию %s. Возможно, бумажник уже запущен.</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="60"/> - <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> - <translation>ВНИМАНИЕ: Установлена слишком большая комиссия (-paytxfee=). Данный параметр отвечает за комиссию, которую Вы будете добавлять к сумме при осуществлении транзакций.</translation> + <source>Loading addresses...</source> + <translation>Загрузка адресов...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> - <source>Error: CreateThread(StartNode) failed</source> - <translation>Ошибка: Созданиние потока (запуск узла) не удался</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Ошибка загрузки addr.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> - <source>Warning: Disk space is low </source> - <translation>ВНИМАНИЕ: На диске заканчивается свободное пространство </translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Ошибка чтения blkindex.dat</translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="65"/> - <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> - <translation>Невозможно забиндить порт %d на данном компьютере. Возможно, бумажник ужк запущен.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>Данная транзакция превышает предельно допустимый размер. Но Вы можете всё равно совершить ей, добавив комиссию в %s, которая отправится тем узлам, которые обработают Вашу транзакцию и поможет поддержать сеть. Вы хотите добавить комиссию?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>Введите текущий пароль от бумажника.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>Пароль</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>Пожалуйста, укажите текущий пароль для расшифровки бумажника.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>Указанный пароль не подходит.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>Статус</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>Дата</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>Описание</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>Дебет</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>Кредит</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>Открыто до получения %d блоков</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>Открыто до %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/оффлайн?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/не подтверждено</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>%d подтверждений</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>Сгенерированно</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>Сгенерированно (%s «созреет» через %d блоков)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>Сгенерированно - ВНИМАНИЕ: Данный блок не был получен ни одним другим узлом и, возможно, не будет подтверждён!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>Сгенерированно (не подтверждено)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>Отправитель: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>Получатель: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>Отправлено себе</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>Получатель: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> Генерация</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(не подключено)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d подключений %d блоков %d транзакций</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>Бумажник уже зашифрован.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>Введите новый пароль для бумажника. -Пожалуйста, используейте пароль из 10 и более случайных символов или из 8 и более слов.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>ОШИБКА: Указанный пароль слишком короткий.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>ВНИМАНИЕ: Если Вы зашифруете Ваш бумажник и потеряете Ваш пароль — Вы ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОИНЫ!!! -Вы уверены, что хотите зашифровать бумажник?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>Пожалуйста, повторите ввод нового пароля.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>ОШИБКА: указанные пароли не совпадают.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>Шифрование бумажника не удалось.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>Бумажник зашифрован. -Запомните, что шифрование Вашего бумажника не может ПОЛНОСТЬЮ гарантировать защиту Ваших биткоинов от того, чтобы быть украденными с помощью шпионского ПО на Вашем компьютере. Пожалуйста, следите за безопасностью Вашего компьютера самостоятельно.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>Бумажник не зашифрован. Сначала зашифруйте его.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>Введите новый пароль для бумажника.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>Пожалуйста, повторите ввод нового пароля.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>Пароль от бумажника изменён.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>Новый адрес для получения</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>Вы должны использовать новый адрес для каждого платежа, который Вы получаете. - -Метка</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>Статус:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, ещё не было успешно разослано</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, разослано через %d узел</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, разослано через %d узлов</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>Дата:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>Источник:</b> [сгенерированно]<br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>Отправитель:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>неизвестно</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>Получатель:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation> (Ваш, метка: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation> (ваш)</translation> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Ошибка загрузки wallet.dat: Бумажник поврежден</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>Кредит:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s «созреет» через %d блоков)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(не принято)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>Дебет:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>Комиссия:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>Общая сумма:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>Сообщение:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>Комментарий:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>Сгенерированные монеты должны подождать 120 блоков прежде, чем они смогут быть отправлены. Когда Вы сгенерировали этот блок он был отправлен в сеть, чтобы он был добавлен к цепочке блоков. Если данная процедура не удастся, статус изменится на «не подтверждено» и монеты будут непередаваемыми. Такое может случайно происходить в случае, если другой узел сгенерирует блок на несколько секунд раньше.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>Не возможно записать файл autostart/bitcoin.desktop</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>Основное</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>&Запускать бумажник при входе в систему</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>С&ворачивать вместо закрытия</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>версия %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>Ошибка в количестве </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>Отправка</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>Сумма превышает Ваш баланс </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>Общая сумма превысит Ваш баланс, если к транзакции будет добавлено ещё</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation>в качестве комиссии </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>Платёж отправлен</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>Отправка...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>Ошибочный адрес </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>Отправка %s адресату %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>ОТМЕНЕНО</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>Отменено</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>Транзакция отменена </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>ОШИБКА: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>Недостаточно монет</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>Подключение...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>Невозможно подключиться</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>Запрашивается открытый ключ...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>Получается публичный ключ...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>Получатель не принимает транзакции, отправленные на IP адрес</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>Передача была отвергнута</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>Получен неверный ответ</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>Создание транзакции...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>Данная транзакция требует добавления комиссии (по крайней мере в %s) из-за её размера, сложности, или из-за использования недавно полученных монет</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>Создание транзакции провалилось</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>Транзакция отменена</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>Потеряно соединение, транзакция отменена</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>Отправка платежа...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>В транзакции отказано. Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. Или в случае кражи (компрометации) Вашего бумажника.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>Ожидание подтверждения...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>Платёж был отправлен, но получатель не смог подтвердить его. -Транзакция записана и будет зачислена получателю, -но комментарий к платежу будет пустым.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>Платёж был отправлен, но был получен неверный ответ</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>Платёж завершён</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>Имя</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>Адрес</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>Метка</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>Bitcoin-адрес</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Ошибка загрузки wallet.dat: бумажник требует более новую версию Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>Это один из Ваших личных адресов для получения платежей. Он не может быть добавлен в адресную книгу. </translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Необходимо перезаписать бумажник, перезапустите Bitcoin для завершения операции.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>Изменить адрес</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Ошибка при загрузке wallet.dat</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>Изменить метку</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Загрузка индекса блоков...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>Добавить адрес</translation> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Загрузка бумажника...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation type="unfinished"/> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Сканирование...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>Bitcoin - Генерация</translation> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Загрузка завершена</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>Bitcoin - (нет связи)</translation> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Ошибка в адресе прокси</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>&Показать бумажник</translation> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Ошибка в сумме комиссии</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>Отп&равка</translation> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>ВНИМАНИЕ: Установлена слишком большая комиссия (-paytxfee=). Данный параметр отвечает за комиссию, которую Вы будете добавлять к сумме при осуществлении транзакций.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>Оп&ции...</translation> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Ошибка: Созданиние потока (запуск узла) не удался</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>Вы&ход</translation> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>ВНИМАНИЕ: На диске заканчивается свободное пространство </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>Программа экстренно завершилась и будет уничтожена. </translation> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Невозможно забиндить порт %d на данном компьютере. Возможно, бумажник ужк запущен.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="213"/> + <location filename="../bitcoinstrings.cpp" line="81"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation>ВНИМАНИЕ: Проверьте дату и время, установленные на Вашем компьютере. Если Ваши часы идут не правильно Bitcoin может наботать не корректно.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>бета</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts new file mode 100644 index 0000000000..c8b49a13e1 --- /dev/null +++ b/src/qt/locale/bitcoin_sk.ts @@ -0,0 +1,1967 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="sk" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>O Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> verzia</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adresár</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Toto sú Vaše Bitcoin adresy pre prijímanie platieb. Môžete dať každému odosielateľovi inú rôznu adresu a tak udržiavať prehľad o platbách.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dvojklikom editovať adresu alebo popis</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Vytvoriť novú adresu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Nová adresa...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopírovať práve zvolenú adresu do systémového klipbordu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Kopírovať do klipbordu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Zobraz &QR Kód</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Podpísať správu a dokázať že vlastníte túto adresu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Podpísať Správu</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Zmazať práve zvolená adresu zo zoznamu. Len adresy pre odosielanie sa dajú zmazať.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Zmazať</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopírovať adresu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopírovať popis</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Upraviť</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Zmazať</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exportovať dáta z adresára</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Čiarkou oddelený súbor (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Chyba exportu.</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Nedalo sa zapisovať do súboru %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Popis</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(bez popisu)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialóg</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TextovýPopis</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Zadajte heslo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nové heslo</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Zopakujte nové heslo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Zadajte nové heslo k peňaženke.<br/>Prosím použite heslo s dĺžkou aspon <b>10 alebo viac náhodných znakov</b>, alebo <b>8 alebo viac slov</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Zašifrovať peňaženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Táto operácia potrebuje heslo k vašej peňaženke aby ju mohla dešifrovať.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Odomknúť peňaženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Táto operácia potrebuje heslo k vašej peňaženke na dešifrovanie peňaženky.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Dešifrovať peňaženku</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Zmena hesla</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Zadajte staré a nové heslo k peňaženke.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Potvrďte šifrovanie peňaženky</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>VAROVANIE: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE BITCOINY</b>!⏎ +Ste si istí, že si želáte zašifrovať peňaženku?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Peňaženka zašifrovaná</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Varovanie: Caps Lock je zapnutý</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Šifrovanie peňaženky zlyhalo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Šifrovanie peňaženky zlyhalo kôli internej chybe. Vaša peňaženka nebola zašifrovaná.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Zadané heslá nesúhlasia.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Odomykanie peňaženky zlyhalo</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Zadané heslo pre dešifrovanie peňaženky bolo nesprávne.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Zlyhalo šifrovanie peňaženky.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Heslo k peňaženke bolo úspešne zmenené.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin peňaženka</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synchronizácia so sieťou...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Prebieha synchronizácia blockchain.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Prehľad</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Zobraziť celkový prehľad o peňaženke</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Preklady</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Prechádzať históriu transakcií</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adresár</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Editovať zoznam uložených adries a popisov</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&Prijať bitcoins</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Zobraziť zoznam adries pre prijímanie platieb.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Poslať bitcoins</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Poslať bitcoins na adresu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Podpísať &správu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Dokázať že kontrolujete adresu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>U&končiť</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Ukončiť program</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&O %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Zobraziť informácie o Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>O &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Zobrazit informácie o Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Možnosti...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Upraviť možnosti nastavenia pre bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Otvoriť &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Zobraziť okno Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Export...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Zašifrovať Peňaženku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Zašifrovať alebo dešifrovať peňaženku</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Zmena Hesla</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Zmeniť heslo použité na šifrovanie peňaženky</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Súbor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Nastavenia</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Pomoc</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Lišta záložiek</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Lišta aktvivít</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testovacia sieť]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Aktualizovaný</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Posledný prijatý blok bol generovaný %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Odosielanie...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Odoslané transakcie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Prijaté transakcie</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Dátum: %1 +Suma: %2 +Typ: %3 +Adresa: %4</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Zobrazovať hodnoty v jednotkách:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Zobraziť adresy zo zoznamu transakcií.</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Upraviť adresu</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Popis</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Popis priradený k tomuto záznamu v adresári</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adresa</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Nová adresa pre prijímanie</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Nová adresa pre odoslanie</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Upraviť prijímacie adresy</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Upraviť odosielaciu adresu</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Vložená adresa "%1" sa už nachádza v adresári.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Vložená adresa "%1" nieje platnou adresou bitcoin.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Nepodarilo sa odomknúť peňaženku.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Generovanie nového kľúča zlyhalo.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Spustiť Bitcoin pri spustení systému správy okien</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Automaticky spustiť Bitcoin po zapnutí počítača</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Zobraziť len ikonu na lište po minimalizovaní okna.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Mapovať port pomocou &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Automaticky otvorit port pre Bitcoin na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimalizovať pri zavretí</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimalizovat namiesto ukončenia aplikácie keď sa okno zavrie. Keď je zvolená táto možnosť, aplikácia sa zavrie len po zvolení Ukončiť v menu.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Pripojiť cez SOCKS4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Pripojiť do siete Bitcoin cez SOCKS4 proxy (napr. keď sa pripájate cez Tor)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP addresa proxy (napr. 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Port proxy (napr. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Voliteľný transakčný poplatok za kB ktorý pomôže rýchlemu spracovaniu transakcie. Väčšina transakcií má 1 kB. Poplatok 0.01 je odporúčaný.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Zaplatiť transakčné &poplatky</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Voliteľný transakčný poplatok za kB ktorý pomôže rýchlemu spracovaniu transakcie. Väčšina transakcií má 1 kB. Poplatok 0.01 je odporúčaný.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Správa</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa pre odoslanie platby je (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) </translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Vyberte adresu z adresára</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Vložte adresu z klipbordu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Sem vložte správu ktorú chcete podpísať</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Kliknite "Podpísať Správu" na získanie podpisu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Podpíšte správu aby ste dokázali že vlastníte túto adresu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Podpísať Správu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopírovať práve zvolenú adresu do systémového klipbordu</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Kopírovať do klipbordu</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Chyba podpisovania</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 nieje platná adresa.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Súkromný kľúč pre %1 nieje k dispozícii.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Podpisovanie neúspešné</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Hlavné</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Displej</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Možnosti</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Forma</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Zostatok:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Počet transakcií:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Nepotvrdené:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Nedávne transakcie</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Váš súčasný zostatok</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Suma transakcií ktoré ešte neboli potvrdené a nezapočítavaju sa do celkového zostatku.</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Celkový počet transakcií v peňaženke</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialóg</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR kód</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Vyžiadať platbu</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Suma:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Popis:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Správa:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Uložiť ako...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Poslať Bitcoins</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Poslať viacerým príjemcom naraz</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Pridať príjemcu...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Odobrať všetky políčka transakcie</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Zmazať všetko</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Zostatok:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Potvrďte odoslanie</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Odoslať</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> do %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Potvrdiť odoslanie bitcoins</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Ste si istí, že chcete odoslať %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> a</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Adresa príjemcu je neplatná, prosím, overte ju.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Suma na úhradu musí byť väčšia ako 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Suma je vyššia ako Váš zostatok</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Suma celkom prevyšuje Váš zostatok ak sú započítané %1 transakčné poplatky</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Duplikát adresy objavený, je možné poslať na každú adresu len raz v jednej odchádzajúcej transakcii.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Chyba: Zlyhalo vytvorenie transakcie</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Forma</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>Su&ma:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Zapla&tiť:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Vložte popis pre túto adresu aby sa pridala do adresára</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Popis:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adresa pre odoslanie platby je (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Zvoľte adresu z adresára</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Vložiť adresu z klipbordu</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Odstrániť tohto príjemcu</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Zadajte Bitcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/nepotvrdené</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 potvrdení</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Stav:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, ešte nebola úspešne odoslaná</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, odoslaná cez %1 nódu</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, odoslaná cez %1 nód</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Dátum:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Zdroj:</b> Generovaný<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>od:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>neznámy</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Komu:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (vaše, popis: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(vaše)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Kredit:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 dospeje o %2 blokov)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(neprijaté)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debet:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Transakčný poplatok:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Suma netto:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Správa:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Komentár:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID transakcie:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Detaily transakcie</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Táto časť obrazovky zobrazuje detailný popis transakcie</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Dátum</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Hodnota</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Nepotvrdené (%1 z %2 potvrdení)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Potvrdené (%1 potvrdení)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Ten blok nebol prijatý žiadnou inou nódou a pravdepodobne nebude akceptovaný!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Vypočítané ale neakceptované</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Prijaté s</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Prijaté od:</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Odoslané na</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Platba sebe samému</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Vyfárané</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Status transakcie. Pohybujte myšou nad týmto poľom a zjaví sa počet potvrdení.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Dátum a čas prijatia transakcie.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Typ transakcie.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Cieľová adresa transakcie.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Suma pridaná alebo odobraná k zostatku.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Všetko</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Dnes</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Tento týždeň</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Tento mesiac</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Minulý mesiac</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Tento rok</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Rozsah...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Prijaté s</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Odoslané na</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Samému sebe</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Vyfárané</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Iné</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Vložte adresu alebo popis pre vyhľadávanie</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Min množstvo</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopírovať adresu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopírovať popis</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Kopírovať sumu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Editovať popis</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Ukázať detaily...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Exportovať transakčné dáta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Čiarkou oddelovaný súbor (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Potvrdené</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Dátum</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Popis</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adresa</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Suma</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Chyba exportu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Nedalo sa zapisovať do súboru %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Rozsah:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>do</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Odosielanie...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin verzia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Použitie:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Odoslať príkaz -server alebo bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Zoznam príkazov</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Dostať pomoc pre príkaz</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Možnosti:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Určiť súbor s nastaveniami (predvolené: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Určiť súbor pid (predvolené: bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Počítaj bitcoins</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Nepočítaj bitcoins</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Spustiť minimalizované</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Určiť priečinok s dátami</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Určiť aut spojenia (v milisekundách)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Pripojenie cez socks4 proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Povoliť vyhľadávanie DNS pre pridanie nódy a spojenie</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Načúvať spojeniam na <port> (prednastavené: 8333 alebo testovacia sieť: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Udržiavať maximálne <n> spojení (predvolené: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Pridať nódu a pripojiť sa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Pripojiť sa len k určenej nóde</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Neprijímať spojenia z vonku</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Neskúsiť použiť UPnP pre mapovanie počúvajúceho portu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Skúsiť použiť UPnP pre mapovanie počúvajúceho portu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Poplatok za kB ktorý treba pridať k odoslanej transakcii</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Prijímať príkazy z príkazového riadku a JSON-RPC</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Bežať na pozadí ako démon a prijímať príkazy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Použiť testovaciu sieť</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Produkovať extra ladiace informácie</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Pridať na začiatok ladiaceho výstupu časový údaj</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Odoslať trace/debug informácie na konzolu namiesto debug.info žurnálu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Odoslať trace/debug informácie do ladiaceho programu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Užívateľské meno pre JSON-RPC spojenia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Heslo pre JSON-rPC spojenia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Počúvať JSON-RPC spojeniam na <port> (predvolené: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Povoliť JSON-RPC spojenia z určenej IP adresy.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Poslať príkaz nóde bežiacej na <ip> (predvolené: 127.0.0.1)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Nastaviť zásobu adries na <n> (predvolené: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation>SSL možnosť: (pozrite Bitcoin Wiki pre návod na nastavenie SSL)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Použiť OpenSSL (https) pre JSON-RPC spojenia</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Súbor s certifikátom servra (predvolené: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Súkromný kľúč servra (predvolené: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Prijateľné šifry (predvolené: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Táto pomocná správa</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Načítavanie adries...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Chyba načítania addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Chyba načítania blkindex.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Chyba načítania wallet.dat: Peňaženka je poškodená</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Chyba načítania wallet.dat: Peňaženka vyžaduje novšiu verziu Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Bolo potrebné prepísať peňaženku: dokončite reštartovaním Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Chyba načítania wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Načítavanie zoznamu blokov...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Načítavam peňaženku...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Dokončené načítavanie</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Neplatná adresa proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Neplatná suma pre -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Varovanie: -paytxfee je nastavené veľmi vysoko. Toto sú transakčné poplatky ktoré zaplatíte ak odošlete transakciu.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Chyba: zlyhalo CreateThread(StartNode)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Varovanie: Málo voľného miesta na disku </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts new file mode 100644 index 0000000000..59c0c99190 --- /dev/null +++ b/src/qt/locale/bitcoin_sr.ts @@ -0,0 +1,1968 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="sr" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>О Bitcoin-у</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> верзија</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Адресар</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Ово су Ваше Bitcoin адресе за примање уплата. Можете да сваком пошиљаоцу дате другачију адресу да би пратили ко је вршио уплате.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Кликните два пута да промените адресу и/или етикету</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Прави нову адресу</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Нова адреса...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Копира изабрану адресу на системски клипборд</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>Ис&копирај на клипборд</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Брише изабрану адресу. Могуће је брисати само адресе са којих се шаље.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Избриши</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Извоз података из адресара</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Зарезом одвојене вредности (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Грешка током извоза</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Није могуће писати у фајл %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Етикета</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(без етикете)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Дијалог</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TextLabel</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Унесите лозинку</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Нова лозинка</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Поновите нову лозинку</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Унесите нову лозинку за приступ новчанику.<br/>Молимо Вас да лозинка буде <b>10 или више насумице одабраних знакова</b>, или <b>осам или више речи</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Шифровање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Ова акција захтева лозинку Вашег новчаника да би га откључала.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Откључавање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Ова акција захтева да унесете лозинку да би дешифловала новчаник.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Дешифровање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Промена лозинке</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Унесите стару и нову лозинку за шифровање новчаника.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Одобрите шифровање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>УПОЗОРЕЊЕ: Ако се ваш новчаник шифрује а потом изгубите лозинкзу, ви ћете <b>ИЗГУБИТИ СВЕ BITCOIN-Е</b>! +Да ли сте сигурни да желите да се новчаник шифује?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Новчаник је шифрован</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Неуспело шифровање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Настала је унутрашња грешка током шифровања новчаника. Ваш новчаник није шифрован.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Лозинке које сте унели се не подударају.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Неуспело откључавање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Лозинка коју сте унели за откључавање новчаника је нетачна.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Неуспело дешифровање новчаника</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Лозинка за приступ новчанику је успешно промењена.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin новчаник</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Синхронизација са мрежом у току...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Синхронизовање ланца блоква је у току</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Општи преглед</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Погледајте општи преглед новчаника</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Трансакције</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Претражите историјат трансакција</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Адресар</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Уредите запамћене адресе и њихове етикете</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>П&римање новца</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Прегледајте листу адреса на којима прихватате уплате</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&Слање новца</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Пошаљите новац на bitcoin адресу</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Напустите програм</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Прегледајте информације о Bitcoin-у</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>П&оставке...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Изаберите могућности bitcoin-а</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Отвори &Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Приказује прозор Bitcoin-а</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Извоз...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Шифровање новчаника</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Шифровање и дешифровање новчаника</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>Промени &лозинку</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Мењање лозинке којом се шифрује новчаник</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Фајл</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Подешавања</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>П&омоћ</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Трака са картицама</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Трака са алаткама</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n активна веза са Bitcoin мрежом</numerusform><numerusform>%n активне везе са Bitcoin мрежом</numerusform><numerusform>%n активних веза са Bitcoin мрежом</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Преузето је %1 од укупно %2 блокова историјата трансакција.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Преузето је %1 блокова историјата трансакција.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>пре %n секунд</numerusform><numerusform>пре %n секунде</numerusform><numerusform>пре %n секунди</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>пре %n минут</numerusform><numerusform>пре %n минута</numerusform><numerusform>пре %n минута</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>пре %n сат</numerusform><numerusform>пре %n сата</numerusform><numerusform>пре %n сати</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>пре %n дан</numerusform><numerusform>пре %n дана</numerusform><numerusform>пре %n дана</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Ажурно</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Ажурирање у току...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Последњи примљени блок је направљен %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Ова трансакција је превелика. И даље је можете послати уз накнаду од %1, која ће отићи чвору који прерађује трансакцију и помаже издржавању целе мреже. Да ли желите да дате напојницу?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Слање...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Послана трансакција</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Придошла трансакција</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Новчаник јс <b>шифрован</b> и тренутно <b>откључан</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Новчаник јс <b>шифрован</b> и тренутно <b>закључан</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Јединица за приказивање износа: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Немогуће откључати новчаник.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Копира изабрану адресу на системски клипборд</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>Ис&копирај на клипборд</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Новчаник</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Укупан број трансакција у новчанику</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Дијалог</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Пошаљи</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Да ли сте сигурни да желите да пошаљете %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation type="unfinished"/> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Зарезом одвојене вредности (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Етикета</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Грешка током извоза</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Није могуће писати у фајл %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Слање у току...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Новчаник се учитава...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation type="unfinished"/> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts new file mode 100644 index 0000000000..7e5d127179 --- /dev/null +++ b/src/qt/locale/bitcoin_sv.ts @@ -0,0 +1,1975 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="sv" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Om Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> version</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adressbok</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Detta är dina Bitcoin-adresser för att ta emot betalningar. Du kan ge varje avsändare en egen adress så att du kan hålla reda på vem som betalar dig.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Dubbelklicka för att ändra adress eller etikett</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Skapa ny adress</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Ny adress...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopiera den markerade adressen till systemets Urklipp</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&amp; Kopiera till Urklipp</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Signera meddelande</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Ta bort den markerade adressen från listan. Endast sändningsadresser kan tas bort.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&amp; Radera</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Kopiera adress</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Kopiera etikett</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Editera</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Ta bort</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Exportera Adressboksinformation</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Kommaseparerad fil (*. csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Fel vid export</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Kunde inte skriva till filen %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etikett</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adress</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(Ingen etikett)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>TextLabel</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Ange lösenord</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Nytt lösenord</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Upprepa nytt lösenord</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Ange plånbokens nya lösenfras. <br/> Använd ett lösenord på <b>10 eller fler slumpmässiga tecken,</b> eller <b>åtta eller fler ord.</b></translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Kryptera plånbok</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Denna operation behöver din plånboks lösenfras för att låsa upp plånboken.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Lås upp plånbok</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Denna operation behöver din plånboks lösenfras för att dekryptera plånboken.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Dekryptera plånbok</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Ändra lösenfras</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Ange plånbokens gamla och nya lösenfras.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Bekräfta kryptering av plånbok</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>VARNING: Om du krypterar din plånbok och glömmer din lösenfras, kommer du att <b>förlora alla dina BITCOINS!</b> Är du säker på att du vill kryptera din plånbok?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Plånboken är krypterad</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Programmet kommer nu att stänga ner för att göra färdigt krypteringen. Notera att en krypterat konto inte skyddar mot all form av stöld på en infekterad dator. </translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Varning: Caps Lock är påslaget</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Kryptering av plånbok misslyckades</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Kryptering av plånbok misslyckades på grund av ett internt fel. Din plånbok blev inte krypterad.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>De angivna lösenfraserna överensstämmer inte.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Upplåsning av plånbok misslyckades</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Lösenfrasen för dekryptering av plånbok var felaktig.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Dekryptering av plånbok misslyckades</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Plånbokens lösenfras har ändrats.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin-plånbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Synkroniserar med nätverk ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Synkronisering av blockkedja pågår</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&amp; Översikt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Visa översiktsvy av plånbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Transaktioner</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Bläddra i transaktionshistorik</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adressbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Redigera listan med lagrade adresser och etiketter</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&amp; Ta emot bitcoins</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Visa listan med adresser för att ta emot betalningar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&amp; Skicka bitcoins</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Skicka bitcoins till en bitcoinadress</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>Signera &meddelande</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Avsluta</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Avsluta programmet</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&Om %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Visa information om Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>Om &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Visa information om Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&amp; Alternativ ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Ändra konfigurationsalternativ för bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Öppna &amp;Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Visa Bitcoin-fönster</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&amp;Exportera ...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&amp;Kryptera plånbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Kryptera eller dekryptera plånbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&amp;Byt lösenfras</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Byt lösenfras för kryptering av plånbok</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Arkiv</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Inställningar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Hjälp</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Verktygsfält för Tabbar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Verktygsfältet för Handlingar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n aktiv anslutning till Bitcoin-nätverket.</numerusform><numerusform>%n aktiva anslutningar till Bitcoin-nätverket.</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Laddat ner %1 av %2 block från transaktionshistoriken.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Laddat ner %1 block från transaktionshistoriken.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n sekund sedan</numerusform><numerusform>%n sekunder sedan</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n minut sedan</numerusform><numerusform>%n minuter sedan</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n timme sedan</numerusform><numerusform>%n timmar sedan</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n dag sedan</numerusform><numerusform>%n dagar sedan</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Uppdaterad</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Hämtar senaste</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Senast mottagna blocked genererades %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Transaktionen överskrider storleksgränsen. + +Du kan dock fortfarande skicka den mot en kostnad av %1. Denna avgift går till noderna som behandlar din transaktion och bidrar till nätverket. + +Vill du betala denna avgift?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Skickar...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Transaktion skickad</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Inkommande transaktion</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Datum: %1 +Belopp: %2 +Typ: %3 +Adress:%4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Denna plånbok är <b>krypterad</b> och för närvarande <b>olåst</b>.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Denna plånbok är <b>krypterad</b> och för närvarande <b>låst</b>.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&Enhet att visa belopp i:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Välj en standard för enhets mått, att visa när du skickar mynt</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Visa adresser i transaktionslistan</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Redigera adress</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Etikett</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Den etikett som är associerad med detta adressboksinlägg</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adress</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Adressen som är associerad med detta adressboksinlägg. Detta kan enbart ändras för sändande adresser.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Ny mottagaradress</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Ny avsändaradress</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Redigera mottagaradress</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Redigera avsändaradress</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Den angivna adressen "%1" finns redan i adressboken.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Den angivna adressen "%1" är inte en giltig Bitcoin-adress.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Plånboken kunde inte låsas upp.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Misslyckades med generering av ny nyckel.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Starta Bitcoin vid systemstart</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Starta Bitcoin automatiskt när datorn startas.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&Minimera till systemfältet istället för aktivitetsfältet</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Visa endast en systemfältsikon vid minimering</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Tilldela port med hjälp av &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Öppna automatiskt Bitcoin-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>M&inimera vid stängning</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Minimera applikationen istället för att stänga ner den när fönstret stängs. Detta innebär att programmet fotrsätter att köras tills du väljer Avsluta i menyn.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&Anslut via SOCKS4 proxy:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Anslut till Bitcoin-nätverket genom en SOCKS4-proxy (t.ex. när du ansluter genom Tor).</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Proxy &IP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Proxyns IP-adress (t.ex. 127.0.0.1).</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Proxyns port (t.ex. 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Betala överförings &avgift</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adressen som betalningen skall skickas till (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Välj adress från adressboken</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Klistra in adress från Urklipp</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Signera meddelande</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Kopiera den markerade adressen till systemets Urklipp</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&amp; Kopiera till Urklipp</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Allmänt</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Visa</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Alternativ</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Formulär</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Saldo:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Antal transaktioner:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Obekräftade:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Nyligen genomförda transaktioner</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Ditt nuvarande saldo</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Totalt antal transaktioner som ännu inte bekräftats, och som ännu inte räknas med i aktuellt saldo</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Totalt antal transaktioner i plånboken</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Dialog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Belopp:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Etikett:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Meddelande:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Spara som...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Skicka pengar</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Skicka till flera mottagare samtidigt</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Lägg till mottagare...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Rensa alla</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Balans:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123,456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Bekräfta sänd ordern</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Skicka</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> till %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Bekräfta skickade mynt</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Är du säker på att du vill skicka %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> and </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Mottagarens adress är inte giltig, vänligen kontrollera igen.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Det betalade beloppet måste vara större än 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Värdet överstiger ditt saldo</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Totalt överstiger det ditt saldo när transaktionsavgiften %1 ingår</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Dublett av adress funnen, kan bara skicka till varje adress en gång per sändning</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Fel: Transaktionen gick inte att skapa</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Fel: Transaktionen avslogs. Detta kan hända om några av mynten i plånboken redan spenderats, som om du använde en kopia av wallet.dat och mynt spenderades i kopian men inte markerats som spenderas här.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Formulär</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>&Belopp</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>Betala & Till:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Ange ett namn för den här adressen och lägg till den i din adressbok</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Etikett:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Adressen som betalningen skall skickas till (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Välj adress från adresslistan</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Klistra in adress från Urklipp</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Ta bort denna mottagare</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Ange en Bitcoin adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Öppen för %1 block</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Öppet till %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/nerkopplad?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/okonfirmerad</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 bekräftelser</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Status:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, har inte lyckats skickas ännu</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, sänd genom %1 nod</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, sänd genom %1 noder</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Datum:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Källa:</b> Genererade<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Från:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>okänd</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Till:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (din, etikett: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(dina)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Kredit:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(inte accepterad)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Debet:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Transaktionsavgift:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Nettobelopp:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Meddelande:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Kommentar:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Genererade mynt måste vänta 120 block innan de kan användas. När du skapade detta block sändes det till nätverket för att läggas till i blockkedjan. Om blocket inte kommer in i kedjan kommer det att ändras till "accepteras inte" och kommer ej att gå att spendera. Detta kan ibland hända om en annan nod genererar ett block nästan samtidigt som dig.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Transaktionsdetaljer</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Den här panelen visar en detaljerad beskrivning av transaktionen</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adress</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Mängd</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Öppet till %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Offline (%1 bekräftelser)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Obekräftad (%1 av %2 bekräftelser)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Bekräftad (%1 bekräftelser)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Det här blocket togs inte emot av några andra noder och kommer antagligen inte att bli godkänt.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Genererad men inte accepterad</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Mottagen med</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Skickad till</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Betalning till dig själv</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Skapad</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Transaktionsstatus. Håll muspekaren över för att se antal bekräftelser.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Tidpunkt då transaktionen mottogs</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Transaktionstyp.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Transaktionens destinationsadress.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Alla</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Idag</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Denna vecka</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Denna månad</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Föregående månad</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Det här året</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Period...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Mottagen med</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Skickad till</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Till dig själv</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Skapad</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Övriga</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Sök efter adress eller etikett </translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Minsta mängd</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Kopiera adress</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Kopiera etikett</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Editera etikett</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Visa detaljer...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Exportera Transaktions Data</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Kommaseparerad fil (*. csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Bekräftad</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etikett</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adress</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Mängd</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Fel vid export</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Kunde inte skriva till filen %1.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Intervall:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>till</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Skickar...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin version</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Användning:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Skicka kommando till -server eller bitcoind</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Lista kommandon</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Få hjälp med ett kommando</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Inställningar:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Ange konfigurationsfil (standard:bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Ange pid fil (standard:bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Generera mynt</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Generera ej mynt</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Starta som minimerad</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Ange katalog för data</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Ange timeout för uppkoppling (i millisekunder)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Koppla upp genom socks4 proxy</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Lägg till en nod att koppla upp mot</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Koppla enbart upp till den specifierade noden</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Acceptera ej anslutningar utifrån</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Använd test nätverket</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Sök i block-kedjan efter saknade wallet transaktioner</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Det här hjälp medelandet</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Laddar adresser...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Fel vid inläsningen av wallet.dat: Kontofilen verkar skadad</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Fel vid inläsningen av wallet.dat: Kontofilen kräver en senare version av Bitcoin</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Kontot behöver sparas om: Starta om Programmet</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Fel vid inläsning av kontofilen wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Laddar block index...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Laddar konto...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Söker igen...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Klar med laddning</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Ogiltig proxyadress</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Ogiltigt belopp för -paytxfee=<belopp></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts new file mode 100644 index 0000000000..89e2102a25 --- /dev/null +++ b/src/qt/locale/bitcoin_tr.ts @@ -0,0 +1,1979 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="tr" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Bitcoin hakkında</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>Bitcoin</b> sürüm</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Telif hakkı © 2009-2012 Bitcoin geliştiricileri + +Bu yazılım deneme safhasındadır. + +MIT/X11 yazılım lisansı kapsamında yayınlanmıştır, license.txt dosyasına ya da http://www.opensource.org/licenses/mit-license.php sayfasına bakınız. + +Bu ürün OpenSSL projesi tarafından OpenSSL Toolkit (http://www.openssl.org/) için geliştirilen yazılımlar, Eric Young (eay@cryptsoft.com) tarafından yazılmış şifreleme yazılımları ve Thomas Bernard tarafından yazılmış UPnP yazılımı içerir.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Adres defteri</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Bunlar, ödemeleri almak için Bitcoin adresleridir. Kimin ödeme yaptığını izleyebilmek için her ödeme yollaması gereken kişiye değişik bir adres verebilirsiniz.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Adresi ya da etiketi düzenlemek için çift tıklayınız</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Yeni bir adres oluştur</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Yeni adres...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Şu anda seçili olan adresi panoya kopyalar</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>Panoya &kopyala</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>&QR kodunu göster</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Bu adresin sizin olduğunu ispatlamak için mesaj imzalayın</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>Mesaj &imzala</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Seçilen adresi listeden siler. Sadece gönderi adresleri silinebilir.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Sil</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Adresi kopyala</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Etiketi kopyala</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Düzenle</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Sil</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Adres defteri verilerini dışa aktar</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Virgülle ayrılmış değerler dosyası (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Dışa aktarımda hata oluştu</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>%1 dosyasına yazılamadı.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Etiket</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(boş etiket)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Diyalog</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Metin Etiketi</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Parolayı giriniz</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Yeni parola</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Yeni parolayı tekrarlayınız</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Cüzdanınız için yeni parolayı giriniz.<br/>Lütfen <b>10 ya da daha fazla rastgele karakter</b> veya <b>sekiz ya da daha fazla kelime</b> içeren bir parola seçiniz.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Cüzdanı şifrele</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Bu işlem cüzdan kilidini açmak için cüzdan parolanızı gerektirir.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Cüzdan kilidini aç</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Bu işlem, cüzdan şifresini açmak için cüzdan parolasını gerektirir.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Cüzdan şifresini aç</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Parolayı değiştir</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Cüzdan için eski ve yeni parolaları giriniz.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Cüzdan şifrelenmesini teyit eder</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>UYARI: Eğer cüzdanınızı şifrelerseniz ve parolanızı kaybederseniz, <b>TÜM BİTCOİNLERİNİZİ KAYBEDERSİNİZ</b>! +Cüzdanınızı şifrelemek istediğinizden emin misiniz?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Cüzdan şifrelendi</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Şifreleme işlemini tamamlamak için Bitcoin şimdi kapanacaktır. Cüzdanınızı şifrelemenin, bitcoinlerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Uyarı: Caps Lock tuşu etkin durumda.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Cüzdan şifrelemesi başarısız oldu</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Dahili bir hata sebebiyle cüzdan şifrelemesi başarısız oldu. Cüzdanınız şifrelenmedi.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Girilen parolalar birbirleriyle uyumlu değil.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Cüzdan kilidinin açılması başarısız oldu</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Cüzdan şifresinin açılması için girilen parola yanlıştı.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Cüzdan şifresinin açılması başarısız oldu</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Cüzdan parolası başarılı bir şekilde değiştirildi.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Bitcoin cüzdanı</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Şebeke ile senkronizasyon...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Blok zinciri senkronizasyonu sürüyor</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Genel bakış</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Cüzdana genel bakışı gösterir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&Muameleler</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Muamele tarihçesini tara</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Adres defteri</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Saklanan adres ve etiket listesini düzenler</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>Para &al</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Ödeme alma adreslerinin listesini gösterir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>Para &yolla</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Bir bitcoin adresine para (bitcoin) yollar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>&Mesaj imzala</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Bu adresin kontrolünüz altında olduğunu ispatlayın</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Çık</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Uygulamadan çıkar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>%1 &hakkında</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Bitcoin hakkında bilgi gösterir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>&Qt hakkında</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Qt hakkında bilgi görüntüler</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Seçenekler...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Bitcoin seçeneklerinin yapılandırmasını değiştirir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>&Bitcoin'i aç</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Bitcoin penceresini gösterir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Dışa aktar...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>Güncel sekmedeki verileri bir dosyaya aktar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>Cüzdanı &şifrele</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Cüzdanı şifreler ya da şifreyi açar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>Cüzdanı &yedekle</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>Cüzdanı diğer bir konumda yedekle</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&Parolayı değiştir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Cüzdan şifrelemesi için kullanılan parolayı değiştirir</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Dosya</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Ayarlar</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Yardım</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Sekme araç çubuğu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Faaliyet araç çubuğu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>Bitcoin şebekesine %n etkin bağlantı</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Muamele tarihçesinin %2 sayıda blokundan %1 adet blok indirildi.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Muamele tarihçesinin %1 adet bloku indirildi.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n saniye önce</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n dakika önce</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n saat önce</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n gün önce</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Güncel</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Aralık kapatılıyor...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Son alınan blok şu vakit oluşturulmuştu: %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Bu muamele boyut sınırlarını aşmıştır. Gene de %1 ücret ödeyerek gönderebilirsiniz, ki bu ücret muamelenizi işleyen ve şebekeye yardım eden düğümlere ödenecektir. Ücreti ödemek istiyor musunuz?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Yollanıyor...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Muamele yollandı</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Gelen muamele</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Tarih: %1 +Miktar: %2 +Tür: %3 +Adres: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>Cüzdan <b>şifrelenmiştir</b> ve şu anda <b>kilidi açılmıştır</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>Cüzdan <b>şifrelenmiştir</b> ve şu anda <b>kilitlidir</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>Cüzdanı yedekle</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>Cüzdan verileri (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>Yedekleme başarısız oldu</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>Cüzdan verilerinin başka bir konumda kaydedilmesi sırasında bir hata meydana geldi.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>Miktarı göstermek için &birim: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Para (coin) gönderildiğinde arayüzde gösterilecek varsayılan alt birimi seçiniz</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Muamele listesinde adresleri göster</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Adresi düzenle</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Etiket</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Bu adres defteri unsuru ile ilişkili etiket</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Adres</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Bu adres defteri unsuru ile ilişkili adres. Bu, sadece gönderi adresi için değiştirilebilir.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Yeni alım adresi</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Yeni gönderi adresi</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Alım adresini düzenle</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Gönderi adresini düzenle</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Girilen "%1" adresi hâlihazırda adres defterinde mevcuttur.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Girilen "%1" adresi geçerli bir bitcoin adresi değildir.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Cüzdan kilidi açılamadı.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Yeni anahtar oluşturulması başarısız oldu.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>Bitcoin'i pencere sistemi ile &başlat</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Bitcoin'i bilgisayar başlatıldığında başlatır</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>İşlem çubuğu yerine sistem çekmesine &küçült</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Küçültüldükten sonra sadece çekmece ikonu gösterir</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Portları &UPnP kullanarak haritala</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Yönlendiricide Bitcoin istemci portlarını otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP desteği bulunuyorsa ve etkinse çalışabilir.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>Kapatma sırasında k&üçült</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Pencere kapatıldığında uygulamadan çıkmak yerine uygulamayı küçültür. Bu seçenek etkinleştirildiğinde, uygulama sadece menüden çıkış seçildiğinde kapanacaktır.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>SOCKS4 vekil sunucusu vasıtasıyla ba&ğlan:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Bitcoin şebekesine SOCKS4 vekil sunucusu vasıtasıyla bağlanır (mesela Tor ile bağlanıldığında)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>Vekil &İP: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>Vekil sunucunun İP adresi (mesela 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Port: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Vekil sunucun portu (örneğin 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Muamelelerin hızlı işlenmesini garantilemeye yardım eden, seçime dayalı kB başı muamele ücreti. Muamelelerin çoğunluğunun boyutu 1 kB'dir. 0.01 ücreti önerilir. </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Muamele ücreti &öde</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Muamelelerin hızlı işlenmesini garantilemeye yardım eden, seçime dayalı kB başı muamele ücreti. Muamelelerin çoğunluğunun boyutu 1 kB'dir. 0.01 ücreti önerilir. </translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Mesaj</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Bir adresin sizin olduğunu ispatlamak için adresinizle mesaj imzalayabilirsiniz. Oltalama saldırılarının kimliğinizi imzanızla elde etmeyi deneyebilecekleri için belirsiz hiçbir şey imzalamamaya dikkat ediniz. Sadece ayrıntılı açıklaması olan ve tümüne katıldığınız ifadeleri imzalayın.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Ödemenin gönderileceği adres (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Adres defterinden adres seç</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Panodan adres yapıştır</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>İmzalamak istediğiniz mesajı burada giriniz</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>İmza elde etmek için "Mesaj İmzala" unsurunu tıklayın</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Bu adresin sizin olduğunu ispatlamak için bir mesaj imzalayın</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>Mesaj &İmzala</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Şu anda seçili olan adresi panoya kopyalar</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>Panoya &kopyala</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>İmza sırasında hata meydana geldi</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 geçerli bir adres değildir.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>%1 için özel anahtar mevcut değil.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>İmzalama başarısız oldu</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Ana menü</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Görünüm</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Seçenekler</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Bakiye:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Muamele sayısı:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Doğrulanmamış:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cüzdan</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Son muameleler</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Güncel bakiyeniz</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Doğrulanması beklenen ve henüz güncel bakiyeye ilâve edilmemiş muamelelerin toplamı</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Cüzdandaki muamelelerin toplam sayısı</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Diyalog</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR Kod</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Ödeme isteği</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Miktar:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Etiket:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Mesaj:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Farklı kaydet...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>Resmi kaydet...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG resimleri (*.png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Para (coin) yolla</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Birçok alıcıya aynı anda gönder</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&Alıcı ekle...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Bütün muamele alanlarını kaldır</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Tümünü temizle</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Bakiye:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Yollama etkinliğini teyit ediniz</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Gönder</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> şu adrese: %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Gönderiyi teyit ediniz</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>%1 tutarını göndermek istediğinizden emin misiniz?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> ve </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Alıcı adresi geçerli değildir, lütfen denetleyiniz.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Ödeyeceğiniz tutarın sıfırdan yüksek olması gerekir.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Tutar bakiyenizden yüksektir</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Toplam, %1 muamele ücreti ilâve edildiğinde bakiyenizi geçmektedir</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Çift adres bulundu, belli bir gönderi sırasında her adrese sadece tek bir gönderide bulunulabilir</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Hata: Muamele oluşturması başarısız oldu </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Hata: Muamele reddedildi. Cüzdanınızdaki madenî paraların bazıları zaten harcanmış olduğunda bu meydana gelebilir. Örneğin wallet.dat dosyasının bir kopyasını kullandıysanız ve kopyada para harcandığında ancak burada harcandığı işaretlenmediğinde.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>M&iktar:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>&Şu kişiye öde:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Adres defterinize eklemek için bu adres için bir etiket giriniz</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Etiket:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Ödemenin gönderileceği adres (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Adres defterinden adres seç</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Panodan adres yapıştır</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Bu alıcıyı kaldır</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Bitcoin adresi giriniz (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>%1 blok için açık</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>%1 değerine dek açık</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/çevrimdışı mı?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/doğrulanmadı</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 doğrulama</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Durum:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, henüz başarılı bir şekilde yayınlanmadı</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, %1 düğüm vasıtasıyla yayınlandı</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, %1 düğüm vasıtasıyla yayınlandı</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Tarih:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Kaynak:</b> Oluşturuldu<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Gönderen:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>bilinmiyor</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Alıcı:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (sizin, etiket: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (sizin)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Gelir:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1, %2 ek blok sonrasında olgunlaşacak)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(kabul edilmedi)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Gider:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Muamele ücreti:<b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Net miktar:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Mesaj:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Yorum:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>Muamele kimliği:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Oluşturulan paraların (coin) harcanabilmelerinden önce 120 blok beklemeleri gerekmektedir. Bu blok, oluşturduğunuzda, blok zincirine eklenmesi için ağda yayınlandı. Zincire eklenmesi başarısız olursa, "kabul edilmedi" olarak değiştirilecek ve harcanamayacaktır. Bu, bazen başka bir düğüm sizden birkaç saniye önce ya da sonra blok oluşturursa meydana gelebilir.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Muamele detayları</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Bu pano muamelenin ayrıntılı açıklamasını gösterir</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Tarih</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Tür</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Miktar</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>%n blok için açık</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>%1 değerine dek açık</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Çevrimdışı (%1 doğrulama)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Doğrulanmadı (%1 (toplam %2 üzerinden) doğrulama)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Doğrulandı (%1 doğrulama)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Madenden çıkarılan bakiye %n ek blok sonrasında kullanılabilecektir</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Bu blok başka hiçbir düğüm tarafından alınmamıştır ve muhtemelen kabul edilmeyecektir!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Oluşturuldu ama kabul edilmedi</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Şununla alınan</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Alındığı kişi</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Gönderildiği adres</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Kendinize ödeme</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Madenden çıkarılan</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(mevcut değil)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Muamele durumu. Doğrulama sayısını görüntülemek için imleci bu alanda tutunuz.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Muamelenin alındığı tarih ve zaman.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Muamele türü.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Muamelenin alıcı adresi.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Bakiyeden alınan ya da bakiyeye eklenen miktar.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Hepsi</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Bugün</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>Bu hafta</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>Bu ay</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Geçen ay</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Bu sene</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Aralık...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Şununla alınan</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Gönderildiği adres</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Kendinize</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Oluşturulan</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Diğer</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Aranacak adres ya da etiket giriniz</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Asgari miktar</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Adresi kopyala</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Etiketi kopyala</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Miktarı kopyala</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Etiketi düzenle</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Detayları göster...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Muamele verilerini dışa aktar</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Virgülle ayrılmış değerler dosyası (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Doğrulandı</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Tarih</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Tür</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Etiket</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Adres</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Miktar</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>Kimlik</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Dışa aktarımda hata oluştu</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>%1 dosyasına yazılamadı.</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Aralık:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>ilâ</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Gönderiliyor...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Bitcoin sürümü</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Kullanım:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>-server ya da bitcoind'ye komut gönder</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Komutları listele</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Bir komut için yardım al</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Seçenekler:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Yapılandırma dosyası belirt (varsayılan: bitcoin.conf)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Pid dosyası belirt (varsayılan: bitcoind.pid)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Madenî para (coin) oluştur</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Para oluşturma</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Küçültülmüş olarak başla</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Veri dizinini belirt</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Bağlantı zaman aşım süresini milisaniye olarak belirt</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Socks4 vekil sunucusu vasıtasıyla bağlan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Düğüm ekleme ve bağlantı için DNS aramalarına izin ver</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Bağlantılar için dinlenecek <port> (varsayılan: 8333 ya da testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Eşler ile en çok <n> adet bağlantı kur (varsayılan: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Bağlanılacak düğüm ekle</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Sadece belirtilen düğüme bağlan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Dışarıdan bağlantıları reddet</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Eş listesini DNS kullanarak başlatma</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Aksaklık gösteren eşlerle bağlantıyı kesme sınırı (varsayılan: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Aksaklık gösteren eşlerle yeni bağlantıları engelleme süresi, saniye olarak (varsayılan: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Her bağlantı için alım tamponu, <n>*1000 bayt (varsayılan: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Her bağlantı için yollama tamponu, <n>*1000 bayt (varsayılan: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Dinlenilecek portu haritalamak için UPnP kullanma</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Dinlenilecek portu haritalamak için UPnP kullan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Yolladığınız muameleler için eklenecek kB başı ücret</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Konut satırı ve JSON-RPC komutlarını kabul et</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Arka planda daemon (servis) olarak çalış ve komutları kabul et</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Deneme şebekesini kullan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>İlâve hata ayıklama verisi çıkar</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Hata ayıklama çıktısına tarih ön ekleri ilâve et</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Trace/hata ayıklama verilerini debug.log dosyası yerine konsola gönder</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Hata ayıklayıcıya -debugger- trace/hata ayıklama verileri gönder</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>JSON-RPC bağlantıları için kullanıcı ismi</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>JSON-RPC bağlantıları için parola</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>JSON-RPC bağlantıları için dinlenecek <port> (varsayılan: 8332)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Belirtilen İP adresinden JSON-RPC bağlantılarını kabul et</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Şu <ip> adresinde (varsayılan: 127.0.0.1) çalışan düğüme komut yolla</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Anahtar alan boyutunu <n> değerine ayarla (varsayılan: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Blok zincirini eksik cüzdan muameleleri için tekrar tara</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL seçenekleri: (SSL kurulum bilgisi için Bitcoin vikisine bakınız)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>JSON-RPC bağlantıları için OpenSSL (https) kullan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Sunucu sertifika dosyası (varsayılan: server.cert)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Sunucu özel anahtarı (varsayılan: server.pem)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Kabul edilebilir şifreler (varsayılan: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Bu yardım mesajı</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>%s veri dizininde kilit elde edilemedi. Bitcoin muhtemelen hâlihazırda çalışmaktadır.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Adresler yükleniyor...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>addr.dat dosyasının yüklenmesinde hata oluştu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>blkindex.dat dosyasının yüklenmesinde hata oluştu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>wallet.dat dosyasının yüklenmesinde hata oluştu: bozuk cüzdan</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>wallet.dat dosyasının yüklenmesinde hata oluştu: cüzdanın daha yeni bir Bitcoin sürümüne ihtiyacı var</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için Bitcoin'i yeniden başlatınız</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>wallet.dat dosyasının yüklenmesinde hata oluştu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Blok indeksi yükleniyor...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Cüzdan yükleniyor...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Yeniden tarama...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Yükleme tamamlandı</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Geçersiz -proxy adresi</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>-paytxfee=<miktar> için geçersiz miktar</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Uyarı: -paytxfee çok yüksek bir değere ayarlanmış. Bu, muamele gönderirseniz ödeyeceğiniz muamele ücretidir.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Hata: CreateThread(StartNode) başarısız oldu</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Uyarı: Disk alanı düşük </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>%d sayılı porta bu bilgisayarda bağlanılamadı. Bitcoin muhtemelen hâlihazırda çalışmaktadır.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Uyarı: Lütfen bilgisayarınızın tarih ve saatinin doğru olup olmadığını kontrol ediniz. Saatiniz doğru değilse Bitcoin gerektiği gibi çalışamaz.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>beta</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts new file mode 100644 index 0000000000..006c2259b2 --- /dev/null +++ b/src/qt/locale/bitcoin_uk.ts @@ -0,0 +1,2013 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="uk" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>Про Bitcoin</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation>Версія <b>Bitcoin'a<b></translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>Авторське право © 2009-2012 Розробники Bitcoin + +Це програмне забезпечення є експериментальним. + +Поширюється за ліцензією MIT/X11, додаткова інформація міститься у файлі license.txt, а також за адресою http://www.opensource.org/licenses/mit-license.php. + +Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (http://www.openssl.org/), криптографічне програмне забезпечення, написане Еріком Янгом (eay@cryptsoft.com), та функції для роботи з UPnP, написані Томасом Бернардом.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>Адресна книга</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>Це ваші адреси для отримання платежів. Ви можете давати різні адреси різним людям, таким чином маючи можливість відслідкувати хто конкретно і скільки вам заплатив. </translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>Двічі клікніть на адресу чи назву для їх зміни</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>Створити нову адресу</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&Створити адресу...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Копіювати виділену адресу в буфер обміну</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&Копіювати</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>Показати QR-&Код</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>Підпишіть повідомлення щоб довести, що ви є власником цієї адреси</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&Підписати повідомлення</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>Видалити виділену адресу зі списку. Лише адреси з адресної книги можуть бути видалені.</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&Видалити</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>Скопіювати адресу</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>Скопіювати мітку</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>Редагувати</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>Видалити</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>Експортувати адресну книгу</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>Файли відділені комами (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>Помилка при експортуванні</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>Неможливо записати у файл %1.</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>Назва</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(немає назви)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>Діалог</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>Текстова мітка</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>Введіть пароль</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>Новий пароль</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>Повторіть пароль</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Введіть новий пароль для гаманця.<br/>Будь ласка, використовуйте паролі що містять <b> як мінімум 10 випадкових символів </b> або <b> як мінімум 8 слів</b>.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>Зашифрувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>Ця операція потребує пароль для розблокування гаманця.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>Розблокувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>Ця операція потребує пароль для дешифрування гаманця.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>Дешифрувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>Змінити пароль</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>Ввести старий та новий паролі для гаманця.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>Підтвердити шифрування гаманця</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>УВАГА: Якщо ви зашифруєте гаманець і забудете пароль, ви <b>ВТРАТИТЕ ВСІ СВОЇ БІТКОІНИ</b>! +Ви дійсно хочете зашифрувати свій гаманець?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>Гаманець зашифровано</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Біткоін-клієнт буде закрито для завершення процесу шифрування. Пам’ятайте, що шифрування гаманця не може повністю захистити ваші біткоіни від кражі, у випадку якщо ваш комп’ютер буде інфіковано шкідливими програмами.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>Увага: Ввімкнено Caps Lock</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>Не вдалося зашифрувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>Виникла помилка під час шифрування гаманця. Ваш гаманець не було зашифровано.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>Введені паролі не співпадають.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>Не вдалося розблокувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>Введений пароль є невірним.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>Не вдалося розшифрувати гаманець</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>Пароль було успішно змінено.</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>Гаманець</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>Синхронізація з мережею...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>Відбувається синхронізація ланцюжка блоків...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&Огляд</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>Показати загальний огляд гаманця</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>Пе&реклади</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>Переглянути історію переказів</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&Адресна книга</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>Редагувати список збережених адрес та міток</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>О&тримати</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>Показати список адрес для отримання платежів</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>В&ідправити</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>Відправити монети на вказану адресу</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>&Підписати повідомлення</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>Доведіть, що це ваша адреса</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>&Вихід</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>Вийти</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>П&ро %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>Показати інформацію про Bitcoin</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>&Про Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>Показати інформацію про Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&Параметри...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>Редагувати параметри</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>Показати &гаманець</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>Показати вікно гаманця</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&Експорт...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&Шифрування гаманця</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>Зашифрувати чи розшифрувати гаманець</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>Змінити парол&ь</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>Змінити пароль, який використовується для шифрування гаманця</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&Файл</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&Налаштування</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&Довідка</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>Панель вкладок</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>Панель дій</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[тестова мережа]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n активне з’єднання з мережею</numerusform><numerusform>%n активні з’єднання з мережею</numerusform><numerusform>%n активних з’єднань з мережею</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>Завантажено %1 з %2 блоків історії переказів.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>Завантажено %1 блоків історії транзакцій.</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n секунду тому</numerusform><numerusform>%n секунди тому</numerusform><numerusform>%n секунд тому</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n хвилину тому</numerusform><numerusform>%n хвилини тому</numerusform><numerusform>%n хвилин тому</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n годину тому</numerusform><numerusform>%n години тому</numerusform><numerusform>%n годин тому</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n день тому</numerusform><numerusform>%n дня тому</numerusform><numerusform>%n днів тому</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>Синхронізовано</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>Синхронізується...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>Останній отриманий блок було згенеровано %1.</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>Цей переказ перевищує максимально допустимий розмір. Проте ви можете здійснити її, додавши комісію в %1, яка відправиться тим вузлам що оброблять ваш переказ, та допоможе підтримати мережу. Ви хочете додати комісію?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>Відправлення...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>Надіслані перекази</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>Отримані перекази</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>Дата: %1 +Кількість: %2 +Тип: %3 +Адреса: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation><b>Зашифрований</b> гаманець <b>розблоковано</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation><b>Зашифрований</b> гаманець <b>заблоковано</b></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>В&имірювати монети в: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>Виберіть одиницю вимірювання монет, яка буде відображатись в гаманці та при відправленні.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>Відображати адресу в списку переказів</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>Редагувати адресу</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&Мітка</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>Мітка, пов’язана з цим записом адресної книги</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&Адреса</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>Адреса, пов’язана з цим записом адресної книги.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>Нова адреса для отримання</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>Нова адреса для відправлення</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>Редагувати адресу для отримання</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>Редагувати адресу для відправлення</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>Введена адреса «%1» вже присутня в адресній книзі.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>Введена адреса «%1» не є коректною адресою в мережі Bitcoin.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>Неможливо розблокувати гаманець.</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>Не вдалося згенерувати нові ключі.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&Запускати гаманець при вході в систему</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>Автоматично запускати гаманець при вмиканні комп’ютера</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>Мінімізувати &у трей</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>Показувати лише іконку в треї після згортання вікна</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>Відображення порту через &UPnP</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>Автоматично відкривати порт для клієнту біткоін на роутері. Працює лише якщо ваш роутер підтримує UPnP і ця функція увімкнена.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>Згортати замість закритт&я</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>Згортати замість закриття. Якщо ця опція включена, програма закриється лише після вибору відповідного пункту в меню.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>Підключатись через &SOCKS4-проксі:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>Підключатись до мережі Bitcoin через SOCKS4-проксі (наприклад при використанні Tor) </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>&IP проксі: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>IP-адреса проксі-сервера (наприклад 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&Порт: </translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>Порт проксі-сервера (наприклад 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Добровільна комісія за кожен Кб переказу, яка дозволяє бути впевненим у тому, що ваш переказ буде оброблено швидко. Розмір більшості переказів рівен 1 Кб. Рекомендована комісія: 0,01.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>Заплатити комісі&ю</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>Добровільна комісія за кожен Кб переказу, яка дозволяє бути впевненим у тому, що ваш переказ буде оброблено швидко. Розмір більшості переказів рівен 1 Кб. Рекомендована комісія: 0,01.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>Повідомлення</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Адреса для отримувача платежу (наприклад, 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>Вибрати адресу з адресної книги</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>Вставити адресу</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>Введіть повідомлення, яке ви хочете підписати тут</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>Натисніть кнопку "Підписати повідомлення", для отриманя підпису</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>Підпишіть повідомлення щоб довести, що ви є власником цієї адреси</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&Підписати повідомлення</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>Копіювати виділену адресу в буфер обміну</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&Копіювати</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>Помилка при підписуванні</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>"%1" не є коректною адресою в мережі Bitcoin.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>Приватний ключ для %1 недоступний.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>Не вдалось підписати</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>Головні</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>Відображення</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>Параметри</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>Баланс:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>Кількість переказів:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>Непідтверджені:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Гаманець</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>Недавні перекази</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>Ваш поточний баланс</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>Загальна сума всіх переказів, які ще не підтверджені, та до сих пір не враховуються в загальному балансі</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>Загальна кількість переказів в гаманці</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>Діалог</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR-Код</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>Запросити Платіж</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>Кількість:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>Мітка:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>Повідомлення:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&Зберегти як...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation type="unfinished"/> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>Відправити</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>Відправити на декілька адрес</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>Дод&ати одержувача... </translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>Видалити всі поля транзакції</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>Очистити все</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>Баланс:</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>Підтвердити відправлення</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&Відправити</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> адресату %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>Підтвердіть відправлення</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>Ви впевнені що хочете відправити %1</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> і </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>Адреса отримувача невірна, будьласка перепровірте.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>Кількість монет для відправлення повинна бути більшою 0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>Кількість монет для відправлення перевищує ваш баланс</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>Сума перевищить ваш баланс, якщо комісія %1 буде додана до вашого переказу</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>Знайдено адресу що дублюється. Відправлення на кожну адресу дозволяється лише один раз на кожну операцію переказу.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>Помилка: не вдалося створити переказ </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>Помилка: переказ було відхилено. Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій.</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>&Кількість:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>&Отримувач:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>Введіть мітку для цієї адреси для додавання її в адресну книгу</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&Мітка:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Адреса для отримувача платежу (наприклад, 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>Вибрати адресу з адресної книги</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>Вставити адресу</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>Видалити цього отримувача</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>Введіть адресу Bitcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>Відкрити для %1 блоків</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>Відкрити до %1</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/поза інтернетом?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/не підтверджено</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 підтверджень</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>Статус:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, ще не було успішно розіслано</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>, розіслано через %1 вузол</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>, розіслано через %1 вузлів</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>Дата:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>Джерело:</b> згенеровано<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>Відправник:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>невідомий</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>Одержувач:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation> (Ваша, мітка: </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation> (ваша)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>Кредит:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 «дозріє» через %2 блоків)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(не прийнято)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation><b>Дебет:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation><b>Комісія за переказ:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>Загальна сума:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>Повідомлення:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>Коментар:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>ID транзакції:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>Після генерації монет, потрібно зачекати 120 блоків, перш ніж їх можна буде використати. Коли ви згенерували цей блок, його було відправлено в мережу для того, щоб він був доданий до ланцюжка блоків. Якщо ця процедура не вдасться, статус буде змінено на «не підтверджено» і ви не зможете потратити згенеровані монету. Таке може статись, якщо хтось інший згенерував блок на декілька секунд раніше.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>Деталі переказів</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>Даний діалог показує детальну статистику по вибраному переказу</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>Дата</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>Тип</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>Кількість</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>Відкрити для %n блоку</numerusform><numerusform>Відкрити для %n блоків</numerusform><numerusform>Відкрити для %n блоків</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>Відкрити до %1</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>Поза інтернетом (%1 підтверджень)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>Непідтверджено (%1 із %2 підтверджень)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>Підтверджено (%1 підтверджень)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>Добутими монетами можна буде скористатись через %n блок</numerusform><numerusform>Добутими монетами можна буде скористатись через %n блоки</numerusform><numerusform>Добутими монетами можна буде скористатись через %n блоків</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>Цей блок не був отриманий жодними іншими вузлами і, ймовірно, не буде прийнятий!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>Згенеровано, але не підтверджено</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>Отримано</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>Отримано від</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>Відправлено</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>Відправлено собі</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>Добуто</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(недоступно)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>Статус переказу. Наведіть вказівник на це поле, щоб показати кількість підтверджень.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>Дата і час, коли переказ було отримано.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>Тип переказу.</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>Адреса отримувача</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>Сума, додана чи знята з балансу.</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>Всі</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>Сьогодні</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>На цьому тижні</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>На цьому місяці</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>Минулого місяця</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>Цього року</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>Проміжок</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>Отримані на</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>Відправлені на</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>Відправлені собі</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>Добуті</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>Інше</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>Введіть адресу чи мітку для пошуку</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>Мінімальна сума</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>Скопіювати адресу</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>Скопіювати мітку</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>Копіювати кількість</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>Редагувати мітку</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>Показати деталі...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>Експортувати дані переказів</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>Файли, розділені комою (*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>Підтверджені</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>Дата</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>Тип</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>Мітка</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>Адреса</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>Кількість</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>Ідентифікатор</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>Помилка експорту</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>Неможливо записати у файл %1</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>Діапазон від:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>до</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>Відправка...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>Версія</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>Вкористання:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>Відправити команду серверу -server чи демону +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>Список команд +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>Отримати довідку по команді +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>Параметри: +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>Вкажіть файл конфігурації (за промовчуванням: bitcoin.conf) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>Вкажіть pid-файл (за промовчуванням: bitcoind.pid) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>Генерувати монети +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>Не генерувати монети +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>Запускати згорнутим +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>Вкажіть робочий каталог +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>Вкажіть таймаут з’єднання (в мілісекундах) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>Підключитись через SOCKS4-проксі +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>Дозволити пошук в DNS для команд «addnode» і «connect» +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>Чекати на з'єднання на порту (по замовченню 8333 або тестова мережа 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>Підтримувати не більше <n> зв'язків з колегами (за замовчуванням: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>Додати вузол для підключення +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>Підключитись лише до вказаного вузла +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>Не приймати підключення ззовні +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>Не завантажувати список пірів за допомогою DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Поріг відключення неправильно підєднаних пірів (за замовчуванням: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Максимальній розмір вхідного буферу на одне з'єднання (за замовчуванням 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Максимальоий буфер , <n> * 1000 байт (за умовчанням: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Максимальній розмір виіхідного буферу на одне з'єднання (за замовчуванням 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>Не намагатись використовувати UPnP для відображення порту що прослуховується на роутері +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>Намагатись використовувати UPnP для відображення порту що прослуховується на роутері +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>Комісія за Кб</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>Приймати команди із командного рядка та команди JSON-RPC +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>Запустити в фоновому режимі (як демон) та приймати команди +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>Використовувати тестову мережу +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>Виводити більше налагоджувальної інформації</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>Доповнювати налагоджувальний вивід відміткою часу</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>Відсилаті налагоджувальну інформацію на консоль, а не у файл debug.log</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>Відсилаті налагоджувальну інформацію до налагоджувача</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>Ім’я користувача для JSON-RPC-з’єднань +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>Пароль для JSON-RPC-з’єднань +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>Прослуховувати <port> для JSON-RPC-з’єднань (за промовчуванням: 8332) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>Дозволити JSON-RPC-з’єднання з вказаної IP-адреси +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>Відправляти команди на вузол, запущений на <ip> (за промовчуванням: 127.0.0.1) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>Встановити розмір пулу ключів <n> (за промовчуванням: 100) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>Пересканувати ланцюжок блоків, в пошуку втрачених переказів +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +Параметри SSL: (див. Bitcoin Wiki) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>Використовувати OpenSSL (https) для JSON-RPC-з’єднань +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>Сертифікату сервера (за промовчуванням: server.cert) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>Закритий ключ сервера (за промовчуванням: server.pem) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>Допустимі шифри (за промовчуванням: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>Дана довідка +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>Неможливо встановити блокування на робочий каталог %s. Можливо, гаманець вже запущено.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>Завантаження адрес...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>Помилка при завантаженні addr.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>Помилка при завантаженні blkindex.dat </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>Помилка при завантаженні wallet.dat: Гаманець пошкоджено </translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>Помилка при завантаженні wallet.dat: Гаманець потребує новішої версії Біткоін-клієнта</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>Потрібно перезаписати гаманець: перезапустіть Біткоін-клієнт для завершення</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>Помилка при завантаженні wallet.dat</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>Завантаження індексу блоків...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>Завантаження гаманця...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>Сканування...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>Завантаження завершене</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>Помилка в адресі проксі-сервера</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>Помилка у величині комісії</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>Увага: встановлено занадто велику комісію (-paytxfee). Комісія зніматиметься кожен раз коли ви проводитимете перекази.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>Помилка: CreateThread(StartNode) дала збій</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>Увага: На диску мало вільного місця</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>Неможливо прив’язати до порту %d на цьому комп’ютері. Молживо гаманець вже запущено.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>Увага: будь ласка, перевірте дату і час на свому комп’ютері. Якщо ваш годинник йде неправильно, Bitcoin може працювати некоректно.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>бета</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts new file mode 100644 index 0000000000..d059aa0351 --- /dev/null +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -0,0 +1,2012 @@ +<?xml version="1.0" ?><!DOCTYPE TS><TS language="zh_CN" version="2.0"> +<defaultcodec>UTF-8</defaultcodec> +<context> + <name>AboutDialog</name> + <message> + <location filename="../forms/aboutdialog.ui" line="14"/> + <source>About Bitcoin</source> + <translation>关于比特币</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="53"/> + <source><b>Bitcoin</b> version</source> + <translation><b>比特币</b>版本</translation> + </message> + <message> + <location filename="../forms/aboutdialog.ui" line="85"/> + <source>Copyright © 2009-2012 Bitcoin Developers + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> + <translation>版权归比特币开发者所有 © 2009-2012 + +这是一个实验性软件。 + +Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</translation> + </message> +</context> +<context> + <name>AddressBookPage</name> + <message> + <location filename="../forms/addressbookpage.ui" line="14"/> + <source>Address Book</source> + <translation>地址薄</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="20"/> + <source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source> + <translation>这些是你接受支付的比特币地址。当支付时你可以给出不同的地址,以便追踪不同的支付者。</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="33"/> + <source>Double-click to edit address or label</source> + <translation>双击以编辑地址或标签</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="57"/> + <source>Create a new address</source> + <translation>创建新地址</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="60"/> + <source>&New Address...</source> + <translation>&新地址...</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="71"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>复制当前选中地址到系统剪贴板</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="74"/> + <source>&Copy to Clipboard</source> + <translation>&复制到剪贴板</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>显示二维码</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>发送签名消息以证明您是该比特币地址的拥有者</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>&发送签名消息</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> + <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> + <translation>从列表中删除当前选中地址。只有发送地址可以被删除。</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="113"/> + <source>&Delete</source> + <translation>&删除</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>复制地址</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>复制标签</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>编辑</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>删除</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> + <source>Export Address Book Data</source> + <translation>导出地址薄数据</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="282"/> + <source>Comma separated file (*.csv)</source> + <translation>逗号分隔文件 (*.csv)</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Error exporting</source> + <translation>导出错误</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="295"/> + <source>Could not write to file %1.</source> + <translation>无法写入文件 %1。</translation> + </message> +</context> +<context> + <name>AddressTableModel</name> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Label</source> + <translation>标签</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="77"/> + <source>Address</source> + <translation>地址</translation> + </message> + <message> + <location filename="../addresstablemodel.cpp" line="113"/> + <source>(no label)</source> + <translation>(没有标签)</translation> + </message> +</context> +<context> + <name>AskPassphraseDialog</name> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="26"/> + <source>Dialog</source> + <translation>会话</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> + <source>TextLabel</source> + <translation>文本标签</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> + <source>Enter passphrase</source> + <translation>输入口令</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> + <source>New passphrase</source> + <translation>新口令</translation> + </message> + <message> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> + <source>Repeat new passphrase</source> + <translation>重复新口令</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="34"/> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>输入钱包的新口令。<br/>使用的口令请至少包含<b>10个以上随机字符</>,或者是<b>8个以上的单词</b>。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="35"/> + <source>Encrypt wallet</source> + <translation>加密钱包</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="38"/> + <source>This operation needs your wallet passphrase to unlock the wallet.</source> + <translation>该操作需要您首先使用口令解锁钱包。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="43"/> + <source>Unlock wallet</source> + <translation>解锁钱包</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="46"/> + <source>This operation needs your wallet passphrase to decrypt the wallet.</source> + <translation>该操作需要您首先使用口令解密钱包。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="51"/> + <source>Decrypt wallet</source> + <translation>解密钱包</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="54"/> + <source>Change passphrase</source> + <translation>修改口令</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="55"/> + <source>Enter the old and new passphrase to the wallet.</source> + <translation>请输入钱包的旧口令与新口令。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="101"/> + <source>Confirm wallet encryption</source> + <translation>确认加密钱包</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="102"/> + <source>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?</source> + <translation>警告:如果您加密了您的钱包之后忘记了口令,您将会<b>失去所有的比特币</b>! +确定要加密钱包吗?</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> + <source>Wallet encrypted</source> + <translation>钱包已加密</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>将关闭软件以完成加密过程。 请您谨记:钱包加密并不是万能的,电脑中毒,您的比特币还是有可能丢失。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>警告:大写锁定键CapsLock开启</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> + <source>Wallet encryption failed</source> + <translation>钱包加密失败</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="118"/> + <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> + <translation>由于一个本地错误,加密钱包操作已经失败。您的钱包没有被加密。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> + <source>The supplied passphrases do not match.</source> + <translation>口令不匹配。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="136"/> + <source>Wallet unlock failed</source> + <translation>钱包解锁失败</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="137"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> + <source>The passphrase entered for the wallet decryption was incorrect.</source> + <translation>用于解密钱包的口令不正确。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="147"/> + <source>Wallet decryption failed</source> + <translation>钱包解密失败。</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="161"/> + <source>Wallet passphrase was succesfully changed.</source> + <translation>钱包口令修改成功</translation> + </message> +</context> +<context> + <name>BitcoinGUI</name> + <message> + <location filename="../bitcoingui.cpp" line="69"/> + <source>Bitcoin Wallet</source> + <translation>比特币钱包</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> + <source>Synchronizing with network...</source> + <translation>正在与网络同步...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="145"/> + <source>Block chain synchronization in progress</source> + <translation>正在同步区域锁链</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="176"/> + <source>&Overview</source> + <translation>&概况</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="177"/> + <source>Show general overview of wallet</source> + <translation>显示钱包概况</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="182"/> + <source>&Transactions</source> + <translation>&交易</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="183"/> + <source>Browse transaction history</source> + <translation>查看交易历史</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="188"/> + <source>&Address Book</source> + <translation>&地址薄</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="189"/> + <source>Edit the list of stored addresses and labels</source> + <translation>修改存储的地址和标签列表</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="194"/> + <source>&Receive coins</source> + <translation>&接收货币</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="195"/> + <source>Show the list of addresses for receiving payments</source> + <translation>显示接收支付的地址列表</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="200"/> + <source>&Send coins</source> + <translation>&发送货币</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="201"/> + <source>Send coins to a bitcoin address</source> + <translation>将货币发送到一个比特币地址</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>发送签名 &消息</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>证明您拥有某个比特币地址</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> + <source>E&xit</source> + <translation>退出</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="227"/> + <source>Quit application</source> + <translation>退出程序</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="230"/> + <source>&About %1</source> + <translation>&关于 %1</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="231"/> + <source>Show information about Bitcoin</source> + <translation>显示比特币的相关信息</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>关于 &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>显示Qt相关信息</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> + <source>&Options...</source> + <translation>&选项...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="237"/> + <source>Modify configuration options for bitcoin</source> + <translation>修改比特币配置选项</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="239"/> + <source>Open &Bitcoin</source> + <translation>打开 &比特币</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="240"/> + <source>Show the Bitcoin window</source> + <translation>显示比特币窗口</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="241"/> + <source>&Export...</source> + <translation>&导出...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>导出当前数据到文件</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="243"/> + <source>&Encrypt Wallet</source> + <translation>&加密钱包</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Encrypt or decrypt wallet</source> + <translation>加密或解密钱包</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>&备份钱包</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>备份钱包到其它文件夹</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> + <source>&Change Passphrase</source> + <translation>&修改口令</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="249"/> + <source>Change the passphrase used for wallet encryption</source> + <translation>修改钱包加密口令</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="272"/> + <source>&File</source> + <translation>&文件</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="281"/> + <source>&Settings</source> + <translation>&设置</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="287"/> + <source>&Help</source> + <translation>&帮助</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="294"/> + <source>Tabs toolbar</source> + <translation>分页工具栏</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="305"/> + <source>Actions toolbar</source> + <translation>动作工具栏</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="317"/> + <source>[testnet]</source> + <translation>[testnet]</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="407"/> + <source>bitcoin-qt</source> + <translation>bitcoin-qt</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="449"/> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n 个到比特币网络的活动连接</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="475"/> + <source>Downloaded %1 of %2 blocks of transaction history.</source> + <translation>%1 / %2 个交易历史的区块已下载</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="487"/> + <source>Downloaded %1 blocks of transaction history.</source> + <translation>%1 个交易历史的区块已下载</translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="502"/> + <source>%n second(s) ago</source> + <translation><numerusform>%n 秒前</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="506"/> + <source>%n minute(s) ago</source> + <translation><numerusform>%n 分种前</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="510"/> + <source>%n hour(s) ago</source> + <translation><numerusform>%n 小时前</numerusform></translation> + </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="514"/> + <source>%n day(s) ago</source> + <translation><numerusform>%n 天前</numerusform></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="520"/> + <source>Up to date</source> + <translation>最新状态</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="525"/> + <source>Catching up...</source> + <translation>更新中...</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="533"/> + <source>Last received block was generated %1.</source> + <translation>最新收到的区块产生于 %1。</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="597"/> + <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> + <translation>该笔交易的数据量超限.您可以选择支付 %1 交易费, 交易费将支付给处理该笔交易的网络节点,有助于维持比特币网络的运行. 您愿意支付交易费用吗?</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="602"/> + <source>Sending...</source> + <translation>发送中</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="629"/> + <source>Sent transaction</source> + <translation>已发送交易</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="630"/> + <source>Incoming transaction</source> + <translation>流入交易</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="631"/> + <source>Date: %1 +Amount: %2 +Type: %3 +Address: %4 +</source> + <translation>日期: %1 +金额: %2 +类别: %3 +地址: %4 +</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="751"/> + <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> + <translation>钱包已被<b>加密</b>,当前为<b>解锁</b>状态</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="759"/> + <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> + <translation>钱包已被<b>加密</b>,当前为<b>锁定</b>状态</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>备份钱包</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>钱包文件(*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>备份失败</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>备份钱包到其它文件夹失败.</translation> + </message> +</context> +<context> + <name>DisplayOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="270"/> + <source>&Unit to show amounts in: </source> + <translation>&金额显示单位:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="274"/> + <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> + <translation>选择显示及发送比特币时使用的最小单位</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="281"/> + <source>Display addresses in transaction list</source> + <translation>在交易列表中显示地址</translation> + </message> +</context> +<context> + <name>EditAddressDialog</name> + <message> + <location filename="../forms/editaddressdialog.ui" line="14"/> + <source>Edit Address</source> + <translation>编辑地址</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="25"/> + <source>&Label</source> + <translation>&标签</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="35"/> + <source>The label associated with this address book entry</source> + <translation>与此地址条目关联的标签</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="42"/> + <source>&Address</source> + <translation>&地址</translation> + </message> + <message> + <location filename="../forms/editaddressdialog.ui" line="52"/> + <source>The address associated with this address book entry. This can only be modified for sending addresses.</source> + <translation>该地址与地址簿中的条目已关联,无法作为发送地址编辑。</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="20"/> + <source>New receiving address</source> + <translation>新接收地址</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="24"/> + <source>New sending address</source> + <translation>新发送地址</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="27"/> + <source>Edit receiving address</source> + <translation>编辑接收地址</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="31"/> + <source>Edit sending address</source> + <translation>编辑发送地址</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="91"/> + <source>The entered address "%1" is already in the address book.</source> + <translation>输入的地址 "%1" 已经存在于地址薄。</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="96"/> + <source>The entered address "%1" is not a valid bitcoin address.</source> + <translation>输入的地址 "%1" 并不是一个有效的比特币地址</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="101"/> + <source>Could not unlock wallet.</source> + <translation>无法解锁钱包</translation> + </message> + <message> + <location filename="../editaddressdialog.cpp" line="106"/> + <source>New key generation failed.</source> + <translation>密钥创建失败.</translation> + </message> +</context> +<context> + <name>MainOptionsPage</name> + <message> + <location filename="../optionsdialog.cpp" line="170"/> + <source>&Start Bitcoin on window system startup</source> + <translation>&开机启动比特币</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="171"/> + <source>Automatically start Bitcoin after the computer is turned on</source> + <translation>在计算机启动后自动运行比特币</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="175"/> + <source>&Minimize to the tray instead of the taskbar</source> + <translation>&最小化到托盘</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="176"/> + <source>Show only a tray icon after minimizing the window</source> + <translation>最小化窗口后只显示一个托盘标志</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="180"/> + <source>Map port using &UPnP</source> + <translation>使用 &UPnP 映射端口</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="181"/> + <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> + <translation>自动在路由器中打开比特币端口。只有当您的路由器开启 UPnP 选项时此功能才有效。</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="185"/> + <source>M&inimize on close</source> + <translation>关闭时最小化</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="186"/> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> + <translation>当窗口关闭时程序最小化而不是退出。当使用该选项时,程序只能通过在菜单中选择退出来关闭</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="190"/> + <source>&Connect through SOCKS4 proxy:</source> + <translation>&通过SOCKS4代理连接</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="191"/> + <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> + <translation>通过一个SOCKS4代理连接到比特币网络 (如使用Tor连接时)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="196"/> + <source>Proxy &IP: </source> + <translation>代理 &IP:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="202"/> + <source>IP address of the proxy (e.g. 127.0.0.1)</source> + <translation>代理服务器IP (如 127.0.0.1)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="205"/> + <source>&Port: </source> + <translation>&端口:</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="211"/> + <source>Port of the proxy (e.g. 1234)</source> + <translation>代理端口 (比如 1234)</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="217"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>建议支付交易费用,有助于您的交易得到尽快处理. 绝大多数交易的字节数为 1 kB. 建议支付0.01个比特币.</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="223"/> + <source>Pay transaction &fee</source> + <translation>支付交易 &费用</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="226"/> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>建议支付交易费用,有助于您的交易得到尽快处理. 绝大多数交易的字节数为 1 kB. 建议支付0.01个比特币.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>消息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>您可以用你的地址对消息进行签名,以证明您是该地址的所有人。注意不要对模棱两可的消息签名,以免遭受钓鱼式攻击。请确保消息真实明确的表达了您的意愿。</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>付款地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>从地址簿选择地址</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>从剪贴板粘贴地址</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>请输入您要发送的签名消息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>单击“发送签名消息"获取签名</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>发送签名消息以证明您是该比特币地址的拥有者</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>&发送签名消息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>复制当前选中地址到系统剪贴板</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>&复制到剪贴板</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>签名错误</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 不是合法的比特币地址。</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>%1 的秘钥不可用。</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>签名失败</translation> + </message> +</context> +<context> + <name>OptionsDialog</name> + <message> + <location filename="../optionsdialog.cpp" line="79"/> + <source>Main</source> + <translation>主要的</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="84"/> + <source>Display</source> + <translation>查看</translation> + </message> + <message> + <location filename="../optionsdialog.cpp" line="104"/> + <source>Options</source> + <translation>选项</translation> + </message> +</context> +<context> + <name>OverviewPage</name> + <message> + <location filename="../forms/overviewpage.ui" line="14"/> + <source>Form</source> + <translation>表单</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="40"/> + <source>Balance:</source> + <translation>余额</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="47"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="54"/> + <source>Number of transactions:</source> + <translation>交易笔数</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="61"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="68"/> + <source>Unconfirmed:</source> + <translation>未确认:</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="75"/> + <source>0 BTC</source> + <translation>0 BTC</translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="82"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Wallet</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">钱包</span></p></body></html></translation> + </message> + <message> + <location filename="../forms/overviewpage.ui" line="122"/> + <source><b>Recent transactions</b></source> + <translation><b>当前交易</b></translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="103"/> + <source>Your current balance</source> + <translation>您的当前余额</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="108"/> + <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source> + <translation>尚未确认的交易总额, 未计入当前余额</translation> + </message> + <message> + <location filename="../overviewpage.cpp" line="111"/> + <source>Total number of transactions in wallet</source> + <translation>钱包总交易数量</translation> + </message> +</context> +<context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>会话</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>二维码</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>请求付款</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>金额:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>标签:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>消息:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>&另存为</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>保存图像...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG图像文件(*.png)</translation> + </message> +</context> +<context> + <name>SendCoinsDialog</name> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="14"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> + <source>Send Coins</source> + <translation>发送货币</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="64"/> + <source>Send to multiple recipients at once</source> + <translation>一次发送给多个接收者</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="67"/> + <source>&Add recipient...</source> + <translation>&添加接收者...</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>移除所有交易项</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> + <source>Clear all</source> + <translation>清除全部</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> + <source>Balance:</source> + <translation>余额</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> + <source>123.456 BTC</source> + <translation>123.456 BTC</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <source>Confirm the send action</source> + <translation>确认并发送货币</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> + <source>&Send</source> + <translation>&发送</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="94"/> + <source><b>%1</b> to %2 (%3)</source> + <translation><b>%1</b> 到 %2 (%3)</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="99"/> + <source>Confirm send coins</source> + <translation>确认发送货币</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source>Are you sure you want to send %1?</source> + <translation>确定您要发送 %1?</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="100"/> + <source> and </source> + <translation> 和 </translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="123"/> + <source>The recepient address is not valid, please recheck.</source> + <translation>接收者地址不合法,请检查。</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="128"/> + <source>The amount to pay must be larger than 0.</source> + <translation>支付金额必须大于0.</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="133"/> + <source>Amount exceeds your balance</source> + <translation>余额不足。</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="138"/> + <source>Total exceeds your balance when the %1 transaction fee is included</source> + <translation>计入 %1 的交易费后,您的余额不足以支付总价。</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="144"/> + <source>Duplicate address found, can only send to each address once in one send operation</source> + <translation>发现重复地址,一次操作中只可以给每个地址发送一次</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="149"/> + <source>Error: Transaction creation failed </source> + <translation>错误:交易创建失败。</translation> + </message> + <message> + <location filename="../sendcoinsdialog.cpp" line="154"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation>错误:交易被拒绝。这种情况通常发生在您钱包中的一些货币已经被消费之后,比如您使用了一个wallet.dat的副本,而货币在那个副本中已经被消费,但在当前钱包中未被标记为已消费。</translation> + </message> +</context> +<context> + <name>SendCoinsEntry</name> + <message> + <location filename="../forms/sendcoinsentry.ui" line="14"/> + <source>Form</source> + <translation>表单</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="29"/> + <source>A&mount:</source> + <translation>金额</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="42"/> + <source>Pay &To:</source> + <translation>支付 &到:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="66"/> + <location filename="../sendcoinsentry.cpp" line="26"/> + <source>Enter a label for this address to add it to your address book</source> + <translation>为这个地址输入一个标签,以便将它添加到您的地址簿</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="75"/> + <source>&Label:</source> + <translation>&标签:</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="93"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>付款地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="103"/> + <source>Choose address from address book</source> + <translation>从地址薄选择地址</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="113"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="120"/> + <source>Paste address from clipboard</source> + <translation>从剪贴板粘贴地址</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="130"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/sendcoinsentry.ui" line="137"/> + <source>Remove this recipient</source> + <translation>移除此接收者</translation> + </message> + <message> + <location filename="../sendcoinsentry.cpp" line="25"/> + <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>请输入比特币地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> +</context> +<context> + <name>TransactionDesc</name> + <message> + <location filename="../transactiondesc.cpp" line="18"/> + <source>Open for %1 blocks</source> + <translation>开启 %1 个数据块</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="20"/> + <source>Open until %1</source> + <translation>至 %1 个数据块时开启</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="26"/> + <source>%1/offline?</source> + <translation>%1/离线?</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="28"/> + <source>%1/unconfirmed</source> + <translation>%1/未确认</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="30"/> + <source>%1 confirmations</source> + <translation>%1 确认项</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="47"/> + <source><b>Status:</b> </source> + <translation><b>状态:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="52"/> + <source>, has not been successfully broadcast yet</source> + <translation>, 未被成功广播</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="54"/> + <source>, broadcast through %1 node</source> + <translation>,同过 %1 节点广播</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="56"/> + <source>, broadcast through %1 nodes</source> + <translation>,同过 %1 节点组广播</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="60"/> + <source><b>Date:</b> </source> + <translation><b>日期:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="67"/> + <source><b>Source:</b> Generated<br></source> + <translation><b>来源:</b> 生成<br></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> + <source><b>From:</b> </source> + <translation><b>从:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="90"/> + <source>unknown</source> + <translation>未知</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> + <source><b>To:</b> </source> + <translation><b>到:</b></translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="94"/> + <source> (yours, label: </source> + <translation>(您的, 标签:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="96"/> + <source> (yours)</source> + <translation>(您的)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> + <source><b>Credit:</b> </source> + <translation><b>到帐:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="133"/> + <source>(%1 matures in %2 more blocks)</source> + <translation>(%1 成熟于 %2 以上数据块)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="137"/> + <source>(not accepted)</source> + <translation>(未接受)</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> + <source><b>Debit:</b> </source> + <translation>支出</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="195"/> + <source><b>Transaction fee:</b> </source> + <translation>交易费</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="211"/> + <source><b>Net amount:</b> </source> + <translation><b>网络金额:</b> </translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="217"/> + <source>Message:</source> + <translation>消息:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="219"/> + <source>Comment:</source> + <translation>备注</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>交易ID:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> + <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> + <translation>新生产的比特币必须等待120个数据块之后才能被使用. 当您生产出此数据块,它将被广播至比特币网络并添加至数据链. 如果添加到数据链失败, 它的状态将变成"不被接受",生产的比特币将不能使用. 在您生产新数据块的几秒钟内, 如果其它节点也生产出同样的数据块,有可能会发生这种情况.</translation> + </message> +</context> +<context> + <name>TransactionDescDialog</name> + <message> + <location filename="../forms/transactiondescdialog.ui" line="14"/> + <source>Transaction details</source> + <translation>交易细节</translation> + </message> + <message> + <location filename="../forms/transactiondescdialog.ui" line="20"/> + <source>This pane shows a detailed description of the transaction</source> + <translation>当前面板显示了交易的详细描述</translation> + </message> +</context> +<context> + <name>TransactionTableModel</name> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Date</source> + <translation>日期</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Type</source> + <translation>类型</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Address</source> + <translation>地址</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="213"/> + <source>Amount</source> + <translation>数量</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="274"/> + <source>Open for %n block(s)</source> + <translation><numerusform>开启 %n 个数据块</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="277"/> + <source>Open until %1</source> + <translation>至 %1 个数据块时开启</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="280"/> + <source>Offline (%1 confirmations)</source> + <translation>离线 (%1 个确认项)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="283"/> + <source>Unconfirmed (%1 of %2 confirmations)</source> + <translation>未确认 (%1 / %2 条确认信息)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="286"/> + <source>Confirmed (%1 confirmations)</source> + <translation>已确认 (%1 条确认信息)</translation> + </message> + <message numerus="yes"> + <location filename="../transactiontablemodel.cpp" line="295"/> + <source>Mined balance will be available in %n more blocks</source> + <translation><numerusform>挖矿所得将在 %n 个数据块之后可用</numerusform></translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="301"/> + <source>This block was not received by any other nodes and will probably not be accepted!</source> + <translation>此区块未被其他节点接收,并可能不被接受!</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="304"/> + <source>Generated but not accepted</source> + <translation>已生成但未被接受</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="347"/> + <source>Received with</source> + <translation>接收于</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="349"/> + <source>Received from</source> + <translation>收款来自</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="352"/> + <source>Sent to</source> + <translation>发送到</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="354"/> + <source>Payment to yourself</source> + <translation>付款给自己</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="356"/> + <source>Mined</source> + <translation>挖矿所得</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="394"/> + <source>(n/a)</source> + <translation>(n/a)</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="593"/> + <source>Transaction status. Hover over this field to show number of confirmations.</source> + <translation>交易状态。 鼠标移到此区域上可显示确认消息项的数目。</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="595"/> + <source>Date and time that the transaction was received.</source> + <translation>接收交易的时间</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="597"/> + <source>Type of transaction.</source> + <translation>交易类别。</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="599"/> + <source>Destination address of transaction.</source> + <translation>交易目的地址。</translation> + </message> + <message> + <location filename="../transactiontablemodel.cpp" line="601"/> + <source>Amount removed from or added to balance.</source> + <translation>从余额添加或移除的金额</translation> + </message> +</context> +<context> + <name>TransactionView</name> + <message> + <location filename="../transactionview.cpp" line="55"/> + <location filename="../transactionview.cpp" line="71"/> + <source>All</source> + <translation>全部</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="56"/> + <source>Today</source> + <translation>今天</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="57"/> + <source>This week</source> + <translation>本周</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="58"/> + <source>This month</source> + <translation>本月</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="59"/> + <source>Last month</source> + <translation>上月</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="60"/> + <source>This year</source> + <translation>今年</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="61"/> + <source>Range...</source> + <translation>范围...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="72"/> + <source>Received with</source> + <translation>接收于</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="74"/> + <source>Sent to</source> + <translation>发送到</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="76"/> + <source>To yourself</source> + <translation>到自己</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="77"/> + <source>Mined</source> + <translation>挖矿所得</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="78"/> + <source>Other</source> + <translation>其他</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="84"/> + <source>Enter address or label to search</source> + <translation>输入地址或标签进行搜索</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="90"/> + <source>Min amount</source> + <translation>最小金额</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="124"/> + <source>Copy address</source> + <translation>复制地址</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="125"/> + <source>Copy label</source> + <translation>复制标签</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>复制金额</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="127"/> + <source>Edit label</source> + <translation>编辑标签</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="128"/> + <source>Show details...</source> + <translation>显示细节...</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="268"/> + <source>Export Transaction Data</source> + <translation>导出交易数据</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="269"/> + <source>Comma separated file (*.csv)</source> + <translation>逗号分隔文件(*.csv)</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="277"/> + <source>Confirmed</source> + <translation>已确认</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="278"/> + <source>Date</source> + <translation>日期</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="279"/> + <source>Type</source> + <translation>类别</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="280"/> + <source>Label</source> + <translation>标签</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="281"/> + <source>Address</source> + <translation>地址</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="282"/> + <source>Amount</source> + <translation>金额</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="283"/> + <source>ID</source> + <translation>ID</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Error exporting</source> + <translation>导出错误</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="287"/> + <source>Could not write to file %1.</source> + <translation>无法写入文件 %1。</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="382"/> + <source>Range:</source> + <translation>范围:</translation> + </message> + <message> + <location filename="../transactionview.cpp" line="390"/> + <source>to</source> + <translation>到</translation> + </message> +</context> +<context> + <name>WalletModel</name> + <message> + <location filename="../walletmodel.cpp" line="145"/> + <source>Sending...</source> + <translation>发送中...</translation> + </message> +</context> +<context> + <name>bitcoin-core</name> + <message> + <location filename="../bitcoinstrings.cpp" line="3"/> + <source>Bitcoin version</source> + <translation>比特币版本</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="4"/> + <source>Usage:</source> + <translation>使用:</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="5"/> + <source>Send command to -server or bitcoind</source> + <translation>发送命令到服务器或者 bitcoind +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="6"/> + <source>List commands</source> + <translation>列出命令 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="7"/> + <source>Get help for a command</source> + <translation>获得某条命令的帮助 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="8"/> + <source>Options:</source> + <translation>选项: +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="9"/> + <source>Specify configuration file (default: bitcoin.conf)</source> + <translation>指定配置文件 (默认为 bitcoin.conf) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="10"/> + <source>Specify pid file (default: bitcoind.pid)</source> + <translation>指定 pid 文件 (默认为 bitcoind.pid) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="11"/> + <source>Generate coins</source> + <translation>生成货币 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="12"/> + <source>Don't generate coins</source> + <translation>不要生成货币 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="13"/> + <source>Start minimized</source> + <translation>启动时最小化 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="14"/> + <source>Specify data directory</source> + <translation>指定数据目录 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="15"/> + <source>Specify connection timeout (in milliseconds)</source> + <translation>指定连接超时时间 (微秒) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="16"/> + <source>Connect through socks4 proxy</source> + <translation>通过 socks4 代理连接 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="17"/> + <source>Allow DNS lookups for addnode and connect</source> + <translation>连接节点时允许DNS查找 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="18"/> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>监听端口连接 <port> (缺省: 8333 or testnet: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>最大连接数 <n> (缺省: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> + <translation>连接到指定节点</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> + <translation>只连接到指定节点 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> + <translation>禁止接收外部连接 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>不要用DNS启动</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>Threshold for disconnecting misbehaving peers (缺省: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>Number of seconds to keep misbehaving peers from reconnecting (缺省: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximum per-connection receive buffer, <n>*1000 bytes (缺省: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>Maximum per-connection send buffer, <n>*1000 bytes (缺省: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> + <translation>禁止使用 UPnP 映射监听端口 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> + <translation>尝试使用 UPnP 映射监听端口 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>为付款交易支付比特币(每kb)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> + <translation>接受命令行和 JSON-RPC 命令 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> + <translation>在后台运行并接受命令 + +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> + <translation>使用测试网络 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>输出调试信息</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>为调试输出信息添加时间戳</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>跟踪/调试信息输出到控制台,不输出到debug.log文件</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>跟踪/调试信息输出到 调试器debugger</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> + <translation>JSON-RPC连接用户名 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> + <translation>JSON-RPC连接密码 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> + <translation>JSON-RPC连接监听<端口> (默认为 8332) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> + <translation>允许从指定IP接受到的JSON-RPC连接 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> + <translation>向IP地址为 <ip> 的节点发送指令 (缺省: 127.0.0.1) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> + <translation>设置密钥池大小为 <n> (缺省: 100) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> + <translation>重新扫描数据链以查找遗漏的交易 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="47"/> + <source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> + <translation> +SSL 选项: (SSL 安装教程具体见比特币维基百科) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> + <translation>为 JSON-RPC 连接使用 OpenSSL (https)连接</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> + <translation>服务器证书 (默认为 server.cert) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> + <translation>服务器私钥 (默认为 server.pem) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> + <translation>可接受的加密器 (默认为 TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> + <translation>该帮助信息 +</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> + <translation>无法给数据目录 %s 加锁。比特币进程可能已在运行。</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>Loading addresses...</source> + <translation>正在加载地址...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>addr.dat文件加载错误</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>blkindex.dat文件加载错误</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>wallet.dat钱包文件加载错误:钱包损坏</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>wallet.dat钱包文件加载错误:请升级到最新Bitcoin客户端</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>钱包文件需要重写:请退出并重新启动Bitcoin客户端</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>wallet.dat钱包文件加载错误</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>加载区块索引...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>正在加载钱包...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> + <source>Rescanning...</source> + <translation>正在重新扫描...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="70"/> + <source>Done loading</source> + <translation>加载完成</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="71"/> + <source>Invalid -proxy address</source> + <translation>代理地址不合法</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Invalid amount for -paytxfee=<amount></source> + <translation>不合适的交易费 -paytxfee=<amount></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> + <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> + <translation>警告: -paytxfee 交易费设置过高. 每进行一笔交易您都将支付该数量的交易费.</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Error: CreateThread(StartNode) failed</source> + <translation>错误:线程创建(StartNode)失败</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> + <source>Warning: Disk space is low </source> + <translation>警告:磁盘空间不足</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="78"/> + <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> + <translation>无法绑定端口 %d 到这台计算机。比特币进程可能已在运行。</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <translation>警告:请确定您当前计算机的日期和时间是正确的。比特币将无法在错误的时间下正常工作。</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="84"/> + <source>beta</source> + <translation>测试</translation> + </message> +</context> +</TS>
\ No newline at end of file diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts index 48b5e599ba..83c3028eb9 100644 --- a/src/qt/locale/bitcoin_zh_TW.ts +++ b/src/qt/locale/bitcoin_zh_TW.ts @@ -14,20 +14,20 @@ </message> <message> <location filename="../forms/aboutdialog.ui" line="85"/> - <source>Copyright © 2009-2011 Bitcoin Developers + <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source> - <translation>版權為位元幣開發人員自公元 2009 至 2011 年起所有 + <translation>版權為 Bitcoin 開發人員自西元 2009 至 2012 年起所有 -這是個實驗性質的軟體. +這是個實驗性的軟體. -這個軟體在 MIT/X11 執照規範下發行散佈, 詳情請見附帶的 license.txt 檔案, 或網站 http://www.opensource.org/licenses/mit-license.php. +此軟體依據 MIX/X11 軟體授權條款散布, 詳情請見附帶的 license.txt 檔案, 或是以下網站: http://www.opensource.org/licenses/mit-license.php. -這個產品中包含了 OpenSSL 專案所開發的 OpenSSL Toolkit 軟體 (http://www.openssl.org/), Eric Young (eay@cryptsoft.com) 所寫的加解密軟體, 以及 Thomas Bernard 所寫的 UPnP 軟體.</translation> +此產品也包含了由 OpenSSL Project 所開發的 OpenSSL Toolkit (http://www.openssl.org/) 軟體, 由 Eric Young (eay@cryptsoft.com) 撰寫的加解密軟體, 以及由 Thomas Bernard 所撰寫的 UPnP 軟體.</translation> </message> </context> <context> @@ -69,31 +69,66 @@ This product includes software developed by the OpenSSL Project for use in the O </message> <message> <location filename="../forms/addressbookpage.ui" line="85"/> + <source>Show &QR Code</source> + <translation>顯示 &QR 條碼</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="96"/> + <source>Sign a message to prove you own this address</source> + <translation>簽署一則訊息來證明你擁有這個位址</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="99"/> + <source>&Sign Message</source> + <translation>簽署訊息</translation> + </message> + <message> + <location filename="../forms/addressbookpage.ui" line="110"/> <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source> <translation>從列表中刪除目前選取的位址. 只能夠刪除付款位址.</translation> </message> <message> - <location filename="../forms/addressbookpage.ui" line="88"/> + <location filename="../forms/addressbookpage.ui" line="113"/> <source>&Delete</source> <translation>刪除</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="204"/> + <location filename="../addressbookpage.cpp" line="61"/> + <source>Copy address</source> + <translation>複製位址</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="62"/> + <source>Copy label</source> + <translation>複製標記</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="63"/> + <source>Edit</source> + <translation>編輯</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="64"/> + <source>Delete</source> + <translation>刪除</translation> + </message> + <message> + <location filename="../addressbookpage.cpp" line="281"/> <source>Export Address Book Data</source> <translation>匯出位址簿資料</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="206"/> + <location filename="../addressbookpage.cpp" line="282"/> <source>Comma separated file (*.csv)</source> <translation>逗號區隔資料檔 (*.csv)</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Error exporting</source> <translation>資料匯出有誤</translation> </message> <message> - <location filename="../addressbookpage.cpp" line="219"/> + <location filename="../addressbookpage.cpp" line="295"/> <source>Could not write to file %1.</source> <translation>無法寫入檔案 %1.</translation> </message> @@ -125,125 +160,132 @@ This product includes software developed by the OpenSSL Project for use in the O </message> <message> <location filename="../forms/askpassphrasedialog.ui" line="32"/> + <location filename="../forms/askpassphrasedialog.ui" line="97"/> <source>TextLabel</source> <translation>文字標籤</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="47"/> + <location filename="../forms/askpassphrasedialog.ui" line="50"/> <source>Enter passphrase</source> <translation>輸入密碼</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="61"/> + <location filename="../forms/askpassphrasedialog.ui" line="64"/> <source>New passphrase</source> <translation>新的密碼</translation> </message> <message> - <location filename="../forms/askpassphrasedialog.ui" line="75"/> + <location filename="../forms/askpassphrasedialog.ui" line="78"/> <source>Repeat new passphrase</source> <translation>重複新密碼</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="26"/> + <location filename="../askpassphrasedialog.cpp" line="34"/> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>.</source> <translation>輸入錢包的新密碼.<br/>請用<b>10個以上的字元</b>, 或是<b>8個以上的字詞</b>.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="27"/> + <location filename="../askpassphrasedialog.cpp" line="35"/> <source>Encrypt wallet</source> <translation>錢包加密</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="30"/> + <location filename="../askpassphrasedialog.cpp" line="38"/> <source>This operation needs your wallet passphrase to unlock the wallet.</source> <translation>這個動作需要用你的錢包密碼來解鎖</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="35"/> + <location filename="../askpassphrasedialog.cpp" line="43"/> <source>Unlock wallet</source> <translation>錢包解鎖</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="38"/> + <location filename="../askpassphrasedialog.cpp" line="46"/> <source>This operation needs your wallet passphrase to decrypt the wallet.</source> <translation>這個動作需要用你的錢包密碼來解密</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="43"/> + <location filename="../askpassphrasedialog.cpp" line="51"/> <source>Decrypt wallet</source> <translation>錢包解密</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="46"/> + <location filename="../askpassphrasedialog.cpp" line="54"/> <source>Change passphrase</source> <translation>變更密碼</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="47"/> + <location filename="../askpassphrasedialog.cpp" line="55"/> <source>Enter the old and new passphrase to the wallet.</source> <translation>輸入錢包的新舊密碼.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="91"/> + <location filename="../askpassphrasedialog.cpp" line="101"/> <source>Confirm wallet encryption</source> <translation>錢包加密確認</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="92"/> + <location filename="../askpassphrasedialog.cpp" line="102"/> <source>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?</source> <translation>警告: 如果將錢包加密後忘記密碼, 你會<b>失去其中所有的位元幣</b>! 你確定要將錢包加密嗎?</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="101"/> - <location filename="../askpassphrasedialog.cpp" line="149"/> + <location filename="../askpassphrasedialog.cpp" line="111"/> + <location filename="../askpassphrasedialog.cpp" line="160"/> <source>Wallet encrypted</source> <translation>錢包已加密</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="102"/> - <source>Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>請記得, 即使將錢包加密, 也不能完全防止因惡意軟體入侵, 而導致位元幣被偷.</translation> + <location filename="../askpassphrasedialog.cpp" line="112"/> + <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>位元幣現在要關閉以完成加密程序. 請記住, 加密錢包無法完全防止入侵電腦的惡意程式偷取你的位元幣.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="106"/> - <location filename="../askpassphrasedialog.cpp" line="113"/> - <location filename="../askpassphrasedialog.cpp" line="155"/> - <location filename="../askpassphrasedialog.cpp" line="161"/> + <location filename="../askpassphrasedialog.cpp" line="208"/> + <location filename="../askpassphrasedialog.cpp" line="232"/> + <source>Warning: The Caps Lock key is on.</source> + <translation>警告: 鍵盤輸入鎖定為大寫字母中.</translation> + </message> + <message> + <location filename="../askpassphrasedialog.cpp" line="117"/> + <location filename="../askpassphrasedialog.cpp" line="124"/> + <location filename="../askpassphrasedialog.cpp" line="166"/> + <location filename="../askpassphrasedialog.cpp" line="172"/> <source>Wallet encryption failed</source> <translation>錢包加密失敗</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="107"/> + <location filename="../askpassphrasedialog.cpp" line="118"/> <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <translation>錢包加密因程式內部有誤而失敗. 你的錢包還是沒有加密.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="114"/> - <location filename="../askpassphrasedialog.cpp" line="162"/> + <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="173"/> <source>The supplied passphrases do not match.</source> <translation>提供的密碼不符.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="125"/> + <location filename="../askpassphrasedialog.cpp" line="136"/> <source>Wallet unlock failed</source> <translation>錢包解鎖失敗</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="126"/> <location filename="../askpassphrasedialog.cpp" line="137"/> - <location filename="../askpassphrasedialog.cpp" line="156"/> + <location filename="../askpassphrasedialog.cpp" line="148"/> + <location filename="../askpassphrasedialog.cpp" line="167"/> <source>The passphrase entered for the wallet decryption was incorrect.</source> <translation>用來解密錢包的密碼輸入錯誤.</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="136"/> + <location filename="../askpassphrasedialog.cpp" line="147"/> <source>Wallet decryption failed</source> <translation>錢包解密失敗</translation> </message> <message> - <location filename="../askpassphrasedialog.cpp" line="150"/> + <location filename="../askpassphrasedialog.cpp" line="161"/> <source>Wallet passphrase was succesfully changed.</source> <translation>錢包密碼變更成功.</translation> </message> @@ -251,247 +293,278 @@ Are you sure you wish to encrypt your wallet?</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="63"/> + <location filename="../bitcoingui.cpp" line="69"/> <source>Bitcoin Wallet</source> <translation>位元幣錢包</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="132"/> + <location filename="../bitcoingui.cpp" line="142"/> + <location filename="../bitcoingui.cpp" line="464"/> <source>Synchronizing with network...</source> <translation>網路同步中...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="135"/> + <location filename="../bitcoingui.cpp" line="145"/> <source>Block chain synchronization in progress</source> <translation>正在進行區塊鎖鏈的同步中</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="164"/> + <location filename="../bitcoingui.cpp" line="176"/> <source>&Overview</source> <translation>總覽</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="165"/> + <location filename="../bitcoingui.cpp" line="177"/> <source>Show general overview of wallet</source> <translation>顯示錢包一般總覽</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="170"/> + <location filename="../bitcoingui.cpp" line="182"/> <source>&Transactions</source> <translation>交易</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="171"/> + <location filename="../bitcoingui.cpp" line="183"/> <source>Browse transaction history</source> <translation>瀏覽交易紀錄</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="188"/> <source>&Address Book</source> <translation>位址簿</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="189"/> <source>Edit the list of stored addresses and labels</source> <translation>編輯儲存位址與標記的列表</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="194"/> <source>&Receive coins</source> <translation>收錢</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="195"/> <source>Show the list of addresses for receiving payments</source> <translation>顯示收款位址的列表</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="200"/> <source>&Send coins</source> <translation>付錢</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="201"/> <source>Send coins to a bitcoin address</source> <translation>付錢至某個位元幣位址</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="206"/> + <source>Sign &message</source> + <translation>訊息簽署</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="207"/> + <source>Prove you control an address</source> + <translation>證明你控制一個位址</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="226"/> <source>E&xit</source> - <translation type="unfinished"/> + <translation>結束</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="227"/> <source>Quit application</source> <translation>結束應用程式</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="204"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>&About %1</source> - <translation type="unfinished"/> + <translation>關於%1</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="205"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Show information about Bitcoin</source> <translation>顯示位元幣相關資訊</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="233"/> + <source>About &Qt</source> + <translation>關於 &Qt</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="234"/> + <source>Show information about Qt</source> + <translation>顯示有關於 Qt 的資訊</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="236"/> <source>&Options...</source> <translation>選項...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="208"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>Modify configuration options for bitcoin</source> <translation>修改位元幣的設定選項</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="210"/> + <location filename="../bitcoingui.cpp" line="239"/> <source>Open &Bitcoin</source> <translation>開啟位元幣</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="211"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>Show the Bitcoin window</source> <translation>顯示位元幣主視窗</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="212"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>&Export...</source> <translation>匯出...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="213"/> - <source>Export the current view to a file</source> - <translation>將目前版面匯出至檔案</translation> + <location filename="../bitcoingui.cpp" line="242"/> + <source>Export the data in the current tab to a file</source> + <translation>將目前分頁的資料匯出存成檔案</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="214"/> + <location filename="../bitcoingui.cpp" line="243"/> <source>&Encrypt Wallet</source> <translation>錢包加密</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="215"/> + <location filename="../bitcoingui.cpp" line="244"/> <source>Encrypt or decrypt wallet</source> <translation>將錢包加解密</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="217"/> + <location filename="../bitcoingui.cpp" line="246"/> + <source>&Backup Wallet</source> + <translation>錢包備份</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="247"/> + <source>Backup wallet to another location</source> + <translation>將錢包備份到其它地方</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="248"/> <source>&Change Passphrase</source> <translation>變更密碼</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="218"/> + <location filename="../bitcoingui.cpp" line="249"/> <source>Change the passphrase used for wallet encryption</source> <translation>變更錢包加密用的密碼</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> + <location filename="../bitcoingui.cpp" line="272"/> <source>&File</source> <translation>檔案</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="281"/> <source>&Settings</source> <translation>設定</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="287"/> <source>&Help</source> <translation>求助</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="254"/> + <location filename="../bitcoingui.cpp" line="294"/> <source>Tabs toolbar</source> <translation>分頁工具列</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="262"/> + <location filename="../bitcoingui.cpp" line="305"/> <source>Actions toolbar</source> <translation>動作工具列</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="273"/> + <location filename="../bitcoingui.cpp" line="317"/> <source>[testnet]</source> <translation>[testnet]</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="355"/> + <location filename="../bitcoingui.cpp" line="407"/> <source>bitcoin-qt</source> <translation>bitcoin-qt</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="396"/> + <location filename="../bitcoingui.cpp" line="449"/> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>與位元幣網路有 %n 個連線在使用中</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="411"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>Downloaded %1 of %2 blocks of transaction history.</source> <translation>已下載了 %1/%2 個交易紀錄的區塊.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="417"/> + <location filename="../bitcoingui.cpp" line="487"/> <source>Downloaded %1 blocks of transaction history.</source> <translation>已下載了 %1 個交易紀錄的區塊.</translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="428"/> + <location filename="../bitcoingui.cpp" line="502"/> <source>%n second(s) ago</source> <translation><numerusform>%n 秒鐘前</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="432"/> + <location filename="../bitcoingui.cpp" line="506"/> <source>%n minute(s) ago</source> <translation><numerusform>%n 分鐘前</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="436"/> + <location filename="../bitcoingui.cpp" line="510"/> <source>%n hour(s) ago</source> <translation><numerusform>%n 小時前</numerusform></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="440"/> + <location filename="../bitcoingui.cpp" line="514"/> <source>%n day(s) ago</source> <translation><numerusform>%n 天前</numerusform></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="446"/> + <location filename="../bitcoingui.cpp" line="520"/> <source>Up to date</source> <translation>最新狀態</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="451"/> + <location filename="../bitcoingui.cpp" line="525"/> <source>Catching up...</source> <translation>進度追趕中...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="457"/> + <location filename="../bitcoingui.cpp" line="533"/> <source>Last received block was generated %1.</source> <translation>最近收到的區塊產生於 %1.</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="508"/> + <location filename="../bitcoingui.cpp" line="597"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>這筆交易的資料大小超過限制了. 你還是可以付出 %1 元的費用來傳送. 這項費用會付給處理該筆交易的節點, 並幫助維持整個網路. 你願意支付這項費用嗎?</translation> + <translation>這筆交易的資料大小超過限制了. 你還是可以付出 %1 的費用來傳送. 這筆費用會付給處理該筆交易的節點, 並幫助維持整個網路. 你願意支付這項費用嗎?</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="513"/> + <location filename="../bitcoingui.cpp" line="602"/> <source>Sending...</source> <translation>付出中...</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="538"/> + <location filename="../bitcoingui.cpp" line="629"/> <source>Sent transaction</source> <translation>付款交易</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="539"/> + <location filename="../bitcoingui.cpp" line="630"/> <source>Incoming transaction</source> <translation>收款交易</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="540"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Date: %1 Amount: %2 Type: %3 @@ -503,15 +576,35 @@ Address: %4 位址: %4</translation> </message> <message> - <location filename="../bitcoingui.cpp" line="639"/> + <location filename="../bitcoingui.cpp" line="751"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation>錢包<b>已加密</b>並且正<b>解鎖中</b></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="647"/> + <location filename="../bitcoingui.cpp" line="759"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation>錢包<b>已加密</b>並且正<b>上鎖中</b></translation> </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Backup Wallet</source> + <translation>錢包備份</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="782"/> + <source>Wallet Data (*.dat)</source> + <translation>錢包資料檔 (*.dat)</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>Backup Failed</source> + <translation>備份失敗</translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="785"/> + <source>There was an error trying to save the wallet data to the new location.</source> + <translation>儲存錢包資料到新的地方時發生錯誤</translation> + </message> </context> <context> <name>DisplayOptionsPage</name> @@ -579,22 +672,22 @@ Address: %4 <translation>編輯付款位址</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="87"/> + <location filename="../editaddressdialog.cpp" line="91"/> <source>The entered address "%1" is already in the address book.</source> <translation>輸入的位址"%1"已存在於位址簿中.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="92"/> + <location filename="../editaddressdialog.cpp" line="96"/> <source>The entered address "%1" is not a valid bitcoin address.</source> <translation>輸入的位址"%1"並非有效的位元幣位址</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="97"/> + <location filename="../editaddressdialog.cpp" line="101"/> <source>Could not unlock wallet.</source> <translation>無法將錢包解鎖.</translation> </message> <message> - <location filename="../editaddressdialog.cpp" line="102"/> + <location filename="../editaddressdialog.cpp" line="106"/> <source>New key generation failed.</source> <translation>新密鑰產生失敗.</translation> </message> @@ -673,8 +766,8 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="217"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>非必要的交易手續費, 有助於縮短你的交易處理時間. 以 KB 為計費單位, 而大部份交易的大小是 1KB. 建議設定為 0.01 位元幣.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>非必要的交易手續費, 以 kB 為計費單位, 且有助於縮短你的交易處理時間. 大部份交易的資料大小是 1 kB. 建議設定為 0.01 元.</translation> </message> <message> <location filename="../optionsdialog.cpp" line="223"/> @@ -683,8 +776,98 @@ Address: %4 </message> <message> <location filename="../optionsdialog.cpp" line="226"/> - <source>Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.</source> - <translation>非必要的交易手續費, 有助於縮短你的交易處理時間. 以 KB 為計費單位, 而大部份交易的大小是 1KB. 建議設定為 0.01 位元幣.</translation> + <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> + <translation>非必要的交易手續費, 以 kB 為計費單位, 且有助於縮短你的交易處理時間. 大部份交易的資料大小是 1 kB. 建議設定為 0.01 元.</translation> + </message> +</context> +<context> + <name>MessagePage</name> + <message> + <location filename="../forms/messagepage.ui" line="14"/> + <source>Message</source> + <translation>訊息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="20"/> + <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>你可以用你的位址來簽署訊息, 以證明你對它的所有權. 但是請小心, 不要簽署語意含糊不清的內容, 因為釣魚式詐騙可能會用騙你簽署的手法來冒充是你. 只有在語句中的細節你都同意時才簽署.</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="38"/> + <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <translation>付款的目標位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="48"/> + <source>Choose adress from address book</source> + <translation>從位址簿中選一個位址</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="58"/> + <source>Alt+A</source> + <translation>Alt+A</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="71"/> + <source>Paste address from clipboard</source> + <translation>從剪貼簿貼上位址</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="81"/> + <source>Alt+P</source> + <translation>Alt+P</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="93"/> + <source>Enter the message you want to sign here</source> + <translation>在這裡輸入你想簽署的訊息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="105"/> + <source>Click "Sign Message" to get signature</source> + <translation>按"簽署訊息"來取得簽章</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="117"/> + <source>Sign a message to prove you own this address</source> + <translation>簽署一則訊息來證明你擁有這個位址</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="120"/> + <source>&Sign Message</source> + <translation>簽署訊息</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="131"/> + <source>Copy the currently selected address to the system clipboard</source> + <translation>複製目前選取的位址到系統剪貼簿</translation> + </message> + <message> + <location filename="../forms/messagepage.ui" line="134"/> + <source>&Copy to Clipboard</source> + <translation>複製到剪貼簿</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <location filename="../messagepage.cpp" line="89"/> + <location filename="../messagepage.cpp" line="101"/> + <source>Error signing</source> + <translation>簽署發生錯誤</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="74"/> + <source>%1 is not a valid address.</source> + <translation>%1 不是個有效的位址.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="89"/> + <source>Private key for %1 is not available.</source> + <translation>沒有 %1 的密鑰.</translation> + </message> + <message> + <location filename="../messagepage.cpp" line="101"/> + <source>Sign failed</source> + <translation>簽署失敗</translation> </message> </context> <context> @@ -720,7 +903,7 @@ Address: %4 <message> <location filename="../forms/overviewpage.ui" line="47"/> <source>123.456 BTC</source> - <translation>123.456 位元幣</translation> + <translation>123.456 BTC</translation> </message> <message> <location filename="../forms/overviewpage.ui" line="54"/> @@ -740,7 +923,7 @@ Address: %4 <message> <location filename="../forms/overviewpage.ui" line="75"/> <source>0 BTC</source> - <translation>0 位元幣</translation> + <translation>0 BTC</translation> </message> <message> <location filename="../forms/overviewpage.ui" line="82"/> @@ -752,7 +935,7 @@ p, li { white-space: pre-wrap; } <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">錢包</span></p></body></html></translation> </message> <message> @@ -777,16 +960,69 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>QRCodeDialog</name> + <message> + <location filename="../forms/qrcodedialog.ui" line="14"/> + <source>Dialog</source> + <translation>對話視窗</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="32"/> + <source>QR Code</source> + <translation>QR 條碼</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="52"/> + <source>Request Payment</source> + <translation>付款單</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="67"/> + <source>Amount:</source> + <translation>金額:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="102"/> + <source>BTC</source> + <translation>BTC</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="118"/> + <source>Label:</source> + <translation>標記:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="141"/> + <source>Message:</source> + <translation>訊息:</translation> + </message> + <message> + <location filename="../forms/qrcodedialog.ui" line="183"/> + <source>&Save As...</source> + <translation>儲存為...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>Save Image...</source> + <translation>儲存圖片...</translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="101"/> + <source>PNG Images (*.png)</source> + <translation>PNG 圖檔 (*.png)</translation> + </message> +</context> +<context> <name>SendCoinsDialog</name> <message> <location filename="../forms/sendcoinsdialog.ui" line="14"/> - <location filename="../sendcoinsdialog.cpp" line="109"/> - <location filename="../sendcoinsdialog.cpp" line="114"/> - <location filename="../sendcoinsdialog.cpp" line="119"/> - <location filename="../sendcoinsdialog.cpp" line="124"/> - <location filename="../sendcoinsdialog.cpp" line="130"/> - <location filename="../sendcoinsdialog.cpp" line="135"/> - <location filename="../sendcoinsdialog.cpp" line="140"/> + <location filename="../sendcoinsdialog.cpp" line="122"/> + <location filename="../sendcoinsdialog.cpp" line="127"/> + <location filename="../sendcoinsdialog.cpp" line="132"/> + <location filename="../sendcoinsdialog.cpp" line="137"/> + <location filename="../sendcoinsdialog.cpp" line="143"/> + <location filename="../sendcoinsdialog.cpp" line="148"/> + <location filename="../sendcoinsdialog.cpp" line="153"/> <source>Send Coins</source> <translation>付錢</translation> </message> @@ -802,81 +1038,86 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsdialog.ui" line="84"/> + <source>Remove all transaction fields</source> + <translation>移除所有交易欄位</translation> + </message> + <message> + <location filename="../forms/sendcoinsdialog.ui" line="87"/> <source>Clear all</source> <translation>全部清掉</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="103"/> + <location filename="../forms/sendcoinsdialog.ui" line="106"/> <source>Balance:</source> <translation>餘額:</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="110"/> + <location filename="../forms/sendcoinsdialog.ui" line="113"/> <source>123.456 BTC</source> - <translation>123.456 位元幣</translation> + <translation>123.456 BTC</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="141"/> + <location filename="../forms/sendcoinsdialog.ui" line="144"/> <source>Confirm the send action</source> <translation>確認付款動作</translation> </message> <message> - <location filename="../forms/sendcoinsdialog.ui" line="144"/> + <location filename="../forms/sendcoinsdialog.ui" line="147"/> <source>&Send</source> <translation>付出</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="85"/> + <location filename="../sendcoinsdialog.cpp" line="94"/> <source><b>%1</b> to %2 (%3)</source> - <translation><b>%1</b> 元給 %2 (%3)</translation> + <translation><b>%1</b> 給 %2 (%3)</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="88"/> + <location filename="../sendcoinsdialog.cpp" line="99"/> <source>Confirm send coins</source> <translation>確認付出金額</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source>Are you sure you want to send %1?</source> - <translation>確定要付出 %1 元嗎?</translation> + <translation>確定要付出 %1 嗎?</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="89"/> + <location filename="../sendcoinsdialog.cpp" line="100"/> <source> and </source> <translation>和</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="110"/> + <location filename="../sendcoinsdialog.cpp" line="123"/> <source>The recepient address is not valid, please recheck.</source> <translation>無效的收款位址, 請再檢查看看.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="115"/> + <location filename="../sendcoinsdialog.cpp" line="128"/> <source>The amount to pay must be larger than 0.</source> <translation>付款金額必須大於 0.</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="120"/> + <location filename="../sendcoinsdialog.cpp" line="133"/> <source>Amount exceeds your balance</source> <translation>金額超過了你的餘額</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="125"/> + <location filename="../sendcoinsdialog.cpp" line="138"/> <source>Total exceeds your balance when the %1 transaction fee is included</source> - <translation>加上交易手續費 %1 元後的總金額超過了你的餘額</translation> + <translation>加上交易手續費 %1 後的總金額超過了你的餘額</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="131"/> + <location filename="../sendcoinsdialog.cpp" line="144"/> <source>Duplicate address found, can only send to each address once in one send operation</source> - <translation>發現了重複的位址; 在一次付款作業中, 一個位址只能付給它一次</translation> + <translation>發現了重複的位址; 在一次付款作業中, 只能付給每個位址一次</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="136"/> + <location filename="../sendcoinsdialog.cpp" line="149"/> <source>Error: Transaction creation failed </source> <translation>錯誤: 交易產生失敗</translation> </message> <message> - <location filename="../sendcoinsdialog.cpp" line="141"/> + <location filename="../sendcoinsdialog.cpp" line="154"/> <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> <translation>錯誤: 交易被拒絕. 有時候會發生這種錯誤, 是因為你錢包中的一些錢已經被花掉了. 比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢, 你現在所用的原來的錢包中卻沒有該筆交易紀錄.</translation> </message> @@ -916,7 +1157,7 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../forms/sendcoinsentry.ui" line="103"/> - <source>Choose adress from address book</source> + <source>Choose address from address book</source> <translation>從位址簿中選一個位址</translation> </message> <message> @@ -948,135 +1189,140 @@ p, li { white-space: pre-wrap; } <context> <name>TransactionDesc</name> <message> - <location filename="../transactiondesc.cpp" line="34"/> + <location filename="../transactiondesc.cpp" line="18"/> <source>Open for %1 blocks</source> <translation>在 %1 個區塊內未定</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="36"/> + <location filename="../transactiondesc.cpp" line="20"/> <source>Open until %1</source> <translation>在 %1 前未定</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="42"/> + <location filename="../transactiondesc.cpp" line="26"/> <source>%1/offline?</source> <translation>%1/離線中?</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="44"/> + <location filename="../transactiondesc.cpp" line="28"/> <source>%1/unconfirmed</source> <translation>%1/未確認</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="46"/> + <location filename="../transactiondesc.cpp" line="30"/> <source>%1 confirmations</source> <translation>經確認 %1 次</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="63"/> + <location filename="../transactiondesc.cpp" line="47"/> <source><b>Status:</b> </source> <translation><b>狀態:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="68"/> + <location filename="../transactiondesc.cpp" line="52"/> <source>, has not been successfully broadcast yet</source> <translation>, 尚未成功公告出去</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="70"/> + <location filename="../transactiondesc.cpp" line="54"/> <source>, broadcast through %1 node</source> <translation>, 已公告至 %1 個節點</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="72"/> + <location filename="../transactiondesc.cpp" line="56"/> <source>, broadcast through %1 nodes</source> <translation>, 已公告至 %1 個節點</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="76"/> + <location filename="../transactiondesc.cpp" line="60"/> <source><b>Date:</b> </source> <translation><b>日期:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="83"/> + <location filename="../transactiondesc.cpp" line="67"/> <source><b>Source:</b> Generated<br></source> <translation><b>來源:</b> 生產所得<br></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="89"/> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="73"/> + <location filename="../transactiondesc.cpp" line="90"/> <source><b>From:</b> </source> <translation><b>來自:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="106"/> + <location filename="../transactiondesc.cpp" line="90"/> <source>unknown</source> <translation>未知</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="107"/> - <location filename="../transactiondesc.cpp" line="130"/> - <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="91"/> + <location filename="../transactiondesc.cpp" line="114"/> + <location filename="../transactiondesc.cpp" line="173"/> <source><b>To:</b> </source> <translation><b>目的:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="110"/> + <location filename="../transactiondesc.cpp" line="94"/> <source> (yours, label: </source> <translation> (你的, 標記為: </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="112"/> + <location filename="../transactiondesc.cpp" line="96"/> <source> (yours)</source> <translation> (你的)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="147"/> - <location filename="../transactiondesc.cpp" line="161"/> - <location filename="../transactiondesc.cpp" line="206"/> - <location filename="../transactiondesc.cpp" line="223"/> + <location filename="../transactiondesc.cpp" line="131"/> + <location filename="../transactiondesc.cpp" line="145"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="207"/> <source><b>Credit:</b> </source> <translation><b>入帳:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="149"/> + <location filename="../transactiondesc.cpp" line="133"/> <source>(%1 matures in %2 more blocks)</source> - <translation>(%1 元將在 %2 個區塊產出後熟成)</translation> + <translation>(%1 將在 %2 個區塊產出後熟成)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="153"/> + <location filename="../transactiondesc.cpp" line="137"/> <source>(not accepted)</source> <translation>(不被接受)</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="197"/> - <location filename="../transactiondesc.cpp" line="205"/> - <location filename="../transactiondesc.cpp" line="220"/> + <location filename="../transactiondesc.cpp" line="181"/> + <location filename="../transactiondesc.cpp" line="189"/> + <location filename="../transactiondesc.cpp" line="204"/> <source><b>Debit:</b> </source> <translation><b>出帳:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="195"/> <source><b>Transaction fee:</b> </source> <translation><b>交易手續費:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="227"/> + <location filename="../transactiondesc.cpp" line="211"/> <source><b>Net amount:</b> </source> <translation><b>淨額:</b> </translation> </message> <message> - <location filename="../transactiondesc.cpp" line="233"/> + <location filename="../transactiondesc.cpp" line="217"/> <source>Message:</source> <translation>訊息:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="235"/> + <location filename="../transactiondesc.cpp" line="219"/> <source>Comment:</source> <translation>附註:</translation> </message> <message> - <location filename="../transactiondesc.cpp" line="238"/> + <location filename="../transactiondesc.cpp" line="221"/> + <source>Transaction ID:</source> + <translation>交易識別碼:</translation> + </message> + <message> + <location filename="../transactiondesc.cpp" line="224"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation>生產出來的錢要再等 120 個區塊產出之後, 才能夠花用. 當你產出區塊時, 它會被公布到網路上, 以被串連至區塊鎖鏈. 如果串連失敗了, 它的狀態就會變成"不被接受", 且不能被花用. 當你產出區塊的幾秒鐘內, 其他節點也產出了區塊的話, 有時候就會發生這種情形.</translation> </message> @@ -1163,56 +1409,51 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../transactiontablemodel.cpp" line="349"/> - <source>Received from IP</source> - <translation>收受於網路位址</translation> + <source>Received from</source> + <translation>收受自</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="351"/> + <location filename="../transactiontablemodel.cpp" line="352"/> <source>Sent to</source> <translation>付出至</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="353"/> - <source>Sent to IP</source> - <translation>付出至網路位址</translation> - </message> - <message> - <location filename="../transactiontablemodel.cpp" line="355"/> + <location filename="../transactiontablemodel.cpp" line="354"/> <source>Payment to yourself</source> <translation>付給自己</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="357"/> + <location filename="../transactiontablemodel.cpp" line="356"/> <source>Mined</source> <translation>開採所得</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="395"/> + <location filename="../transactiontablemodel.cpp" line="394"/> <source>(n/a)</source> <translation>(不適用)</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="594"/> + <location filename="../transactiontablemodel.cpp" line="593"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation>交易狀態. 移動游標至欄位上方來顯示確認次數.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="596"/> + <location filename="../transactiontablemodel.cpp" line="595"/> <source>Date and time that the transaction was received.</source> <translation>收到交易的日期與時間.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="598"/> + <location filename="../transactiontablemodel.cpp" line="597"/> <source>Type of transaction.</source> <translation>交易的種類.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="600"/> + <location filename="../transactiontablemodel.cpp" line="599"/> <source>Destination address of transaction.</source> <translation>交易的目標位址.</translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="602"/> + <location filename="../transactiontablemodel.cpp" line="601"/> <source>Amount removed from or added to balance.</source> <translation>減去或加入至餘額的金額</translation> </message> @@ -1291,16 +1532,21 @@ p, li { white-space: pre-wrap; } <translation>最小金額</translation> </message> <message> - <location filename="../transactionview.cpp" line="125"/> + <location filename="../transactionview.cpp" line="124"/> <source>Copy address</source> <translation>複製位址</translation> </message> <message> - <location filename="../transactionview.cpp" line="126"/> + <location filename="../transactionview.cpp" line="125"/> <source>Copy label</source> <translation>複製標記</translation> </message> <message> + <location filename="../transactionview.cpp" line="126"/> + <source>Copy amount</source> + <translation>複製金額</translation> + </message> + <message> <location filename="../transactionview.cpp" line="127"/> <source>Edit label</source> <translation>編輯標記</translation> @@ -1311,67 +1557,67 @@ p, li { white-space: pre-wrap; } <translation>顯示明細...</translation> </message> <message> - <location filename="../transactionview.cpp" line="261"/> + <location filename="../transactionview.cpp" line="268"/> <source>Export Transaction Data</source> <translation>匯出交易資料</translation> </message> <message> - <location filename="../transactionview.cpp" line="263"/> + <location filename="../transactionview.cpp" line="269"/> <source>Comma separated file (*.csv)</source> <translation>逗號分隔資料檔 (*.csv)</translation> </message> <message> - <location filename="../transactionview.cpp" line="271"/> + <location filename="../transactionview.cpp" line="277"/> <source>Confirmed</source> <translation>已確認</translation> </message> <message> - <location filename="../transactionview.cpp" line="272"/> + <location filename="../transactionview.cpp" line="278"/> <source>Date</source> <translation>日期</translation> </message> <message> - <location filename="../transactionview.cpp" line="273"/> + <location filename="../transactionview.cpp" line="279"/> <source>Type</source> <translation>種類</translation> </message> <message> - <location filename="../transactionview.cpp" line="274"/> + <location filename="../transactionview.cpp" line="280"/> <source>Label</source> <translation>標記</translation> </message> <message> - <location filename="../transactionview.cpp" line="275"/> + <location filename="../transactionview.cpp" line="281"/> <source>Address</source> <translation>位址</translation> </message> <message> - <location filename="../transactionview.cpp" line="276"/> + <location filename="../transactionview.cpp" line="282"/> <source>Amount</source> <translation>金額</translation> </message> <message> - <location filename="../transactionview.cpp" line="277"/> + <location filename="../transactionview.cpp" line="283"/> <source>ID</source> <translation>識別碼</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Error exporting</source> <translation>匯出錯誤</translation> </message> <message> - <location filename="../transactionview.cpp" line="281"/> + <location filename="../transactionview.cpp" line="287"/> <source>Could not write to file %1.</source> <translation>無法寫入至 %1 檔案.</translation> </message> <message> - <location filename="../transactionview.cpp" line="369"/> + <location filename="../transactionview.cpp" line="382"/> <source>Range:</source> <translation>範圍:</translation> </message> <message> - <location filename="../transactionview.cpp" line="377"/> + <location filename="../transactionview.cpp" line="390"/> <source>to</source> <translation>至</translation> </message> @@ -1379,7 +1625,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="144"/> + <location filename="../walletmodel.cpp" line="145"/> <source>Sending...</source> <translation>付出中...</translation> </message> @@ -1398,936 +1644,363 @@ p, li { white-space: pre-wrap; } </message> <message> <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind -</source> + <source>Send command to -server or bitcoind</source> <translation>送指令至 -server 或 bitcoind </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands -</source> + <source>List commands</source> <translation>列出指令 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command -</source> + <source>Get help for a command</source> <translation>取得指令說明 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options: -</source> + <source>Options:</source> <translation>選項: </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf) -</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation>指定設定檔 (預設: bitcoin.conf) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid) -</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation>指定行程識別碼檔案 (預設: bitcoind.pid) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins -</source> + <source>Generate coins</source> <translation>生產位元幣 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins -</source> + <source>Don't generate coins</source> <translation>不生產位元幣 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized -</source> + <source>Start minimized</source> <translation>啓動時最小化 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory -</source> + <source>Specify data directory</source> <translation>指定資料目錄 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds) -</source> + <source>Specify connection timeout (in milliseconds)</source> <translation>指定連線逾時時間 (毫秒) </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy -</source> + <source>Connect through socks4 proxy</source> <translation>透過 socks4 代理伺服器連線 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect -</source> + <source>Allow DNS lookups for addnode and connect</source> <translation>允許 addnode 和 connect 時做域名解析 </translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Add a node to connect to -</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation>在通訊埠 <port> 聽候連線 (預設: 8333, 或若為測試網路: 18333)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="19"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> + <translation>維持與節點連線數的上限為 <n> 個 (預設: 125)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="20"/> + <source>Add a node to connect to</source> <translation>新增連線節點 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Connect only to the specified node -</source> + <location filename="../bitcoinstrings.cpp" line="21"/> + <source>Connect only to the specified node</source> <translation>只連線至指定節點 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Don't accept connections from outside -</source> + <location filename="../bitcoinstrings.cpp" line="22"/> + <source>Don't accept connections from outside</source> <translation>不接受外來連線 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Don't attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="23"/> + <source>Don't bootstrap list of peers using DNS</source> + <translation>初始化節點列表時不使用 DNS</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="24"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <translation>與亂搞的節點斷線的臨界值 (預設: 100)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="25"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <translation>避免與亂搞的節點連線的秒數 (預設: 86400)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="28"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <translation>每個連線的接收緩衝區大小上限為 <n>*1000 位元組 (預設: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <translation>每個連線的傳送緩衝區大小上限為 <n>*1000 位元組 (預設: 10000)</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Don't attempt to use UPnP to map the listening port</source> <translation>不嘗試用 UPnP 來設定服務連接埠的對應 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Attempt to use UPnP to map the listening port -</source> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Attempt to use UPnP to map the listening port</source> <translation>嘗試用 UPnP 來設定服務連接埠的對應 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Fee per KB to add to transactions you send -</source> - <translation>交易付款時每 KB 的交易手續費 -</translation> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Fee per kB to add to transactions you send</source> + <translation>交易付款時每 kB 的交易手續費</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Accept command line and JSON-RPC commands -</source> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Accept command line and JSON-RPC commands</source> <translation>接受命令列與 JSON-RPC 指令 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Run in the background as a daemon and accept commands -</source> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Run in the background as a daemon and accept commands</source> <translation>以背景程式執行並接受指令</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="26"/> - <source>Use the test network -</source> + <location filename="../bitcoinstrings.cpp" line="35"/> + <source>Use the test network</source> <translation>使用測試網路 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="27"/> - <source>Username for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="36"/> + <source>Output extra debugging information</source> + <translation>輸出額外的除錯資訊</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Prepend debug output with timestamp</source> + <translation>在除錯輸出內容前附加時間</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Send trace/debug info to console instead of debug.log file</source> + <translation>輸出追蹤或除錯資訊至終端機, 而非 debug.log 檔案</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Send trace/debug info to debugger</source> + <translation>輸出追蹤或除錯資訊給除錯器</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Username for JSON-RPC connections</source> <translation>JSON-RPC 連線使用者名稱</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Password for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Password for JSON-RPC connections</source> <translation>JSON-RPC 連線密碼</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Listen for JSON-RPC connections on <port> (default: 8332) -</source> + <location filename="../bitcoinstrings.cpp" line="42"/> + <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation>在通訊埠 <port> 聽候 JSON-RPC 連線 (預設: 8332)</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Allow JSON-RPC connections from specified IP address -</source> + <location filename="../bitcoinstrings.cpp" line="43"/> + <source>Allow JSON-RPC connections from specified IP address</source> <translation>只允許從指定網路位址來的 JSON-RPC 連線</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Send commands to node running on <ip> (default: 127.0.0.1) -</source> + <location filename="../bitcoinstrings.cpp" line="44"/> + <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation>送指令給在 <ip> 的節點 (預設: 127.0.0.1) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Set key pool size to <n> (default: 100) -</source> + <location filename="../bitcoinstrings.cpp" line="45"/> + <source>Set key pool size to <n> (default: 100)</source> <translation>設定密鑰池大小為 <n> (預設: 100) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> - <source>Rescan the block chain for missing wallet transactions -</source> + <location filename="../bitcoinstrings.cpp" line="46"/> + <source>Rescan the block chain for missing wallet transactions</source> <translation>重新掃描區塊鎖鏈, 以尋找錢包所遺漏的交易.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source> -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -</source> +SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation> SSL 選項: (SSL 設定程序請見 Bitcoin Wiki) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> - <source>Use OpenSSL (https) for JSON-RPC connections -</source> + <location filename="../bitcoinstrings.cpp" line="50"/> + <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation>使用 OpenSSL (https) 於JSON-RPC 連線 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> - <source>Server certificate file (default: server.cert) -</source> + <location filename="../bitcoinstrings.cpp" line="51"/> + <source>Server certificate file (default: server.cert)</source> <translation>伺服器憑證檔 (預設: server.cert) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> - <source>Server private key (default: server.pem) -</source> + <location filename="../bitcoinstrings.cpp" line="52"/> + <source>Server private key (default: server.pem)</source> <translation>伺服器密鑰檔 (預設: server.pem) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> - <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -</source> + <location filename="../bitcoinstrings.cpp" line="53"/> + <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation>可以接受的加密法 (預設: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> - <source>This help message -</source> + <location filename="../bitcoinstrings.cpp" line="56"/> + <source>This help message</source> <translation>此協助訊息 </translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="57"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation>無法鎖定資料目錄 %s. 也許位元幣已經在執行了.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> <source>Loading addresses...</source> <translation>載入位址中...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="48"/> - <source>Error loading addr.dat -</source> - <translation>載入 addr.dat 錯誤 -</translation> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>Error loading addr.dat</source> + <translation>載入 addr.dat 失敗</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="49"/> - <source>Loading block index...</source> - <translation>載入區塊索引中...</translation> + <location filename="../bitcoinstrings.cpp" line="63"/> + <source>Error loading blkindex.dat</source> + <translation>載入 blkindex.dat 失敗</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> - <source>Error loading blkindex.dat -</source> - <translation>載入 blkindex.dat 失敗 -</translation> + <location filename="../bitcoinstrings.cpp" line="65"/> + <source>Error loading wallet.dat: Wallet corrupted</source> + <translation>載入 wallet.dat 失敗: 錢包壞掉了</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> - <source>Loading wallet...</source> - <translation>載入錢包中...</translation> + <location filename="../bitcoinstrings.cpp" line="66"/> + <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> + <translation>載入 wallet.dat 失敗: 此錢包需要新版的 Bitcoin</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> - <source>Error loading wallet.dat: Wallet corrupted -</source> - <translation>載入 wallet.dat 失敗: 錢包壞掉了 -</translation> + <location filename="../bitcoinstrings.cpp" line="67"/> + <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> + <translation>錢包需要重寫: 請重啟位元幣來完成</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> - <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin -</source> - <translation>載入 wallet.dat 錯誤: 此錢包需要新版的 Bitcoin -</translation> + <location filename="../bitcoinstrings.cpp" line="68"/> + <source>Error loading wallet.dat</source> + <translation>載入 wallet.dat 失敗</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="55"/> - <source>Error loading wallet.dat -</source> - <translation>載入 wallet.dat 錯誤 -</translation> + <location filename="../bitcoinstrings.cpp" line="62"/> + <source>Loading block index...</source> + <translation>載入區塊索引中...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="64"/> + <source>Loading wallet...</source> + <translation>載入錢包中...</translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="69"/> <source>Rescanning...</source> <translation>重新掃描中...</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="70"/> <source>Done loading</source> <translation>載入完成</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="58"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>Invalid -proxy address</source> <translation>無效的 -proxy 位址</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="59"/> + <location filename="../bitcoinstrings.cpp" line="72"/> <source>Invalid amount for -paytxfee=<amount></source> <translation>-paytxfee=<金額> 中的金額無效</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation>警告: -paytxfee 設定得很高. 這是當你交易付款時所要支付的手續費.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="76"/> <source>Error: CreateThread(StartNode) failed</source> <translation>錯誤: CreateThread(StartNode) 失敗</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Warning: Disk space is low </source> <translation>警告: 磁碟空間很少</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation>無法與這台電腦上的通訊埠 %d 連結. 也許 Bitcoin 已經在執行了.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> - <source>This transaction is over the size limit. You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> - <translation>這筆交易的資料大小超過限制了. 你還是可以付出 %s 元的費用來傳送. 這項費用會付給處理該筆交易的節點, 並幫助維持整個網路. 你願意支付這項費用嗎?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="72"/> - <source>Enter the current passphrase to the wallet.</source> - <translation>輸入錢包目前的密碼.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="73"/> - <source>Passphrase</source> - <translation>密碼</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="74"/> - <source>Please supply the current wallet decryption passphrase.</source> - <translation>請提供錢包目前的解密密碼</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="75"/> - <source>The passphrase entered for the wallet decryption was incorrect.</source> - <translation>輸入的錢包解密密碼不對</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="76"/> - <source>Status</source> - <translation>狀態</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="77"/> - <source>Date</source> - <translation>日期</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="78"/> - <source>Description</source> - <translation>說明</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="79"/> - <source>Debit</source> - <translation>出帳</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="80"/> - <source>Credit</source> - <translation>入帳</translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Open for %d blocks</source> - <translation>在 %d 個區塊內未定</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="82"/> - <source>Open until %s</source> - <translation>在 %s 前未定</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="83"/> - <source>%d/offline?</source> - <translation>%d/斷線中?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>%d/unconfirmed</source> - <translation>%d/未確認</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="85"/> - <source>%d confirmations</source> - <translation>經確認 %d 次</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="86"/> - <source>Generated</source> - <translation>已產出</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="87"/> - <source>Generated (%s matures in %d more blocks)</source> - <translation>已產出 (%s 元將在 %d 個區塊產出後熟成)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="88"/> - <source>Generated - Warning: This block was not received by any other nodes and will probably not be accepted!</source> - <translation>已產出 - 警告: 沒有任何的其他節點收到此區塊, 也許不會被接受!</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="91"/> - <source>Generated (not accepted)</source> - <translation>已產出 (不被接受)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="92"/> - <source>From: </source> - <translation>來自: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="93"/> - <source>Received with: </source> - <translation>收受於: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="94"/> - <source>Payment to yourself</source> - <translation>付給自己</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="95"/> - <source>To: </source> - <translation>目的: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="96"/> - <source> Generating</source> - <translation> 生產中</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="97"/> - <source>(not connected)</source> - <translation>(未連線)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="98"/> - <source> %d connections %d blocks %d transactions</source> - <translation> %d 個連線 %d 個區塊 %d 次交易</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="99"/> - <source>Wallet already encrypted.</source> - <translation>錢包已經加密了.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="100"/> - <source>Enter the new passphrase to the wallet. -Please use a passphrase of 10 or more random characters, or eight or more words.</source> - <translation>輸入錢包的新密碼. -密碼請用 10 個以上的字元, 或是 8 個以上的字詞.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="104"/> - <source>Error: The supplied passphrase was too short.</source> - <translation>錯誤: 提供的密碼太短了.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="105"/> - <source>WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS! -Are you sure you wish to encrypt your wallet?</source> - <translation>警告: 如果將錢包加密後忘記密碼, 你會失去其中所有的位元幣! -你確定要將錢包加密嗎?</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="109"/> - <source>Please re-enter your new wallet passphrase.</source> - <translation>請再輸入一次新密碼.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="110"/> - <source>Error: the supplied passphrases didn't match.</source> - <translation>錯誤: 提供的密碼不相符.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="111"/> - <source>Wallet encryption failed.</source> - <translation>錢包加密失敗.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="112"/> - <source>Wallet Encrypted. -Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> - <translation>錢包已加密. -請記得, 即使將錢包加密, 也不能完全防止因惡意軟體入侵, 而導致位元幣被偷.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="116"/> - <source>Wallet is unencrypted, please encrypt it first.</source> - <translation>錢包未加密, 請先加密.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="117"/> - <source>Enter the new passphrase for the wallet.</source> - <translation>輸入錢包的新密碼.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="118"/> - <source>Re-enter the new passphrase for the wallet.</source> - <translation>再輸入一次錢包的新密碼.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="119"/> - <source>Wallet Passphrase Changed.</source> - <translation>錢包密碼已變更.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="120"/> - <source>New Receiving Address</source> - <translation>新增收款位址</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="121"/> - <source>You should use a new address for each payment you receive. - -Label</source> - <translation>每次收款你都應該要用一個新的位址. - -標記</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="125"/> - <source><b>Status:</b> </source> - <translation><b>狀態:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="126"/> - <source>, has not been successfully broadcast yet</source> - <translation>, 尚未成功公告出去</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="127"/> - <source>, broadcast through %d node</source> - <translation>, 公告至 %d 個節點</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="128"/> - <source>, broadcast through %d nodes</source> - <translation>, 公告至 %d 個節點</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="129"/> - <source><b>Date:</b> </source> - <translation><b>日期:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="130"/> - <source><b>Source:</b> Generated<br></source> - <translation><b>來源:</b> 生產所得<br></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="131"/> - <source><b>From:</b> </source> - <translation><b>來自:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="132"/> - <source>unknown</source> - <translation>不明</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="133"/> - <source><b>To:</b> </source> - <translation><b>目的:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="134"/> - <source> (yours, label: </source> - <translation> (你的, 標記為: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="135"/> - <source> (yours)</source> - <translation> (你的)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="136"/> - <source><b>Credit:</b> </source> - <translation><b>入帳:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="137"/> - <source>(%s matures in %d more blocks)</source> - <translation>(%s 元將在 %d 個區塊產出後熟成)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="138"/> - <source>(not accepted)</source> - <translation>(不被接受)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="139"/> - <source><b>Debit:</b> </source> - <translation><b>出帳:</b></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="140"/> - <source><b>Transaction fee:</b> </source> - <translation><b>交易手續費:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="141"/> - <source><b>Net amount:</b> </source> - <translation><b>淨額:</b> </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="142"/> - <source>Message:</source> - <translation>訊息:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="143"/> - <source>Comment:</source> - <translation>附註:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="144"/> - <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation>生產出來的錢要再等 120 個區塊產出之後, 才能夠花用. 當你產出區塊時, 它會被公布到網路上, 以被串連至區塊鎖鏈. 如果串連失敗了, 它的狀態就會變成"不被接受", 且不能被花用. 當你產出區塊的幾秒鐘內, 其他節點也產出了區塊的話, 有時候就會發生這種情形.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="150"/> - <source>Cannot write autostart/bitcoin.desktop file</source> - <translation>無法寫入 autostart/bitcoin.desktop 檔案</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="151"/> - <source>Main</source> - <translation>主要</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="152"/> - <source>&Start Bitcoin on window system startup</source> - <translation>視窗系統啓動時同時開啓位元幣</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="153"/> - <source>&Minimize on close</source> - <translation>關閉時最小化</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="154"/> - <source>version %s</source> - <translation>%s 版</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="155"/> - <source>Error in amount </source> - <translation>金額有誤</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="156"/> - <source>Send Coins</source> - <translation>付錢</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="157"/> - <source>Amount exceeds your balance </source> - <translation>金額超過了餘額 </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="158"/> - <source>Total exceeds your balance when the </source> - <translation>包含手續費 </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="159"/> - <source> transaction fee is included </source> - <translation> 後總額超過了餘額</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="160"/> - <source>Payment sent </source> - <translation>已付款</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="161"/> - <source>Sending...</source> - <translation>付出中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="162"/> - <source>Invalid address </source> - <translation>無效的位址 </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="163"/> - <source>Sending %s to %s</source> - <translation>付出 %s 元給 %s</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="164"/> - <source>CANCELLED</source> - <translation>已取消</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="165"/> - <source>Cancelled</source> - <translation>已取消</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="166"/> - <source>Transfer cancelled </source> - <translation>交易已取消</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="167"/> - <source>Error: </source> - <translation>錯誤: </translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="168"/> - <source>Insufficient funds</source> - <translation>累積金額不足</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="169"/> - <source>Connecting...</source> - <translation>連線中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="170"/> - <source>Unable to connect</source> - <translation>無法連線</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="171"/> - <source>Requesting public key...</source> - <translation>請求公鑰中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="172"/> - <source>Received public key...</source> - <translation>接收公鑰中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="173"/> - <source>Recipient is not accepting transactions sent by IP address</source> - <translation>收款人不接受來自以下網路位址的交易:</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="174"/> - <source>Transfer was not accepted</source> - <translation>轉帳不被接受</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="175"/> - <source>Invalid response received</source> - <translation>收到了無效的回應</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="176"/> - <source>Creating transaction...</source> - <translation>交易建立中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="177"/> - <source>This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds</source> - <translation>這筆交易因為金額或複雜度或最近累積收款的關係, 需要至少 %s 元的手續費</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="180"/> - <source>Transaction creation failed</source> - <translation>交易建立失敗</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="181"/> - <source>Transaction aborted</source> - <translation>交易取消</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="182"/> - <source>Lost connection, transaction cancelled</source> - <translation>斷線了, 交易已取消</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="183"/> - <source>Sending payment...</source> - <translation>付款中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="184"/> - <source>The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation>交易被拒絕了. 有時候會發生這種事, 是因為你錢包中的一些錢已經被花掉了. 比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢, 你現在所用的原來的錢包中卻沒有該筆交易紀錄.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="188"/> - <source>Waiting for confirmation...</source> - <translation>等待確認中...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="189"/> - <source>The payment was sent, but the recipient was unable to verify it. -The transaction is recorded and will credit to the recipient, -but the comment information will be blank.</source> - <translation>已付款, 但是無法驗證收款人. -這筆交易已經被紀錄了, 金額也會被記入至收款人的帳戶, -然而附註資訊將會是空白.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="193"/> - <source>Payment was sent, but an invalid response was received</source> - <translation>已付款, 但是收到無效的回應</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="194"/> - <source>Payment completed</source> - <translation>付款完成</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="195"/> - <source>Name</source> - <translation>名稱</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="196"/> - <source>Address</source> - <translation>位址</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="197"/> - <source>Label</source> - <translation>標記</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="198"/> - <source>Bitcoin Address</source> - <translation>位元幣位址</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="199"/> - <source>This is one of your own addresses for receiving payments and cannot be entered in the address book. </source> - <translation>這是你的一個收款位址, 因而無法輸入於位址簿中.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="202"/> - <source>Edit Address</source> - <translation>編輯位址</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="203"/> - <source>Edit Address Label</source> - <translation>編輯位址標記</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="204"/> - <source>Add Address</source> - <translation>新增位址</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="205"/> - <source>Bitcoin</source> - <translation>位元幣</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="206"/> - <source>Bitcoin - Generating</source> - <translation>位元幣 - 生產中</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="207"/> - <source>Bitcoin - (not connected)</source> - <translation>位元幣 - (未連線)</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="208"/> - <source>&Open Bitcoin</source> - <translation>開啓位元幣</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="209"/> - <source>&Send Bitcoins</source> - <translation>付位元幣</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="210"/> - <source>O&ptions...</source> - <translation>選項...</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="211"/> - <source>E&xit</source> - <translation>結束</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="212"/> - <source>Program has crashed and will terminate. </source> - <translation>程式已當掉且將被終止.</translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="213"/> <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation>警告: 請檢查電腦時間日期是否正確. 位元幣無法在時鐘不準的情況下正常運作.</translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="216"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>beta</source> <translation>公測版</translation> </message> </context> -<context> - <name>main</name> - <message> - <location filename="../bitcoin.cpp" line="145"/> - <source>Bitcoin Qt</source> - <translation type="unfinished"/> - </message> -</context> </TS>
\ No newline at end of file diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index cc78c7a787..d02c148f91 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -8,6 +8,8 @@ class QIcon; class QWidget; class objc_object; +/** Macintosh-specific dock icon handler. + */ class MacDockIconHandler : public QObject { Q_OBJECT diff --git a/src/qt/messagepage.cpp b/src/qt/messagepage.cpp new file mode 100644 index 0000000000..46a0cbae24 --- /dev/null +++ b/src/qt/messagepage.cpp @@ -0,0 +1,107 @@ +#include <string> +#include <vector> + +#include <QClipboard> +#include <QInputDialog> +#include <QList> +#include <QListWidgetItem> +#include <QMessageBox> + +#include "main.h" +#include "wallet.h" +#include "init.h" +#include "util.h" + +#include "messagepage.h" +#include "ui_messagepage.h" + +#include "addressbookpage.h" +#include "guiutil.h" +#include "walletmodel.h" + +MessagePage::MessagePage(QWidget *parent) : + QDialog(parent), + ui(new Ui::MessagePage) +{ + ui->setupUi(this); + + GUIUtil::setupAddressWidget(ui->signFrom, this); +} + +MessagePage::~MessagePage() +{ + delete ui; +} + +void MessagePage::setModel(WalletModel *model) +{ + this->model = model; +} + +void MessagePage::setAddress(QString addr) +{ + ui->signFrom->setText(addr); + ui->message->setFocus(); +} + +void MessagePage::on_pasteButton_clicked() +{ + setAddress(QApplication::clipboard()->text()); +} + +void MessagePage::on_addressBookButton_clicked() +{ + AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::ReceivingTab, this); + dlg.setModel(model->getAddressTableModel()); + if(dlg.exec()) + { + setAddress(dlg.getReturnValue()); + } +} + +void MessagePage::on_copyToClipboard_clicked() +{ + QApplication::clipboard()->setText(ui->signature->text()); +} + +void MessagePage::on_signMessage_clicked() +{ + QString address = ui->signFrom->text(); + + CBitcoinAddress addr(address.toStdString()); + if (!addr.IsValid()) + { + QMessageBox::critical(this, tr("Error signing"), tr("%1 is not a valid address.").arg(address), + QMessageBox::Abort, QMessageBox::Abort); + return; + } + + WalletModel::UnlockContext ctx(model->requestUnlock()); + if(!ctx.isValid()) + { + // Unlock wallet was cancelled + return; + } + + CKey key; + if (!pwalletMain->GetKey(addr, key)) + { + QMessageBox::critical(this, tr("Error signing"), tr("Private key for %1 is not available.").arg(address), + QMessageBox::Abort, QMessageBox::Abort); + return; + } + + CDataStream ss(SER_GETHASH); + ss << strMessageMagic; + ss << ui->message->document()->toPlainText().toStdString(); + + std::vector<unsigned char> vchSig; + if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig)) + { + QMessageBox::critical(this, tr("Error signing"), tr("Sign failed"), + QMessageBox::Abort, QMessageBox::Abort); + } + + ui->signature->setText(QString::fromStdString(EncodeBase64(&vchSig[0], vchSig.size()))); + ui->signature->setFont(GUIUtil::bitcoinAddressFont()); +} diff --git a/src/qt/messagepage.h b/src/qt/messagepage.h new file mode 100644 index 0000000000..55e6228124 --- /dev/null +++ b/src/qt/messagepage.h @@ -0,0 +1,38 @@ +#ifndef MESSAGEPAGE_H +#define MESSAGEPAGE_H + +#include <QDialog> + +namespace Ui { + class MessagePage; +} +class WalletModel; + +QT_BEGIN_NAMESPACE +QT_END_NAMESPACE + +class MessagePage : public QDialog +{ + Q_OBJECT + +public: + explicit MessagePage(QWidget *parent = 0); + ~MessagePage(); + + void setModel(WalletModel *model); + + void setAddress(QString); + +private: + Ui::MessagePage *ui; + WalletModel *model; + +private slots: + void on_pasteButton_clicked(); + void on_addressBookButton_clicked(); + + void on_signMessage_clicked(); + void on_copyToClipboard_clicked(); +}; + +#endif // MESSAGEPAGE_H diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h index 4dd2d1a86a..33a874e73a 100644 --- a/src/qt/monitoreddatamapper.h +++ b/src/qt/monitoreddatamapper.h @@ -7,9 +7,8 @@ QT_BEGIN_NAMESPACE class QWidget; QT_END_NAMESPACE -/* Data <-> Widget mapper that watches for changes, - to be able to notify when 'dirty' (for example, to - enable a commit/apply button). +/** Data to Widget mapper that watches for edits and notifies listeners when a field is edited. + This can be used, for example, to enable a commit/apply button in a configuration dialog. */ class MonitoredDataMapper : public QDataWidgetMapper { diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp index a2314caa47..e668079536 100644 --- a/src/qt/notificator.cpp +++ b/src/qt/notificator.cpp @@ -52,10 +52,13 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl); if (status != kLSApplicationNotFoundErr) { CFBundleRef bundle = CFBundleCreate(0, cfurl); - CFRelease(cfurl); if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) { - mode = Growl; + if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/"))) + mode = Growl13; + else + mode = Growl12; } + CFRelease(cfurl); CFRelease(bundle); } #endif @@ -226,7 +229,7 @@ void Notificator::notifySystray(Class cls, const QString &title, const QString & void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon) { const QString script( - "tell application \"GrowlHelperApp\"\n" + "tell application \"%5\"\n" " set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all) " set the enabledNotificationsList to {\"Notification\"}\n" // -- Make a list of the notifications (enabled) " register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl @@ -265,7 +268,8 @@ void Notificator::notifyGrowl(Class cls, const QString &title, const QString &te QString quotedTitle(title), quotedText(text); quotedTitle.replace("\\", "\\\\").replace("\"", "\\"); quotedText.replace("\\", "\\\\").replace("\"", "\\"); - qt_mac_execute_apple_script(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon), 0); + QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp"); + qt_mac_execute_apple_script(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp), 0); } #endif @@ -282,7 +286,8 @@ void Notificator::notify(Class cls, const QString &title, const QString &text, c notifySystray(cls, title, text, icon, millisTimeout); break; #ifdef Q_WS_MAC - case Growl: + case Growl12: + case Growl13: notifyGrowl(cls, title, text, icon); break; #endif diff --git a/src/qt/notificator.h b/src/qt/notificator.h index ed69ae5c61..0271c26f48 100644 --- a/src/qt/notificator.h +++ b/src/qt/notificator.h @@ -11,33 +11,34 @@ class QDBusInterface; #endif QT_END_NAMESPACE -// Cross-platform desktop notification client +/** Cross-platform desktop notification client. */ class Notificator: public QObject { Q_OBJECT public: - // Create a new notificator - // Ownership of trayIcon is not transferred to this object + /** Create a new notificator. + @note Ownership of trayIcon is not transferred to this object. + */ Notificator(const QString &programName=QString(), QSystemTrayIcon *trayIcon=0, QWidget *parent=0); ~Notificator(); // Message class enum Class { - Information, - Warning, - Critical, + Information, /**< Informational message */ + Warning, /**< Notify user of potential problem */ + Critical /**< An error occured */ }; public slots: - /* Show notification message. - * - * cls: general message class - * title: title shown with message - * text: message content - * icon: optional icon to show with message - * millisTimeout: notification timeout in milliseconds (default 10 seconds) + /** Show notification message. + @param[in] cls general message class + @param[in] title title shown with message + @param[in] text message content + @param[in] icon optional icon to show with message + @param[in] millisTimeout notification timeout in milliseconds (defaults to 10 seconds) + @note Platform implementations are free to ignore any of the provided fields except for \a text. */ void notify(Class cls, const QString &title, const QString &text, const QIcon &icon = QIcon(), int millisTimeout = 10000); @@ -45,10 +46,11 @@ public slots: private: QWidget *parent; enum Mode { - None, - Freedesktop, // Use DBus org.freedesktop.Notifications - QSystemTray, // Use QSystemTray::showMessage - Growl // Use the Growl notification system (Mac only) + None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */ + Freedesktop, /**< Use DBus org.freedesktop.Notifications */ + QSystemTray, /**< Use QSystemTray::showMessage */ + Growl12, /**< Use the Growl 1.2 notification system (Mac only) */ + Growl13 /**< Use the Growl 1.3 notification system (Mac only) */ }; QString programName; Mode mode; diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index ea3164e3d7..75fd4ccf18 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -214,7 +214,7 @@ MainOptionsPage::MainOptionsPage(QWidget *parent): proxy_hbox->addStretch(1); layout->addLayout(proxy_hbox); - QLabel *fee_help = new QLabel(tr("Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.")); + QLabel *fee_help = new QLabel(tr("Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.")); fee_help->setWordWrap(true); layout->addWidget(fee_help); @@ -223,7 +223,7 @@ MainOptionsPage::MainOptionsPage(QWidget *parent): QLabel *fee_label = new QLabel(tr("Pay transaction &fee")); fee_hbox->addWidget(fee_label); fee_edit = new BitcoinAmountField(); - fee_edit->setToolTip(tr("Optional transaction fee per KB that helps make sure your transactions are processed quickly. Most transactions are 1KB. Fee 0.01 recommended.")); + fee_edit->setToolTip(tr("Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.")); fee_label->setBuddy(fee_edit); fee_hbox->addWidget(fee_edit); diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index d5238a3664..9e1f87c646 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -14,6 +14,7 @@ class MainOptionsPage; class DisplayOptionsPage; class MonitoredDataMapper; +/** Preferences dialog. */ class OptionsDialog : public QDialog { Q_OBJECT @@ -25,6 +26,7 @@ public: signals: public slots: + /** Change the current page to \a index. */ void changePage(int index); private slots: @@ -33,6 +35,7 @@ private slots: void applyClicked(); void enableApply(); void disableApply(); + private: QListWidget *contents_widget; QStackedWidget *pages_widget; diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index efc216dab8..ed2225cbf5 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -1,20 +1,94 @@ #include "optionsmodel.h" #include "bitcoinunits.h" +#include <QSettings> #include "headers.h" +#include "init.h" -OptionsModel::OptionsModel(CWallet *wallet, QObject *parent) : - QAbstractListModel(parent), - wallet(wallet), - nDisplayUnit(BitcoinUnits::BTC), - bDisplayAddresses(false) +OptionsModel::OptionsModel(QObject *parent) : + QAbstractListModel(parent) { - // Read our specific settings from the wallet db - CWalletDB walletdb(wallet->strWalletFile); - walletdb.ReadSetting("nDisplayUnit", nDisplayUnit); - walletdb.ReadSetting("bDisplayAddresses", bDisplayAddresses); + Init(); } +void OptionsModel::Init() +{ + QSettings settings; + + // These are QT-only settings: + nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt(); + bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool(); + fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool(); + fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool(); + nTransactionFee = settings.value("nTransactionFee").toLongLong(); + + // These are shared with core bitcoin; we want + // command-line options to override the GUI settings: + if (settings.contains("fUseUPnP")) + SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()); + if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool()) + SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString()); +} + +bool OptionsModel::Upgrade() +{ + QSettings settings; + + if (settings.contains("bImportFinished")) + return false; // Already upgraded + + settings.setValue("bImportFinished", true); + + // Move settings from old wallet.dat (if any): + CWalletDB walletdb("wallet.dat"); + + QList<QString> intOptions; + intOptions << "nDisplayUnit" << "nTransactionFee"; + foreach(QString key, intOptions) + { + int value = 0; + if (walletdb.ReadSetting(key.toStdString(), value)) + { + settings.setValue(key, value); + walletdb.EraseSetting(key.toStdString()); + } + } + QList<QString> boolOptions; + boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP"; + foreach(QString key, boolOptions) + { + bool value = false; + if (walletdb.ReadSetting(key.toStdString(), value)) + { + settings.setValue(key, value); + walletdb.EraseSetting(key.toStdString()); + } + } + try + { + CAddress addrProxyAddress; + if (walletdb.ReadSetting("addrProxy", addrProxyAddress)) + { + addrProxy = addrProxyAddress; + settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str()); + walletdb.EraseSetting("addrProxy"); + } + } + catch (std::ios_base::failure &e) + { + // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress + if (walletdb.ReadSetting("addrProxy", addrProxy)) + { + settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str()); + walletdb.EraseSetting("addrProxy"); + } + } + Init(); + + return true; +} + + int OptionsModel::rowCount(const QModelIndex & parent) const { return OptionIDRowCount; @@ -24,22 +98,23 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const { if(role == Qt::EditRole) { + QSettings settings; switch(index.row()) { case StartAtStartup: - return QVariant(); + return QVariant(GetStartOnSystemStartup()); case MinimizeToTray: return QVariant(fMinimizeToTray); case MapPortUPnP: - return QVariant(fUseUPnP); + return settings.value("fUseUPnP", GetBoolArg("-upnp", true)); case MinimizeOnClose: return QVariant(fMinimizeOnClose); case ConnectSOCKS4: - return QVariant(fUseProxy); + return settings.value("fUseProxy", false); case ProxyIP: return QVariant(QString::fromStdString(addrProxy.ToStringIP())); case ProxyPort: - return QVariant(QString::fromStdString(addrProxy.ToStringPort())); + return QVariant(addrProxy.GetPort()); case Fee: return QVariant(nTransactionFee); case DisplayUnit: @@ -58,39 +133,39 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in bool successful = true; /* set to false on parse error */ if(role == Qt::EditRole) { - CWalletDB walletdb(wallet->strWalletFile); + QSettings settings; switch(index.row()) { case StartAtStartup: - successful = false; /*TODO*/ + successful = SetStartOnSystemStartup(value.toBool()); break; case MinimizeToTray: fMinimizeToTray = value.toBool(); - walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray); + settings.setValue("fMinimizeToTray", fMinimizeToTray); break; case MapPortUPnP: - fUseUPnP = value.toBool(); - walletdb.WriteSetting("fUseUPnP", fUseUPnP); -#ifdef USE_UPNP - MapPort(fUseUPnP); -#endif + { + bool bUseUPnP = value.toBool(); + settings.setValue("fUseUPnP", bUseUPnP); + MapPort(bUseUPnP); + } break; case MinimizeOnClose: fMinimizeOnClose = value.toBool(); - walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose); + settings.setValue("fMinimizeOnClose", fMinimizeOnClose); break; case ConnectSOCKS4: fUseProxy = value.toBool(); - walletdb.WriteSetting("fUseProxy", fUseProxy); + settings.setValue("fUseProxy", fUseProxy); break; case ProxyIP: { // Use CAddress to parse and check IP - CAddress addr(value.toString().toStdString() + ":1"); - if (addr.ip != INADDR_NONE) + CNetAddr addr(value.toString().toStdString()); + if (addr.IsValid()) { - addrProxy.ip = addr.ip; - walletdb.WriteSetting("addrProxy", addrProxy); + addrProxy.SetIP(addr); + settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str()); } else { @@ -101,10 +176,10 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in case ProxyPort: { int nPort = atoi(value.toString().toAscii().data()); - if (nPort > 0 && nPort < USHRT_MAX) + if (nPort > 0 && nPort < std::numeric_limits<unsigned short>::max()) { - addrProxy.port = htons(nPort); - walletdb.WriteSetting("addrProxy", addrProxy); + addrProxy.SetPort(nPort); + settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str()); } else { @@ -114,18 +189,18 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case Fee: { nTransactionFee = value.toLongLong(); - walletdb.WriteSetting("nTransactionFee", nTransactionFee); + settings.setValue("nTransactionFee", nTransactionFee); } break; case DisplayUnit: { int unit = value.toInt(); nDisplayUnit = unit; - walletdb.WriteSetting("nDisplayUnit", nDisplayUnit); + settings.setValue("nDisplayUnit", nDisplayUnit); emit displayUnitChanged(unit); } case DisplayAddresses: { bDisplayAddresses = value.toBool(); - walletdb.WriteSetting("bDisplayAddresses", bDisplayAddresses); + settings.setValue("bDisplayAddresses", bDisplayAddresses); } default: break; diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 7f489c5014..0be70f8935 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -3,9 +3,7 @@ #include <QAbstractListModel> -class CWallet; - -/* Interface from QT to configuration data structure for bitcoin client. +/** Interface from QT to configuration data structure for bitcoin client. To QT, the options are presented as a list with the different options laid out vertically. This can be changed to a tree once the settings become sufficiently @@ -15,7 +13,7 @@ class OptionsModel : public QAbstractListModel { Q_OBJECT public: - explicit OptionsModel(CWallet *wallet, QObject *parent = 0); + explicit OptionsModel(QObject *parent = 0); enum OptionID { StartAtStartup, // bool @@ -31,6 +29,11 @@ public: OptionIDRowCount }; + void Init(); + + /* Migrate settings from wallet.dat after app initialization */ + bool Upgrade(); /* returns true if settings upgraded */ + int rowCount(const QModelIndex & parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); @@ -42,10 +45,10 @@ public: int getDisplayUnit(); bool getDisplayAddresses(); private: - // Wallet stores persistent options - CWallet *wallet; int nDisplayUnit; bool bDisplayAddresses; + bool fMinimizeToTray; + bool fMinimizeOnClose; signals: void displayUnitChanged(int unit); diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index fe0987178c..5b5a8f5271 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -111,7 +111,7 @@ OverviewPage::OverviewPage(QWidget *parent) : ui->labelNumTransactions->setToolTip(tr("Total number of transactions in wallet")); // Recent transactions - ui->listTransactions->setStyleSheet("background:transparent"); + ui->listTransactions->setStyleSheet("QListView { background:transparent }"); ui->listTransactions->setItemDelegate(txdelegate); ui->listTransactions->setIconSize(QSize(DECORATION_SIZE, DECORATION_SIZE)); ui->listTransactions->setSelectionMode(QAbstractItemView::NoSelection); diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 4b4cc922ca..1199227168 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -13,6 +13,7 @@ namespace Ui { class WalletModel; class TxViewDelegate; +/** Overview ("home") page widget */ class OverviewPage : public QWidget { Q_OBJECT diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp new file mode 100644 index 0000000000..82959831de --- /dev/null +++ b/src/qt/qrcodedialog.cpp @@ -0,0 +1,110 @@ +#include "qrcodedialog.h" +#include "ui_qrcodedialog.h" +#include "guiutil.h" + +#include <QPixmap> +#include <QUrl> +#include <QDebug> + +#include <qrencode.h> + +#define EXPORT_IMAGE_SIZE 256 + +QRCodeDialog::QRCodeDialog(const QString &title, const QString &addr, const QString &label, bool enableReq, QWidget *parent) : + QDialog(parent), + ui(new Ui::QRCodeDialog), + address(addr) +{ + ui->setupUi(this); + setWindowTitle(title); + setAttribute(Qt::WA_DeleteOnClose); + + ui->chkReq->setVisible(enableReq); + ui->lnReqAmount->setVisible(enableReq); + ui->lblAm1->setVisible(enableReq); + ui->lblAm2->setVisible(enableReq); + + ui->lnLabel->setText(label); + + genCode(); +} + +QRCodeDialog::~QRCodeDialog() +{ + delete ui; +} + +void QRCodeDialog::genCode() +{ + QString uri = getURI(); + //qDebug() << "Encoding:" << uri.toUtf8().constData(); + QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); + myImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); + myImage.fill(0xffffff); + unsigned char *p = code->data; + for(int y = 0; y < code->width; y++) { + for(int x = 0; x < code->width; x++) { + myImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff)); + p++; + } + } + QRcode_free(code); + ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); +} + +QString QRCodeDialog::getURI() +{ + QString ret = QString("bitcoin:%1").arg(address); + + int paramCount = 0; + if(ui->chkReq->isChecked() && ui->lnReqAmount->text().isEmpty() == false) { + bool ok= false; + double amount = ui->lnReqAmount->text().toDouble(&ok); + if(ok) { + ret += QString("?amount=%1X8").arg(ui->lnReqAmount->text()); + paramCount++; + } + } + + if(ui->lnLabel->text().isEmpty() == false) { + QString lbl(QUrl::toPercentEncoding(ui->lnLabel->text())); + ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); + paramCount++; + } + + if(ui->lnMessage->text().isEmpty() == false) { + QString msg(QUrl::toPercentEncoding(ui->lnMessage->text())); + ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); + paramCount++; + } + + return ret; +} + +void QRCodeDialog::on_lnReqAmount_textChanged(const QString &) +{ + genCode(); +} + +void QRCodeDialog::on_lnLabel_textChanged(const QString &) +{ + genCode(); +} + +void QRCodeDialog::on_lnMessage_textChanged(const QString &) +{ + genCode(); +} + +void QRCodeDialog::on_btnSaveAs_clicked() +{ + QString fn = GUIUtil::getSaveFileName(this, tr("Save Image..."), QString(), tr("PNG Images (*.png)")); + if(!fn.isEmpty()) { + myImage.scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE).save(fn); + } +} + +void QRCodeDialog::on_chkReq_toggled(bool) +{ + genCode(); +} diff --git a/src/qt/qrcodedialog.h b/src/qt/qrcodedialog.h new file mode 100644 index 0000000000..7463a8810e --- /dev/null +++ b/src/qt/qrcodedialog.h @@ -0,0 +1,37 @@ +#ifndef QRCODEDIALOG_H +#define QRCODEDIALOG_H + +#include <QDialog> +#include <QImage> + +namespace Ui { + class QRCodeDialog; +} + +class QRCodeDialog : public QDialog +{ + Q_OBJECT + +public: + explicit QRCodeDialog(const QString &title, const QString &address, const QString &label, bool allowReq, QWidget *parent = 0); + ~QRCodeDialog(); + +private slots: + void on_lnReqAmount_textChanged(const QString &arg1); + void on_lnLabel_textChanged(const QString &arg1); + void on_lnMessage_textChanged(const QString &arg1); + void on_btnSaveAs_clicked(); + + void on_chkReq_toggled(bool checked); + +private: + Ui::QRCodeDialog *ui; + QImage myImage; + + QString getURI(); + QString address; + + void genCode(); +}; + +#endif // QRCODEDIALOG_H diff --git a/src/qt/qtipcserver.cpp b/src/qt/qtipcserver.cpp new file mode 100644 index 0000000000..8b9270e178 --- /dev/null +++ b/src/qt/qtipcserver.cpp @@ -0,0 +1,88 @@ +// Copyright (c) 2009-2012 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include <boost/algorithm/string.hpp> +#include <boost/interprocess/ipc/message_queue.hpp> +#include <boost/tokenizer.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> + +#include "headers.h" + +using namespace boost::interprocess; +using namespace boost::posix_time; +using namespace boost; +using namespace std; + +void ipcShutdown() +{ + message_queue::remove("BitcoinURL"); +} + +void ipcThread(void* parg) +{ + message_queue* mq = (message_queue*)parg; + char strBuf[257]; + size_t nSize; + unsigned int nPriority; + loop + { + ptime d = boost::posix_time::microsec_clock::universal_time() + millisec(100); + if(mq->timed_receive(&strBuf, sizeof(strBuf), nSize, nPriority, d)) + { + ThreadSafeHandleURL(std::string(strBuf, nSize)); + Sleep(1000); + } + if (fShutdown) + { + ipcShutdown(); + break; + } + } + ipcShutdown(); +} + +void ipcInit() +{ +#ifdef MAC_OSX + // TODO: implement bitcoin: URI handling the Mac Way + return; +#endif +#ifdef WIN32 + // TODO: THOROUGHLY test boost::interprocess fix, + // and make sure there are no Windows argument-handling exploitable + // problems. + return; +#endif + + message_queue* mq; + char strBuf[257]; + size_t nSize; + unsigned int nPriority; + try { + mq = new message_queue(open_or_create, "BitcoinURL", 2, 256); + + // Make sure we don't lose any bitcoin: URIs + for (int i = 0; i < 2; i++) + { + ptime d = boost::posix_time::microsec_clock::universal_time() + millisec(1); + if(mq->timed_receive(&strBuf, sizeof(strBuf), nSize, nPriority, d)) + { + ThreadSafeHandleURL(std::string(strBuf, nSize)); + } + else + break; + } + + // Make sure only one bitcoin instance is listening + message_queue::remove("BitcoinURL"); + mq = new message_queue(open_or_create, "BitcoinURL", 2, 256); + } + catch (interprocess_exception &ex) { + return; + } + if (!CreateThread(ipcThread, mq)) + { + delete mq; + } +} diff --git a/src/qt/qtipcserver.h b/src/qt/qtipcserver.h new file mode 100644 index 0000000000..1de0334afd --- /dev/null +++ b/src/qt/qtipcserver.h @@ -0,0 +1,2 @@ +void ipcInit(); +void ipcShutdown(); diff --git a/src/qt/qvalidatedlineedit.h b/src/qt/qvalidatedlineedit.h index f7b9486a6e..66e26be9a3 100644 --- a/src/qt/qvalidatedlineedit.h +++ b/src/qt/qvalidatedlineedit.h @@ -3,8 +3,9 @@ #include <QLineEdit> -// Line edit that can be marked as "invalid". When marked as invalid, -// it will get a red background until it is focused. +/** Line edit that can be marked as "invalid" to show input validation feedback. When marked as invalid, + it will get a red background until it is focused. + */ class QValidatedLineEdit : public QLineEdit { Q_OBJECT diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h index 2a3533da9e..11f342d71c 100644 --- a/src/qt/qvaluecombobox.h +++ b/src/qt/qvaluecombobox.h @@ -3,19 +3,18 @@ #include <QComboBox> -// QComboBox that can be used with QDataWidgetMapper to select -// ordinal values from a model. +/* QComboBox that can be used with QDataWidgetMapper to select ordinal values from a model. */ class QValueComboBox : public QComboBox { Q_OBJECT - Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true); + Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true) public: explicit QValueComboBox(QWidget *parent = 0); int value() const; void setValue(int value); - // Model role to use as value + /** Specify model role to use as ordinal value */ void setRole(int role); signals: diff --git a/src/qt/res/icons/address-book.png b/src/qt/res/icons/address-book.png Binary files differindex dbfc28ab3d..d41dbe6539 100644 --- a/src/qt/res/icons/address-book.png +++ b/src/qt/res/icons/address-book.png diff --git a/src/qt/res/icons/filesave.png b/src/qt/res/icons/filesave.png Binary files differnew file mode 100644 index 0000000000..ae13a151d5 --- /dev/null +++ b/src/qt/res/icons/filesave.png diff --git a/src/qt/res/icons/overview.png b/src/qt/res/icons/overview.png Binary files differindex 3b90fe5569..ee2511f01d 100644 --- a/src/qt/res/icons/overview.png +++ b/src/qt/res/icons/overview.png diff --git a/src/qt/res/images/qrcode.png b/src/qt/res/images/qrcode.png Binary files differnew file mode 100644 index 0000000000..c89a49bbce --- /dev/null +++ b/src/qt/res/images/qrcode.png diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 762f27dfa6..964313ea81 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -11,6 +11,7 @@ #include <QMessageBox> #include <QLocale> #include <QTextDocument> +#include <QScrollBar> SendCoinsDialog::SendCoinsDialog(QWidget *parent) : QDialog(parent), @@ -29,6 +30,8 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addEntry())); connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); + + fNewRecipientAllowed = true; } void SendCoinsDialog::setModel(WalletModel *model) @@ -91,6 +94,8 @@ void SendCoinsDialog::on_sendButton_clicked() formatted.append(tr("<b>%1</b> to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), Qt::escape(rcp.label), rcp.address)); } + fNewRecipientAllowed = false; + QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm send coins"), tr("Are you sure you want to send %1?").arg(formatted.join(tr(" and "))), QMessageBox::Yes|QMessageBox::Cancel, @@ -98,6 +103,7 @@ void SendCoinsDialog::on_sendButton_clicked() if(retval != QMessageBox::Yes) { + fNewRecipientAllowed = true; return; } @@ -105,6 +111,7 @@ void SendCoinsDialog::on_sendButton_clicked() if(!ctx.isValid()) { // Unlock wallet was cancelled + fNewRecipientAllowed = true; return; } @@ -151,6 +158,7 @@ void SendCoinsDialog::on_sendButton_clicked() accept(); break; } + fNewRecipientAllowed = true; } void SendCoinsDialog::clear() @@ -188,6 +196,12 @@ SendCoinsEntry *SendCoinsDialog::addEntry() // Focus the field, so that entry can start immediately entry->clear(); + entry->setFocus(); + ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->sizeHint()); + QCoreApplication::instance()->processEvents(); + QScrollBar* bar = ui->scrollArea->verticalScrollBar(); + if (bar) + bar->setSliderPosition(bar->maximum()); return entry; } @@ -229,6 +243,9 @@ QWidget *SendCoinsDialog::setupTabChain(QWidget *prev) void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv) { + if (!fNewRecipientAllowed) + return; + SendCoinsEntry *entry = 0; // Replace the first entry if it is still unused if(ui->entries->count() == 1) @@ -248,7 +265,7 @@ void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv) } -void SendCoinsDialog::handleURL(const QUrl *url) +void SendCoinsDialog::handleURL(const QString &url) { SendCoinsRecipient rv; if(!GUIUtil::parseBitcoinURL(url, &rv)) diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h index a14f99e8b2..4dc3f08bc5 100644 --- a/src/qt/sendcoinsdialog.h +++ b/src/qt/sendcoinsdialog.h @@ -14,6 +14,7 @@ QT_BEGIN_NAMESPACE class QUrl; QT_END_NAMESPACE +/** Dialog for sending bitcoins */ class SendCoinsDialog : public QDialog { Q_OBJECT @@ -24,12 +25,12 @@ public: void setModel(WalletModel *model); - // Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907) - // Hence we have to set it up manually + /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907). + */ QWidget *setupTabChain(QWidget *prev); void pasteEntry(const SendCoinsRecipient &rv); - void handleURL(const QUrl *url); + void handleURL(const QString &url); public slots: void clear(); @@ -42,6 +43,7 @@ public slots: private: Ui::SendCoinsDialog *ui; WalletModel *model; + bool fNewRecipientAllowed; private slots: void on_sendButton_clicked(); diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index 23b11ccdde..caffaaeff2 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -59,12 +59,14 @@ void SendCoinsEntry::on_payTo_textChanged(const QString &address) { if(!model) return; - ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address)); -} + // Fill in label from address book, if no label is filled in yet + if(ui->addAsLabel->text().isEmpty()) + ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address));} void SendCoinsEntry::setModel(WalletModel *model) { this->model = model; + clear(); } void SendCoinsEntry::setRemoveEnabled(bool enabled) @@ -151,3 +153,8 @@ bool SendCoinsEntry::isClear() return ui->payTo->text().isEmpty(); } +void SendCoinsEntry::setFocus() +{ + ui->payTo->setFocus(); +} + diff --git a/src/qt/sendcoinsentry.h b/src/qt/sendcoinsentry.h index ccc223b5f5..cdbf893264 100644 --- a/src/qt/sendcoinsentry.h +++ b/src/qt/sendcoinsentry.h @@ -9,6 +9,7 @@ namespace Ui { class WalletModel; class SendCoinsRecipient; +/** A single entry in the dialog for sending bitcoins. */ class SendCoinsEntry : public QFrame { Q_OBJECT @@ -21,15 +22,17 @@ public: bool validate(); SendCoinsRecipient getValue(); - // Return true if the entry is still empty and unedited + /** Return whether the entry is still empty and unedited */ bool isClear(); void setValue(const SendCoinsRecipient &value); - // Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907) - // Hence we have to set it up manually + /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907). + */ QWidget *setupTabChain(QWidget *prev); + void setFocus(); + public slots: void setRemoveEnabled(bool enabled); void clear(); diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp new file mode 100644 index 0000000000..0a08eafa1e --- /dev/null +++ b/src/qt/test/test_main.cpp @@ -0,0 +1,11 @@ +#include <QTest>
+#include <QObject>
+
+#include "urltests.h"
+
+// This is all you need to run all the tests
+int main(int argc, char *argv[])
+{
+ URLTests test1;
+ QTest::qExec(&test1);
+}
diff --git a/src/qt/test/urltests.cpp b/src/qt/test/urltests.cpp new file mode 100644 index 0000000000..1f11795a9b --- /dev/null +++ b/src/qt/test/urltests.cpp @@ -0,0 +1,71 @@ +#include "urltests.h" +#include "../guiutil.h" +#include "../walletmodel.h" + +#include <QUrl> + +/* +struct SendCoinsRecipient +{ + QString address; + QString label; + qint64 amount; +}; +*/ + +void URLTests::urlTests() +{ + SendCoinsRecipient rv; + QUrl url; + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist=")); + QVERIFY(!GUIUtil::parseBitcoinURL(url, &rv)); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist=")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString()); + QVERIFY(rv.amount == 0); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString("Wikipedia Example Address")); + QVERIFY(rv.amount == 0); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString()); + QVERIFY(rv.amount == 100000); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString()); + QVERIFY(rv.amount == 100100000); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.amount == 10000000000); + QVERIFY(rv.label == QString("Wikipedia Example")); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address")); + QVERIFY(GUIUtil::parseBitcoinURL(url, &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString()); + + QVERIFY(GUIUtil::parseBitcoinURL("bitcoin://175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv)); + QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); + QVERIFY(rv.label == QString()); + + // We currently dont implement the message paramenter (ok, yea, we break spec...) + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address")); + QVERIFY(!GUIUtil::parseBitcoinURL(url, &rv)); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example")); + QVERIFY(!GUIUtil::parseBitcoinURL(url, &rv)); + + url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example")); + QVERIFY(!GUIUtil::parseBitcoinURL(url, &rv)); +} diff --git a/src/qt/test/urltests.h b/src/qt/test/urltests.h new file mode 100644 index 0000000000..393c511390 --- /dev/null +++ b/src/qt/test/urltests.h @@ -0,0 +1,15 @@ +#ifndef URLTESTS_H +#define URLTESTS_H + +#include <QTest> +#include <QObject> + +class URLTests : public QObject +{ + Q_OBJECT + +private slots: + void urlTests(); +}; + +#endif // URLTESTS_H diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index 6ca3ac8c4b..c32a006f71 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -1,31 +1,15 @@ -#include <transactiondesc.h> +#include "transactiondesc.h" #include "guiutil.h" #include "bitcoinunits.h" #include "headers.h" -#include "qtui.h" +#include "ui_interface.h" #include <QString> -#include <QTextDocument> // For Qt::escape using namespace std; -QString TransactionDesc::HtmlEscape(const QString& str, bool fMultiLine) -{ - QString escaped = Qt::escape(str); - if(fMultiLine) - { - escaped = escaped.replace("\n", "<br>\n"); - } - return escaped; -} - -QString TransactionDesc::HtmlEscape(const std::string& str, bool fMultiLine) -{ - return HtmlEscape(QString::fromStdString(str), fMultiLine); -} - QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) { if (!wtx.IsFinal()) @@ -86,7 +70,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) { // Online transaction if (!wtx.mapValue["from"].empty()) - strHTML += tr("<b>From:</b> ") + HtmlEscape(wtx.mapValue["from"]) + "<br>"; + strHTML += tr("<b>From:</b> ") + GUIUtil::HtmlEscape(wtx.mapValue["from"]) + "<br>"; } else { @@ -99,15 +83,15 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) if (wallet->IsMine(txout)) { CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, wallet, address)) + if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address)) { if (wallet->mapAddressBook.count(address)) { strHTML += tr("<b>From:</b> ") + tr("unknown") + "<br>"; strHTML += tr("<b>To:</b> "); - strHTML += HtmlEscape(address.ToString()); + strHTML += GUIUtil::HtmlEscape(address.ToString()); if (!wallet->mapAddressBook[address].empty()) - strHTML += tr(" (yours, label: ") + HtmlEscape(wallet->mapAddressBook[address]) + ")"; + strHTML += tr(" (yours, label: ") + GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + ")"; else strHTML += tr(" (yours)"); strHTML += "<br>"; @@ -129,8 +113,8 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) strAddress = wtx.mapValue["to"]; strHTML += tr("<b>To:</b> "); if (wallet->mapAddressBook.count(strAddress) && !wallet->mapAddressBook[strAddress].empty()) - strHTML += HtmlEscape(wallet->mapAddressBook[strAddress]) + " "; - strHTML += HtmlEscape(strAddress) + "<br>"; + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[strAddress]) + " "; + strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>"; } // @@ -184,12 +168,12 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) { // Offline transaction CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, 0, address)) + if (ExtractAddress(txout.scriptPubKey, address)) { strHTML += tr("<b>To:</b> "); if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty()) - strHTML += HtmlEscape(wallet->mapAddressBook[address]) + " "; - strHTML += HtmlEscape(address.ToString()); + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + " "; + strHTML += GUIUtil::HtmlEscape(address.ToString()); strHTML += "<br>"; } } @@ -230,9 +214,11 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) // Message // if (!wtx.mapValue["message"].empty()) - strHTML += QString("<br><b>") + tr("Message:") + "</b><br>" + HtmlEscape(wtx.mapValue["message"], true) + "<br>"; + strHTML += QString("<br><b>") + tr("Message:") + "</b><br>" + GUIUtil::HtmlEscape(wtx.mapValue["message"], true) + "<br>"; if (!wtx.mapValue["comment"].empty()) - strHTML += QString("<br><b>") + tr("Comment:") + "</b><br>" + HtmlEscape(wtx.mapValue["comment"], true) + "<br>"; + strHTML += QString("<br><b>") + tr("Comment:") + "</b><br>" + GUIUtil::HtmlEscape(wtx.mapValue["comment"], true) + "<br>"; + + strHTML += QString("<b>") + tr("Transaction ID:") + "</b> " + wtx.GetHash().ToString().c_str() + "<br>"; if (wtx.IsCoinBase()) strHTML += QString("<br>") + tr("Generated coins must wait 120 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, it will change to \"not accepted\" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "<br>"; @@ -251,7 +237,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) strHTML += "<b>Credit:</b> " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,wallet->GetCredit(txout)) + "<br>"; strHTML += "<br><b>Transaction:</b><br>"; - strHTML += HtmlEscape(wtx.ToString(), true); + strHTML += GUIUtil::HtmlEscape(wtx.ToString(), true); CTxDB txdb("r"); // To fetch source txouts @@ -271,10 +257,10 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) strHTML += "<li>"; const CTxOut &vout = prev.vout[prevout.n]; CBitcoinAddress address; - if (ExtractAddress(vout.scriptPubKey, 0, address)) + if (ExtractAddress(vout.scriptPubKey, address)) { if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty()) - strHTML += HtmlEscape(wallet->mapAddressBook[address]) + " "; + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + " "; strHTML += QString::fromStdString(address.ToString()); } strHTML = strHTML + " Amount=" + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,vout.nValue); diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h index 484bb1230e..2523f9aa69 100644 --- a/src/qt/transactiondesc.h +++ b/src/qt/transactiondesc.h @@ -8,17 +8,16 @@ class CWallet; class CWalletTx; +/** Provide a human-readable extended HTML description of a transaction. + */ class TransactionDesc: public QObject { Q_OBJECT public: - // Provide human-readable extended HTML description of a transaction static QString toHTML(CWallet *wallet, CWalletTx &wtx); private: TransactionDesc() {} - static QString HtmlEscape(const QString& str, bool fMultiLine=false); - static QString HtmlEscape(const std::string &str, bool fMultiLine=false); static QString FormatTxStatus(const CWalletTx& wtx); }; diff --git a/src/qt/transactiondescdialog.h b/src/qt/transactiondescdialog.h index 4f8f754b2b..e86fb58a64 100644 --- a/src/qt/transactiondescdialog.h +++ b/src/qt/transactiondescdialog.h @@ -10,6 +10,7 @@ QT_BEGIN_NAMESPACE class QModelIndex; QT_END_NAMESPACE +/** Dialog showing transaction details. */ class TransactionDescDialog : public QDialog { Q_OBJECT diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp index a4c5b37171..16fb4dab92 100644 --- a/src/qt/transactionfilterproxy.cpp +++ b/src/qt/transactionfilterproxy.cpp @@ -35,7 +35,7 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex & return false; if(datetime < dateFrom || datetime > dateTo) return false; - if(!address.startsWith(addrPrefix) && !label.startsWith(addrPrefix)) + if (!address.contains(addrPrefix, Qt::CaseInsensitive) && !label.contains(addrPrefix, Qt::CaseInsensitive)) return false; if(amount < minAmount) return false; diff --git a/src/qt/transactionfilterproxy.h b/src/qt/transactionfilterproxy.h index 4dd2a8e5c6..8d6829d6f0 100644 --- a/src/qt/transactionfilterproxy.h +++ b/src/qt/transactionfilterproxy.h @@ -4,32 +4,34 @@ #include <QSortFilterProxyModel> #include <QDateTime> -// Filter transaction list according to pre-specified rules +/** Filter the transaction list according to pre-specified rules. */ class TransactionFilterProxy : public QSortFilterProxyModel { Q_OBJECT public: explicit TransactionFilterProxy(QObject *parent = 0); - // Earliest date that can be represented (far in the past) + /** Earliest date that can be represented (far in the past) */ static const QDateTime MIN_DATE; - // Last date that can be represented (far in the future) + /** Last date that can be represented (far in the future) */ static const QDateTime MAX_DATE; - // Type filter bit field (all types) + /** Type filter bit field (all types) */ static const quint32 ALL_TYPES = 0xFFFFFFFF; static quint32 TYPE(int type) { return 1<<type; } void setDateRange(const QDateTime &from, const QDateTime &to); void setAddressPrefix(const QString &addrPrefix); - // Type filter takes a bitfield created with TYPE() or ALL_TYPES + /** + @note Type filter takes a bitfield created with TYPE() or ALL_TYPES + */ void setTypeFilter(quint32 modes); void setMinAmount(qint64 minimum); - // Set maximum number of rows returned, -1 if unlimited + /** Set maximum number of rows returned, -1 if unlimited. */ void setLimit(int limit); - int rowCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; protected: bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const; diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index 77c5a01260..57210dcc02 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -47,48 +47,35 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet * // // Credit // - TransactionRecord sub(hash, nTime); - - sub.credit = nNet; - - if (wtx.IsCoinBase()) - { - // Generated - sub.type = TransactionRecord::Generated; - - if (nCredit == 0) - { - int64 nUnmatured = 0; - BOOST_FOREACH(const CTxOut& txout, wtx.vout) - nUnmatured += wallet->GetCredit(txout); - sub.credit = nUnmatured; - } - } - else if (!mapValue["from"].empty() || !mapValue["message"].empty()) - { - // Received by IP connection - sub.type = TransactionRecord::RecvFromIP; - if (!mapValue["from"].empty()) - sub.address = mapValue["from"]; - } - else + BOOST_FOREACH(const CTxOut& txout, wtx.vout) { - // Received by Bitcoin Address - sub.type = TransactionRecord::RecvWithAddress; - BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if(wallet->IsMine(txout)) { - if(wallet->IsMine(txout)) + TransactionRecord sub(hash, nTime); + CBitcoinAddress address; + sub.idx = parts.size(); // sequence number + sub.credit = txout.nValue; + if (wtx.IsCoinBase()) { - CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, wallet, address)) - { - sub.address = address.ToString(); - } - break; + // Generated + sub.type = TransactionRecord::Generated; } + else if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address)) + { + // Received by Bitcoin Address + sub.type = TransactionRecord::RecvWithAddress; + sub.address = address.ToString(); + } + else + { + // Received by IP connection (deprecated features), or a multisignature or other non-simple transaction + sub.type = TransactionRecord::RecvFromOther; + sub.address = mapValue["from"]; + } + + parts.append(sub); } } - parts.append(sub); } else { @@ -127,21 +114,19 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet * // from a transaction sent back to our own address. continue; } - else if(!mapValue["to"].empty()) + + CBitcoinAddress address; + if (ExtractAddress(txout.scriptPubKey, address)) { - // Sent to IP - sub.type = TransactionRecord::SendToIP; - sub.address = mapValue["to"]; + // Sent to Bitcoin Address + sub.type = TransactionRecord::SendToAddress; + sub.address = address.ToString(); } else { - // Sent to Bitcoin Address - sub.type = TransactionRecord::SendToAddress; - CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, 0, address)) - { - sub.address = address.ToString(); - } + // Sent to IP, or other non-address transaction like OP_EVAL + sub.type = TransactionRecord::SendToOther; + sub.address = mapValue["to"]; } int64 nValue = txout.nValue; @@ -187,7 +172,7 @@ void TransactionRecord::updateStatus(const CWalletTx &wtx) // Sort order, unrecorded transactions sort to the top status.sortKey = strprintf("%010d-%01d-%010u-%03d", - (pindex ? pindex->nHeight : INT_MAX), + (pindex ? pindex->nHeight : std::numeric_limits<int>::max()), (wtx.IsCoinBase() ? 1 : 0), wtx.nTimeReceived, idx); diff --git a/src/qt/transactionrecord.h b/src/qt/transactionrecord.h index 0050c878ee..db06374c44 100644 --- a/src/qt/transactionrecord.h +++ b/src/qt/transactionrecord.h @@ -8,6 +8,8 @@ class CWallet; class CWalletTx; +/** UI model for transaction status. The transaction status is the part of a transaction that will change over time. + */ class TransactionStatus { public: @@ -20,7 +22,7 @@ public: { Immature, Mature, - MaturesWarning, /* Will likely not mature because no nodes have confirmed */ + MaturesWarning, /**< Transaction will likely not mature because no nodes have confirmed */ NotAccepted }; @@ -35,19 +37,26 @@ public: bool confirmed; std::string sortKey; - /* For "Generated" transactions */ + /** @name Generated (mined) transactions + @{*/ Maturity maturity; int matures_in; + /**@}*/ - /* Reported status */ + /** @name Reported status + @{*/ Status status; int64 depth; - int64 open_for; /* Timestamp if status==OpenUntilDate, otherwise number of blocks */ + int64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number of blocks */ + /**@}*/ - /* Current number of blocks (to know whether cached status is still valid. */ + /** Current number of blocks (to know whether cached status is still valid) */ int cur_num_blocks; }; +/** UI model for a transaction. A core transaction can be represented by multiple UI transactions if it has + multiple outputs. + */ class TransactionRecord { public: @@ -56,13 +65,13 @@ public: Other, Generated, SendToAddress, - SendToIP, + SendToOther, RecvWithAddress, - RecvFromIP, + RecvFromOther, SendToSelf }; - /* Number of confirmation needed for transaction */ + /** Number of confirmation needed for transaction */ static const int NumConfirmations = 6; TransactionRecord(): @@ -84,33 +93,35 @@ public: { } - /* Decompose CWallet transaction to model transaction records. + /** Decompose CWallet transaction to model transaction records. */ static bool showTransaction(const CWalletTx &wtx); static QList<TransactionRecord> decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx); - /* Fixed */ + /** @name Immutable transaction attributes + @{*/ uint256 hash; int64 time; Type type; std::string address; int64 debit; int64 credit; + /**@}*/ - /* Subtransaction index, for sort key */ + /** Subtransaction index, for sort key */ int idx; - /* Status: can change with block chain update */ + /** Status: can change with block chain update */ TransactionStatus status; - /* Return the unique identifier for this transaction (part) */ + /** Return the unique identifier for this transaction (part) */ std::string getTxID(); - /* Update status from wallet tx. + /** Update status from core wallet tx. */ void updateStatus(const CWalletTx &wtx); - /* Is a status update needed? + /** Return whether a status update is needed. */ bool statusUpdateNeeded(); }; diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 0e1733f156..480d4ac25e 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -288,20 +288,19 @@ QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) cons } if(wtx->type == TransactionRecord::Generated) { - status += "\n"; switch(wtx->status.maturity) { case TransactionStatus::Immature: - status += tr("Mined balance will be available in %n more blocks", "", + status += "\n" + tr("Mined balance will be available in %n more blocks", "", wtx->status.matures_in); break; case TransactionStatus::Mature: break; case TransactionStatus::MaturesWarning: - status += tr("This block was not received by any other nodes and will probably not be accepted!"); + status += "\n" + tr("This block was not received by any other nodes and will probably not be accepted!"); break; case TransactionStatus::NotAccepted: - status += tr("Generated but not accepted"); + status += "\n" + tr("Generated but not accepted"); break; } } @@ -345,12 +344,11 @@ QString TransactionTableModel::formatTxType(const TransactionRecord *wtx) const { case TransactionRecord::RecvWithAddress: return tr("Received with"); - case TransactionRecord::RecvFromIP: - return tr("Received from IP"); + case TransactionRecord::RecvFromOther: + return tr("Received from"); case TransactionRecord::SendToAddress: + case TransactionRecord::SendToOther: return tr("Sent to"); - case TransactionRecord::SendToIP: - return tr("Sent to IP"); case TransactionRecord::SendToSelf: return tr("Payment to yourself"); case TransactionRecord::Generated: @@ -367,10 +365,10 @@ QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx case TransactionRecord::Generated: return QIcon(":/icons/tx_mined"); case TransactionRecord::RecvWithAddress: - case TransactionRecord::RecvFromIP: + case TransactionRecord::RecvFromOther: return QIcon(":/icons/tx_input"); case TransactionRecord::SendToAddress: - case TransactionRecord::SendToIP: + case TransactionRecord::SendToOther: return QIcon(":/icons/tx_output"); default: return QIcon(":/icons/tx_inout"); @@ -382,12 +380,12 @@ QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, b { switch(wtx->type) { - case TransactionRecord::RecvFromIP: + case TransactionRecord::RecvFromOther: return QString::fromStdString(wtx->address); case TransactionRecord::RecvWithAddress: case TransactionRecord::SendToAddress: return lookupAddress(wtx->address, tooltip); - case TransactionRecord::SendToIP: + case TransactionRecord::SendToOther: return QString::fromStdString(wtx->address); case TransactionRecord::SendToSelf: case TransactionRecord::Generated: @@ -478,7 +476,7 @@ QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx) QString TransactionTableModel::formatTooltip(const TransactionRecord *rec) const { QString tooltip = formatTxStatus(rec) + QString("\n") + formatTxType(rec); - if(rec->type==TransactionRecord::RecvFromIP || rec->type==TransactionRecord::SendToIP || + if(rec->type==TransactionRecord::RecvFromOther || rec->type==TransactionRecord::SendToOther || rec->type==TransactionRecord::SendToAddress || rec->type==TransactionRecord::RecvWithAddress) { tooltip += QString(" ") + formatTxToAddress(rec, true); diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h index da55495e1e..db88a0604f 100644 --- a/src/qt/transactiontablemodel.h +++ b/src/qt/transactiontablemodel.h @@ -9,6 +9,8 @@ class TransactionTablePriv; class TransactionRecord; class WalletModel; +/** UI model for the transaction table of a wallet. + */ class TransactionTableModel : public QAbstractTableModel { Q_OBJECT @@ -16,36 +18,37 @@ public: explicit TransactionTableModel(CWallet* wallet, WalletModel *parent = 0); ~TransactionTableModel(); - enum { + enum ColumnIndex { Status = 0, Date = 1, Type = 2, ToAddress = 3, Amount = 4 - } ColumnIndex; + }; - // Roles to get specific information from a transaction row - // These are independent of column - enum { - // Type of transaction + /** Roles to get specific information from a transaction row. + These are independent of column. + */ + enum RoleIndex { + /** Type of transaction */ TypeRole = Qt::UserRole, - // Date and time this transaction was created + /** Date and time this transaction was created */ DateRole, - // Long description (HTML format) + /** Long description (HTML format) */ LongDescriptionRole, - // Address of transaction + /** Address of transaction */ AddressRole, - // Label of address related to transaction + /** Label of address related to transaction */ LabelRole, - // Net amount of transaction + /** Net amount of transaction */ AmountRole, - // Unique identifier + /** Unique identifier */ TxIDRole, - // Is transaction confirmed? + /** Is transaction confirmed? */ ConfirmedRole, - // Formatted amount, without brackets when unconfirmed + /** Formatted amount, without brackets when unconfirmed */ FormattedAmountRole - } RoleIndex; + }; int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index 2dcbf1ea8a..eaed48bfdf 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -10,6 +10,7 @@ #include "transactiondescdialog.h" #include "editaddressdialog.h" #include "optionsmodel.h" +#include "guiutil.h" #include <QScrollBar> #include <QComboBox> @@ -20,7 +21,6 @@ #include <QTableView> #include <QHeaderView> #include <QPushButton> -#include <QFileDialog> #include <QMessageBox> #include <QPoint> #include <QMenu> @@ -70,9 +70,9 @@ TransactionView::TransactionView(QWidget *parent) : typeWidget->addItem(tr("All"), TransactionFilterProxy::ALL_TYPES); typeWidget->addItem(tr("Received with"), TransactionFilterProxy::TYPE(TransactionRecord::RecvWithAddress) | - TransactionFilterProxy::TYPE(TransactionRecord::RecvFromIP)); + TransactionFilterProxy::TYPE(TransactionRecord::RecvFromOther)); typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) | - TransactionFilterProxy::TYPE(TransactionRecord::SendToIP)); + TransactionFilterProxy::TYPE(TransactionRecord::SendToOther)); typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf)); typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated)); typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other)); @@ -100,7 +100,6 @@ TransactionView::TransactionView(QWidget *parent) : QVBoxLayout *vlayout = new QVBoxLayout(this); vlayout->setContentsMargins(0,0,0,0); vlayout->setSpacing(0); - //vlayout->addLayout(hlayout2); QTableView *view = new QTableView(this); vlayout->addLayout(hlayout); @@ -124,12 +123,14 @@ TransactionView::TransactionView(QWidget *parent) : // Actions QAction *copyAddressAction = new QAction(tr("Copy address"), this); QAction *copyLabelAction = new QAction(tr("Copy label"), this); + QAction *copyAmountAction = new QAction(tr("Copy amount"), this); QAction *editLabelAction = new QAction(tr("Edit label"), this); QAction *showDetailsAction = new QAction(tr("Show details..."), this); contextMenu = new QMenu(); contextMenu->addAction(copyAddressAction); contextMenu->addAction(copyLabelAction); + contextMenu->addAction(copyAmountAction); contextMenu->addAction(editLabelAction); contextMenu->addAction(showDetailsAction); @@ -140,14 +141,11 @@ TransactionView::TransactionView(QWidget *parent) : connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString))); connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex))); - - connect(view, - SIGNAL(customContextMenuRequested(QPoint)), - this, - SLOT(contextualMenu(QPoint))); + connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress())); connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); + connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); connect(editLabelAction, SIGNAL(triggered()), this, SLOT(editLabel())); connect(showDetailsAction, SIGNAL(triggered()), this, SLOT(showDetails())); } @@ -265,10 +263,9 @@ void TransactionView::changedAmount(const QString &amount) void TransactionView::exportClicked() { // CSV is currently the only supported format - QString filename = QFileDialog::getSaveFileName( + QString filename = GUIUtil::getSaveFileName( this, - tr("Export Transaction Data"), - QDir::currentPath(), + tr("Export Transaction Data"), QString(), tr("Comma separated file (*.csv)")); if (filename.isNull()) return; @@ -303,24 +300,17 @@ void TransactionView::contextualMenu(const QPoint &point) void TransactionView::copyAddress() { - if(!transactionView->selectionModel()) - return; - QModelIndexList selection = transactionView->selectionModel()->selectedRows(); - if(!selection.isEmpty()) - { - QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::AddressRole).toString()); - } + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::AddressRole); } void TransactionView::copyLabel() { - if(!transactionView->selectionModel()) - return; - QModelIndexList selection = transactionView->selectionModel()->selectedRows(); - if(!selection.isEmpty()) - { - QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::LabelRole).toString()); - } + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::LabelRole); +} + +void TransactionView::copyAmount() +{ + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::FormattedAmountRole); } void TransactionView::editLabel() diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h index f4f815b162..bc6e1e4e05 100644 --- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -16,6 +16,9 @@ class QFrame; class QDateTimeEdit; QT_END_NAMESPACE +/** Widget showing the transaction list for a wallet, including a filter row. + Using the filter row, the user can view or export a subset of the transactions. + */ class TransactionView : public QWidget { Q_OBJECT @@ -57,6 +60,11 @@ private: private slots: void contextualMenu(const QPoint &); void dateRangeChanged(); + void showDetails(); + void copyAddress(); + void editLabel(); + void copyLabel(); + void copyAmount(); signals: void doubleClicked(const QModelIndex&); @@ -67,10 +75,6 @@ public slots: void changedPrefix(const QString &prefix); void changedAmount(const QString &amount); void exportClicked(); - void showDetails(); - void copyAddress(); - void editLabel(); - void copyLabel(); }; diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 2f989661f0..6cc023792d 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -5,8 +5,8 @@ #include "transactiontablemodel.h" #include "headers.h" +#include "db.h" // for BackupWallet -#include <QTimer> #include <QSet> WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) : @@ -15,12 +15,6 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *p cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0), cachedEncryptionStatus(Unencrypted) { - // Until signal notifications is built into the bitcoin core, - // simply update everything after polling using a timer. - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(update())); - timer->start(MODEL_UPDATE_DELAY); - addressTableModel = new AddressTableModel(wallet, this); transactionTableModel = new TransactionTableModel(wallet, this); } @@ -68,6 +62,11 @@ void WalletModel::update() addressTableModel->update(); } +void WalletModel::updateAddressList() +{ + addressTableModel->update(); +} + bool WalletModel::validateAddress(const QString &address) { CBitcoinAddress addressParsed(address.toStdString()); @@ -141,7 +140,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie } return TransactionCreationFailed; } - if(!ThreadSafeAskFee(nFeeRequired, tr("Sending...").toStdString(), NULL)) + if(!ThreadSafeAskFee(nFeeRequired, tr("Sending...").toStdString())) { return Aborted; } @@ -163,9 +162,6 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie } } - // Update our model of the address table - addressTableModel->updateList(); - return SendCoinsReturn(OK, 0, hex); } @@ -200,7 +196,7 @@ WalletModel::EncryptionStatus WalletModel::getEncryptionStatus() const } } -bool WalletModel::setWalletEncrypted(bool encrypted, const std::string &passphrase) +bool WalletModel::setWalletEncrypted(bool encrypted, const SecureString &passphrase) { if(encrypted) { @@ -214,7 +210,7 @@ bool WalletModel::setWalletEncrypted(bool encrypted, const std::string &passphra } } -bool WalletModel::setWalletLocked(bool locked, const std::string &passPhrase) +bool WalletModel::setWalletLocked(bool locked, const SecureString &passPhrase) { if(locked) { @@ -228,7 +224,7 @@ bool WalletModel::setWalletLocked(bool locked, const std::string &passPhrase) } } -bool WalletModel::changePassphrase(const std::string &oldPass, const std::string &newPass) +bool WalletModel::changePassphrase(const SecureString &oldPass, const SecureString &newPass) { bool retval; CRITICAL_BLOCK(wallet->cs_wallet) @@ -239,6 +235,11 @@ bool WalletModel::changePassphrase(const std::string &oldPass, const std::string return retval; } +bool WalletModel::backupWallet(const QString &filename) +{ + return BackupWallet(*wallet, filename.toLocal8Bit().data()); +} + // WalletModel::UnlockContext implementation WalletModel::UnlockContext WalletModel::requestUnlock() { diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index b7b6973b3b..c4468171a8 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -2,21 +2,23 @@ #define WALLETMODEL_H #include <QObject> -#include <string> + +#include "allocators.h" /* for SecureString */ class OptionsModel; class AddressTableModel; class TransactionTableModel; class CWallet; -struct SendCoinsRecipient +class SendCoinsRecipient { +public: QString address; QString label; qint64 amount; }; -// Interface to Bitcoin wallet from Qt view code +/** Interface to Bitcoin wallet from Qt view code. */ class WalletModel : public QObject { Q_OBJECT @@ -72,10 +74,12 @@ public: SendCoinsReturn sendCoins(const QList<SendCoinsRecipient> &recipients); // Wallet encryption - bool setWalletEncrypted(bool encrypted, const std::string &passphrase); + bool setWalletEncrypted(bool encrypted, const SecureString &passphrase); // Passphrase only needed when unlocking - bool setWalletLocked(bool locked, const std::string &passPhrase=std::string()); - bool changePassphrase(const std::string &oldPass, const std::string &newPass); + bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString()); + bool changePassphrase(const SecureString &oldPass, const SecureString &newPass); + // Wallet backup + bool backupWallet(const QString &filename); // RAI object for unlocking wallet, returned by requestUnlock() class UnlockContext @@ -131,12 +135,11 @@ signals: void requireUnlock(); // Asynchronous error notification - void error(const QString &title, const QString &message); + void error(const QString &title, const QString &message, bool modal); public slots: - -private slots: void update(); + void updateAddressList(); }; diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp new file mode 100644 index 0000000000..8180aadfb9 --- /dev/null +++ b/src/rpcdump.cpp @@ -0,0 +1,97 @@ +// Copyright (c) 2009-2012 Bitcoin Developers +// Distributed under the MIT/X11 software license, see the accompanying +// file license.txt or http://www.opensource.org/licenses/mit-license.php. + +#include "headers.h" +#include "init.h" // for pwalletMain +#include "bitcoinrpc.h" + +#include <boost/lexical_cast.hpp> + +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_writer_template.h" +#include "json/json_spirit_utils.h" + +#define printf OutputDebugStringF + +// using namespace boost::asio; +using namespace json_spirit; +using namespace std; + +extern Object JSONRPCError(int code, const string& message); + +class CTxDump +{ +public: + CBlockIndex *pindex; + int64 nValue; + bool fSpent; + CWalletTx* ptx; + int nOut; + CTxDump(CWalletTx* ptx = NULL, int nOut = -1) + { + pindex = NULL; + nValue = 0; + fSpent = false; + this->ptx = ptx; + this->nOut = nOut; + } +}; + +Value importprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "importprivkey <bitcoinprivkey> [label]\n" + "Adds a private key (as returned by dumpprivkey) to your wallet."); + + string strSecret = params[0].get_str(); + string strLabel = ""; + if (params.size() > 1) + strLabel = params[1].get_str(); + CBitcoinSecret vchSecret; + bool fGood = vchSecret.SetString(strSecret); + + if (!fGood) throw JSONRPCError(-5,"Invalid private key"); + + CKey key; + bool fCompressed; + CSecret secret = vchSecret.GetSecret(fCompressed); + key.SetSecret(secret, fCompressed); + CBitcoinAddress vchAddress = CBitcoinAddress(key.GetPubKey()); + + CRITICAL_BLOCK(cs_main) + CRITICAL_BLOCK(pwalletMain->cs_wallet) + { + pwalletMain->MarkDirty(); + pwalletMain->SetAddressBookName(vchAddress, strLabel); + + if (!pwalletMain->AddKey(key)) + throw JSONRPCError(-4,"Error adding key to wallet"); + + pwalletMain->ScanForWalletTransactions(pindexGenesisBlock, true); + pwalletMain->ReacceptWalletTransactions(); + } + + MainFrameRepaint(); + + return Value::null; +} + +Value dumpprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "dumpprivkey <bitcoinaddress>\n" + "Reveals the private key corresponding to <bitcoinaddress>."); + + string strAddress = params[0].get_str(); + CBitcoinAddress address; + if (!address.SetString(strAddress)) + throw JSONRPCError(-5, "Invalid bitcoin address"); + CSecret vchSecret; + bool fCompressed; + if (!pwalletMain->GetSecret(address, vchSecret, fCompressed)) + throw JSONRPCError(-4,"Private key for address " + strAddress + " is not known"); + return CBitcoinSecret(vchSecret, fCompressed).ToString(); +} diff --git a/src/script.cpp b/src/script.cpp index 12d3f9e83a..b6f120289a 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" @@ -70,6 +70,163 @@ static inline void popstack(vector<valtype>& stack) } +const char* GetTxnOutputType(txnouttype t) +{ + switch (t) + { + case TX_NONSTANDARD: return "nonstandard"; + case TX_PUBKEY: return "pubkey"; + case TX_PUBKEYHASH: return "pubkeyhash"; + case TX_SCRIPTHASH: return "scripthash"; + case TX_MULTISIG: return "multisig"; + } + return NULL; +} + + +const char* GetOpName(opcodetype opcode) +{ + switch (opcode) + { + // push value + case OP_0 : return "0"; + case OP_PUSHDATA1 : return "OP_PUSHDATA1"; + case OP_PUSHDATA2 : return "OP_PUSHDATA2"; + case OP_PUSHDATA4 : return "OP_PUSHDATA4"; + case OP_1NEGATE : return "-1"; + case OP_RESERVED : return "OP_RESERVED"; + case OP_1 : return "1"; + case OP_2 : return "2"; + case OP_3 : return "3"; + case OP_4 : return "4"; + case OP_5 : return "5"; + case OP_6 : return "6"; + case OP_7 : return "7"; + case OP_8 : return "8"; + case OP_9 : return "9"; + case OP_10 : return "10"; + case OP_11 : return "11"; + case OP_12 : return "12"; + case OP_13 : return "13"; + case OP_14 : return "14"; + case OP_15 : return "15"; + case OP_16 : return "16"; + + // control + case OP_NOP : return "OP_NOP"; + case OP_VER : return "OP_VER"; + case OP_IF : return "OP_IF"; + case OP_NOTIF : return "OP_NOTIF"; + case OP_VERIF : return "OP_VERIF"; + case OP_VERNOTIF : return "OP_VERNOTIF"; + case OP_ELSE : return "OP_ELSE"; + case OP_ENDIF : return "OP_ENDIF"; + case OP_VERIFY : return "OP_VERIFY"; + case OP_RETURN : return "OP_RETURN"; + + // stack ops + case OP_TOALTSTACK : return "OP_TOALTSTACK"; + case OP_FROMALTSTACK : return "OP_FROMALTSTACK"; + case OP_2DROP : return "OP_2DROP"; + case OP_2DUP : return "OP_2DUP"; + case OP_3DUP : return "OP_3DUP"; + case OP_2OVER : return "OP_2OVER"; + case OP_2ROT : return "OP_2ROT"; + case OP_2SWAP : return "OP_2SWAP"; + case OP_IFDUP : return "OP_IFDUP"; + case OP_DEPTH : return "OP_DEPTH"; + case OP_DROP : return "OP_DROP"; + case OP_DUP : return "OP_DUP"; + case OP_NIP : return "OP_NIP"; + case OP_OVER : return "OP_OVER"; + case OP_PICK : return "OP_PICK"; + case OP_ROLL : return "OP_ROLL"; + case OP_ROT : return "OP_ROT"; + case OP_SWAP : return "OP_SWAP"; + case OP_TUCK : return "OP_TUCK"; + + // splice ops + case OP_CAT : return "OP_CAT"; + case OP_SUBSTR : return "OP_SUBSTR"; + case OP_LEFT : return "OP_LEFT"; + case OP_RIGHT : return "OP_RIGHT"; + case OP_SIZE : return "OP_SIZE"; + + // bit logic + case OP_INVERT : return "OP_INVERT"; + case OP_AND : return "OP_AND"; + case OP_OR : return "OP_OR"; + case OP_XOR : return "OP_XOR"; + case OP_EQUAL : return "OP_EQUAL"; + case OP_EQUALVERIFY : return "OP_EQUALVERIFY"; + case OP_RESERVED1 : return "OP_RESERVED1"; + case OP_RESERVED2 : return "OP_RESERVED2"; + + // numeric + case OP_1ADD : return "OP_1ADD"; + case OP_1SUB : return "OP_1SUB"; + case OP_2MUL : return "OP_2MUL"; + case OP_2DIV : return "OP_2DIV"; + case OP_NEGATE : return "OP_NEGATE"; + case OP_ABS : return "OP_ABS"; + case OP_NOT : return "OP_NOT"; + case OP_0NOTEQUAL : return "OP_0NOTEQUAL"; + case OP_ADD : return "OP_ADD"; + case OP_SUB : return "OP_SUB"; + case OP_MUL : return "OP_MUL"; + case OP_DIV : return "OP_DIV"; + case OP_MOD : return "OP_MOD"; + case OP_LSHIFT : return "OP_LSHIFT"; + case OP_RSHIFT : return "OP_RSHIFT"; + case OP_BOOLAND : return "OP_BOOLAND"; + case OP_BOOLOR : return "OP_BOOLOR"; + case OP_NUMEQUAL : return "OP_NUMEQUAL"; + case OP_NUMEQUALVERIFY : return "OP_NUMEQUALVERIFY"; + case OP_NUMNOTEQUAL : return "OP_NUMNOTEQUAL"; + case OP_LESSTHAN : return "OP_LESSTHAN"; + case OP_GREATERTHAN : return "OP_GREATERTHAN"; + case OP_LESSTHANOREQUAL : return "OP_LESSTHANOREQUAL"; + case OP_GREATERTHANOREQUAL : return "OP_GREATERTHANOREQUAL"; + case OP_MIN : return "OP_MIN"; + case OP_MAX : return "OP_MAX"; + case OP_WITHIN : return "OP_WITHIN"; + + // crypto + case OP_RIPEMD160 : return "OP_RIPEMD160"; + case OP_SHA1 : return "OP_SHA1"; + case OP_SHA256 : return "OP_SHA256"; + case OP_HASH160 : return "OP_HASH160"; + case OP_HASH256 : return "OP_HASH256"; + case OP_CODESEPARATOR : return "OP_CODESEPARATOR"; + case OP_CHECKSIG : return "OP_CHECKSIG"; + case OP_CHECKSIGVERIFY : return "OP_CHECKSIGVERIFY"; + case OP_CHECKMULTISIG : return "OP_CHECKMULTISIG"; + case OP_CHECKMULTISIGVERIFY : return "OP_CHECKMULTISIGVERIFY"; + + // expanson + case OP_NOP1 : return "OP_NOP1"; + case OP_NOP2 : return "OP_NOP2"; + case OP_NOP3 : return "OP_NOP3"; + case OP_NOP4 : return "OP_NOP4"; + case OP_NOP5 : return "OP_NOP5"; + case OP_NOP6 : return "OP_NOP6"; + case OP_NOP7 : return "OP_NOP7"; + case OP_NOP8 : return "OP_NOP8"; + case OP_NOP9 : return "OP_NOP9"; + case OP_NOP10 : return "OP_NOP10"; + + + + // template matching params + case OP_PUBKEYHASH : return "OP_PUBKEYHASH"; + case OP_PUBKEY : return "OP_PUBKEY"; + + case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE"; + default: + return "OP_UNKNOWN"; + } +} + bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType) { CAutoBN_CTX pctx; @@ -963,25 +1120,42 @@ bool CheckSig(vector<unsigned char> vchSig, vector<unsigned char> vchPubKey, CSc - -bool Solver(const CScript& scriptPubKey, vector<pair<opcodetype, valtype> >& vSolutionRet) +// +// Return public keys or hashes from scriptPubKey, for 'standard' transaction types. +// +bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector<vector<unsigned char> >& vSolutionsRet) { // Templates - static vector<CScript> vTemplates; - if (vTemplates.empty()) + static map<txnouttype, CScript> mTemplates; + if (mTemplates.empty()) { // Standard tx, sender provides pubkey, receiver adds signature - vTemplates.push_back(CScript() << OP_PUBKEY << OP_CHECKSIG); + mTemplates.insert(make_pair(TX_PUBKEY, CScript() << OP_PUBKEY << OP_CHECKSIG)); // Bitcoin address tx, sender provides hash of pubkey, receiver provides signature and pubkey - vTemplates.push_back(CScript() << OP_DUP << OP_HASH160 << OP_PUBKEYHASH << OP_EQUALVERIFY << OP_CHECKSIG); + mTemplates.insert(make_pair(TX_PUBKEYHASH, CScript() << OP_DUP << OP_HASH160 << OP_PUBKEYHASH << OP_EQUALVERIFY << OP_CHECKSIG)); + + // Sender provides N pubkeys, receivers provides M signatures + mTemplates.insert(make_pair(TX_MULTISIG, CScript() << OP_SMALLINTEGER << OP_PUBKEYS << OP_SMALLINTEGER << OP_CHECKMULTISIG)); + } + + // Shortcut for pay-to-script-hash, which are more constrained than the other types: + // it is always OP_HASH160 20 [20 byte hash] OP_EQUAL + if (scriptPubKey.IsPayToScriptHash()) + { + typeRet = TX_SCRIPTHASH; + vector<unsigned char> hashBytes(scriptPubKey.begin()+2, scriptPubKey.begin()+22); + vSolutionsRet.push_back(hashBytes); + return true; } // Scan templates const CScript& script1 = scriptPubKey; - BOOST_FOREACH(const CScript& script2, vTemplates) + BOOST_FOREACH(const PAIRTYPE(txnouttype, CScript)& tplate, mTemplates) { - vSolutionRet.clear(); + const CScript& script2 = tplate.second; + vSolutionsRet.clear(); + opcodetype opcode1, opcode2; vector<unsigned char> vch1, vch2; @@ -993,174 +1167,344 @@ bool Solver(const CScript& scriptPubKey, vector<pair<opcodetype, valtype> >& vSo if (pc1 == script1.end() && pc2 == script2.end()) { // Found a match - reverse(vSolutionRet.begin(), vSolutionRet.end()); + typeRet = tplate.first; + if (typeRet == TX_MULTISIG) + { + // Additional checks for TX_MULTISIG: + unsigned char m = vSolutionsRet.front()[0]; + unsigned char n = vSolutionsRet.back()[0]; + if (m < 1 || n < 1 || m > n || vSolutionsRet.size()-2 != n) + return false; + } return true; } if (!script1.GetOp(pc1, opcode1, vch1)) break; if (!script2.GetOp(pc2, opcode2, vch2)) break; + + // Template matching opcodes: + if (opcode2 == OP_PUBKEYS) + { + while (vch1.size() >= 33 && vch1.size() <= 120) + { + vSolutionsRet.push_back(vch1); + if (!script1.GetOp(pc1, opcode1, vch1)) + break; + } + if (!script2.GetOp(pc2, opcode2, vch2)) + break; + // Normal situation is to fall through + // to other if/else statments + } + if (opcode2 == OP_PUBKEY) { if (vch1.size() < 33 || vch1.size() > 120) break; - vSolutionRet.push_back(make_pair(opcode2, vch1)); + vSolutionsRet.push_back(vch1); } else if (opcode2 == OP_PUBKEYHASH) { if (vch1.size() != sizeof(uint160)) break; - vSolutionRet.push_back(make_pair(opcode2, vch1)); + vSolutionsRet.push_back(vch1); + } + else if (opcode2 == OP_SMALLINTEGER) + { // Single-byte small integer pushed onto vSolutions + if (opcode1 == OP_0 || + (opcode1 >= OP_1 && opcode1 <= OP_16)) + { + char n = (char)CScript::DecodeOP_N(opcode1); + vSolutionsRet.push_back(valtype(1, n)); + } + else + break; } else if (opcode1 != opcode2 || vch1 != vch2) { + // Others must match exactly break; } } } - vSolutionRet.clear(); + vSolutionsRet.clear(); + typeRet = TX_NONSTANDARD; return false; } -bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash, int nHashType, CScript& scriptSigRet) +bool Sign1(const CBitcoinAddress& address, const CKeyStore& keystore, uint256 hash, int nHashType, CScript& scriptSigRet) { - scriptSigRet.clear(); + CKey key; + if (!keystore.GetKey(address, key)) + return false; - vector<pair<opcodetype, valtype> > vSolution; - if (!Solver(scriptPubKey, vSolution)) + vector<unsigned char> vchSig; + if (!key.Sign(hash, vchSig)) return false; + vchSig.push_back((unsigned char)nHashType); + scriptSigRet << vchSig; - // Compile solution - BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution) + return true; +} + +bool SignN(const vector<valtype>& multisigdata, const CKeyStore& keystore, uint256 hash, int nHashType, CScript& scriptSigRet) +{ + int nSigned = 0; + int nRequired = multisigdata.front()[0]; + for (vector<valtype>::const_iterator it = multisigdata.begin()+1; it != multisigdata.begin()+multisigdata.size()-1; it++) { - if (item.first == OP_PUBKEY) - { - // Sign - const valtype& vchPubKey = item.second; - CKey key; - if (!keystore.GetKey(Hash160(vchPubKey), key)) - return false; - if (key.GetPubKey() != vchPubKey) - return false; - if (hash != 0) - { - vector<unsigned char> vchSig; - if (!key.Sign(hash, vchSig)) - return false; - vchSig.push_back((unsigned char)nHashType); - scriptSigRet << vchSig; - } - } - else if (item.first == OP_PUBKEYHASH) + const valtype& pubkey = *it; + CBitcoinAddress address; + address.SetPubKey(pubkey); + if (Sign1(address, keystore, hash, nHashType, scriptSigRet)) { - // Sign and give pubkey - CKey key; - if (!keystore.GetKey(uint160(item.second), key)) - return false; - if (hash != 0) - { - vector<unsigned char> vchSig; - if (!key.Sign(hash, vchSig)) - return false; - vchSig.push_back((unsigned char)nHashType); - scriptSigRet << vchSig << key.GetPubKey(); - } + ++nSigned; + if (nSigned == nRequired) break; } + } + return nSigned==nRequired; +} + +// +// Sign scriptPubKey with private keys stored in keystore, given transaction hash and hash type. +// Signatures are returned in scriptSigRet (or returns false if scriptPubKey can't be signed), +// unless whichTypeRet is TX_SCRIPTHASH, in which case scriptSigRet is the redemption script. +// Returns false if scriptPubKey could not be completely satisified. +// +bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash, int nHashType, + CScript& scriptSigRet, txnouttype& whichTypeRet) +{ + scriptSigRet.clear(); + + vector<valtype> vSolutions; + if (!Solver(scriptPubKey, whichTypeRet, vSolutions)) + return false; + + CBitcoinAddress address; + switch (whichTypeRet) + { + case TX_NONSTANDARD: + return false; + case TX_PUBKEY: + address.SetPubKey(vSolutions[0]); + return Sign1(address, keystore, hash, nHashType, scriptSigRet); + case TX_PUBKEYHASH: + address.SetHash160(uint160(vSolutions[0])); + if (!Sign1(address, keystore, hash, nHashType, scriptSigRet)) + return false; else { - return false; + valtype vch; + keystore.GetPubKey(address, vch); + scriptSigRet << vch; } - } + return true; + case TX_SCRIPTHASH: + return keystore.GetCScript(uint160(vSolutions[0]), scriptSigRet); - return true; + case TX_MULTISIG: + scriptSigRet << OP_0; // workaround CHECKMULTISIG bug + return (SignN(vSolutions, keystore, hash, nHashType, scriptSigRet)); + } + return false; } +int ScriptSigArgsExpected(txnouttype t, const std::vector<std::vector<unsigned char> >& vSolutions) +{ + switch (t) + { + case TX_NONSTANDARD: + return -1; + case TX_PUBKEY: + return 1; + case TX_PUBKEYHASH: + return 2; + case TX_MULTISIG: + if (vSolutions.size() < 1 || vSolutions[0].size() < 1) + return -1; + return vSolutions[0][0] + 1; + case TX_SCRIPTHASH: + return 1; // doesn't include args needed by the script + } + return -1; +} bool IsStandard(const CScript& scriptPubKey) { - vector<pair<opcodetype, valtype> > vSolution; - return Solver(scriptPubKey, vSolution); + vector<valtype> vSolutions; + txnouttype whichType; + if (!Solver(scriptPubKey, whichType, vSolutions)) + return false; + + if (whichType == TX_MULTISIG) + { + unsigned char m = vSolutions.front()[0]; + unsigned char n = vSolutions.back()[0]; + // Support up to x-of-3 multisig txns as standard + if (n < 1 || n > 3) + return false; + if (m < 1 || m > n) + return false; + } + + return whichType != TX_NONSTANDARD; } +int HaveKeys(const vector<valtype>& pubkeys, const CKeyStore& keystore) +{ + int nResult = 0; + BOOST_FOREACH(const valtype& pubkey, pubkeys) + { + CBitcoinAddress address; + address.SetPubKey(pubkey); + if (keystore.HaveKey(address)) + ++nResult; + } + return nResult; +} + bool IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) { - vector<pair<opcodetype, valtype> > vSolution; - if (!Solver(scriptPubKey, vSolution)) + vector<valtype> vSolutions; + txnouttype whichType; + if (!Solver(scriptPubKey, whichType, vSolutions)) return false; - // Compile solution - BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution) + CBitcoinAddress address; + switch (whichType) { - if (item.first == OP_PUBKEY) - { - const valtype& vchPubKey = item.second; - vector<unsigned char> vchPubKeyFound; - if (!keystore.GetPubKey(Hash160(vchPubKey), vchPubKeyFound)) - return false; - if (vchPubKeyFound != vchPubKey) - return false; - } - else if (item.first == OP_PUBKEYHASH) - { - if (!keystore.HaveKey(uint160(item.second))) - return false; - } - else - { + case TX_NONSTANDARD: + return false; + case TX_PUBKEY: + address.SetPubKey(vSolutions[0]); + return keystore.HaveKey(address); + case TX_PUBKEYHASH: + address.SetHash160(uint160(vSolutions[0])); + return keystore.HaveKey(address); + case TX_SCRIPTHASH: + { + CScript subscript; + if (!keystore.GetCScript(uint160(vSolutions[0]), subscript)) return false; - } + return IsMine(keystore, subscript); } - - return true; + case TX_MULTISIG: + { + // Only consider transactions "mine" if we own ALL the + // keys involved. multi-signature transactions that are + // partially owned (somebody else has a key that can spend + // them) enable spend-out-from-under-you attacks, especially + // in shared-wallet situations. + vector<valtype> keys(vSolutions.begin()+1, vSolutions.begin()+vSolutions.size()-1); + return HaveKeys(keys, keystore) == keys.size(); + } + } + return false; } -bool static ExtractAddressInner(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet) +bool ExtractAddress(const CScript& scriptPubKey, CBitcoinAddress& addressRet) { - vector<pair<opcodetype, valtype> > vSolution; - if (!Solver(scriptPubKey, vSolution)) + vector<valtype> vSolutions; + txnouttype whichType; + if (!Solver(scriptPubKey, whichType, vSolutions)) return false; - BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution) + if (whichType == TX_PUBKEY) { - if (item.first == OP_PUBKEY) - addressRet.SetPubKey(item.second); - else if (item.first == OP_PUBKEYHASH) - addressRet.SetHash160((uint160)item.second); - if (keystore == NULL || keystore->HaveKey(addressRet)) - return true; + addressRet.SetPubKey(vSolutions[0]); + return true; } - + else if (whichType == TX_PUBKEYHASH) + { + addressRet.SetHash160(uint160(vSolutions[0])); + return true; + } + else if (whichType == TX_SCRIPTHASH) + { + addressRet.SetScriptHash160(uint160(vSolutions[0])); + return true; + } + // Multisig txns have more than one address... return false; } - -bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet) +bool ExtractAddresses(const CScript& scriptPubKey, txnouttype& typeRet, vector<CBitcoinAddress>& addressRet, int& nRequiredRet) { - if (keystore) - return ExtractAddressInner(scriptPubKey, keystore, addressRet); + addressRet.clear(); + typeRet = TX_NONSTANDARD; + vector<valtype> vSolutions; + if (!Solver(scriptPubKey, typeRet, vSolutions)) + return false; + + if (typeRet == TX_MULTISIG) + { + nRequiredRet = vSolutions.front()[0]; + int n = vSolutions.back()[0]; + for (int i = 1; i < vSolutions.size()-1; i++) + { + CBitcoinAddress address; + address.SetPubKey(vSolutions[i]); + addressRet.push_back(address); + } + } else - return ExtractAddressInner(scriptPubKey, NULL, addressRet); - return false; -} + { + nRequiredRet = 1; + CBitcoinAddress address; + if (typeRet == TX_PUBKEYHASH) + address.SetHash160(uint160(vSolutions.front())); + else if (typeRet == TX_SCRIPTHASH) + address.SetScriptHash160(uint160(vSolutions.front())); + else if (typeRet == TX_PUBKEY) + address.SetPubKey(vSolutions.front()); + addressRet.push_back(address); + } + return true; +} -bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, int nHashType) +bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, + bool fValidatePayToScriptHash, int nHashType) { - vector<vector<unsigned char> > stack; + vector<vector<unsigned char> > stack, stackCopy; if (!EvalScript(stack, scriptSig, txTo, nIn, nHashType)) return false; + if (fValidatePayToScriptHash) + stackCopy = stack; if (!EvalScript(stack, scriptPubKey, txTo, nIn, nHashType)) return false; if (stack.empty()) return false; - return CastToBool(stack.back()); + + if (CastToBool(stack.back()) == false) + return false; + + // Additional validation for spend-to-script-hash transactions: + if (fValidatePayToScriptHash && scriptPubKey.IsPayToScriptHash()) + { + if (!scriptSig.IsPushOnly()) // scriptSig must be literals-only + return false; // or validation fails + + const valtype& pubKeySerialized = stackCopy.back(); + CScript pubKey2(pubKeySerialized.begin(), pubKeySerialized.end()); + popstack(stackCopy); + + if (!EvalScript(stackCopy, pubKey2, txTo, nIn, nHashType)) + return false; + if (stackCopy.empty()) + return false; + return CastToBool(stackCopy.back()); + } + + return true; } -bool SignSignature(const CKeyStore &keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType, CScript scriptPrereq) +bool SignSignature(const CKeyStore &keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType) { assert(nIn < txTo.vin.size()); CTxIn& txin = txTo.vin[nIn]; @@ -1169,23 +1513,38 @@ bool SignSignature(const CKeyStore &keystore, const CTransaction& txFrom, CTrans // Leave out the signature from the hash, since a signature can't sign itself. // The checksig op will also drop the signatures from its hash. - uint256 hash = SignatureHash(scriptPrereq + txout.scriptPubKey, txTo, nIn, nHashType); + uint256 hash = SignatureHash(txout.scriptPubKey, txTo, nIn, nHashType); - if (!Solver(keystore, txout.scriptPubKey, hash, nHashType, txin.scriptSig)) + txnouttype whichType; + if (!Solver(keystore, txout.scriptPubKey, hash, nHashType, txin.scriptSig, whichType)) return false; - txin.scriptSig = scriptPrereq + txin.scriptSig; + if (whichType == TX_SCRIPTHASH) + { + // Solver returns the subscript that need to be evaluated; + // the final scriptSig is the signatures from that + // and then the serialized subscript: + CScript subscript = txin.scriptSig; + + // Recompute txn hash using subscript in place of scriptPubKey: + uint256 hash2 = SignatureHash(subscript, txTo, nIn, nHashType); + txnouttype subType; + if (!Solver(keystore, subscript, hash2, nHashType, txin.scriptSig, subType)) + return false; + if (subType == TX_SCRIPTHASH) + return false; + txin.scriptSig << static_cast<valtype>(subscript); // Append serialized subscript + } // Test solution - if (scriptPrereq.empty()) - if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, 0)) - return false; + if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, true, 0)) + return false; return true; } -bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, int nHashType) +bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, bool fValidatePayToScriptHash, int nHashType) { assert(nIn < txTo.vin.size()); const CTxIn& txin = txTo.vin[nIn]; @@ -1196,8 +1555,92 @@ bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsig if (txin.prevout.hash != txFrom.GetHash()) return false; - if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, nHashType)) + if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, fValidatePayToScriptHash, nHashType)) return false; return true; } + +int CScript::GetSigOpCount(bool fAccurate) const +{ + int n = 0; + const_iterator pc = begin(); + opcodetype lastOpcode = OP_INVALIDOPCODE; + while (pc < end()) + { + opcodetype opcode; + if (!GetOp(pc, opcode)) + break; + if (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY) + n++; + else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY) + { + if (fAccurate && lastOpcode >= OP_1 && lastOpcode <= OP_16) + n += DecodeOP_N(lastOpcode); + else + n += 20; + } + lastOpcode = opcode; + } + return n; +} + +int CScript::GetSigOpCount(const CScript& scriptSig) const +{ + if (!IsPayToScriptHash()) + return GetSigOpCount(true); + + // This is a pay-to-script-hash scriptPubKey; + // get the last item that the scriptSig + // pushes onto the stack: + const_iterator pc = scriptSig.begin(); + vector<unsigned char> data; + while (pc < scriptSig.end()) + { + opcodetype opcode; + if (!scriptSig.GetOp(pc, opcode, data)) + return 0; + if (opcode > OP_16) + return 0; + } + + /// ... and return it's opcount: + CScript subscript(data.begin(), data.end()); + return subscript.GetSigOpCount(true); +} + +bool CScript::IsPayToScriptHash() const +{ + // Extra-fast test for pay-to-script-hash CScripts: + return (this->size() == 23 && + this->at(0) == OP_HASH160 && + this->at(1) == 0x14 && + this->at(22) == OP_EQUAL); +} + +void CScript::SetBitcoinAddress(const CBitcoinAddress& address) +{ + this->clear(); + if (address.IsScript()) + *this << OP_HASH160 << address.GetHash160() << OP_EQUAL; + else + *this << OP_DUP << OP_HASH160 << address.GetHash160() << OP_EQUALVERIFY << OP_CHECKSIG; +} + +void CScript::SetMultisig(int nRequired, const std::vector<CKey>& keys) +{ + this->clear(); + + *this << EncodeOP_N(nRequired); + BOOST_FOREACH(const CKey& key, keys) + *this << key.GetPubKey(); + *this << EncodeOP_N(keys.size()) << OP_CHECKMULTISIG; +} + +void CScript::SetPayToScriptHash(const CScript& subscript) +{ + assert(!subscript.empty()); + uint160 subscriptHash = Hash160(subscript); + this->clear(); + *this << OP_HASH160 << subscriptHash << OP_EQUAL; +} diff --git a/src/script.h b/src/script.h index e61ea2fd7e..524d08b3ec 100644 --- a/src/script.h +++ b/src/script.h @@ -1,12 +1,11 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef H_BITCOIN_SCRIPT #define H_BITCOIN_SCRIPT #include "base58.h" -#include "keystore.h" #include <string> #include <vector> @@ -14,7 +13,9 @@ #include <boost/foreach.hpp> class CTransaction; +class CKeyStore; +/** Signature hash types/flags */ enum { SIGHASH_ALL = 1, @@ -24,7 +25,19 @@ enum }; +enum txnouttype +{ + TX_NONSTANDARD, + // 'standard' transaction types: + TX_PUBKEY, + TX_PUBKEYHASH, + TX_SCRIPTHASH, + TX_MULTISIG, +}; +const char* GetTxnOutputType(txnouttype t); + +/** Script opcodes */ enum opcodetype { // push value @@ -162,162 +175,15 @@ enum opcodetype // template matching params + OP_SMALLINTEGER = 0xfa, + OP_PUBKEYS = 0xfb, OP_PUBKEYHASH = 0xfd, OP_PUBKEY = 0xfe, OP_INVALIDOPCODE = 0xff, }; - - - - - - - -inline const char* GetOpName(opcodetype opcode) -{ - switch (opcode) - { - // push value - case OP_0 : return "0"; - case OP_PUSHDATA1 : return "OP_PUSHDATA1"; - case OP_PUSHDATA2 : return "OP_PUSHDATA2"; - case OP_PUSHDATA4 : return "OP_PUSHDATA4"; - case OP_1NEGATE : return "-1"; - case OP_RESERVED : return "OP_RESERVED"; - case OP_1 : return "1"; - case OP_2 : return "2"; - case OP_3 : return "3"; - case OP_4 : return "4"; - case OP_5 : return "5"; - case OP_6 : return "6"; - case OP_7 : return "7"; - case OP_8 : return "8"; - case OP_9 : return "9"; - case OP_10 : return "10"; - case OP_11 : return "11"; - case OP_12 : return "12"; - case OP_13 : return "13"; - case OP_14 : return "14"; - case OP_15 : return "15"; - case OP_16 : return "16"; - - // control - case OP_NOP : return "OP_NOP"; - case OP_VER : return "OP_VER"; - case OP_IF : return "OP_IF"; - case OP_NOTIF : return "OP_NOTIF"; - case OP_VERIF : return "OP_VERIF"; - case OP_VERNOTIF : return "OP_VERNOTIF"; - case OP_ELSE : return "OP_ELSE"; - case OP_ENDIF : return "OP_ENDIF"; - case OP_VERIFY : return "OP_VERIFY"; - case OP_RETURN : return "OP_RETURN"; - - // stack ops - case OP_TOALTSTACK : return "OP_TOALTSTACK"; - case OP_FROMALTSTACK : return "OP_FROMALTSTACK"; - case OP_2DROP : return "OP_2DROP"; - case OP_2DUP : return "OP_2DUP"; - case OP_3DUP : return "OP_3DUP"; - case OP_2OVER : return "OP_2OVER"; - case OP_2ROT : return "OP_2ROT"; - case OP_2SWAP : return "OP_2SWAP"; - case OP_IFDUP : return "OP_IFDUP"; - case OP_DEPTH : return "OP_DEPTH"; - case OP_DROP : return "OP_DROP"; - case OP_DUP : return "OP_DUP"; - case OP_NIP : return "OP_NIP"; - case OP_OVER : return "OP_OVER"; - case OP_PICK : return "OP_PICK"; - case OP_ROLL : return "OP_ROLL"; - case OP_ROT : return "OP_ROT"; - case OP_SWAP : return "OP_SWAP"; - case OP_TUCK : return "OP_TUCK"; - - // splice ops - case OP_CAT : return "OP_CAT"; - case OP_SUBSTR : return "OP_SUBSTR"; - case OP_LEFT : return "OP_LEFT"; - case OP_RIGHT : return "OP_RIGHT"; - case OP_SIZE : return "OP_SIZE"; - - // bit logic - case OP_INVERT : return "OP_INVERT"; - case OP_AND : return "OP_AND"; - case OP_OR : return "OP_OR"; - case OP_XOR : return "OP_XOR"; - case OP_EQUAL : return "OP_EQUAL"; - case OP_EQUALVERIFY : return "OP_EQUALVERIFY"; - case OP_RESERVED1 : return "OP_RESERVED1"; - case OP_RESERVED2 : return "OP_RESERVED2"; - - // numeric - case OP_1ADD : return "OP_1ADD"; - case OP_1SUB : return "OP_1SUB"; - case OP_2MUL : return "OP_2MUL"; - case OP_2DIV : return "OP_2DIV"; - case OP_NEGATE : return "OP_NEGATE"; - case OP_ABS : return "OP_ABS"; - case OP_NOT : return "OP_NOT"; - case OP_0NOTEQUAL : return "OP_0NOTEQUAL"; - case OP_ADD : return "OP_ADD"; - case OP_SUB : return "OP_SUB"; - case OP_MUL : return "OP_MUL"; - case OP_DIV : return "OP_DIV"; - case OP_MOD : return "OP_MOD"; - case OP_LSHIFT : return "OP_LSHIFT"; - case OP_RSHIFT : return "OP_RSHIFT"; - case OP_BOOLAND : return "OP_BOOLAND"; - case OP_BOOLOR : return "OP_BOOLOR"; - case OP_NUMEQUAL : return "OP_NUMEQUAL"; - case OP_NUMEQUALVERIFY : return "OP_NUMEQUALVERIFY"; - case OP_NUMNOTEQUAL : return "OP_NUMNOTEQUAL"; - case OP_LESSTHAN : return "OP_LESSTHAN"; - case OP_GREATERTHAN : return "OP_GREATERTHAN"; - case OP_LESSTHANOREQUAL : return "OP_LESSTHANOREQUAL"; - case OP_GREATERTHANOREQUAL : return "OP_GREATERTHANOREQUAL"; - case OP_MIN : return "OP_MIN"; - case OP_MAX : return "OP_MAX"; - case OP_WITHIN : return "OP_WITHIN"; - - // crypto - case OP_RIPEMD160 : return "OP_RIPEMD160"; - case OP_SHA1 : return "OP_SHA1"; - case OP_SHA256 : return "OP_SHA256"; - case OP_HASH160 : return "OP_HASH160"; - case OP_HASH256 : return "OP_HASH256"; - case OP_CODESEPARATOR : return "OP_CODESEPARATOR"; - case OP_CHECKSIG : return "OP_CHECKSIG"; - case OP_CHECKSIGVERIFY : return "OP_CHECKSIGVERIFY"; - case OP_CHECKMULTISIG : return "OP_CHECKMULTISIG"; - case OP_CHECKMULTISIGVERIFY : return "OP_CHECKMULTISIGVERIFY"; - - // expanson - case OP_NOP1 : return "OP_NOP1"; - case OP_NOP2 : return "OP_NOP2"; - case OP_NOP3 : return "OP_NOP3"; - case OP_NOP4 : return "OP_NOP4"; - case OP_NOP5 : return "OP_NOP5"; - case OP_NOP6 : return "OP_NOP6"; - case OP_NOP7 : return "OP_NOP7"; - case OP_NOP8 : return "OP_NOP8"; - case OP_NOP9 : return "OP_NOP9"; - case OP_NOP10 : return "OP_NOP10"; - - - - // template matching params - case OP_PUBKEYHASH : return "OP_PUBKEYHASH"; - case OP_PUBKEY : return "OP_PUBKEY"; - - case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE"; - default: - return "OP_UNKNOWN"; - } -}; - +const char* GetOpName(opcodetype opcode); @@ -348,7 +214,7 @@ inline std::string StackString(const std::vector<std::vector<unsigned char> >& v - +/** Serialized script, used inside transaction inputs and outputs */ class CScript : public std::vector<unsigned char> { protected: @@ -574,44 +440,66 @@ public: return true; } + // Encode/decode small integers: + static int DecodeOP_N(opcodetype opcode) + { + if (opcode == OP_0) + return 0; + assert(opcode >= OP_1 && opcode <= OP_16); + return (int)opcode - (int)(OP_1 - 1); + } + static opcodetype EncodeOP_N(int n) + { + assert(n >= 0 && n <= 16); + if (n == 0) + return OP_0; + return (opcodetype)(OP_1+n-1); + } - void FindAndDelete(const CScript& b) + int FindAndDelete(const CScript& b) { + int nFound = 0; if (b.empty()) - return; + return nFound; iterator pc = begin(); opcodetype opcode; do { while (end() - pc >= b.size() && memcmp(&pc[0], &b[0], b.size()) == 0) + { erase(pc, pc + b.size()); + ++nFound; + } } while (GetOp(pc, opcode)); + return nFound; } - - - int GetSigOpCount() const + int Find(opcodetype op) const { - int n = 0; - const_iterator pc = begin(); - while (pc < end()) - { - opcodetype opcode; - if (!GetOp(pc, opcode)) - break; - if (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY) - n++; - else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY) - n += 20; - } - return n; + int nFound = 0; + opcodetype opcode; + for (const_iterator pc = begin(); pc != end() && GetOp(pc, opcode);) + if (opcode == op) + ++nFound; + return nFound; } + // Pre-version-0.6, Bitcoin always counted CHECKMULTISIGs + // as 20 sigops. With pay-to-script-hash, that changed: + // CHECKMULTISIGs serialized in scriptSigs are + // counted more accurately, assuming they are of the form + // ... OP_N CHECKMULTISIG ... + int GetSigOpCount(bool fAccurate) const; + + // Accurately count sigOps, including sigOps in + // pay-to-script-hash transactions: + int GetSigOpCount(const CScript& scriptSig) const; + bool IsPayToScriptHash() const; + + // Called by CTransaction::IsStandard bool IsPushOnly() const { - if (size() > 200) - return false; const_iterator pc = begin(); while (pc < end()) { @@ -625,31 +513,13 @@ public: } - CBitcoinAddress GetBitcoinAddress() const - { - opcodetype opcode; - std::vector<unsigned char> vch; - CScript::const_iterator pc = begin(); - if (!GetOp(pc, opcode, vch) || opcode != OP_DUP) return 0; - if (!GetOp(pc, opcode, vch) || opcode != OP_HASH160) return 0; - if (!GetOp(pc, opcode, vch) || vch.size() != sizeof(uint160)) return 0; - uint160 hash160 = uint160(vch); - if (!GetOp(pc, opcode, vch) || opcode != OP_EQUALVERIFY) return 0; - if (!GetOp(pc, opcode, vch) || opcode != OP_CHECKSIG) return 0; - if (pc != end()) return 0; - return CBitcoinAddress(hash160); - } - - void SetBitcoinAddress(const CBitcoinAddress& address) - { - this->clear(); - *this << OP_DUP << OP_HASH160 << address.GetHash160() << OP_EQUALVERIFY << OP_CHECKSIG; - } - + void SetBitcoinAddress(const CBitcoinAddress& address); void SetBitcoinAddress(const std::vector<unsigned char>& vchPubKey) { SetBitcoinAddress(CBitcoinAddress(vchPubKey)); } + void SetMultisig(int nRequired, const std::vector<CKey>& keys); + void SetPayToScriptHash(const CScript& subscript); void PrintHex() const @@ -690,14 +560,14 @@ public: - - bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType); - +bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, std::vector<std::vector<unsigned char> >& vSolutionsRet); +int ScriptSigArgsExpected(txnouttype t, const std::vector<std::vector<unsigned char> >& vSolutions); bool IsStandard(const CScript& scriptPubKey); bool IsMine(const CKeyStore& keystore, const CScript& scriptPubKey); -bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* pkeystore, CBitcoinAddress& addressRet); -bool SignSignature(const CKeyStore& keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL, CScript scriptPrereq=CScript()); -bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, int nHashType=0); +bool ExtractAddress(const CScript& scriptPubKey, CBitcoinAddress& addressRet); +bool ExtractAddresses(const CScript& scriptPubKey, txnouttype& typeRet, std::vector<CBitcoinAddress>& addressRet, int& nRequiredRet); +bool SignSignature(const CKeyStore& keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL); +bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, bool fValidatePayToScriptHash, int nHashType); #endif diff --git a/src/serialize.h b/src/serialize.h index 53867e939a..2d4aaba6a9 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_SERIALIZE_H @@ -10,7 +10,7 @@ #include <map> #include <set> #include <cassert> -#include <climits> +#include <limits> #include <cstring> #include <cstdio> @@ -19,50 +19,17 @@ #include <boost/tuple/tuple_comparison.hpp> #include <boost/tuple/tuple_io.hpp> -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else +#include "allocators.h" + typedef long long int64; typedef unsigned long long uint64; -#endif -#if defined(_MSC_VER) && _MSC_VER < 1300 -#define for if (false) ; else for -#endif - -#ifdef WIN32 -#include <windows.h> -// This is used to attempt to keep keying material out of swap -// Note that VirtualLock does not provide this as a guarantee on Windows, -// but, in practice, memory that has been VirtualLock'd almost never gets written to -// the pagefile except in rare circumstances where memory is extremely low. -#include <windows.h> -#define mlock(p, n) VirtualLock((p), (n)); -#define munlock(p, n) VirtualUnlock((p), (n)); -#else -#include <sys/mman.h> -#include <limits.h> -/* This comes from limits.h if it's not defined there set a sane default */ -#ifndef PAGESIZE -#include <unistd.h> -#define PAGESIZE sysconf(_SC_PAGESIZE) -#endif -#define mlock(a,b) \ - mlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ - (((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) -#define munlock(a,b) \ - munlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ - (((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) -#endif class CScript; class CDataStream; class CAutoFile; static const unsigned int MAX_SIZE = 0x02000000; -static const int VERSION = 50001; -static const char* pszSubVer = ""; -static const bool VERSION_IS_BETA = true; +static const int PROTOCOL_VERSION = 60000; // Used to bypass the rule against non-const reference to temporary // where it makes sense with wrappers such as CFlatData or CTxDB @@ -91,7 +58,7 @@ enum }; #define IMPLEMENT_SERIALIZE(statements) \ - unsigned int GetSerializeSize(int nType=0, int nVersion=VERSION) const \ + unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const \ { \ CSerActionGetSerializeSize ser_action; \ const bool fGetSize = true; \ @@ -99,29 +66,32 @@ enum const bool fRead = false; \ unsigned int nSerSize = 0; \ ser_streamplaceholder s; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ s.nType = nType; \ s.nVersion = nVersion; \ {statements} \ return nSerSize; \ } \ template<typename Stream> \ - void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const \ + void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const \ { \ CSerActionSerialize ser_action; \ const bool fGetSize = false; \ const bool fWrite = true; \ const bool fRead = false; \ unsigned int nSerSize = 0; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ {statements} \ } \ template<typename Stream> \ - void Unserialize(Stream& s, int nType=0, int nVersion=VERSION) \ + void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) \ { \ CSerActionUnserialize ser_action; \ const bool fGetSize = false; \ const bool fWrite = false; \ const bool fRead = true; \ unsigned int nSerSize = 0; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ {statements} \ } @@ -199,8 +169,8 @@ template<typename Stream> inline void Unserialize(Stream& s, bool& a, int, int=0 inline unsigned int GetSizeOfCompactSize(uint64 nSize) { if (nSize < 253) return sizeof(unsigned char); - else if (nSize <= USHRT_MAX) return sizeof(unsigned char) + sizeof(unsigned short); - else if (nSize <= UINT_MAX) return sizeof(unsigned char) + sizeof(unsigned int); + else if (nSize <= std::numeric_limits<unsigned short>::max()) return sizeof(unsigned char) + sizeof(unsigned short); + else if (nSize <= std::numeric_limits<unsigned int>::max()) return sizeof(unsigned char) + sizeof(unsigned int); else return sizeof(unsigned char) + sizeof(uint64); } @@ -212,14 +182,14 @@ void WriteCompactSize(Stream& os, uint64 nSize) unsigned char chSize = nSize; WRITEDATA(os, chSize); } - else if (nSize <= USHRT_MAX) + else if (nSize <= std::numeric_limits<unsigned short>::max()) { unsigned char chSize = 253; unsigned short xSize = nSize; WRITEDATA(os, chSize); WRITEDATA(os, xSize); } - else if (nSize <= UINT_MAX) + else if (nSize <= std::numeric_limits<unsigned int>::max()) { unsigned char chSize = 254; unsigned int xSize = nSize; @@ -271,11 +241,11 @@ uint64 ReadCompactSize(Stream& is) -// -// Wrapper for serializing arrays and POD -// There's a clever template way to make arrays serialize normally, but MSVC6 doesn't support it -// #define FLATDATA(obj) REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj))) + +/** Wrapper for serializing arrays and POD. + * There's a clever template way to make arrays serialize normally, but MSVC6 doesn't support it. + */ class CFlatData { protected: @@ -308,9 +278,7 @@ public: -// -// string stored as a fixed length field -// +/** string stored as a fixed length field */ template<std::size_t LEN> class CFixedFieldString { @@ -362,43 +330,43 @@ template<typename Stream, typename C> void Unserialize(Stream& is, std::basic_st // vector template<typename T, typename A> unsigned int GetSerializeSize_impl(const std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); template<typename T, typename A> unsigned int GetSerializeSize_impl(const std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); -template<typename T, typename A> inline unsigned int GetSerializeSize(const std::vector<T, A>& v, int nType, int nVersion=VERSION); +template<typename T, typename A> inline unsigned int GetSerializeSize(const std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); template<typename Stream, typename T, typename A> void Serialize_impl(Stream& os, const std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); template<typename Stream, typename T, typename A> void Serialize_impl(Stream& os, const std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); -template<typename Stream, typename T, typename A> inline void Serialize(Stream& os, const std::vector<T, A>& v, int nType, int nVersion=VERSION); +template<typename Stream, typename T, typename A> inline void Serialize(Stream& os, const std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); template<typename Stream, typename T, typename A> void Unserialize_impl(Stream& is, std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); template<typename Stream, typename T, typename A> void Unserialize_impl(Stream& is, std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); -template<typename Stream, typename T, typename A> inline void Unserialize(Stream& is, std::vector<T, A>& v, int nType, int nVersion=VERSION); +template<typename Stream, typename T, typename A> inline void Unserialize(Stream& is, std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); // others derived from vector -extern inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion=VERSION); -template<typename Stream> void Serialize(Stream& os, const CScript& v, int nType, int nVersion=VERSION); -template<typename Stream> void Unserialize(Stream& is, CScript& v, int nType, int nVersion=VERSION); +extern inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream> void Serialize(Stream& os, const CScript& v, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream> void Unserialize(Stream& is, CScript& v, int nType, int nVersion=PROTOCOL_VERSION); // pair -template<typename K, typename T> unsigned int GetSerializeSize(const std::pair<K, T>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename T> void Serialize(Stream& os, const std::pair<K, T>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename T> void Unserialize(Stream& is, std::pair<K, T>& item, int nType, int nVersion=VERSION); +template<typename K, typename T> unsigned int GetSerializeSize(const std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename T> void Serialize(Stream& os, const std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename T> void Unserialize(Stream& is, std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); // 3 tuple -template<typename T0, typename T1, typename T2> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename T0, typename T1, typename T2> void Serialize(Stream& os, const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename T0, typename T1, typename T2> void Unserialize(Stream& is, boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); +template<typename T0, typename T1, typename T2> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename T0, typename T1, typename T2> void Serialize(Stream& os, const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename T0, typename T1, typename T2> void Unserialize(Stream& is, boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); // 4 tuple -template<typename T0, typename T1, typename T2, typename T3> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Serialize(Stream& os, const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); -template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Unserialize(Stream& is, boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); +template<typename T0, typename T1, typename T2, typename T3> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Serialize(Stream& os, const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Unserialize(Stream& is, boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); // map -template<typename K, typename T, typename Pred, typename A> unsigned int GetSerializeSize(const std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename T, typename Pred, typename A> void Serialize(Stream& os, const std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename T, typename Pred, typename A> void Unserialize(Stream& is, std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); +template<typename K, typename T, typename Pred, typename A> unsigned int GetSerializeSize(const std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename T, typename Pred, typename A> void Serialize(Stream& os, const std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename T, typename Pred, typename A> void Unserialize(Stream& is, std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); // set -template<typename K, typename Pred, typename A> unsigned int GetSerializeSize(const std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename Pred, typename A> void Serialize(Stream& os, const std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); -template<typename Stream, typename K, typename Pred, typename A> void Unserialize(Stream& is, std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); +template<typename K, typename Pred, typename A> unsigned int GetSerializeSize(const std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename Pred, typename A> void Serialize(Stream& os, const std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); +template<typename Stream, typename K, typename Pred, typename A> void Unserialize(Stream& is, std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); @@ -411,19 +379,19 @@ template<typename Stream, typename K, typename Pred, typename A> void Unserializ // Thanks to Boost serialization for this idea. // template<typename T> -inline unsigned int GetSerializeSize(const T& a, long nType, int nVersion=VERSION) +inline unsigned int GetSerializeSize(const T& a, long nType, int nVersion=PROTOCOL_VERSION) { return a.GetSerializeSize((int)nType, nVersion); } template<typename Stream, typename T> -inline void Serialize(Stream& os, const T& a, long nType, int nVersion=VERSION) +inline void Serialize(Stream& os, const T& a, long nType, int nVersion=PROTOCOL_VERSION) { a.Serialize(os, (int)nType, nVersion); } template<typename Stream, typename T> -inline void Unserialize(Stream& is, T& a, long nType, int nVersion=VERSION) +inline void Unserialize(Stream& is, T& a, long nType, int nVersion=PROTOCOL_VERSION) { a.Unserialize(is, (int)nType, nVersion); } @@ -784,61 +752,18 @@ struct ser_streamplaceholder -// -// Allocator that locks its contents from being paged -// out of memory and clears its contents before deletion. -// -template<typename T> -struct secure_allocator : public std::allocator<T> -{ - // MSVC8 default copy constructor is broken - typedef std::allocator<T> base; - typedef typename base::size_type size_type; - typedef typename base::difference_type difference_type; - typedef typename base::pointer pointer; - typedef typename base::const_pointer const_pointer; - typedef typename base::reference reference; - typedef typename base::const_reference const_reference; - typedef typename base::value_type value_type; - secure_allocator() throw() {} - secure_allocator(const secure_allocator& a) throw() : base(a) {} - template <typename U> - secure_allocator(const secure_allocator<U>& a) throw() : base(a) {} - ~secure_allocator() throw() {} - template<typename _Other> struct rebind - { typedef secure_allocator<_Other> other; }; - - T* allocate(std::size_t n, const void *hint = 0) - { - T *p; - p = std::allocator<T>::allocate(n, hint); - if (p != NULL) - mlock(p, sizeof(T) * n); - return p; - } - - void deallocate(T* p, std::size_t n) - { - if (p != NULL) - { - memset(p, 0, sizeof(T) * n); - munlock(p, sizeof(T) * n); - } - std::allocator<T>::deallocate(p, n); - } -}; -// -// Double ended buffer combining vector and stream-like interfaces. -// >> and << read and write unformatted data using the above serialization templates. -// Fills with data in linear time; some stringstream implementations take N^2 time. -// +/** Double ended buffer combining vector and stream-like interfaces. + * + * >> and << read and write unformatted data using the above serialization templates. + * Fills with data in linear time; some stringstream implementations take N^2 time. + */ class CDataStream { protected: - typedef std::vector<char, secure_allocator<char> > vector_type; + typedef std::vector<char, zero_after_free_allocator<char> > vector_type; vector_type vch; unsigned int nReadPos; short state; @@ -857,39 +782,39 @@ public: typedef vector_type::const_iterator const_iterator; typedef vector_type::reverse_iterator reverse_iterator; - explicit CDataStream(int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) + explicit CDataStream(int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) { Init(nTypeIn, nVersionIn); } - CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(pbegin, pend) + CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(pbegin, pend) { Init(nTypeIn, nVersionIn); } #if !defined(_MSC_VER) || _MSC_VER >= 1300 - CDataStream(const char* pbegin, const char* pend, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(pbegin, pend) + CDataStream(const char* pbegin, const char* pend, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(pbegin, pend) { Init(nTypeIn, nVersionIn); } #endif - CDataStream(const vector_type& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(vchIn.begin(), vchIn.end()) + CDataStream(const vector_type& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(vchIn.begin(), vchIn.end()) { Init(nTypeIn, nVersionIn); } - CDataStream(const std::vector<char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(vchIn.begin(), vchIn.end()) + CDataStream(const std::vector<char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(vchIn.begin(), vchIn.end()) { Init(nTypeIn, nVersionIn); } - CDataStream(const std::vector<unsigned char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) + CDataStream(const std::vector<unsigned char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) { Init(nTypeIn, nVersionIn); } - void Init(int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) + void Init(int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) { nReadPos = 0; nType = nTypeIn; @@ -1103,7 +1028,7 @@ public: } template<typename Stream> - void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const + void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const { // Special case: stream << stream concatenates like stream += stream if (!vch.empty()) @@ -1194,12 +1119,12 @@ int main(int argc, char *argv[]) -// -// Automatic closing wrapper for FILE* -// - Will automatically close the file when it goes out of scope if not null. -// - If you're returning the file pointer, return file.release(). -// - If you need to close the file early, use file.fclose() instead of fclose(file). -// +/** RAII wrapper for FILE*. + * + * Will automatically close the file when it goes out of scope if not null. + * If you're returning the file pointer, return file.release(). + * If you need to close the file early, use file.fclose() instead of fclose(file). + */ class CAutoFile { protected: @@ -1212,7 +1137,7 @@ public: typedef FILE element_type; - CAutoFile(FILE* filenew=NULL, int nTypeIn=SER_DISK, int nVersionIn=VERSION) + CAutoFile(FILE* filenew=NULL, int nTypeIn=SER_DISK, int nVersionIn=PROTOCOL_VERSION) { file = filenew; nType = nTypeIn; diff --git a/src/test/Checkpoints_tests.cpp b/src/test/Checkpoints_tests.cpp new file mode 100644 index 0000000000..0d8a366d7a --- /dev/null +++ b/src/test/Checkpoints_tests.cpp @@ -0,0 +1,34 @@ +// +// Unit tests for block-chain checkpoints +// +#include <boost/assign/list_of.hpp> // for 'map_list_of()' +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> + +#include "../checkpoints.h" +#include "../util.h" + +using namespace std; + +BOOST_AUTO_TEST_SUITE(Checkpoints_tests) + +BOOST_AUTO_TEST_CASE(sanity) +{ + uint256 p11111 = uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"); + uint256 p140700 = uint256("0x000000000000033b512028abb90e1626d8b346fd0ed598ac0a3c371138dce2bd"); + BOOST_CHECK(Checkpoints::CheckBlock(11111, p11111)); + BOOST_CHECK(Checkpoints::CheckBlock(140700, p140700)); + + + // Wrong hashes at checkpoints should fail: + BOOST_CHECK(!Checkpoints::CheckBlock(11111, p140700)); + BOOST_CHECK(!Checkpoints::CheckBlock(140700, p11111)); + + // ... but any hash not at a checkpoint should succeed: + BOOST_CHECK(Checkpoints::CheckBlock(11111+1, p140700)); + BOOST_CHECK(Checkpoints::CheckBlock(140700+1, p11111)); + + BOOST_CHECK(Checkpoints::GetTotalBlocksEstimate() >= 140700); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index e60bb742dd..0b89414048 100644 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -1,47 +1,62 @@ // // Unit tests for denial-of-service detection/prevention code // +#include <boost/assign/list_of.hpp> // for 'map_list_of()' #include <boost/test/unit_test.hpp> #include <boost/foreach.hpp> -#include "../main.h" -#include "../net.h" -#include "../util.h" +#include "main.h" +#include "wallet.h" +#include "net.h" +#include "util.h" -using namespace std; +#include <stdint.h> + +// Tests this internal-to-main.cpp method: +extern void AddOrphanTx(const CDataStream& vMsg); +extern int LimitOrphanTxSize(int nMaxOrphans); +extern std::map<uint256, CDataStream*> mapOrphanTransactions; +extern std::multimap<uint256, CDataStream*> mapOrphanTransactionsByPrev; + +CService ip(uint32_t i) +{ + struct in_addr s; + s.s_addr = i; + return CService(CNetAddr(s), GetDefaultPort()); +} BOOST_AUTO_TEST_SUITE(DoS_tests) BOOST_AUTO_TEST_CASE(DoS_banning) { CNode::ClearBanned(); - CAddress addr1(0xa0b0c001); + CAddress addr1(ip(0xa0b0c001)); CNode dummyNode1(INVALID_SOCKET, addr1, true); dummyNode1.Misbehaving(100); // Should get banned - BOOST_CHECK(CNode::IsBanned(addr1.ip)); - BOOST_CHECK(!CNode::IsBanned(addr1.ip|0x0000ff00)); // Different ip, not banned + BOOST_CHECK(CNode::IsBanned(addr1)); + BOOST_CHECK(!CNode::IsBanned(ip(0xa0b0c001|0x0000ff00))); // Different ip, not banned - CAddress addr2(0xa0b0c002); + CAddress addr2(ip(0xa0b0c002)); CNode dummyNode2(INVALID_SOCKET, addr2, true); dummyNode2.Misbehaving(50); - BOOST_CHECK(!CNode::IsBanned(addr2.ip)); // 2 not banned yet... - BOOST_CHECK(CNode::IsBanned(addr1.ip)); // ... but 1 still should be + BOOST_CHECK(!CNode::IsBanned(addr2)); // 2 not banned yet... + BOOST_CHECK(CNode::IsBanned(addr1)); // ... but 1 still should be dummyNode2.Misbehaving(50); - BOOST_CHECK(CNode::IsBanned(addr2.ip)); + BOOST_CHECK(CNode::IsBanned(addr2)); } BOOST_AUTO_TEST_CASE(DoS_banscore) { CNode::ClearBanned(); mapArgs["-banscore"] = "111"; // because 11 is my favorite number - CAddress addr1(0xa0b0c001); + CAddress addr1(ip(0xa0b0c001)); CNode dummyNode1(INVALID_SOCKET, addr1, true); dummyNode1.Misbehaving(100); - BOOST_CHECK(!CNode::IsBanned(addr1.ip)); + BOOST_CHECK(!CNode::IsBanned(addr1)); dummyNode1.Misbehaving(10); - BOOST_CHECK(!CNode::IsBanned(addr1.ip)); + BOOST_CHECK(!CNode::IsBanned(addr1)); dummyNode1.Misbehaving(1); - BOOST_CHECK(CNode::IsBanned(addr1.ip)); + BOOST_CHECK(CNode::IsBanned(addr1)); mapArgs["-banscore"] = "100"; } @@ -51,18 +66,140 @@ BOOST_AUTO_TEST_CASE(DoS_bantime) int64 nStartTime = GetTime(); SetMockTime(nStartTime); // Overrides future calls to GetTime() - CAddress addr(0xa0b0c001); + CAddress addr(ip(0xa0b0c001)); CNode dummyNode(INVALID_SOCKET, addr, true); dummyNode.Misbehaving(100); - BOOST_CHECK(CNode::IsBanned(addr.ip)); + BOOST_CHECK(CNode::IsBanned(addr)); SetMockTime(nStartTime+60*60); - BOOST_CHECK(CNode::IsBanned(addr.ip)); + BOOST_CHECK(CNode::IsBanned(addr)); SetMockTime(nStartTime+60*60*24+1); - BOOST_CHECK(!CNode::IsBanned(addr.ip)); -} + BOOST_CHECK(!CNode::IsBanned(addr)); +} + +static bool CheckNBits(unsigned int nbits1, int64 time1, unsigned int nbits2, int64 time2)\ +{ + if (time1 > time2) + return CheckNBits(nbits2, time2, nbits1, time1); + int64 deltaTime = time2-time1; + + CBigNum required; + required.SetCompact(ComputeMinWork(nbits1, deltaTime)); + CBigNum have; + have.SetCompact(nbits2); + return (have <= required); +} + +BOOST_AUTO_TEST_CASE(DoS_checknbits) +{ + using namespace boost::assign; // for 'map_list_of()' + + // Timestamps,nBits from the bitcoin blockchain. + // These are the block-chain checkpoint blocks + typedef std::map<int64, unsigned int> BlockData; + BlockData chainData = + map_list_of(1239852051,486604799)(1262749024,486594666) + (1279305360,469854461)(1280200847,469830746)(1281678674,469809688) + (1296207707,453179945)(1302624061,453036989)(1309640330,437004818) + (1313172719,436789733); + + // Make sure CheckNBits considers every combination of block-chain-lock-in-points + // "sane": + BOOST_FOREACH(const BlockData::value_type& i, chainData) + { + BOOST_FOREACH(const BlockData::value_type& j, chainData) + { + BOOST_CHECK(CheckNBits(i.second, i.first, j.second, j.first)); + } + } + + // Test a couple of insane combinations: + BlockData::value_type firstcheck = *(chainData.begin()); + BlockData::value_type lastcheck = *(chainData.rbegin()); + + // First checkpoint difficulty at or a while after the last checkpoint time should fail when + // compared to last checkpoint + BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*10, lastcheck.second, lastcheck.first)); + BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*60*24*14, lastcheck.second, lastcheck.first)); + // ... but OK if enough time passed for difficulty to adjust downward: + BOOST_CHECK(CheckNBits(firstcheck.second, lastcheck.first+60*60*24*365*4, lastcheck.second, lastcheck.first)); + +} + +static uint256 RandomHash() +{ + std::vector<unsigned char> randbytes(32); + RAND_bytes(&randbytes[0], 32); + uint256 randomhash(randbytes); + return randomhash; +} + +CTransaction RandomOrphan() +{ + std::map<uint256, CDataStream*>::iterator it; + it = mapOrphanTransactions.lower_bound(RandomHash()); + if (it == mapOrphanTransactions.end()) + it = mapOrphanTransactions.begin(); + const CDataStream* pvMsg = it->second; + CTransaction tx; + CDataStream(*pvMsg) >> tx; + return tx; +} + +BOOST_AUTO_TEST_CASE(DoS_mapOrphans) +{ + CKey key; + key.MakeNewKey(true); + CBasicKeyStore keystore; + keystore.AddKey(key); + + // 50 orphan transactions: + for (int i = 0; i < 50; i++) + { + CTransaction tx; + tx.vin.resize(1); + tx.vin[0].prevout.n = 0; + tx.vin[0].prevout.hash = RandomHash(); + tx.vin[0].scriptSig << OP_1; + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetBitcoinAddress(key.GetPubKey()); + + CDataStream ds; + ds << tx; + AddOrphanTx(ds); + } + + // ... and 50 that depend on other orphans: + for (int i = 0; i < 50; i++) + { + CTransaction txPrev = RandomOrphan(); + + CTransaction tx; + tx.vin.resize(1); + tx.vin[0].prevout.n = 0; + tx.vin[0].prevout.hash = txPrev.GetHash(); + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetBitcoinAddress(key.GetPubKey()); + SignSignature(keystore, txPrev, tx, 0); + + CDataStream ds; + ds << tx; + AddOrphanTx(ds); + } + + // Test LimitOrphanTxSize() function: + LimitOrphanTxSize(40); + BOOST_CHECK(mapOrphanTransactions.size() <= 40); + LimitOrphanTxSize(10); + BOOST_CHECK(mapOrphanTransactions.size() <= 10); + LimitOrphanTxSize(0); + BOOST_CHECK(mapOrphanTransactions.empty()); + BOOST_CHECK(mapOrphanTransactionsByPrev.empty()); +} BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/base58_tests.cpp b/src/test/base58_tests.cpp index c7fa74e96d..d52ac74982 100644 --- a/src/test/base58_tests.cpp +++ b/src/test/base58_tests.cpp @@ -1,6 +1,8 @@ #include <boost/test/unit_test.hpp> -#include "../util.h" +#include "main.h" +#include "wallet.h" +#include "util.h" BOOST_AUTO_TEST_SUITE(base58_tests) diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp index f30f7f8936..fff30ef5eb 100644 --- a/src/test/base64_tests.cpp +++ b/src/test/base64_tests.cpp @@ -1,18 +1,20 @@ #include <boost/test/unit_test.hpp> -#include "../util.h" +#include "main.h" +#include "wallet.h" +#include "util.h" BOOST_AUTO_TEST_SUITE(base64_tests) BOOST_AUTO_TEST_CASE(base64_testvectors) { - static const string vstrIn[] = {"","f","fo","foo","foob","fooba","foobar"}; - static const string vstrOut[] = {"","Zg==","Zm8=","Zm9v","Zm9vYg==","Zm9vYmE=","Zm9vYmFy"}; + static const std::string vstrIn[] = {"","f","fo","foo","foob","fooba","foobar"}; + static const std::string vstrOut[] = {"","Zg==","Zm8=","Zm9v","Zm9vYg==","Zm9vYmE=","Zm9vYmFy"}; for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++) { - string strEnc = EncodeBase64(vstrIn[i]); + std::string strEnc = EncodeBase64(vstrIn[i]); BOOST_CHECK(strEnc == vstrOut[i]); - string strDec = DecodeBase64(strEnc); + std::string strDec = DecodeBase64(strEnc); BOOST_CHECK(strDec == vstrIn[i]); } } diff --git a/src/test/getarg_tests.cpp b/src/test/getarg_tests.cpp new file mode 100644 index 0000000000..78953d296f --- /dev/null +++ b/src/test/getarg_tests.cpp @@ -0,0 +1,167 @@ +#include <boost/algorithm/string.hpp> +#include <boost/foreach.hpp> +#include <boost/test/unit_test.hpp> + +#include "util.h" + +BOOST_AUTO_TEST_SUITE(getarg_tests) + +static void +ResetArgs(const std::string& strArg) +{ + std::vector<std::string> vecArg; + boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on); + + // Insert dummy executable name: + vecArg.insert(vecArg.begin(), "testbitcoin"); + + // Convert to char*: + std::vector<const char*> vecChar; + BOOST_FOREACH(std::string& s, vecArg) + vecChar.push_back(s.c_str()); + + ParseParameters(vecChar.size(), &vecChar[0]); +} + +BOOST_AUTO_TEST_CASE(boolarg) +{ + ResetArgs("-foo"); + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + BOOST_CHECK(!GetBoolArg("-fo")); + BOOST_CHECK(!GetBoolArg("-fo", false)); + BOOST_CHECK(GetBoolArg("-fo", true)); + + BOOST_CHECK(!GetBoolArg("-fooo")); + BOOST_CHECK(!GetBoolArg("-fooo", false)); + BOOST_CHECK(GetBoolArg("-fooo", true)); + + ResetArgs("-foo=0"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-foo=1"); + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + // New 0.6 feature: auto-map -nosomething to !-something: + ResetArgs("-nofoo"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-foo -nofoo"); // -foo should win + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("-foo=1 -nofoo=1"); // -foo should win + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("-foo=0 -nofoo=0"); // -foo should win + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + // New 0.6 feature: treat -- same as -: + ResetArgs("--foo=1"); + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("--nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + +} + +BOOST_AUTO_TEST_CASE(stringarg) +{ + ResetArgs(""); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven"); + + ResetArgs("-foo -bar"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), ""); + + ResetArgs("-foo="); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), ""); + + ResetArgs("-foo=11"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "11"); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "11"); + + ResetArgs("-foo=eleven"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "eleven"); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven"); + +} + +BOOST_AUTO_TEST_CASE(intarg) +{ + ResetArgs(""); + BOOST_CHECK_EQUAL(GetArg("-foo", 11), 11); + BOOST_CHECK_EQUAL(GetArg("-foo", 0), 0); + + ResetArgs("-foo -bar"); + BOOST_CHECK_EQUAL(GetArg("-foo", 11), 0); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0); + + ResetArgs("-foo=11 -bar=12"); + BOOST_CHECK_EQUAL(GetArg("-foo", 0), 11); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 12); + + ResetArgs("-foo=NaN -bar=NotANumber"); + BOOST_CHECK_EQUAL(GetArg("-foo", 1), 0); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0); +} + +BOOST_AUTO_TEST_CASE(doubledash) +{ + ResetArgs("--foo"); + BOOST_CHECK_EQUAL(GetBoolArg("-foo"), true); + + ResetArgs("--foo=verbose --bar=1"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "verbose"); + BOOST_CHECK_EQUAL(GetArg("-bar", 0), 1); +} + +BOOST_AUTO_TEST_CASE(boolargno) +{ + ResetArgs("-nofoo"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", true)); + BOOST_CHECK(!GetBoolArg("-foo", false)); + + ResetArgs("-nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo")); + BOOST_CHECK(!GetBoolArg("-foo", true)); + BOOST_CHECK(!GetBoolArg("-foo", false)); + + ResetArgs("-nofoo=0"); + BOOST_CHECK(GetBoolArg("-foo")); + BOOST_CHECK(GetBoolArg("-foo", true)); + BOOST_CHECK(GetBoolArg("-foo", false)); + + ResetArgs("-foo --nofoo"); + BOOST_CHECK(GetBoolArg("-foo")); + + ResetArgs("-nofoo -foo"); // foo always wins: + BOOST_CHECK(GetBoolArg("-foo")); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp new file mode 100644 index 0000000000..bc8759b6fa --- /dev/null +++ b/src/test/key_tests.cpp @@ -0,0 +1,138 @@ +#include <boost/test/unit_test.hpp> + +#include <string> +#include <vector> + +#include "key.h" +#include "base58.h" +#include "uint256.h" +#include "util.h" + +using namespace std; + +static const string strSecret1 ("5HxWvvfubhXpYYpS3tJkw6fq9jE9j18THftkZjHHfmFiWtmAbrj"); +static const string strSecret2 ("5KC4ejrDjv152FGwP386VD1i2NYc5KkfSMyv1nGy1VGDxGHqVY3"); +static const string strSecret1C("Kwr371tjA9u2rFSMZjTNun2PXXP3WPZu2afRHTcta6KxEUdm1vEw"); +static const string strSecret2C("L3Hq7a8FEQwJkW1M2GNKDW28546Vp5miewcCzSqUD9kCAXrJdS3g"); + +#ifdef KEY_TESTS_DUMPINFO +void dumpKeyInfo(uint256 privkey) +{ + CSecret secret; + secret.resize(32); + memcpy(&secret[0], &privkey, 32); + vector<unsigned char> sec; + sec.resize(32); + memcpy(&sec[0], &secret[0], 32); + printf(" * secret (hex): %s\n", HexStr(sec).c_str()); + + for (int nCompressed=0; nCompressed<2; nCompressed++) + { + bool fCompressed = nCompressed == 1; + printf(" * %s:\n", fCompressed ? "compressed" : "uncompressed"); + CBitcoinSecret bsecret; + bsecret.SetSecret(secret, fCompressed); + printf(" * secret (base58): %s\n", bsecret.ToString().c_str()); + CKey key; + key.SetSecret(secret, fCompressed); + vector<unsigned char> vchPubKey = key.GetPubKey(); + printf(" * pubkey (hex): %s\n", HexStr(vchPubKey).c_str()); + printf(" * address (base58): %s\n", CBitcoinAddress(vchPubKey).ToString().c_str()); + } +} +#endif + + +BOOST_AUTO_TEST_SUITE(key_tests) + +BOOST_AUTO_TEST_CASE(key_test1) +{ + CBitcoinSecret bsecret1, bsecret2, bsecret1C, bsecret2C; + bsecret1.SetString (strSecret1); + bsecret2.SetString (strSecret2); + bsecret1C.SetString(strSecret1C); + bsecret2C.SetString(strSecret2C); + + bool fCompressed; + CSecret secret1 = bsecret1.GetSecret (fCompressed); + BOOST_CHECK(fCompressed == false); + CSecret secret2 = bsecret2.GetSecret (fCompressed); + BOOST_CHECK(fCompressed == false); + CSecret secret1C = bsecret1C.GetSecret(fCompressed); + BOOST_CHECK(fCompressed == true); + CSecret secret2C = bsecret2C.GetSecret(fCompressed); + BOOST_CHECK(fCompressed == true); + + BOOST_CHECK(secret1 == secret1C); + BOOST_CHECK(secret2 == secret2C); + + CKey key1, key2, key1C, key2C; + key1.SetSecret(secret1, false); + key2.SetSecret(secret2, false); + key1C.SetSecret(secret1, true); + key2C.SetSecret(secret2, true); + + BOOST_CHECK(CBitcoinAddress(key1.GetPubKey ()).ToString() == "1QFqqMUD55ZV3PJEJZtaKCsQmjLT6JkjvJ"); + BOOST_CHECK(CBitcoinAddress(key2.GetPubKey ()).ToString() == "1F5y5E5FMc5YzdJtB9hLaUe43GDxEKXENJ"); + BOOST_CHECK(CBitcoinAddress(key1C.GetPubKey()).ToString() == "1NoJrossxPBKfCHuJXT4HadJrXRE9Fxiqs"); + BOOST_CHECK(CBitcoinAddress(key2C.GetPubKey()).ToString() == "1CRj2HyM1CXWzHAXLQtiGLyggNT9WQqsDs"); + + for (int n=0; n<16; n++) + { + string strMsg = strprintf("Very secret message %i: 11", n); + uint256 hashMsg = Hash(strMsg.begin(), strMsg.end()); + + // normal signatures + + vector<unsigned char> sign1, sign2, sign1C, sign2C; + + BOOST_CHECK(key1.Sign (hashMsg, sign1)); + BOOST_CHECK(key2.Sign (hashMsg, sign2)); + BOOST_CHECK(key1C.Sign(hashMsg, sign1C)); + BOOST_CHECK(key2C.Sign(hashMsg, sign2C)); + + BOOST_CHECK( key1.Verify(hashMsg, sign1)); + BOOST_CHECK(!key1.Verify(hashMsg, sign2)); + BOOST_CHECK( key1.Verify(hashMsg, sign1C)); + BOOST_CHECK(!key1.Verify(hashMsg, sign2C)); + + BOOST_CHECK(!key2.Verify(hashMsg, sign1)); + BOOST_CHECK( key2.Verify(hashMsg, sign2)); + BOOST_CHECK(!key2.Verify(hashMsg, sign1C)); + BOOST_CHECK( key2.Verify(hashMsg, sign2C)); + + BOOST_CHECK( key1C.Verify(hashMsg, sign1)); + BOOST_CHECK(!key1C.Verify(hashMsg, sign2)); + BOOST_CHECK( key1C.Verify(hashMsg, sign1C)); + BOOST_CHECK(!key1C.Verify(hashMsg, sign2C)); + + BOOST_CHECK(!key2C.Verify(hashMsg, sign1)); + BOOST_CHECK( key2C.Verify(hashMsg, sign2)); + BOOST_CHECK(!key2C.Verify(hashMsg, sign1C)); + BOOST_CHECK( key2C.Verify(hashMsg, sign2C)); + + // compact signatures (with key recovery) + + vector<unsigned char> csign1, csign2, csign1C, csign2C; + + BOOST_CHECK(key1.SignCompact (hashMsg, csign1)); + BOOST_CHECK(key2.SignCompact (hashMsg, csign2)); + BOOST_CHECK(key1C.SignCompact(hashMsg, csign1C)); + BOOST_CHECK(key2C.SignCompact(hashMsg, csign2C)); + + CKey rkey1, rkey2, rkey1C, rkey2C; + + BOOST_CHECK(rkey1.SetCompactSignature (hashMsg, csign1)); + BOOST_CHECK(rkey2.SetCompactSignature (hashMsg, csign2)); + BOOST_CHECK(rkey1C.SetCompactSignature(hashMsg, csign1C)); + BOOST_CHECK(rkey2C.SetCompactSignature(hashMsg, csign2C)); + + + BOOST_CHECK(rkey1.GetPubKey() == key1.GetPubKey()); + BOOST_CHECK(rkey2.GetPubKey() == key2.GetPubKey()); + BOOST_CHECK(rkey1C.GetPubKey() == key1C.GetPubKey()); + BOOST_CHECK(rkey2C.GetPubKey() == key2C.GetPubKey()); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 8fc534762a..d4abd6d2a7 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -1,6 +1,6 @@ #include <boost/test/unit_test.hpp> -#include "../uint256.h" +#include "uint256.h" extern void SHA256Transform(void* pstate, void* pinput, const void* pinit); diff --git a/src/test/mruset_tests.cpp b/src/test/mruset_tests.cpp new file mode 100644 index 0000000000..ca5a1f1b12 --- /dev/null +++ b/src/test/mruset_tests.cpp @@ -0,0 +1,90 @@ +#include <boost/test/unit_test.hpp> + +using namespace std; + +#include "mruset.h" +#include "util.h" + +#define NUM_TESTS 16 +#define MAX_SIZE 100 + +class mrutester +{ +private: + mruset<int> mru; + std::set<int> set; + +public: + mrutester() { mru.max_size(MAX_SIZE); } + int size() const { return set.size(); } + + void insert(int n) + { + mru.insert(n); + set.insert(n); + BOOST_CHECK(mru == set); + } +}; + +BOOST_AUTO_TEST_SUITE(mruset_tests) + +// Test that an mruset behaves like a set, as long as no more than MAX_SIZE elements are in it +BOOST_AUTO_TEST_CASE(mruset_like_set) +{ + + for (int nTest=0; nTest<NUM_TESTS; nTest++) + { + mrutester tester; + while (tester.size() < MAX_SIZE) + tester.insert(GetRandInt(2 * MAX_SIZE)); + } + +} + +// Test that an mruset's size never exceeds its max_size +BOOST_AUTO_TEST_CASE(mruset_limited_size) +{ + for (int nTest=0; nTest<NUM_TESTS; nTest++) + { + mruset<int> mru(MAX_SIZE); + for (int nAction=0; nAction<3*MAX_SIZE; nAction++) + { + int n = GetRandInt(2 * MAX_SIZE); + mru.insert(n); + BOOST_CHECK(mru.size() <= MAX_SIZE); + } + } +} + +// 16-bit permutation function +int static permute(int n) +{ + // hexadecimals of pi; verified to be linearly independent + static const int table[16] = {0x243F, 0x6A88, 0x85A3, 0x08D3, 0x1319, 0x8A2E, 0x0370, 0x7344, + 0xA409, 0x3822, 0x299F, 0x31D0, 0x082E, 0xFA98, 0xEC4E, 0x6C89}; + + int ret = 0; + for (int bit=0; bit<16; bit++) + if (n & (1<<bit)) + ret ^= table[bit]; + + return ret; +} + +// Test that an mruset acts like a moving window, if no duplcate elements are added +BOOST_AUTO_TEST_CASE(mruset_window) +{ + mruset<int> mru(MAX_SIZE); + for (int n=0; n<10*MAX_SIZE; n++) + { + mru.insert(permute(n)); + + set<int> tester; + for (int m=max(0,n-MAX_SIZE+1); m<=n; m++) + tester.insert(permute(m)); + + BOOST_CHECK(mru == tester); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp new file mode 100644 index 0000000000..8ae9290fcc --- /dev/null +++ b/src/test/multisig_tests.cpp @@ -0,0 +1,296 @@ +#include <boost/assert.hpp> +#include <boost/assign/list_of.hpp> +#include <boost/assign/list_inserter.hpp> +#include <boost/assign/std/vector.hpp> +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> +#include <boost/tuple/tuple.hpp> + +#include <openssl/ec.h> +#include <openssl/err.h> + +#include "keystore.h" +#include "main.h" +#include "script.h" +#include "wallet.h" + +using namespace std; +using namespace boost::assign; + +typedef vector<unsigned char> valtype; + +extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); +extern bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, + bool fValidatePayToScriptHash, int nHashType); + +BOOST_AUTO_TEST_SUITE(multisig_tests) + +CScript +sign_multisig(CScript scriptPubKey, vector<CKey> keys, CTransaction transaction, int whichIn) +{ + uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL); + + CScript result; + result << OP_0; // CHECKMULTISIG bug workaround + BOOST_FOREACH(CKey key, keys) + { + vector<unsigned char> vchSig; + BOOST_CHECK(key.Sign(hash, vchSig)); + vchSig.push_back((unsigned char)SIGHASH_ALL); + result << vchSig; + } + return result; +} + +BOOST_AUTO_TEST_CASE(multisig_verify) +{ + CKey key[4]; + for (int i = 0; i < 4; i++) + key[i].MakeNewKey(true); + + CScript a_and_b; + a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript a_or_b; + a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + + CTransaction txFrom; // Funding transaction + txFrom.vout.resize(3); + txFrom.vout[0].scriptPubKey = a_and_b; + txFrom.vout[1].scriptPubKey = a_or_b; + txFrom.vout[2].scriptPubKey = escrow; + + CTransaction txTo[3]; // Spending transaction + for (int i = 0; i < 3; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + } + + vector<CKey> keys; + CScript s; + + // Test a AND b: + keys.clear(); + keys += key[0],key[1]; // magic operator+= from boost.assign + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK(VerifyScript(s, a_and_b, txTo[0], 0, true, 0)); + + for (int i = 0; i < 4; i++) + { + keys.clear(); + keys += key[i]; + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, txTo[0], 0, true, 0), strprintf("a&b 1: %d", i)); + + keys.clear(); + keys += key[1],key[i]; + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, txTo[0], 0, true, 0), strprintf("a&b 2: %d", i)); + } + + // Test a OR b: + for (int i = 0; i < 4; i++) + { + keys.clear(); + keys += key[i]; + s = sign_multisig(a_or_b, keys, txTo[1], 0); + if (i == 0 || i == 1) + BOOST_CHECK_MESSAGE(VerifyScript(s, a_or_b, txTo[1], 0, true, 0), strprintf("a|b: %d", i)); + else + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_or_b, txTo[1], 0, true, 0), strprintf("a|b: %d", i)); + } + s.clear(); + s << OP_0 << OP_0; + BOOST_CHECK(!VerifyScript(s, a_or_b, txTo[1], 0, true, 0)); + s.clear(); + s << OP_0 << OP_1; + BOOST_CHECK(!VerifyScript(s, a_or_b, txTo[1], 0, true, 0)); + + + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + { + keys.clear(); + keys += key[i],key[j]; + s = sign_multisig(escrow, keys, txTo[2], 0); + if (i < j && i < 3 && j < 3) + BOOST_CHECK_MESSAGE(VerifyScript(s, escrow, txTo[2], 0, true, 0), strprintf("escrow 1: %d %d", i, j)); + else + BOOST_CHECK_MESSAGE(!VerifyScript(s, escrow, txTo[2], 0, true, 0), strprintf("escrow 2: %d %d", i, j)); + } +} + +BOOST_AUTO_TEST_CASE(multisig_IsStandard) +{ + CKey key[4]; + for (int i = 0; i < 4; i++) + key[i].MakeNewKey(true); + + CScript a_and_b; + a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(::IsStandard(a_and_b)); + + CScript a_or_b; + a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(::IsStandard(a_or_b)); + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + BOOST_CHECK(::IsStandard(escrow)); + + CScript one_of_four; + one_of_four << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << key[3].GetPubKey() << OP_4 << OP_CHECKMULTISIG; + BOOST_CHECK(!::IsStandard(one_of_four)); + + CScript malformed[6]; + malformed[0] << OP_3 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + malformed[1] << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + malformed[2] << OP_0 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + malformed[3] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_0 << OP_CHECKMULTISIG; + malformed[4] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_CHECKMULTISIG; + malformed[5] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey(); + + for (int i = 0; i < 6; i++) + BOOST_CHECK(!::IsStandard(malformed[i])); +} + +BOOST_AUTO_TEST_CASE(multisig_Solver1) +{ + // Tests Solver() that returns lists of keys that are + // required to satisfy a ScriptPubKey + // + // Also tests IsMine() and ExtractAddress() + // + // Note: ExtractAddress for the multisignature transactions + // always returns false for this release, even if you have + // one key that would satisfy an (a|b) or 2-of-3 keys needed + // to spend an escrow transaction. + // + CBasicKeyStore keystore, emptykeystore, partialkeystore; + CKey key[3]; + CBitcoinAddress keyaddr[3]; + for (int i = 0; i < 3; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keyaddr[i].SetPubKey(key[i].GetPubKey()); + } + partialkeystore.AddKey(key[0]); + + { + vector<valtype> solutions; + txnouttype whichType; + CScript s; + s << key[0].GetPubKey() << OP_CHECKSIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 1); + CBitcoinAddress addr; + BOOST_CHECK(ExtractAddress(s, addr)); + BOOST_CHECK(addr == keyaddr[0]); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + } + { + vector<valtype> solutions; + txnouttype whichType; + CScript s; + s << OP_DUP << OP_HASH160 << Hash160(key[0].GetPubKey()) << OP_EQUALVERIFY << OP_CHECKSIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 1); + CBitcoinAddress addr; + BOOST_CHECK(ExtractAddress(s, addr)); + BOOST_CHECK(addr == keyaddr[0]); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + } + { + vector<valtype> solutions; + txnouttype whichType; + CScript s; + s << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK_EQUAL(solutions.size(), 4); + CBitcoinAddress addr; + BOOST_CHECK(!ExtractAddress(s, addr)); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); + } + { + vector<valtype> solutions; + txnouttype whichType; + CScript s; + s << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK_EQUAL(solutions.size(), 4); + vector<CBitcoinAddress> addrs; + int nRequired; + BOOST_CHECK(ExtractAddresses(s, whichType, addrs, nRequired)); + BOOST_CHECK(addrs[0] == keyaddr[0]); + BOOST_CHECK(addrs[1] == keyaddr[1]); + BOOST_CHECK(nRequired = 1); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); + } + { + vector<valtype> solutions; + txnouttype whichType; + CScript s; + s << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 5); + } +} + +BOOST_AUTO_TEST_CASE(multisig_Sign) +{ + // Test SignSignature() (and therefore the version of Solver() that signs transactions) + CBasicKeyStore keystore; + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + } + + CScript a_and_b; + a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript a_or_b; + a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + + CTransaction txFrom; // Funding transaction + txFrom.vout.resize(3); + txFrom.vout[0].scriptPubKey = a_and_b; + txFrom.vout[1].scriptPubKey = a_or_b; + txFrom.vout[2].scriptPubKey = escrow; + + CTransaction txTo[3]; // Spending transaction + for (int i = 0; i < 3; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + } + + for (int i = 0; i < 3; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + } +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp new file mode 100644 index 0000000000..87462f765b --- /dev/null +++ b/src/test/rpc_tests.cpp @@ -0,0 +1,74 @@ +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> + +#include "base58.h" +#include "util.h" +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_writer_template.h" +#include "json/json_spirit_utils.h" + +using namespace std; +using namespace json_spirit; + +typedef Value(*rpcfn_type)(const Array& params, bool fHelp); +extern map<string, rpcfn_type> mapCallTable; + +BOOST_AUTO_TEST_SUITE(rpc_tests) + +static Array +createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) +{ + Array result; + result.push_back(nRequired); + Array addresses; + if (address1) addresses.push_back(address1); + if (address2) addresses.push_back(address1); + result.push_back(addresses); + return result; +} + +// This can be removed this when addmultisigaddress is enabled on main net: +struct TestNetFixture +{ + TestNetFixture() { fTestNet = true; } + ~TestNetFixture() { fTestNet = false; } +}; + +BOOST_FIXTURE_TEST_CASE(rpc_addmultisig, TestNetFixture) +{ + rpcfn_type addmultisig = mapCallTable["addmultisigaddress"]; + + // old, 65-byte-long: + const char* address1Hex = "0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8"; + // new, compressed: + const char* address2Hex = "0388c2037017c62240b6b72ac1a2a5f94da790596ebd06177c8572752922165cb4"; + + Value v; + CBitcoinAddress address; + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex, address2Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(2, address1Hex, address2Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_THROW(addmultisig(createArgs(0), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(1), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(2, address1Hex), false), runtime_error); + + BOOST_CHECK_THROW(addmultisig(createArgs(1, ""), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(1, "NotAValidPubkey"), false), runtime_error); + + string short1(address1Hex, address1Hex+sizeof(address1Hex)-2); // last byte missing + BOOST_CHECK_THROW(addmultisig(createArgs(2, short1.c_str()), false), runtime_error); + + string short2(address1Hex+2, address1Hex+sizeof(address1Hex)); // first byte missing + BOOST_CHECK_THROW(addmultisig(createArgs(2, short2.c_str()), false), runtime_error); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/script_P2SH_tests.cpp b/src/test/script_P2SH_tests.cpp new file mode 100644 index 0000000000..aa72c00092 --- /dev/null +++ b/src/test/script_P2SH_tests.cpp @@ -0,0 +1,330 @@ +#include <boost/assert.hpp> +#include <boost/assign/list_of.hpp> +#include <boost/assign/list_inserter.hpp> +#include <boost/assign/std/vector.hpp> +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> + +#include "../main.h" +#include "../script.h" +#include "../wallet.h" + +using namespace std; + +// Test routines internal to script.cpp: +extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); +extern bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, + bool fValidatePayToScriptHash, int nHashType); + +// Helpers: +static std::vector<unsigned char> +Serialize(const CScript& s) +{ + std::vector<unsigned char> sSerialized(s); + return sSerialized; +} + +static bool +Verify(const CScript& scriptSig, const CScript& scriptPubKey, bool fStrict) +{ + // Create dummy to/from transactions: + CTransaction txFrom; + txFrom.vout.resize(1); + txFrom.vout[0].scriptPubKey = scriptPubKey; + + CTransaction txTo; + txTo.vin.resize(1); + txTo.vout.resize(1); + txTo.vin[0].prevout.n = 0; + txTo.vin[0].prevout.hash = txFrom.GetHash(); + txTo.vin[0].scriptSig = scriptSig; + txTo.vout[0].nValue = 1; + + return VerifyScript(scriptSig, scriptPubKey, txTo, 0, fStrict, 0); +} + + +BOOST_AUTO_TEST_SUITE(script_P2SH_tests) + +BOOST_AUTO_TEST_CASE(sign) +{ + // Pay-to-script-hash looks like this: + // scriptSig: <sig> <sig...> <serialized_script> + // scriptPubKey: HASH160 <hash> EQUAL + + // Test SignSignature() (and therefore the version of Solver() that signs transactions) + CBasicKeyStore keystore; + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + } + + // 8 Scripts: checking all combinations of + // different keys, straight/P2SH, pubkey/pubkeyhash + CScript standardScripts[4]; + standardScripts[0] << key[0].GetPubKey() << OP_CHECKSIG; + standardScripts[1].SetBitcoinAddress(key[1].GetPubKey()); + standardScripts[2] << key[1].GetPubKey() << OP_CHECKSIG; + standardScripts[3].SetBitcoinAddress(key[2].GetPubKey()); + CScript evalScripts[4]; + for (int i = 0; i < 4; i++) + { + keystore.AddCScript(standardScripts[i]); + evalScripts[i].SetPayToScriptHash(standardScripts[i]); + } + + CTransaction txFrom; // Funding transaction: + txFrom.vout.resize(8); + for (int i = 0; i < 4; i++) + { + txFrom.vout[i].scriptPubKey = evalScripts[i]; + txFrom.vout[i+4].scriptPubKey = standardScripts[i]; + } + BOOST_CHECK(txFrom.IsStandard()); + + CTransaction txTo[8]; // Spending transactions + for (int i = 0; i < 8; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + BOOST_CHECK_MESSAGE(IsMine(keystore, txFrom.vout[i].scriptPubKey), strprintf("IsMine %d", i)); + } + for (int i = 0; i < 8; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + } + // All of the above should be OK, and the txTos have valid signatures + // Check to make sure signature verification fails if we use the wrong ScriptSig: + for (int i = 0; i < 8; i++) + for (int j = 0; j < 8; j++) + { + CScript sigSave = txTo[i].vin[0].scriptSig; + txTo[i].vin[0].scriptSig = txTo[j].vin[0].scriptSig; + bool sigOK = VerifySignature(txFrom, txTo[i], 0, true, 0); + if (i == j) + BOOST_CHECK_MESSAGE(sigOK, strprintf("VerifySignature %d %d", i, j)); + else + BOOST_CHECK_MESSAGE(!sigOK, strprintf("VerifySignature %d %d", i, j)); + txTo[i].vin[0].scriptSig = sigSave; + } +} + +BOOST_AUTO_TEST_CASE(norecurse) +{ + // Make sure only the outer pay-to-script-hash does the + // extra-validation thing: + CScript invalidAsScript; + invalidAsScript << OP_INVALIDOPCODE << OP_INVALIDOPCODE; + + CScript p2sh; + p2sh.SetPayToScriptHash(invalidAsScript); + + CScript scriptSig; + scriptSig << Serialize(invalidAsScript); + + // Should not verify, because it will try to execute OP_INVALIDOPCODE + BOOST_CHECK(!Verify(scriptSig, p2sh, true)); + + // Try to recurse, and verification should succeed because + // the inner HASH160 <> EQUAL should only check the hash: + CScript p2sh2; + p2sh2.SetPayToScriptHash(p2sh); + CScript scriptSig2; + scriptSig2 << Serialize(invalidAsScript) << Serialize(p2sh); + + BOOST_CHECK(Verify(scriptSig2, p2sh2, true)); +} + +BOOST_AUTO_TEST_CASE(set) +{ + // Test the CScript::Set* methods + CBasicKeyStore keystore; + CKey key[4]; + std::vector<CKey> keys; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keys.push_back(key[i]); + } + + CScript inner[4]; + inner[0].SetBitcoinAddress(key[0].GetPubKey()); + inner[1].SetMultisig(2, std::vector<CKey>(keys.begin(), keys.begin()+2)); + inner[2].SetMultisig(1, std::vector<CKey>(keys.begin(), keys.begin()+2)); + inner[3].SetMultisig(2, std::vector<CKey>(keys.begin(), keys.begin()+3)); + + CScript outer[4]; + for (int i = 0; i < 4; i++) + { + outer[i].SetPayToScriptHash(inner[i]); + keystore.AddCScript(inner[i]); + } + + CTransaction txFrom; // Funding transaction: + txFrom.vout.resize(4); + for (int i = 0; i < 4; i++) + { + txFrom.vout[i].scriptPubKey = outer[i]; + } + BOOST_CHECK(txFrom.IsStandard()); + + CTransaction txTo[4]; // Spending transactions + for (int i = 0; i < 4; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + txTo[i].vout[0].scriptPubKey = inner[i]; + BOOST_CHECK_MESSAGE(IsMine(keystore, txFrom.vout[i].scriptPubKey), strprintf("IsMine %d", i)); + } + for (int i = 0; i < 4; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + BOOST_CHECK_MESSAGE(txTo[i].IsStandard(), strprintf("txTo[%d].IsStandard", i)); + } +} + +BOOST_AUTO_TEST_CASE(is) +{ + // Test CScript::IsPayToScriptHash() + uint160 dummy; + CScript p2sh; + p2sh << OP_HASH160 << dummy << OP_EQUAL; + BOOST_CHECK(p2sh.IsPayToScriptHash()); + + // Not considered pay-to-script-hash if using one of the OP_PUSHDATA opcodes: + static const unsigned char direct[] = { OP_HASH160, 20, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(CScript(direct, direct+sizeof(direct)).IsPayToScriptHash()); + static const unsigned char pushdata1[] = { OP_HASH160, OP_PUSHDATA1, 20, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata1, pushdata1+sizeof(pushdata1)).IsPayToScriptHash()); + static const unsigned char pushdata2[] = { OP_HASH160, OP_PUSHDATA2, 20,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata2, pushdata2+sizeof(pushdata2)).IsPayToScriptHash()); + static const unsigned char pushdata4[] = { OP_HASH160, OP_PUSHDATA4, 20,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata4, pushdata4+sizeof(pushdata4)).IsPayToScriptHash()); + + CScript not_p2sh; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_HASH160 << dummy << dummy << OP_EQUAL; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_NOP << dummy << OP_EQUAL; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_HASH160 << dummy << OP_CHECKSIG; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); +} + +BOOST_AUTO_TEST_CASE(switchover) +{ + // Test switchover code + CScript notValid; + notValid << OP_11 << OP_12 << OP_EQUALVERIFY; + CScript scriptSig; + scriptSig << Serialize(notValid); + + CScript fund; + fund.SetPayToScriptHash(notValid); + + + // Validation should succeed under old rules (hash is correct): + BOOST_CHECK(Verify(scriptSig, fund, false)); + // Fail under new: + BOOST_CHECK(!Verify(scriptSig, fund, true)); +} + +BOOST_AUTO_TEST_CASE(AreInputsStandard) +{ + std::map<uint256, std::pair<CTxIndex, CTransaction> > mapInputs; + CBasicKeyStore keystore; + CKey key[3]; + vector<CKey> keys; + for (int i = 0; i < 3; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keys.push_back(key[i]); + } + + CTransaction txFrom; + txFrom.vout.resize(6); + + // First three are standard: + CScript pay1; pay1.SetBitcoinAddress(key[0].GetPubKey()); + keystore.AddCScript(pay1); + CScript payScriptHash1; payScriptHash1.SetPayToScriptHash(pay1); + CScript pay1of3; pay1of3.SetMultisig(1, keys); + + txFrom.vout[0].scriptPubKey = payScriptHash1; + txFrom.vout[1].scriptPubKey = pay1; + txFrom.vout[2].scriptPubKey = pay1of3; + + // Last three non-standard: + CScript empty; + keystore.AddCScript(empty); + txFrom.vout[3].scriptPubKey = empty; + // Can't use SetPayToScriptHash, it checks for the empty Script. So: + txFrom.vout[4].scriptPubKey << OP_HASH160 << Hash160(empty) << OP_EQUAL; + CScript oneOfEleven; + oneOfEleven << OP_1; + for (int i = 0; i < 11; i++) + oneOfEleven << key[0].GetPubKey(); + oneOfEleven << OP_11 << OP_CHECKMULTISIG; + txFrom.vout[5].scriptPubKey.SetPayToScriptHash(oneOfEleven); + + mapInputs[txFrom.GetHash()] = make_pair(CTxIndex(), txFrom); + + CTransaction txTo; + txTo.vout.resize(1); + txTo.vout[0].scriptPubKey.SetBitcoinAddress(key[1].GetPubKey()); + + txTo.vin.resize(3); + txTo.vin[0].prevout.n = 0; + txTo.vin[0].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 0)); + txTo.vin[1].prevout.n = 1; + txTo.vin[1].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 1)); + txTo.vin[2].prevout.n = 2; + txTo.vin[2].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 2)); + + BOOST_CHECK(txTo.AreInputsStandard(mapInputs)); + BOOST_CHECK_EQUAL(txTo.GetP2SHSigOpCount(mapInputs), 1); + + // Make sure adding crap to the scriptSigs makes them non-standard: + for (int i = 0; i < 3; i++) + { + CScript t = txTo.vin[i].scriptSig; + txTo.vin[i].scriptSig = (CScript() << 11) + t; + BOOST_CHECK(!txTo.AreInputsStandard(mapInputs)); + txTo.vin[i].scriptSig = t; + } + + CTransaction txToNonStd; + txToNonStd.vout.resize(1); + txToNonStd.vout[0].scriptPubKey.SetBitcoinAddress(key[1].GetPubKey()); + txToNonStd.vin.resize(2); + txToNonStd.vin[0].prevout.n = 4; + txToNonStd.vin[0].prevout.hash = txFrom.GetHash(); + txToNonStd.vin[0].scriptSig << Serialize(empty); + txToNonStd.vin[1].prevout.n = 5; + txToNonStd.vin[1].prevout.hash = txFrom.GetHash(); + txToNonStd.vin[1].scriptSig << OP_0 << Serialize(oneOfEleven); + + BOOST_CHECK(!txToNonStd.AreInputsStandard(mapInputs)); + BOOST_CHECK_EQUAL(txToNonStd.GetP2SHSigOpCount(mapInputs), 11); + + txToNonStd.vin[0].scriptSig.clear(); + BOOST_CHECK(!txToNonStd.AreInputsStandard(mapInputs)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index 13feb86b97..493ea69d93 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -2,13 +2,13 @@ #include <boost/test/unit_test.hpp> #include <boost/foreach.hpp> -#include "../main.h" -#include "../wallet.h" +#include "main.h" +#include "wallet.h" using namespace std; extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); -extern bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, int nHashType); -extern bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, int nHashType); +extern bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, + bool fValidatePayToScriptHash, int nHashType); BOOST_AUTO_TEST_SUITE(script_tests) @@ -72,9 +72,9 @@ sign_multisig(CScript scriptPubKey, CKey key, CTransaction transaction) BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12) { CKey key1, key2, key3; - key1.MakeNewKey(); - key2.MakeNewKey(); - key3.MakeNewKey(); + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); CScript scriptPubKey12; scriptPubKey12 << OP_1 << key1.GetPubKey() << key2.GetPubKey() << OP_2 << OP_CHECKMULTISIG; @@ -91,24 +91,24 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12) txTo12.vout[0].nValue = 1; CScript goodsig1 = sign_multisig(scriptPubKey12, key1, txTo12); - BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, 0)); + BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, true, 0)); txTo12.vout[0].nValue = 2; - BOOST_CHECK(!VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, 0)); + BOOST_CHECK(!VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, true, 0)); CScript goodsig2 = sign_multisig(scriptPubKey12, key2, txTo12); - BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey12, txTo12, 0, 0)); + BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey12, txTo12, 0, true, 0)); CScript badsig1 = sign_multisig(scriptPubKey12, key3, txTo12); - BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey12, txTo12, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey12, txTo12, 0, true, 0)); } BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23) { CKey key1, key2, key3, key4; - key1.MakeNewKey(); - key2.MakeNewKey(); - key3.MakeNewKey(); - key4.MakeNewKey(); + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); + key4.MakeNewKey(false); CScript scriptPubKey23; scriptPubKey23 << OP_2 << key1.GetPubKey() << key2.GetPubKey() << key3.GetPubKey() << OP_3 << OP_CHECKMULTISIG; @@ -127,46 +127,46 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23) std::vector<CKey> keys; keys.push_back(key1); keys.push_back(key2); CScript goodsig1 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key1); keys.push_back(key3); CScript goodsig2 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key2); keys.push_back(key3); CScript goodsig3 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(VerifyScript(goodsig3, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(VerifyScript(goodsig3, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key2); keys.push_back(key2); // Can't re-use sig CScript badsig1 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key2); keys.push_back(key1); // sigs must be in correct order CScript badsig2 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig2, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig2, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key3); keys.push_back(key2); // sigs must be in correct order CScript badsig3 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig3, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig3, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key4); keys.push_back(key2); // sigs must match pubkeys CScript badsig4 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig4, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig4, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); keys.push_back(key1); keys.push_back(key4); // sigs must match pubkeys CScript badsig5 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig5, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig5, scriptPubKey23, txTo23, 0, true, 0)); keys.clear(); // Must have signatures CScript badsig6 = sign_multisig(scriptPubKey23, keys, txTo23); - BOOST_CHECK(!VerifyScript(badsig6, scriptPubKey23, txTo23, 0, 0)); + BOOST_CHECK(!VerifyScript(badsig6, scriptPubKey23, txTo23, 0, true, 0)); } diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp new file mode 100644 index 0000000000..d301313a9d --- /dev/null +++ b/src/test/sigopcount_tests.cpp @@ -0,0 +1,60 @@ +#include <vector> +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> + +#include "script.h" +#include "key.h" + +using namespace std; + +// Helpers: +static std::vector<unsigned char> +Serialize(const CScript& s) +{ + std::vector<unsigned char> sSerialized(s); + return sSerialized; +} + +BOOST_AUTO_TEST_SUITE(sigopcount_tests) + +BOOST_AUTO_TEST_CASE(GetSigOpCount) +{ + // Test CScript::GetSigOpCount() + CScript s1; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0); + + uint160 dummy; + s1 << OP_1 << dummy << dummy << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2); + s1 << OP_IF << OP_CHECKSIG << OP_ENDIF; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21); + + CScript p2sh; + p2sh.SetPayToScriptHash(s1); + CScript scriptSig; + scriptSig << OP_0 << Serialize(s1); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3); + + std::vector<CKey> keys; + for (int i = 0; i < 3; i++) + { + CKey k; + k.MakeNewKey(true); + keys.push_back(k); + } + CScript s2; + s2.SetMultisig(1, keys); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20); + + p2sh.SetPayToScriptHash(s2); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0); + CScript scriptSig2; + scriptSig2 << OP_1 << dummy << dummy << Serialize(s2); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp index 8863aad478..7ff7545ab4 100644 --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -1,21 +1,27 @@ #define BOOST_TEST_MODULE Bitcoin Test Suite #include <boost/test/unit_test.hpp> -#include "../main.h" -#include "../wallet.h" - -#include "uint160_tests.cpp" -#include "uint256_tests.cpp" -#include "script_tests.cpp" -#include "transaction_tests.cpp" -#include "DoS_tests.cpp" -#include "base64_tests.cpp" -#include "util_tests.cpp" -#include "base58_tests.cpp" -#include "miner_tests.cpp" +#include "main.h" +#include "wallet.h" CWallet* pwalletMain; +extern bool fPrintToConsole; +struct TestingSetup { + TestingSetup() { + fPrintToConsole = true; // don't want to write to debug.log file + pwalletMain = new CWallet(); + RegisterWallet(pwalletMain); + } + ~TestingSetup() + { + delete pwalletMain; + pwalletMain = NULL; + } +}; + +BOOST_GLOBAL_FIXTURE(TestingSetup); + void Shutdown(void* parg) { exit(0); diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index e6eb0f054f..99163e55f2 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -1,7 +1,7 @@ #include <boost/test/unit_test.hpp> -#include "../main.h" -#include "../wallet.h" +#include "main.h" +#include "wallet.h" using namespace std; @@ -22,4 +22,99 @@ BOOST_AUTO_TEST_CASE(basic_transaction_tests) BOOST_CHECK_MESSAGE(!tx.CheckTransaction(), "Transaction with duplicate txins should be invalid."); } +// +// Helper: create two dummy transactions, each with +// two outputs. The first has 11 and 50 CENT outputs +// paid to a TX_PUBKEY, the second 21 and 22 CENT outputs +// paid to a TX_PUBKEYHASH. +// +static std::vector<CTransaction> +SetupDummyInputs(CBasicKeyStore& keystoreRet, MapPrevTx& inputsRet) +{ + std::vector<CTransaction> dummyTransactions; + dummyTransactions.resize(2); + + // Add some keys to the keystore: + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(i % 2); + keystoreRet.AddKey(key[i]); + } + + // Create some dummy input transactions + dummyTransactions[0].vout.resize(2); + dummyTransactions[0].vout[0].nValue = 11*CENT; + dummyTransactions[0].vout[0].scriptPubKey << key[0].GetPubKey() << OP_CHECKSIG; + dummyTransactions[0].vout[1].nValue = 50*CENT; + dummyTransactions[0].vout[1].scriptPubKey << key[1].GetPubKey() << OP_CHECKSIG; + inputsRet[dummyTransactions[0].GetHash()] = make_pair(CTxIndex(), dummyTransactions[0]); + + dummyTransactions[1].vout.resize(2); + dummyTransactions[1].vout[0].nValue = 21*CENT; + dummyTransactions[1].vout[0].scriptPubKey.SetBitcoinAddress(key[2].GetPubKey()); + dummyTransactions[1].vout[1].nValue = 22*CENT; + dummyTransactions[1].vout[1].scriptPubKey.SetBitcoinAddress(key[3].GetPubKey()); + inputsRet[dummyTransactions[1].GetHash()] = make_pair(CTxIndex(), dummyTransactions[1]); + + return dummyTransactions; +} + +BOOST_AUTO_TEST_CASE(test_Get) +{ + CBasicKeyStore keystore; + MapPrevTx dummyInputs; + std::vector<CTransaction> dummyTransactions = SetupDummyInputs(keystore, dummyInputs); + + CTransaction t1; + t1.vin.resize(3); + t1.vin[0].prevout.hash = dummyTransactions[0].GetHash(); + t1.vin[0].prevout.n = 1; + t1.vin[0].scriptSig << std::vector<unsigned char>(65, 0); + t1.vin[1].prevout.hash = dummyTransactions[1].GetHash(); + t1.vin[1].prevout.n = 0; + t1.vin[1].scriptSig << std::vector<unsigned char>(65, 0) << std::vector<unsigned char>(33, 4); + t1.vin[2].prevout.hash = dummyTransactions[1].GetHash(); + t1.vin[2].prevout.n = 1; + t1.vin[2].scriptSig << std::vector<unsigned char>(65, 0) << std::vector<unsigned char>(33, 4); + t1.vout.resize(2); + t1.vout[0].nValue = 90*CENT; + t1.vout[0].scriptPubKey << OP_1; + + BOOST_CHECK(t1.AreInputsStandard(dummyInputs)); + BOOST_CHECK_EQUAL(t1.GetValueIn(dummyInputs), (50+21+22)*CENT); + + // Adding extra junk to the scriptSig should make it non-standard: + t1.vin[0].scriptSig << OP_11; + BOOST_CHECK(!t1.AreInputsStandard(dummyInputs)); + + // ... as should not having enough: + t1.vin[0].scriptSig = CScript(); + BOOST_CHECK(!t1.AreInputsStandard(dummyInputs)); +} + +BOOST_AUTO_TEST_CASE(test_GetThrow) +{ + CBasicKeyStore keystore; + MapPrevTx dummyInputs; + std::vector<CTransaction> dummyTransactions = SetupDummyInputs(keystore, dummyInputs); + + MapPrevTx missingInputs; + + CTransaction t1; + t1.vin.resize(3); + t1.vin[0].prevout.hash = dummyTransactions[0].GetHash(); + t1.vin[0].prevout.n = 0; + t1.vin[1].prevout.hash = dummyTransactions[1].GetHash();; + t1.vin[1].prevout.n = 0; + t1.vin[2].prevout.hash = dummyTransactions[1].GetHash();; + t1.vin[2].prevout.n = 1; + t1.vout.resize(2); + t1.vout[0].nValue = 90*CENT; + t1.vout[0].scriptPubKey << OP_1; + + BOOST_CHECK_THROW(t1.AreInputsStandard(missingInputs), runtime_error); + BOOST_CHECK_THROW(t1.GetValueIn(missingInputs), runtime_error); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/uint160_tests.cpp b/src/test/uint160_tests.cpp index 42c8275afe..35cb35b25a 100644 --- a/src/test/uint160_tests.cpp +++ b/src/test/uint160_tests.cpp @@ -1,6 +1,6 @@ #include <boost/test/unit_test.hpp> -#include "../uint256.h" +#include "uint256.h" BOOST_AUTO_TEST_SUITE(uint160_tests) diff --git a/src/test/uint256_tests.cpp b/src/test/uint256_tests.cpp index c5d45e215e..efdc8a6aeb 100644 --- a/src/test/uint256_tests.cpp +++ b/src/test/uint256_tests.cpp @@ -1,6 +1,6 @@ #include <boost/test/unit_test.hpp> -#include "../uint256.h" +#include "uint256.h" BOOST_AUTO_TEST_SUITE(uint256_tests) diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index 8afc85c507..94c0c77a44 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -2,12 +2,33 @@ #include <boost/test/unit_test.hpp> #include <boost/foreach.hpp> -#include "../util.h" +#include "main.h" +#include "wallet.h" +#include "util.h" using namespace std; BOOST_AUTO_TEST_SUITE(util_tests) +BOOST_AUTO_TEST_CASE(util_criticalsection) +{ + CCriticalSection cs; + + do { + CRITICAL_BLOCK(cs) + break; + + BOOST_ERROR("break was swallowed!"); + } while(0); + + do { + TRY_CRITICAL_BLOCK(cs) + break; + + BOOST_ERROR("break was swallowed!"); + } while(0); +} + BOOST_AUTO_TEST_CASE(util_MedianFilter) { CMedianFilter<int> filter(5, 15); @@ -211,4 +232,19 @@ BOOST_AUTO_TEST_CASE(util_ParseMoney) BOOST_CHECK(!ParseMoney("92233720368.54775808", ret)); } +BOOST_AUTO_TEST_CASE(util_IsHex) +{ + BOOST_CHECK(IsHex("00")); + BOOST_CHECK(IsHex("00112233445566778899aabbccddeeffAABBCCDDEEFF")); + BOOST_CHECK(IsHex("ff")); + BOOST_CHECK(IsHex("FF")); + + BOOST_CHECK(!IsHex("")); + BOOST_CHECK(!IsHex("0")); + BOOST_CHECK(!IsHex("a")); + BOOST_CHECK(!IsHex("eleven")); + BOOST_CHECK(!IsHex("00xx00")); + BOOST_CHECK(!IsHex("0x0000")); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/qtui.h b/src/ui_interface.h index 17fc44e94b..2e29f2af16 100644 --- a/src/qtui.h +++ b/src/ui_interface.h @@ -1,14 +1,12 @@ // Copyright (c) 2010 Satoshi Nakamoto // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_EXTERNUI_H -#define BITCOIN_EXTERNUI_H +#ifndef BITCOIN_UI_INTERFACE_H +#define BITCOIN_UI_INTERFACE_H #include <string> -#include <boost/function/function0.hpp> -#include "wallet.h" +#include "util.h" // for int64 -typedef void wxWindow; #define wxYES 0x00000002 #define wxOK 0x00000004 #define wxNO 0x00000008 @@ -35,14 +33,17 @@ typedef void wxWindow; #define wxHELP 0x00008000 #define wxMORE 0x00010000 #define wxSETUP 0x00020000 +// Force blocking, modal message box dialog (not just notification) +#define wxMODAL 0x00040000 -extern int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1); -#define wxMessageBox MyMessageBox -extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1); -extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent); -extern void CalledSetStatusBar(const std::string& strText, int nField); -extern void UIThreadCall(boost::function0<void> fn); +/* These UI communication functions are implemented in bitcoin.cpp (for ui) and noui.cpp (no ui) */ + +extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK); +extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption); +extern void ThreadSafeHandleURL(const std::string& strURL); extern void MainFrameRepaint(); +extern void AddressBookRepaint(); +extern void QueueShutdown(); extern void InitMessage(const std::string &message); extern std::string _(const char* psz); diff --git a/src/uint256.h b/src/uint256.h index 3e20201387..cfc2eb128e 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_UINT256_H @@ -11,24 +11,17 @@ #include <string> #include <vector> -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else typedef long long int64; typedef unsigned long long uint64; -#endif -#if defined(_MSC_VER) && _MSC_VER < 1300 -#define for if (false) ; else for -#endif inline int Testuint256AdHoc(std::vector<std::string> vArg); -// We have to keep a separate base class without constructors -// so the compiler will let us use it in a union +/** Base class without constructors for uint256 and uint160. + * This makes the compiler let u use it in a union. + */ template<unsigned int BITS> class base_uint { @@ -100,13 +93,6 @@ public: return *this; } - base_uint& operator&=(uint64 b) - { - pn[0] &= (unsigned int)b; - pn[1] &= (unsigned int)(b >> 32); - return *this; - } - base_uint& operator|=(uint64 b) { pn[0] |= (unsigned int)b; @@ -363,20 +349,24 @@ public: return sizeof(pn); } + uint64 Get64(int n=0) const + { + return pn[2*n] | (uint64)pn[2*n+1] << 32; + } - unsigned int GetSerializeSize(int nType=0, int nVersion=VERSION) const + unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const { return sizeof(pn); } template<typename Stream> - void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const + void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const { s.write((char*)pn, sizeof(pn)); } template<typename Stream> - void Unserialize(Stream& s, int nType=0, int nVersion=VERSION) + void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) { s.read((char*)pn, sizeof(pn)); } @@ -404,6 +394,7 @@ typedef base_uint<256> base_uint256; // uint160 // +/** 160-bit unsigned integer */ class uint160 : public base_uint160 { public: @@ -518,6 +509,7 @@ inline const uint160 operator-(const uint160& a, const uint160& b) { return // uint256 // +/** 256-bit unsigned integer */ class uint256 : public base_uint256 { public: @@ -631,7 +623,7 @@ inline const uint256 operator-(const uint256& a, const uint256& b) { return - +#ifdef TEST_UINT256 inline int Testuint256AdHoc(std::vector<std::string> vArg) { @@ -764,3 +756,5 @@ inline int Testuint256AdHoc(std::vector<std::string> vArg) } #endif + +#endif diff --git a/src/util.cpp b/src/util.cpp index 236c7f7c44..5c47551526 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,9 +1,10 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" #include "strlcpy.h" +#include <boost/algorithm/string/join.hpp> #include <boost/program_options/detail/config_file.hpp> #include <boost/program_options/parsers.hpp> #include <boost/filesystem.hpp> @@ -30,17 +31,7 @@ string strMiscWarning; bool fTestNet = false; bool fNoListen = false; bool fLogTimestamps = false; - - - - -// Workaround for "multiple definition of `_tls_used'" -// http://svn.boost.org/trac/boost/ticket/4258 -extern "C" void tss_cleanup_implemented() { } - - - - +CMedianFilter<int64> vTimeOffsets(200,0); // Init openssl library multithreading support static boost::interprocess::interprocess_mutex** ppmutexOpenSSL; @@ -132,7 +123,7 @@ uint64 GetRand(uint64 nMax) // The range of the random source must be a multiple of the modulus // to give every possible output value an equal possibility - uint64 nRange = (UINT64_MAX / nMax) * nMax; + uint64 nRange = (std::numeric_limits<uint64>::max() / nMax) * nMax; uint64 nRand = 0; do RAND_bytes((unsigned char*)&nRand, sizeof(nRand)); @@ -264,7 +255,7 @@ int my_snprintf(char* buffer, size_t limit, const char* format, ...) return ret; } -string strprintf(const std::string &format, ...) +string real_strprintf(const std::string &format, int dummy, ...) { char buffer[50000]; char* p = buffer; @@ -273,7 +264,7 @@ string strprintf(const std::string &format, ...) loop { va_list arg_ptr; - va_start(arg_ptr, format); + va_start(arg_ptr, dummy); ret = _vsnprintf(p, limit, format.c_str(), arg_ptr); va_end(arg_ptr); if (ret >= 0 && ret < limit) @@ -291,13 +282,13 @@ string strprintf(const std::string &format, ...) return str; } -bool error(const std::string &format, ...) +bool error(const char *format, ...) { char buffer[50000]; int limit = sizeof(buffer); va_list arg_ptr; va_start(arg_ptr, format); - int ret = _vsnprintf(buffer, limit, format.c_str(), arg_ptr); + int ret = _vsnprintf(buffer, limit, format, arg_ptr); va_end(arg_ptr); if (ret < 0 || ret >= limit) { @@ -399,26 +390,36 @@ bool ParseMoney(const char* pszIn, int64& nRet) } -vector<unsigned char> ParseHex(const char* psz) +static char phexdigit[256] = +{ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + 0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1, + -1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1 + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, }; + +bool IsHex(const string& str) { - static char phexdigit[256] = - { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1, - -1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1 - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, }; + BOOST_FOREACH(unsigned char c, str) + { + if (phexdigit[c] < 0) + return false; + } + return (str.size() > 0) && (str.size()%2 == 0); +} +vector<unsigned char> ParseHex(const char* psz) +{ // convert hex dump to vector vector<unsigned char> vch; loop @@ -443,7 +444,22 @@ vector<unsigned char> ParseHex(const string& str) return ParseHex(str.c_str()); } -void ParseParameters(int argc, char* argv[]) +static void InterpretNegativeSetting(string name, map<string, string>& mapSettingsRet) +{ + // interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1) as long as -foo not set + if (name.find("-no") == 0) + { + std::string positive("-"); + positive.append(name.begin()+3, name.end()); + if (mapSettingsRet.count(positive) == 0) + { + bool value = !GetBoolArg(name); + mapSettingsRet[positive] = (value ? "1" : "0"); + } + } +} + +void ParseParameters(int argc, const char*const argv[]) { mapArgs.clear(); mapMultiArgs.clear(); @@ -464,11 +480,72 @@ void ParseParameters(int argc, char* argv[]) #endif if (psz[0] != '-') break; + mapArgs[psz] = pszValue; mapMultiArgs[psz].push_back(pszValue); } + + // New 0.6 features: + BOOST_FOREACH(const PAIRTYPE(string,string)& entry, mapArgs) + { + string name = entry.first; + + // interpret --foo as -foo (as long as both are not set) + if (name.find("--") == 0) + { + std::string singleDash(name.begin()+1, name.end()); + if (mapArgs.count(singleDash) == 0) + mapArgs[singleDash] = entry.second; + name = singleDash; + } + + // interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1) as long as -foo not set + InterpretNegativeSetting(name, mapArgs); + } +} + +std::string GetArg(const std::string& strArg, const std::string& strDefault) +{ + if (mapArgs.count(strArg)) + return mapArgs[strArg]; + return strDefault; +} + +int64 GetArg(const std::string& strArg, int64 nDefault) +{ + if (mapArgs.count(strArg)) + return atoi64(mapArgs[strArg]); + return nDefault; +} + +bool GetBoolArg(const std::string& strArg, bool fDefault) +{ + if (mapArgs.count(strArg)) + { + if (mapArgs[strArg].empty()) + return true; + return (atoi(mapArgs[strArg]) != 0); + } + return fDefault; +} + +bool SoftSetArg(const std::string& strArg, const std::string& strValue) +{ + if (mapArgs.count(strArg)) + return false; + mapArgs[strArg] = strValue; + return true; +} + +bool SoftSetBoolArg(const std::string& strArg, bool fValue) +{ + if (fValue) + return SoftSetArg(strArg, std::string("1")); + else + return SoftSetArg(strArg, std::string("0")); } + string EncodeBase64(const unsigned char* pch, size_t len) { static const char *pbase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @@ -680,17 +757,6 @@ void PrintException(std::exception* pex, const char* pszThread) throw; } -void ThreadOneMessageBox(string strMessage) -{ - // Skip message boxes if one is already open - static bool fMessageBoxOpen; - if (fMessageBoxOpen) - return; - fMessageBoxOpen = true; - ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION); - fMessageBoxOpen = false; -} - void PrintExceptionContinue(std::exception* pex, const char* pszThread) { char pszMessage[10000]; @@ -700,46 +766,23 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread) strMiscWarning = pszMessage; } - - - - - - - #ifdef WIN32 -typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate); - string MyGetSpecialFolderPath(int nFolder, bool fCreate) { - char pszPath[MAX_PATH+100] = ""; - - // SHGetSpecialFolderPath isn't always available on old Windows versions - HMODULE hShell32 = LoadLibraryA("shell32.dll"); - if (hShell32) + char pszPath[MAX_PATH] = ""; + if(SHGetSpecialFolderPathA(NULL, pszPath, nFolder, fCreate)) { - PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath = - (PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA"); - if (pSHGetSpecialFolderPath) - (*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate); - FreeModule(hShell32); + return pszPath; } - - // Backup option - if (pszPath[0] == '\0') + else if (nFolder == CSIDL_STARTUP) { - if (nFolder == CSIDL_STARTUP) - { - strcpy(pszPath, getenv("USERPROFILE")); - strcat(pszPath, "\\Start Menu\\Programs\\Startup"); - } - else if (nFolder == CSIDL_APPDATA) - { - strcpy(pszPath, getenv("APPDATA")); - } + return string(getenv("USERPROFILE")) + "\\Start Menu\\Programs\\Startup"; } - - return pszPath; + else if (nFolder == CSIDL_APPDATA) + { + return getenv("APPDATA"); + } + return ""; } #endif @@ -821,15 +864,28 @@ string GetConfigFile() return pathConfig.string(); } -void ReadConfigFile(map<string, string>& mapSettingsRet, +bool ReadConfigFile(map<string, string>& mapSettingsRet, map<string, vector<string> >& mapMultiSettingsRet) { namespace fs = boost::filesystem; namespace pod = boost::program_options::detail; + if (mapSettingsRet.count("-datadir")) + { + if (fs::is_directory(fs::system_complete(mapSettingsRet["-datadir"]))) + { + fs::path pathDataDir = fs::system_complete(mapSettingsRet["-datadir"]); + strlcpy(pszSetDataDir, pathDataDir.string().c_str(), sizeof(pszSetDataDir)); + } + else + { + return false; + } + } + fs::ifstream streamConfig(GetConfigFile()); if (!streamConfig.good()) - return; + return true; // No bitcoin.conf file is OK set<string> setOptions; setOptions.insert("*"); @@ -839,9 +895,14 @@ void ReadConfigFile(map<string, string>& mapSettingsRet, // Don't overwrite existing settings so command line settings override bitcoin.conf string strKey = string("-") + it->string_key; if (mapSettingsRet.count(strKey) == 0) + { mapSettingsRet[strKey] = it->value[0]; + // interpret nofoo=1 as foo=0 (and nofoo=0 as foo=1) as long as foo not set) + InterpretNegativeSetting(strKey, mapSettingsRet); + } mapMultiSettingsRet[strKey].push_back(it->value[0]); } + return true; } string GetPidFile() @@ -930,25 +991,22 @@ int64 GetAdjustedTime() return GetTime() + nTimeOffset; } -void AddTimeData(unsigned int ip, int64 nTime) +void AddTimeData(const CNetAddr& ip, int64 nTime) { int64 nOffsetSample = nTime - GetTime(); // Ignore duplicates - static set<unsigned int> setKnown; + static set<CNetAddr> setKnown; if (!setKnown.insert(ip).second) return; // Add data - static vector<int64> vTimeOffsets; - if (vTimeOffsets.empty()) - vTimeOffsets.push_back(0); - vTimeOffsets.push_back(nOffsetSample); - printf("Added time data, samples %d, offset %+"PRI64d" (%+"PRI64d" minutes)\n", vTimeOffsets.size(), vTimeOffsets.back(), vTimeOffsets.back()/60); + vTimeOffsets.input(nOffsetSample); + printf("Added time data, samples %d, offset %+"PRI64d" (%+"PRI64d" minutes)\n", vTimeOffsets.size(), nOffsetSample, nOffsetSample/60); if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) { - sort(vTimeOffsets.begin(), vTimeOffsets.end()); - int64 nMedian = vTimeOffsets[vTimeOffsets.size()/2]; + int64 nMedian = vTimeOffsets.median(); + std::vector<int64> vSorted = vTimeOffsets.sorted(); // Only let other nodes change our time by so much if (abs64(nMedian) < 70 * 60) { @@ -963,7 +1021,7 @@ void AddTimeData(unsigned int ip, int64 nTime) { // If nobody has a time different than ours but within 5 minutes of ours, give a warning bool fMatch = false; - BOOST_FOREACH(int64 nOffset, vTimeOffsets) + BOOST_FOREACH(int64 nOffset, vSorted) if (nOffset != 0 && abs64(nOffset) < 5 * 60) fMatch = true; @@ -973,13 +1031,16 @@ void AddTimeData(unsigned int ip, int64 nTime) string strMessage = _("Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly."); strMiscWarning = strMessage; printf("*** %s\n", strMessage.c_str()); - boost::thread(boost::bind(ThreadSafeMessageBox, strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION, (wxWindow*)NULL, -1, -1)); + ThreadSafeMessageBox(strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION); } } } - BOOST_FOREACH(int64 n, vTimeOffsets) - printf("%+"PRI64d" ", n); - printf("| nTimeOffset = %+"PRI64d" (%+"PRI64d" minutes)\n", nTimeOffset, nTimeOffset/60); + if (fDebug) { + BOOST_FOREACH(int64 n, vSorted) + printf("%+"PRI64d" ", n); + printf("| "); + } + printf("nTimeOffset = %+"PRI64d" (%+"PRI64d" minutes)\n", nTimeOffset, nTimeOffset/60); } } @@ -990,7 +1051,6 @@ void AddTimeData(unsigned int ip, int64 nTime) - string FormatVersion(int nVersion) { if (nVersion%100 == 0) @@ -1001,7 +1061,7 @@ string FormatVersion(int nVersion) string FormatFullVersion() { - string s = FormatVersion(VERSION) + pszSubVer; + string s = FormatVersion(CLIENT_VERSION); if (VERSION_IS_BETA) { s += "-"; s += _("beta"); @@ -1009,6 +1069,17 @@ string FormatFullVersion() return s; } +// Format the subversion field according to BIP 14 spec (https://en.bitcoin.it/wiki/BIP_0014) +std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector<std::string>& comments) +{ + std::ostringstream ss; + ss << "/"; + ss << name << ":" << FormatVersion(nClientVersion); + if (!comments.empty()) + ss << "(" << boost::algorithm::join(comments, "; ") << ")"; + ss << "/"; + return ss.str(); +} @@ -1115,7 +1186,18 @@ static void pop_lock() void CCriticalSection::Enter(const char* pszName, const char* pszFile, int nLine) { push_lock(this, CLockLocation(pszName, pszFile, nLine)); +#ifdef DEBUG_LOCKCONTENTION + bool result = mutex.try_lock(); + if (!result) + { + printf("LOCKCONTENTION: %s\n", pszName); + printf("Locker: %s:%d\n", pszFile, nLine); + mutex.lock(); + printf("Locked\n"); + } +#else mutex.lock(); +#endif } void CCriticalSection::Leave() { @@ -1132,9 +1214,19 @@ bool CCriticalSection::TryEnter(const char* pszName, const char* pszFile, int nL #else -void CCriticalSection::Enter(const char*, const char*, int) +void CCriticalSection::Enter(const char* pszName, const char* pszFile, int nLine) { +#ifdef DEBUG_LOCKCONTENTION + bool result = mutex.try_lock(); + if (!result) + { + printf("LOCKCONTENTION: %s\n", pszName); + printf("Locker: %s:%d\n", pszFile, nLine); + mutex.lock(); + } +#else mutex.lock(); +#endif } void CCriticalSection::Leave() @@ -1149,3 +1241,4 @@ bool CCriticalSection::TryEnter(const char*, const char*, int) } #endif /* DEBUG_LOCKORDER */ + diff --git a/src/util.h b/src/util.h index 178923727a..e4cf83f433 100644 --- a/src/util.h +++ b/src/util.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_UTIL_H @@ -11,6 +11,8 @@ #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> +#else +typedef int pid_t; /* define for windows compatiblity */ #endif #include <map> #include <vector> @@ -24,20 +26,10 @@ #include <openssl/sha.h> #include <openssl/ripemd.h> +#include "netbase.h" -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else typedef long long int64; typedef unsigned long long uint64; -#endif -#if defined(_MSC_VER) && _MSC_VER < 1300 -#define for if (false) ; else for -#endif -#ifndef _MSC_VER -#define __forceinline inline -#endif #define loop for (;;) #define BEGIN(a) ((char*)&(a)) @@ -53,7 +45,7 @@ typedef unsigned long long uint64; #define snprintf my_snprintf #ifndef PRI64d -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MSVCRT__) +#if defined(_MSC_VER) || defined(__MSVCRT__) #define PRI64d "I64d" #define PRI64u "I64u" #define PRI64x "I64x" @@ -84,58 +76,22 @@ T* alignup(T* p) #ifdef WIN32 #define MSG_NOSIGNAL 0 #define MSG_DONTWAIT 0 -#ifndef UINT64_MAX -#define UINT64_MAX _UI64_MAX -#define INT64_MAX _I64_MAX -#define INT64_MIN _I64_MIN -#endif + #ifndef S_IRUSR #define S_IRUSR 0400 #define S_IWUSR 0200 #endif #define unlink _unlink -typedef int socklen_t; #else -#define WSAGetLastError() errno -#define WSAEINVAL EINVAL -#define WSAEALREADY EALREADY -#define WSAEWOULDBLOCK EWOULDBLOCK -#define WSAEMSGSIZE EMSGSIZE -#define WSAEINTR EINTR -#define WSAEINPROGRESS EINPROGRESS -#define WSAEADDRINUSE EADDRINUSE -#define WSAENOTSOCK EBADF -#define INVALID_SOCKET (SOCKET)(~0) -#define SOCKET_ERROR -1 -typedef u_int SOCKET; #define _vsnprintf(a,b,c,d) vsnprintf(a,b,c,d) #define strlwr(psz) to_lower(psz) #define _strlwr(psz) to_lower(psz) #define MAX_PATH 1024 -#define Beep(n1,n2) (0) inline void Sleep(int64 n) { - boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n)); -} -#endif - -inline int myclosesocket(SOCKET& hSocket) -{ - if (hSocket == INVALID_SOCKET) - return WSAENOTSOCK; -#ifdef WIN32 - int ret = closesocket(hSocket); -#else - int ret = close(hSocket); -#endif - hSocket = INVALID_SOCKET; - return ret; -} -#define closesocket(s) myclosesocket(s) -#if !defined(QT_GUI) -inline const char* _(const char* psz) -{ - return psz; + /*Boost has a year 2038 problem— if the request sleep time is past epoch+2^31 seconds the sleep returns instantly. + So we clamp our sleeps here to 10 years and hope that boost is fixed by 2028.*/ + boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n>315576000000LL?315576000000LL:n)); } #endif @@ -167,8 +123,15 @@ void RandAddSeed(); void RandAddSeedPerfmon(); int OutputDebugStringF(const char* pszFormat, ...); int my_snprintf(char* buffer, size_t limit, const char* format, ...); -std::string strprintf(const std::string &format, ...); -bool error(const std::string &format, ...); + +/* It is not allowed to use va_start with a pass-by-reference argument. + (C++ standard, 18.7, paragraph 3). Use a dummy argument to work around this, and use a + macro to keep similar semantics. +*/ +std::string real_strprintf(const std::string &format, int dummy, ...); +#define strprintf(format, ...) real_strprintf(format, 0, __VA_ARGS__) + +bool error(const char *format, ...); void LogException(std::exception* pex, const char* pszThread); void PrintException(std::exception* pex, const char* pszThread); void PrintExceptionContinue(std::exception* pex, const char* pszThread); @@ -178,12 +141,12 @@ bool ParseMoney(const std::string& str, int64& nRet); bool ParseMoney(const char* pszIn, int64& nRet); std::vector<unsigned char> ParseHex(const char* psz); std::vector<unsigned char> ParseHex(const std::string& str); +bool IsHex(const std::string& str); std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = NULL); std::string DecodeBase64(const std::string& str); std::string EncodeBase64(const unsigned char* pch, size_t len); std::string EncodeBase64(const std::string& str); -void ParseParameters(int argc, char* argv[]); -const char* wxGetTranslation(const char* psz); +void ParseParameters(int argc, const char*const argv[]); bool WildcardMatch(const char* psz, const char* mask); bool WildcardMatch(const std::string& str, const std::string& mask); int GetFilesize(FILE* file); @@ -191,7 +154,7 @@ void GetDataDir(char* pszDirRet); std::string GetConfigFile(); std::string GetPidFile(); void CreatePidFile(std::string pidFile, pid_t pid); -void ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet); +bool ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet); #ifdef WIN32 std::string MyGetSpecialFolderPath(int nFolder, bool fCreate); #endif @@ -203,8 +166,9 @@ uint64 GetRand(uint64 nMax); int64 GetTime(); void SetMockTime(int64 nMockTimeIn); int64 GetAdjustedTime(); -void AddTimeData(unsigned int ip, int64 nTime); std::string FormatFullVersion(); +std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector<std::string>& comments); +void AddTimeData(const CNetAddr& ip, int64 nTime); @@ -217,8 +181,7 @@ std::string FormatFullVersion(); - -// Wrapper to automatically initialize mutex +/** Wrapper to automatically initialize mutex. */ class CCriticalSection { protected: @@ -231,7 +194,7 @@ public: bool TryEnter(const char* pszName, const char* pszFile, int nLine); }; -// Automatically leave critical section when leaving block, needed for exception safety +/** RAII object that acquires mutex. Needed for exception safety. */ class CCriticalBlock { protected: @@ -243,20 +206,28 @@ public: pcs = &csIn; pcs->Enter(pszName, pszFile, nLine); } + + operator bool() const + { + return true; + } + ~CCriticalBlock() { pcs->Leave(); } }; -// WARNING: This will catch continue and break! -// break is caught with an assertion, but there's no way to detect continue. -// I'd rather be careful than suffer the other more error prone syntax. -// The compiler will optimise away all this loop junk. #define CRITICAL_BLOCK(cs) \ - for (bool fcriticalblockonce=true; fcriticalblockonce; assert(("break caught by CRITICAL_BLOCK!" && !fcriticalblockonce)), fcriticalblockonce=false) \ - for (CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__); fcriticalblockonce; fcriticalblockonce=false) + if (CCriticalBlock criticalblock = CCriticalBlock(cs, #cs, __FILE__, __LINE__)) + +#define ENTER_CRITICAL_SECTION(cs) \ + (cs).Enter(#cs, __FILE__, __LINE__) + +#define LEAVE_CRITICAL_SECTION(cs) \ + (cs).Leave() +/** RAII object that tries to acquire mutex. Needed for exception safety. */ class CTryCriticalBlock { protected: @@ -267,6 +238,12 @@ public: { pcs = (csIn.TryEnter(pszName, pszFile, nLine) ? &csIn : NULL); } + + operator bool() const + { + return Entered(); + } + ~CTryCriticalBlock() { if (pcs) @@ -274,18 +251,11 @@ public: pcs->Leave(); } } - bool Entered() { return pcs != NULL; } + bool Entered() const { return pcs != NULL; } }; #define TRY_CRITICAL_BLOCK(cs) \ - for (bool fcriticalblockonce=true; fcriticalblockonce; assert(("break caught by TRY_CRITICAL_BLOCK!" && !fcriticalblockonce)), fcriticalblockonce=false) \ - for (CTryCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__); fcriticalblockonce && (fcriticalblockonce = criticalblock.Entered()); fcriticalblockonce=false) - - - - - - + if (CTryCriticalBlock criticalblock = CTryCriticalBlock(cs, #cs, __FILE__, __LINE__)) @@ -358,25 +328,6 @@ inline std::string HexStr(const std::vector<unsigned char>& vch, bool fSpaces=fa } template<typename T> -std::string HexNumStr(const T itbegin, const T itend, bool f0x=true) -{ - if (itbegin == itend) - return ""; - const unsigned char* pbegin = (const unsigned char*)&itbegin[0]; - const unsigned char* pend = pbegin + (itend - itbegin) * sizeof(itbegin[0]); - std::string str = (f0x ? "0x" : ""); - str.reserve(str.size() + (pend-pbegin) * 2); - for (const unsigned char* p = pend-1; p >= pbegin; p--) - str += strprintf("%02x", *p); - return str; -} - -inline std::string HexNumStr(const std::vector<unsigned char>& vch, bool f0x=true) -{ - return HexNumStr(vch.begin(), vch.end(), f0x); -} - -template<typename T> void PrintHex(const T pbegin, const T pend, const char* pszFormat="%s", bool fSpaces=true) { printf(pszFormat, HexStr(pbegin, pend, fSpaces).c_str()); @@ -431,32 +382,50 @@ inline bool IsSwitchChar(char c) #endif } -inline std::string GetArg(const std::string& strArg, const std::string& strDefault) -{ - if (mapArgs.count(strArg)) - return mapArgs[strArg]; - return strDefault; -} +/** + * Return string argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (e.g. "1") + * @return command-line argument or default value + */ +std::string GetArg(const std::string& strArg, const std::string& strDefault); -inline int64 GetArg(const std::string& strArg, int64 nDefault) -{ - if (mapArgs.count(strArg)) - return atoi64(mapArgs[strArg]); - return nDefault; -} +/** + * Return integer argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (e.g. 1) + * @return command-line argument (0 if invalid number) or default value + */ +int64 GetArg(const std::string& strArg, int64 nDefault); -inline bool GetBoolArg(const std::string& strArg) -{ - if (mapArgs.count(strArg)) - { - if (mapArgs[strArg].empty()) - return true; - return (atoi(mapArgs[strArg]) != 0); - } - return false; -} +/** + * Return boolean argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (true or false) + * @return command-line argument or default value + */ +bool GetBoolArg(const std::string& strArg, bool fDefault=false); +/** + * Set an argument if it doesn't already have a value + * + * @param strArg Argument to set (e.g. "-foo") + * @param strValue Value (e.g. "1") + * @return true if argument gets set, false if it already had a value + */ +bool SoftSetArg(const std::string& strArg, const std::string& strValue); +/** + * Set a boolean argument if it doesn't already have a value + * + * @param strArg Argument to set (e.g. "-foo") + * @param fValue Value (e.g. false) + * @return true if argument gets set, false if it already had a value + */ +bool SoftSetBoolArg(const std::string& strArg, bool fValue); @@ -465,14 +434,6 @@ inline bool GetBoolArg(const std::string& strArg) -inline void heapchk() -{ -#ifdef WIN32 - /// for debugging - //if (_heapchk() != _HEAPOK) - // DebugBreak(); -#endif -} // Randomize the stack to help protect against buffer overrun exploits #define IMPLEMENT_RANDOMIZE_STACK(ThreadFn) \ @@ -487,21 +448,6 @@ inline void heapchk() } \ } -#define CATCH_PRINT_EXCEPTION(pszFn) \ - catch (std::exception& e) { \ - PrintException(&e, (pszFn)); \ - } catch (...) { \ - PrintException(NULL, (pszFn)); \ - } - - - - - - - - - template<typename T1> inline uint256 Hash(const T1 pbegin, const T1 pend) @@ -549,7 +495,7 @@ inline uint256 Hash(const T1 p1begin, const T1 p1end, } template<typename T> -uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=VERSION) +uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION) { // Most of the time is spent allocating and deallocating CDataStream's // buffer. If this ever needs to be optimized further, make a CStaticStream @@ -570,8 +516,9 @@ inline uint160 Hash160(const std::vector<unsigned char>& vch) } -// Median filter over a stream of values -// Returns the median of the last N numbers +/** Median filter over a stream of values. + * Returns the median of the last N numbers + */ template <typename T> class CMedianFilter { private: @@ -613,6 +560,16 @@ public: return (vSorted[size/2-1] + vSorted[size/2]) / 2; } } + + int size() const + { + return vValues.size(); + } + + std::vector<T> sorted () const + { + return vSorted; + } }; @@ -691,11 +648,6 @@ inline void SetThreadPriority(int nPriority) #endif } -inline bool TerminateThread(pthread_t hthread, unsigned int nExitCode) -{ - return (pthread_cancel(hthread) == 0); -} - inline void ExitThread(size_t nExitCode) { pthread_exit((void*)nExitCode); @@ -728,8 +680,9 @@ inline bool AffinityBugWorkaround(void(*pfn)(void*)) inline uint32_t ByteReverse(uint32_t value) { - value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); - return (value<<16) | (value>>16); + value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); + return (value<<16) | (value>>16); } #endif + diff --git a/src/wallet.cpp b/src/wallet.cpp index af80cc16d5..e444e5f696 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. @@ -15,6 +15,23 @@ using namespace std; // mapWallet // +std::vector<unsigned char> CWallet::GenerateNewKey() +{ + bool fCompressed = CanSupportFeature(FEATURE_COMPRPUBKEY); // default to compressed public keys if we want 0.6.0 wallets + + RandAddSeedPerfmon(); + CKey key; + key.MakeNewKey(fCompressed); + + // Compressed public keys were introduced in version 0.6.0 + if (fCompressed) + SetMinVersion(FEATURE_COMPRPUBKEY); + + if (!AddKey(key)) + throw std::runtime_error("CWallet::GenerateNewKey() : AddKey failed"); + return key.GetPubKey(); +} + bool CWallet::AddKey(const CKey& key) { if (!CCryptoKeyStore::AddKey(key)) @@ -42,7 +59,16 @@ bool CWallet::AddCryptedKey(const vector<unsigned char> &vchPubKey, const vector return false; } -bool CWallet::Unlock(const string& strWalletPassphrase) +bool CWallet::AddCScript(const CScript& redeemScript) +{ + if (!CCryptoKeyStore::AddCScript(redeemScript)) + return false; + if (!fFileBacked) + return true; + return CWalletDB(strWalletFile).WriteCScript(Hash160(redeemScript), redeemScript); +} + +bool CWallet::Unlock(const SecureString& strWalletPassphrase) { if (!IsLocked()) return false; @@ -63,7 +89,7 @@ bool CWallet::Unlock(const string& strWalletPassphrase) return false; } -bool CWallet::ChangeWalletPassphrase(const string& strOldWalletPassphrase, const string& strNewWalletPassphrase) +bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase) { bool fWasLocked = IsLocked(); @@ -122,7 +148,51 @@ public: ) }; -bool CWallet::EncryptWallet(const string& strWalletPassphrase) +bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit) +{ + if (nWalletVersion >= nVersion) + return true; + + // when doing an explicit upgrade, if we pass the max version permitted, upgrade all the way + if (fExplicit && nVersion > nWalletMaxVersion) + nVersion = FEATURE_LATEST; + + nWalletVersion = nVersion; + + if (nVersion > nWalletMaxVersion) + nWalletMaxVersion = nVersion; + + if (fFileBacked) + { + CWalletDB* pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB(strWalletFile); + if (nWalletVersion >= 40000) + { + // Versions prior to 0.4.0 did not support the "minversion" record. + // Use a CCorruptAddress to make them crash instead. + CCorruptAddress corruptAddress; + pwalletdb->WriteSetting("addrIncoming", corruptAddress); + } + if (nWalletVersion > 40000) + pwalletdb->WriteMinVersion(nWalletVersion); + if (!pwalletdbIn) + delete pwalletdb; + } + + return true; +} + +bool CWallet::SetMaxVersion(int nVersion) +{ + // cannot downgrade below current version + if (nWalletVersion > nVersion) + return false; + + nWalletMaxVersion = nVersion; + + return true; +} + +bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) { if (IsCrypted()) return false; @@ -175,14 +245,15 @@ bool CWallet::EncryptWallet(const string& strWalletPassphrase) exit(1); //We now probably have half of our keys encrypted in memory, and half not...die and let the user reload their unencrypted wallet. } + // Encryption was introduced in version 0.4.0 + SetMinVersion(FEATURE_WALLETCRYPT, pwalletdbEncryption, true); + if (fFileBacked) { - CCorruptAddress corruptAddress; - pwalletdbEncryption->WriteSetting("addrIncoming", corruptAddress); if (!pwalletdbEncryption->TxnCommit()) exit(1); //We now have keys encrypted in memory, but no on disk...die to avoid confusion and let the user reload their unencrypted wallet. - pwalletdbEncryption->Close(); + delete pwalletdbEncryption; pwalletdbEncryption = NULL; } @@ -224,6 +295,15 @@ void CWallet::WalletUpdateSpent(const CTransaction &tx) } } +void CWallet::MarkDirty() +{ + CRITICAL_BLOCK(cs_wallet) + { + BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) + item.second.MarkDirty(); + } +} + bool CWallet::AddToWallet(const CWalletTx& wtxIn) { uint256 hash = wtxIn.GetHash(); @@ -232,7 +312,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) // Inserts only if not already there, returns tx inserted or tx found pair<map<uint256, CWalletTx>::iterator, bool> ret = mapWallet.insert(make_pair(hash, wtxIn)); CWalletTx& wtx = (*ret.first).second; - wtx.pwallet = this; + wtx.BindWallet(this); bool fInsertedNew = ret.second; if (fInsertedNew) wtx.nTimeReceived = GetAdjustedTime(); @@ -299,7 +379,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) // Add a transaction to the wallet, or update it. // pblock is optional, but should be provided if the transaction is known to be in a block. // If fUpdate is true, existing transactions will be updated. -bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate) +bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate, bool fFindBlock) { uint256 hash = tx.GetHash(); CRITICAL_BLOCK(cs_wallet) @@ -365,6 +445,24 @@ int64 CWallet::GetDebit(const CTxIn &txin) const return 0; } +bool CWallet::IsChange(const CTxOut& txout) const +{ + CBitcoinAddress address; + + // TODO: fix handling of 'change' outputs. The assumption is that any + // payment to a TX_PUBKEYHASH that is mine but isn't in the address book + // is change. That assumption is likely to break when we implement multisignature + // wallets that return change back into a multi-signature-protected address; + // a better way of identifying which outputs are 'the send' and which are + // 'the change' will need to be implemented (maybe extend CWalletTx to remember + // which output, if any, was change). + if (ExtractAddress(txout.scriptPubKey, address) && HaveKey(address)) + CRITICAL_BLOCK(cs_wallet) + if (!mapAddressBook.count(address)) + return true; + return false; +} + int64 CWalletTx::GetTxTime() const { return nTimeReceived; @@ -434,13 +532,12 @@ void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, l nFee = nDebit - nValueOut; } - // Sent/received. Standard client will never generate a send-to-multiple-recipients, - // but non-standard clients might (so return a list of address/amount pairs) + // Sent/received. BOOST_FOREACH(const CTxOut& txout, vout) { CBitcoinAddress address; vector<unsigned char> vchPubKey; - if (!ExtractAddress(txout.scriptPubKey, NULL, address)) + if (!ExtractAddress(txout.scriptPubKey, address)) { printf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", this->GetHash().ToString().c_str()); @@ -586,6 +683,15 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) return ret; } +int CWallet::ScanForWalletTransaction(const uint256& hashTx) +{ + CTransaction tx; + tx.ReadFromDisk(COutPoint(hashTx, 0)); + if (AddToWalletIfInvolvingMe(tx, NULL, true, true)) + return 1; + return 0; +} + void CWallet::ReacceptWalletTransactions() { CTxDB txdb("r"); @@ -764,7 +870,7 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe // List of values less than target pair<int64, pair<const CWalletTx*,unsigned int> > coinLowestLarger; - coinLowestLarger.first = INT64_MAX; + coinLowestLarger.first = std::numeric_limits<int64>::max(); coinLowestLarger.second.first = NULL; vector<pair<int64, pair<const CWalletTx*,unsigned int> > > vValue; int64 nTotalLower = 0; @@ -924,7 +1030,7 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW if (vecSend.empty() || nValue < 0) return false; - wtxNew.pwallet = this; + wtxNew.BindWallet(this); CRITICAL_BLOCK(cs_main) CRITICAL_BLOCK(cs_wallet) @@ -959,6 +1065,7 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW int64 nChange = nValueIn - nValue - nFeeRet; // if sub-cent change is required, the fee must be raised to at least MIN_TX_FEE // or until nChange becomes zero + // NOTE: this depends on the exact behaviour of GetMinFee if (nFeeRet < MIN_TX_FEE && nChange > 0 && nChange < CENT) { int64 nMoveToFee = min(nChange, MIN_TX_FEE - nFeeRet); @@ -979,12 +1086,11 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW vector<unsigned char> vchPubKey = reservekey.GetReservedKey(); // assert(mapKeys.count(vchPubKey)); - // Fill a vout to ourself, using same address type as the payment + // Fill a vout to ourself + // TODO: pass in scriptChange instead of reservekey so + // change transaction isn't always pay-to-bitcoin-address CScript scriptChange; - if (vecSend[0].first.GetBitcoinAddress().IsValid()) - scriptChange.SetBitcoinAddress(vchPubKey); - else - scriptChange << vchPubKey << OP_CHECKSIG; + scriptChange.SetBitcoinAddress(vchPubKey); // Insert change txn at random position: vector<CTxOut>::iterator position = wtxNew.vout.begin()+GetRandInt(wtxNew.vout.size()); @@ -1012,7 +1118,7 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW // Check that enough fee is included int64 nPayFee = nTransactionFee * (1 + (int64)nBytes / 1000); bool fAllowFree = CTransaction::AllowFree(dPriority); - int64 nMinFee = wtxNew.GetMinFee(1, fAllowFree); + int64 nMinFee = wtxNew.GetMinFee(1, fAllowFree, GMF_SEND); if (nFeeRet < max(nPayFee, nMinFee)) { nFeeRet = max(nPayFee, nMinFee); @@ -1062,7 +1168,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) BOOST_FOREACH(const CTxIn& txin, wtxNew.vin) { CWalletTx &coin = mapWallet[txin.prevout.hash]; - coin.pwallet = this; + coin.BindWallet(this); coin.MarkSpent(txin.prevout.n); coin.WriteToDisk(); vWalletUpdated.push_back(coin.GetHash()); @@ -1113,7 +1219,7 @@ string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, return strError; } - if (fAskFee && !ThreadSafeAskFee(nFeeRequired, _("Sending..."), NULL)) + if (fAskFee && !ThreadSafeAskFee(nFeeRequired, _("Sending..."))) return "ABORTED"; if (!CommitTransaction(wtxNew, reservekey)) @@ -1165,19 +1271,6 @@ int CWallet::LoadWallet(bool& fFirstRunRet) return nLoadWalletRet; fFirstRunRet = vchDefaultKey.empty(); - if (!HaveKey(Hash160(vchDefaultKey))) - { - // Create new keyUser and set as default key - RandAddSeedPerfmon(); - - std::vector<unsigned char> newDefaultKey; - if (!GetKeyFromPool(newDefaultKey, false)) - return DB_LOAD_FAIL; - SetDefaultKey(newDefaultKey); - if (!SetAddressBookName(CBitcoinAddress(vchDefaultKey), "")) - return DB_LOAD_FAIL; - } - CreateThread(ThreadFlushWalletDB, &strWalletFile); return DB_LOAD_OK; } @@ -1186,6 +1279,7 @@ int CWallet::LoadWallet(bool& fFirstRunRet) bool CWallet::SetAddressBookName(const CBitcoinAddress& address, const string& strName) { mapAddressBook[address] = strName; + AddressBookRepaint(); if (!fFileBacked) return false; return CWalletDB(strWalletFile).WriteName(address.ToString(), strName); @@ -1194,6 +1288,7 @@ bool CWallet::SetAddressBookName(const CBitcoinAddress& address, const string& s bool CWallet::DelAddressBookName(const CBitcoinAddress& address) { mapAddressBook.erase(address); + AddressBookRepaint(); if (!fFileBacked) return false; return CWalletDB(strWalletFile).EraseName(address.ToString()); @@ -1325,6 +1420,22 @@ void CWallet::ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool) } } +int64 CWallet::AddReserveKey(const CKeyPool& keypool) +{ + CRITICAL_BLOCK(cs_main) + CRITICAL_BLOCK(cs_wallet) + { + CWalletDB walletdb(strWalletFile); + + int64 nIndex = 1 + *(--setKeyPool.end()); + if (!walletdb.WritePool(nIndex, keypool)) + throw runtime_error("AddReserveKey() : writing added key failed"); + setKeyPool.insert(nIndex); + return nIndex; + } + return -1; +} + void CWallet::KeepKey(int64 nIndex) { // Remove from key pool @@ -1413,3 +1524,23 @@ void CReserveKey::ReturnKey() vchPubKey.clear(); } +void CWallet::GetAllReserveAddresses(set<CBitcoinAddress>& setAddress) +{ + setAddress.clear(); + + CWalletDB walletdb(strWalletFile); + + CRITICAL_BLOCK(cs_main) + CRITICAL_BLOCK(cs_wallet) + BOOST_FOREACH(const int64& id, setKeyPool) + { + CKeyPool keypool; + if (!walletdb.ReadPool(id, keypool)) + throw runtime_error("GetAllReserveKeyHashes() : read failed"); + CBitcoinAddress address(keypool.vchPubKey); + assert(!keypool.vchPubKey.empty()); + if (!HaveKey(address)) + throw runtime_error("GetAllReserveKeyHashes() : unknown key in key pool"); + setAddress.insert(address); + } +} diff --git a/src/wallet.h b/src/wallet.h index 19de803390..e1065cff38 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_WALLET_H @@ -7,15 +7,27 @@ #include "bignum.h" #include "key.h" +#include "keystore.h" #include "script.h" class CWalletTx; class CReserveKey; class CWalletDB; -// A CWallet is an extension of a keystore, which also maintains a set of -// transactions and balances, and provides the ability to create new -// transactions +/** (client) version numbers for particular wallet features */ +enum WalletFeature +{ + FEATURE_BASE = 10500, // the earliest version new wallets supports (only useful for getinfo's clientversion output) + + FEATURE_WALLETCRYPT = 40000, // wallet encryption + FEATURE_COMPRPUBKEY = 60000, // compressed public keys + + FEATURE_LATEST = 60000 +}; + +/** A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, + * and provides the ability to create new transactions. + */ class CWallet : public CCryptoKeyStore { private: @@ -24,6 +36,12 @@ private: CWalletDB *pwalletdbEncryption; + // the current wallet version: clients below this version are not able to load the wallet + int nWalletVersion; + + // the maxmimum wallet format version: memory-only variable that specifies to what version this wallet may be upgraded + int nWalletMaxVersion; + public: mutable CCriticalSection cs_wallet; @@ -32,18 +50,23 @@ public: std::set<int64> setKeyPool; + typedef std::map<unsigned int, CMasterKey> MasterKeyMap; MasterKeyMap mapMasterKeys; unsigned int nMasterKeyMaxID; CWallet() { + nWalletVersion = FEATURE_BASE; + nWalletMaxVersion = FEATURE_BASE; fFileBacked = false; nMasterKeyMaxID = 0; pwalletdbEncryption = NULL; } CWallet(std::string strWalletFileIn) { + nWalletVersion = FEATURE_BASE; + nWalletMaxVersion = FEATURE_BASE; strWalletFile = strWalletFileIn; fFileBacked = true; nMasterKeyMaxID = 0; @@ -59,26 +82,37 @@ public: std::vector<unsigned char> vchDefaultKey; + // check whether we are allowed to upgrade (or already support) to the named feature + bool CanSupportFeature(enum WalletFeature wf) { return nWalletMaxVersion >= wf; } + // keystore implementation + // Generate a new key + std::vector<unsigned char> GenerateNewKey(); // Adds a key to the store, and saves it to disk. bool AddKey(const CKey& key); // Adds a key to the store, without saving it to disk (used by LoadWallet) bool LoadKey(const CKey& key) { return CCryptoKeyStore::AddKey(key); } + bool LoadMinVersion(int nVersion) { nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; } + // Adds an encrypted key to the store, and saves it to disk. bool AddCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret); // Adds an encrypted key to the store, without saving it to disk (used by LoadWallet) - bool LoadCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret) { return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); } + bool LoadCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret) { SetMinVersion(FEATURE_WALLETCRYPT); return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); } + bool AddCScript(const CScript& redeemScript); + bool LoadCScript(const CScript& redeemScript) { return CCryptoKeyStore::AddCScript(redeemScript); } - bool Unlock(const std::string& strWalletPassphrase); - bool ChangeWalletPassphrase(const std::string& strOldWalletPassphrase, const std::string& strNewWalletPassphrase); - bool EncryptWallet(const std::string& strWalletPassphrase); + bool Unlock(const SecureString& strWalletPassphrase); + bool ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase); + bool EncryptWallet(const SecureString& strWalletPassphrase); + void MarkDirty(); bool AddToWallet(const CWalletTx& wtxIn); - bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate = false); + bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate = false, bool fFindBlock = false); bool EraseFromWallet(uint256 hash); void WalletUpdateSpent(const CTransaction& prevout); int ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false); + int ScanForWalletTransaction(const uint256& hashTx); void ReacceptWalletTransactions(); void ResendWalletTransactions(); int64 GetBalance() const; @@ -86,17 +120,18 @@ public: bool CreateTransaction(const std::vector<std::pair<CScript, int64> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet); bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet); bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey); - bool BroadcastTransaction(CWalletTx& wtxNew); std::string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false); std::string SendMoneyToBitcoinAddress(const CBitcoinAddress& address, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false); bool NewKeyPool(); bool TopUpKeyPool(); + int64 AddReserveKey(const CKeyPool& keypool); void ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool); void KeepKey(int64 nIndex); void ReturnKey(int64 nIndex); bool GetKeyFromPool(std::vector<unsigned char> &key, bool fAllowReuse=true); int64 GetOldestKeyPoolTime(); + void GetAllReserveAddresses(std::set<CBitcoinAddress>& setAddress); bool IsMine(const CTxIn& txin) const; int64 GetDebit(const CTxIn& txin) const; @@ -110,15 +145,7 @@ public: throw std::runtime_error("CWallet::GetCredit() : value out of range"); return (IsMine(txout) ? txout.nValue : 0); } - bool IsChange(const CTxOut& txout) const - { - CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, this, address)) - CRITICAL_BLOCK(cs_wallet) - if (!mapAddressBook.count(address)) - return true; - return false; - } + bool IsChange(const CTxOut& txout) const; int64 GetChange(const CTxOut& txout) const { if (!MoneyRange(txout.nValue)) @@ -208,9 +235,18 @@ public: bool GetTransaction(const uint256 &hashTx, CWalletTx& wtx); bool SetDefaultKey(const std::vector<unsigned char> &vchPubKey); -}; + // signify that a particular wallet feature is now used. this may change nWalletVersion and nWalletMaxVersion if those are lower + bool SetMinVersion(enum WalletFeature, CWalletDB* pwalletdbIn = NULL, bool fExplicit = false); + + // change which version we're allowed to upgrade to (note that this does not immediately imply upgrading to that format) + bool SetMaxVersion(int nVersion); + // get the current wallet format (the oldest client version guaranteed to understand this wallet) + int GetVersion() { return nWalletVersion; } +}; + +/** A key allocated from the key pool. */ class CReserveKey { protected: @@ -236,16 +272,15 @@ public: }; -// -// A transaction with a bunch of additional info that only the owner cares -// about. It includes any unrecorded transactions needed to link it back -// to the block chain. -// +/** A transaction with a bunch of additional info that only the owner cares about. + * It includes any unrecorded transactions needed to link it back to the block chain. + */ class CWalletTx : public CMerkleTx { -public: +private: const CWallet* pwallet; +public: std::vector<CMerkleTx> vtxPrev; std::map<std::string, std::string> mapValue; std::vector<std::pair<std::string, std::string> > vOrderForm; @@ -389,6 +424,12 @@ public: fChangeCached = false; } + void BindWallet(CWallet *pwalletIn) + { + pwallet = pwalletIn; + MarkDirty(); + } + void MarkSpent(unsigned int nOut) { if (nOut >= vout.size()) @@ -538,9 +579,7 @@ public: }; -// -// Private key that includes an expiration date in case it never gets used. -// +/** Private key that includes an expiration date in case it never gets used. */ class CWalletKey { public: @@ -573,10 +612,9 @@ public: -// -// Account information. -// Stored in wallet with key "acc"+string account name -// +/** Account information. + * Stored in wallet with key "acc"+string account name. + */ class CAccount { public: @@ -602,10 +640,9 @@ public: -// -// Internal transfers. -// Database key is acentry<account><counter> -// +/** Internal transfers. + * Database key is acentry<account><counter>. + */ class CAccountingEntry { public: |