From 3063c256d4dee650fe66a8a8b937ffce7de6b8f6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 3 Aug 2013 12:45:15 +0100 Subject: [PATCH 01/50] Maximum message length configurable within keys.dat --- src/class_receiveDataThread.py | 13 ++++++++++++- src/helper_startup.py | 1 + src/shared.py | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index 2693b293..f1ba979d 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -46,6 +46,17 @@ class receiveDataThread(threading.Thread): self.PORT = port self.streamNumber = streamNumber self.payloadLength = 0 # This is the protocol payload length thus it doesn't include the 24 byte message header + self.maxMessageLength = 180000000 # maximum length of a message in bytes, default 180MB + + # get the maximum message length from the settings + try: + maxMsgLen = shared.config.getint( + 'bitmessagesettings', 'maxmessagelength') + if maxMsgLen > 32768: # minimum of 32K + self.maxMessageLength = maxMsgLen + except Exception: + pass + self.objectsThatWeHaveYetToCheckAndSeeWhetherWeAlreadyHave = {} self.selfInitiatedConnections = selfInitiatedConnections shared.connectedHostsList[ @@ -140,7 +151,7 @@ class receiveDataThread(threading.Thread): shared.knownNodes[self.streamNumber][ self.HOST] = (self.PORT, int(time.time())) shared.knownNodesLock.release() - if self.payloadLength <= 180000000: # If the size of the message is greater than 180MB, ignore it. (I get memory errors when processing messages much larger than this though it is concievable that this value will have to be lowered if some systems are less tolarant of large messages.) + if self.payloadLength <= self.maxMessageLength: # If the size of the message is greater than the maximum, ignore it. remoteCommand = self.data[4:16] with shared.printLock: print 'remoteCommand', repr(remoteCommand.replace('\x00', '')), ' from', self.HOST diff --git a/src/helper_startup.py b/src/helper_startup.py index d60ad681..c36589d5 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -67,6 +67,7 @@ def loadConfig(): shared.config.set( 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') shared.config.set('bitmessagesettings', 'dontconnect', 'true') + shared.config.set('bitmessagesettings', 'maxMessageLength', '180000000') if storeConfigFilesInSameDirectoryAsProgramByDefault: # Just use the same directory as the program and forget about diff --git a/src/shared.py b/src/shared.py index 32370524..aed1971e 100644 --- a/src/shared.py +++ b/src/shared.py @@ -371,4 +371,4 @@ def fixSensitiveFilePermissions(filename, hasEnabledKeys): raise helper_startup.loadConfig() -from debug import logger \ No newline at end of file +from debug import logger From 0f357529edfc1ded9991bdacf33fe7d877beef41 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Tue, 6 Aug 2013 22:28:21 +0100 Subject: [PATCH 02/50] bitmessagemain, changing prints tologger functions --- src/bitmessagemain.py | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index b156cd0d..126c502b 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -34,11 +34,13 @@ from class_addressGenerator import * # Helper Functions import helper_bootstrap +# Debug logger +from debug import logger + import sys if sys.platform == 'darwin': if float("{1}.{2}".format(*sys.version_info)) < 7.5: - print "You should use python 2.7.5 or greater." - print "Your version: {0}.{1}.{2}".format(*sys.version_info) + logger.critical("You should use python 2.7.5 or greater. Your version: {0}.{1}.{2}".format(*sys.version_info)) sys.exit(0) def connectToStream(streamNumber): @@ -126,7 +128,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): else: return False else: - print 'Authentication failed because header lacks Authentication field' + logger.warn('Authentication failed because header lacks Authentication field') time.sleep(2) return False @@ -276,7 +278,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if numberOfAddresses > 999: return 'API Error 0005: You have (accidentally?) specified too many addresses to make. Maximum 999. This check only exists to prevent mischief; if you really want to create more addresses than this, contact the Bitmessage developers and we can modify the check or you can do it yourself by searching the source code for this message.' shared.apiAddressGeneratorReturnQueue.queue.clear() - print 'Requesting that the addressGenerator create', numberOfAddresses, 'addresses.' + logger.debug('Requesting that the addressGenerator create', numberOfAddresses, 'addresses.') shared.addressGeneratorQueue.put( ('createDeterministicAddresses', addressVersionNumber, streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe, nonceTrialsPerByte, payloadLengthExtraBytes)) @@ -302,7 +304,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if streamNumber != 1: return 'API Error 0003: The stream number must be 1. Others aren\'t supported.' shared.apiAddressGeneratorReturnQueue.queue.clear() - print 'Requesting that the addressGenerator create', numberOfAddresses, 'addresses.' + logger.debug('Requesting that the addressGenerator create', numberOfAddresses, 'addresses.') shared.addressGeneratorQueue.put( ('getDeterministicAddress', addressVersionNumber, streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe)) @@ -515,8 +517,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': - with shared.printLock: - print 'API Error 0007: Could not decode address:', toAddress, ':', status + logger.warn('API Error 0007: Could not decode address:', toAddress, ':', status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + toAddress @@ -532,8 +533,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - with shared.printLock: - print 'API Error 0007: Could not decode address:', fromAddress, ':', status + logger.warn('API Error 0007: Could not decode address:', fromAddress, ':', status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -597,8 +597,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - with shared.printLock: - print 'API Error 0007: Could not decode address:', fromAddress, ':', status + logger.warn('API Error 0007: Could not decode address:', fromAddress, ':', status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -668,8 +667,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) if status != 'success': - with shared.printLock: - print 'API Error 0007: Could not decode address:', address, ':', status + logger.warn('API Error 0007: Could not decode address:', address, ':', status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + address @@ -808,8 +806,7 @@ if __name__ == "__main__": except: apiNotifyPath = '' if apiNotifyPath != '': - with shared.printLock: - print 'Trying to call', apiNotifyPath + logger.debug('Trying to call', apiNotifyPath) call([apiNotifyPath, "startingUp"]) singleAPIThread = singleAPI() @@ -827,16 +824,15 @@ if __name__ == "__main__": try: from PyQt4 import QtCore, QtGui except Exception as err: - print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' - print 'Error message:', err + logger.error('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon') + logger.error('Error message: '+ err) os._exit(0) import bitmessageqt bitmessageqt.run() else: shared.config.remove_option('bitmessagesettings', 'dontconnect') - with shared.printLock: - print 'Running as a daemon. You can use Ctrl+C to exit.' + logger.info('Running as a daemon. You can use Ctrl+C to exit.') while True: time.sleep(20) From 26b82984a2098a75178eac9e34d3ff98ee6a2b3c Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Wed, 7 Aug 2013 21:12:32 +0100 Subject: [PATCH 03/50] Fixes to logger function calls --- src/bitmessagemain.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 126c502b..3a99fc19 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -40,7 +40,7 @@ from debug import logger import sys if sys.platform == 'darwin': if float("{1}.{2}".format(*sys.version_info)) < 7.5: - logger.critical("You should use python 2.7.5 or greater. Your version: {0}.{1}.{2}".format(*sys.version_info)) + logger.critical("You should use python 2.7.5 or greater. Your version: %s", format(*sys.version_info)) sys.exit(0) def connectToStream(streamNumber): @@ -278,7 +278,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if numberOfAddresses > 999: return 'API Error 0005: You have (accidentally?) specified too many addresses to make. Maximum 999. This check only exists to prevent mischief; if you really want to create more addresses than this, contact the Bitmessage developers and we can modify the check or you can do it yourself by searching the source code for this message.' shared.apiAddressGeneratorReturnQueue.queue.clear() - logger.debug('Requesting that the addressGenerator create', numberOfAddresses, 'addresses.') + logger.debug('Requesting that the addressGenerator create %s addresses.', numberOfAddresses) shared.addressGeneratorQueue.put( ('createDeterministicAddresses', addressVersionNumber, streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe, nonceTrialsPerByte, payloadLengthExtraBytes)) @@ -304,7 +304,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if streamNumber != 1: return 'API Error 0003: The stream number must be 1. Others aren\'t supported.' shared.apiAddressGeneratorReturnQueue.queue.clear() - logger.debug('Requesting that the addressGenerator create', numberOfAddresses, 'addresses.') + logger.debug('Requesting that the addressGenerator create %s addresses.', numberOfAddresses) shared.addressGeneratorQueue.put( ('getDeterministicAddress', addressVersionNumber, streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe)) @@ -517,7 +517,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address:', toAddress, ':', status) + logger.warn('API Error 0007: Could not decode address: %s : %s', toAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + toAddress @@ -533,7 +533,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address:', fromAddress, ':', status) + logger.warn('API Error 0007: Could not decode address: %s : %s', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -597,7 +597,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address:', fromAddress, ':', status) + logger.warn('API Error 0007: Could not decode address: %s : %s', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -667,7 +667,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) if status != 'success': - logger.warn('API Error 0007: Could not decode address:', address, ':', status) + logger.warn('API Error 0007: Could not decode address: %s : %s', address, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + address @@ -806,7 +806,7 @@ if __name__ == "__main__": except: apiNotifyPath = '' if apiNotifyPath != '': - logger.debug('Trying to call', apiNotifyPath) + logger.debug('Trying to call %s', apiNotifyPath) call([apiNotifyPath, "startingUp"]) singleAPIThread = singleAPI() @@ -825,7 +825,7 @@ if __name__ == "__main__": from PyQt4 import QtCore, QtGui except Exception as err: logger.error('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon') - logger.error('Error message: '+ err) + logger.error('Error message: %s', err) os._exit(0) import bitmessageqt From b529280160680d73056e4141231d04e4232dae23 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Wed, 7 Aug 2013 21:22:23 +0100 Subject: [PATCH 04/50] Further fixes --- src/bitmessagemain.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 3a99fc19..87fd5934 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -517,7 +517,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s : %s', toAddress, status) + logger.warn('API Error 0007: Could not decode address: %s', toAddress + ' : ' + status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + toAddress @@ -533,7 +533,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s : %s', fromAddress, status) + logger.warn('API Error 0007: Could not decode address: %s', fromAddress + ' : ' + status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -597,7 +597,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s : %s', fromAddress, status) + logger.warn('API Error 0007: Could not decode address: %s', fromAddress + ' : ' + status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -667,7 +667,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s : %s', address, status) + logger.warn('API Error 0007: Could not decode address: %s', address + ' : ' + status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + address From ab4d53593b76be8aa1a646a17bc86ab3d38c7614 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Wed, 7 Aug 2013 21:34:46 +0100 Subject: [PATCH 05/50] Fix to python version critical log message --- src/bitmessagemain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 87fd5934..b3cf2df3 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -40,7 +40,7 @@ from debug import logger import sys if sys.platform == 'darwin': if float("{1}.{2}".format(*sys.version_info)) < 7.5: - logger.critical("You should use python 2.7.5 or greater. Your version: %s", format(*sys.version_info)) + logger.critical("You should use python 2.7.5 or greater. Your version: %s", "{0}.{1}.{2}".format(*sys.version_info)) sys.exit(0) def connectToStream(streamNumber): From 03fdbe163b2849b9c63b459b32e6423463894b8d Mon Sep 17 00:00:00 2001 From: Gregor Robinson Date: Mon, 5 Aug 2013 22:06:46 +0200 Subject: [PATCH 06/50] File permission special case for NTFS-3g on POSIX. Fix issue #347, "*SensitiveFilePermissions fails on ntfs-3g mounted filesystems". --- src/shared.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/shared.py b/src/shared.py index 214c124f..9b8c9325 100644 --- a/src/shared.py +++ b/src/shared.py @@ -346,6 +346,19 @@ def checkSensitiveFilePermissions(filename): # Windows systems. return True else: + try: + # Skip known problems for non-Win32 filesystems without POSIX permissions. + import subprocess + fstype = subprocess.check_output('stat -f -c "%%T" %s' % (filename), + shell=True, + stderr=subprocess.STDOUT) + if 'fuseblk' in fstype: + logger.info('Skipping file permissions check for %s. Filesystem fuseblk detected.', + filename) + return True + except: + # Swallow exception here, but we might run into trouble later! + logger.error('Could not determine filesystem type.', filename) present_permissions = os.stat(filename)[0] disallowed_permissions = stat.S_IRWXG | stat.S_IRWXO return present_permissions & disallowed_permissions == 0 From f8cdfbfaa064ade856886c0758e4ead69f9da593 Mon Sep 17 00:00:00 2001 From: merlink Date: Mon, 5 Aug 2013 22:29:06 +0200 Subject: [PATCH 07/50] Changed start code for deamon mode --- src/bitmessagemain.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index b156cd0d..7a2047be 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -770,7 +770,7 @@ if shared.useVeryEasyProofOfWorkForTesting: shared.networkDefaultPayloadLengthExtraBytes = int( shared.networkDefaultPayloadLengthExtraBytes / 7000) -if __name__ == "__main__": +def main(): # is the application already running? If yes then exit. thisapp = singleton.singleinstance() @@ -840,7 +840,9 @@ if __name__ == "__main__": while True: time.sleep(20) - +if __name__ == "__main__": + main() + # So far, the creation of and management of the Bitmessage protocol and this # client is a one-man operation. Bitcoin tips are quite appreciated. # 1H5XaDA6fYENLbknwZyjiYXYPQaFjjLX2u From 28acbac8238c5cb365cbd8c4e967e9b730c67849 Mon Sep 17 00:00:00 2001 From: merlink Date: Tue, 6 Aug 2013 10:37:31 +0200 Subject: [PATCH 08/50] Added deamon modoe to main function --- src/bitmessagemain.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 7a2047be..04ff3071 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -770,7 +770,7 @@ if shared.useVeryEasyProofOfWorkForTesting: shared.networkDefaultPayloadLengthExtraBytes = int( shared.networkDefaultPayloadLengthExtraBytes / 7000) -def main(): +def main(deamon=False): # is the application already running? If yes then exit. thisapp = singleton.singleinstance() @@ -823,7 +823,7 @@ def main(): singleListenerThread.daemon = True # close the main program even if there are threads left singleListenerThread.start() - if not shared.safeConfigGetBoolean('bitmessagesettings', 'daemon'): + if deamon == False and shared.safeConfigGetBoolean('bitmessagesettings', 'daemon') == False: try: from PyQt4 import QtCore, QtGui except Exception as err: @@ -840,6 +840,7 @@ def main(): while True: time.sleep(20) + if __name__ == "__main__": main() From 7850e9aa689baa30b6842845a1c7ea1ea8cf1cad Mon Sep 17 00:00:00 2001 From: merlink Date: Tue, 6 Aug 2013 13:23:56 +0200 Subject: [PATCH 09/50] Created Object for controlling bitmessage deamon --- src/bitmessagemain.py | 139 ++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 59 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 04ff3071..b39bdc96 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -770,79 +770,100 @@ if shared.useVeryEasyProofOfWorkForTesting: shared.networkDefaultPayloadLengthExtraBytes = int( shared.networkDefaultPayloadLengthExtraBytes / 7000) -def main(deamon=False): - # is the application already running? If yes then exit. - thisapp = singleton.singleinstance() +class Main: + def start(self, deamon=False): + # is the application already running? If yes then exit. + thisapp = singleton.singleinstance() - signal.signal(signal.SIGINT, helper_generic.signal_handler) - # signal.signal(signal.SIGINT, signal.SIG_DFL) + signal.signal(signal.SIGINT, helper_generic.signal_handler) + # signal.signal(signal.SIGINT, signal.SIG_DFL) - helper_bootstrap.knownNodes() - # Start the address generation thread - addressGeneratorThread = addressGenerator() - addressGeneratorThread.daemon = True # close the main program even if there are threads left - addressGeneratorThread.start() + helper_bootstrap.knownNodes() + # Start the address generation thread + addressGeneratorThread = addressGenerator() + addressGeneratorThread.daemon = True # close the main program even if there are threads left + addressGeneratorThread.start() - # Start the thread that calculates POWs - singleWorkerThread = singleWorker() - singleWorkerThread.daemon = True # close the main program even if there are threads left - singleWorkerThread.start() + # Start the thread that calculates POWs + singleWorkerThread = singleWorker() + singleWorkerThread.daemon = True # close the main program even if there are threads left + singleWorkerThread.start() - # Start the SQL thread - sqlLookup = sqlThread() - sqlLookup.daemon = False # DON'T close the main program even if there are threads left. The closeEvent should command this thread to exit gracefully. - sqlLookup.start() + # Start the SQL thread + sqlLookup = sqlThread() + sqlLookup.daemon = False # DON'T close the main program even if there are threads left. The closeEvent should command this thread to exit gracefully. + sqlLookup.start() - # Start the cleanerThread - singleCleanerThread = singleCleaner() - singleCleanerThread.daemon = True # close the main program even if there are threads left - singleCleanerThread.start() + # Start the cleanerThread + singleCleanerThread = singleCleaner() + singleCleanerThread.daemon = True # close the main program even if there are threads left + singleCleanerThread.start() - shared.reloadMyAddressHashes() - shared.reloadBroadcastSendersForWhichImWatching() + shared.reloadMyAddressHashes() + shared.reloadBroadcastSendersForWhichImWatching() - if shared.safeConfigGetBoolean('bitmessagesettings', 'apienabled'): - try: - apiNotifyPath = shared.config.get( - 'bitmessagesettings', 'apinotifypath') - except: - apiNotifyPath = '' - if apiNotifyPath != '': - with shared.printLock: - print 'Trying to call', apiNotifyPath + if shared.safeConfigGetBoolean('bitmessagesettings', 'apienabled'): + try: + apiNotifyPath = shared.config.get( + 'bitmessagesettings', 'apinotifypath') + except: + apiNotifyPath = '' + if apiNotifyPath != '': + with shared.printLock: + print 'Trying to call', apiNotifyPath - call([apiNotifyPath, "startingUp"]) - singleAPIThread = singleAPI() - singleAPIThread.daemon = True # close the main program even if there are threads left - singleAPIThread.start() + call([apiNotifyPath, "startingUp"]) + singleAPIThread = singleAPI() + singleAPIThread.daemon = True # close the main program even if there are threads left + singleAPIThread.start() - connectToStream(1) + connectToStream(1) - singleListenerThread = singleListener() - singleListenerThread.setup(selfInitiatedConnections) - singleListenerThread.daemon = True # close the main program even if there are threads left - singleListenerThread.start() + singleListenerThread = singleListener() + singleListenerThread.setup(selfInitiatedConnections) + singleListenerThread.daemon = True # close the main program even if there are threads left + singleListenerThread.start() - if deamon == False and shared.safeConfigGetBoolean('bitmessagesettings', 'daemon') == False: - try: - from PyQt4 import QtCore, QtGui - except Exception as err: - print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' - print 'Error message:', err - os._exit(0) + if deamon == False and shared.safeConfigGetBoolean('bitmessagesettings', 'daemon') == False: + try: + from PyQt4 import QtCore, QtGui + except Exception as err: + print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API. You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download or by searching Google for \'PyQt Download\'. If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' + print 'Error message:', err + os._exit(0) - import bitmessageqt - bitmessageqt.run() - else: - shared.config.remove_option('bitmessagesettings', 'dontconnect') + import bitmessageqt + bitmessageqt.run() + else: + shared.config.remove_option('bitmessagesettings', 'dontconnect') + + if deamon: + with shared.printLock: + print 'Running as a daemon. The main program should exit this thread.' + else: + with shared.printLock: + print 'Running as a daemon. You can use Ctrl+C to exit.' + while True: + time.sleep(20) + + def stop(self): with shared.printLock: - print 'Running as a daemon. You can use Ctrl+C to exit.' - - while True: - time.sleep(20) - + print 'Stopping Bitmessage Deamon.' + shared.doCleanShutdown() + + + def getApiAddress(self): + if not shared.safeConfigGetBoolean('bitmessagesettings', 'apienabled'): + return None + + address = shared.config.get('bitmessagesettings', 'apiinterface') + port = shared.config.getint('bitmessagesettings', 'apiport') + return {'address':address,'port':port} + if __name__ == "__main__": - main() + mainprogram = Main() + mainprogram.start() + # So far, the creation of and management of the Bitmessage protocol and this # client is a one-man operation. Bitcoin tips are quite appreciated. From 9710a861871675e4d23d0d7df5f07c2bb340cf41 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Wed, 7 Aug 2013 22:02:53 +0100 Subject: [PATCH 10/50] Minor spelling error: 'deamon' -> 'daemon' --- src/bitmessagemain.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index b39bdc96..629cb9ae 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -771,7 +771,7 @@ if shared.useVeryEasyProofOfWorkForTesting: shared.networkDefaultPayloadLengthExtraBytes / 7000) class Main: - def start(self, deamon=False): + def start(self, daemon=False): # is the application already running? If yes then exit. thisapp = singleton.singleinstance() @@ -824,7 +824,7 @@ class Main: singleListenerThread.daemon = True # close the main program even if there are threads left singleListenerThread.start() - if deamon == False and shared.safeConfigGetBoolean('bitmessagesettings', 'daemon') == False: + if daemon == False and shared.safeConfigGetBoolean('bitmessagesettings', 'daemon') == False: try: from PyQt4 import QtCore, QtGui except Exception as err: @@ -837,7 +837,7 @@ class Main: else: shared.config.remove_option('bitmessagesettings', 'dontconnect') - if deamon: + if daemon: with shared.printLock: print 'Running as a daemon. The main program should exit this thread.' else: From a69a00d186596b8b32ad8753a5a68846d87860b3 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Fri, 9 Aug 2013 23:26:16 +0100 Subject: [PATCH 11/50] Improved logger function calls and import shared here instead of debug --- src/bitmessagemain.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index fffdafb7..44ed50b0 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -34,8 +34,7 @@ from class_addressGenerator import * # Helper Functions import helper_bootstrap -# Debug logger -from debug import logger +import shared import sys if sys.platform == 'darwin': @@ -517,7 +516,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s', toAddress + ' : ' + status) + logger.warn('API Error 0007: Could not decode address: %s:%s.', toAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + toAddress @@ -533,7 +532,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s', fromAddress + ' : ' + status) + logger.warn('API Error 0007: Could not decode address: %s:%s.', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -597,7 +596,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s', fromAddress + ' : ' + status) + logger.warn('API Error 0007: Could not decode address: %s:%s.', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -667,7 +666,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s', address + ' : ' + status) + logger.warn('API Error 0007: Could not decode address: %s:%s.', address, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + address From 326e294932763d98eb8a77f1068458f0d634803c Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Fri, 9 Aug 2013 23:32:49 +0100 Subject: [PATCH 12/50] Reverted back to importing only logger instead of all of shared --- src/bitmessagemain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 44ed50b0..383d82da 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -34,7 +34,7 @@ from class_addressGenerator import * # Helper Functions import helper_bootstrap -import shared +from debug import logger import sys if sys.platform == 'darwin': From a32f51f583a4f150f60d9bfa54337e1de9b7930b Mon Sep 17 00:00:00 2001 From: Erik Ackermann Date: Sat, 10 Aug 2013 13:36:02 -0400 Subject: [PATCH 13/50] Fixed OS X steps to use Homebrew commands (was using MacPorts commands) --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 1cb06c5b..151282a7 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -57,8 +57,8 @@ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" Now, install the required dependencies ``` -sudo port install python27 py27-pyqt4 openssl -sudo port install git-core +svn +doc +bash_completion +gitweb +brew install python27 py27-pyqt4 openssl +brew install git-core +svn +doc +bash_completion +gitweb ``` Download and run PyBitmessage: From 2c09326c378865fe1229a6eb5f92fb4b4be3b9dd Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Sat, 10 Aug 2013 23:10:21 +0100 Subject: [PATCH 14/50] Changing text for API Error 0007 log warning --- src/bitmessagemain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 383d82da..a81767f9 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -532,7 +532,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s:%s.', fromAddress, status) + logger.warn('API Error 0007: Could not decode address %s. Status: %s.', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress @@ -596,7 +596,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s:%s.', fromAddress, status) + logger.warn('API Error 0007: Could not decode address %s. Status: %s.', fromAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + fromAddress From 53ca5b03ffb6b35ac03588107dc4a1d5cde7aad4 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Sat, 10 Aug 2013 23:13:15 +0100 Subject: [PATCH 15/50] Changing text for API Error 0007 log warning (cont.) --- src/bitmessagemain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index a81767f9..537b73eb 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -516,7 +516,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s:%s.', toAddress, status) + logger.warn('API Error 0007: Could not decode address %s. Status: %s.', toAddress, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + toAddress @@ -666,7 +666,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) if status != 'success': - logger.warn('API Error 0007: Could not decode address: %s:%s.', address, status) + logger.warn('API Error 0007: Could not decode address %s. Status: %s.', address, status) if status == 'checksumfailed': return 'API Error 0008: Checksum failed for address: ' + address From f83b636bc049208954ae99171e6ec34b17278c13 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Sun, 11 Aug 2013 00:02:38 +0100 Subject: [PATCH 16/50] Converted print statement in class_sqlThread to logger calls --- src/class_sqlThread.py | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/class_sqlThread.py b/src/class_sqlThread.py index e07850e4..5bdec02d 100644 --- a/src/class_sqlThread.py +++ b/src/class_sqlThread.py @@ -59,11 +59,10 @@ class sqlThread(threading.Thread): self.cur.execute( '''INSERT INTO settings VALUES('lastvacuumtime',?)''', ( int(time.time()),)) self.conn.commit() - print 'Created messages database file' + logger.info('Created messages database file') except Exception as err: if str(err) == 'table inbox already exists': - with shared.printLock: - print 'Database file already exists.' + logger.debug('Database file already exists.') else: sys.stderr.write( @@ -145,13 +144,13 @@ class sqlThread(threading.Thread): self.cur.execute(item, parameters) if self.cur.fetchall() == []: # The settings table doesn't exist. We need to make it. - print 'In messages.dat database, creating new \'settings\' table.' + logger.debug('In messages.dat database, creating new \'settings\' table.') self.cur.execute( '''CREATE TABLE settings (key text, value blob, UNIQUE(key) ON CONFLICT REPLACE)''' ) self.cur.execute( '''INSERT INTO settings VALUES('version','1')''') self.cur.execute( '''INSERT INTO settings VALUES('lastvacuumtime',?)''', ( int(time.time()),)) - print 'In messages.dat database, removing an obsolete field from the pubkeys table.' + logger.debug('In messages.dat database, removing an obsolete field from the pubkeys table.') self.cur.execute( '''CREATE TEMPORARY TABLE pubkeys_backup(hash blob, transmitdata blob, time int, usedpersonally text, UNIQUE(hash) ON CONFLICT REPLACE);''') self.cur.execute( @@ -162,17 +161,17 @@ class sqlThread(threading.Thread): self.cur.execute( '''INSERT INTO pubkeys SELECT hash, transmitdata, time, usedpersonally FROM pubkeys_backup;''') self.cur.execute( '''DROP TABLE pubkeys_backup;''') - print 'Deleting all pubkeys from inventory. They will be redownloaded and then saved with the correct times.' + logger.debug('Deleting all pubkeys from inventory. They will be redownloaded and then saved with the correct times.') self.cur.execute( '''delete from inventory where objecttype = 'pubkey';''') - print 'replacing Bitmessage announcements mailing list with a new one.' + logger.debug('replacing Bitmessage announcements mailing list with a new one.') self.cur.execute( '''delete from subscriptions where address='BM-BbkPSZbzPwpVcYZpU4yHwf9ZPEapN5Zx' ''') self.cur.execute( '''INSERT INTO subscriptions VALUES('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''') - print 'Commiting.' + logger.debug('Commiting.') self.conn.commit() - print 'Vacuuming message.dat. You might notice that the file size gets much smaller.' + logger.debug('Vacuuming message.dat. You might notice that the file size gets much smaller.') self.cur.execute( ''' VACUUM ''') # After code refactoring, the possible status values for sent messages @@ -203,11 +202,11 @@ class sqlThread(threading.Thread): self.cur.execute('''DELETE FROM pubkeys WHERE hash='1234' ''') self.conn.commit() if transmitdata == '': - sys.stderr.write('Problem: The version of SQLite you have cannot store Null values. Please download and install the latest revision of your version of Python (for example, the latest Python 2.7 revision) and try again.\n') - sys.stderr.write('PyBitmessage will now exit very abruptly. You may now see threading errors related to this abrupt exit but the problem you need to solve is related to SQLite.\n\n') + logger.fatal('Problem: The version of SQLite you have cannot store Null values. Please download and install the latest revision of your version of Python (for example, the latest Python 2.7 revision) and try again.\n') + logger.fatal('PyBitmessage will now exit very abruptly. You may now see threading errors related to this abrupt exit but the problem you need to solve is related to SQLite.\n\n') os._exit(0) except Exception as err: - print err + logger.error(err) # Let us check to see the last time we vaccumed the messages.dat file. # If it has been more than a month let's do it now. @@ -218,7 +217,7 @@ class sqlThread(threading.Thread): for row in queryreturn: value, = row if int(value) < int(time.time()) - 2592000: - print 'It has been a long time since the messages.dat file has been vacuumed. Vacuuming now...' + logger.info('It has been a long time since the messages.dat file has been vacuumed. Vacuuming now...') self.cur.execute( ''' VACUUM ''') item = '''update settings set value=? WHERE key='lastvacuumtime';''' parameters = (int(time.time()),) @@ -230,13 +229,11 @@ class sqlThread(threading.Thread): self.conn.commit() elif item == 'exit': self.conn.close() - with shared.printLock: - print 'sqlThread exiting gracefully.' + logger.info('sqlThread exiting gracefully.') return elif item == 'movemessagstoprog': - with shared.printLock: - print 'the sqlThread is moving the messages.dat file to the local program directory.' + logger.debug('the sqlThread is moving the messages.dat file to the local program directory.') self.conn.commit() self.conn.close() @@ -246,8 +243,7 @@ class sqlThread(threading.Thread): self.conn.text_factory = str self.cur = self.conn.cursor() elif item == 'movemessagstoappdata': - with shared.printLock: - print 'the sqlThread is moving the messages.dat file to the Appdata folder.' + logger.debug('the sqlThread is moving the messages.dat file to the Appdata folder.') self.conn.commit() self.conn.close() @@ -268,10 +264,8 @@ class sqlThread(threading.Thread): try: self.cur.execute(item, parameters) except Exception as err: - with shared.printLock: - sys.stderr.write('\nMajor error occurred when trying to execute a SQL statement within the sqlThread. Please tell Atheros about this error message or post it in the forum! Error occurred while trying to execute statement: "' + str( - item) + '" Here are the parameters; you might want to censor this data with asterisks (***) as it can contain private information: ' + str(repr(parameters)) + '\nHere is the actual error message thrown by the sqlThread: ' + str(err) + '\n') - sys.stderr.write('This program shall now abruptly exit!\n') + logger.fatal('Major error occurred when trying to execute a SQL statement within the sqlThread. Please tell Atheros about this error message or post it in the forum! Error occurred while trying to execute statement: "%s" Here are the parameters; you might want to censor this data with asterisks (***) as it can contain private information: %s. Here is the actual error message thrown by the sqlThread: %s', str(item), str(repr(parameters)), str(err)) + logger.fatal('This program shall now abruptly exit!') os._exit(0) From 9d3a0a160fe152e0d4978dbd95b05e909c4c5ef5 Mon Sep 17 00:00:00 2001 From: Jordan Hall Date: Sun, 11 Aug 2013 00:08:48 +0100 Subject: [PATCH 17/50] Merging with master and resolving conflicts --- src/bitmessagemain.py | 114 ++++++++++++++++++++++++++++-- src/bitmessageqt/__init__.py | 5 ++ src/bitmessageqt/bitmessageui.py | 8 +-- src/bitmessageqt/bitmessageui.ui | 10 +-- src/bitmessageqt/newchandialog.py | 13 ++-- src/bitmessageqt/newchandialog.ui | 12 +++- src/bitmessageqt/settings.py | 60 ++++++++-------- src/bitmessageqt/settings.ui | 75 +++++++++++--------- src/class_singleCleaner.py | 4 +- src/class_singleWorker.py | 14 ++++ src/class_sqlThread.py | 19 ++++- src/defaultKnownNodes.py | 8 +-- src/message_data_reader.py | 15 +--- src/shared.py | 27 +++---- 14 files changed, 269 insertions(+), 115 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index b39bdc96..cae8daeb 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -738,6 +738,115 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): data += json.dumps({'label':label.encode('base64'), 'address': address, 'enabled': enabled == 1}, indent=4, separators=(',',': ')) data += ']}' return data + elif method == 'disseminatePreEncryptedMsg': + # The device issuing this command to PyBitmessage supplies a msg object that has + # already been encrypted and had the necessary proof of work done for it to be + # disseminated to the rest of the Bitmessage network. PyBitmessage accepts this msg + # object and sends it out to the rest of the Bitmessage network as if it had generated the + # message itself. Please do not yet add this to the api doc. + if len(params) != 1: + return 'API Error 0000: I need 1 parameter!' + encryptedPayload, = params + encryptedPayload = encryptedPayload.decode('hex') + toStreamNumber = decodeVarint(encryptedPayload[16:26])[0] + inventoryHash = calculateInventoryHash(encryptedPayload) + objectType = 'msg' + shared.inventory[inventoryHash] = ( + objectType, toStreamNumber, encryptedPayload, int(time.time())) + with shared.printLock: + print 'Broadcasting inv for msg(API disseminatePreEncryptedMsg command):', inventoryHash.encode('hex') + shared.broadcastToSendDataQueues(( + toStreamNumber, 'sendinv', inventoryHash)) + elif method == 'disseminatePubkey': + # The device issuing this command to PyBitmessage supplies a pubkey object that has + # already had the necessary proof of work done for it to be disseminated to the rest of the + # Bitmessage network. PyBitmessage accepts this pubkey object and sends it out to the + # rest of the Bitmessage network as if it had generated the pubkey object itself. Please + # do not yet add this to the api doc. + if len(params) != 1: + return 'API Error 0000: I need 1 parameter!' + payload, = params + payload = payload.decode('hex') + pubkeyReadPosition = 8 # bypass the nonce + if payload[pubkeyReadPosition:pubkeyReadPosition+4] == '\x00\x00\x00\x00': # if this pubkey uses 8 byte time + pubkeyReadPosition += 8 + else: + pubkeyReadPosition += 4 + addressVersion, addressVersionLength = decodeVarint(payload[pubkeyReadPosition:pubkeyReadPosition+10]) + pubkeyReadPosition += addressVersionLength + pubkeyStreamNumber = decodeVarint(payload[pubkeyReadPosition:pubkeyReadPosition+10])[0] + inventoryHash = calculateInventoryHash(payload) + objectType = 'pubkey' + shared.inventory[inventoryHash] = ( + objectType, pubkeyStreamNumber, payload, int(time.time())) + with shared.printLock: + print 'broadcasting inv within API command disseminatePubkey with hash:', inventoryHash.encode('hex') + shared.broadcastToSendDataQueues(( + streamNumber, 'sendinv', inventoryHash)) + elif method == 'getMessageDataByDestinationHash': + # Method will eventually be used by a particular Android app to + # select relevant messages. Do not yet add this to the api + # doc. + + if len(params) != 1: + return 'API Error 0000: I need 1 parameter!' + requestedHash, = params + if len(requestedHash) != 40: + return 'API Error 0019: The length of hash should be 20 bytes (encoded in hex thus 40 characters).' + requestedHash = requestedHash.decode('hex') + + # This is not a particularly commonly used API function. Before we + # use it we'll need to fill out a field in our inventory database + # which is blank by default (first20bytesofencryptedmessage). + parameters = '' + with shared.sqlLock: + shared.sqlSubmitQueue.put('''SELECT hash, payload FROM inventory WHERE first20bytesofencryptedmessage = '' and objecttype = 'msg' ; ''') + shared.sqlSubmitQueue.put(parameters) + queryreturn = shared.sqlReturnQueue.get() + + for row in queryreturn: + hash, payload = row + readPosition = 16 # Nonce length + time length + readPosition += decodeVarint(payload[readPosition:readPosition+10])[1] # Stream Number length + t = (payload[readPosition:readPosition+20],hash) + shared.sqlSubmitQueue.put('''UPDATE inventory SET first20bytesofencryptedmessage=? WHERE hash=?; ''') + shared.sqlSubmitQueue.put(t) + shared.sqlReturnQueue.get() + + parameters = (requestedHash,) + with shared.sqlLock: + shared.sqlSubmitQueue.put('commit') + shared.sqlSubmitQueue.put('''SELECT payload FROM inventory WHERE first20bytesofencryptedmessage = ?''') + shared.sqlSubmitQueue.put(parameters) + queryreturn = shared.sqlReturnQueue.get() + data = '{"receivedMessageDatas":[' + for row in queryreturn: + payload, = row + if len(data) > 25: + data += ',' + data += json.dumps({'data':payload.encode('hex')}, indent=4, separators=(',', ': ')) + data += ']}' + return data + elif method == 'getPubkeyByHash': + # Method will eventually be used by a particular Android app to + # retrieve pubkeys. Please do not yet add this to the api docs. + if len(params) != 1: + return 'API Error 0000: I need 1 parameter!' + requestedHash, = params + if len(requestedHash) != 40: + return 'API Error 0019: The length of hash should be 20 bytes (encoded in hex thus 40 characters).' + requestedHash = requestedHash.decode('hex') + parameters = (requestedHash,) + with shared.sqlLock: + shared.sqlSubmitQueue.put('''SELECT transmitdata FROM pubkeys WHERE hash = ? ; ''') + shared.sqlSubmitQueue.put(parameters) + queryreturn = shared.sqlReturnQueue.get() + data = '{"pubkey":[' + for row in queryreturn: + transmitdata, = row + data += json.dumps({'data':transmitdata.encode('hex')}, indent=4, separators=(',', ': ')) + data += ']}' + return data elif method == 'clientStatus': return '{ "networkConnections" : "%s" }' % str(len(shared.connectedHostsList)) else: @@ -757,11 +866,8 @@ class singleAPI(threading.Thread): se.register_introspection_functions() se.serve_forever() +# This is a list of current connections (the thread pointers at least) selfInitiatedConnections = {} - # This is a list of current connections (the thread pointers at least) - - - if shared.useVeryEasyProofOfWorkForTesting: diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 5dd4c0b5..396d0b6e 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2000,6 +2000,8 @@ class MyForm(QtGui.QMainWindow): self.settingsDialogInstance.ui.checkBoxShowTrayNotifications.isChecked())) shared.config.set('bitmessagesettings', 'startintray', str( self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked())) + shared.config.set('bitmessagesettings', 'willinglysendtomobile', str( + self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()): if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( @@ -2996,6 +2998,8 @@ class settingsDialog(QtGui.QDialog): shared.config.getboolean('bitmessagesettings', 'showtraynotifications')) self.ui.checkBoxStartInTray.setChecked( shared.config.getboolean('bitmessagesettings', 'startintray')) + self.ui.checkBoxWillinglySendToMobile.setChecked( + shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) if shared.appdata == '': self.ui.checkBoxPortableMode.setChecked(True) if 'darwin' in sys.platform: @@ -3290,6 +3294,7 @@ def run(): try: translator.load("translations/bitmessage_" + str(locale.getdefaultlocale()[0])) + #translator.load("translations/bitmessage_fr_BE") # test French except: # The above is not compatible with all versions of OSX. translator.load("translations/bitmessage_en_US") # Default to english. diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index d5388182..54a3ee6f 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Thu Aug 1 00:22:41 2013 +# Created: Fri Aug 9 14:17:50 2013 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -26,7 +26,7 @@ except AttributeError: class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) - MainWindow.resize(775, 598) + MainWindow.resize(795, 580) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/can-icon-24px.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) @@ -422,7 +422,7 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 775, 21)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 27)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -539,7 +539,7 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" +"\n" "


", None)) self.label.setText(_translate("MainWindow", "To:", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 5d616be7..c2caebe0 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -6,8 +6,8 @@ 0 0 - 775 - 598 + 795 + 580 @@ -257,7 +257,7 @@ <!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:9pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> @@ -1010,8 +1010,8 @@ p, li { white-space: pre-wrap; } 0 0 - 775 - 21 + 795 + 27 diff --git a/src/bitmessageqt/newchandialog.py b/src/bitmessageqt/newchandialog.py index 43235bfa..65da1f1f 100644 --- a/src/bitmessageqt/newchandialog.py +++ b/src/bitmessageqt/newchandialog.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'newchandialog.ui' # -# Created: Mon Jul 22 01:05:35 2013 -# by: PyQt4 UI code generator 4.10.2 +# Created: Wed Aug 7 16:51:29 2013 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -26,7 +26,7 @@ except AttributeError: class Ui_newChanDialog(object): def setupUi(self, newChanDialog): newChanDialog.setObjectName(_fromUtf8("newChanDialog")) - newChanDialog.resize(530, 422) + newChanDialog.resize(553, 422) newChanDialog.setMinimumSize(QtCore.QSize(0, 0)) self.formLayout = QtGui.QFormLayout(newChanDialog) self.formLayout.setObjectName(_fromUtf8("formLayout")) @@ -87,13 +87,18 @@ class Ui_newChanDialog(object): QtCore.QObject.connect(self.radioButtonJoinChan, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.groupBoxJoinChan.setShown) QtCore.QObject.connect(self.radioButtonCreateChan, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.groupBoxCreateChan.setShown) QtCore.QMetaObject.connectSlotsByName(newChanDialog) + newChanDialog.setTabOrder(self.radioButtonJoinChan, self.radioButtonCreateChan) + newChanDialog.setTabOrder(self.radioButtonCreateChan, self.lineEditChanNameCreate) + newChanDialog.setTabOrder(self.lineEditChanNameCreate, self.lineEditChanNameJoin) + newChanDialog.setTabOrder(self.lineEditChanNameJoin, self.lineEditChanBitmessageAddress) + newChanDialog.setTabOrder(self.lineEditChanBitmessageAddress, self.buttonBox) def retranslateUi(self, newChanDialog): newChanDialog.setWindowTitle(_translate("newChanDialog", "Dialog", None)) self.radioButtonCreateChan.setText(_translate("newChanDialog", "Create a new chan", None)) self.radioButtonJoinChan.setText(_translate("newChanDialog", "Join a chan", None)) self.groupBoxCreateChan.setTitle(_translate("newChanDialog", "Create a chan", None)) - self.label_4.setText(_translate("newChanDialog", "Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private.", None)) + self.label_4.setText(_translate("newChanDialog", "

Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.

", None)) self.label_5.setText(_translate("newChanDialog", "Chan name:", None)) self.groupBoxJoinChan.setTitle(_translate("newChanDialog", "Join a chan", None)) self.label.setText(_translate("newChanDialog", "

A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.

Chans are experimental and completely unmoderatable.

", None)) diff --git a/src/bitmessageqt/newchandialog.ui b/src/bitmessageqt/newchandialog.ui index 3713c6a3..2d42b3db 100644 --- a/src/bitmessageqt/newchandialog.ui +++ b/src/bitmessageqt/newchandialog.ui @@ -6,7 +6,7 @@ 0 0 - 530 + 553 422 @@ -46,7 +46,7 @@ - Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> true @@ -130,6 +130,14 @@
+ + radioButtonJoinChan + radioButtonCreateChan + lineEditChanNameCreate + lineEditChanNameJoin + lineEditChanBitmessageAddress + buttonBox + diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index d7672e9d..40a57f5b 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'settings.ui' # -# Created: Fri Jul 12 12:37:53 2013 -# by: PyQt4 UI code generator 4.10.1 +# Created: Wed Aug 7 16:58:45 2013 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -26,7 +26,7 @@ except AttributeError: class Ui_settingsDialog(object): def setupUi(self, settingsDialog): settingsDialog.setObjectName(_fromUtf8("settingsDialog")) - settingsDialog.resize(445, 343) + settingsDialog.resize(462, 343) self.gridLayout = QtGui.QGridLayout(settingsDialog) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.buttonBox = QtGui.QDialogButtonBox(settingsDialog) @@ -41,33 +41,36 @@ class Ui_settingsDialog(object): self.tabUserInterface.setObjectName(_fromUtf8("tabUserInterface")) self.gridLayout_5 = QtGui.QGridLayout(self.tabUserInterface) self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) - self.checkBoxStartOnLogon = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxStartOnLogon.setObjectName(_fromUtf8("checkBoxStartOnLogon")) - self.gridLayout_5.addWidget(self.checkBoxStartOnLogon, 0, 0, 1, 1) - self.checkBoxStartInTray = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxStartInTray.setObjectName(_fromUtf8("checkBoxStartInTray")) - self.gridLayout_5.addWidget(self.checkBoxStartInTray, 1, 0, 1, 1) - self.checkBoxMinimizeToTray = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxMinimizeToTray.setChecked(True) - self.checkBoxMinimizeToTray.setObjectName(_fromUtf8("checkBoxMinimizeToTray")) - self.gridLayout_5.addWidget(self.checkBoxMinimizeToTray, 2, 0, 1, 1) - self.checkBoxShowTrayNotifications = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxShowTrayNotifications.setObjectName(_fromUtf8("checkBoxShowTrayNotifications")) - self.gridLayout_5.addWidget(self.checkBoxShowTrayNotifications, 3, 0, 1, 1) - self.checkBoxPortableMode = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxPortableMode.setObjectName(_fromUtf8("checkBoxPortableMode")) - self.gridLayout_5.addWidget(self.checkBoxPortableMode, 4, 0, 1, 1) - self.label_7 = QtGui.QLabel(self.tabUserInterface) - self.label_7.setWordWrap(True) - self.label_7.setObjectName(_fromUtf8("label_7")) - self.gridLayout_5.addWidget(self.label_7, 5, 0, 1, 1) self.labelSettingsNote = QtGui.QLabel(self.tabUserInterface) self.labelSettingsNote.setText(_fromUtf8("")) self.labelSettingsNote.setWordWrap(True) self.labelSettingsNote.setObjectName(_fromUtf8("labelSettingsNote")) - self.gridLayout_5.addWidget(self.labelSettingsNote, 6, 0, 1, 1) + self.gridLayout_5.addWidget(self.labelSettingsNote, 7, 0, 1, 1) spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_5.addItem(spacerItem, 7, 0, 1, 1) + self.gridLayout_5.addItem(spacerItem, 8, 0, 1, 1) + self.checkBoxStartInTray = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxStartInTray.setObjectName(_fromUtf8("checkBoxStartInTray")) + self.gridLayout_5.addWidget(self.checkBoxStartInTray, 1, 0, 1, 1) + self.checkBoxShowTrayNotifications = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxShowTrayNotifications.setObjectName(_fromUtf8("checkBoxShowTrayNotifications")) + self.gridLayout_5.addWidget(self.checkBoxShowTrayNotifications, 3, 0, 1, 1) + self.checkBoxMinimizeToTray = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxMinimizeToTray.setChecked(True) + self.checkBoxMinimizeToTray.setObjectName(_fromUtf8("checkBoxMinimizeToTray")) + self.gridLayout_5.addWidget(self.checkBoxMinimizeToTray, 2, 0, 1, 1) + self.label_7 = QtGui.QLabel(self.tabUserInterface) + self.label_7.setWordWrap(True) + self.label_7.setObjectName(_fromUtf8("label_7")) + self.gridLayout_5.addWidget(self.label_7, 5, 0, 1, 1) + self.checkBoxStartOnLogon = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxStartOnLogon.setObjectName(_fromUtf8("checkBoxStartOnLogon")) + self.gridLayout_5.addWidget(self.checkBoxStartOnLogon, 0, 0, 1, 1) + self.checkBoxPortableMode = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxPortableMode.setObjectName(_fromUtf8("checkBoxPortableMode")) + self.gridLayout_5.addWidget(self.checkBoxPortableMode, 4, 0, 1, 1) + self.checkBoxWillinglySendToMobile = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxWillinglySendToMobile.setObjectName(_fromUtf8("checkBoxWillinglySendToMobile")) + self.gridLayout_5.addWidget(self.checkBoxWillinglySendToMobile, 6, 0, 1, 1) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) self.tabNetworkSettings = QtGui.QWidget() self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings")) @@ -252,12 +255,13 @@ class Ui_settingsDialog(object): def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(_translate("settingsDialog", "Settings", None)) - self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None)) self.checkBoxStartInTray.setText(_translate("settingsDialog", "Start Bitmessage in the tray (don\'t show main window)", None)) - self.checkBoxMinimizeToTray.setText(_translate("settingsDialog", "Minimize to tray", None)) self.checkBoxShowTrayNotifications.setText(_translate("settingsDialog", "Show notification when message received", None)) - self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None)) + self.checkBoxMinimizeToTray.setText(_translate("settingsDialog", "Minimize to tray", None)) self.label_7.setText(_translate("settingsDialog", "In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive.", None)) + self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None)) + self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None)) + self.checkBoxWillinglySendToMobile.setText(_translate("settingsDialog", "Willingly include unencrypted destination address when sending to a mobile device", None)) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) self.groupBox.setTitle(_translate("settingsDialog", "Listening port", None)) self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index 9414e1a4..44c4f973 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -6,7 +6,7 @@ 0 0 - 445 + 462 343 @@ -37,13 +37,29 @@ User Interface - - + + - Start Bitmessage on user login + + + + true + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -51,6 +67,13 @@ + + + + Show notification when message received + + + @@ -61,20 +84,6 @@ - - - - Show notification when message received - - - - - - - Run in Portable Mode - - - @@ -85,28 +94,26 @@ - - + + - - - - true + Start Bitmessage on user login - - - - Qt::Vertical + + + + Run in Portable Mode - - - 20 - 40 - + + + + + + Willingly include unencrypted destination address when sending to a mobile device - + diff --git a/src/class_singleCleaner.py b/src/class_singleCleaner.py index 6fed68a5..d92a37ec 100644 --- a/src/class_singleCleaner.py +++ b/src/class_singleCleaner.py @@ -33,9 +33,9 @@ class singleCleaner(threading.Thread): for hash, storedValue in shared.inventory.items(): objectType, streamNumber, payload, receivedTime = storedValue if int(time.time()) - 3600 > receivedTime: - t = (hash, objectType, streamNumber, payload, receivedTime) + t = (hash, objectType, streamNumber, payload, receivedTime,'') shared.sqlSubmitQueue.put( - '''INSERT INTO inventory VALUES (?,?,?,?,?)''') + '''INSERT INTO inventory VALUES (?,?,?,?,?,?)''') shared.sqlSubmitQueue.put(t) shared.sqlReturnQueue.get() del shared.inventory[hash] diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py index 56f23859..b29b7f8d 100644 --- a/src/class_singleWorker.py +++ b/src/class_singleWorker.py @@ -9,6 +9,7 @@ import proofofwork import sys from class_addressGenerator import pointMult import tr +from debug import logger # This thread, of which there is only one, does the heavy lifting: # calculating POWs. @@ -517,6 +518,15 @@ class singleWorker(threading.Thread): pubkeyPayload[readPosition:readPosition + 10]) readPosition += streamNumberLength behaviorBitfield = pubkeyPayload[readPosition:readPosition + 4] + # Mobile users may ask us to include their address's RIPE hash on a message + # unencrypted. Before we actually do it the sending human must check a box + # in the settings menu to allow it. + if shared.isBitSetWithinBitfield(behaviorBitfield,30): # if receiver is a mobile device who expects that their address RIPE is included unencrypted on the front of the message.. + if not shared.safeConfigGetBoolean('bitmessagesettings','willinglysendtomobile'): # if we are Not willing to include the receiver's RIPE hash on the message.. + logger.info('The receiver is a mobile user but the sender (you) has not selected that you are willing to send to mobiles. Aborting send.') + shared.UISignalQueue.put(('updateSentItemStatusByAckdata',(ackdata,tr.translateText("MainWindow",'Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings. %1').arg(unicode(strftime(shared.config.get('bitmessagesettings', 'timeformat'),localtime(int(time.time()))),'utf-8'))))) + # if the human changes their setting and then sends another message or restarts their client, this one will send at that time. + continue readPosition += 4 # to bypass the bitfield of behaviors # pubSigningKeyBase256 = # pubkeyPayload[readPosition:readPosition+64] #We don't use this @@ -663,6 +673,10 @@ class singleWorker(threading.Thread): with shared.printLock: print 'Not bothering to generate ackdata because we are sending to a chan.' fullAckPayload = '' + elif not shared.isBitSetWithinBitfield(behaviorBitfield,31): + with shared.printLock: + print 'Not bothering to generate ackdata because the receiver said that they won\'t relay it anyway.' + fullAckPayload = '' else: fullAckPayload = self.generateFullAckMessage( ackdata, toStreamNumber, embeddedTime) # The fullAckPayload is a normal msg protocol message with the proof of work already completed that the receiver of this message can easily send out. diff --git a/src/class_sqlThread.py b/src/class_sqlThread.py index 5bdec02d..97215a24 100644 --- a/src/class_sqlThread.py +++ b/src/class_sqlThread.py @@ -46,7 +46,7 @@ class sqlThread(threading.Thread): self.cur.execute( '''CREATE TABLE pubkeys (hash blob, transmitdata blob, time int, usedpersonally text, UNIQUE(hash) ON CONFLICT REPLACE)''' ) self.cur.execute( - '''CREATE TABLE inventory (hash blob, objecttype text, streamnumber int, payload blob, receivedtime integer, UNIQUE(hash) ON CONFLICT REPLACE)''' ) + '''CREATE TABLE inventory (hash blob, objecttype text, streamnumber int, payload blob, receivedtime integer, first20bytesofencryptedmessage blob, UNIQUE(hash) ON CONFLICT REPLACE)''' ) self.cur.execute( '''CREATE TABLE knownnodes (timelastseen int, stream int, services blob, host blob, port blob, UNIQUE(host, stream, port) ON CONFLICT REPLACE)''' ) # This table isn't used in the program yet but I @@ -55,7 +55,7 @@ class sqlThread(threading.Thread): '''INSERT INTO subscriptions VALUES('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''') self.cur.execute( '''CREATE TABLE settings (key blob, value blob, UNIQUE(key) ON CONFLICT REPLACE)''' ) - self.cur.execute( '''INSERT INTO settings VALUES('version','1')''') + self.cur.execute( '''INSERT INTO settings VALUES('version','2')''') self.cur.execute( '''INSERT INTO settings VALUES('lastvacuumtime',?)''', ( int(time.time()),)) self.conn.commit() @@ -188,7 +188,20 @@ class sqlThread(threading.Thread): if not shared.config.has_option('bitmessagesettings', 'sockslisten'): shared.config.set('bitmessagesettings', 'sockslisten', 'false') - + + # Add a new column to the inventory table to store the first 20 bytes of encrypted messages to support Android app + item = '''SELECT value FROM settings WHERE key='version';''' + parameters = '' + self.cur.execute(item, parameters) + if int(self.cur.fetchall()[0][0]) == 1: + print 'upgrading database' + item = '''ALTER TABLE inventory ADD first20bytesofencryptedmessage blob DEFAULT '' ''' + parameters = '' + self.cur.execute(item, parameters) + item = '''update settings set value=? WHERE key='version';''' + parameters = (2,) + self.cur.execute(item, parameters) + try: testpayload = '\x00\x00' t = ('1234', testpayload, '12345678', 'no') diff --git a/src/defaultKnownNodes.py b/src/defaultKnownNodes.py index 52e31fff..f481581c 100644 --- a/src/defaultKnownNodes.py +++ b/src/defaultKnownNodes.py @@ -37,12 +37,10 @@ def createDefaultKnownNodes(appdata): #print stream1 #print allKnownNodes - output = open(appdata + 'knownnodes.dat', 'wb') + with open(appdata + 'knownnodes.dat', 'wb') as output: + # Pickle dictionary using protocol 0. + pickle.dump(allKnownNodes, output) - # Pickle dictionary using protocol 0. - pickle.dump(allKnownNodes, output) - - output.close() return allKnownNodes def readDefaultKnownNodes(appdata): diff --git a/src/message_data_reader.py b/src/message_data_reader.py index c600935d..084ef553 100644 --- a/src/message_data_reader.py +++ b/src/message_data_reader.py @@ -5,19 +5,10 @@ import sqlite3 from time import strftime, localtime import sys +import shared +import string -APPNAME = "PyBitmessage" -from os import path, environ -if sys.platform == 'darwin': - if "HOME" in environ: - appdata = path.join(environ["HOME"], "Library/Application support/", APPNAME) + '/' - else: - print 'Could not find home folder, please report this message and your OS X version to the BitMessage Github.' - sys.exit() -elif 'win' in sys.platform: - appdata = path.join(environ['APPDATA'], APPNAME) + '\\' -else: - appdata = path.expanduser(path.join("~", "." + APPNAME + "/")) +appdata = shared.lookupAppdataFolder() conn = sqlite3.connect( appdata + 'messages.dat' ) conn.text_factory = str diff --git a/src/shared.py b/src/shared.py index 9b8c9325..da83f374 100644 --- a/src/shared.py +++ b/src/shared.py @@ -101,10 +101,8 @@ def assembleVersionMessage(remoteHost, remotePort, myStreamNumber): random.seed() payload += eightBytesOfRandomDataUsedToDetectConnectionsToSelf - userAgent = '/PyBitmessage:' + shared.softwareVersion + \ - '/' # Length of userAgent must be less than 253. - payload += pack('>B', len( - userAgent)) # user agent string length. If the user agent is more than 252 bytes long, this code isn't going to work. + userAgent = '/PyBitmessage:' + shared.softwareVersion + '/' + payload += encodeVarint(len(userAgent)) payload += userAgent payload += encodeVarint( 1) # The number of streams about which I care. PyBitmessage currently only supports 1 per connection. @@ -203,17 +201,17 @@ def decodeWalletImportFormat(WIFstring): fullString = arithmetic.changebase(WIFstring,58,256) privkey = fullString[:-4] if fullString[-4:] != hashlib.sha256(hashlib.sha256(privkey).digest()).digest()[:4]: - logger.error('Major problem! When trying to decode one of your private keys, the checksum ' - 'failed. Here is the PRIVATE key: %s\n' % str(WIFstring)) + logger.critical('Major problem! When trying to decode one of your private keys, the checksum ' + 'failed. Here is the PRIVATE key: %s' % str(WIFstring)) return "" else: #checksum passed if privkey[0] == '\x80': return privkey[1:] else: - logger.error('Major problem! When trying to decode one of your private keys, the ' + logger.critical('Major problem! When trying to decode one of your private keys, the ' 'checksum passed but the key doesn\'t begin with hex 80. Here is the ' - 'PRIVATE key: %s\n' % str(WIFstring)) + 'PRIVATE key: %s' % str(WIFstring)) return "" @@ -243,8 +241,7 @@ def reloadMyAddressHashes(): myAddressesByHash[hash] = addressInKeysFile else: - logger.error('Error in reloadMyAddressHashes: Can\'t handle address ' - 'versions other than 2 or 3.\n') + logger.error('Error in reloadMyAddressHashes: Can\'t handle address versions other than 2 or 3.\n') if not keyfileSecure: fixSensitiveFilePermissions(appdata + 'keys.dat', hasEnabledKeys) @@ -320,8 +317,8 @@ def flushInventory(): sqlLock.acquire() for hash, storedValue in inventory.items(): objectType, streamNumber, payload, receivedTime = storedValue - t = (hash,objectType,streamNumber,payload,receivedTime) - sqlSubmitQueue.put('''INSERT INTO inventory VALUES (?,?,?,?,?)''') + t = (hash,objectType,streamNumber,payload,receivedTime,'') + sqlSubmitQueue.put('''INSERT INTO inventory VALUES (?,?,?,?,?,?)''') sqlSubmitQueue.put(t) sqlReturnQueue.get() del inventory[hash] @@ -383,6 +380,12 @@ def fixSensitiveFilePermissions(filename, hasEnabledKeys): except Exception, e: logger.exception('Keyfile permissions could not be fixed.') raise + +def isBitSetWithinBitfield(fourByteString, n): + # Uses MSB 0 bit numbering across 4 bytes of data + n = 31 - n + x, = unpack('>L', fourByteString) + return x & 2**n != 0 Peer = collections.namedtuple('Peer', ['host', 'port']) From 3ff76875aa5d8b8dbadef48e28cc7e919b9042b3 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 11 Aug 2013 12:07:54 +0100 Subject: [PATCH 18/50] Packaging updated to be architecture independent --- Makefile | 3 ++- arch.sh | 2 +- archpackage/PKGBUILD | 8 ++++---- debian.sh | 4 ++-- debian/changelog | 3 ++- debian/control | 4 ++-- generate.sh | 2 +- puppypackage/pybitmessage-0.3.5.pet.specs | 2 +- rpmpackage/pybitmessage.spec | 4 +++- src/bitmessageqt/__init__.py | 10 ++++++++++ 10 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index e0ff247a..07e8b7bc 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,8 @@ PREFIX?=/usr/local all: debug: source: - tar -cvzf ../${APP}_${VERSION}.orig.tar.gz ../${APP}-${VERSION} --exclude-vcs + tar -cvf ../${APP}_${VERSION}.orig.tar ../${APP}-${VERSION} --exclude-vcs + gzip -f9n ../${APP}_${VERSION}.orig.tar install: mkdir -p ${DESTDIR}/usr mkdir -p ${DESTDIR}${PREFIX} diff --git a/arch.sh b/arch.sh index 0ccc45b3..1ae5211d 100755 --- a/arch.sh +++ b/arch.sh @@ -4,7 +4,7 @@ APP=pybitmessage PREV_VERSION=0.3.5 VERSION=0.3.5 RELEASE=1 -ARCH_TYPE=`uname -m` +ARCH_TYPE=any CURRDIR=`pwd` SOURCE=archpackage/${APP}-${VERSION}.tar.gz diff --git a/archpackage/PKGBUILD b/archpackage/PKGBUILD index efbf33e2..fd13b92a 100644 --- a/archpackage/PKGBUILD +++ b/archpackage/PKGBUILD @@ -3,13 +3,13 @@ pkgname=pybitmessage pkgver=0.3.5 pkgrel=1 pkgdesc="Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide "non-content" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." -arch=('i686' 'x86_64') +arch=('any') url="https://github.com/Bitmessage/PyBitmessage" license=('MIT') groups=() -depends=('python2' 'qt4' 'python2-pyqt4' 'sqlite' 'openssl' 'gst123') +depends=('python2' 'qt4' 'python2-pyqt4' 'sqlite' 'openssl' 'mpg123') makedepends=() -optdepends=('python2-gevent') +optdepends=('python2-gevent: Python network library that uses greenlet and libevent for easy and scalable concurrency') provides=() conflicts=() replaces=() @@ -19,7 +19,7 @@ install= changelog= source=($pkgname-$pkgver.tar.gz) noextract=() -md5sums=() +md5sums=(ebf89129571571198473559b4b2e552c) build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr diff --git a/debian.sh b/debian.sh index a4d6882e..ea46acaf 100755 --- a/debian.sh +++ b/debian.sh @@ -1,10 +1,10 @@ #!/bin/bash APP=pybitmessage -PREV_VERSION=0.3.4 +PREV_VERSION=0.3.5 VERSION=0.3.5 RELEASE=1 -ARCH_TYPE=`uname -m` +ARCH_TYPE=all DIR=${APP}-${VERSION} if [ $ARCH_TYPE == "x86_64" ]; then diff --git a/debian/changelog b/debian/changelog index 711f6488..8cdaff2c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,7 +14,8 @@ pybitmessage (0.3.5-1) raring; urgency=low * Added Russian translation * Added search support in the UI * Added 'make uninstall' - * To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 if PKCS5_PBKDF2_HMAC is unavailable + * To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 + if PKCS5_PBKDF2_HMAC is unavailable * Added better warnings for OSX users who are using old versions of Python * Repaired debian packaging * Altered Makefile to avoid needing to chase changes diff --git a/debian/control b/debian/control index 5e016a1c..6fb419f4 100644 --- a/debian/control +++ b/debian/control @@ -1,4 +1,5 @@ Source: pybitmessage +Section: mail Priority: extra Maintainer: Bob Mottram (4096 bits) Build-Depends: debhelper (>= 9.0.0) @@ -7,8 +8,7 @@ Homepage: https://github.com/Bitmessage/PyBitmessage Vcs-Git: https://github.com/Bitmessage/PyBitmessage.git Package: pybitmessage -Section: mail -Architecture: any +Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends}, python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev, gst123 Suggests: libmessaging-menu-dev Description: Send encrypted messages diff --git a/generate.sh b/generate.sh index d21f4d83..d65f4f86 100755 --- a/generate.sh +++ b/generate.sh @@ -4,4 +4,4 @@ rm -f Makefile rpmpackage/*.spec -packagemonkey -n "PyBitmessage" --version "0.3.5" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev, gst123" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs, gst123" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip, gst123" --dependsarch "python2, qt4, python2-pyqt4, sqlite, openssl, gst123" --suggestsarch "python2-gevent" --pythonversion 2 --dependsebuild "dev-libs/openssl, dev-python/PyQt4[${PYTHON_USEDEP}]" --buildebuild "\${PYTHON_DEPS}" --pythonreq "sqlite" --repository "https://github.com/Bitmessage/PyBitmessage.git" +packagemonkey -n "PyBitmessage" --version "0.3.5" --dir "." -l "mit" -e "Bob Mottram (4096 bits) " --brief "Send encrypted messages" --desc "Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs." --homepage "https://github.com/Bitmessage/PyBitmessage" --section "mail" --categories "Office/Email" --dependsdeb "python (>= 2.7.0), openssl, python-qt4, libqt4-dev (>= 4.8.0), python-qt4-dev, sqlite3, libsqlite3-dev, gst123" --dependsrpm "python, PyQt4, openssl-compat-bitcoin-libs, gst123" --mainscript "bitmessagemain.py" --librarypath "/opt/openssl-compat-bitcoin/lib/" --suggestsdeb "libmessaging-menu-dev" --dependspuppy "openssl, python-qt4, sqlite3, sqlite3-dev, python-openssl, python-sip, gst123" --dependsarch "python2, qt4, python2-pyqt4, sqlite, openssl, mpg123" --suggestsarch "python2-gevent: Python network library that uses greenlet and libevent for easy and scalable concurrency" --pythonversion 2 --dependsebuild "dev-libs/openssl, dev-python/PyQt4[${PYTHON_USEDEP}]" --buildebuild "\${PYTHON_DEPS}" --pythonreq "sqlite" --repository "https://github.com/Bitmessage/PyBitmessage.git" diff --git a/puppypackage/pybitmessage-0.3.5.pet.specs b/puppypackage/pybitmessage-0.3.5.pet.specs index 939294e4..717cd281 100644 --- a/puppypackage/pybitmessage-0.3.5.pet.specs +++ b/puppypackage/pybitmessage-0.3.5.pet.specs @@ -1 +1 @@ -pybitmessage-0.3.5-1|PyBitmessage|0.3.5|1|Internet;mailnews;|7.2M||pybitmessage-0.3.5-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip,+gst123|Send encrypted messages|ubuntu|precise|5| +pybitmessage-0.3.5-1|PyBitmessage|0.3.5|1|Internet;mailnews;|3.8M||pybitmessage-0.3.5-1.pet|+openssl,+python-qt4,+sqlite3,+sqlite3-dev,+python-openssl,+python-sip,+gst123|Send encrypted messages|ubuntu|precise|5| diff --git a/rpmpackage/pybitmessage.spec b/rpmpackage/pybitmessage.spec index b15bd586..3af43532 100644 --- a/rpmpackage/pybitmessage.spec +++ b/rpmpackage/pybitmessage.spec @@ -6,6 +6,7 @@ License: MIT URL: https://github.com/Bitmessage/PyBitmessage Packager: Bob Mottram (4096 bits) Source0: http://yourdomainname.com/src/%{name}_%{version}.orig.tar.gz +BuildArch: noarch Group: Office/Email Requires: python, PyQt4, openssl-compat-bitcoin-libs, gst123 @@ -83,7 +84,8 @@ make install -B DESTDIR=%{buildroot} PREFIX=/usr - Added Russian translation - Added search support in the UI - Added 'make uninstall' -- To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 if PKCS5_PBKDF2_HMAC is unavailable +- To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 + if PKCS5_PBKDF2_HMAC is unavailable - Added better warnings for OSX users who are using old versions of Python - Repaired debian packaging - Altered Makefile to avoid needing to chase changes diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 1d115af1..58452876 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -1054,12 +1054,22 @@ class MyForm(QtGui.QMainWindow): if 'linux' in sys.platform: # Note: QSound was a nice idea but it didn't work if '.mp3' in soundFilename: + gst_available=False try: subprocess.call(["gst123", soundFilename], stdin=subprocess.PIPE, stdout=subprocess.PIPE) + gst_available=True except: print "WARNING: gst123 must be installed in order to play mp3 sounds" + if not gst_available: + try: + subprocess.call(["mpg123", soundFilename], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + gst_available=True + except: + print "WARNING: mpg123 must be installed in order to play mp3 sounds" else: try: subprocess.call(["aplay", soundFilename], From 2526608c39bf60b9b12b35258abbe655844b136c Mon Sep 17 00:00:00 2001 From: "Grant T. Olson" Date: Sun, 11 Aug 2013 15:50:47 -0400 Subject: [PATCH 19/50] Convert 'API Error' to raise APIError() Catch of unhandled exceptions and return them as new API Error 21 - Unexpected API Failure _decode method that transforms "!!!".decode('hex')errors to new API Error 22: Decode Error --- src/bitmessagemain.py | 212 +++++++++++++++++++++++------------------- 1 file changed, 118 insertions(+), 94 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index cae8daeb..065410e0 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -53,6 +53,13 @@ def connectToStream(streamNumber): a.start() +class APIError(Exception): + def __init__(self, error_number, error_message): + self.error_number = error_number + self.error_message = error_message + def __str__(self): + return "API Error %04i: %s" % (self.error_number, self.error_message) + # This is one of several classes that constitute the API # This class was written by Vaibhav Bhatia. Modified by Jonathan Warren (Atheros). # http://code.activestate.com/recipes/501148-xmlrpc-serverclient-which-does-cookie-handling-and/ @@ -132,14 +139,13 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return False - def _dispatch(self, method, params): - self.cookies = [] - - validuser = self.APIAuthenticateClient() - if not validuser: - time.sleep(2) - return "RPC Username or password incorrect or HTTP header lacks authentication at all." - # handle request + def _decode(self, text, decode_type): + try: + return text.decode(decode_type) + except TypeError as e: + raise APIError(22, "Decode error - " + str(e)) + + def _handle_request(self, method, params): if method == 'helloWorld': (a, b) = params return a + '-' + b @@ -165,7 +171,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'createRandomAddress': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') elif len(params) == 1: label, = params eighteenByteRipe = False @@ -192,12 +198,12 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): payloadLengthExtraBytes = int( shared.networkDefaultPayloadLengthExtraBytes * smallMessageDifficulty) else: - return 'API Error 0000: Too many parameters!' - label = label.decode('base64') + raise APIError(0, 'Too many parameters!') + label = self._decode(label, "base64") try: unicode(label, 'utf-8') except: - return 'API Error 0017: Label is not valid UTF-8 data.' + raise APIError(17, 'Label is not valid UTF-8 data.') shared.apiAddressGeneratorReturnQueue.queue.clear() streamNumberForAddress = 1 shared.addressGeneratorQueue.put(( @@ -205,7 +211,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return shared.apiAddressGeneratorReturnQueue.get() elif method == 'createDeterministicAddresses': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') elif len(params) == 1: passphrase, = params numberOfAddresses = 1 @@ -259,22 +265,22 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): payloadLengthExtraBytes = int( shared.networkDefaultPayloadLengthExtraBytes * smallMessageDifficulty) else: - return 'API Error 0000: Too many parameters!' + raise APIError(0, 'Too many parameters!') if len(passphrase) == 0: - return 'API Error 0001: The specified passphrase is blank.' - passphrase = passphrase.decode('base64') + raise APIError(1, 'The specified passphrase is blank.') + passphrase = self._decode(passphrase, "base64") if addressVersionNumber == 0: # 0 means "just use the proper addressVersionNumber" addressVersionNumber = 3 if addressVersionNumber != 3: - return 'API Error 0002: The address version number currently must be 3 (or 0 which means auto-select). ' + addressVersionNumber + ' isn\'t supported.' + raise APIError(2,'The address version number currently must be 3 (or 0 which means auto-select). ' + addressVersionNumber + ' isn\'t supported.') if streamNumber == 0: # 0 means "just use the most available stream" streamNumber = 1 if streamNumber != 1: - return 'API Error 0003: The stream number must be 1 (or 0 which means auto-select). Others aren\'t supported.' + raise APIError(3,'The stream number must be 1 (or 0 which means auto-select). Others aren\'t supported.') if numberOfAddresses == 0: - return 'API Error 0004: Why would you ask me to generate 0 addresses for you?' + raise APIError(4, 'Why would you ask me to generate 0 addresses for you?') if numberOfAddresses > 999: - return 'API Error 0005: You have (accidentally?) specified too many addresses to make. Maximum 999. This check only exists to prevent mischief; if you really want to create more addresses than this, contact the Bitmessage developers and we can modify the check or you can do it yourself by searching the source code for this message.' + raise APIError(5, 'You have (accidentally?) specified too many addresses to make. Maximum 999. This check only exists to prevent mischief; if you really want to create more addresses than this, contact the Bitmessage developers and we can modify the check or you can do it yourself by searching the source code for this message.') shared.apiAddressGeneratorReturnQueue.queue.clear() print 'Requesting that the addressGenerator create', numberOfAddresses, 'addresses.' shared.addressGeneratorQueue.put( @@ -290,17 +296,17 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getDeterministicAddress': if len(params) != 3: - return 'API Error 0000: I need exactly 3 parameters.' + raise APIError(0, 'I need exactly 3 parameters.') passphrase, addressVersionNumber, streamNumber = params numberOfAddresses = 1 eighteenByteRipe = False if len(passphrase) == 0: - return 'API Error 0001: The specified passphrase is blank.' - passphrase = passphrase.decode('base64') + raise APIError(1, 'The specified passphrase is blank.') + passphrase = self._decode(passphrase, "base64") if addressVersionNumber != 3: - return 'API Error 0002: The address version number currently must be 3. ' + addressVersionNumber + ' isn\'t supported.' + raise APIError(2, 'The address version number currently must be 3. ' + addressVersionNumber + ' isn\'t supported.') if streamNumber != 1: - return 'API Error 0003: The stream number must be 1. Others aren\'t supported.' + raise APIError(3, ' The stream number must be 1. Others aren\'t supported.') shared.apiAddressGeneratorReturnQueue.queue.clear() print 'Requesting that the addressGenerator create', numberOfAddresses, 'addresses.' shared.addressGeneratorQueue.put( @@ -342,8 +348,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getInboxMessageById' or method == 'getInboxMessageByID': if len(params) == 0: - return 'API Error 0000: I need parameters!' - msgid = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + msgid = self._decode(params[0], "hex") v = (msgid,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put('''SELECT msgid, toaddress, fromaddress, subject, received, message, encodingtype, read FROM inbox WHERE msgid=?''') @@ -390,7 +396,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getInboxMessagesByReceiver' or method == 'getInboxMessagesByAddress': #after some time getInboxMessagesByAddress should be removed if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') toAddress = params[0] v = (toAddress,) shared.sqlLock.acquire() @@ -410,8 +416,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getSentMessageById' or method == 'getSentMessageByID': if len(params) == 0: - return 'API Error 0000: I need parameters!' - msgid = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + msgid = self._decode(params[0], "hex") v = (msgid,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put('''SELECT msgid, toaddress, fromaddress, subject, lastactiontime, message, encodingtype, status, ackdata FROM sent WHERE msgid=?''') @@ -428,7 +434,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getSentMessagesByAddress' or method == 'getSentMessagesBySender': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') fromAddress = params[0] v = (fromAddress,) shared.sqlLock.acquire() @@ -448,8 +454,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'getSentMessageByAckData': if len(params) == 0: - return 'API Error 0000: I need parameters!' - ackData = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + ackData = self._decode(params[0], "hex") v = (ackData,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put('''SELECT msgid, toaddress, fromaddress, subject, lastactiontime, message, encodingtype, status, ackdata FROM sent WHERE ackdata=?''') @@ -466,8 +472,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return data elif method == 'trashMessage': if len(params) == 0: - return 'API Error 0000: I need parameters!' - msgid = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + msgid = self._decode(params[0], "hex") # Trash if in inbox table helper_inbox.trash(msgid) @@ -483,14 +489,14 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return 'Trashed message (assuming message existed).' elif method == 'trashInboxMessage': if len(params) == 0: - return 'API Error 0000: I need parameters!' - msgid = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + msgid = self._decode(params[0], "hex") helper_inbox.trash(msgid) return 'Trashed inbox message (assuming message existed).' elif method == 'trashSentMessage': if len(params) == 0: - return 'API Error 0000: I need parameters!' - msgid = params[0].decode('hex') + raise APIError(0, 'I need parameters!') + msgid = self._decode(params[0], "hex") t = (msgid,) shared.sqlLock.acquire() shared.sqlSubmitQueue.put('''UPDATE sent SET folder='trash' WHERE msgid=?''') @@ -502,16 +508,16 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return 'Trashed sent message (assuming message existed).' elif method == 'sendMessage': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') elif len(params) == 4: toAddress, fromAddress, subject, message = params encodingType = 2 elif len(params) == 5: toAddress, fromAddress, subject, message, encodingType = params if encodingType != 2: - return 'API Error 0006: The encoding type must be 2 because that is the only one this program currently supports.' - subject = subject.decode('base64') - message = message.decode('base64') + raise APIError(6, 'The encoding type must be 2 because that is the only one this program currently supports.') + subject = self._decode(subject, "base64") + message = self._decode(message, "base64") status, addressVersionNumber, streamNumber, toRipe = decodeAddress( toAddress) if status != 'success': @@ -519,16 +525,16 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): print 'API Error 0007: Could not decode address:', toAddress, ':', status if status == 'checksumfailed': - return 'API Error 0008: Checksum failed for address: ' + toAddress + raise APIError(8, 'Checksum failed for address: ' + toAddress) if status == 'invalidcharacters': - return 'API Error 0009: Invalid characters in address: ' + toAddress + raise APIError(9, 'Invalid characters in address: ' + toAddress) if status == 'versiontoohigh': - return 'API Error 0010: Address version number too high (or zero) in address: ' + toAddress - return 'API Error 0007: Could not decode address: ' + toAddress + ' : ' + status + raise APIError(10, 'Address version number too high (or zero) in address: ' + toAddress) + raise APIError(7, 'Could not decode address: ' + toAddress + ' : ' + status) if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported. Check the toAddress.' + raise APIError(11, 'The address version number currently must be 2 or 3. Others aren\'t supported. Check the toAddress.') if streamNumber != 1: - return 'API Error 0012: The stream number must be 1. Others aren\'t supported. Check the toAddress.' + raise APIError(12, 'The stream number must be 1. Others aren\'t supported. Check the toAddress.') status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) if status != 'success': @@ -536,25 +542,25 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): print 'API Error 0007: Could not decode address:', fromAddress, ':', status if status == 'checksumfailed': - return 'API Error 0008: Checksum failed for address: ' + fromAddress + raise APIError(8, 'Checksum failed for address: ' + fromAddress) if status == 'invalidcharacters': - return 'API Error 0009: Invalid characters in address: ' + fromAddress + raise APIError(9, 'Invalid characters in address: ' + fromAddress) if status == 'versiontoohigh': - return 'API Error 0010: Address version number too high (or zero) in address: ' + fromAddress - return 'API Error 0007: Could not decode address: ' + fromAddress + ' : ' + status + raise APIError(10, 'Address version number too high (or zero) in address: ' + fromAddress) + raise APIError(7, 'Could not decode address: ' + fromAddress + ' : ' + status) if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.' + raise APIError(11, 'The address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.') if streamNumber != 1: - return 'API Error 0012: The stream number must be 1. Others aren\'t supported. Check the fromAddress.' + raise APIError(12, 'The stream number must be 1. Others aren\'t supported. Check the fromAddress.') toAddress = addBMIfNotPresent(toAddress) fromAddress = addBMIfNotPresent(fromAddress) try: fromAddressEnabled = shared.config.getboolean( fromAddress, 'enabled') except: - return 'API Error 0013: Could not find your fromAddress in the keys.dat file.' + raise APIError(13, 'Could not find your fromAddress in the keys.dat file.') if not fromAddressEnabled: - return 'API Error 0014: Your fromAddress is disabled. Cannot send.' + raise APIError(14, 'Your fromAddress is disabled. Cannot send.') ackdata = OpenSSL.rand(32) @@ -583,16 +589,16 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): elif method == 'sendBroadcast': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') if len(params) == 3: fromAddress, subject, message = params encodingType = 2 elif len(params) == 4: fromAddress, subject, message, encodingType = params if encodingType != 2: - return 'API Error 0006: The encoding type must be 2 because that is the only one this program currently supports.' - subject = subject.decode('base64') - message = message.decode('base64') + raise APIError(6, 'The encoding type must be 2 because that is the only one this program currently supports.') + subject = self._decode(subject, "base64") + message = self._decode(message, "base64") status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( fromAddress) @@ -601,22 +607,22 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): print 'API Error 0007: Could not decode address:', fromAddress, ':', status if status == 'checksumfailed': - return 'API Error 0008: Checksum failed for address: ' + fromAddress + raise APIError(8, 'Checksum failed for address: ' + fromAddress) if status == 'invalidcharacters': - return 'API Error 0009: Invalid characters in address: ' + fromAddress + raise APIError(9, 'Invalid characters in address: ' + fromAddress) if status == 'versiontoohigh': - return 'API Error 0010: Address version number too high (or zero) in address: ' + fromAddress - return 'API Error 0007: Could not decode address: ' + fromAddress + ' : ' + status + raise APIError(10, 'Address version number too high (or zero) in address: ' + fromAddress) + raise APIError(7, 'Could not decode address: ' + fromAddress + ' : ' + status) if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: the address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.' + raise APIError(11, 'the address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.') if streamNumber != 1: - return 'API Error 0012: the stream number must be 1. Others aren\'t supported. Check the fromAddress.' + raise APIError(12, 'the stream number must be 1. Others aren\'t supported. Check the fromAddress.') fromAddress = addBMIfNotPresent(fromAddress) try: fromAddressEnabled = shared.config.getboolean( fromAddress, 'enabled') except: - return 'API Error 0013: could not find your fromAddress in the keys.dat file.' + raise APIError(13, 'could not find your fromAddress in the keys.dat file.') ackdata = OpenSSL.rand(32) toAddress = '[Broadcast subscribers]' ripe = '' @@ -634,14 +640,15 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return ackdata.encode('hex') elif method == 'getStatus': if len(params) != 1: - return 'API Error 0000: I need one parameter!' + raise APIError(0, 'I need one parameter!') ackdata, = params if len(ackdata) != 64: - return 'API Error 0015: The length of ackData should be 32 bytes (encoded in hex thus 64 characters).' + raise APIError(15, 'The length of ackData should be 32 bytes (encoded in hex thus 64 characters).') + ackdata = self._decode(ackdata, "hex") shared.sqlLock.acquire() shared.sqlSubmitQueue.put( '''SELECT status FROM sent where ackdata=?''') - shared.sqlSubmitQueue.put((ackdata.decode('hex'),)) + shared.sqlSubmitQueue.put((ackdata,)) queryreturn = shared.sqlReturnQueue.get() shared.sqlLock.release() if queryreturn == []: @@ -651,19 +658,19 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return status elif method == 'addSubscription': if len(params) == 0: - return 'API Error 0000: I need parameters!' + raise APIError(0, 'I need parameters!') if len(params) == 1: address, = params label == '' if len(params) == 2: address, label = params - label = label.decode('base64') + label = self._decode(label, "base64") try: unicode(label, 'utf-8') except: - return 'API Error 0017: Label is not valid UTF-8 data.' + raise APIError(17, 'Label is not valid UTF-8 data.') if len(params) > 2: - return 'API Error 0000: I need either 1 or 2 parameters!' + raise APIError(0, 'I need either 1 or 2 parameters!') address = addBMIfNotPresent(address) status, addressVersionNumber, streamNumber, toRipe = decodeAddress( address) @@ -672,16 +679,16 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): print 'API Error 0007: Could not decode address:', address, ':', status if status == 'checksumfailed': - return 'API Error 0008: Checksum failed for address: ' + address + raise APIError(8, 'Checksum failed for address: ' + address) if status == 'invalidcharacters': - return 'API Error 0009: Invalid characters in address: ' + address + raise APIError(9, 'Invalid characters in address: ' + address) if status == 'versiontoohigh': - return 'API Error 0010: Address version number too high (or zero) in address: ' + address - return 'API Error 0007: Could not decode address: ' + address + ' : ' + status + raise APIError(10, 'Address version number too high (or zero) in address: ' + address) + raise APIError(7, 'Could not decode address: ' + address + ' : ' + status) if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported.' + raise APIError(11, 'The address version number currently must be 2 or 3. Others aren\'t supported.') if streamNumber != 1: - return 'API Error 0012: The stream number must be 1. Others aren\'t supported.' + raise APIError(12, 'The stream number must be 1. Others aren\'t supported.') # First we must check to see if the address is already in the # subscriptions list. shared.sqlLock.acquire() @@ -692,7 +699,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): queryreturn = shared.sqlReturnQueue.get() shared.sqlLock.release() if queryreturn != []: - return 'API Error 0016: You are already subscribed to that address.' + raise APIError(16, 'You are already subscribed to that address.') t = (label, address, True) shared.sqlLock.acquire() shared.sqlSubmitQueue.put( @@ -708,7 +715,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): elif method == 'deleteSubscription': if len(params) != 1: - return 'API Error 0000: I need 1 parameter!' + raise APIError(0, 'I need 1 parameter!') address, = params address = addBMIfNotPresent(address) t = (address,) @@ -745,9 +752,9 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): # object and sends it out to the rest of the Bitmessage network as if it had generated the # message itself. Please do not yet add this to the api doc. if len(params) != 1: - return 'API Error 0000: I need 1 parameter!' + raise APIError(0, 'I need 1 parameter!') encryptedPayload, = params - encryptedPayload = encryptedPayload.decode('hex') + encryptedPayload = self._decode(encryptedPayload, "hex") toStreamNumber = decodeVarint(encryptedPayload[16:26])[0] inventoryHash = calculateInventoryHash(encryptedPayload) objectType = 'msg' @@ -764,9 +771,9 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): # rest of the Bitmessage network as if it had generated the pubkey object itself. Please # do not yet add this to the api doc. if len(params) != 1: - return 'API Error 0000: I need 1 parameter!' + raise APIError(0, 'I need 1 parameter!') payload, = params - payload = payload.decode('hex') + payload = self._decode(payload, "hex") pubkeyReadPosition = 8 # bypass the nonce if payload[pubkeyReadPosition:pubkeyReadPosition+4] == '\x00\x00\x00\x00': # if this pubkey uses 8 byte time pubkeyReadPosition += 8 @@ -789,11 +796,11 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): # doc. if len(params) != 1: - return 'API Error 0000: I need 1 parameter!' + raise APIError(0, 'I need 1 parameter!') requestedHash, = params if len(requestedHash) != 40: - return 'API Error 0019: The length of hash should be 20 bytes (encoded in hex thus 40 characters).' - requestedHash = requestedHash.decode('hex') + raise APIError(19, 'The length of hash should be 20 bytes (encoded in hex thus 40 characters).') + requestedHash = self._decode(requestedHash, "hex") # This is not a particularly commonly used API function. Before we # use it we'll need to fill out a field in our inventory database @@ -831,11 +838,11 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): # Method will eventually be used by a particular Android app to # retrieve pubkeys. Please do not yet add this to the api docs. if len(params) != 1: - return 'API Error 0000: I need 1 parameter!' + raise APIError(0, 'I need 1 parameter!') requestedHash, = params if len(requestedHash) != 40: - return 'API Error 0019: The length of hash should be 20 bytes (encoded in hex thus 40 characters).' - requestedHash = requestedHash.decode('hex') + raise APIError(19, 'The length of hash should be 20 bytes (encoded in hex thus 40 characters).') + requestedHash = self._decode(requestedHash, "hex") parameters = (requestedHash,) with shared.sqlLock: shared.sqlSubmitQueue.put('''SELECT transmitdata FROM pubkeys WHERE hash = ? ; ''') @@ -850,7 +857,24 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): elif method == 'clientStatus': return '{ "networkConnections" : "%s" }' % str(len(shared.connectedHostsList)) else: - return 'API Error 0020: Invalid method: %s' % method + raise APIError(20, 'Invalid method: %s' % method) + + def _dispatch(self, method, params): + self.cookies = [] + + validuser = self.APIAuthenticateClient() + if not validuser: + time.sleep(2) + return "RPC Username or password incorrect or HTTP header lacks authentication at all." + + try: + return self._handle_request(method, params) + except APIError as e: + return str(e) + except Exception as e: + print(e) + print(sys.exc_info()[0]) + return "API Error 0021: Unexpected API Failure - %s" % str(e) # This thread, of which there is only one, runs the API. From f6a07a374a5c94bcaba350a92953d6dff1b41478 Mon Sep 17 00:00:00 2001 From: Adam Fontenot Date: Mon, 12 Aug 2013 18:13:28 -0500 Subject: [PATCH 20/50] Add backend ability to understand shorter addresses. Introduces addresses version 4. --- src/addresses.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/addresses.py b/src/addresses.py index a6a571f6..46fa35ba 100644 --- a/src/addresses.py +++ b/src/addresses.py @@ -97,13 +97,23 @@ def calculateInventoryHash(data): return sha2.digest()[0:32] def encodeAddress(version,stream,ripe): - if version >= 2: + if version >= 2 and version < 4: if len(ripe) != 20: raise Exception("Programming error in encodeAddress: The length of a given ripe hash was not 20.") if ripe[:2] == '\x00\x00': ripe = ripe[2:] elif ripe[:1] == '\x00': ripe = ripe[1:] + elif version == 4: + if len(ripe) != 20: + raise Exception("Programming error in encodeAddress: The length of a given ripe hash was not 20.") + emptybitcounter = 0 + while True: + if ripe[emptybitcounter] != '\x00': + break + emptybitcounter += 1 + ripe = ripe[emptybitcounter:] + a = encodeVarint(version) + encodeVarint(stream) + ripe sha = hashlib.new('sha512') sha.update(a) @@ -164,7 +174,7 @@ def decodeAddress(address): #print 'addressVersionNumber', addressVersionNumber #print 'bytesUsedByVersionNumber', bytesUsedByVersionNumber - if addressVersionNumber > 3: + if addressVersionNumber > 4: print 'cannot decode address version numbers this high' status = 'versiontoohigh' return status,0,0,0 @@ -191,6 +201,17 @@ def decodeAddress(address): return 'ripetoolong',0,0,0 else: return 'otherproblem',0,0,0 + elif addressVersionNumber == 4: + if len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4]) > 20: + return 'ripetoolong',0,0,0 + elif len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4]) < 4: + return 'ripetooshort',0,0,0 + else: + x00string = '' + for i in range(20 - len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4])): + x00string += '\x00' + return status,addressVersionNumber,streamNumber,x00string+data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4] + def addBMIfNotPresent(address): address = str(address).strip() From f3e8ce3b8206b69d630ee7566d2d30f50ebceeb1 Mon Sep 17 00:00:00 2001 From: Adam Fontenot Date: Mon, 12 Aug 2013 20:59:38 -0500 Subject: [PATCH 21/50] Made changes suggested by nimdahk --- src/addresses.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/addresses.py b/src/addresses.py index 46fa35ba..1db2105d 100644 --- a/src/addresses.py +++ b/src/addresses.py @@ -107,13 +107,8 @@ def encodeAddress(version,stream,ripe): elif version == 4: if len(ripe) != 20: raise Exception("Programming error in encodeAddress: The length of a given ripe hash was not 20.") - emptybitcounter = 0 - while True: - if ripe[emptybitcounter] != '\x00': - break - emptybitcounter += 1 - ripe = ripe[emptybitcounter:] - + ripe = ripe.lstrip('\x00') + a = encodeVarint(version) + encodeVarint(stream) + ripe sha = hashlib.new('sha512') sha.update(a) @@ -207,9 +202,7 @@ def decodeAddress(address): elif len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4]) < 4: return 'ripetooshort',0,0,0 else: - x00string = '' - for i in range(20 - len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4])): - x00string += '\x00' + x00string = '\x00' * (20 - len(data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4])) return status,addressVersionNumber,streamNumber,x00string+data[bytesUsedByVersionNumber+bytesUsedByStreamNumber:-4] From 782214c7b799cd24718136eb931e081bf5e08c36 Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Wed, 14 Aug 2013 23:21:05 -0400 Subject: [PATCH 22/50] Allow inbox and sent preview panels to resize. --- src/bitmessageqt/bitmessageui.py | 30 ++-- src/bitmessageqt/bitmessageui.ui | 269 ++++++++++++++++--------------- 2 files changed, 159 insertions(+), 140 deletions(-) diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index c051c076..0608c733 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Mon Aug 12 00:08:20 2013 -# by: PyQt4 UI code generator 4.10.2 +# Created: Wed Aug 14 23:19:43 2013 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -69,7 +69,10 @@ class Ui_MainWindow(object): self.inboxSearchOptionCB.addItem(_fromUtf8("")) self.horizontalLayoutSearch.addWidget(self.inboxSearchOptionCB) self.verticalLayout_2.addLayout(self.horizontalLayoutSearch) - self.tableWidgetInbox = QtGui.QTableWidget(self.inbox) + self.splitter = QtGui.QSplitter(self.inbox) + self.splitter.setOrientation(QtCore.Qt.Vertical) + self.splitter.setObjectName(_fromUtf8("splitter")) + self.tableWidgetInbox = QtGui.QTableWidget(self.splitter) self.tableWidgetInbox.setAlternatingRowColors(True) self.tableWidgetInbox.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.tableWidgetInbox.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) @@ -93,11 +96,10 @@ class Ui_MainWindow(object): self.tableWidgetInbox.horizontalHeader().setStretchLastSection(True) self.tableWidgetInbox.verticalHeader().setVisible(False) self.tableWidgetInbox.verticalHeader().setDefaultSectionSize(26) - self.verticalLayout_2.addWidget(self.tableWidgetInbox) - self.textEditInboxMessage = QtGui.QTextEdit(self.inbox) + self.textEditInboxMessage = QtGui.QTextEdit(self.splitter) self.textEditInboxMessage.setBaseSize(QtCore.QSize(0, 500)) self.textEditInboxMessage.setObjectName(_fromUtf8("textEditInboxMessage")) - self.verticalLayout_2.addWidget(self.textEditInboxMessage) + self.verticalLayout_2.addWidget(self.splitter) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/inbox.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.tabWidget.addTab(self.inbox, icon1, _fromUtf8("")) @@ -193,7 +195,10 @@ class Ui_MainWindow(object): self.sentSearchOptionCB.addItem(_fromUtf8("")) self.horizontalLayout.addWidget(self.sentSearchOptionCB) self.verticalLayout.addLayout(self.horizontalLayout) - self.tableWidgetSent = QtGui.QTableWidget(self.sent) + self.splitter_2 = QtGui.QSplitter(self.sent) + self.splitter_2.setOrientation(QtCore.Qt.Vertical) + self.splitter_2.setObjectName(_fromUtf8("splitter_2")) + self.tableWidgetSent = QtGui.QTableWidget(self.splitter_2) self.tableWidgetSent.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.tableWidgetSent.setAlternatingRowColors(True) self.tableWidgetSent.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) @@ -217,10 +222,9 @@ class Ui_MainWindow(object): self.tableWidgetSent.horizontalHeader().setStretchLastSection(True) self.tableWidgetSent.verticalHeader().setVisible(False) self.tableWidgetSent.verticalHeader().setStretchLastSection(False) - self.verticalLayout.addWidget(self.tableWidgetSent) - self.textEditSentMessage = QtGui.QTextEdit(self.sent) + self.textEditSentMessage = QtGui.QTextEdit(self.splitter_2) self.textEditSentMessage.setObjectName(_fromUtf8("textEditSentMessage")) - self.verticalLayout.addWidget(self.textEditSentMessage) + self.verticalLayout.addWidget(self.splitter_2) icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/sent.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.tabWidget.addTab(self.sent, icon3, _fromUtf8("")) @@ -428,7 +432,7 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 18)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 23)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -546,8 +550,8 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" -"


", None)) +"\n" +"


", None)) self.label.setText(_translate("MainWindow", "To:", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) self.radioButtonBroadcast.setText(_translate("MainWindow", "Broadcast to everyone who is subscribed to your address", None)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 683703d8..226e6a64 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -22,7 +22,16 @@ - + + 0 + + + 0 + + + 0 + + 0 @@ -112,76 +121,79 @@ - - - true + + + Qt::Vertical - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows - - - true - - - false - - - true - - - 200 - - - false - - - 27 - - - false - - - true - - - false - - - 26 - - - - To + + + true - - - - From + + QAbstractItemView::ExtendedSelection - - - - Subject + + QAbstractItemView::SelectRows - - - - Received + + true - - - - - - - - 0 - 500 - - + + false + + + true + + + 200 + + + false + + + 27 + + + false + + + true + + + false + + + 26 + + + + To + + + + + From + + + + + Subject + + + + + Received + + + + + + + 0 + 500 + + + @@ -269,8 +281,8 @@ <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> @@ -409,71 +421,74 @@ p, li { white-space: pre-wrap; } - - - QAbstractItemView::DragDrop + + + Qt::Vertical - - true - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows - - - true - - - false - - - true - - - 130 - - - false - - - false - - - true - - - false - - - false - - - - To + + + QAbstractItemView::DragDrop - - - - From + + true - - - - Subject + + QAbstractItemView::ExtendedSelection - - - - Status + + QAbstractItemView::SelectRows - + + true + + + false + + + true + + + 130 + + + false + + + false + + + true + + + false + + + false + + + + To + + + + + From + + + + + Subject + + + + + Status + + + + - - - @@ -1023,7 +1038,7 @@ p, li { white-space: pre-wrap; } 0 0 795 - 18 + 23 From 2a565c97a50792af9874e0276f94efccda1a7c1d Mon Sep 17 00:00:00 2001 From: Adam Fontenot Date: Thu, 15 Aug 2013 03:51:46 -0500 Subject: [PATCH 23/50] Allow backend to send and receive version 4 addresses --- src/class_singleWorker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py index b29b7f8d..1f48701c 100644 --- a/src/class_singleWorker.py +++ b/src/class_singleWorker.py @@ -540,7 +540,7 @@ class singleWorker(threading.Thread): requiredPayloadLengthExtraBytes = shared.networkDefaultPayloadLengthExtraBytes shared.UISignalQueue.put(('updateSentItemStatusByAckdata', ( ackdata, tr.translateText("MainWindow", "Doing work necessary to send message.\nThere is no required difficulty for version 2 addresses like this.")))) - elif toAddressVersionNumber == 3: + elif toAddressVersionNumber == 3 or toAddressVersionNumber == 4: requiredAverageProofOfWorkNonceTrialsPerByte, varintLength = decodeVarint( pubkeyPayload[readPosition:readPosition + 10]) readPosition += varintLength @@ -617,7 +617,7 @@ class singleWorker(threading.Thread): payload += encodeVarint(len(signature)) payload += signature - if fromAddressVersionNumber == 3: + if fromAddressVersionNumber == 3 or fromAddressVersionNumber == 4: payload = '\x01' # Message version. payload += encodeVarint(fromAddressVersionNumber) payload += encodeVarint(fromStreamNumber) From ef312c6e2c519f7534bb81743e2fa6e07ce95c79 Mon Sep 17 00:00:00 2001 From: Adam Fontenot Date: Thu, 15 Aug 2013 04:26:14 -0500 Subject: [PATCH 24/50] Updated several missed references to version 3 addresses --- src/bitmessagemain.py | 16 ++++++++-------- src/bitmessageqt/__init__.py | 2 +- src/class_receiveDataThread.py | 4 ++-- src/shared.py | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index cae8daeb..7ec8ee0e 100644 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -525,8 +525,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if status == 'versiontoohigh': return 'API Error 0010: Address version number too high (or zero) in address: ' + toAddress return 'API Error 0007: Could not decode address: ' + toAddress + ' : ' + status - if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported. Check the toAddress.' + if addressVersionNumber < 2 or addressVersionNumber > 4: + return 'API Error 0011: The address version number currently must be 2, 3, or 4. Others aren\'t supported. Check the toAddress.' if streamNumber != 1: return 'API Error 0012: The stream number must be 1. Others aren\'t supported. Check the toAddress.' status, addressVersionNumber, streamNumber, fromRipe = decodeAddress( @@ -542,8 +542,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if status == 'versiontoohigh': return 'API Error 0010: Address version number too high (or zero) in address: ' + fromAddress return 'API Error 0007: Could not decode address: ' + fromAddress + ' : ' + status - if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.' + if addressVersionNumber < 2 or addressVersionNumber > 4: + return 'API Error 0011: The address version number currently must be 2, 3, or 4. Others aren\'t supported. Check the fromAddress.' if streamNumber != 1: return 'API Error 0012: The stream number must be 1. Others aren\'t supported. Check the fromAddress.' toAddress = addBMIfNotPresent(toAddress) @@ -607,8 +607,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if status == 'versiontoohigh': return 'API Error 0010: Address version number too high (or zero) in address: ' + fromAddress return 'API Error 0007: Could not decode address: ' + fromAddress + ' : ' + status - if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: the address version number currently must be 2 or 3. Others aren\'t supported. Check the fromAddress.' + if addressVersionNumber < 2 or addressVersionNumber > 4: + return 'API Error 0011: the address version number currently must be 2, 3, or 4. Others aren\'t supported. Check the fromAddress.' if streamNumber != 1: return 'API Error 0012: the stream number must be 1. Others aren\'t supported. Check the fromAddress.' fromAddress = addBMIfNotPresent(fromAddress) @@ -678,8 +678,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): if status == 'versiontoohigh': return 'API Error 0010: Address version number too high (or zero) in address: ' + address return 'API Error 0007: Could not decode address: ' + address + ' : ' + status - if addressVersionNumber < 2 or addressVersionNumber > 3: - return 'API Error 0011: The address version number currently must be 2 or 3. Others aren\'t supported.' + if addressVersionNumber < 2 or addressVersionNumber > 4: + return 'API Error 0011: The address version number currently must be 2, 3, or 4. Others aren\'t supported.' if streamNumber != 1: return 'API Error 0012: The stream number must be 1. Others aren\'t supported.' # First we must check to see if the address is already in the diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 396d0b6e..c50152c0 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -1572,7 +1572,7 @@ class MyForm(QtGui.QMainWindow): continue except: pass - if addressVersionNumber > 3 or addressVersionNumber <= 1: + if addressVersionNumber > 4 or addressVersionNumber <= 1: QMessageBox.about(self, _translate("MainWindow", "Address version number"), _translate( "MainWindow", "Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.").arg(toAddress).arg(str(addressVersionNumber))) continue diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index 6adfe490..fb37792b 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -1216,7 +1216,7 @@ class receiveDataThread(threading.Thread): if addressVersion == 0: print '(Within processpubkey) addressVersion of 0 doesn\'t make sense.' return - if addressVersion >= 4 or addressVersion == 1: + if addressVersion > 4 or addressVersion == 1: with shared.printLock: print 'This version of Bitmessage cannot handle version', addressVersion, 'addresses.' @@ -1273,7 +1273,7 @@ class receiveDataThread(threading.Thread): shared.sqlLock.release() # shared.workerQueue.put(('newpubkey',(addressVersion,streamNumber,ripe))) self.possibleNewPubkey(ripe) - if addressVersion == 3: + if addressVersion == 3 or addressVersion == 4: if len(data) < 170: # sanity check. print '(within processpubkey) payloadLength less than 170. Sanity check failed.' return diff --git a/src/shared.py b/src/shared.py index da83f374..e5ff8378 100644 --- a/src/shared.py +++ b/src/shared.py @@ -230,7 +230,7 @@ def reloadMyAddressHashes(): if isEnabled: hasEnabledKeys = True status,addressVersionNumber,streamNumber,hash = decodeAddress(addressInKeysFile) - if addressVersionNumber == 2 or addressVersionNumber == 3: + if addressVersionNumber == 2 or addressVersionNumber == 3 or addressVersionNumber == 4: # Returns a simple 32 bytes of information encoded in 64 Hex characters, # or null if there was an error. privEncryptionKey = decodeWalletImportFormat( From 13f029f34c7414b5a9b80670fa5d7a50dd372710 Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Thu, 15 Aug 2013 10:01:36 -0400 Subject: [PATCH 25/50] Set inbox and sent preview panels to read only. --- src/bitmessageqt/bitmessageui.py | 4 +++- src/bitmessageqt/bitmessageui.ui | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index 0608c733..942f6bf1 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Wed Aug 14 23:19:43 2013 +# Created: Thu Aug 15 09:54:36 2013 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -98,6 +98,7 @@ class Ui_MainWindow(object): self.tableWidgetInbox.verticalHeader().setDefaultSectionSize(26) self.textEditInboxMessage = QtGui.QTextEdit(self.splitter) self.textEditInboxMessage.setBaseSize(QtCore.QSize(0, 500)) + self.textEditInboxMessage.setReadOnly(True) self.textEditInboxMessage.setObjectName(_fromUtf8("textEditInboxMessage")) self.verticalLayout_2.addWidget(self.splitter) icon1 = QtGui.QIcon() @@ -223,6 +224,7 @@ class Ui_MainWindow(object): self.tableWidgetSent.verticalHeader().setVisible(False) self.tableWidgetSent.verticalHeader().setStretchLastSection(False) self.textEditSentMessage = QtGui.QTextEdit(self.splitter_2) + self.textEditSentMessage.setReadOnly(True) self.textEditSentMessage.setObjectName(_fromUtf8("textEditSentMessage")) self.verticalLayout.addWidget(self.splitter_2) icon3 = QtGui.QIcon() diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 226e6a64..22b6c314 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -193,6 +193,9 @@ 500 + + true + @@ -486,7 +489,11 @@ p, li { white-space: pre-wrap; } - + + + true + + From 85fc2682f086d5f9beb4e115fbcd0b363d215646 Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Thu, 15 Aug 2013 14:21:07 -0400 Subject: [PATCH 26/50] remove inbox and sent tables edit triggers. --- src/bitmessageqt/bitmessageui.py | 4 +++- src/bitmessageqt/bitmessageui.ui | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index 942f6bf1..74505f38 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Thu Aug 15 09:54:36 2013 +# Created: Thu Aug 15 14:19:52 2013 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -73,6 +73,7 @@ class Ui_MainWindow(object): self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName(_fromUtf8("splitter")) self.tableWidgetInbox = QtGui.QTableWidget(self.splitter) + self.tableWidgetInbox.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.tableWidgetInbox.setAlternatingRowColors(True) self.tableWidgetInbox.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.tableWidgetInbox.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) @@ -200,6 +201,7 @@ class Ui_MainWindow(object): self.splitter_2.setOrientation(QtCore.Qt.Vertical) self.splitter_2.setObjectName(_fromUtf8("splitter_2")) self.tableWidgetSent = QtGui.QTableWidget(self.splitter_2) + self.tableWidgetSent.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.tableWidgetSent.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.tableWidgetSent.setAlternatingRowColors(True) self.tableWidgetSent.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 22b6c314..5b597d38 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -126,6 +126,9 @@ Qt::Vertical + + QAbstractItemView::NoEditTriggers + true @@ -429,6 +432,9 @@ p, li { white-space: pre-wrap; } Qt::Vertical + + QAbstractItemView::NoEditTriggers + QAbstractItemView::DragDrop From 738c58694c78497bc80fbef5192ceefe321db31b Mon Sep 17 00:00:00 2001 From: Erik Ackermann Date: Fri, 16 Aug 2013 19:02:40 -0400 Subject: [PATCH 27/50] Responded to comment from jvz; fixed brew install instructions. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 151282a7..4eb896eb 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -57,8 +57,8 @@ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" Now, install the required dependencies ``` -brew install python27 py27-pyqt4 openssl -brew install git-core +svn +doc +bash_completion +gitweb +brew install python pyqt +brew install git ``` Download and run PyBitmessage: From 16ff6e883a0f7f1f8d78c69e8d88fc96e3b87fcc Mon Sep 17 00:00:00 2001 From: Tim van Werkhoven Date: Tue, 20 Aug 2013 10:43:30 +0200 Subject: [PATCH 28/50] Use 'inf' as large value instead of 1e20 'inf' is always bigger than any number, 1e20 is not. --- src/proofofwork.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proofofwork.py b/src/proofofwork.py index f2c32c06..6e2b7bc3 100644 --- a/src/proofofwork.py +++ b/src/proofofwork.py @@ -24,7 +24,7 @@ def _set_idle(): def _pool_worker(nonce, initialHash, target, pool_size): _set_idle() - trialValue = 99999999999999999999 + trialValue = float('inf') while trialValue > target: nonce += pool_size trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8]) @@ -32,7 +32,7 @@ def _pool_worker(nonce, initialHash, target, pool_size): def _doSafePoW(target, initialHash): nonce = 0 - trialValue = 99999999999999999999 + trialValue = float('inf') while trialValue > target: nonce += 1 trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8]) From bcff27ff7c5d6166e935c26ae57e8ed5384d5f62 Mon Sep 17 00:00:00 2001 From: Matthieu Rakotojaona Date: Wed, 21 Aug 2013 00:02:57 +0200 Subject: [PATCH 29/50] Fix Archlinux package creation --- arch.sh | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/arch.sh b/arch.sh index 0ccc45b3..6ca4aec9 100755 --- a/arch.sh +++ b/arch.sh @@ -1,5 +1,6 @@ #!/bin/bash +GIT_APP=PyBitmessage APP=pybitmessage PREV_VERSION=0.3.5 VERSION=0.3.5 @@ -25,24 +26,12 @@ make clean rm -f archpackage/*.gz # having the root directory called name-version seems essential -mv ../${APP} ../${APP}-${VERSION} +mv ../${GIT_APP} ../${APP}-${VERSION} tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs # rename the root directory without the version number -mv ../${APP}-${VERSION} ../${APP} +mv ../${APP}-${VERSION} ../${GIT_APP} # calculate the MD5 checksum CHECKSM=$(md5sum ${SOURCE}) sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD - -cd archpackage - -# Create the package -tar -c -f ${APP}-${VERSION}.pkg.tar . -sync -xz ${APP}-${VERSION}.pkg.tar -sync - -# Move back to the original directory -cd ${CURRDIR} - From a6b946f5be96162dcfbd385802ccd4af2396816f Mon Sep 17 00:00:00 2001 From: sendiulo Date: Wed, 21 Aug 2013 16:08:22 +0200 Subject: [PATCH 30/50] Enable user-set loclization. There is a checkbox in the settings to switch this on and off. The text field in the settings can be filled with the appropriate language code. I've set it to degrade to language codes in both the user-set locale and the imported default locale, e.g. if there is no 'en_US' then use 'en' (like grant olsons commit). --- src/bitmessageqt/__init__.py | 50 +++++++++++++++++++++++++++++++----- src/bitmessageqt/settings.py | 10 ++++++++ src/helper_startup.py | 10 ++++++++ 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 378989e0..1cb13e34 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2031,6 +2031,10 @@ class MyForm(QtGui.QMainWindow): self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked())) shared.config.set('bitmessagesettings', 'willinglysendtomobile', str( self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) + shared.config.set('bitmessagesettings', 'overridelocale', str( + self.settingsDialogInstance.ui.checkBoxOverrideLocale.isChecked())) + shared.config.set('bitmessagesettings', 'userlocale', str( + self.settingsDialogInstance.ui.lineEditUserLocale.text())) if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()): if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( @@ -3041,6 +3045,10 @@ class settingsDialog(QtGui.QDialog): shared.config.getboolean('bitmessagesettings', 'startintray')) self.ui.checkBoxWillinglySendToMobile.setChecked( shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) + self.ui.checkBoxOverrideLocale.setChecked( + shared.safeConfigGetBoolean('bitmessagesettings', 'overridelocale')) + self.ui.lineEditUserLocale.setText(str( + shared.config.get('bitmessagesettings', 'userlocale'))) if shared.appdata == '': self.ui.checkBoxPortableMode.setChecked(True) if 'darwin' in sys.platform: @@ -3404,13 +3412,41 @@ else: def run(): app = QtGui.QApplication(sys.argv) translator = QtCore.QTranslator() - - try: - translator.load("translations/bitmessage_" + str(locale.getdefaultlocale()[0])) - #translator.load("translations/bitmessage_fr_BE") # test French - except: - # The above is not compatible with all versions of OSX. - translator.load("translations/bitmessage_en_US") # Default to english. + + local_countrycode = str(locale.getdefaultlocale()[0]) + locale_lang = local_countrycode[0:2] + user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) + user_lang = user_countrycode[0:2] + translation_path = "translations/bitmessage_" + + if shared.config.getboolean('bitmessagesettings', 'overridelocale') == True: + # try the userinput if "overwridelanguage" is checked + try: + # check if the user input is a valid translation file + # this would also capture weird "countrycodes" like "en_pirate" or just "pirate" + translator.load(translation_path + user_countrycode) + except: + try: + # check if the user lang is a valid translation file + # in some cases this won't make sense, e.g. trying "pi" from "pirate" + translator.load(translation_path + user_lang) + except: + # The above is not compatible with all versions of OSX. + # Don't have language either, default to 'Merica USA! USA! + translator.load("translations/bitmessage_en_US") # Default to english. + else: + # try the userinput if "overridelanguage" is checked + try: + # check if the user input is a valid translation file + translator.load(translation_path + local_countrycode) + except: + try: + # check if the user lang is a valid translation file + translator.load(translation_path + locale_lang) + except: + # The above is not compatible with all versions of OSX. + # Don't have language either, default to 'Merica USA! USA! + translator.load("translations/bitmessage_en_US") # Default to english. QtGui.QApplication.installTranslator(translator) app.setStyleSheet("QStatusBar::item { border: 0px solid black }") diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index 87e8ba7b..8d2cf677 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -71,6 +71,14 @@ class Ui_settingsDialog(object): self.checkBoxWillinglySendToMobile = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxWillinglySendToMobile.setObjectName(_fromUtf8("checkBoxWillinglySendToMobile")) self.gridLayout_5.addWidget(self.checkBoxWillinglySendToMobile, 6, 0, 1, 1) + self.checkBoxOverrideLocale = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxOverrideLocale.setObjectName(_fromUtf8("checkBoxOverrideLocale")) + self.gridLayout_5.addWidget(self.checkBoxOverrideLocale, 7, 0, 1, 1) + self.lineEditUserLocale = QtGui.QLineEdit(self.tabUserInterface) + self.lineEditUserLocale.setObjectName(_fromUtf8("lineEditUserLocale")) + self.lineEditUserLocale.setMaximumSize(QtCore.QSize(70, 16777215)) + self.lineEditUserLocale.setEnabled(False) + self.gridLayout_5.addWidget(self.lineEditUserLocale, 7, 1, 1, 1) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) self.tabNetworkSettings = QtGui.QWidget() self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings")) @@ -305,6 +313,7 @@ class Ui_settingsDialog(object): self.tabWidgetSettings.setCurrentIndex(0) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), settingsDialog.accept) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), settingsDialog.reject) + QtCore.QObject.connect(self.checkBoxOverrideLocale, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditUserLocale.setEnabled) QtCore.QObject.connect(self.checkBoxAuthentication, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditSocksUsername.setEnabled) QtCore.QObject.connect(self.checkBoxAuthentication, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditSocksPassword.setEnabled) QtCore.QMetaObject.connectSlotsByName(settingsDialog) @@ -331,6 +340,7 @@ class Ui_settingsDialog(object): self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None)) self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None)) self.checkBoxWillinglySendToMobile.setText(_translate("settingsDialog", "Willingly include unencrypted destination address when sending to a mobile device", None)) + self.checkBoxOverrideLocale.setText(_translate("settingsDialog", "Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'):", None)) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) self.groupBox.setTitle(_translate("settingsDialog", "Listening port", None)) self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) diff --git a/src/helper_startup.py b/src/helper_startup.py index 256dbcaa..67ae8d8c 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -2,6 +2,7 @@ import shared import ConfigParser import sys import os +import locale from namecoin import ensureNamecoinOptions @@ -69,6 +70,15 @@ def loadConfig(): shared.config.set( 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') shared.config.set('bitmessagesettings', 'dontconnect', 'true') + shared.config.set('bitmessagesettings', 'overridelocale', 'false') + try: + # this should set the userdefined locale to the default locale + # like this, the user will know his default locale + shared.config.set('bitmessagesettings', 'userlocale', str(locale.getdefaultlocale()[0])) + except: + # if we cannot determine the default locale let's default to english + # they user might use this as an country code + shared.config.set('bitmessagesettings', 'userlocale', 'en_US') ensureNamecoinOptions() if storeConfigFilesInSameDirectoryAsProgramByDefault: From aefedd4991d6b4c95561fc64ae04816eb9688216 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Wed, 21 Aug 2013 16:17:09 +0200 Subject: [PATCH 31/50] Added Esperanto (partial) and Pirate (by Dokument). Cleanup of the translation files. All the *.pro files are now similar and the *.ts files are updated and ready for further translation. Newly released the *.qm files. There's still an error when trying to change back from "ru" or "ru_RU" to any other language. However, this doesn't happen in other languages. This is set to work with the gracefull degrade (e.g. 'de_CH' to 'de' if there is no such file). There's no warning about the need to restart. I think it is obvious, so i don't think we need it, but i can add it if you want. --- src/translations/bitmessage_de.pro | 32 + src/translations/bitmessage_de.qm | Bin 0 -> 61770 bytes src/translations/bitmessage_de.ts | 1491 ++++++++++++++++++++ src/translations/bitmessage_en_pirate.pro | 32 + src/translations/bitmessage_en_pirate.qm | Bin 0 -> 17338 bytes src/translations/bitmessage_en_pirate.ts | 1461 +++++++++++++++++++ src/translations/bitmessage_eo.pro | 32 + src/translations/bitmessage_eo.qm | Bin 0 -> 42299 bytes src/translations/bitmessage_eo.ts | 1525 ++++++++++++++++++++ src/translations/bitmessage_fr.pro | 32 + src/translations/bitmessage_fr.qm | Bin 0 -> 49403 bytes src/translations/bitmessage_fr.ts | 1556 +++++++++++++++++++++ src/translations/bitmessage_ru.pro | 32 + src/translations/bitmessage_ru.qm | Bin 0 -> 54843 bytes src/translations/bitmessage_ru.ts | 1515 ++++++++++++++++++++ 15 files changed, 7708 insertions(+) create mode 100644 src/translations/bitmessage_de.pro create mode 100644 src/translations/bitmessage_de.qm create mode 100644 src/translations/bitmessage_de.ts create mode 100644 src/translations/bitmessage_en_pirate.pro create mode 100644 src/translations/bitmessage_en_pirate.qm create mode 100644 src/translations/bitmessage_en_pirate.ts create mode 100644 src/translations/bitmessage_eo.pro create mode 100644 src/translations/bitmessage_eo.qm create mode 100644 src/translations/bitmessage_eo.ts create mode 100644 src/translations/bitmessage_fr.pro create mode 100644 src/translations/bitmessage_fr.qm create mode 100644 src/translations/bitmessage_fr.ts create mode 100644 src/translations/bitmessage_ru.pro create mode 100644 src/translations/bitmessage_ru.qm create mode 100644 src/translations/bitmessage_ru.ts diff --git a/src/translations/bitmessage_de.pro b/src/translations/bitmessage_de.pro new file mode 100644 index 00000000..3bbafcfd --- /dev/null +++ b/src/translations/bitmessage_de.pro @@ -0,0 +1,32 @@ +SOURCES = ../addresses.py\ + ../bitmessagemain.py\ + ../class_addressGenerator.py\ + ../class_outgoingSynSender.py\ + ../class_receiveDataThread.py\ + ../class_sendDataThread.py\ + ../class_singleCleaner.py\ + ../class_singleListener.py\ + ../class_singleWorker.py\ + ../class_sqlThread.py\ + ../helper_bitcoin.py\ + ../helper_bootstrap.py\ + ../helper_generic.py\ + ../helper_inbox.py\ + ../helper_sent.py\ + ../helper_startup.py\ + ../shared.py\ + ../bitmessageqt/__init__.py\ + ../bitmessageqt/about.py\ + ../bitmessageqt/bitmessageui.py\ + ../bitmessageqt/connect.py\ + ../bitmessageqt/help.py\ + ../bitmessageqt/iconglossary.py\ + ../bitmessageqt/newaddressdialog.py\ + ../bitmessageqt/newchandialog.py\ + ../bitmessageqt/newsubscriptiondialog.py\ + ../bitmessageqt/regenerateaddresses.py\ + ../bitmessageqt/settings.py\ + ../bitmessageqt/specialaddressbehavior.py + +TRANSLATIONS = bitmessage_de.ts +CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_de.qm b/src/translations/bitmessage_de.qm new file mode 100644 index 0000000000000000000000000000000000000000..c4dec53e370cd279856f83fb9ee1af7eae652ffc GIT binary patch literal 61770 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 + + + MainWindow + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + Eine Ihrer Adressen, %1, ist eine alte Version 1 Adresse. Version 1 Adressen werden nicht mehr unterstützt. Soll sie jetzt gelöscht werden? + + + + Reply + Antworten + + + + Add sender to your Address Book + Absender zum Adressbuch hinzufügen + + + + Move to Trash + In den Papierkorb verschieben + + + + View HTML code as formatted text + HTML als formatierten Text anzeigen + + + + Save message as... + Nachricht speichern unter... + + + + New + Neu + + + + Enable + Aktivieren + + + + Disable + Deaktivieren + + + + Copy address to clipboard + Adresse in die Zwischenablage kopieren + + + + Special address behavior... + Spezielles Verhalten der Adresse... + + + + Send message to this address + Nachricht an diese Adresse senden + + + + Subscribe to this address + Diese Adresse abonnieren + + + + Add New Address + Neue Adresse hinzufügen + + + + Delete + Löschen + + + + Copy destination address to clipboard + Zieladresse in die Zwischenablage kopieren + + + + Force send + Senden erzwingen + + + + Add new entry + Neuen Eintrag erstellen + + + + Waiting on their encryption key. Will request it again soon. + Warte auf den Verschlüsselungscode. Wird bald erneut angefordert. + + + + Encryption key request queued. + Verschlüsselungscode Anforderung steht aus. + + + + Queued. + In Warteschlange. + + + + Message sent. Waiting on acknowledgement. Sent at %1 + Nachricht gesendet. Warten auf Bestätigung. Gesendet %1 + + + + Need to do work to send message. Work is queued. + Es muss Arbeit verrichtet werden um die Nachricht zu versenden. Arbeit ist in Warteschlange. + + + + Acknowledgement of the message received %1 + Bestätigung der Nachricht erhalten %1 + + + + Broadcast queued. + Rundruf in Warteschlange. + + + + Broadcast on %1 + Rundruf um %1 + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind zu berechnen. %1 + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + Problem: Der Verschlüsselungscode des Empfängers ist nicht in Ordnung. Nachricht konnte nicht verschlüsselt werden. %1 + + + + Forced difficulty override. Send should start soon. + Schwierigkeitslimit überschrieben. Senden sollte bald beginnen. + + + + Unknown status: %1 %2 + Unbekannter Status: %1 %2 + + + + Since startup on %1 + Seit Start der Anwendung am %1 + + + + Not Connected + Nicht verbunden + + + + Show Bitmessage + Bitmessage anzeigen + + + + Send + Senden + + + + Subscribe + Abonnieren + + + + Address Book + Adressbuch + + + + Quit + Schließen + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im gleichen Ordner wie das Programm liegt. Es ist wichtig, dass Sie diese Datei sichern. + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im Ordner +%1 liegt. +Es ist wichtig, dass Sie diese Datei sichern. + + + + Open keys.dat? + Datei keys.dat öffnen? + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im gleichen Ordner wie das Programm liegt. Es ist wichtig, dass Sie diese Datei sichern. Möchten Sie die Datei jetzt öffnen? (Stellen Sie sicher, dass Bitmessage geschlossen ist, bevor Sie etwas ändern.) + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, +die im Ordner %1 liegt. +Es ist wichtig, dass Sie diese Datei sichern. Möchten Sie die datei jetzt öffnen? +(Stellen Sie sicher, dass Bitmessage geschlossen ist, bevor Sie etwas ändern.) + + + + Delete trash? + Papierkorb leeren? + + + + Are you sure you want to delete all trashed messages? + Sind Sie sicher, dass Sie alle Nachrichten im Papierkorb löschen möchten? + + + + bad passphrase + Falscher Passwort-Satz + + + + You must type your passphrase. If you don't have one then this is not the form for you. + Sie müssen Ihren Passwort-Satz eingeben. Wenn Sie keinen haben, ist dies das falsche Formular für Sie. + + + + Processed %1 person-to-person messages. + %1 Person-zu-Person-Nachrichten bearbeitet. + + + + Processed %1 broadcast messages. + %1 Rundruf-Nachrichten bearbeitet. + + + + Processed %1 public keys. + %1 öffentliche Schlüssel bearbeitet. + + + + Total Connections: %1 + Verbindungen insgesamt: %1 + + + + Connection lost + Verbindung verloren + + + + Connected + Verbunden + + + + Message trashed + Nachricht in den Papierkorb verschoben + + + + Error: Bitmessage addresses start with BM- Please check %1 + Fehler: Bitmessage Adressen starten mit BM- Bitte überprüfen Sie %1 + + + + Error: The address %1 is not typed or copied correctly. Please check it. + Fehler: Die Adresse %1 wurde nicht korrekt getippt oder kopiert. Bitte überprüfen. + + + + Error: The address %1 contains invalid characters. Please check it. + Fehler: Die Adresse %1 beinhaltet ungültig Zeichen. Bitte überprüfen. + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + Fehler: Die Adressversion von %1 ist zu hoch. Entweder Sie müssen Ihre Bitmessage Software aktualisieren oder Ihr Bekannter ist sehr clever. + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + Fehler: Einige Daten die in der Adresse %1 codiert sind, sind zu kurz. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt. + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + Fehler: Einige Daten die in der Adresse %1 codiert sind, sind zu lang. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt. + + + + Error: Something is wrong with the address %1. + Fehler: Mit der Adresse %1 stimmt etwas nicht. + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + Fehler: Sie müssen eine Absenderadresse auswählen. Sollten Sie keine haben, wechseln Sie zum Reiter "Ihre Identitäten". + + + + Sending to your address + Sende zu Ihrer Adresse + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + Fehler: Eine der Adressen an die Sie eine Nachricht schreiben (%1) ist Ihre. Leider kann die Bitmessage Software ihre eigenen Nachrichten nicht verarbeiten. Bitte verwenden Sie einen zweite Installation auf einem anderen Computer oder in einer VM. + + + + Address version number + Adressversion + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + Bezüglich der Adresse %1, Bitmessage kann Adressen mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren. + + + + Stream number + Datenstrom Nummer + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + Bezüglich der Adresse %1, Bitmessage kann den Datenstrom mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren. + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + Warnung: Sie sind aktuell nicht verbunden. Bitmessage wird die nötige Arbeit zum versenden verrichten, aber erst senden, wenn Sie verbunden sind. + + + + Your 'To' field is empty. + Ihr "Empfänger"-Feld ist leer. + + + + Work is queued. + Arbeit in Warteschlange. + + + + Right click one or more entries in your address book and select 'Send message to this address'. + Klicken Sie mit rechts auf eine oder mehrere Einträge aus Ihrem Adressbuch und wählen Sie "Nachricht an diese Adresse senden". + + + + Work is queued. %1 + Arbeit in Warteschlange. %1 + + + + New Message + Neue Nachricht + + + + From + Von + + + + Address is valid. + Adresse ist gültig. + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + Fehler: Sie können eine Adresse nicht doppelt im Adressbuch speichern. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. + + + + The address you entered was invalid. Ignoring it. + Die von Ihnen eingegebene Adresse ist ungültig, sie wird ignoriert. + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + Fehler: Sie können eine Adresse nicht doppelt abonnieren. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. + + + + Restart + Neustart + + + + You must restart Bitmessage for the port number change to take effect. + Sie müssen Bitmessage neu starten, um den geänderten Port zu verwenden. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. + Bitmessage wird den Proxy-Server ab jetzt verwenden, möglicherweise möchten Sie Bitmessage neu starten um bestehende Verbindungen zu schließen. + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + Fehler: Sie können eine Adresse nicht doppelt zur Liste hinzufügen. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. + + + + Passphrase mismatch + Kennwortsatz nicht identisch + + + + The passphrase you entered twice doesn't match. Try again. + Die von Ihnen eingegebenen Kennwortsätze sind nicht identisch. Bitte neu versuchen. + + + + Choose a passphrase + Wählen Sie einen Kennwortsatz + + + + You really do need a passphrase. + Sie benötigen wirklich einen Kennwortsatz. + + + + All done. Closing user interface... + Alles fertig. Benutzer interface wird geschlossen... + + + + Address is gone + Adresse ist verloren + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + Bitmassage kann Ihre Adresse %1 nicht finden. Haben Sie sie gelöscht? + + + + Address disabled + Adresse deaktiviert + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + Fehler: Die Adresse von der Sie versuchen zu senden ist deaktiviert. Sie müssen sie unter dem Reiter "Ihre Identitäten" aktivieren bevor Sie fortfahren. + + + + Entry added to the Address Book. Edit the label to your liking. + Eintrag dem Adressbuch hinzugefügt. Editieren Sie den Eintrag nach Belieben. + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + Objekt in den Papierkorb verschoben. Es gibt kein Benutzerinterface für den Papierkorb, aber die Daten sind noch auf Ihrer Festplatte wenn Sie sie wirklich benötigen. + + + + Save As... + Speichern unter... + + + + Write error. + Fehler beim speichern. + + + + No addresses selected. + Keine Adresse ausgewählt. + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + +Optionen wurden deaktiviert, da sie für Ihr Betriebssystem nicht relevant, oder noch nicht implementiert sind. + + + + The address should start with ''BM-'' + Die Adresse sollte mit "BM-" beginnen + + + + The address is not typed or copied correctly (the checksum failed). + Die Adresse wurde nicht korrekt getippt oder kopiert (Prüfsumme falsch). + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + Die Versionsnummer dieser Adresse ist höher als diese Software unterstützt. Bitte installieren Sie die neuste Bitmessage Version. + + + + The address contains invalid characters. + Diese Adresse beinhaltet ungültige Zeichen. + + + + Some data encoded in the address is too short. + Die in der Adresse codierten Daten sind zu kurz. + + + + Some data encoded in the address is too long. + Die in der Adresse codierten Daten sind zu lang. + + + + You are using TCP port %1. (This can be changed in the settings). + Sie benutzen TCP-Port %1 (Dieser kann in den Einstellungen verändert werden). + + + + Bitmessage + Bitmessage + + + + To + An + + + + From + Von + + + + Subject + Betreff + + + + Received + Erhalten + + + + Inbox + Posteingang + + + + Load from Address book + Aus Adressbuch wählen + + + + Message: + Nachricht: + + + + Subject: + Betreff: + + + + Send to one or more specific people + Nachricht an eine oder mehrere spezifische Personen + + + + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + To: + An: + + + + From: + Von: + + + + Broadcast to everyone who is subscribed to your address + Rundruf an jeden, der Ihre Adresse abonniert hat + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + Beachten Sie, dass Rudrufe nur mit Ihrer Adresse verschlüsselt werden. Jeder, der Ihre Adresse kennt, kann diese Nachrichten lesen. + + + + Status + Status + + + + Sent + Gesendet + + + + Label (not shown to anyone) + Bezeichnung (wird niemandem gezeigt) + + + + Address + Adresse + + + + Stream + Datenstrom + + + + Your Identities + Ihre Identitäten + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + Hier können Sie "Rundruf Nachrichten" abonnieren, die von anderen Benutzern versendet werden. Die Nachrichten tauchen in Ihrem Posteingang auf. (Die Adressen hier überschreiben die auf der Blacklist). + + + + Add new Subscription + Neues Abonnement anlegen + + + + Label + Bezeichnung + + + + Subscriptions + Abonnements + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + Das Adressbuch ist nützlich um die Bitmessage-Adressen anderer Personen Namen oder Beschreibungen zuzuordnen, so dass Sie sie einfacher im Posteingang erkennen können. Sie können Adressen über "Hinzufügen" eintragen, oder über einen Rechtsklick auf eine Nachricht im Posteingang. + + + + Name or Label + Name oder Bezeichnung + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + Liste als Blacklist verwenden (Erlaubt alle eingehenden Nachrichten, außer von Adressen auf der Blacklist) + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + Liste als Whitelist verwenden (Erlaubt keine eingehenden Nachrichten, außer von Adressen auf der Whitelist) + + + + Blacklist + Blacklist + + + + Stream # + Datenstrom # + + + + Connections + Verbindungen + + + + Total connections: 0 + Verbindungen insgesamt: 0 + + + + Since startup at asdf: + Seit start um asdf: + + + + Processed 0 person-to-person message. + 0 Person-zu-Person-Nachrichten verarbeitet. + + + + Processed 0 public key. + 0 öffentliche Schlüssel verarbeitet. + + + + Processed 0 broadcast. + 0 Rundrufe verarbeitet. + + + + Network Status + Netzwerk status + + + + File + Datei + + + + Settings + Einstellungen + + + + Help + Hilfe + + + + Import keys + Schlüssel importieren + + + + Manage keys + Schlüssel verwalten + + + + About + Über + + + + Regenerate deterministic addresses + Deterministische Adressen neu generieren + + + + Delete all trashed messages + Alle Nachrichten im Papierkorb löschen + + + + Message sent. Sent at %1 + Nachricht gesendet. gesendet am %1 + + + + Chan name needed + Chan name benötigt + + + + You didn't enter a chan name. + Sie haben keinen Chan-Namen eingegeben. + + + + Address already present + Adresse bereits vorhanden + + + + Could not add chan because it appears to already be one of your identities. + Chan konnte nicht erstellt werden, da es sich bereits um eine Ihrer Identitäten handelt. + + + + Success + Erfolgreich + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + Chan erfolgreich erstellt. Um andere diesem Chan beitreten zu lassen, geben Sie ihnen den Chan-Namen und die Bitmessage-Adresse: %1. Diese Adresse befindet sich auch unter "Ihre Identitäten". + + + + Address too new + Adresse zu neu + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + Obwohl diese Bitmessage-Adresse gültig ist, ist ihre Versionsnummer zu hoch um verarbeitet zu werden. Vermutlich müssen Sie eine neuere Version von Bitmessage installieren. + + + + Address invalid + Adresse ungültig + + + + That Bitmessage address is not valid. + Diese Bitmessage-Adresse ist nicht gültig. + + + + Address does not match chan name + Adresse stimmt nicht mit dem Chan-Namen überein + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + Obwohl die Bitmessage-Adresse die Sie eingegeben haben gültig ist, stimmt diese nicht mit dem Chan-Namen überein. + + + + Successfully joined chan. + Chan erfolgreich beigetreten. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + Bitmessage wird ab sofort den Proxy-Server verwenden, aber eventuell möchten Sie Bitmessage neu starten um bereits bestehende Verbindungen zu schließen. + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + Dies ist eine Chan-Adresse. Sie können sie nicht als Pseudo-Mailingliste verwenden. + + + + Search + Suchen + + + + All + Alle + + + + Message + Nachricht + + + + Join / Create chan + Chan beitreten / erstellen + + + + Encryption key was requested earlier. + Verschlüsselungscode wurde bereits angefragt. + + + + Sending a request for the recipient's encryption key. + Sende eine Anfrage für den Verschlüsselungscode des Empfängers. + + + + Doing work necessary to request encryption key. + Verrichte die benötigte Arbeit um den Verschlüsselungscode anzufragen. + + + + Broacasting the public key request. This program will auto-retry if they are offline. + Anfrage für den Verschlüsselungscode versendet (wird automatisch periodisch neu verschickt). + + + + Sending public key request. Waiting for reply. Requested at %1 + Anfrag für den Verschlüsselungscode gesendet. Warte auf Antwort. Angefragt am %1 + + + + Mark Unread + Als ungelesen markieren + + + + Fetched address from namecoin identity. + Adresse aus Namecoin Identität geholt. + + + + Testing... + teste... + + + + Fetch Namecoin ID + Hole Namecoin ID + + + + Ctrl+Q + Strg+Q + + + + F1 + F1 + + + + NewAddressDialog + + + Create new Address + Neue Adresse erstellen + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + Sie können so viele Adressen generieren wie Sie möchten. Es ist sogar empfohlen neue Adressen zu verwenden und alte fallen zu lassen. Sie können Adressen durch Zufallszahlen erstellen lassen, oder unter Verwendung eines Kennwortsatzes. Wenn Sie einen Kennwortsatz verwenden, nennt man dies eine "deterministische" Adresse. +Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen einige Vor- und Nachteile: + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Vorteile:<br/></span>Sie können ihre Adresse an jedem Computer aus dem Gedächtnis regenerieren. <br/>Sie brauchen sich keine Sorgen um das Sichern ihrer Schlüssel machen solange Sie sich den Kennwortsatz merken. <br/><span style=" font-weight:600;">Nachteile:<br/></span>Sie müssen sich den Kennowrtsatz merken (oder aufschreiben) wenn Sie in der Lage sein wollen ihre Schlüssel wiederherzustellen. <br/>Sie müssen sich die Adressversion und die Datenstrom Nummer zusammen mit dem Kennwortsatz merken. <br/>Wenn Sie einen schwachen Kennwortsatz wählen und jemand kann ihn erraten oder durch ausprobieren herausbekommen, kann dieser Ihre Nachrichten lesen, oder in ihrem Namen Nachrichten senden..</p></body></html> + + + + Use a random number generator to make an address + Lassen Sie eine Adresse mittels Zufallsgenerator erstellen + + + + Use a passphrase to make addresses + Benutzen Sie einen Kennwortsatz um eine Adresse erstellen zu lassen + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen + + + + Make deterministic addresses + Deterministische Adresse erzeugen + + + + Address version number: 3 + Adress-Versionsnummer: 3 + + + + In addition to your passphrase, you must remember these numbers: + Zusätzlich zu Ihrem Kennwortsatz müssen Sie sich diese Zahlen merken: + + + + Passphrase + Kennwortsatz + + + + Number of addresses to make based on your passphrase: + Anzahl Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen: + + + + Stream number: 1 + Datenstrom Nummer: 1 + + + + Retype passphrase + Kennwortsatz erneut eingeben + + + + Randomly generate address + Zufällig generierte Adresse + + + + Label (not shown to anyone except you) + Bezeichnung (Wird niemandem außer Ihnen gezeigt) + + + + Use the most available stream + Verwendung des am besten verfügbaren Datenstroms + + + + (best if this is the first of many addresses you will create) + (zum generieren der erste Adresse empfohlen) + + + + Use the same stream as an existing address + Verwendung des gleichen Datenstroms wie eine bestehende Adresse + + + + (saves you some bandwidth and processing power) + (Dies erspart Ihnen etwas an Bandbreite und Rechenleistung) + + + + NewSubscriptionDialog + + + Add new entry + Neuen Eintrag erstellen + + + + Label + Name oder Bezeichnung + + + + Address + Adresse + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + Spezielles Adressverhalten + + + + Behave as a normal address + Wie eine normale Adresse verhalten + + + + Behave as a pseudo-mailing-list address + Wie eine Pseudo-Mailinglistenadresse verhalten + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + Nachrichten an eine Pseudo-Mailinglistenadresse werden automatisch zu allen Abbonenten weitergeleitet (Der Inhalt ist dann öffentlich). + + + + Name of the pseudo-mailing-list: + Name der Pseudo-Mailingliste: + + + + aboutDialog + + + About + Über + + + + PyBitmessage + PyBitmessage + + + + version ? + Version ? + + + + Copyright © 2013 Jonathan Warren + Copyright © 2013 Jonathan Warren + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + <html><head/><body><p>Veröffentlicht unter der MIT/X11 Software-Lizenz; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + This is Beta software. + Diese ist Beta-Software. + + + + connectDialog + + + Bitmessage + Internetverbindung + + + + Bitmessage won't connect to anyone until you let it. + Bitmessage wird sich nicht verbinden, wenn Sie es nicht möchten. + + + + Connect now + Jetzt verbinden + + + + Let me configure special network settings first + Zunächst spezielle Nertzwerkeinstellungen vornehmen + + + + helpDialog + + + Help + Hilfe + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Bei Bitmessage handelt es sich um ein kollaboratives Projekt, Hilfe finden Sie online in Bitmessage-Wiki: + + + + iconGlossaryDialog + + + Icon Glossary + Icon Glossar + + + + You have no connections with other peers. + Sie haben keine Verbindung mit anderen Netzwerkteilnehmern. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + Sie haben mindestes eine Verbindung mit einem Netzwerkteilnehmer über eine ausgehende Verbindung, aber Sie haben noch keine eingehende Verbindung. Ihre Firewall oder Router ist vermutlich nicht richtig konfiguriert um eingehende TCP-Verbindungen an Ihren Computer weiterzuleiten. Bittmessage wird gut funktionieren, jedoch helfen Sie dem Netzwerk, wenn Sie eingehende Verbindungen erlauben. Es hilft auch Ihnen schneller und mehr Verbindungen ins Netzwerk aufzubauen. + + + + You are using TCP port ?. (This can be changed in the settings). + Sie benutzen TCP-Port ?. (Dies kann in den Einstellungen verändert werden). + + + + You do have connections with other peers and your firewall is correctly configured. + Sie haben Verbindungen mit anderen Netzwerkteilnehmern und Ihre Firewall ist richtig konfiguriert. + + + + newChanDialog + + + Dialog + Chan beitreten / erstellen + + + + Create a new chan + Neuen Chan erstellen + + + + Join a chan + Einem Chan beitreten + + + + Create a chan + Chan erstellen + + + + Chan name: + Chan-Name: + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + <html><head/><body><p>Ein Chan existiert, wenn eine Gruppe von Leuten sich den gleichen Entschlüsselungscode teilen. Die Schlüssel und Bitmessage-Adressen werden basierend auf einem lesbaren Wort oder Satz generiert (Dem Chan-Namen). Um eine Nachricht an den Chan zu senden, senden Sie eine normale Person-zu-Person-Nachricht an die Chan-Adresse.</p><p>Chans sind experimentell and völlig unmoderierbar.</p><br></body></html> + + + + Chan bitmessage address: + Chan-Bitmessage-Adresse: + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + <html><head/><body><p>Geben Sie einen Namen für Ihren Chan ein. Wenn Sie einen ausreichend komplexen Chan-Namen wählen (Wie einen starkes und einzigartigen Kennwortsatz) und keiner Ihrer Freunde ihn öffentlich weitergibt, wird der Chan sicher und privat bleiben. Wenn eine andere Person einen Chan mit dem gleichen Namen erzeugt, werden diese zu einem Chan.</p><br></body></html> + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + Bestehende Adresse regenerieren + + + + Regenerate existing addresses + Bestehende Adresse regenerieren + + + + Passphrase + Kennwortsatz + + + + Number of addresses to make based on your passphrase: + Anzahl der Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen: + + + + Address version Number: + Adress-Versionsnummer: + + + + 3 + 3 + + + + Stream number: + Stream Nummer: + + + + 1 + 1 + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + Sie müssen diese Option auswählen (oder nicht auswählen) wie Sie es gemacht haben, als Sie Ihre Adresse das erste mal erstellt haben. + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + Wenn Sie bereits deterministische Adressen erstellt haben, aber diese durch einen Unfall wie eine defekte Festplatte verloren haben, können Sie sie hier regenerieren. Wenn Sie den Zufallsgenerator verwendet haben um Ihre Adressen erstmals zu erstellen, kann dieses Formular Ihnen nicht helfen. + + + + settingsDialog + + + Settings + Einstellungen + + + + Start Bitmessage on user login + Bitmessage nach dem Hochfahren automatisch starten + + + + Start Bitmessage in the tray (don't show main window) + Bitmessage minimiert starten (Zeigt das Hauptfenster nicht an) + + + + Minimize to tray + In den Systemtray minimieren + + + + Show notification when message received + Benachrichtigung anzeigen, wenn eine Nachricht eintrifft + + + + Run in Portable Mode + In portablem Modus arbeiten + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + Im portablen Modus werden Nachrichten und Konfigurationen im gleichen Ordner abgelegt, wie sich das Programm selbst befindet anstelle im normalen Anwendungsdaten-Ordner. Das macht es möglich Bitmessage auf einem USB-Stick zu betreiben. + + + + User Interface + Benutzerinterface + + + + Listening port + TCP-Port + + + + Listen for connections on port: + Wartet auf Verbindungen auf Port: + + + + Proxy server / Tor + Proxy-Server / Tor + + + + Type: + Typ: + + + + none + keiner + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + Servername: + + + + Port: + Port: + + + + Authentication + Authentifizierung + + + + Username: + Benutzername: + + + + Pass: + Kennwort: + + + + Network Settings + Netzwerkeinstellungen + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + Wenn jemand Ihnen eine Nachricht schickt, muss der absendende Computer erst einige Arbeit verrichten. Die Schwierigkeit dieser Arbeit ist standardmäßig 1. Sie können diesen Wert für alle neuen Adressen, die Sie generieren hier ändern. Es gibt eine Ausnahme: Wenn Sie einen Freund oder Bekannten in Ihr Adressbuch übernehmen, wird Bitmessage ihn mit der nächsten Nachricht automatisch informieren, dass er nur noch die minimale Arbeit verrichten muss: Schwierigkeit 1. + + + + Total difficulty: + Gesamtschwierigkeit: + + + + Small message difficulty: + Schwierigkeit für kurze Nachrichten: + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + Die "Schwierigkeit für kurze Nachrichten" trifft nur auf das senden kurzen Nachrichten zu. Verdoppelung des Wertes macht es fast doppelt so schwer kurze Nachrichten zu senden, aber hat keinen Effekt bei langen Nachrichten. + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + Die "Gesammtschwierigkeit" beeinflusst die absolute menge Arbeit die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit. + + + + Demanded difficulty + Geforderte Schwierigkeit + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + hier setzen Sie die maximale Arbeit die Sie bereit sind zu verrichten um eine Nachricht an eine andere Person zu verwenden. Ein Wert von 0 bedeutet, dass Sie jede Arbeit akzeptieren. + + + + Maximum acceptable total difficulty: + Maximale akzeptierte Gesammtschwierigkeit: + + + + Maximum acceptable small message difficulty: + Maximale akzeptierte Schwierigkeit für kurze Nachrichten: + + + + Max acceptable difficulty + Maximale akzeptierte Schwierigkeit + + + + Listen for incoming connections when using proxy + Auf eingehende Verdindungen warten, auch wenn eine Proxy-Server verwendet wird + + + + Willingly include unencrypted destination address when sending to a mobile device + Willentlich die unverschlüsselte Adresse des Empfängers übertragen, wenn an ein mobiles Gerät gesendet wird + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + <html><head/><body><p>Bitmessage kann ein anderes Bitcoin basiertes Programm namens Namecoin nutzen um Adressen leserlicher zu machen. Zum Beispiel: Anstelle Ihrem Bekannten Ihre lange Bitmessage-Adresse vorzulesen, können Sie ihm einfach sagen, er soll eine Nachricht an <span style=" font-style:italic;">test </span>senden.</p><p> (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)</p><p>Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.</p></body></html> + + + + Host: + Server: + + + + Password: + Kennwort: + + + + Test + Verbindung testen + + + + Connect to: + Verbinde mit: + + + + Namecoind + Namecoind + + + + NMControl + NMControl + + + + Namecoin integration + Namecoin Integration + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + + + + diff --git a/src/translations/bitmessage_en_pirate.pro b/src/translations/bitmessage_en_pirate.pro new file mode 100644 index 00000000..2885bd66 --- /dev/null +++ b/src/translations/bitmessage_en_pirate.pro @@ -0,0 +1,32 @@ +SOURCES = ../addresses.py\ + ../bitmessagemain.py\ + ../class_addressGenerator.py\ + ../class_outgoingSynSender.py\ + ../class_receiveDataThread.py\ + ../class_sendDataThread.py\ + ../class_singleCleaner.py\ + ../class_singleListener.py\ + ../class_singleWorker.py\ + ../class_sqlThread.py\ + ../helper_bitcoin.py\ + ../helper_bootstrap.py\ + ../helper_generic.py\ + ../helper_inbox.py\ + ../helper_sent.py\ + ../helper_startup.py\ + ../shared.py\ + ../bitmessageqt/__init__.py\ + ../bitmessageqt/about.py\ + ../bitmessageqt/bitmessageui.py\ + ../bitmessageqt/connect.py\ + ../bitmessageqt/help.py\ + ../bitmessageqt/iconglossary.py\ + ../bitmessageqt/newaddressdialog.py\ + ../bitmessageqt/newchandialog.py\ + ../bitmessageqt/newsubscriptiondialog.py\ + ../bitmessageqt/regenerateaddresses.py\ + ../bitmessageqt/settings.py\ + ../bitmessageqt/specialaddressbehavior.py + +TRANSLATIONS = bitmessage_en_pirate.ts +CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_en_pirate.qm b/src/translations/bitmessage_en_pirate.qm new file mode 100644 index 0000000000000000000000000000000000000000..56e994ed136598a63660ea540b5115349c17d3cb GIT binary patch literal 17338 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 Uy{K&gR50xEpG5(5%h=fe03Q<7H~;_u literal 0 HcmV?d00001 diff --git a/src/translations/bitmessage_en_pirate.ts b/src/translations/bitmessage_en_pirate.ts new file mode 100644 index 00000000..26f86475 --- /dev/null +++ b/src/translations/bitmessage_en_pirate.ts @@ -0,0 +1,1461 @@ + + + + MainWindow + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + + + + + Reply + + + + + Add sender to your Address Book + + + + + Move to Trash + + + + + View HTML code as formatted text + + + + + Save message as... + + + + + Mark Unread + + + + + New + + + + + Enable + + + + + Disable + + + + + Copy address to clipboard + + + + + Special address behavior... + + + + + Send message to this address + + + + + Subscribe to this address + + + + + Add New Address + + + + + Delete + + + + + Copy destination address to clipboard + + + + + Force send + + + + + Add new entry + Add yee new entry + + + + Since startup on %1 + + + + + Waiting on their encryption key. Will request it again soon. + + + + + Encryption key request queued. + + + + + Queued. + + + + + Message sent. Waiting on acknowledgement. Sent at %1 + + + + + Message sent. Sent at %1 + + + + + Need to do work to send message. Work is queued. + + + + + Acknowledgement of the message received %1 + + + + + Broadcast queued. + + + + + Broadcast on %1 + + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + + + + + Forced difficulty override. Send should start soon. + + + + + Unknown status: %1 %2 + + + + + Not Connected + + + + + Show Bitmessage + + + + + Send + + + + + Subscribe + + + + + Address Book + + + + + Quit + + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + + + + + Open keys.dat? + + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + + + + + Delete trash? + + + + + Are you sure you want to delete all trashed messages? + + + + + bad passphrase + + + + + You must type your passphrase. If you don't have one then this is not the form for you. + + + + + Chan name needed + + + + + You didn't enter a chan name. + + + + + Address already present + + + + + Could not add chan because it appears to already be one of your identities. + + + + + Success + + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + + + + + Address too new + + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + + + + + Address invalid + + + + + That Bitmessage address is not valid. + + + + + Address does not match chan name + + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + + + + + Successfully joined chan. + + + + + Processed %1 person-to-person messages. + + + + + Processed %1 broadcast messages. + + + + + Processed %1 public keys. + + + + + Total Connections: %1 + + + + + Connection lost + + + + + Connected + + + + + Message trashed + + + + + Error: Bitmessage addresses start with BM- Please check %1 + + + + + Error: The address %1 is not typed or copied correctly. Please check it. + + + + + Error: The address %1 contains invalid characters. Please check it. + + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + + + + + Error: Something is wrong with the address %1. + + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + + + + + Sending to your address + + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + + + + + Address version number + + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Stream number + + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + + + + + Your 'To' field is empty. + + + + + Work is queued. + + + + + Right click one or more entries in your address book and select 'Send message to this address'. + + + + + Fetched address from namecoin identity. + + + + + Work is queued. %1 + + + + + New Message + + + + + From + + + + + Address is valid. + + + + + The address you entered was invalid. Ignoring it. + + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + + + + + Restart + + + + + You must restart Bitmessage for the port number change to take effect. + + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + + + + + Passphrase mismatch + + + + + The passphrase you entered twice doesn't match. Try again. + + + + + Choose a passphrase + + + + + You really do need a passphrase. + + + + + All done. Closing user interface... + + + + + Address is gone + + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + + + + + Address disabled + + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + + + + + Entry added to the Address Book. Edit the label to your liking. + + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + + + + + Save As... + + + + + Write error. + + + + + No addresses selected. + + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + + + + + Testing... + + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + + + + + The address should start with ''BM-'' + + + + + The address is not typed or copied correctly (the checksum failed). + + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + + + + + The address contains invalid characters. + + + + + Some data encoded in the address is too short. + + + + + Some data encoded in the address is too long. + + + + + You are using TCP port %1. (This can be changed in the settings). + + + + + Bitmessage + + + + + Search + + + + + All + + + + + To + + + + + From + + + + + Subject + + + + + Message + + + + + Received + + + + + Inbox + + + + + Load from Address book + + + + + Fetch Namecoin ID + + + + + Message: + + + + + Subject: + + + + + Send to one or more specific people + + + + + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + To: + + + + + From: + + + + + Broadcast to everyone who is subscribed to your address + + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + + + + + Status + + + + + Sent + + + + + Label (not shown to anyone) + + + + + Address + Address + + + + Stream + + + + + Your Identities + + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + + + + + Add new Subscription + + + + + Label + Label + + + + Subscriptions + + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + + + + + Name or Label + + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + + + + + Blacklist + + + + + Stream # + + + + + Connections + + + + + Total connections: 0 + + + + + Since startup at asdf: + + + + + Processed 0 person-to-person message. + + + + + Processed 0 public key. + + + + + Processed 0 broadcast. + + + + + Network Status + + + + + File + + + + + Settings + Settings + + + + Help + Help + + + + Import keys + + + + + Manage keys + + + + + Ctrl+Q + + + + + F1 + + + + + About + + + + + Regenerate deterministic addresses + + + + + Delete all trashed messages + + + + + Join / Create chan + + + + + NewAddressDialog + + + Create new Address + Neue Adresse erstellen + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + Here yee may gen'rate arrrs many arrddresses as yee like. Indeed, crrreatin' and abandonin' arrddresses be encouraged. Yee may generrrate arrddresses by usin' either random numbers or by usin' a passphrase. If you be usin' a passphrase, t' arrddress be called a "deterministic" arrddress. +T' 'Random Number' option be selected by default but deterministic arrddresses have several pros and cons: + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>Yee may recreate your arrddresses on any computer from memory. <br/>Yee shant worry about backing up yee keys.dat file as long as yee shall remember t' passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>Yee must remember (or scribe down) t' passphrase if yee expect t' be able to recreate your keys if they be lost. <br/>Yee must remember t' arrddress version number and t' stream number along with yee passphrase. <br/>If yee choose a weak passphrase and someone on t' great see of internet can brute-force it like a real pirate, they can read yee messages and send messages as you.</p></body></html> + + + + Use a random number generator to make an address + Use yee random number generator to make an arrddress + + + + Use a passpharase to make addresses + Use yee passpharase to make arrddresses + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Spend several minutes of extra computing time to make t' arrddress(es) 1 or 2 charrracters sharter. + + + + Make deterministic addresses + Make deterministic arrddresses + + + + Address version number: 3 + Arrddress version number: 3 + + + + In addition to your passphrase, you must remember these numbers: + In addition to yee passphrase, yee must rememberrr these numbers: + + + + Passphrase + Passphrase + + + + Number of addresses to make based on your passphrase: + Number of addresses t' make based on yee passphrase: + + + + Stream number: 1 + Stream number: 1 + + + + Retype passphrase + RRRetype passphrase matey: + + + + Randomly generate address + RRRandomly generate address + + + + Label (not shown to anyone except you) + Label (not shown t' any sailors 'cept you) + + + + Use the most available stream + Use t' most available stream + + + + (best if this is the first of many addresses you will create) + (best if this be t' first of many arrddresses you be creatin') + + + + Use the same stream as an existing address + Use t' same stream as an existing arrddress + + + + (saves you some bandwidth and processing power) + (saves yee some bandwidth and processing powerrr) + + + + Use a passphrase to make addresses + + + + + NewSubscriptionDialog + + + Add new entry + Add yee new entry + + + + Label + Label + + + + Address + Address + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + Special Arrddress Behavior + + + + Behave as a normal address + Behave yee as normal arrddress + + + + Behave as a pseudo-mailing-list address + Behave yee as pseudo-mailing-list arrddress + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + Mail rrreceived to yee pseudo-mailing-list arrddress be automatically broadcast to subscribers (all sailors in public be able to see yee message). + + + + Name of the pseudo-mailing-list: + Name yee pseudo-mailing-list: + + + + aboutDialog + + + PyBitmessage + PyBitmessage + + + + version ? + Version ? + + + + About + + + + + Copyright © 2013 Jonathan Warren + + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + + This is Beta software. + + + + + connectDialog + + + Bitmessage + + + + + Bitmessage won't connect to anyone until you let it. + + + + + Connect now + + + + + Let me configure special network settings first + + + + + helpDialog + + + Help + Help + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Bitmessage be project of many, a pirates help can be found online in the Bitmessage Wiki: + + + + iconGlossaryDialog + + + Icon Glossary + Symbol-Glossar + + + + You have no connections with other peers. + Sie haben keine Verbindung zu anderen Teilnehmern. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to foward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + Yee have made least one connection to a peer pirate usin' outgoing connection but yee not yet received any incoming connections. Yee firewall, witches nest, or home router probably shant configured to foward incoming TCP connections to yee computer. Bitmessage be workin' just fine but it help fellow pirates if yee allowed for incoming connections and will help yee be a better-connected node matey. + + + + You are using TCP port ?. (This can be changed in the settings). + You be usin' TCP port ?. (This be changed in settings). + + + + You do have connections with other peers and your firewall is correctly configured. + Yee have connections with other peers and pirates,yee firewall is correctly configured. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + + + + + newChanDialog + + + Dialog + + + + + Create a new chan + + + + + Join a chan + + + + + Create a chan + + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + + + + + Chan name: + + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + + + + + Chan bitmessage address: + + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + Regenerate Existin' Arrddresses + + + + Regenerate existing addresses + Regenerate existin' addresses + + + + Passphrase + Passphrase + + + + Number of addresses to make based on your passphrase: + Number of arrddresses to make based on yee passphrase: + + + + Address version Number: + Arrddress version Number: + + + + 3 + 3 + + + + Stream number: + Stream numberrr: + + + + 1 + 1 + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Spend several minutes extra computin' time to make yee address(es) 1 arr 2 characters sharter + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + Yee must check (arr not check) this box just like yee did (or didn't) when yee made your arrddresses the first time. + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + If yee have previously made deterministic arrddresses but yee lost them due to an accident (like losin' yee pirate ship), yee can regenerate them here. If yee used t' random number generator to make yee addresses then this form be of no use to you. + + + + settingsDialog + + + Settings + Settings + + + + Start Bitmessage on user login + Start yee Bitmessage on userrr login + + + + Start Bitmessage in the tray (don't show main window) + Start yee Bitmessage in t' tray (don't show main window) + + + + Minimize to tray + Minimize to yee tray + + + + Show notification when message received + Show yee a notification when message received + + + + Run in Portable Mode + Run in yee Portable Mode + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + In Portable Mode, messages and config files are stored in t' same directory as yee program rather than t' normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive or wooden leg. + + + + User Interface + User Interface + + + + Listening port + Listenin' port + + + + Listen for connections on port: + Listen for connections on yee port: + + + + Proxy server / Tor + Proxy server / Tor + + + + Type: + Type: + + + + none + none + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + Server hostname: + + + + Port: + Port: + + + + Authentication + Authentication + + + + Username: + Username: + + + + Pass: + Pass: + + + + Network Settings + Network Settings + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + When a pirate sends yee a message, their computer must first complete a load of work. T' difficulty of t' work, by default, is 1. Yee may raise this default for new arrddresses yee create by changin' the values here. Any new arrddresses you be createin' will require senders to meet t' higher difficulty. There be one exception: if yee add a friend or pirate to yee arrddress book, Bitmessage be automatically notifyin' them when yee next send a message that they needin' be only complete t' minimum amount of work: difficulty 1. + + + + Total difficulty: + Total difficulty: + + + + Small message difficulty: + Small message difficulty: + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + T' 'Small message difficulty' mostly only affects t' difficulty of sending small messages. Doubling this value be makin' it almost twice as difficult to send a small message but doesn't really affect large messages. + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + T' 'Total difficulty' affects the absolute amount of work yee sender must complete. Doubling this value be doublin' t' amount of work. + + + + Demanded difficulty + Demanded difficulty + + + + Willingly include unencrypted destination address when sending to a mobile device + + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + + + + + Listen for incoming connections when using proxy + + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + + + + + Maximum acceptable total difficulty: + + + + + Maximum acceptable small message difficulty: + + + + + Max acceptable difficulty + + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + + + + + Host: + + + + + Password: + + + + + Test + + + + + Connect to: + + + + + Namecoind + + + + + NMControl + + + + + Namecoin integration + + + + diff --git a/src/translations/bitmessage_eo.pro b/src/translations/bitmessage_eo.pro new file mode 100644 index 00000000..3ca3e68e --- /dev/null +++ b/src/translations/bitmessage_eo.pro @@ -0,0 +1,32 @@ +SOURCES = ../addresses.py\ + ../bitmessagemain.py\ + ../class_addressGenerator.py\ + ../class_outgoingSynSender.py\ + ../class_receiveDataThread.py\ + ../class_sendDataThread.py\ + ../class_singleCleaner.py\ + ../class_singleListener.py\ + ../class_singleWorker.py\ + ../class_sqlThread.py\ + ../helper_bitcoin.py\ + ../helper_bootstrap.py\ + ../helper_generic.py\ + ../helper_inbox.py\ + ../helper_sent.py\ + ../helper_startup.py\ + ../shared.py\ + ../bitmessageqt/__init__.py\ + ../bitmessageqt/about.py\ + ../bitmessageqt/bitmessageui.py\ + ../bitmessageqt/connect.py\ + ../bitmessageqt/help.py\ + ../bitmessageqt/iconglossary.py\ + ../bitmessageqt/newaddressdialog.py\ + ../bitmessageqt/newchandialog.py\ + ../bitmessageqt/newsubscriptiondialog.py\ + ../bitmessageqt/regenerateaddresses.py\ + ../bitmessageqt/settings.py\ + ../bitmessageqt/specialaddressbehavior.py + +TRANSLATIONS = bitmessage_eo.ts +CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_eo.qm b/src/translations/bitmessage_eo.qm new file mode 100644 index 0000000000000000000000000000000000000000..0a1e30e773352be960dc8ca0af0d0ee80cf75bf9 GIT binary patch literal 42299 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 + + + + MainWindow + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + Iu de viaj adresoj, %1, estas malnova versio 1 adreso. Ĉu ni povas forviŝi ĝin? + + + + Reply + Aŭ ĉu oni uzas u-formon ĉi tie? "Respondu"?! Ŝajnas al mi ke ne. + Respondi + + + + Add sender to your Address Book + Aldoni sendinton al via adresaro + + + + Move to Trash + Movi al rubujo + + + + View HTML code as formatted text + Montri HTML-n kiel aranĝita teksto + + + + Save message as... + Konservi mesaĝon kiel... + + + + New + Nova + + + + Enable + ankaŭ eblus aktivigi + Ŝalti + + + + Disable + ankaŭ eblus malaktivigi + Malŝalti + + + + Copy address to clipboard + ankaŭ eblus "tondujo" aŭ "poŝo" + Kopii adreson al tondejo + + + + Special address behavior... + Speciala sinteno de adreso... + + + + Send message to this address + Sendi mesaĝon al tiu adreso + + + + Subscribe to this address + Aboni tiun adreson + + + + Add New Address + Aldoni novan adreson + + + + Delete + aŭ forigi + Forviŝi + + + + Copy destination address to clipboard + Kopii cel-adreson al tondejo + + + + Force send + Devigi sendadon + + + + Add new entry + aŭ eron + Aldoni novan elementon + + + + Waiting on their encryption key. Will request it again soon. + mi ne certas kiel traduki "their" ĉi tie. Sonas strange al mi. + Atendante al ilia ĉifroŝlosilo. Baldaŭ petos ĝin denove. + + + + Encryption key request queued. + Peto por ĉifroŝlosilo envicigita. + + + + Queued. + En atendovico. + + + + Message sent. Waiting on acknowledgement. Sent at %1 + Mesaĝo sendita. Atendante konfirmon. Sendita je %1 + + + + Need to do work to send message. Work is queued. + Devas labori por sendi mesaĝon. Laboro en atendovico. + + + + Acknowledgement of the message received %1 + Ricevis konfirmon de la mesaĝo je %1 + + + + Broadcast queued. + Elsendo en atendovico. + + + + Broadcast on %1 + Elsendo je %1 + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + Problemo: la demandita laboro de la ricevonto estas pli malfacila ol vi pretas fari. %1 + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + Problemo: la ĉifroŝlosilo de la ricevonto estas rompita. Ne povis ĉifri la mesaĝon. %1 + + + + Forced difficulty override. Send should start soon. + Ĉi tie mi ne certas kiel traduki "Forced difficulty override" + Devigita superado de limito de malfacilaĵo. Sendado devus baldaŭ komenci. + + + + Unknown status: %1 %2 + Nekonata stato: %1 %2 + + + + Since startup on %1 + Ekde lanĉo de la programo je %1 + + + + Not Connected + Ne konektita + + + + Show Bitmessage + Montri Bitmesaĝon + + + + Send + Sendi + + + + Subscribe + Aboni + + + + Address Book + Adresaro + + + + Quit + Eliri + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + Vi povas administri viajn ŝlosilojn redaktante la dosieron keys.dat en la sama dosierujo kiel tiu programo. Estas grava ke vi faru savkopion de tiu dosiero. + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + Vi povas administri viajn ŝlosilojn redaktante la dosieron keys.dat en la dosierujo +%1. +Estas grava ke vi faru savkopion de tiu dosiero. + + + + Open keys.dat? + Ĉu "ĉu" estas bezonata ĉi tie? Aŭ ĉu sufiĉas diri "Malfermi keys.dat?" + Ĉu malfermi keys.dat? + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Vi povas administri viajn ŝlosilojn redaktante la dosieron keys.dat en la sama dosierujo kiel tiu programo. Estas grava ke vi faru savkopion de tiu dosiero. Ĉu vi volas malfermi la dosieron nun? (Bonvolu certigi ke Bitmesaĝo estas fermita antaŭ fari ŝanĝojn.) + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Vi povas administri viajn ŝlosilojn redaktante la dosieron keys.dat en la dosierujo +%1. +Estas grava ke vi faru savkopion de tiu dosiero. Ĉu vi volas malfermi la dosieron nun? (Bonvolu certigi ke Bitmesaĝo estas fermita antaŭ fari ŝanĝojn.) + + + + Delete trash? + Malplenigi rubujon? + + + + Are you sure you want to delete all trashed messages? + Ĉu "el" aŭ "en" pli taŭgas? + Ĉu vi certas ke vi volas forviŝi ĉiujn mesaĝojn el la rubojo? + + + + bad passphrase + malprava pasvorto + + + + You must type your passphrase. If you don't have one then this is not the form for you. + Vi devas tajpi vian pasvorton. Se vi ne havas pasvorton tiu ne estas la prava formularo por vi. + + + + Processed %1 person-to-person messages. + (Mi trovis "inter-para" kiel traduko de P2P en vikipedio: https://eo.wikipedia.org/wiki/P2p "samtavola" sonis strange al mi. Inter "p"ara ja povus uziĝi kiel "para-al-para" kvazaŭ kiel la angla P2P. Poste mi vidis ke tio ne celas peer2peer sed person2person.) + Pritraktis %1 inter-personajn mesaĝojn. + + + + Processed %1 broadcast messages. + Pritraktis %1 elsendojn. + + + + Processed %1 public keys. + Pritraktis %1 publikajn ŝlosilojn. + + + + Total Connections: %1 + Ĉu "totala" pravas ĉi tie? + Totalaj Konektoj: %1 + + + + Connection lost + Perdis konekton + + + + Connected + Konektita + + + + Message trashed + Movis mesaĝon al rubujo + + + + Error: Bitmessage addresses start with BM- Please check %1 + Eraro: en Bitmesaĝa adresoj komencas kun BM- Bonvolu kontroli %1 + + + + Error: The address %1 is not typed or copied correctly. Please check it. + Eraro: La adreso %1 ne estis prave tajpita aŭ kopiita. Bonvolu kontroli ĝin. + + + + Error: The address %1 contains invalid characters. Please check it. + Eraro: La adreso %1 enhavas malpermesitajn simbolojn. Bonvolu kontroli ĝin. + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + Mi demandis en DevTalk kiel traduki " is being clever." Ŝajne la aliaj tradukoj simple forlasis ĝin. + Eraro: La adres-versio %1 estas tro alta. Eble vi devas promocii vian Bitmesaĝo programon aŭ via konato uzas alian programon. + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + Eraro: Kelkaj datumoj kodita en la adreso %1 estas tro mallongaj. Povus esti ke io en la programo de via konato malfunkcias. + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + Eraro: Kelkaj datumoj kodita en la adreso %1 estas tro longaj. Povus esti ke io en la programo de via konato malfunkcias. + + + + Error: Something is wrong with the address %1. + Eraro: Io malĝustas kun la adreso %1. + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + Eraro: Vi devas elekti sendontan adreson. Se vi ne havas iun, iru al langeto "Viaj identigoj". + + + + Sending to your address + Sendante al via adreso + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + Ĉu "kliento" pravas? Ĉu "virtuala maŝino? + Eraro: Unu el la adresoj al kiuj vi sendas mesaĝon (%1) apartenas al vi. Bedaŭrinde, la kliento de Bitmesaĝo ne povas pritrakti siajn proprajn mesaĝojn. Bonvolu uzi duan klienton ĉe alia komputilo aŭ en virtuala maŝino (VM). + + + + Address version number + Numero de adresversio + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Stream number + Fluo numero + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + + + + + Your 'To' field is empty. + Via "Ricevonto"-kampo malplenas. + + + + Work is queued. + Laboro en atendovico. + + + + Right click one or more entries in your address book and select 'Send message to this address'. + + + + + Work is queued. %1 + Laboro en atendovico. %1 + + + + New Message + Nova mesaĝo + + + + From + De + + + + Address is valid. + Adreso estas ĝusta. + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + Eraro: Vi ne povas duoble aldoni la saman adreson al via adresaro. Provu renomi la jaman se vi volas. + + + + The address you entered was invalid. Ignoring it. + La adreso kiun vi enmetis estas malĝusta. Ignoras ĝin. + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + Eraro: Vi ne povas duoble aboni la saman adreson. Provu renomi la jaman se vi volas. + + + + Restart + Restartigi + + + + You must restart Bitmessage for the port number change to take effect. + Vi devas restartigi Bitmesaĝon por ke la ŝanĝo de la numero de pordo (Port Number) efektivigu. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. + Bitmessage wird den Proxy-Server ab jetzt verwenden, möglicherweise möchten Sie Bitmessage neu starten um bestehende Verbindungen zu schließen. + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + + + + + Passphrase mismatch + Notu ke pasfrazo kutime estas pli longa ol pasvorto. + Pasfrazoj malsamas + + + + The passphrase you entered twice doesn't match. Try again. + La pasfrazo kiun vi duoble enmetis malsamas. Provu denove. + + + + Choose a passphrase + Elektu pasfrazon + + + + You really do need a passphrase. + Vi ja vere bezonas pasfrazon. + + + + All done. Closing user interface... + Ĉiu preta. Fermante fasadon... + + + + Address is gone + Oni devas certigi KIE tiu frazo estas por havi la kuntekston. + Adreso foriris + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + Bitmesaĝo ne povas trovi vian adreson %1. Ĉu eble vi forviŝis ĝin? + + + + Address disabled + Adreso malŝaltita + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + Eraro: La adreso kun kiu vi provas sendi estas malŝaltita. Vi devos ĝin ŝalti en la langeto 'Viaj identigoj' antaŭ uzi ĝin. + + + + Entry added to the Address Book. Edit the label to your liking. + Ĉu pli bone "Bv. redakti"? + Aldonis elementon al adresaro. Redaktu la etikedo laŭvole. + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + Movis elementojn al rubujo. Ne estas fasado por rigardi vian rubujon, sed ankoraŭ estas sur disko se vi esperas ĝin retrovi. + + + + Save As... + Konservi kiel... + + + + Write error. + http://komputeko.net/index_en.php?vorto=write+error + Skriberaro. + + + + No addresses selected. + Neniu adreso elektita. + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + + + + + The address should start with ''BM-'' + Aŭ "devus komenci" laŭ kunteksto? + La adreso komencu kun "BM-" + + + + The address is not typed or copied correctly (the checksum failed). + La adreso ne estis prave tajpita aŭ kopiita (kontrolsumo malsukcesis). + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + + + + + The address contains invalid characters. + La adreso enhavas malpermesitajn simbolojn. + + + + Some data encoded in the address is too short. + Kelkaj datumoj kodita en la adreso estas tro mallongaj. + + + + Some data encoded in the address is too long. + Kelkaj datumoj kodita en la adreso estas tro longaj. + + + + You are using TCP port %1. (This can be changed in the settings). + Vi estas uzanta TCP pordo %1 (Tio estas ŝanĝebla en la agordoj). + + + + Bitmessage + Dependas de la kunteksto ĉu oni volas traduki tion. + Bitmesaĝo + + + + To + Al + + + + From + De + + + + Subject + Temo + + + + Received + Kunteksto? + Ricevita + + + + Inbox + aŭ "ricevkesto" http://komputeko.net/index_en.php?vorto=Inbox + Ricevujo + + + + Load from Address book + Ŝarĝi el adresaro + + + + Message: + Mesaĝo: + + + + Subject: + Temo: + + + + Send to one or more specific people + Sendi al unu aŭ pli specifaj personoj + + + + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + To: + Al: + + + + From: + De: + + + + Broadcast to everyone who is subscribed to your address + Ĉu "ĉiu kiu" eĉ eblas? + Elsendi al ĉiu kiu subskribis al via adreso + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + Sciu ke elsendoj estas sole ĉifrita kun via adreso. Iu ajn povas legi ĝin se tiu scias vian adreson. + + + + Status + http://komputeko.net/index_en.php?vorto=status + Stato + + + + Sent + Sendita + + + + Label (not shown to anyone) + Etikdeo (ne montrita al iu ajn) + + + + Address + Adreso + + + + Stream + Fluo + + + + Your Identities + Mi ne certis kion uzi: ĉu identeco (rim: internacia senco) aŭ ĉu identigo. Mi decidis por identigo pro la rilato al senco "rekoni" ("identigi krimulon") + Via identigoj + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + Ĉi tie vi povas aboni "elsendajn mesaĝojn" elsendita de aliaj uzantoj. Adresoj ĉi tie transpasas tiujn sur la langeto "Nigara listo". + + + + Add new Subscription + kial "Subscription" kun granda S? + Aldoni novan Abonon + + + + Label + Etikedo + + + + Subscriptions + Abonoj + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + La Adresaro estas utila por aldoni nomojn aŭ etikedojn al la Bitmesaĝa adresoj de aliaj persono por ke vi povu rekoni ilin pli facile en via ricevujo. Vi povas aldoni elementojn ĉi tie uzante la butonon 'Aldoni', aŭ en la ricevujo per dekstra klako al mesaĝo. + + + + Name or Label + e aŭ E? + Nomo aŭ Etikedo + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + http://komputeko.net/index_en.php?vorto=blacklist + Uzi Nigran Liston (permesi ĉiujn alvenintajn mesaĝojn escepte tiuj en la Nigra Listo) + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + mi skribis majuskle ĉar mi pensas ke Blacklist and Whitelist estas specifa por tiu kunteksto + Uzi Blankan Liston (bloki ĉiujn alvenintajn mesaĝojn escepte tiuj en la Blanka Listo) + + + + Blacklist + Nigra Listo + + + + Stream # + Fluo # + + + + Connections + Konetkoj + + + + Total connections: 0 + Totalaj konektoj: 0 + + + + Since startup at asdf: + Stranga fonto! + Ekde lanĉo de la programo je asdf: + + + + Processed 0 person-to-person message. + Pritraktis 0 inter-personajn mesaĝojn. + + + + Processed 0 public key. + Pritraktis 0 publikajn ŝlosilojn. + + + + Processed 0 broadcast. + Pritraktis 0 elsendojn. + + + + Network Status + Reta Stato + + + + File + Dosiero + + + + Settings + Agordoj + + + + Help + Helpo + + + + Import keys + Importi ŝlosilojn + + + + Manage keys + Administri ŝlosilojn + + + + About + Pri + + + + Regenerate deterministic addresses + http://www.reta-vortaro.de/revo/art/gener.html https://eo.wikipedia.org/wiki/Determinismo + Regeneri determinisman adreson + + + + Delete all trashed messages + Forviŝi ĉiujn mesaĝojn el rubujo + + + + Message sent. Sent at %1 + Mesaĝo sendita. Sendita je %1 + + + + Chan name needed + http://komputeko.net/index_en.php?vorto=channel + Bezonas nomon de kanalo + + + + You didn't enter a chan name. + Vi ne enmetis nonon de kanalo. + + + + Address already present + eble laŭ kunteksto "en la listo"? + Adreso jam ĉi tie + + + + Could not add chan because it appears to already be one of your identities. + Ne povis aldoni kanalon ĉar ŝajne jam estas unu el viaj indentigoj. + + + + Success + Sukceso + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + Sukcese kreis kanalon. Por ebligi al aliaj aniĝi vian kanalon, sciigu al ili la nomon de la kanalo kaj ties Bitmesaĝa adreso: %1. Tiu adreso ankaŭ aperas en 'Viaj identigoj'. + + + + Address too new + Kion tio signifu? kunteksto? + Adreso tro nova + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + Kvankam tiu Bitmesaĝa adreso povus esti ĝusta, ĝia versionumero estas tro nova por pritrakti ĝin. Eble vi devas promocii vian Bitmesaĝon. + + + + Address invalid + Adreso estas malĝusta + + + + That Bitmessage address is not valid. + Tiu Bitmesaĝa adreso ne estas ĝusta. + + + + Address does not match chan name + Adreso ne kongruas kun kanalonomo + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + Kvankam la Bitmesaĝa adreso kiun vi enigis estas ĝusta, ĝi ne kongruas kun la kanalonomo. + + + + Successfully joined chan. + Sukcese aniĝis al kanalo. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + Bitmesaĝo uzos vian prokurilon (proxy) ekde nun sed eble vi volas permane restartigi Bitmesaĝon nun por ke ĝi fermu eblajn jamajn konektojn. + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + Tio estas kanaladreso. Vi ne povas ĝin uzi kiel pseŭdo-dissendolisto. + + + + Search + Serĉi + + + + All + Ĉio + + + + Message + Mesaĝo + + + + Join / Create chan + Aniĝi / Krei kanalon + + + + Encryption key was requested earlier. + Verschlüsselungscode wurde bereits angefragt. + + + + Sending a request for the recipient's encryption key. + Sende eine Anfrage für den Verschlüsselungscode des Empfängers. + + + + Doing work necessary to request encryption key. + Verrichte die benötigte Arbeit um den Verschlüsselungscode anzufragen. + + + + Broacasting the public key request. This program will auto-retry if they are offline. + Anfrage für den Verschlüsselungscode versendet (wird automatisch periodisch neu verschickt). + + + + Sending public key request. Waiting for reply. Requested at %1 + Anfrag für den Verschlüsselungscode gesendet. Warte auf Antwort. Angefragt am %1 + + + + Mark Unread + Marki nelegita + + + + Fetched address from namecoin identity. + Venigis adreson de Namecoin identigo. + + + + Testing... + Testante... + + + + Fetch Namecoin ID + Venigu Namecoin ID + + + + Ctrl+Q + http://komputeko.net/index_en.php?vorto=ctrl + Stir + Q + + + + F1 + F1 + + + + NewAddressDialog + + + Create new Address + Krei novan Adreson + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + + + + + Use a random number generator to make an address + + + + + Use a passphrase to make addresses + + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + + + + + Make deterministic addresses + + + + + Address version number: 3 + + + + + In addition to your passphrase, you must remember these numbers: + + + + + Passphrase + Pasfrazo + + + + Number of addresses to make based on your passphrase: + Kvanto de farotaj adresoj bazante sur via pasfrazo: + + + + Stream number: 1 + + + + + Retype passphrase + + + + + Randomly generate address + + + + + Label (not shown to anyone except you) + + + + + Use the most available stream + + + + + (best if this is the first of many addresses you will create) + + + + + Use the same stream as an existing address + + + + + (saves you some bandwidth and processing power) + + + + + NewSubscriptionDialog + + + Add new entry + Aldoni novan elementon + + + + Label + Etikedo + + + + Address + Adreso + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + + + + + Behave as a normal address + + + + + Behave as a pseudo-mailing-list address + + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + + + + + Name of the pseudo-mailing-list: + + + + + aboutDialog + + + About + Pri + + + + PyBitmessage + PyBitmessage + + + + version ? + Veriso ? + + + + Copyright © 2013 Jonathan Warren + Kopirajto © 2013 Jonathan Warren + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + <html><head/><body><p>Distribuita sub la permesilo "MIT/X11 software license"; vidu <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + This is Beta software. + Tio estas beta-eldono. + + + + connectDialog + + + Bitmessage + Bitmesaĝo + + + + Bitmessage won't connect to anyone until you let it. + Bitmesaĝo ne konektos antaŭ vi permesas al ĝi. + + + + Connect now + Kenekti nun + + + + Let me configure special network settings first + Lasu min unue fari specialajn retajn agordojn + + + + helpDialog + + + Help + Helpo + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + Mi aldonis "(angle)" ĉar le enhavo de la helpopaĝo ja ne estas tradukita + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help (angle)</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Ĉar Bitmesaĝo estas kunlabora projekto, vi povas trovi helpon enrete ĉe la vikio de Bitmesaĝo: + + + + iconGlossaryDialog + + + Icon Glossary + Piktograma Glosaro + + + + You have no connections with other peers. + Vi havas neniun konekton al aliaj samtavolano. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + Vi konektis almenaŭ al unu smtavolano uzante eliranta konekto, sed vi ankoraŭ ne ricevis enirantajn konetkojn. Via fajroŝirmilo (firewall) aŭ hejma enkursigilo (router) verŝajne estas agordita ne plusendi enirantajn TCP konektojn al via komputilo. Bitmesaĝo funkcios sufiĉe bone sed helpus al la Bitmesaĝa reto se vi permesus enirantajn konektojn kaj tiel estus pli bone konektita nodo. + + + + You are using TCP port ?. (This can be changed in the settings). + Vi estas uzanta TCP pordo ?. (Tio estas ŝanĝebla en la agordoj). + + + + You do have connections with other peers and your firewall is correctly configured. + Vi havas konektojn al aliaj samtavolanoj kaj via fajroŝirmilo estas ĝuste agordita. + + + + newChanDialog + + + Dialog + Dialogo + + + + Create a new chan + Krei novan kanalon + + + + Join a chan + Aniĝi al kanalo + + + + Create a chan + Krei kanalon + + + + Chan name: + Nomo de kanalo: + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + <html><head/><body><p>Kanalo ekzistas kiam grupo de personoj havas komunajn malĉifrajn ŝlosilojn. La ŝlosiloj kaj Bitmesaĝa adreso uzita de kanalo estas generita el homlegebla vorto aŭ frazo (la nomo de la kanalo). Por sendi mesaĝon al ĉiu en la kanalo, sendu normalan person-al-persona mesaĝon al la adreso de la kanalo.</p><p>Kanaloj estas eksperimentaj kaj tute malkontroleblaj.</p></body></html> + + + + Chan bitmessage address: + Bitmesaĝa adreso de kanalo: + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + <html><head/><body><p>Enmetu nomon por via kanalo. Se vi elektas sufiĉe ampleksan kanalnomon (kiel fortan kaj unikan pasfrazon) kaj neniu el viaj amikoj komunikas ĝin publike la kanalo estos sekura kaj privata. Se vi kaj iu ajn kreas kanalon kun la sama nomo tiam en la momento estas tre verŝajne ke estos la sama kanalo.</p></body></html> + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + Regeneri ekzistantajn adresojn + + + + Regenerate existing addresses + Regeneri ekzistantajn Adresojn + + + + Passphrase + Pasfrazo + + + + Number of addresses to make based on your passphrase: + Kvanto de farotaj adresoj bazante sur via pasfrazo: + + + + Address version Number: + Adresa versio numero: + + + + 3 + 3 + + + + Stream number: + Fluo numero: + + + + 1 + 1 + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Elspezi kelkajn minutojn per aldona tempo de komputila kalkulado por fari adreso(j)n 1 aŭ 2 simbolojn pli mallonge + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + Vi devas marki (aŭ ne marki) tiun markobutono samkiel vi faris kiam vi generis vian adreson la unuan fojon. + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + Se vi antaŭe kreis determinismajn adresojn sed perdis ĝin akcidente (ekz. en diska paneo), vi povas regeneri ilin ĉi tie. Se vi uzis la generilo de hazardaj numeroj por krei vian adreson tiu formularo ne taŭgos por vi. + + + + settingsDialog + + + Settings + Agordoj + + + + Start Bitmessage on user login + Startigi Bitmesaĝon dum ensaluto de uzanto + + + + Start Bitmessage in the tray (don't show main window) + Startigi Bitmesaĝon en la taskopleto (tray) ne montrante tiun fenestron + + + + Minimize to tray + Plejetigi al taskopleto + + + + Show notification when message received + Montri sciigon kiam mesaĝo alvenas + + + + Run in Portable Mode + Ekzekucii en Portebla Reĝimo + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + En Portebla Reĝimo, mesaĝoj kaj agordoj estas enmemorigitaj en la sama dosierujo kiel la programo mem anstataŭ en la dosierujo por datumoj de aplikaĵoj. Tio igas ĝin komforta ekzekucii Bitmesaĝon el USB poŝmemorilo. + + + + User Interface + Fasado + + + + Listening port + Aŭskultanta pordo (port) + + + + Listen for connections on port: + Aŭskultu pri konektoj ĉe pordo: + + + + Proxy server / Tor + Prokurila (proxy) servilo / Tor + + + + Type: + Tipo: + + + + none + Neniu + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + Servilo gastiga nomo (hostname): + + + + Port: + Pordo (port): + + + + Authentication + Aŭtentigo + + + + Username: + Uzantnomo: + + + + Pass: + Pas: + + + + Network Settings + Retaj agordoj + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + + + + + Total difficulty: + + + + + Small message difficulty: + + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + + + + + Demanded difficulty + + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + + + + + Maximum acceptable total difficulty: + + + + + Maximum acceptable small message difficulty: + + + + + Max acceptable difficulty + + + + + Listen for incoming connections when using proxy + + + + + Willingly include unencrypted destination address when sending to a mobile device + + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + + + + + Host: + Gastiga servilo: + + + + Password: + Pasvorto: + + + + Test + Testo + + + + Connect to: + Kenekti al: + + + + Namecoind + Namecoind + + + + NMControl + NMControl + + + + Namecoin integration + Integrigo de Namecoin + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + Transpasi la automatan reconon de locala lingvo (uzu landokodon aŭ lingvokodon, ekz. 'en_US' aŭ 'en'): + + + diff --git a/src/translations/bitmessage_fr.pro b/src/translations/bitmessage_fr.pro new file mode 100644 index 00000000..c8af9d39 --- /dev/null +++ b/src/translations/bitmessage_fr.pro @@ -0,0 +1,32 @@ +SOURCES = ../addresses.py\ + ../bitmessagemain.py\ + ../class_addressGenerator.py\ + ../class_outgoingSynSender.py\ + ../class_receiveDataThread.py\ + ../class_sendDataThread.py\ + ../class_singleCleaner.py\ + ../class_singleListener.py\ + ../class_singleWorker.py\ + ../class_sqlThread.py\ + ../helper_bitcoin.py\ + ../helper_bootstrap.py\ + ../helper_generic.py\ + ../helper_inbox.py\ + ../helper_sent.py\ + ../helper_startup.py\ + ../shared.py\ + ../bitmessageqt/__init__.py\ + ../bitmessageqt/about.py\ + ../bitmessageqt/bitmessageui.py\ + ../bitmessageqt/connect.py\ + ../bitmessageqt/help.py\ + ../bitmessageqt/iconglossary.py\ + ../bitmessageqt/newaddressdialog.py\ + ../bitmessageqt/newchandialog.py\ + ../bitmessageqt/newsubscriptiondialog.py\ + ../bitmessageqt/regenerateaddresses.py\ + ../bitmessageqt/settings.py\ + ../bitmessageqt/specialaddressbehavior.py + +TRANSLATIONS = bitmessage_fr.ts +CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_fr.qm b/src/translations/bitmessage_fr.qm new file mode 100644 index 0000000000000000000000000000000000000000..70cbed9217ad94722fed4e6b4382e897c44f35bd GIT binary patch literal 49403 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 + + + MainWindow + + + Bitmessage + Bitmessage + + + + To + Vers + + + + From + De + + + + Subject + Sujet + + + + Received + Reçu + + + + Inbox + Boîte de réception + + + + Load from Address book + Charger depuis carnet d'adresses + + + + Message: + Message : + + + + Subject: + Sujet : + + + + Send to one or more specific people + Envoyer à une ou plusieurs personne(s) + + + + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + To: + Vers : + + + + From: + De : + + + + Broadcast to everyone who is subscribed to your address + Diffuser à chaque abonné de cette adresse + + + + Send + Envoyer + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + Gardez en tête que les diffusions sont seulement chiffrées avec votre adresse. Quiconque disposant de votre adresse peut les lire. + + + + Status + Statut + + + + Sent + Envoyé + + + + New + Nouveau + + + + Label (not shown to anyone) + Label (seulement visible par vous) + + + + Address + Adresse + + + + Stream + Flux + + + + Your Identities + Vos identités + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + Vous pouvez ici souscrire aux 'messages de diffusion' envoyés par d'autres utilisateurs. Les messages apparaîtront dans votre boîte de récption. Les adresses placées ici outrepassent la liste noire. + + + + Add new Subscription + Ajouter un nouvel abonnement + + + + Label + Label + + + + Subscriptions + Abonnements + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + Le carnet d'adresses est utile pour mettre un nom sur une adresse Bitmessage et ainsi faciliter la gestion de votre boîte de réception. Vous pouvez ajouter des entrées ici en utilisant le bouton 'Ajouter', ou depuis votre boîte de réception en faisant un clic-droit sur un message. + + + + Add new entry + Ajouter une nouvelle entrée + + + + Name or Label + Nom ou Label + + + + Address Book + Carnet d'adresses + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + Utiliser une liste noire (autoriser tous les messages entrants exceptés ceux sur la liste noire) + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + Utiliser une liste blanche (refuser tous les messages entrants exceptés ceux sur la liste blanche) + + + + Blacklist + Liste noire + + + + Stream Number + Numéro de flux + + + + Number of Connections + Nombre de connexions + + + + Total connections: 0 + Nombre de connexions total : 0 + + + + Since startup at asdf: + Depuis le lancement à asdf : + + + + Processed 0 person-to-person message. + 0 message de pair à pair traité. + + + + Processed 0 public key. + 0 clé publique traitée. + + + + Processed 0 broadcast. + 0 message de diffusion traité. + + + + Network Status + État du réseau + + + + File + Fichier + + + + Settings + Paramètres + + + + Help + Aide + + + + Import keys + Importer les clés + + + + Manage keys + Gérer les clés + + + + Quit + Quitter + + + + About + À propos + + + + Regenerate deterministic addresses + Regénérer les clés déterministes + + + + Delete all trashed messages + Supprimer tous les messages dans la corbeille + + + + Total Connections: %1 + Nombre total de connexions : %1 + + + + Not Connected + Déconnecté + + + + Connected + Connecté + + + + Show Bitmessage + Afficher Bitmessage + + + + Subscribe + S'abonner + + + + Processed %1 person-to-person messages. + %1 messages de pair à pair traités. + + + + Processed %1 broadcast messages. + %1 messages de diffusion traités. + + + + Processed %1 public keys. + %1 clés publiques traitées. + + + + Since startup on %1 + Depuis lancement le %1 + + + + Waiting on their encryption key. Will request it again soon. + En attente de la clé de chiffrement. Une nouvelle requête sera bientôt lancée. + + + + Encryption key request queued. + Demande de clé de chiffrement en attente. + + + + Queued. + En attente. + + + + Need to do work to send message. Work is queued. + Travail nécessaire pour envoyer le message. Travail en attente. + + + + Acknowledgement of the message received %1 + Accusé de réception reçu le %1 + + + + Broadcast queued. + Message de diffusion en attente. + + + + Broadcast on %1 + Message de diffusion à %1 + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + Problème : Le travail demandé par le destinataire est plus difficile que ce que vous avez paramétré. %1 + + + + Forced difficulty override. Send should start soon. + Neutralisation forcée de la difficulté. L'envoi devrait bientôt commencer. + + + + Message sent. Waiting on acknowledgement. Sent at %1 + Message envoyé. En attente de l'accusé de réception. Envoyé le %1 + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le même répertoire que ce programme. Il est important de faire des sauvegardes de ce fichier. + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire + %1. +Il est important de faire des sauvegardes de ce fichier. + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le même répertoire que ce programme. Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l'ouvrir maintenant ? (Assurez-vous de fermer Bitmessage avant d'effectuer des changements.) + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire + %1. +Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l'ouvrir maintenant ? (Assurez-vous de fermer Bitmessage avant d'effectuer des changements.) + + + + Add sender to your Address Book + Ajouter l'expéditeur au carnet d'adresses + + + + Move to Trash + Envoyer à la Corbeille + + + + View HTML code as formatted text + Voir le code HTML comme du texte formaté + + + + Enable + Activer + + + + Disable + Désactiver + + + + Copy address to clipboard + Copier l'adresse dans le presse-papier + + + + Special address behavior... + Comportement spécial de l'adresse... + + + + Send message to this address + Envoyer un message à cette adresse + + + + Add New Address + Ajouter nouvelle adresse + + + + Delete + Supprimer + + + + Copy destination address to clipboard + Copier l'adresse de destination dans le presse-papier + + + + Force send + Forcer l'envoi + + + + Are you sure you want to delete all trashed messages? + Êtes-vous sûr de vouloir supprimer tous les messages dans la corbeille ? + + + + You must type your passphrase. If you don't have one then this is not the form for you. + Vous devez taper votre phrase secrète. Si vous n'en avez pas, ce formulaire n'est pas pour vous. + + + + Delete trash? + Supprimer la corbeille ? + + + + Open keys.dat? + Ouvrir keys.dat ? + + + + bad passphrase + Mauvaise phrase secrète + + + + Restart + Redémarrer + + + + You must restart Bitmessage for the port number change to take effect. + Vous devez redémarrer Bitmessage pour que le changement de port prenne effet. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. + Bitmessage utilisera votre proxy à partir de maintenant mais il vous faudra redémarrer Bitmessage pour fermer les connexions existantes. + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + Erreur : Vous ne pouvez pas ajouter une adresse déjà présente dans votre liste. Essayez de renommer l'adresse existante. + + + + The address you entered was invalid. Ignoring it. + L'adresse que vous avez entrée est invalide. Adresse ignorée. + + + + Passphrase mismatch + Phrases secrètes différentes + + + + The passphrase you entered twice doesn't match. Try again. + Les phrases secrètes entrées sont différentes. Réessayez. + + + + Choose a passphrase + Choisissez une phrase secrète + + + + You really do need a passphrase. + Vous devez vraiment utiliser une phrase secrète. + + + + All done. Closing user interface... + Terminé. Fermeture de l'interface... + + + + Address is gone + L'adresse a disparu + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + Bitmessage ne peut pas trouver votre adresse %1. Peut-être l'avez-vous supprimée ? + + + + Address disabled + Adresse désactivée + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + Erreur : L'adresse avec laquelle vous essayez de communiquer est désactivée. Vous devez d'abord l'activer dans l'onglet 'Vos identités' avant de l'utiliser. + + + + Entry added to the Address Book. Edit the label to your liking. + Entrée ajoutée au carnet d'adresses. Éditez le label selon votre souhait. + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + Erreur : Vous ne pouvez pas ajouter une adresse déjà présente dans votre carnet d'adresses. Essayez de renommer l'adresse existante. + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + Messages déplacés dans la corbeille. Il n'y a pas d'interface utilisateur pour voir votre corbeille, mais ils sont toujours présents sur le disque si vous souhaitez les récupérer. + + + + No addresses selected. + Aucune adresse sélectionnée. + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implimented for your operating system. + Certaines options ont été désactivées car elles n'étaient pas applicables ou car elles n'ont pas encore été implémentées pour votre système d'exploitation. + + + + The address should start with ''BM-'' + L'adresse devrait commencer avec "BM-" + + + + The address is not typed or copied correctly (the checksum failed). + L'adresse n'est pas correcte (la somme de contrôle a échoué). + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + Le numéro de version de cette adresse est supérieur à celui que le programme peut supporter. Veuiller mettre Bitmessage à jour. + + + + The address contains invalid characters. + L'adresse contient des caractères invalides. + + + + Some data encoded in the address is too short. + Certaines données encodées dans l'adresse sont trop courtes. + + + + Some data encoded in the address is too long. + Certaines données encodées dans l'adresse sont trop longues. + + + + Address is valid. + L'adresse est valide. + + + + You are using TCP port %1. (This can be changed in the settings). + Vous utilisez le port TCP %1. (Ceci peut être changé dans les paramètres). + + + + Error: Bitmessage addresses start with BM- Please check %1 + Erreur : Les adresses Bitmessage commencent avec BM- Merci de vérifier %1 + + + + Error: The address %1 contains invalid characters. Please check it. + Erreur : L'adresse %1 contient des caractères invalides. Veuillez la vérifier. + + + + Error: The address %1 is not typed or copied correctly. Please check it. + Erreur : L'adresse %1 n'est pas correctement recopiée. Veuillez la vérifier. + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + Erreur : La version de l'adresse %1 est trop grande. Pensez à mettre à jour Bitmessage. + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + Erreur : Certaines données encodées dans l'adresse %1 sont trop courtes. Il peut y avoir un problème avec le logiciel ou votre connaissance. + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + Erreur : Certaines données encodées dans l'adresse %1 sont trop longues. Il peut y avoir un problème avec le logiciel ou votre connaissance. + + + + Error: Something is wrong with the address %1. + Erreur : Problème avec l'adresse %1. + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + Erreur : Vous devez spécifier une adresse d'expéditeur. Si vous n'en avez pas, rendez-vous dans l'onglet 'Vos identités'. + + + + Sending to your address + Envoi vers votre adresse + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + Erreur : Une des adresses vers lesquelles vous envoyez un message, %1, est vôtre. Malheureusement, Bitmessage ne peut pas traiter ses propres messages. Essayez de lancer un second client sur une machine différente. + + + + Address version number + Numéro de version de l'adresse + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + Concernant l'adresse %1, Bitmessage ne peut pas comprendre les numéros de version de %2. Essayez de mettre à jour Bitmessage vers la dernière version. + + + + Stream number + Numéro de flux + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + Concernant l'adresse %1, Bitmessage ne peut pas supporter les nombres de flux de %2. Essayez de mettre à jour Bitmessage vers la dernière version. + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + Avertissement : Vous êtes actuellement déconnecté. Bitmessage fera le travail nécessaire pour envoyer le message mais il ne sera pas envoyé tant que vous ne vous connecterez pas. + + + + Your 'To' field is empty. + Votre champ 'Vers' est vide. + + + + Right click one or more entries in your address book and select 'Send message to this address'. + Cliquez droit sur une ou plusieurs entrées dans votre carnet d'adresses et sélectionnez 'Envoyer un message à ces adresses'. + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + Erreur : Vous ne pouvez pas ajouter une même adresse à vos abonnements deux fois. Essayez de renommer l'adresse existante. + + + + Message trashed + Message envoyé à la corbeille + + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + Une de vos adresses, %1, est une vieille adresse de la version 1. Les adresses de la version 1 ne sont plus supportées. Nous pourrions la supprimer maintenant ? + + + + Unknown status: %1 %2 + Statut inconnu : %1 %2 + + + + Connection lost + Connexion perdue + + + + SOCKS5 Authentication problem: %1 + Problème d'authentification SOCKS5 : %1 + + + + Reply + Répondre + + + + Generating one new address + Génération d'une nouvelle adresse + + + + Done generating address. Doing work necessary to broadcast it... + Génération de l'adresse terminée. Travail pour la diffuser en cours... + + + + Done generating address + Génération de l'adresse terminée + + + + Message sent. Waiting on acknowledgement. Sent on %1 + Message envoyé. En attente de l'accusé de réception. Envoyé le %1 + + + + Error! Could not find sender address (your address) in the keys.dat file. + Erreur ! L'adresse de l'expéditeur (vous) n'a pas pu être trouvée dans le fichier keys.dat. + + + + Doing work necessary to send broadcast... + Travail pour envoyer la diffusion en cours... + + + + Broadcast sent on %1 + Message de diffusion envoyé le %1 + + + + Looking up the receiver's public key + Recherche de la clé publique du destinataire + + + + Doing work necessary to send message. (There is no required difficulty for version 2 addresses like this.) + Travail nécessaire pour envoyer le message en cours. (Il n'y a pas de difficulté requise pour ces adresses de version 2.) + + + + Doing work necessary to send message. +Receiver's required difficulty: %1 and %2 + Travail nécessaire pour envoyer le message. +Difficulté requise par le destinataire : %1 et %2 + + + + Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. + Problème : Le travail demandé par le destinataire (%1 et %2) est plus difficile que ce que vous souhaitez faire. + + + + Work is queued. + Travail en attente. + + + + Work is queued. %1 + Travail en attente. %1 + + + + Doing work necessary to send message. +There is no required difficulty for version 2 addresses like this. + Travail nécessaire pour envoyer le message en cours. +Il n'y a pas de difficulté requise pour ces adresses de version 2. + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + + + + + Save message as... + + + + + Mark Unread + + + + + Subscribe to this address + + + + + Message sent. Sent at %1 + + + + + Chan name needed + + + + + You didn't enter a chan name. + + + + + Address already present + + + + + Could not add chan because it appears to already be one of your identities. + + + + + Success + + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + + + + + Address too new + + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + + + + + Address invalid + + + + + That Bitmessage address is not valid. + + + + + Address does not match chan name + + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + + + + + Successfully joined chan. + + + + + Fetched address from namecoin identity. + + + + + New Message + + + + + From + + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + + + + + Save As... + + + + + Write error. + + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + + + + + Testing... + + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + + + + + Search + + + + + All + + + + + Message + + + + + Fetch Namecoin ID + + + + + Stream # + + + + + Connections + + + + + Ctrl+Q + + + + + F1 + + + + + Join / Create chan + + + + + MainWindows + + + Address is valid. + L'adresse est valide. + + + + NewAddressDialog + + + Create new Address + Créer une nouvelle adresse + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + Vous pouvez générer autant d'adresses que vous le souhaitez. En effet, nous vous encourageons à créer et à délaisser vos adresses. Vous pouvez générer des adresses en utilisant des nombres aléatoires ou en utilisant une phrase secrète. Si vous utilisez une phrase secrète, l'adresse sera une adresse "déterministe". +L'option 'Nombre Aléatoire' est sélectionnée par défaut mais les adresses déterministes ont certains avantages et inconvénients : + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Avantages :<br/></span>Vous pouvez recréer vos adresses sur n'importe quel ordinateur. <br/>Vous n'avez pas à vous inquiéter à propos de la sauvegarde de votre fichier keys.dat tant que vous vous rappelez de votre phrase secrète. <br/><span style=" font-weight:600;">Inconvénients :<br/></span>Vous devez vous rappeler (ou noter) votre phrase secrète si vous souhaitez être capable de récréer vos clés si vous les perdez. <br/>Vous devez vous rappeler du numéro de version de l'adresse et du numéro de flux en plus de votre phrase secrète. <br/>Si vous choisissez une phrase secrète faible et que quelqu'un sur Internet parvient à la brute-forcer, il pourra lire vos messages et vous en envoyer.</p></body></html> + + + + Use a random number generator to make an address + Utiliser un générateur de nombres aléatoires pour créer une adresse + + + + Use a passphrase to make addresses + Utiliser une phrase secrète pour créer une adresse + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Créer une adresse plus courte d'un ou deux caractères (nécessite plusieurs minutes de temps de calcul supplémentaires) + + + + Make deterministic addresses + Créer une adresse déterministe + + + + Address version number: 3 + Numéro de version de l'adresse : 3 + + + + In addition to your passphrase, you must remember these numbers: + En plus de votre phrase secrète, vous devez vous rappeler ces numéros : + + + + Passphrase + Phrase secrète + + + + Number of addresses to make based on your passphrase: + Nombre d'adresses à créer sur base de votre phrase secrète : + + + + Stream number: 1 + Nombre de flux : 1 + + + + Retype passphrase + Retapez la phrase secrète + + + + Randomly generate address + Générer une adresse de manière aléatoire + + + + Label (not shown to anyone except you) + Label (seulement visible par vous) + + + + Use the most available stream + Utiliser le flux le plus disponible + + + + (best if this is the first of many addresses you will create) + (préférable si vous générez votre première adresse) + + + + Use the same stream as an existing address + Utiliser le même flux qu'une adresse existante + + + + (saves you some bandwidth and processing power) + (économise de la bande passante et de la puissance de calcul) + + + + NewSubscriptionDialog + + + Add new entry + Ajouter une nouvelle entrée + + + + Label + Label + + + + Address + Adresse + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + Comportement spécial de l'adresse + + + + Behave as a normal address + Se comporter comme une adresse normale + + + + Behave as a pseudo-mailing-list address + Se comporter comme une adresse d'une pseudo liste de diffusion + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + Un mail reçu sur une adresse d'une pseudo liste de diffusion sera automatiquement diffusé aux abonnés (et sera donc public). + + + + Name of the pseudo-mailing-list: + Nom de la pseudo liste de diffusion : + + + + aboutDialog + + + PyBitmessage + PyBitmessage + + + + version ? + version ? + + + + About + À propos + + + + Copyright © 2013 Jonathan Warren + Copyright © 2013 Jonathan Warren + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + <html><head/><body><p>Distribué sous la licence logicielle MIT/X11; voir <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + This is Beta software. + Version bêta. + + + + connectDialog + + + Bitmessage + Bitmessage + + + + Bitmessage won't connect to anyone until you let it. + + + + + Connect now + + + + + Let me configure special network settings first + + + + + helpDialog + + + Help + Aide + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">Wiki d'aide de PyBitmessage</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Bitmessage étant un projet collaboratif, une aide peut être trouvée en ligne sur le Wiki de Bitmessage : + + + + iconGlossaryDialog + + + Icon Glossary + Glossaire des icônes + + + + You have no connections with other peers. + Vous n'avez aucune connexion avec d'autres pairs. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + Vous avez au moins une connexion sortante avec un pair mais vous n'avez encore reçu aucune connexion entrante. Votre pare-feu ou routeur n'est probablement pas configuré pour transmettre les connexions TCP vers votre ordinateur. Bitmessage fonctionnera correctement, mais le réseau Bitmessage se portera mieux si vous autorisez les connexions entrantes. Cela vous permettra d'être un nœud mieux connecté. + + + + You are using TCP port ?. (This can be changed in the settings). + Vous utilisez le port TCP ?. (Peut être changé dans les paramètres). + + + + You do have connections with other peers and your firewall is correctly configured. + Vous avez des connexions avec d'autres pairs et votre pare-feu est configuré correctement. + + + + newChanDialog + + + Dialog + + + + + Create a new chan + + + + + Join a chan + + + + + Create a chan + + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + + + + + Chan name: + + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + + + + + Chan bitmessage address: + + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + Regénérer des adresses existantes + + + + Regenerate existing addresses + Regénérer des adresses existantes + + + + Passphrase + Phrase secrète + + + + Number of addresses to make based on your passphrase: + Nombre d'adresses basées sur votre phrase secrète à créer : + + + + Address version Number: + Numéro de version de l'adresse : + + + + 3 + 3 + + + + Stream number: + Numéro du flux : + + + + 1 + 1 + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Créer une adresse plus courte d'un ou deux caractères (nécessite plusieurs minutes de temps de calcul supplémentaires) + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + Vous devez cocher (ou décocher) cette case comme vous l'aviez fait (ou non) lors de la création de vos adresses la première fois. + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + Si vous aviez généré des adresses déterministes mais les avez perdues à cause d'un accident, vous pouvez les regénérer ici. Si vous aviez utilisé le générateur de nombres aléatoires pour créer vos adresses, ce formulaire ne vous sera d'aucune utilité. + + + + settingsDialog + + + Settings + Paramètres + + + + Start Bitmessage on user login + Démarrer Bitmessage à la connexion de l'utilisateur + + + + Start Bitmessage in the tray (don't show main window) + Démarrer Bitmessage dans la barre des tâches (ne pas montrer la fenêtre principale) + + + + Minimize to tray + Minimiser dans la barre des tâches + + + + Show notification when message received + Montrer une notification lorsqu'un message est reçu + + + + Run in Portable Mode + Lancer en Mode Portable + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + En Mode Portable, les messages et les fichiers de configuration sont stockés dans le même dossier que le programme plutôt que le dossier de l'application. Cela rend l'utilisation de Bitmessage plus facile depuis une clé USB. + + + + User Interface + Interface utilisateur + + + + Listening port + Port d'écoute + + + + Listen for connections on port: + Écouter les connexions sur le port : + + + + Proxy server / Tor + Serveur proxy / Tor + + + + Type: + Type : + + + + none + aucun + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + Nom du serveur : + + + + Port: + Port : + + + + Authentication + Authentification + + + + Username: + Utilisateur : + + + + Pass: + Mot de passe : + + + + Network Settings + Paramètres réseau + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + Lorsque quelqu'un vous envoie un message, son ordinateur doit d'abord effectuer un travail. La difficulté de ce travail, par défaut, est de 1. Vous pouvez augmenter cette valeur pour les adresses que vous créez en changeant la valeur ici. Chaque nouvelle adresse que vous créez requerra à l'envoyeur de faire face à une difficulté supérieure. Il existe une exception : si vous ajoutez un ami ou une connaissance à votre carnet d'adresses, Bitmessage les notifiera automatiquement lors du prochain message que vous leur envoyez qu'ils ne doivent compléter que la charge de travail minimale : difficulté 1. + + + + Total difficulty: + Difficulté totale : + + + + Small message difficulty: + Difficulté d'un message court : + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + La 'difficulté d'un message court' affecte principalement la difficulté d'envoyer des messages courts. Doubler cette valeur rend la difficulté à envoyer un court message presque double, tandis qu'un message plus long ne sera pas réellement affecté. + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + La 'difficulté totale' affecte le montant total de travail que l'envoyeur devra compléter. Doubler cette valeur double la charge de travail. + + + + Demanded difficulty + Difficulté demandée + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + Vous pouvez préciser quelle charge de travail vous êtes prêt à effectuer afin d'envoyer un message à une personne. Placer cette valeur à 0 signifie que n'importe quelle valeur est acceptée. + + + + Maximum acceptable total difficulty: + Difficulté maximale acceptée : + + + + Maximum acceptable small message difficulty: + Difficulté maximale pour les messages courts acceptée : + + + + Max acceptable difficulty + Difficulté acceptée max + + + + Willingly include unencrypted destination address when sending to a mobile device + + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + + + + + Listen for incoming connections when using proxy + + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + + + + + Host: + + + + + Password: + + + + + Test + + + + + Connect to: + + + + + Namecoind + + + + + NMControl + + + + + Namecoin integration + + + + diff --git a/src/translations/bitmessage_ru.pro b/src/translations/bitmessage_ru.pro new file mode 100644 index 00000000..857fb2b8 --- /dev/null +++ b/src/translations/bitmessage_ru.pro @@ -0,0 +1,32 @@ +SOURCES = ../addresses.py\ + ../bitmessagemain.py\ + ../class_addressGenerator.py\ + ../class_outgoingSynSender.py\ + ../class_receiveDataThread.py\ + ../class_sendDataThread.py\ + ../class_singleCleaner.py\ + ../class_singleListener.py\ + ../class_singleWorker.py\ + ../class_sqlThread.py\ + ../helper_bitcoin.py\ + ../helper_bootstrap.py\ + ../helper_generic.py\ + ../helper_inbox.py\ + ../helper_sent.py\ + ../helper_startup.py\ + ../shared.py\ + ../bitmessageqt/__init__.py\ + ../bitmessageqt/about.py\ + ../bitmessageqt/bitmessageui.py\ + ../bitmessageqt/connect.py\ + ../bitmessageqt/help.py\ + ../bitmessageqt/iconglossary.py\ + ../bitmessageqt/newaddressdialog.py\ + ../bitmessageqt/newchandialog.py\ + ../bitmessageqt/newsubscriptiondialog.py\ + ../bitmessageqt/regenerateaddresses.py\ + ../bitmessageqt/settings.py\ + ../bitmessageqt/specialaddressbehavior.py + +TRANSLATIONS = bitmessage_ru.ts +CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_ru.qm b/src/translations/bitmessage_ru.qm new file mode 100644 index 0000000000000000000000000000000000000000..d997a6880e2d6b69cbfff47041ee586591877333 GIT binary patch literal 54843 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 literal 0 HcmV?d00001 diff --git a/src/translations/bitmessage_ru.ts b/src/translations/bitmessage_ru.ts new file mode 100644 index 00000000..7a4fe862 --- /dev/null +++ b/src/translations/bitmessage_ru.ts @@ -0,0 +1,1515 @@ + + + + MainWindow + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + Один из Ваших адресов, %1, является устаревшим адресом версии 1. Адреса версии 1 больше не поддерживаются. Хотите ли Вы удалить его сейчас? + + + + Reply + Ответить + + + + Add sender to your Address Book + Добавить отправителя в адресную книгу + + + + Move to Trash + Поместить в корзину + + + + View HTML code as formatted text + Просмотреть HTML код как отформатированный текст + + + + Save message as... + Сохранить сообщение как ... + + + + New + Новый адрес + + + + Enable + Включить + + + + Disable + Выключить + + + + Copy address to clipboard + Скопировать адрес в буфер обмена + + + + Special address behavior... + Особое поведение адресов... + + + + Send message to this address + Отправить сообщение на этот адрес + + + + Subscribe to this address + Подписаться на рассылку с этого адреса + + + + Add New Address + Добавить новый адрес + + + + Delete + Удалить + + + + Copy destination address to clipboard + Скопировать адрес отправки в буфер обмена + + + + Force send + Форсировать отправку + + + + Add new entry + Добавить новую запись + + + + Waiting on their encryption key. Will request it again soon. + Ожидаем ключ шифрования от Вашего собеседника. Запрос будет повторен через некоторое время. + + + + Encryption key request queued. + Запрос ключа шифрования поставлен в очередь. + + + + Queued. + В очереди. + + + + Message sent. Waiting on acknowledgement. Sent at %1 + Сообщение отправлено. Ожидаем подтверждения. Отправлено в %1 + + + + Need to do work to send message. Work is queued. + Нужно провести требуемые вычисления, чтобы отправить сообщение. Вычисления ожидают очереди. + + + + Acknowledgement of the message received %1 + Сообщение доставлено %1 + + + + Broadcast queued. + Рассылка ожидает очереди. + + + + Broadcast on %1 + Рассылка на %1 + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + Проблема: Ваш получатель требует более сложных вычислений, чем максимум, указанный в Ваших настройках. %1 + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + Проблема: ключ получателя неправильный. Невозможно зашифровать сообщение. %1 + + + + Forced difficulty override. Send should start soon. + Форсирована смена сложности. Отправляем через некоторое время. + + + + Unknown status: %1 %2 + Неизвестный статус: %1 %2 + + + + Since startup on %1 + С начала работы %1 + + + + Not Connected + Не соединено + + + + Show Bitmessage + Показать Bitmessage + + + + Send + Отправка + + + + Subscribe + Подписки + + + + Address Book + Адресная книга + + + + Quit + Выйти + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. +Создайте резервную копию этого файла перед тем как будете его редактировать. + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в + %1 +Создайте резервную копию этого файла перед тем как будете его редактировать. + + + + Open keys.dat? + Открыть файл keys.dat? + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. +Создайте резервную копию этого файла перед тем как будете его редактировать. Хотели бы Вы открыть этот файл сейчас? +(пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в + %1 +Создайте резервную копию этого файла перед тем как будете его редактировать. Хотели бы Вы открыть этот файл сейчас? +(пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) + + + + Delete trash? + Очистить корзину? + + + + Are you sure you want to delete all trashed messages? + Вы уверены, что хотите очистить корзину? + + + + bad passphrase + Неподходящая секретная фраза + + + + You must type your passphrase. If you don't have one then this is not the form for you. + Вы должны ввести секретную фразу. Если Вы не хотите это делать, то Вы выбрали неправильную опцию. + + + + Processed %1 person-to-person messages. + Обработано %1 сообщений. + + + + Processed %1 broadcast messages. + Обработано %1 рассылок. + + + + Processed %1 public keys. + Обработано %1 открытых ключей. + + + + Total Connections: %1 + Всего соединений: %1 + + + + Connection lost + Соединение потеряно + + + + Connected + Соединено + + + + Message trashed + Сообщение удалено + + + + Error: Bitmessage addresses start with BM- Please check %1 + Ошибка: Bitmessage адреса начинаются с BM- Пожалуйста, проверьте %1 + + + + Error: The address %1 is not typed or copied correctly. Please check it. + Ошибка: адрес %1 внесен или скопирован неправильно. Пожалуйста, перепроверьте. + + + + Error: The address %1 contains invalid characters. Please check it. + Ошибка: адрес %1 содержит запрещенные символы. Пожалуйста, перепроверьте. + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + Ошибка: версия адреса в %1 слишком новая. Либо Вам нужно обновить Bitmessage, либо Ваш собеседник дал неправильный адрес. + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + Ошибка: некоторые данные, закодированные в адресе %1, слишком короткие. Возможно, что-то не так с программой Вашего собеседника. + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + Ошибка: некоторые данные, закодированные в адресе %1, слишком длинные. Возможно, что-то не так с программой Вашего собеседника. + + + + Error: Something is wrong with the address %1. + Ошибка: что-то не так с адресом %1. + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + Вы должны указать адрес в поле "От кого". Вы можете найти Ваш адрес во вкладе "Ваши Адреса". + + + + Sending to your address + Отправка на Ваш собственный адрес + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + Ошибка: Один из адресов, на который Вы отправляете сообщение, %1, принадлежит Вам. К сожалению, Bitmessage не может отправлять сообщения самому себе. Попробуйте запустить второго клиента на другом компьютере или на виртуальной машине. + + + + Address version number + Версия адреса + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + По поводу адреса %1: Bitmessage не поддерживаем адреса версии %2. Возможно, Вам нужно обновить клиент Bitmessage. + + + + Stream number + Номер потока + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + По поводу адреса %1: Bitmessage не поддерживаем стрим номер %2. Возможно, Вам нужно обновить клиент Bitmessage. + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + Внимание: Вы не подключены к сети. Bitmessage проделает необходимые вычисления, чтобы отправить сообщение, но не отправит его до тех пор, пока Вы не подсоединитесь к сети. + + + + Your 'To' field is empty. + Вы не заполнили поле 'Кому'. + + + + Work is queued. + Вычисления поставлены в очередь. + + + + Right click one or more entries in your address book and select 'Send message to this address'. + Нажмите правую кнопку мышки на каком-либо адресе и выберите "Отправить сообщение на этот адрес". + + + + Work is queued. %1 + Вычисления поставлены в очередь. %1 + + + + New Message + Новое сообщение + + + + From + От + + + + Address is valid. + Адрес введен правильно. + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + Ошибка: Вы не можете добавлять один и тот же адрес в Адресную Книгу несколько раз. Просто переименуйте существующий адрес. + + + + The address you entered was invalid. Ignoring it. + Вы ввели неправильный адрес. Это адрес проигнорирован. + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + Ошибка: Вы не можете добавлять один и тот же адрес в подписку несколько раз. Просто переименуйте существующую подписку. + + + + Restart + Перезапустить + + + + You must restart Bitmessage for the port number change to take effect. + Вы должны перезапустить Bitmessage, чтобы смена номера порта имела эффект. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. + Bitmessage будет использовать Ваш прокси в дальнейшем, тем не менее, мы рекомендуем перезапустить Bitmessage в ручную, чтобы закрыть уже существующие соединения. + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + Ошибка: Вы не можете добавлять один и тот же адрес в список несколько раз. Просто переименуйте существующий адрес. + + + + Passphrase mismatch + Секретная фраза не подходит + + + + The passphrase you entered twice doesn't match. Try again. + Вы ввели две разные секретные фразы. Пожалуйста, повторите заново. + + + + Choose a passphrase + Придумайте секретную фразу + + + + You really do need a passphrase. + Вы действительно должны ввести секретную фразу. + + + + All done. Closing user interface... + Программа завершена. Закрываем пользовательский интерфейс... + + + + Address is gone + Адрес утерян + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + Bitmessage не может найти Ваш адрес %1. Возможно Вы удалили его? + + + + Address disabled + Адрес выключен + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + Ошибка: адрес, с которого Вы пытаетесь отправить, выключен. Вам нужно будет включить этот адрес во вкладке "Ваши адреса". + + + + Entry added to the Address Book. Edit the label to your liking. + Запись добавлена в Адресную Книгу. Вы можете ее отредактировать. + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + Удалено в корзину. Чтобы попасть в корзину, Вам нужно будет найти файл корзины на диске. + + + + Save As... + Сохранить как ... + + + + Write error. + Ошибка записи. + + + + No addresses selected. + Вы не выбрали адрес. + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + Опции были отключены, потому что ли они либо не подходят, либо еще не выполнены под Вашу операционную систему. + + + + The address should start with ''BM-'' + Адрес должен начинаться с "BM-" + + + + The address is not typed or copied correctly (the checksum failed). + Адрес введен или скопирован неверно (контрольная сумма не сходится). + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + Версия этого адреса более поздняя, чем Ваша программа. Пожалуйста, обновите программу Bitmessage. + + + + The address contains invalid characters. + Адрес содержит запрещенные символы. + + + + Some data encoded in the address is too short. + Данные, закодированные в адресе, слишком короткие. + + + + Some data encoded in the address is too long. + Данные, закодированные в адресе, слишком длинные. + + + + You are using TCP port %1. (This can be changed in the settings). + Вы используете TCP порт %1 (Его можно поменять в настройках). + + + + Bitmessage + Bitmessage + + + + To + Кому + + + + From + От кого + + + + Subject + Тема + + + + Received + Получено + + + + Inbox + Входящие + + + + Load from Address book + Взять из адресной книги + + + + Message: + Сообщение: + + + + Subject: + Тема: + + + + Send to one or more specific people + Отправить одному или нескольким указанным получателям + + + + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + To: + Кому: + + + + From: + От: + + + + Broadcast to everyone who is subscribed to your address + Рассылка всем, кто подписался на Ваш адрес + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + Пожалуйста, учитывайте, что рассылки шифруются лишь Вашим адресом. Любой человек, который знает Ваш адрес, сможет прочитать Вашу рассылку. + + + + Status + Статус + + + + Sent + Отправленные + + + + Label (not shown to anyone) + Название (не показывается никому) + + + + Address + Адрес + + + + Stream + Поток + + + + Your Identities + Ваши Адреса + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + Здесь Вы можете подписаться на рассылки от других пользователей. Все рассылки будут появляться у Вас во Входящих. Вы будете следить за всеми адресами, указанными здесь, даже если они в черном списке. + + + + Add new Subscription + Добавить новую подписку + + + + Label + Название + + + + Subscriptions + Подписки + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + Адресная книга удобна для присвоения осмысленных имен Bitmessage адресам Ваших друзей. Вы можете добавлять новые записи с помощью кнопки "Добавить новую запись", или же правым кликом мышки на сообщении. + + + + Name or Label + Название + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + Использовать черный список (Разрешить все входящие сообщения, кроме указанных в черном списке) + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + Использовать белый список (блокировать все входящие сообщения, кроме указанных в белом списке) + + + + Blacklist + Черный список + + + + Stream # + № потока + + + + Connections + Соединений + + + + Total connections: 0 + Всего соединений: 0 + + + + Since startup at asdf: + С начала работы программы в asdf: + + + + Processed 0 person-to-person message. + Обработано 0 сообщений. + + + + Processed 0 public key. + Обработано 0 открытых ключей. + + + + Processed 0 broadcast. + Обработано 0 рассылок. + + + + Network Status + Статус сети + + + + File + Файл + + + + Settings + Настройки + + + + Help + Помощь + + + + Import keys + Импортировать ключи + + + + Manage keys + Управлять ключами + + + + About + О программе + + + + Regenerate deterministic addresses + Сгенерировать заново все адреса + + + + Delete all trashed messages + Стереть все сообщения из корзины + + + + Message sent. Sent at %1 + Сообщение отправлено в %1 + + + + Chan name needed + Требуется имя chan-а + + + + You didn't enter a chan name. + Вы не ввели имя chan-a. + + + + Address already present + Адрес уже существует + + + + Could not add chan because it appears to already be one of your identities. + Не могу добавить chan, потому что это один из Ваших уже существующих адресов. + + + + Success + Отлично + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + Chan был успешно создан. Чтобы добавить других в сhan, сообщите им имя chan-а и этот Bitmessage адрес: %1. Этот адрес также отображается во вкладке "Ваши Адреса". + + + + Address too new + Адрес слишком новый + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + Этот Bitmessage адрес похож на правильный, но его версия этого адреса слишком новая. Возможно, Вам необходимо обновить программу Bitmessage. + + + + Address invalid + Неправильный адрес + + + + That Bitmessage address is not valid. + Этот Bitmessage адрес введен неправильно. + + + + Address does not match chan name + Адрес не сходится с именем chan-а + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + Вы ввели верный адрес Bitmessage, но он не сходится с именем chan-а. + + + + Successfully joined chan. + Успешно присоединились к chan-у. + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + Bitmessage будет использовать Ваш прокси, начиная прямо сейчас. Тем не менее Вам имеет смысл перезапустить Bitmessage, чтобы закрыть уже существующие соединения. + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + Это адрес chan-а. Вы не можете его использовать как адрес рассылки. + + + + Search + Поиск + + + + All + Всем + + + + Message + Текст сообщения + + + + Join / Create chan + Подсоединиться или создать chan + + + + Mark Unread + + + + + Fetched address from namecoin identity. + + + + + Testing... + + + + + Fetch Namecoin ID + + + + + Ctrl+Q + + + + + F1 + + + + + NewAddressDialog + + + Create new Address + Создать новый адрес + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + Здесь Вы сможете сгенерировать столько адресов сколько хотите. На самом деле, создание и выкидывание адресов даже поощряется. Вы можете сгенерировать адреса используя либо генератор случайных чисел либо придумав секретную фразу. Если Вы используете секретную фразу, то адреса будут называться "детерминистическими". Генератор случайных чисел выбран по умолчанию, однако детерминистические адреса имеют следующие плюсы и минусы по сравнению с ними: + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Плюсы:<br/></span>Вы сможете восстановить адрес по памяти на любом компьютере<br/>Вам не нужно беспокоиться о сохранении файла keys.dat, если Вы запомнили секретную фразу<br/><span style=" font-weight:600;">Минусы:<br/></span>Вы должны запомнить (или записать) секретную фразу, если Вы хотите когда-либо восстановить Ваш адрес на другом компьютере <br/>Вы должны также запомнить версию адреса и номер потока вместе с секретной фразой<br/>Если Вы выберите слишком короткую секретную фразу, кто-нибудь в интернете сможет подобрать ключ и, как следствие, читать и отправлять от Вашего имени сообщения.</p></body></html> + + + + Use a random number generator to make an address + Использовать генератор случайных чисел для создания адреса + + + + Use a passphrase to make addresses + Использовать секретную фразу для создания адресов + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Потратить несколько лишних минут, чтобы сделать адрес(а) короче на 1 или 2 символа + + + + Make deterministic addresses + Создать детерминистический адрес + + + + Address version number: 3 + Версия адреса: 3 + + + + In addition to your passphrase, you must remember these numbers: + В дополнение к секретной фразе, Вам необходимо запомнить эти числа: + + + + Passphrase + Придумайте секретную фразу + + + + Number of addresses to make based on your passphrase: + Кол-во адресов, которые Вы хотите получить из секретной фразы: + + + + Stream number: 1 + Номер потока: 1 + + + + Retype passphrase + Повторите секретную фразу + + + + Randomly generate address + Сгенерировать случайный адрес + + + + Label (not shown to anyone except you) + Название (не показывается никому кроме Вас) + + + + Use the most available stream + Использовать наиболее доступный поток + + + + (best if this is the first of many addresses you will create) + (выберите этот вариант, если это лишь первый из многих адресов, которые Вы планируете создать) + + + + Use the same stream as an existing address + Использовать тот же поток, что и указанный существующий адрес + + + + (saves you some bandwidth and processing power) + (немного сэкономит Вам пропускную способность сети и вычислительную мощь) + + + + NewChanDialog + + + Dialog + Новый chan + + + + Create a new chan + Создать новый chan + + + + Join a chan + Присоединиться к chan + + + + <html><head/><body><p>A chan is a set of encryption keys that is shared by a group of people. The keys and bitmessage address used by a chan is generated from a human-friendly word or phrase (the chan name).</p><p>Chans are experimental and are unmoderatable.</p></body></html> + <html><head/><body><p>Chan - это набор ключей шифрования, которые известны некоторой группе людей. Ключи и Bitmessage-адрес используемый chan-ом генерируется из слова или фразы (имя chan-а).</p><p>Chan-ы - это экспериментальная новинка.</p></body></html> + + + + Chan name: + Имя chan: + + + + Chan bitmessage address: + Bitmessage адрес chan: + + + + Create a chan + Создать chan + + + + Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. + Введите имя Вашего chan-a. Если Вы выберете достаточно сложное имя для chan-а (например, сложную и необычную секретную фразу) и никто из Ваших друзей не опубликует эту фразу, то Вам chan будет надежно зашифрован. + + + + NewSubscriptionDialog + + + Add new entry + Добавить новую запись + + + + Label + Название + + + + Address + Адрес + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + Особое поведение адреса + + + + Behave as a normal address + Вести себя как обычный адрес + + + + Behave as a pseudo-mailing-list address + Вести себя как адрес псевдо-рассылки + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + Почта, полученная на адрес псевдо-рассылки, будет автоматически разослана всем подписчикам (и поэтому будет доступна общей публике). + + + + Name of the pseudo-mailing-list: + Имя псевдо-рассылки: + + + + aboutDialog + + + About + О программе + + + + PyBitmessage + PyBitmessage + + + + version ? + версия ? + + + + Copyright © 2013 Jonathan Warren + Копирайт © 2013 Джонатан Уоррен + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + <html><head/><body><p>Программа распространяется в соответствии с лицензией MIT/X11; см. <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + This is Beta software. + Это бета версия программы. + + + + connectDialog + + + Bitmessage + Bitmessage + + + + Bitmessage won't connect to anyone until you let it. + + + + + Connect now + + + + + Let me configure special network settings first + + + + + helpDialog + + + Help + Помощь + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Bitmessage - общественный проект. Вы можете найти подсказки и советы на Wiki-страничке Bitmessage: + + + + iconGlossaryDialog + + + Icon Glossary + Описание значков + + + + You have no connections with other peers. + Нет соединения с другими участниками сети. + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + На текущий момент Вы установили по-крайней мере одно исходящее соединение, но пока ни одного входящего. Ваш файрвол или маршрутизатор скорее всего не настроен на переброс входящих TCP соединений к Вашему компьютеру. Bitmessage будет прекрасно работать и без этого, но Вы могли бы помочь сети если бы разрешили и входящие соединения тоже. Это помогло бы Вам стать более важным узлом сети. + + + + You are using TCP port ?. (This can be changed in the settings). + Вы используете TCP порт ?. (Его можно поменять в настройках). + + + + You do have connections with other peers and your firewall is correctly configured. + Вы установили соединение с другими участниками сети и ваш файрвол настроен правильно. + + + + newChanDialog + + + Dialog + Новый chan + + + + Create a new chan + Создать новый chan + + + + Join a chan + Присоединиться к chan + + + + Create a chan + Создать chan + + + + Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. + Введите имя Вашего chan-a. Если Вы выберете достаточно сложное имя для chan-а (например, сложную и необычную секретную фразу) и никто из Ваших друзей не опубликует эту фразу, то Вам chan будет надежно зашифрован. + + + + Chan name: + Имя chan: + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + <html><head/><body><p>Chan - это способ общения, когда набор ключей шифрования известен сразу целой группе людей. Ключи и Bitmessage-адрес, используемый chan-ом, генерируется из слова или фразы (имя chan-а). Чтобы отправить сообщение всем, находящимся в chan-е, отправьте обычное приватное сообщения на адрес chan-a.</p><p>Chan-ы - это экспериментальная фича.</p></body></html> + + + + Chan bitmessage address: + Bitmessage адрес chan: + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + Сгенерировать заново существующие адреса + + + + Regenerate existing addresses + Сгенерировать заново существующие адреса + + + + Passphrase + Секретная фраза + + + + Number of addresses to make based on your passphrase: + Кол-во адресов, которые Вы хотите получить из Вашей секретной фразы: + + + + Address version Number: + Версия адреса: + + + + 3 + 3 + + + + Stream number: + Номер потока: + + + + 1 + 1 + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + Потратить несколько лишних минут, чтобы сделать адрес(а) короче на 1 или 2 символа + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + Вы должны кликнуть эту галочку (или не кликать) точно также как Вы сделали в самый первый раз, когда создавали Ваши адреса. + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + Если Вы ранее делали детерминистические адреса, но случайно потеряли их, Вы можете их восстановить здесь. Если же Вы использовали генератор случайных чисел, чтобы создать Ваши адреса, то Вы не сможете их здесь восстановить. + + + + settingsDialog + + + Settings + Настройки + + + + Start Bitmessage on user login + Запускать Bitmessage при входе в систему + + + + Start Bitmessage in the tray (don't show main window) + Запускать Bitmessage в свернутом виде (не показывать главное окно) + + + + Minimize to tray + Сворачивать в трей + + + + Show notification when message received + Показывать уведомления при получении новых сообщений + + + + Run in Portable Mode + Запустить в переносном режиме + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + В переносном режиме, все сообщения и конфигурационные файлы сохраняются в той же самой папке что и сама программа. Это делает более удобным использование Bitmessage с USB-флэшки. + + + + User Interface + Пользовательские + + + + Listening port + Порт прослушивания + + + + Listen for connections on port: + Прослушивать соединения на порту: + + + + Proxy server / Tor + Прокси сервер / Tor + + + + Type: + Тип: + + + + none + отсутствует + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + Адрес сервера: + + + + Port: + Порт: + + + + Authentication + Авторизация + + + + Username: + Имя пользователя: + + + + Pass: + Прль: + + + + Network Settings + Сетевые настройки + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + Когда кто-либо отправляет Вам сообщение, его компьютер должен сперва решить определенную вычислительную задачу. Сложность этой задачи по умолчанию равна 1. Вы можете повысить эту сложность для новых адресов, которые Вы создадите, здесь. Таким образом, любые новые адреса, которые Вы создадите, могут требовать от отправителей сложность большую чем 1. Однако, есть одно исключение: если Вы специально добавите Вашего собеседника в адресную книгу, то Bitmessage автоматически уведомит его о том, что для него минимальная сложность будет составлять всегда всего лишь 1. + + + + Total difficulty: + Общая сложность: + + + + Small message difficulty: + Сложность для маленьких сообщений: + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + "Сложность для маленьких сообщений" влияет исключительно на небольшие сообщения. Увеличив это число в два раза, вы сделаете отправку маленьких сообщений в два раза сложнее, в то время как сложность отправки больших сообщений не изменится. + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + "Общая сложность" влияет на абсолютное количество вычислений, которые отправитель должен провести, чтобы отправить сообщение. Увеличив это число в два раза, вы увеличите в два раза объем требуемых вычислений. + + + + Demanded difficulty + Требуемая сложность + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + Здесь Вы можете установить максимальную вычислительную работу, которую Вы согласны проделать, чтобы отправить сообщение другому пользователю. Ноль означает, чтобы любое значение допустимо. + + + + Maximum acceptable total difficulty: + Макс допустимая общая сложность: + + + + Maximum acceptable small message difficulty: + Макс допустимая сложность для маленький сообщений: + + + + Max acceptable difficulty + Макс допустимая сложность + + + + Listen for incoming connections when using proxy + Прослушивать входящие соединения если используется прокси + + + + Willingly include unencrypted destination address when sending to a mobile device + + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + + + + + Host: + + + + + Password: + + + + + Test + + + + + Connect to: + + + + + Namecoind + + + + + NMControl + + + + + Namecoin integration + + + + From 6f3684ec1f40e9d254dc96be7cc608e7c1ff2f78 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Wed, 21 Aug 2013 16:50:17 +0200 Subject: [PATCH 32/50] Translation cleanup. Added Esperanto (partial) and Pirate (by Dokument). --- src/translations/bitmessage_de.pro | 1 + src/translations/bitmessage_de.qm | Bin 61770 -> 61772 bytes src/translations/bitmessage_de.ts | 10 +- src/translations/bitmessage_de_DE.pro | 33 - src/translations/bitmessage_de_DE.qm | Bin 61770 -> 0 bytes src/translations/bitmessage_de_DE.ts | 1487 --------------------- src/translations/bitmessage_en_pirate.pro | 1 + src/translations/bitmessage_en_pirate.qm | Bin 17338 -> 17397 bytes src/translations/bitmessage_en_pirate.ts | 8 +- src/translations/bitmessage_eo.pro | 1 + src/translations/bitmessage_eo.qm | Bin 42299 -> 42295 bytes src/translations/bitmessage_eo.ts | 4 +- src/translations/bitmessage_fr.pro | 1 + src/translations/bitmessage_fr.qm | Bin 49403 -> 49460 bytes src/translations/bitmessage_fr.ts | 8 +- src/translations/bitmessage_fr_BE.pro | 33 - src/translations/bitmessage_fr_BE.qm | Bin 53106 -> 0 bytes src/translations/bitmessage_fr_BE.ts | 1290 ------------------ src/translations/bitmessage_ru.pro | 1 + src/translations/bitmessage_ru.qm | Bin 54843 -> 54915 bytes src/translations/bitmessage_ru.ts | 9 +- src/translations/bitmessage_ru_RU.pro | 30 - src/translations/bitmessage_ru_RU.qm | Bin 55434 -> 0 bytes src/translations/bitmessage_ru_RU.ts | 1407 ------------------- 24 files changed, 29 insertions(+), 4295 deletions(-) delete mode 100644 src/translations/bitmessage_de_DE.pro delete mode 100644 src/translations/bitmessage_de_DE.qm delete mode 100644 src/translations/bitmessage_de_DE.ts delete mode 100644 src/translations/bitmessage_fr_BE.pro delete mode 100644 src/translations/bitmessage_fr_BE.qm delete mode 100644 src/translations/bitmessage_fr_BE.ts delete mode 100644 src/translations/bitmessage_ru_RU.pro delete mode 100644 src/translations/bitmessage_ru_RU.qm delete mode 100644 src/translations/bitmessage_ru_RU.ts diff --git a/src/translations/bitmessage_de.pro b/src/translations/bitmessage_de.pro index 3bbafcfd..1e8fe836 100644 --- a/src/translations/bitmessage_de.pro +++ b/src/translations/bitmessage_de.pro @@ -28,5 +28,6 @@ SOURCES = ../addresses.py\ ../bitmessageqt/settings.py\ ../bitmessageqt/specialaddressbehavior.py + TRANSLATIONS = bitmessage_de.ts CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_de.qm b/src/translations/bitmessage_de.qm index c4dec53e370cd279856f83fb9ee1af7eae652ffc..a81aaaba2c6772bd8f55fa65adf6efa4cf79b438 100644 GIT binary patch delta 2283 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 mYoko>_H(`)*U - + + MainWindow @@ -10,12 +11,13 @@ Reply + . Antworten Add sender to your Address Book - Absender zum Adressbuch hinzufügen + Absender zum Adressbuch hinzufügen. @@ -918,7 +920,7 @@ p, li { white-space: pre-wrap; } Ctrl+Q - Strg+Q + Strg+Q @@ -1089,7 +1091,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei version ? Version ? - + Copyright © 2013 Jonathan Warren Copyright © 2013 Jonathan Warren diff --git a/src/translations/bitmessage_de_DE.pro b/src/translations/bitmessage_de_DE.pro deleted file mode 100644 index 7590dca3..00000000 --- a/src/translations/bitmessage_de_DE.pro +++ /dev/null @@ -1,33 +0,0 @@ -SOURCES = ../addresses.py\ - ../bitmessagemain.py\ - ../class_addressGenerator.py\ - ../class_outgoingSynSender.py\ - ../class_receiveDataThread.py\ - ../class_sendDataThread.py\ - ../class_singleCleaner.py\ - ../class_singleListener.py\ - ../class_singleWorker.py\ - ../class_sqlThread.py\ - ../helper_bitcoin.py\ - ../helper_bootstrap.py\ - ../helper_generic.py\ - ../helper_inbox.py\ - ../helper_sent.py\ - ../helper_startup.py\ - ../shared.py - ../bitmessageqt/__init__.py\ - ../bitmessageqt/about.py\ - ../bitmessageqt/bitmessageui.py\ - ../bitmessageqt/connect.py\ - ../bitmessageqt/help.py\ - ../bitmessageqt/iconglossary.py\ - ../bitmessageqt/newaddressdialog.py\ - ../bitmessageqt/newchandialog.py\ - ../bitmessageqt/newsubscriptiondialog.py\ - ../bitmessageqt/regenerateaddresses.py\ - ../bitmessageqt/settings.py\ - ../bitmessageqt/specialaddressbehavior.py - - -TRANSLATIONS = bitmessage_de_DE.ts -CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_de_DE.qm b/src/translations/bitmessage_de_DE.qm deleted file mode 100644 index c4dec53e370cd279856f83fb9ee1af7eae652ffc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61770 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 - - - - MainWindow - - - One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? - Eine Ihrer Adressen, %1, ist eine alte Version 1 Adresse. Version 1 Adressen werden nicht mehr unterstützt. Soll sie jetzt gelöscht werden? - - - - Reply - Antworten - - - - Add sender to your Address Book - Absender zum Adressbuch hinzufügen - - - - Move to Trash - In den Papierkorb verschieben - - - - View HTML code as formatted text - HTML als formatierten Text anzeigen - - - - Save message as... - Nachricht speichern unter... - - - - New - Neu - - - - Enable - Aktivieren - - - - Disable - Deaktivieren - - - - Copy address to clipboard - Adresse in die Zwischenablage kopieren - - - - Special address behavior... - Spezielles Verhalten der Adresse... - - - - Send message to this address - Nachricht an diese Adresse senden - - - - Subscribe to this address - Diese Adresse abonnieren - - - - Add New Address - Neue Adresse hinzufügen - - - - Delete - Löschen - - - - Copy destination address to clipboard - Zieladresse in die Zwischenablage kopieren - - - - Force send - Senden erzwingen - - - - Add new entry - Neuen Eintrag erstellen - - - - Waiting on their encryption key. Will request it again soon. - Warte auf den Verschlüsselungscode. Wird bald erneut angefordert. - - - - Encryption key request queued. - Verschlüsselungscode Anforderung steht aus. - - - - Queued. - In Warteschlange. - - - - Message sent. Waiting on acknowledgement. Sent at %1 - Nachricht gesendet. Warten auf Bestätigung. Gesendet %1 - - - - Need to do work to send message. Work is queued. - Es muss Arbeit verrichtet werden um die Nachricht zu versenden. Arbeit ist in Warteschlange. - - - - Acknowledgement of the message received %1 - Bestätigung der Nachricht erhalten %1 - - - - Broadcast queued. - Rundruf in Warteschlange. - - - - Broadcast on %1 - Rundruf um %1 - - - - Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 - Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind zu berechnen. %1 - - - - Problem: The recipient's encryption key is no good. Could not encrypt message. %1 - Problem: Der Verschlüsselungscode des Empfängers ist nicht in Ordnung. Nachricht konnte nicht verschlüsselt werden. %1 - - - - Forced difficulty override. Send should start soon. - Schwierigkeitslimit überschrieben. Senden sollte bald beginnen. - - - - Unknown status: %1 %2 - Unbekannter Status: %1 %2 - - - - Since startup on %1 - Seit Start der Anwendung am %1 - - - - Not Connected - Nicht verbunden - - - - Show Bitmessage - Bitmessage anzeigen - - - - Send - Senden - - - - Subscribe - Abonnieren - - - - Address Book - Adressbuch - - - - Quit - Schließen - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. - Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im gleichen Ordner wie das Programm liegt. Es ist wichtig, dass Sie diese Datei sichern. - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. - Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im Ordner -%1 liegt. -Es ist wichtig, dass Sie diese Datei sichern. - - - - Open keys.dat? - Datei keys.dat öffnen? - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, die im gleichen Ordner wie das Programm liegt. Es ist wichtig, dass Sie diese Datei sichern. Möchten Sie die Datei jetzt öffnen? (Stellen Sie sicher, dass Bitmessage geschlossen ist, bevor Sie etwas ändern.) - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat Datei bearbeiten, -die im Ordner %1 liegt. -Es ist wichtig, dass Sie diese Datei sichern. Möchten Sie die datei jetzt öffnen? -(Stellen Sie sicher, dass Bitmessage geschlossen ist, bevor Sie etwas ändern.) - - - - Delete trash? - Papierkorb leeren? - - - - Are you sure you want to delete all trashed messages? - Sind Sie sicher, dass Sie alle Nachrichten im Papierkorb löschen möchten? - - - - bad passphrase - Falscher Passwort-Satz - - - - You must type your passphrase. If you don't have one then this is not the form for you. - Sie müssen Ihren Passwort-Satz eingeben. Wenn Sie keinen haben, ist dies das falsche Formular für Sie. - - - - Processed %1 person-to-person messages. - %1 Person-zu-Person-Nachrichten bearbeitet. - - - - Processed %1 broadcast messages. - %1 Rundruf-Nachrichten bearbeitet. - - - - Processed %1 public keys. - %1 öffentliche Schlüssel bearbeitet. - - - - Total Connections: %1 - Verbindungen insgesamt: %1 - - - - Connection lost - Verbindung verloren - - - - Connected - Verbunden - - - - Message trashed - Nachricht in den Papierkorb verschoben - - - - Error: Bitmessage addresses start with BM- Please check %1 - Fehler: Bitmessage Adressen starten mit BM- Bitte überprüfen Sie %1 - - - - Error: The address %1 is not typed or copied correctly. Please check it. - Fehler: Die Adresse %1 wurde nicht korrekt getippt oder kopiert. Bitte überprüfen. - - - - Error: The address %1 contains invalid characters. Please check it. - Fehler: Die Adresse %1 beinhaltet ungültig Zeichen. Bitte überprüfen. - - - - Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. - Fehler: Die Adressversion von %1 ist zu hoch. Entweder Sie müssen Ihre Bitmessage Software aktualisieren oder Ihr Bekannter ist sehr clever. - - - - Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. - Fehler: Einige Daten die in der Adresse %1 codiert sind, sind zu kurz. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt. - - - - Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. - Fehler: Einige Daten die in der Adresse %1 codiert sind, sind zu lang. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt. - - - - Error: Something is wrong with the address %1. - Fehler: Mit der Adresse %1 stimmt etwas nicht. - - - - Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. - Fehler: Sie müssen eine Absenderadresse auswählen. Sollten Sie keine haben, wechseln Sie zum Reiter "Ihre Identitäten". - - - - Sending to your address - Sende zu Ihrer Adresse - - - - Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. - Fehler: Eine der Adressen an die Sie eine Nachricht schreiben (%1) ist Ihre. Leider kann die Bitmessage Software ihre eigenen Nachrichten nicht verarbeiten. Bitte verwenden Sie einen zweite Installation auf einem anderen Computer oder in einer VM. - - - - Address version number - Adressversion - - - - Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. - Bezüglich der Adresse %1, Bitmessage kann Adressen mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren. - - - - Stream number - Datenstrom Nummer - - - - Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. - Bezüglich der Adresse %1, Bitmessage kann den Datenstrom mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren. - - - - Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. - Warnung: Sie sind aktuell nicht verbunden. Bitmessage wird die nötige Arbeit zum versenden verrichten, aber erst senden, wenn Sie verbunden sind. - - - - Your 'To' field is empty. - Ihr "Empfänger"-Feld ist leer. - - - - Work is queued. - Arbeit in Warteschlange. - - - - Right click one or more entries in your address book and select 'Send message to this address'. - Klicken Sie mit rechts auf eine oder mehrere Einträge aus Ihrem Adressbuch und wählen Sie "Nachricht an diese Adresse senden". - - - - Work is queued. %1 - Arbeit in Warteschlange. %1 - - - - New Message - Neue Nachricht - - - - From - Von - - - - Address is valid. - Adresse ist gültig. - - - - Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. - Fehler: Sie können eine Adresse nicht doppelt im Adressbuch speichern. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. - - - - The address you entered was invalid. Ignoring it. - Die von Ihnen eingegebene Adresse ist ungültig, sie wird ignoriert. - - - - Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. - Fehler: Sie können eine Adresse nicht doppelt abonnieren. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. - - - - Restart - Neustart - - - - You must restart Bitmessage for the port number change to take effect. - Sie müssen Bitmessage neu starten, um den geänderten Port zu verwenden. - - - - Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. - Bitmessage wird den Proxy-Server ab jetzt verwenden, möglicherweise möchten Sie Bitmessage neu starten um bestehende Verbindungen zu schließen. - - - - Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. - Fehler: Sie können eine Adresse nicht doppelt zur Liste hinzufügen. Wenn Sie möchten, benennen Sie den existierenden Eintrag um. - - - - Passphrase mismatch - Kennwortsatz nicht identisch - - - - The passphrase you entered twice doesn't match. Try again. - Die von Ihnen eingegebenen Kennwortsätze sind nicht identisch. Bitte neu versuchen. - - - - Choose a passphrase - Wählen Sie einen Kennwortsatz - - - - You really do need a passphrase. - Sie benötigen wirklich einen Kennwortsatz. - - - - All done. Closing user interface... - Alles fertig. Benutzer interface wird geschlossen... - - - - Address is gone - Adresse ist verloren - - - - Bitmessage cannot find your address %1. Perhaps you removed it? - Bitmassage kann Ihre Adresse %1 nicht finden. Haben Sie sie gelöscht? - - - - Address disabled - Adresse deaktiviert - - - - Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. - Fehler: Die Adresse von der Sie versuchen zu senden ist deaktiviert. Sie müssen sie unter dem Reiter "Ihre Identitäten" aktivieren bevor Sie fortfahren. - - - - Entry added to the Address Book. Edit the label to your liking. - Eintrag dem Adressbuch hinzugefügt. Editieren Sie den Eintrag nach Belieben. - - - - Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. - Objekt in den Papierkorb verschoben. Es gibt kein Benutzerinterface für den Papierkorb, aber die Daten sind noch auf Ihrer Festplatte wenn Sie sie wirklich benötigen. - - - - Save As... - Speichern unter... - - - - Write error. - Fehler beim speichern. - - - - No addresses selected. - Keine Adresse ausgewählt. - - - - Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. - -Optionen wurden deaktiviert, da sie für Ihr Betriebssystem nicht relevant, oder noch nicht implementiert sind. - - - - The address should start with ''BM-'' - Die Adresse sollte mit "BM-" beginnen - - - - The address is not typed or copied correctly (the checksum failed). - Die Adresse wurde nicht korrekt getippt oder kopiert (Prüfsumme falsch). - - - - The version number of this address is higher than this software can support. Please upgrade Bitmessage. - Die Versionsnummer dieser Adresse ist höher als diese Software unterstützt. Bitte installieren Sie die neuste Bitmessage Version. - - - - The address contains invalid characters. - Diese Adresse beinhaltet ungültige Zeichen. - - - - Some data encoded in the address is too short. - Die in der Adresse codierten Daten sind zu kurz. - - - - Some data encoded in the address is too long. - Die in der Adresse codierten Daten sind zu lang. - - - - You are using TCP port %1. (This can be changed in the settings). - Sie benutzen TCP-Port %1 (Dieser kann in den Einstellungen verändert werden). - - - - Bitmessage - Bitmessage - - - - To - An - - - - From - Von - - - - Subject - Betreff - - - - Received - Erhalten - - - - Inbox - Posteingang - - - - Load from Address book - Aus Adressbuch wählen - - - - Message: - Nachricht: - - - - Subject: - Betreff: - - - - Send to one or more specific people - Nachricht an eine oder mehrere spezifische Personen - - - - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - To: - An: - - - - From: - Von: - - - - Broadcast to everyone who is subscribed to your address - Rundruf an jeden, der Ihre Adresse abonniert hat - - - - Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. - Beachten Sie, dass Rudrufe nur mit Ihrer Adresse verschlüsselt werden. Jeder, der Ihre Adresse kennt, kann diese Nachrichten lesen. - - - - Status - Status - - - - Sent - Gesendet - - - - Label (not shown to anyone) - Bezeichnung (wird niemandem gezeigt) - - - - Address - Adresse - - - - Stream - Datenstrom - - - - Your Identities - Ihre Identitäten - - - - Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. - Hier können Sie "Rundruf Nachrichten" abonnieren, die von anderen Benutzern versendet werden. Die Nachrichten tauchen in Ihrem Posteingang auf. (Die Adressen hier überschreiben die auf der Blacklist). - - - - Add new Subscription - Neues Abonnement anlegen - - - - Label - Bezeichnung - - - - Subscriptions - Abonnements - - - - The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. - Das Adressbuch ist nützlich um die Bitmessage-Adressen anderer Personen Namen oder Beschreibungen zuzuordnen, so dass Sie sie einfacher im Posteingang erkennen können. Sie können Adressen über "Hinzufügen" eintragen, oder über einen Rechtsklick auf eine Nachricht im Posteingang. - - - - Name or Label - Name oder Bezeichnung - - - - Use a Blacklist (Allow all incoming messages except those on the Blacklist) - Liste als Blacklist verwenden (Erlaubt alle eingehenden Nachrichten, außer von Adressen auf der Blacklist) - - - - Use a Whitelist (Block all incoming messages except those on the Whitelist) - Liste als Whitelist verwenden (Erlaubt keine eingehenden Nachrichten, außer von Adressen auf der Whitelist) - - - - Blacklist - Blacklist - - - - Stream # - Datenstrom # - - - - Connections - Verbindungen - - - - Total connections: 0 - Verbindungen insgesamt: 0 - - - - Since startup at asdf: - Seit start um asdf: - - - - Processed 0 person-to-person message. - 0 Person-zu-Person-Nachrichten verarbeitet. - - - - Processed 0 public key. - 0 öffentliche Schlüssel verarbeitet. - - - - Processed 0 broadcast. - 0 Rundrufe verarbeitet. - - - - Network Status - Netzwerk status - - - - File - Datei - - - - Settings - Einstellungen - - - - Help - Hilfe - - - - Import keys - Schlüssel importieren - - - - Manage keys - Schlüssel verwalten - - - - About - Über - - - - Regenerate deterministic addresses - Deterministische Adressen neu generieren - - - - Delete all trashed messages - Alle Nachrichten im Papierkorb löschen - - - - Message sent. Sent at %1 - Nachricht gesendet. gesendet am %1 - - - - Chan name needed - Chan name benötigt - - - - You didn't enter a chan name. - Sie haben keinen Chan-Namen eingegeben. - - - - Address already present - Adresse bereits vorhanden - - - - Could not add chan because it appears to already be one of your identities. - Chan konnte nicht erstellt werden, da es sich bereits um eine Ihrer Identitäten handelt. - - - - Success - Erfolgreich - - - - Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. - Chan erfolgreich erstellt. Um andere diesem Chan beitreten zu lassen, geben Sie ihnen den Chan-Namen und die Bitmessage-Adresse: %1. Diese Adresse befindet sich auch unter "Ihre Identitäten". - - - - Address too new - Adresse zu neu - - - - Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. - Obwohl diese Bitmessage-Adresse gültig ist, ist ihre Versionsnummer zu hoch um verarbeitet zu werden. Vermutlich müssen Sie eine neuere Version von Bitmessage installieren. - - - - Address invalid - Adresse ungültig - - - - That Bitmessage address is not valid. - Diese Bitmessage-Adresse ist nicht gültig. - - - - Address does not match chan name - Adresse stimmt nicht mit dem Chan-Namen überein - - - - Although the Bitmessage address you entered was valid, it doesn't match the chan name. - Obwohl die Bitmessage-Adresse die Sie eingegeben haben gültig ist, stimmt diese nicht mit dem Chan-Namen überein. - - - - Successfully joined chan. - Chan erfolgreich beigetreten. - - - - Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). - Bitmessage wird ab sofort den Proxy-Server verwenden, aber eventuell möchten Sie Bitmessage neu starten um bereits bestehende Verbindungen zu schließen. - - - - This is a chan address. You cannot use it as a pseudo-mailing list. - Dies ist eine Chan-Adresse. Sie können sie nicht als Pseudo-Mailingliste verwenden. - - - - Search - Suchen - - - - All - Alle - - - - Message - Nachricht - - - - Join / Create chan - Chan beitreten / erstellen - - - - Encryption key was requested earlier. - Verschlüsselungscode wurde bereits angefragt. - - - - Sending a request for the recipient's encryption key. - Sende eine Anfrage für den Verschlüsselungscode des Empfängers. - - - - Doing work necessary to request encryption key. - Verrichte die benötigte Arbeit um den Verschlüsselungscode anzufragen. - - - - Broacasting the public key request. This program will auto-retry if they are offline. - Anfrage für den Verschlüsselungscode versendet (wird automatisch periodisch neu verschickt). - - - - Sending public key request. Waiting for reply. Requested at %1 - Anfrag für den Verschlüsselungscode gesendet. Warte auf Antwort. Angefragt am %1 - - - - Mark Unread - Als ungelesen markieren - - - - Fetched address from namecoin identity. - Adresse aus Namecoin Identität geholt. - - - - Testing... - teste... - - - - Fetch Namecoin ID - Hole Namecoin ID - - - - Ctrl+Q - Strg+Q - - - - F1 - F1 - - - - NewAddressDialog - - - Create new Address - Neue Adresse erstellen - - - - Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. -The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: - Sie können so viele Adressen generieren wie Sie möchten. Es ist sogar empfohlen neue Adressen zu verwenden und alte fallen zu lassen. Sie können Adressen durch Zufallszahlen erstellen lassen, oder unter Verwendung eines Kennwortsatzes. Wenn Sie einen Kennwortsatz verwenden, nennt man dies eine "deterministische" Adresse. -Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen einige Vor- und Nachteile: - - - - <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">Vorteile:<br/></span>Sie können ihre Adresse an jedem Computer aus dem Gedächtnis regenerieren. <br/>Sie brauchen sich keine Sorgen um das Sichern ihrer Schlüssel machen solange Sie sich den Kennwortsatz merken. <br/><span style=" font-weight:600;">Nachteile:<br/></span>Sie müssen sich den Kennowrtsatz merken (oder aufschreiben) wenn Sie in der Lage sein wollen ihre Schlüssel wiederherzustellen. <br/>Sie müssen sich die Adressversion und die Datenstrom Nummer zusammen mit dem Kennwortsatz merken. <br/>Wenn Sie einen schwachen Kennwortsatz wählen und jemand kann ihn erraten oder durch ausprobieren herausbekommen, kann dieser Ihre Nachrichten lesen, oder in ihrem Namen Nachrichten senden..</p></body></html> - - - - Use a random number generator to make an address - Lassen Sie eine Adresse mittels Zufallsgenerator erstellen - - - - Use a passphrase to make addresses - Benutzen Sie einen Kennwortsatz um eine Adresse erstellen zu lassen - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen - - - - Make deterministic addresses - Deterministische Adresse erzeugen - - - - Address version number: 3 - Adress-Versionsnummer: 3 - - - - In addition to your passphrase, you must remember these numbers: - Zusätzlich zu Ihrem Kennwortsatz müssen Sie sich diese Zahlen merken: - - - - Passphrase - Kennwortsatz - - - - Number of addresses to make based on your passphrase: - Anzahl Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen: - - - - Stream number: 1 - Datenstrom Nummer: 1 - - - - Retype passphrase - Kennwortsatz erneut eingeben - - - - Randomly generate address - Zufällig generierte Adresse - - - - Label (not shown to anyone except you) - Bezeichnung (Wird niemandem außer Ihnen gezeigt) - - - - Use the most available stream - Verwendung des am besten verfügbaren Datenstroms - - - - (best if this is the first of many addresses you will create) - (zum generieren der erste Adresse empfohlen) - - - - Use the same stream as an existing address - Verwendung des gleichen Datenstroms wie eine bestehende Adresse - - - - (saves you some bandwidth and processing power) - (Dies erspart Ihnen etwas an Bandbreite und Rechenleistung) - - - - NewSubscriptionDialog - - - Add new entry - Neuen Eintrag erstellen - - - - Label - Name oder Bezeichnung - - - - Address - Adresse - - - - SpecialAddressBehaviorDialog - - - Special Address Behavior - Spezielles Adressverhalten - - - - Behave as a normal address - Wie eine normale Adresse verhalten - - - - Behave as a pseudo-mailing-list address - Wie eine Pseudo-Mailinglistenadresse verhalten - - - - Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). - Nachrichten an eine Pseudo-Mailinglistenadresse werden automatisch zu allen Abbonenten weitergeleitet (Der Inhalt ist dann öffentlich). - - - - Name of the pseudo-mailing-list: - Name der Pseudo-Mailingliste: - - - - aboutDialog - - - About - Über - - - - PyBitmessage - PyBitmessage - - - - version ? - Version ? - - - - Copyright © 2013 Jonathan Warren - Copyright © 2013 Jonathan Warren - - - - <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - <html><head/><body><p>Veröffentlicht unter der MIT/X11 Software-Lizenz; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - - - - This is Beta software. - Diese ist Beta-Software. - - - - connectDialog - - - Bitmessage - Internetverbindung - - - - Bitmessage won't connect to anyone until you let it. - Bitmessage wird sich nicht verbinden, wenn Sie es nicht möchten. - - - - Connect now - Jetzt verbinden - - - - Let me configure special network settings first - Zunächst spezielle Nertzwerkeinstellungen vornehmen - - - - helpDialog - - - Help - Hilfe - - - - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> - - - - As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: - Bei Bitmessage handelt es sich um ein kollaboratives Projekt, Hilfe finden Sie online in Bitmessage-Wiki: - - - - iconGlossaryDialog - - - Icon Glossary - Icon Glossar - - - - You have no connections with other peers. - Sie haben keine Verbindung mit anderen Netzwerkteilnehmern. - - - - You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. - Sie haben mindestes eine Verbindung mit einem Netzwerkteilnehmer über eine ausgehende Verbindung, aber Sie haben noch keine eingehende Verbindung. Ihre Firewall oder Router ist vermutlich nicht richtig konfiguriert um eingehende TCP-Verbindungen an Ihren Computer weiterzuleiten. Bittmessage wird gut funktionieren, jedoch helfen Sie dem Netzwerk, wenn Sie eingehende Verbindungen erlauben. Es hilft auch Ihnen schneller und mehr Verbindungen ins Netzwerk aufzubauen. - - - - You are using TCP port ?. (This can be changed in the settings). - Sie benutzen TCP-Port ?. (Dies kann in den Einstellungen verändert werden). - - - - You do have connections with other peers and your firewall is correctly configured. - Sie haben Verbindungen mit anderen Netzwerkteilnehmern und Ihre Firewall ist richtig konfiguriert. - - - - newChanDialog - - - Dialog - Chan beitreten / erstellen - - - - Create a new chan - Neuen Chan erstellen - - - - Join a chan - Einem Chan beitreten - - - - Create a chan - Chan erstellen - - - - Chan name: - Chan-Name: - - - - <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> - <html><head/><body><p>Ein Chan existiert, wenn eine Gruppe von Leuten sich den gleichen Entschlüsselungscode teilen. Die Schlüssel und Bitmessage-Adressen werden basierend auf einem lesbaren Wort oder Satz generiert (Dem Chan-Namen). Um eine Nachricht an den Chan zu senden, senden Sie eine normale Person-zu-Person-Nachricht an die Chan-Adresse.</p><p>Chans sind experimentell and völlig unmoderierbar.</p><br></body></html> - - - - Chan bitmessage address: - Chan-Bitmessage-Adresse: - - - - <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> - <html><head/><body><p>Geben Sie einen Namen für Ihren Chan ein. Wenn Sie einen ausreichend komplexen Chan-Namen wählen (Wie einen starkes und einzigartigen Kennwortsatz) und keiner Ihrer Freunde ihn öffentlich weitergibt, wird der Chan sicher und privat bleiben. Wenn eine andere Person einen Chan mit dem gleichen Namen erzeugt, werden diese zu einem Chan.</p><br></body></html> - - - - regenerateAddressesDialog - - - Regenerate Existing Addresses - Bestehende Adresse regenerieren - - - - Regenerate existing addresses - Bestehende Adresse regenerieren - - - - Passphrase - Kennwortsatz - - - - Number of addresses to make based on your passphrase: - Anzahl der Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen: - - - - Address version Number: - Adress-Versionsnummer: - - - - 3 - 3 - - - - Stream number: - Stream Nummer: - - - - 1 - 1 - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen - - - - You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. - Sie müssen diese Option auswählen (oder nicht auswählen) wie Sie es gemacht haben, als Sie Ihre Adresse das erste mal erstellt haben. - - - - If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. - Wenn Sie bereits deterministische Adressen erstellt haben, aber diese durch einen Unfall wie eine defekte Festplatte verloren haben, können Sie sie hier regenerieren. Wenn Sie den Zufallsgenerator verwendet haben um Ihre Adressen erstmals zu erstellen, kann dieses Formular Ihnen nicht helfen. - - - - settingsDialog - - - Settings - Einstellungen - - - - Start Bitmessage on user login - Bitmessage nach dem Hochfahren automatisch starten - - - - Start Bitmessage in the tray (don't show main window) - Bitmessage minimiert starten (Zeigt das Hauptfenster nicht an) - - - - Minimize to tray - In den Systemtray minimieren - - - - Show notification when message received - Benachrichtigung anzeigen, wenn eine Nachricht eintrifft - - - - Run in Portable Mode - In portablem Modus arbeiten - - - - In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. - Im portablen Modus werden Nachrichten und Konfigurationen im gleichen Ordner abgelegt, wie sich das Programm selbst befindet anstelle im normalen Anwendungsdaten-Ordner. Das macht es möglich Bitmessage auf einem USB-Stick zu betreiben. - - - - User Interface - Benutzerinterface - - - - Listening port - TCP-Port - - - - Listen for connections on port: - Wartet auf Verbindungen auf Port: - - - - Proxy server / Tor - Proxy-Server / Tor - - - - Type: - Typ: - - - - none - keiner - - - - SOCKS4a - SOCKS4a - - - - SOCKS5 - SOCKS5 - - - - Server hostname: - Servername: - - - - Port: - Port: - - - - Authentication - Authentifizierung - - - - Username: - Benutzername: - - - - Pass: - Kennwort: - - - - Network Settings - Netzwerkeinstellungen - - - - When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. - Wenn jemand Ihnen eine Nachricht schickt, muss der absendende Computer erst einige Arbeit verrichten. Die Schwierigkeit dieser Arbeit ist standardmäßig 1. Sie können diesen Wert für alle neuen Adressen, die Sie generieren hier ändern. Es gibt eine Ausnahme: Wenn Sie einen Freund oder Bekannten in Ihr Adressbuch übernehmen, wird Bitmessage ihn mit der nächsten Nachricht automatisch informieren, dass er nur noch die minimale Arbeit verrichten muss: Schwierigkeit 1. - - - - Total difficulty: - Gesamtschwierigkeit: - - - - Small message difficulty: - Schwierigkeit für kurze Nachrichten: - - - - The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - Die "Schwierigkeit für kurze Nachrichten" trifft nur auf das senden kurzen Nachrichten zu. Verdoppelung des Wertes macht es fast doppelt so schwer kurze Nachrichten zu senden, aber hat keinen Effekt bei langen Nachrichten. - - - - The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. - Die "Gesammtschwierigkeit" beeinflusst die absolute menge Arbeit die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit. - - - - Demanded difficulty - Geforderte Schwierigkeit - - - - Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. - hier setzen Sie die maximale Arbeit die Sie bereit sind zu verrichten um eine Nachricht an eine andere Person zu verwenden. Ein Wert von 0 bedeutet, dass Sie jede Arbeit akzeptieren. - - - - Maximum acceptable total difficulty: - Maximale akzeptierte Gesammtschwierigkeit: - - - - Maximum acceptable small message difficulty: - Maximale akzeptierte Schwierigkeit für kurze Nachrichten: - - - - Max acceptable difficulty - Maximale akzeptierte Schwierigkeit - - - - Listen for incoming connections when using proxy - Auf eingehende Verdindungen warten, auch wenn eine Proxy-Server verwendet wird - - - - Willingly include unencrypted destination address when sending to a mobile device - Willentlich die unverschlüsselte Adresse des Empfängers übertragen, wenn an ein mobiles Gerät gesendet wird - - - - <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> - <html><head/><body><p>Bitmessage kann ein anderes Bitcoin basiertes Programm namens Namecoin nutzen um Adressen leserlicher zu machen. Zum Beispiel: Anstelle Ihrem Bekannten Ihre lange Bitmessage-Adresse vorzulesen, können Sie ihm einfach sagen, er soll eine Nachricht an <span style=" font-style:italic;">test </span>senden.</p><p> (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)</p><p>Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.</p></body></html> - - - - Host: - Server: - - - - Password: - Kennwort: - - - - Test - Verbindung testen - - - - Connect to: - Verbinde mit: - - - - Namecoind - Namecoind - - - - NMControl - NMControl - - - - Namecoin integration - Namecoin Integration - - - diff --git a/src/translations/bitmessage_en_pirate.pro b/src/translations/bitmessage_en_pirate.pro index 2885bd66..5b7f27e4 100644 --- a/src/translations/bitmessage_en_pirate.pro +++ b/src/translations/bitmessage_en_pirate.pro @@ -28,5 +28,6 @@ SOURCES = ../addresses.py\ ../bitmessageqt/settings.py\ ../bitmessageqt/specialaddressbehavior.py + TRANSLATIONS = bitmessage_en_pirate.ts CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_en_pirate.qm b/src/translations/bitmessage_en_pirate.qm index 56e994ed136598a63660ea540b5115349c17d3cb..24feb4b9601e2819fefbd3df187196b492938884 100644 GIT binary patch delta 693 zcmXAmVMr5k7{;HwZMV(c&RnaxX3o^qrlwA(TO~TyAS4#+!=#WBO-PYe>c~P}%%!l5 z7E0(8k^E3;g%GKfNYs}ovA{@#1ZB_%ktjqNVc0v4<9Lqa|NfrmdH-*EneARCto648 zC<4->q{Tpn7Shc^`hG2{aT;=u6R_ta$+-pW52EaQH=wiPeES@oTN5?e2T!O8DBMDI z<84A7MGY4MPGq9vS_CM#j=}a+;0T9RLlyZrnH)X?@M~DcT)P3J-eXF-=wR_QQ+wet zkaCh4enBAHBD>uAfxu(zPiZTV{8GaA$q4L`B;H*D^cG2}w+qNimz2BG=>NL3eC9M6 z#-t9{Ga#v6dh?$HP&G;?A21X+AhUh?O@)uky6-f=5A!+MpzRpIX2~L3WRTO!)wYZR zX+@kbOaaV6Zbsfffo8dH6B=q(E%$^wfrIn%p0j$OBvU@w7bUPu)Z|k6dkf854GJsw zhvs#P(D+3Pu%LKoqCkvOu@krf9C)rYJlXaWa7sCnatSzGrW`x9M@G8|SFaGj;!9{+ zv(U=zqGpe(TvfDEjbGHPFDmyQ0Sld~$PzWo-cT(Mxd79!YUS213bx5t=Edh@e8VH+ zu|N2MibJ%aaeknVu3%pWKkN0^Qxk@N%TRMh5Y@cQe{CX=KB_h}Q?rC^b$}_6m4M1{rh0nH>sbst^`NY=CiHSS+B80HW$vg%wu-(AJ5X6HBywOr`nHiGS}0 q>8dr2kicHkA7Xoq0vu>V3q8%qgN+J;zMMOlkhJG;0PTWtw!~cKI^PKa{bukaSnBJ^# zD}Z%C!5FcW_yO{74yq#(^P&&}wSad4`q~Vz)Q^hSQ6QVcwzkLAHzLtkg+O;R;26jD zrqje<*v)qX?ljIG8361a#M*L!{3*OO*8x@oV-u}FSpSl72EPKiJD9Q#YAlU1!JRh% zi-H*(AtCpmY$o)C1P{wT%Z~%bGpyLd0UNBWu5$`7$=LFi4q(j>*5k{k_ffegSwn^? zd9`mC&^zR({!|0%a?btyC$RE27d_ViI4xYvU4$^03^$M=VVjo^9=itQ{pC;glCjgz zCk1M>bn?>)1BJ9o2=s=4<(GsD^(I<0E!^$-ND25P8d+h&Me`M36zlmk^?y=y-`qvU zamAHlT7)qu<|9XeW$jAy?K%1nDTge3!oUi-@_OYW89h@q9v}f%m8$u@i=x&_EIg?8 z)lrm&dWoxt)c!>hbQshFQ*>EjQauy*0mY5#+4k>1*#psA@_#-hHe4k=*|6BZF^7_A z75n#5^h>sg_gnVUB9r1HCQO&(4HZP^E%8+|37N(;=0kLuYC^NNF9DcCn!R`8KuM(* z<78mHsNFnI3l)pn7ej7JY*agGr$hjW*$M5eF9KxQCE8Lt*V9~@kLeaJpC_MpO~9ri UmIey?PULv{re!tvwz3KDKZ5bA4FCWD diff --git a/src/translations/bitmessage_en_pirate.ts b/src/translations/bitmessage_en_pirate.ts index 26f86475..a0311eba 100644 --- a/src/translations/bitmessage_en_pirate.ts +++ b/src/translations/bitmessage_en_pirate.ts @@ -1,5 +1,6 @@ - + + MainWindow @@ -10,6 +11,7 @@ Reply + . @@ -858,7 +860,7 @@ p, li { white-space: pre-wrap; } Ctrl+Q - + Ctrrl+Q @@ -1054,7 +1056,7 @@ T' 'Random Number' option be selected by default but deterministi About - + Copyright © 2013 Jonathan Warren diff --git a/src/translations/bitmessage_eo.pro b/src/translations/bitmessage_eo.pro index 3ca3e68e..7a53b739 100644 --- a/src/translations/bitmessage_eo.pro +++ b/src/translations/bitmessage_eo.pro @@ -28,5 +28,6 @@ SOURCES = ../addresses.py\ ../bitmessageqt/settings.py\ ../bitmessageqt/specialaddressbehavior.py + TRANSLATIONS = bitmessage_eo.ts CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_eo.qm b/src/translations/bitmessage_eo.qm index 0a1e30e773352be960dc8ca0af0d0ee80cf75bf9..cfa0a6dcc1aca21de3084ce3cee454e2e3b8a91b 100644 GIT binary patch delta 1874 zcmX9Pa)m*2K>K3YS0!Of^=u=?Hz8TC7Mbe2J;8Y)y zv$^l|Dr~tN0XR)#%a_Z5$k&mgJwX9iuwybEh`xv1;WF5;^&$#>WPu~$DE=S-_{rxu z&~5|N9+c!Y0`IxtbdfvoRxIqFr2?MK=(AJ;FArhxW(OVGg(0`Kz%e~0{xAk?+9?=X z#{pL_!DAks2+k3fri}oF?ZR>=?vGj^M5crS8^05*cO@2@6C@np!NQrBg&G$Ju>OM3 z)h2S|pfG%pCs=h$7%66poLhvcVRmc1AWUnb0d1*9TSsB>-)UYNrnO$;?jNpc&+h={E!5mAy$RF@YX()@FM%~#nt#>10>&EAR4LP< zhoZUf65oeJ&n61kmLUfAe+X5w<@_?B`m7kaa{zeFDz>DSQ@}d$x`{2U zn-J}%_#X6v=+I>VFMKPH+H zTl(m5GDGbxbv8KzTT-MiioJokPo%rEdVpWtmDR-|%)mO?7W(Kkd-Pvy;1W zGsnmmRVJUWpvAFW@`Z|0;)vXFTqfUH`Fdsm-(%(5t-*kyp|(!6*zEFTj1!|jDo;m` z0Y6LBicj*`X=u}Sw*Y(7w3*Ln)6wnPz156%!)+Vh^>Ot3?H z^|{~q?`ZFwpT!Y4q#a6PwYoaptZD{rS)gu3ENyjJt4kPga3t>NHuj`45FydJ10E_6 zx>$E){aoOTQCIPeJ8-DBHeB-Xn$rElN;BqM(@lD_OjdwCO#7HJ()DXpH(;q(ZK>pH z`gfryI$}oM95=Y?;AIS7S+7 z1jpovu_I!N0tDkVWt;^njn|r?Npi!49V(CO7FpJU`Mmk`z;G^*rwcTumV*}m4V_hcI%Nc z7*|*8q@6uCQ5p5j;b4xK0+XoVl}b~5eI5{zQX8&ywRxM)6|?c@8`}qiKfZK7GP12X|kW+eNxT(2ONs5F|+y#-xmg% zeHzHKw8*^rvC3-q&ASplX9qjYxf5l;>xayH9Yk9|pLu_D6&=ep-?azuUTHV~z3Md{ zc&+(q)@q>OeHFha;jw+HURuI+N%ehxAue%O1FUCwZv?Ax6EyPOZ`2K-QRQE$RX=cj z^Fy_Ddl=`TTm4fLuY zKt`Hn+wZ!8eVLYySQW_KWBJ6Rg_(=B^te#aW;e^!$#;Op61JhazOzwR^P*zHX6!*W McEhi8xu;P6e+>E@$^ZZW delta 1878 zcmX913`g@ zK!K5^LMv>s@=-%mH>}NvY>H3|(w6mU+w#H5lB6i54gmhZOJ4(G9pHTlkd6cEzXGCt0A&%^9|OUjz=kiuz10rbDxphQ1{}`DtiA_;b z6oI6ZVSv*Zl0IGlgy$ex-bVswkTQ}EM0}0h!7^C!)Y~Yy&jfqJQS_=W@RyHJeAEi4 z-6+Xx23~f>p~C6F^DEJFAr%BTEo7jy=Y(J1TLXkl5hry#1tbKE zp{FA$eUljdDW&wjE#@j@o_|@~ai1^G4i^jC?UeYixZ8=fo%c`iSd9jlvR{15=LoS| zJiaH9rk*XHu(<$9Y2t@Po`CC!c+I&R`0IeAJ{Cw1tdgujcMh>eW72{inytiBT9`%Y zV`fMz2d@AVf0I(nPSU-vNg0V->FV23e(MP)_(j@QJckmNOM79Qtg4jgkUA?R#(P~llj+O-O6l{q0Km{x-ym45c4;KiiPj&I#v&ZR z>?B#Zo5xB+PTSH7Y|oH0A5f;3o{_iL(%MZ|e7vPGEJ7BK3M*VG&1$eR5!rSv%XZEZ2h19 zU1y$_e4&5;Y#61A()YYUGlaM5Kd~~F+@~LCB0jFwkNESRrB?sPjm?1D4ui{g>zMmn zgWK!Bko2zxuTL1=f4LzjIh}p}s$pw9<2)f6wifXBix(T3ud;U0KN@V)Qh_bY4Q-3Y zI7kY74c|Y?SH*=Gh687jW`|*{>i`g%V)WWW`kPyfn}%Yk#s*`~AOqwik7Ko)u_QQ* z(`}!zGi;OuBx9E{%mlT@F56vt;iU0gHqS#Z8!zr+?PE$6O9yx4GhiPsC87!|g#WdytVQKZD@?`65)0>57X!ah{slYboeZh2AL(@j) zjbn3^>6{DW?yWNQS{OID#?Em~=jb{CKY>KR(&FXUQX9k(Q zni$8g#JuDumD#SFGvYpA1y7rE@09_6D>rYq6Ro~i%{wD%s93)FT8}U1N{9K|nvHyL zy!p4RB|yOu75`$uiegnS&f~dWo%3)Y&YP+F#S|D^@?N#(N1m@6 zQrk8Jvmd(E%QlXK?IzX!B!$=cjAKrV+8@6g(b&IP9n44t+?_3fm!|W-WT$0Sdl;}O z!}9do=Ybu$md+>@$St(I=iW-st+aGcB%yWgmeKt$0?iN0aJczIv#xH6 Reply - Aŭ ĉu oni uzas u-formon ĉi tie? "Respondu"?! Ŝajnas al mi ke ne. + Aŭ ĉu oni uzas u-formon ĉi tie? "Respondu"?! Ŝajnas al mi ke ne.. Respondi @@ -952,7 +952,7 @@ p, li { white-space: pre-wrap; } Ctrl+Q http://komputeko.net/index_en.php?vorto=ctrl - Stir + Q + Stir+Q diff --git a/src/translations/bitmessage_fr.pro b/src/translations/bitmessage_fr.pro index c8af9d39..f2215048 100644 --- a/src/translations/bitmessage_fr.pro +++ b/src/translations/bitmessage_fr.pro @@ -28,5 +28,6 @@ SOURCES = ../addresses.py\ ../bitmessageqt/settings.py\ ../bitmessageqt/specialaddressbehavior.py + TRANSLATIONS = bitmessage_fr.ts CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_fr.qm b/src/translations/bitmessage_fr.qm index 70cbed9217ad94722fed4e6b4382e897c44f35bd..12247227f582cc62ce8b01975b65d72d3b7705ae 100644 GIT binary patch delta 1860 zcmX9;X;4#V6g|m%FL^I-iQDNvCyJUK?*@EPT2%U zL|LSkA_yo|aY0n9h@;YqVq6AVTShzTIM&LDFx{k=CVx&|^1ge|J?Gr-@14x)48}aS z(KM>FuiYM5Y?u1!Z%<~7A%K|>V;L3b~1?LHa0YezHA&Y?Xk1^D|=narE3C@;xfNLz= z?Aw858!%&UIS>*CuLrvTb07SQT8Tu96|;B*6zQl@7?yt&4Y&tlMbbsW16JG_fROB1 z;OKi;6|;jd8mq6*2Ik#Is3sdY<%Y2SC}3ef%yHdm!0KouS4;)Q*CD0K4Cos0MSKZR z*@=TmV}L!)XuBK^j9HHkeJAZI}JK^oPq6IBaBz36=(ca`x0y*NBj6}hGY$egCi3L_$$cvb0f zVt%qib)k|W>0YS1(|t(F;C;tcw&t7aPrix=^lEkLbD}l2UY++TwO=c%s}kw~+d}oN zNW%FB^~2PwK=o~Pm$Dx4{Yw3m-3sj7%}BW%=@7xl9j5@Hk8K=?^kA3;J_ z-DgMEt^rnd3auMbjcw{f%E zUIT?~+`?WXVB^az?Y>7k+j8M)XDEW#InydqVqP$pP~Jd|ytrNIG*C?;cW^c}iq7Op z-q8Q0UR-SsDY&?YtIMHv@Egz7XK|E}A@*F;W@@}Rfoso+rAbF|{k}sfqJ7+e;T16P zxrTWYKe$Mm$i#9W@3v-p0U26zQ&ai#ZD96eP1V^hQp`cquxA*M`do8vP|>Vr&AnP1 zifozIrhxj)60|`rWW~%MwIKyWz#OklaWX4_=Sc1DWp)&$Ol?VAJuo3rTao-Fd1unr z5oL)w0qW=dE!KTFd?ghKg6iUaMtfnU>HNaxP+y93?< zA8+Ebzg-yBb@E-sgf74EeHow8B>8;* z%w|A5!2k1zp6!MS!=J7s!cPQ;>bEpmzu*-bMP4()RwLD!EDBpcrSsl*gp&JYq2E73 znPWI*8L4wt{)!{2t)L-*nNYa^SeDF1DKv?)b%uB_X== zVlNdspt}^~1I*p1yP8fO`+MqsKafUgekKaZB(?1XQO9%ub4tbcdz)zs!o`V~!huoF z;=Ey`?8+L^xP(HyL$YFVsu(mtN>r~li%}^H=>GE&3oes~e%HkkivcL970ZMVC{!-u zjr170BU{BAkI9;)SH*|LM&MAf*qQtaIJQgd^50Jlb&`7sHC$9H&7VvIq@0sJDvBq< zJ<{sbIJ$?cB-7gn+OiGO#-ef{W~Ed(&z{!S+$0rlSOO%;QcY45h2ul%)SwlCQPNqD z!$jfvY4L7+Q|-Eo=_Gf`Tb(5XP(|DPuW)sd|4>Z?@`FR2sz?tF-e;vn*y#- znBK{8eQAK{uDrdSaLQ?UhasQV><9Tl+f-nUo%~z=22w6i!S~dl$fWS>bh?KxDpQT6 z6v9}=zmKFpz5M|M?J<$y0ztq?J5#h`xeWO!3g>SjOWdsp09@PJpN83}oj(lqx l)?lNxj2JD!fNe;`7PujZ|9_VU_t~&5af@3}Lx-bl<$siL7h(Va delta 1785 zcmX9;YgANK7~L~-@4W84Gl>rr4Kl(PhzKH5iXtdxI=%?S2a=#7l+UFx5DcQ31ELm) zyhTD3ObkhpOjLX>OpGWM)RkGO%ak$=%u3s>`L)-%_nhzB-`@M2FVZ!Cuh-Z{AC2wZ z^jp!6Oa1$uh~9nt=6FE+6u@v`#}uL;F$EA00@IHG;pc&oe*^P|aQy>>Z#)3cN(gNW zfT1FU2R_6(4$N|fxJ3YhPD3mT1%fvd!+{Vl=prTn^)={boA4M&dJ6Z}=fIFac)BzL zQ-;I$;}Rgk3jtR)0JgIT%RNI9jSk#=6;pGKY~+RMZ^i*Wu9%tl6>*6J*Y`t2Mm(_h zF=j7I0`>)9&iO!KY&qs@Gk}_BSkM&%j6Vlk!mU(bP5`WB-oUF#NUpE}##(%^yZ|WQ zhrC2rU~3kdPDBB&K4>v-0sMEP{d6_=4aUvBlc`WOI?r|hQ;SuG(kDRA{wg;YPVQT# z8YH^|)+m*4^nD<+Sv4Y+b*tJ{!Se&SU-3~{u5e?IX{zYRGGOC#m3;w;EWWBLJV53( zrK)4)8cJ8Mx|J40Dc!RVsGMzi>i0G;2h3`9%01G0B}JXJlIEr>R4Uy4~~+5IS3ZM_2=_e_JDO5rISA8l~kBU^uEVf7r_J4>UflHGrv1<7a2x zKCPOOD^h`72F)1DE8Krs6TGmEenhX+H0u@viiZO;=4mk^R(qR zE>ow#8g0dqb|(J5wsvcGAf--Q_rGrTEbVtyP7G#(&S^XI7H~~BqmhF973w0klYniE zF4@h*oc*HPG^G!)KU`OkPz?+W)|FW|(x6z~{w+TN`jHMyyQypRCxL@M>h4;;W1Nb0 zT^A*^MVt>QEmz#k} zVTLFE?!b~eh8Oi)fj4T6aj_-9XMY*vZ}D8x0S6X%80#h8w6G<{u)U)U*Jv$4djAG%)K?(xBr}jM5*{*zS~eR-$B?%&1zgJ1~EW zG~)%8*gH^)Ne%{PDAM*5v@k4JDrjX?3#?L+VFVR=B3(#Z#)mLlx^SD;y!DB6HQxdh z$4PD04icUzwYyH*!G=cJCxQ(pSmkkEoFI9V{ATWQGCrAIEIQj>m2<|r@M_uRoJEs? z_ixCRiC;1aM)}bH!cX&+kNB68hD|=YA_hoZBp*{TvLW*vSoy2`O+4GCpOjn7Y#ZPy zw|erNU6#ATOMw2#a#t(AzZR+J?;NJV-im1=*KYTezV9+YwpG`a0r@OA{3B&(b`@Ws z7-ife6OHm#7VgWZkaLyTsi*k=l9JGw3dHVK);1G|Zcvg!wo%^#H%;oK&c(8+blxcX0n^t-frvxacvJH*8lekyVA@Jk zn - + + MainWindow @@ -726,6 +727,7 @@ Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l'o Reply + . Répondre @@ -970,7 +972,7 @@ Il n'y a pas de difficulté requise pour ces adresses de version 2. Ctrl+Q - + Ctrl+Q @@ -1154,7 +1156,7 @@ L'option 'Nombre Aléatoire' est sélectionnée par défaut mais About À propos - + Copyright © 2013 Jonathan Warren Copyright © 2013 Jonathan Warren diff --git a/src/translations/bitmessage_fr_BE.pro b/src/translations/bitmessage_fr_BE.pro deleted file mode 100644 index d86fdc4d..00000000 --- a/src/translations/bitmessage_fr_BE.pro +++ /dev/null @@ -1,33 +0,0 @@ -SOURCES = ../addresses.py\ - ../bitmessagemain.py\ - ../class_addressGenerator.py\ - ../class_outgoingSynSender.py\ - ../class_receiveDataThread.py\ - ../class_sendDataThread.py\ - ../class_singleCleaner.py\ - ../class_singleListener.py\ - ../class_singleWorker.py\ - ../class_sqlThread.py\ - ../helper_bitcoin.py\ - ../helper_bootstrap.py\ - ../helper_generic.py\ - ../helper_inbox.py\ - ../helper_sent.py\ - ../helper_startup.py\ - ../shared.py - ../bitmessageqt/__init__.py\ - ../bitmessageqt/about.py\ - ../bitmessageqt/bitmessageui.py\ - ../bitmessageqt/help.py\ - ../bitmessageqt/iconglossary.py\ - ../bitmessageqt/newaddressdialog.py\ - ../bitmessageqt/newchandialog.py\ - ../bitmessageqt/newsubscriptiondialog.py\ - ../bitmessageqt/regenerateaddresses.py\ - ../bitmessageqt/settings.py\ - ../bitmessageqt/specialaddressbehavior.py - - -TRANSLATIONS = bitmessage_fr_BE.ts - -CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_fr_BE.qm b/src/translations/bitmessage_fr_BE.qm deleted file mode 100644 index 1eb1b25f0d8b48845705610da5e5ab47b7240a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53106 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 diff --git a/src/translations/bitmessage_fr_BE.ts b/src/translations/bitmessage_fr_BE.ts deleted file mode 100644 index 28b5e270..00000000 --- a/src/translations/bitmessage_fr_BE.ts +++ /dev/null @@ -1,1290 +0,0 @@ - - - - MainWindow - - - Bitmessage - Bitmessage - - - - To - Vers - - - - From - De - - - - Subject - Sujet - - - - Received - Reçu - - - - Inbox - Boîte de réception - - - - Load from Address book - Charger depuis carnet d'adresses - - - - Message: - Message : - - - - Subject: - Sujet : - - - - Send to one or more specific people - Envoyer à une ou plusieurs personne(s) - - - - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - To: - Vers : - - - - From: - De : - - - - Broadcast to everyone who is subscribed to your address - Diffuser à chaque abonné de cette adresse - - - - Send - Envoyer - - - - Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. - Gardez en tête que les diffusions sont seulement chiffrées avec votre adresse. Quiconque disposant de votre adresse peut les lire. - - - - Status - Statut - - - - Sent - Envoyé - - - - New - Nouveau - - - - Label (not shown to anyone) - Label (seulement visible par vous) - - - - Address - Adresse - - - - Stream - Flux - - - - Your Identities - Vos identités - - - - Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. - Vous pouvez ici souscrire aux 'messages de diffusion' envoyés par d'autres utilisateurs. Les messages apparaîtront dans votre boîte de récption. Les adresses placées ici outrepassent la liste noire. - - - - Add new Subscription - Ajouter un nouvel abonnement - - - - Label - Label - - - - Subscriptions - Abonnements - - - - The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. - Le carnet d'adresses est utile pour mettre un nom sur une adresse Bitmessage et ainsi faciliter la gestion de votre boîte de réception. Vous pouvez ajouter des entrées ici en utilisant le bouton 'Ajouter', ou depuis votre boîte de réception en faisant un clic-droit sur un message. - - - - Add new entry - Ajouter une nouvelle entrée - - - - Name or Label - Nom ou Label - - - - Address Book - Carnet d'adresses - - - - Use a Blacklist (Allow all incoming messages except those on the Blacklist) - Utiliser une liste noire (autoriser tous les messages entrants exceptés ceux sur la liste noire) - - - - Use a Whitelist (Block all incoming messages except those on the Whitelist) - Utiliser une liste blanche (refuser tous les messages entrants exceptés ceux sur la liste blanche) - - - - Blacklist - Liste noire - - - - Stream Number - Numéro de flux - - - - Number of Connections - Nombre de connexions - - - - Total connections: 0 - Nombre de connexions total : 0 - - - - Since startup at asdf: - Depuis le lancement à asdf : - - - - Processed 0 person-to-person message. - 0 message de pair à pair traité. - - - - Processed 0 public key. - 0 clé publique traitée. - - - - Processed 0 broadcast. - 0 message de diffusion traité. - - - - Network Status - État du réseau - - - - File - Fichier - - - - Settings - Paramètres - - - - Help - Aide - - - - Import keys - Importer les clés - - - - Manage keys - Gérer les clés - - - - Quit - Quitter - - - - About - À propos - - - - Regenerate deterministic addresses - Regénérer les clés déterministes - - - - Delete all trashed messages - Supprimer tous les messages dans la corbeille - - - - Total Connections: %1 - Nombre total de connexions : %1 - - - - Not Connected - Déconnecté - - - - Connected - Connecté - - - - Show Bitmessage - Afficher Bitmessage - - - - Subscribe - S'abonner - - - - Processed %1 person-to-person messages. - %1 messages de pair à pair traités. - - - - Processed %1 broadcast messages. - %1 messages de diffusion traités. - - - - Processed %1 public keys. - %1 clés publiques traitées. - - - - Since startup on %1 - Depuis lancement le %1 - - - - Waiting on their encryption key. Will request it again soon. - En attente de la clé de chiffrement. Une nouvelle requête sera bientôt lancée. - - - - Encryption key request queued. - Demande de clé de chiffrement en attente. - - - - Queued. - En attente. - - - - Need to do work to send message. Work is queued. - Travail nécessaire pour envoyer le message. Travail en attente. - - - - Acknowledgement of the message received %1 - Accusé de réception reçu le %1 - - - - Broadcast queued. - Message de diffusion en attente. - - - - Broadcast on %1 - Message de diffusion à %1 - - - - Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 - Problème : Le travail demandé par le destinataire est plus difficile que ce que vous avez paramétré. %1 - - - - Forced difficulty override. Send should start soon. - Neutralisation forcée de la difficulté. L'envoi devrait bientôt commencer. - - - - Message sent. Waiting on acknowledgement. Sent at %1 - Message envoyé. En attente de l'accusé de réception. Envoyé le %1 - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. - Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le même répertoire que ce programme. Il est important de faire des sauvegardes de ce fichier. - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. - Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire - %1. -Il est important de faire des sauvegardes de ce fichier. - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le même répertoire que ce programme. Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l'ouvrir maintenant ? (Assurez-vous de fermer Bitmessage avant d'effectuer des changements.) - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire - %1. -Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l'ouvrir maintenant ? (Assurez-vous de fermer Bitmessage avant d'effectuer des changements.) - - - - Add sender to your Address Book - Ajouter l'expéditeur au carnet d'adresses - - - - Move to Trash - Envoyer à la Corbeille - - - - View HTML code as formatted text - Voir le code HTML comme du texte formaté - - - - Enable - Activer - - - - Disable - Désactiver - - - - Copy address to clipboard - Copier l'adresse dans le presse-papier - - - - Special address behavior... - Comportement spécial de l'adresse... - - - - Send message to this address - Envoyer un message à cette adresse - - - - Add New Address - Ajouter nouvelle adresse - - - - Delete - Supprimer - - - - Copy destination address to clipboard - Copier l'adresse de destination dans le presse-papier - - - - Force send - Forcer l'envoi - - - - Are you sure you want to delete all trashed messages? - Êtes-vous sûr de vouloir supprimer tous les messages dans la corbeille ? - - - - You must type your passphrase. If you don't have one then this is not the form for you. - Vous devez taper votre phrase secrète. Si vous n'en avez pas, ce formulaire n'est pas pour vous. - - - - Delete trash? - Supprimer la corbeille ? - - - - Open keys.dat? - Ouvrir keys.dat ? - - - - bad passphrase - Mauvaise phrase secrète - - - - Restart - Redémarrer - - - - You must restart Bitmessage for the port number change to take effect. - Vous devez redémarrer Bitmessage pour que le changement de port prenne effet. - - - - Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. - Bitmessage utilisera votre proxy à partir de maintenant mais il vous faudra redémarrer Bitmessage pour fermer les connexions existantes. - - - - Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. - Erreur : Vous ne pouvez pas ajouter une adresse déjà présente dans votre liste. Essayez de renommer l'adresse existante. - - - - The address you entered was invalid. Ignoring it. - L'adresse que vous avez entrée est invalide. Adresse ignorée. - - - - Passphrase mismatch - Phrases secrètes différentes - - - - The passphrase you entered twice doesn't match. Try again. - Les phrases secrètes entrées sont différentes. Réessayez. - - - - Choose a passphrase - Choisissez une phrase secrète - - - - You really do need a passphrase. - Vous devez vraiment utiliser une phrase secrète. - - - - All done. Closing user interface... - Terminé. Fermeture de l'interface... - - - - Address is gone - L'adresse a disparu - - - - Bitmessage cannot find your address %1. Perhaps you removed it? - Bitmessage ne peut pas trouver votre adresse %1. Peut-être l'avez-vous supprimée ? - - - - Address disabled - Adresse désactivée - - - - Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. - Erreur : L'adresse avec laquelle vous essayez de communiquer est désactivée. Vous devez d'abord l'activer dans l'onglet 'Vos identités' avant de l'utiliser. - - - - Entry added to the Address Book. Edit the label to your liking. - Entrée ajoutée au carnet d'adresses. Éditez le label selon votre souhait. - - - - Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. - Erreur : Vous ne pouvez pas ajouter une adresse déjà présente dans votre carnet d'adresses. Essayez de renommer l'adresse existante. - - - - Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. - Messages déplacés dans la corbeille. Il n'y a pas d'interface utilisateur pour voir votre corbeille, mais ils sont toujours présents sur le disque si vous souhaitez les récupérer. - - - - No addresses selected. - Aucune adresse sélectionnée. - - - - Options have been disabled because they either aren't applicable or because they haven't yet been implimented for your operating system. - Certaines options ont été désactivées car elles n'étaient pas applicables ou car elles n'ont pas encore été implémentées pour votre système d'exploitation. - - - - The address should start with ''BM-'' - L'adresse devrait commencer avec "BM-" - - - - The address is not typed or copied correctly (the checksum failed). - L'adresse n'est pas correcte (la somme de contrôle a échoué). - - - - The version number of this address is higher than this software can support. Please upgrade Bitmessage. - Le numéro de version de cette adresse est supérieur à celui que le programme peut supporter. Veuiller mettre Bitmessage à jour. - - - - The address contains invalid characters. - L'adresse contient des caractères invalides. - - - - Some data encoded in the address is too short. - Certaines données encodées dans l'adresse sont trop courtes. - - - - Some data encoded in the address is too long. - Certaines données encodées dans l'adresse sont trop longues. - - - - Address is valid. - L'adresse est valide. - - - - You are using TCP port %1. (This can be changed in the settings). - Vous utilisez le port TCP %1. (Ceci peut être changé dans les paramètres). - - - - Error: Bitmessage addresses start with BM- Please check %1 - Erreur : Les adresses Bitmessage commencent avec BM- Merci de vérifier %1 - - - - Error: The address %1 contains invalid characters. Please check it. - Erreur : L'adresse %1 contient des caractères invalides. Veuillez la vérifier. - - - - Error: The address %1 is not typed or copied correctly. Please check it. - Erreur : L'adresse %1 n'est pas correctement recopiée. Veuillez la vérifier. - - - - Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. - Erreur : La version de l'adresse %1 est trop grande. Pensez à mettre à jour Bitmessage. - - - - Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. - Erreur : Certaines données encodées dans l'adresse %1 sont trop courtes. Il peut y avoir un problème avec le logiciel ou votre connaissance. - - - - Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. - Erreur : Certaines données encodées dans l'adresse %1 sont trop longues. Il peut y avoir un problème avec le logiciel ou votre connaissance. - - - - Error: Something is wrong with the address %1. - Erreur : Problème avec l'adresse %1. - - - - Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. - Erreur : Vous devez spécifier une adresse d'expéditeur. Si vous n'en avez pas, rendez-vous dans l'onglet 'Vos identités'. - - - - Sending to your address - Envoi vers votre adresse - - - - Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. - Erreur : Une des adresses vers lesquelles vous envoyez un message, %1, est vôtre. Malheureusement, Bitmessage ne peut pas traiter ses propres messages. Essayez de lancer un second client sur une machine différente. - - - - Address version number - Numéro de version de l'adresse - - - - Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. - Concernant l'adresse %1, Bitmessage ne peut pas comprendre les numéros de version de %2. Essayez de mettre à jour Bitmessage vers la dernière version. - - - - Stream number - Numéro de flux - - - - Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. - Concernant l'adresse %1, Bitmessage ne peut pas supporter les nombres de flux de %2. Essayez de mettre à jour Bitmessage vers la dernière version. - - - - Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. - Avertissement : Vous êtes actuellement déconnecté. Bitmessage fera le travail nécessaire pour envoyer le message mais il ne sera pas envoyé tant que vous ne vous connecterez pas. - - - - Your 'To' field is empty. - Votre champ 'Vers' est vide. - - - - Right click one or more entries in your address book and select 'Send message to this address'. - Cliquez droit sur une ou plusieurs entrées dans votre carnet d'adresses et sélectionnez 'Envoyer un message à ces adresses'. - - - - Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. - Erreur : Vous ne pouvez pas ajouter une même adresse à vos abonnements deux fois. Essayez de renommer l'adresse existante. - - - - Message trashed - Message envoyé à la corbeille - - - - One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? - Une de vos adresses, %1, est une vieille adresse de la version 1. Les adresses de la version 1 ne sont plus supportées. Nous pourrions la supprimer maintenant ? - - - - Unknown status: %1 %2 - Statut inconnu : %1 %2 - - - - Connection lost - Connexion perdue - - - - SOCKS5 Authentication problem: %1 - Problème d'authentification SOCKS5 : %1 - - - - Reply - Répondre - - - - Generating one new address - Génération d'une nouvelle adresse - - - - Done generating address. Doing work necessary to broadcast it... - Génération de l'adresse terminée. Travail pour la diffuser en cours... - - - - Done generating address - Génération de l'adresse terminée - - - - Message sent. Waiting on acknowledgement. Sent on %1 - Message envoyé. En attente de l'accusé de réception. Envoyé le %1 - - - - Error! Could not find sender address (your address) in the keys.dat file. - Erreur ! L'adresse de l'expéditeur (vous) n'a pas pu être trouvée dans le fichier keys.dat. - - - - Doing work necessary to send broadcast... - Travail pour envoyer la diffusion en cours... - - - - Broadcast sent on %1 - Message de diffusion envoyé le %1 - - - - Looking up the receiver's public key - Recherche de la clé publique du destinataire - - - - Doing work necessary to send message. (There is no required difficulty for version 2 addresses like this.) - Travail nécessaire pour envoyer le message en cours. (Il n'y a pas de difficulté requise pour ces adresses de version 2.) - - - - Doing work necessary to send message. -Receiver's required difficulty: %1 and %2 - Travail nécessaire pour envoyer le message. -Difficulté requise par le destinataire : %1 et %2 - - - - Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. - Problème : Le travail demandé par le destinataire (%1 et %2) est plus difficile que ce que vous souhaitez faire. - - - - Work is queued. - Travail en attente. - - - - Work is queued. %1 - Travail en attente. %1 - - - - Acknowledgement of the message received. %1 - - - - - Doing work necessary to send message. -There is no required difficulty for version 2 addresses like this. - Travail nécessaire pour envoyer le message en cours. -Il n'y a pas de difficulté requise pour ces adresses de version 2. - - - - Problem: The recipient's encryption key is no good. Could not encrypt message. %1 - - - - - Encryption key was requested earlier. - - - - - Sending a request for the recipient's encryption key. - - - - - Doing work necessary to request encryption key. - - - - - Broacasting the public key request. This program will auto-retry if they are offline. - - - - - Sending public key request. Waiting for reply. Requested at %1 - - - - - MainWindows - - - Address is valid. - L'adresse est valide. - - - - NewAddressDialog - - - Create new Address - Créer une nouvelle adresse - - - - Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. -The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: - Vous pouvez générer autant d'adresses que vous le souhaitez. En effet, nous vous encourageons à créer et à délaisser vos adresses. Vous pouvez générer des adresses en utilisant des nombres aléatoires ou en utilisant une phrase secrète. Si vous utilisez une phrase secrète, l'adresse sera une adresse "déterministe". -L'option 'Nombre Aléatoire' est sélectionnée par défaut mais les adresses déterministes ont certains avantages et inconvénients : - - - - <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">Avantages :<br/></span>Vous pouvez recréer vos adresses sur n'importe quel ordinateur. <br/>Vous n'avez pas à vous inquiéter à propos de la sauvegarde de votre fichier keys.dat tant que vous vous rappelez de votre phrase secrète. <br/><span style=" font-weight:600;">Inconvénients :<br/></span>Vous devez vous rappeler (ou noter) votre phrase secrète si vous souhaitez être capable de récréer vos clés si vous les perdez. <br/>Vous devez vous rappeler du numéro de version de l'adresse et du numéro de flux en plus de votre phrase secrète. <br/>Si vous choisissez une phrase secrète faible et que quelqu'un sur Internet parvient à la brute-forcer, il pourra lire vos messages et vous en envoyer.</p></body></html> - - - - Use a random number generator to make an address - Utiliser un générateur de nombres aléatoires pour créer une adresse - - - - Use a passphrase to make addresses - Utiliser une phrase secrète pour créer une adresse - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Créer une adresse plus courte d'un ou deux caractères (nécessite plusieurs minutes de temps de calcul supplémentaires) - - - - Make deterministic addresses - Créer une adresse déterministe - - - - Address version number: 3 - Numéro de version de l'adresse : 3 - - - - In addition to your passphrase, you must remember these numbers: - En plus de votre phrase secrète, vous devez vous rappeler ces numéros : - - - - Passphrase - Phrase secrète - - - - Number of addresses to make based on your passphrase: - Nombre d'adresses à créer sur base de votre phrase secrète : - - - - Stream number: 1 - Nombre de flux : 1 - - - - Retype passphrase - Retapez la phrase secrète - - - - Randomly generate address - Générer une adresse de manière aléatoire - - - - Label (not shown to anyone except you) - Label (seulement visible par vous) - - - - Use the most available stream - Utiliser le flux le plus disponible - - - - (best if this is the first of many addresses you will create) - (préférable si vous générez votre première adresse) - - - - Use the same stream as an existing address - Utiliser le même flux qu'une adresse existante - - - - (saves you some bandwidth and processing power) - (économise de la bande passante et de la puissance de calcul) - - - - NewSubscriptionDialog - - - Add new entry - Ajouter une nouvelle entrée - - - - Label - Label - - - - Address - Adresse - - - - SpecialAddressBehaviorDialog - - - Special Address Behavior - Comportement spécial de l'adresse - - - - Behave as a normal address - Se comporter comme une adresse normale - - - - Behave as a pseudo-mailing-list address - Se comporter comme une adresse d'une pseudo liste de diffusion - - - - Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). - Un mail reçu sur une adresse d'une pseudo liste de diffusion sera automatiquement diffusé aux abonnés (et sera donc public). - - - - Name of the pseudo-mailing-list: - Nom de la pseudo liste de diffusion : - - - - aboutDialog - - - PyBitmessage - PyBitmessage - - - - version ? - version ? - - - - About - À propos - - - - Copyright © 2013 Jonathan Warren - Copyright © 2013 Jonathan Warren - - - - <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - <html><head/><body><p>Distribué sous la licence logicielle MIT/X11; voir <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - - - - This is Beta software. - Version bêta. - - - - helpDialog - - - Help - Aide - - - - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">Wiki d'aide de PyBitmessage</a> - - - - As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: - Bitmessage étant un projet collaboratif, une aide peut être trouvée en ligne sur le Wiki de Bitmessage : - - - - iconGlossaryDialog - - - Icon Glossary - Glossaire des icônes - - - - You have no connections with other peers. - Vous n'avez aucune connexion avec d'autres pairs. - - - - You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. - Vous avez au moins une connexion sortante avec un pair mais vous n'avez encore reçu aucune connexion entrante. Votre pare-feu ou routeur n'est probablement pas configuré pour transmettre les connexions TCP vers votre ordinateur. Bitmessage fonctionnera correctement, mais le réseau Bitmessage se portera mieux si vous autorisez les connexions entrantes. Cela vous permettra d'être un nœud mieux connecté. - - - - You are using TCP port ?. (This can be changed in the settings). - Vous utilisez le port TCP ?. (Peut être changé dans les paramètres). - - - - You do have connections with other peers and your firewall is correctly configured. - Vous avez des connexions avec d'autres pairs et votre pare-feu est configuré correctement. - - - - regenerateAddressesDialog - - - Regenerate Existing Addresses - Regénérer des adresses existantes - - - - Regenerate existing addresses - Regénérer des adresses existantes - - - - Passphrase - Phrase secrète - - - - Number of addresses to make based on your passphrase: - Nombre d'adresses basées sur votre phrase secrète à créer : - - - - Address version Number: - Numéro de version de l'adresse : - - - - 3 - 3 - - - - Stream number: - Numéro du flux : - - - - 1 - 1 - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Créer une adresse plus courte d'un ou deux caractères (nécessite plusieurs minutes de temps de calcul supplémentaires) - - - - You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. - Vous devez cocher (ou décocher) cette case comme vous l'aviez fait (ou non) lors de la création de vos adresses la première fois. - - - - If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. - Si vous aviez généré des adresses déterministes mais les avez perdues à cause d'un accident, vous pouvez les regénérer ici. Si vous aviez utilisé le générateur de nombres aléatoires pour créer vos adresses, ce formulaire ne vous sera d'aucune utilité. - - - - settingsDialog - - - Settings - Paramètres - - - - Start Bitmessage on user login - Démarrer Bitmessage à la connexion de l'utilisateur - - - - Start Bitmessage in the tray (don't show main window) - Démarrer Bitmessage dans la barre des tâches (ne pas montrer la fenêtre principale) - - - - Minimize to tray - Minimiser dans la barre des tâches - - - - Show notification when message received - Montrer une notification lorsqu'un message est reçu - - - - Run in Portable Mode - Lancer en Mode Portable - - - - In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. - En Mode Portable, les messages et les fichiers de configuration sont stockés dans le même dossier que le programme plutôt que le dossier de l'application. Cela rend l'utilisation de Bitmessage plus facile depuis une clé USB. - - - - User Interface - Interface utilisateur - - - - Listening port - Port d'écoute - - - - Listen for connections on port: - Écouter les connexions sur le port : - - - - Proxy server / Tor - Serveur proxy / Tor - - - - Type: - Type : - - - - none - aucun - - - - SOCKS4a - SOCKS4a - - - - SOCKS5 - SOCKS5 - - - - Server hostname: - Nom du serveur : - - - - Port: - Port : - - - - Authentication - Authentification - - - - Username: - Utilisateur : - - - - Pass: - Mot de passe : - - - - Network Settings - Paramètres réseau - - - - When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. - Lorsque quelqu'un vous envoie un message, son ordinateur doit d'abord effectuer un travail. La difficulté de ce travail, par défaut, est de 1. Vous pouvez augmenter cette valeur pour les adresses que vous créez en changeant la valeur ici. Chaque nouvelle adresse que vous créez requerra à l'envoyeur de faire face à une difficulté supérieure. Il existe une exception : si vous ajoutez un ami ou une connaissance à votre carnet d'adresses, Bitmessage les notifiera automatiquement lors du prochain message que vous leur envoyez qu'ils ne doivent compléter que la charge de travail minimale : difficulté 1. - - - - Total difficulty: - Difficulté totale : - - - - Small message difficulty: - Difficulté d'un message court : - - - - The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - La 'difficulté d'un message court' affecte principalement la difficulté d'envoyer des messages courts. Doubler cette valeur rend la difficulté à envoyer un court message presque double, tandis qu'un message plus long ne sera pas réellement affecté. - - - - The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. - La 'difficulté totale' affecte le montant total de travail que l'envoyeur devra compléter. Doubler cette valeur double la charge de travail. - - - - Demanded difficulty - Difficulté demandée - - - - Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. - Vous pouvez préciser quelle charge de travail vous êtes prêt à effectuer afin d'envoyer un message à une personne. Placer cette valeur à 0 signifie que n'importe quelle valeur est acceptée. - - - - Maximum acceptable total difficulty: - Difficulté maximale acceptée : - - - - Maximum acceptable small message difficulty: - Difficulté maximale pour les messages courts acceptée : - - - - Max acceptable difficulty - Difficulté acceptée max - - - diff --git a/src/translations/bitmessage_ru.pro b/src/translations/bitmessage_ru.pro index 857fb2b8..0370961b 100644 --- a/src/translations/bitmessage_ru.pro +++ b/src/translations/bitmessage_ru.pro @@ -28,5 +28,6 @@ SOURCES = ../addresses.py\ ../bitmessageqt/settings.py\ ../bitmessageqt/specialaddressbehavior.py + TRANSLATIONS = bitmessage_ru.ts CODECFORTR = UTF-8 diff --git a/src/translations/bitmessage_ru.qm b/src/translations/bitmessage_ru.qm index d997a6880e2d6b69cbfff47041ee586591877333..2ce3c8bf2dd66f167330589e03ab1b6dbd7f2f17 100644 GIT binary patch delta 1948 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 hX6|+&v7{;Hhh@Lz4 - + + MainWindow @@ -10,6 +11,7 @@ Reply + . Ответить @@ -875,7 +877,8 @@ p, li { white-space: pre-wrap; } Mark Unread - + ... + Mark Unread @@ -1108,7 +1111,7 @@ The 'Random Number' option is selected by default but deterministic ad version ? версия ? - + Copyright © 2013 Jonathan Warren Копирайт © 2013 Джонатан Уоррен diff --git a/src/translations/bitmessage_ru_RU.pro b/src/translations/bitmessage_ru_RU.pro deleted file mode 100644 index 71cac3ae..00000000 --- a/src/translations/bitmessage_ru_RU.pro +++ /dev/null @@ -1,30 +0,0 @@ -SOURCES += ../addresses.py -SOURCES += ../bitmessagemain.py -SOURCES += ../class_addressGenerator.py -SOURCES += ../class_outgoingSynSender.py -SOURCES += ../class_receiveDataThread.py -SOURCES += ../class_sendDataThread.py -SOURCES += ../class_singleCleaner.py -SOURCES += ../class_singleListener.py -SOURCES += ../class_singleWorker.py -SOURCES += ../class_sqlThread.py -SOURCES += ../helper_bitcoin.py -SOURCES += ../helper_bootstrap.py -SOURCES += ../helper_generic.py -SOURCES += ../helper_inbox.py -SOURCES += ../helper_sent.py -SOURCES += ../helper_startup.py -SOURCES += ../shared.py -SOURCES += ../bitmessageqt/__init__.py -SOURCES += ../bitmessageqt/about.py -SOURCES += ../bitmessageqt/bitmessageui.py -SOURCES += ../bitmessageqt/help.py -SOURCES += ../bitmessageqt/iconglossary.py -SOURCES += ../bitmessageqt/newaddressdialog.py -SOURCES += ../bitmessageqt/newchandialog.py -SOURCES += ../bitmessageqt/newsubscriptiondialog.py -SOURCES += ../bitmessageqt/regenerateaddresses.py -SOURCES += ../bitmessageqt/settings.py -SOURCES += ../bitmessageqt/specialaddressbehavior.py - -TRANSLATIONS = bitmessage_ru_RU.ts diff --git a/src/translations/bitmessage_ru_RU.qm b/src/translations/bitmessage_ru_RU.qm deleted file mode 100644 index efe99c7e86971e2897b1e97556939b5fdb69cd13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55434 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 U)9{~HEd1&6Ihp@l+kEc-2a~=;F#rGn diff --git a/src/translations/bitmessage_ru_RU.ts b/src/translations/bitmessage_ru_RU.ts deleted file mode 100644 index 6895dd68..00000000 --- a/src/translations/bitmessage_ru_RU.ts +++ /dev/null @@ -1,1407 +0,0 @@ - - - - MainWindow - - - One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? - Один из Ваших адресов, %1, является устаревшим адресом версии 1. Адреса версии 1 больше не поддерживаются. Хотите ли Вы удалить его сейчас? - - - - Reply - Ответить - - - - Add sender to your Address Book - Добавить отправителя в адресную книгу - - - - Move to Trash - Поместить в корзину - - - - View HTML code as formatted text - Просмотреть HTML код как отформатированный текст - - - - Save message as... - Сохранить сообщение как ... - - - - New - Новый адрес - - - - Enable - Включить - - - - Disable - Выключить - - - - Copy address to clipboard - Скопировать адрес в буфер обмена - - - - Special address behavior... - Особое поведение адресов... - - - - Send message to this address - Отправить сообщение на этот адрес - - - - Subscribe to this address - Подписаться на рассылку с этого адреса - - - - Add New Address - Добавить новый адрес - - - - Delete - Удалить - - - - Copy destination address to clipboard - Скопировать адрес отправки в буфер обмена - - - - Force send - Форсировать отправку - - - - Add new entry - Добавить новую запись - - - - Waiting on their encryption key. Will request it again soon. - Ожидаем ключ шифрования от Вашего собеседника. Запрос будет повторен через некоторое время. - - - - Encryption key request queued. - Запрос ключа шифрования поставлен в очередь. - - - - Queued. - В очереди. - - - - Message sent. Waiting on acknowledgement. Sent at %1 - Сообщение отправлено. Ожидаем подтверждения. Отправлено в %1 - - - - Need to do work to send message. Work is queued. - Нужно провести требуемые вычисления, чтобы отправить сообщение. Вычисления ожидают очереди. - - - - Acknowledgement of the message received %1 - Сообщение доставлено %1 - - - - Broadcast queued. - Рассылка ожидает очереди. - - - - Broadcast on %1 - Рассылка на %1 - - - - Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 - Проблема: Ваш получатель требует более сложных вычислений, чем максимум, указанный в Ваших настройках. %1 - - - - Problem: The recipient's encryption key is no good. Could not encrypt message. %1 - Проблема: ключ получателя неправильный. Невозможно зашифровать сообщение. %1 - - - - Forced difficulty override. Send should start soon. - Форсирована смена сложности. Отправляем через некоторое время. - - - - Unknown status: %1 %2 - Неизвестный статус: %1 %2 - - - - Since startup on %1 - С начала работы %1 - - - - Not Connected - Не соединено - - - - Show Bitmessage - Показать Bitmessage - - - - Send - Отправка - - - - Subscribe - Подписки - - - - Address Book - Адресная книга - - - - Quit - Выйти - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. - Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. -Создайте резервную копию этого файла перед тем как будете его редактировать. - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. - Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в - %1 -Создайте резервную копию этого файла перед тем как будете его редактировать. - - - - Open keys.dat? - Открыть файл keys.dat? - - - - You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. -Создайте резервную копию этого файла перед тем как будете его редактировать. Хотели бы Вы открыть этот файл сейчас? -(пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) - - - - You may manage your keys by editing the keys.dat file stored in - %1 -It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) - Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в - %1 -Создайте резервную копию этого файла перед тем как будете его редактировать. Хотели бы Вы открыть этот файл сейчас? -(пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) - - - - Delete trash? - Очистить корзину? - - - - Are you sure you want to delete all trashed messages? - Вы уверены, что хотите очистить корзину? - - - - bad passphrase - Неподходящая секретная фраза - - - - You must type your passphrase. If you don't have one then this is not the form for you. - Вы должны ввести секретную фразу. Если Вы не хотите это делать, то Вы выбрали неправильную опцию. - - - - Processed %1 person-to-person messages. - Обработано %1 сообщений. - - - - Processed %1 broadcast messages. - Обработано %1 рассылок. - - - - Processed %1 public keys. - Обработано %1 открытых ключей. - - - - Total Connections: %1 - Всего соединений: %1 - - - - Connection lost - Соединение потеряно - - - - Connected - Соединено - - - - Message trashed - Сообщение удалено - - - - Error: Bitmessage addresses start with BM- Please check %1 - Ошибка: Bitmessage адреса начинаются с BM- Пожалуйста, проверьте %1 - - - - Error: The address %1 is not typed or copied correctly. Please check it. - Ошибка: адрес %1 внесен или скопирован неправильно. Пожалуйста, перепроверьте. - - - - Error: The address %1 contains invalid characters. Please check it. - Ошибка: адрес %1 содержит запрещенные символы. Пожалуйста, перепроверьте. - - - - Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. - Ошибка: версия адреса в %1 слишком новая. Либо Вам нужно обновить Bitmessage, либо Ваш собеседник дал неправильный адрес. - - - - Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. - Ошибка: некоторые данные, закодированные в адресе %1, слишком короткие. Возможно, что-то не так с программой Вашего собеседника. - - - - Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. - Ошибка: некоторые данные, закодированные в адресе %1, слишком длинные. Возможно, что-то не так с программой Вашего собеседника. - - - - Error: Something is wrong with the address %1. - Ошибка: что-то не так с адресом %1. - - - - Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. - Вы должны указать адрес в поле "От кого". Вы можете найти Ваш адрес во вкладе "Ваши Адреса". - - - - Sending to your address - Отправка на Ваш собственный адрес - - - - Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. - Ошибка: Один из адресов, на который Вы отправляете сообщение, %1, принадлежит Вам. К сожалению, Bitmessage не может отправлять сообщения самому себе. Попробуйте запустить второго клиента на другом компьютере или на виртуальной машине. - - - - Address version number - Версия адреса - - - - Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. - По поводу адреса %1: Bitmessage не поддерживаем адреса версии %2. Возможно, Вам нужно обновить клиент Bitmessage. - - - - Stream number - Номер потока - - - - Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. - По поводу адреса %1: Bitmessage не поддерживаем стрим номер %2. Возможно, Вам нужно обновить клиент Bitmessage. - - - - Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. - Внимание: Вы не подключены к сети. Bitmessage проделает необходимые вычисления, чтобы отправить сообщение, но не отправит его до тех пор, пока Вы не подсоединитесь к сети. - - - - Your 'To' field is empty. - Вы не заполнили поле 'Кому'. - - - - Work is queued. - Вычисления поставлены в очередь. - - - - Right click one or more entries in your address book and select 'Send message to this address'. - Нажмите правую кнопку мышки на каком-либо адресе и выберите "Отправить сообщение на этот адрес". - - - - Work is queued. %1 - Вычисления поставлены в очередь. %1 - - - - New Message - Новое сообщение - - - - From - От - - - - Address is valid. - Адрес введен правильно. - - - - Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. - Ошибка: Вы не можете добавлять один и тот же адрес в Адресную Книгу несколько раз. Просто переименуйте существующий адрес. - - - - The address you entered was invalid. Ignoring it. - Вы ввели неправильный адрес. Это адрес проигнорирован. - - - - Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. - Ошибка: Вы не можете добавлять один и тот же адрес в подписку несколько раз. Просто переименуйте существующую подписку. - - - - Restart - Перезапустить - - - - You must restart Bitmessage for the port number change to take effect. - Вы должны перезапустить Bitmessage, чтобы смена номера порта имела эффект. - - - - Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections. - Bitmessage будет использовать Ваш прокси в дальнейшем, тем не менее, мы рекомендуем перезапустить Bitmessage в ручную, чтобы закрыть уже существующие соединения. - - - - Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. - Ошибка: Вы не можете добавлять один и тот же адрес в список несколько раз. Просто переименуйте существующий адрес. - - - - Passphrase mismatch - Секретная фраза не подходит - - - - The passphrase you entered twice doesn't match. Try again. - Вы ввели две разные секретные фразы. Пожалуйста, повторите заново. - - - - Choose a passphrase - Придумайте секретную фразу - - - - You really do need a passphrase. - Вы действительно должны ввести секретную фразу. - - - - All done. Closing user interface... - Программа завершена. Закрываем пользовательский интерфейс... - - - - Address is gone - Адрес утерян - - - - Bitmessage cannot find your address %1. Perhaps you removed it? - Bitmessage не может найти Ваш адрес %1. Возможно Вы удалили его? - - - - Address disabled - Адрес выключен - - - - Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. - Ошибка: адрес, с которого Вы пытаетесь отправить, выключен. Вам нужно будет включить этот адрес во вкладке "Ваши адреса". - - - - Entry added to the Address Book. Edit the label to your liking. - Запись добавлена в Адресную Книгу. Вы можете ее отредактировать. - - - - Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. - Удалено в корзину. Чтобы попасть в корзину, Вам нужно будет найти файл корзины на диске. - - - - Save As... - Сохранить как ... - - - - Write error. - Ошибка записи. - - - - No addresses selected. - Вы не выбрали адрес. - - - - Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. - Опции были отключены, потому что ли они либо не подходят, либо еще не выполнены под Вашу операционную систему. - - - - The address should start with ''BM-'' - Адрес должен начинаться с "BM-" - - - - The address is not typed or copied correctly (the checksum failed). - Адрес введен или скопирован неверно (контрольная сумма не сходится). - - - - The version number of this address is higher than this software can support. Please upgrade Bitmessage. - Версия этого адреса более поздняя, чем Ваша программа. Пожалуйста, обновите программу Bitmessage. - - - - The address contains invalid characters. - Адрес содержит запрещенные символы. - - - - Some data encoded in the address is too short. - Данные, закодированные в адресе, слишком короткие. - - - - Some data encoded in the address is too long. - Данные, закодированные в адресе, слишком длинные. - - - - You are using TCP port %1. (This can be changed in the settings). - Вы используете TCP порт %1 (Его можно поменять в настройках). - - - - Bitmessage - Bitmessage - - - - To - Кому - - - - From - От кого - - - - Subject - Тема - - - - Received - Получено - - - - Inbox - Входящие - - - - Load from Address book - Взять из адресной книги - - - - Message: - Сообщение: - - - - Subject: - Тема: - - - - Send to one or more specific people - Отправить одному или нескольким указанным получателям - - - - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - To: - Кому: - - - - From: - От: - - - - Broadcast to everyone who is subscribed to your address - Рассылка всем, кто подписался на Ваш адрес - - - - Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. - Пожалуйста, учитывайте, что рассылки шифруются лишь Вашим адресом. Любой человек, который знает Ваш адрес, сможет прочитать Вашу рассылку. - - - - Status - Статус - - - - Sent - Отправленные - - - - Label (not shown to anyone) - Название (не показывается никому) - - - - Address - Адрес - - - - Stream - Поток - - - - Your Identities - Ваши Адреса - - - - Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. - Здесь Вы можете подписаться на рассылки от других пользователей. Все рассылки будут появляться у Вас во Входящих. Вы будете следить за всеми адресами, указанными здесь, даже если они в черном списке. - - - - Add new Subscription - Добавить новую подписку - - - - Label - Название - - - - Subscriptions - Подписки - - - - The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. - Адресная книга удобна для присвоения осмысленных имен Bitmessage адресам Ваших друзей. Вы можете добавлять новые записи с помощью кнопки "Добавить новую запись", или же правым кликом мышки на сообщении. - - - - Name or Label - Название - - - - Use a Blacklist (Allow all incoming messages except those on the Blacklist) - Использовать черный список (Разрешить все входящие сообщения, кроме указанных в черном списке) - - - - Use a Whitelist (Block all incoming messages except those on the Whitelist) - Использовать белый список (блокировать все входящие сообщения, кроме указанных в белом списке) - - - - Blacklist - Черный список - - - - Stream # - № потока - - - - Connections - Соединений - - - - Total connections: 0 - Всего соединений: 0 - - - - Since startup at asdf: - С начала работы программы в asdf: - - - - Processed 0 person-to-person message. - Обработано 0 сообщений. - - - - Processed 0 public key. - Обработано 0 открытых ключей. - - - - Processed 0 broadcast. - Обработано 0 рассылок. - - - - Network Status - Статус сети - - - - File - Файл - - - - Settings - Настройки - - - - Help - Помощь - - - - Import keys - Импортировать ключи - - - - Manage keys - Управлять ключами - - - - About - О программе - - - - Regenerate deterministic addresses - Сгенерировать заново все адреса - - - - Delete all trashed messages - Стереть все сообщения из корзины - - - - Message sent. Sent at %1 - Сообщение отправлено в %1 - - - - Chan name needed - Требуется имя chan-а - - - - You didn't enter a chan name. - Вы не ввели имя chan-a. - - - - Address already present - Адрес уже существует - - - - Could not add chan because it appears to already be one of your identities. - Не могу добавить chan, потому что это один из Ваших уже существующих адресов. - - - - Success - Отлично - - - - Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. - Chan был успешно создан. Чтобы добавить других в сhan, сообщите им имя chan-а и этот Bitmessage адрес: %1. Этот адрес также отображается во вкладке "Ваши Адреса". - - - - Address too new - Адрес слишком новый - - - - Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. - Этот Bitmessage адрес похож на правильный, но его версия этого адреса слишком новая. Возможно, Вам необходимо обновить программу Bitmessage. - - - - Address invalid - Неправильный адрес - - - - That Bitmessage address is not valid. - Этот Bitmessage адрес введен неправильно. - - - - Address does not match chan name - Адрес не сходится с именем chan-а - - - - Although the Bitmessage address you entered was valid, it doesn't match the chan name. - Вы ввели верный адрес Bitmessage, но он не сходится с именем chan-а. - - - - Successfully joined chan. - Успешно присоединились к chan-у. - - - - Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). - Bitmessage будет использовать Ваш прокси, начиная прямо сейчас. Тем не менее Вам имеет смысл перезапустить Bitmessage, чтобы закрыть уже существующие соединения. - - - - This is a chan address. You cannot use it as a pseudo-mailing list. - Это адрес chan-а. Вы не можете его использовать как адрес рассылки. - - - - Search - Поиск - - - - All - Всем - - - - Message - Текст сообщения - - - - Join / Create chan - Подсоединиться или создать chan - - - - NewAddressDialog - - - Create new Address - Создать новый адрес - - - - Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. -The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: - Здесь Вы сможете сгенерировать столько адресов сколько хотите. На самом деле, создание и выкидывание адресов даже поощряется. Вы можете сгенерировать адреса используя либо генератор случайных чисел либо придумав секретную фразу. Если Вы используете секретную фразу, то адреса будут называться "детерминистическими". Генератор случайных чисел выбран по умолчанию, однако детерминистические адреса имеют следующие плюсы и минусы по сравнению с ними: - - - - <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">Плюсы:<br/></span>Вы сможете восстановить адрес по памяти на любом компьютере<br/>Вам не нужно беспокоиться о сохранении файла keys.dat, если Вы запомнили секретную фразу<br/><span style=" font-weight:600;">Минусы:<br/></span>Вы должны запомнить (или записать) секретную фразу, если Вы хотите когда-либо восстановить Ваш адрес на другом компьютере <br/>Вы должны также запомнить версию адреса и номер потока вместе с секретной фразой<br/>Если Вы выберите слишком короткую секретную фразу, кто-нибудь в интернете сможет подобрать ключ и, как следствие, читать и отправлять от Вашего имени сообщения.</p></body></html> - - - - Use a random number generator to make an address - Использовать генератор случайных чисел для создания адреса - - - - Use a passphrase to make addresses - Использовать секретную фразу для создания адресов - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Потратить несколько лишних минут, чтобы сделать адрес(а) короче на 1 или 2 символа - - - - Make deterministic addresses - Создать детерминистический адрес - - - - Address version number: 3 - Версия адреса: 3 - - - - In addition to your passphrase, you must remember these numbers: - В дополнение к секретной фразе, Вам необходимо запомнить эти числа: - - - - Passphrase - Придумайте секретную фразу - - - - Number of addresses to make based on your passphrase: - Кол-во адресов, которые Вы хотите получить из секретной фразы: - - - - Stream number: 1 - Номер потока: 1 - - - - Retype passphrase - Повторите секретную фразу - - - - Randomly generate address - Сгенерировать случайный адрес - - - - Label (not shown to anyone except you) - Название (не показывается никому кроме Вас) - - - - Use the most available stream - Использовать наиболее доступный поток - - - - (best if this is the first of many addresses you will create) - (выберите этот вариант, если это лишь первый из многих адресов, которые Вы планируете создать) - - - - Use the same stream as an existing address - Использовать тот же поток, что и указанный существующий адрес - - - - (saves you some bandwidth and processing power) - (немного сэкономит Вам пропускную способность сети и вычислительную мощь) - - - - NewChanDialog - - - Dialog - Новый chan - - - - Create a new chan - Создать новый chan - - - - Join a chan - Присоединиться к chan - - - - <html><head/><body><p>A chan is a set of encryption keys that is shared by a group of people. The keys and bitmessage address used by a chan is generated from a human-friendly word or phrase (the chan name).</p><p>Chans are experimental and are unmoderatable.</p></body></html> - <html><head/><body><p>Chan - это набор ключей шифрования, которые известны некоторой группе людей. Ключи и Bitmessage-адрес используемый chan-ом генерируется из слова или фразы (имя chan-а).</p><p>Chan-ы - это экспериментальная новинка.</p></body></html> - - - - Chan name: - Имя chan: - - - - Chan bitmessage address: - Bitmessage адрес chan: - - - - Create a chan - Создать chan - - - - Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. - Введите имя Вашего chan-a. Если Вы выберете достаточно сложное имя для chan-а (например, сложную и необычную секретную фразу) и никто из Ваших друзей не опубликует эту фразу, то Вам chan будет надежно зашифрован. - - - - NewSubscriptionDialog - - - Add new entry - Добавить новую запись - - - - Label - Название - - - - Address - Адрес - - - - SpecialAddressBehaviorDialog - - - Special Address Behavior - Особое поведение адреса - - - - Behave as a normal address - Вести себя как обычный адрес - - - - Behave as a pseudo-mailing-list address - Вести себя как адрес псевдо-рассылки - - - - Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). - Почта, полученная на адрес псевдо-рассылки, будет автоматически разослана всем подписчикам (и поэтому будет доступна общей публике). - - - - Name of the pseudo-mailing-list: - Имя псевдо-рассылки: - - - - aboutDialog - - - About - О программе - - - - PyBitmessage - PyBitmessage - - - - version ? - версия ? - - - - Copyright © 2013 Jonathan Warren - Копирайт © 2013 Джонатан Уоррен - - - - <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - <html><head/><body><p>Программа распространяется в соответствии с лицензией MIT/X11; см. <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - - - - This is Beta software. - Это бета версия программы. - - - - helpDialog - - - Help - Помощь - - - - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> - <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> - - - - As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: - Bitmessage - общественный проект. Вы можете найти подсказки и советы на Wiki-страничке Bitmessage: - - - - iconGlossaryDialog - - - Icon Glossary - Описание значков - - - - You have no connections with other peers. - Нет соединения с другими участниками сети. - - - - You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. - На текущий момент Вы установили по-крайней мере одно исходящее соединение, но пока ни одного входящего. Ваш файрвол или маршрутизатор скорее всего не настроен на переброс входящих TCP соединений к Вашему компьютеру. Bitmessage будет прекрасно работать и без этого, но Вы могли бы помочь сети если бы разрешили и входящие соединения тоже. Это помогло бы Вам стать более важным узлом сети. - - - - You are using TCP port ?. (This can be changed in the settings). - Вы используете TCP порт ?. (Его можно поменять в настройках). - - - - You do have connections with other peers and your firewall is correctly configured. - Вы установили соединение с другими участниками сети и ваш файрвол настроен правильно. - - - - newChanDialog - - - Dialog - Новый chan - - - - Create a new chan - Создать новый chan - - - - Join a chan - Присоединиться к chan - - - - Create a chan - Создать chan - - - - Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. - Введите имя Вашего chan-a. Если Вы выберете достаточно сложное имя для chan-а (например, сложную и необычную секретную фразу) и никто из Ваших друзей не опубликует эту фразу, то Вам chan будет надежно зашифрован. - - - - Chan name: - Имя chan: - - - - <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> - <html><head/><body><p>Chan - это способ общения, когда набор ключей шифрования известен сразу целой группе людей. Ключи и Bitmessage-адрес, используемый chan-ом, генерируется из слова или фразы (имя chan-а). Чтобы отправить сообщение всем, находящимся в chan-е, отправьте обычное приватное сообщения на адрес chan-a.</p><p>Chan-ы - это экспериментальная фича.</p></body></html> - - - - Chan bitmessage address: - Bitmessage адрес chan: - - - - regenerateAddressesDialog - - - Regenerate Existing Addresses - Сгенерировать заново существующие адреса - - - - Regenerate existing addresses - Сгенерировать заново существующие адреса - - - - Passphrase - Секретная фраза - - - - Number of addresses to make based on your passphrase: - Кол-во адресов, которые Вы хотите получить из Вашей секретной фразы: - - - - Address version Number: - Версия адреса: - - - - 3 - 3 - - - - Stream number: - Номер потока: - - - - 1 - 1 - - - - Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Потратить несколько лишних минут, чтобы сделать адрес(а) короче на 1 или 2 символа - - - - You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. - Вы должны кликнуть эту галочку (или не кликать) точно также как Вы сделали в самый первый раз, когда создавали Ваши адреса. - - - - If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. - Если Вы ранее делали детерминистические адреса, но случайно потеряли их, Вы можете их восстановить здесь. Если же Вы использовали генератор случайных чисел, чтобы создать Ваши адреса, то Вы не сможете их здесь восстановить. - - - - settingsDialog - - - Settings - Настройки - - - - Start Bitmessage on user login - Запускать Bitmessage при входе в систему - - - - Start Bitmessage in the tray (don't show main window) - Запускать Bitmessage в свернутом виде (не показывать главное окно) - - - - Minimize to tray - Сворачивать в трей - - - - Show notification when message received - Показывать уведомления при получении новых сообщений - - - - Run in Portable Mode - Запустить в переносном режиме - - - - In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. - В переносном режиме, все сообщения и конфигурационные файлы сохраняются в той же самой папке что и сама программа. Это делает более удобным использование Bitmessage с USB-флэшки. - - - - User Interface - Пользовательские - - - - Listening port - Порт прослушивания - - - - Listen for connections on port: - Прослушивать соединения на порту: - - - - Proxy server / Tor - Прокси сервер / Tor - - - - Type: - Тип: - - - - none - отсутствует - - - - SOCKS4a - SOCKS4a - - - - SOCKS5 - SOCKS5 - - - - Server hostname: - Адрес сервера: - - - - Port: - Порт: - - - - Authentication - Авторизация - - - - Username: - Имя пользователя: - - - - Pass: - Прль: - - - - Network Settings - Сетевые настройки - - - - When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. - Когда кто-либо отправляет Вам сообщение, его компьютер должен сперва решить определенную вычислительную задачу. Сложность этой задачи по умолчанию равна 1. Вы можете повысить эту сложность для новых адресов, которые Вы создадите, здесь. Таким образом, любые новые адреса, которые Вы создадите, могут требовать от отправителей сложность большую чем 1. Однако, есть одно исключение: если Вы специально добавите Вашего собеседника в адресную книгу, то Bitmessage автоматически уведомит его о том, что для него минимальная сложность будет составлять всегда всего лишь 1. - - - - Total difficulty: - Общая сложность: - - - - Small message difficulty: - Сложность для маленьких сообщений: - - - - The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - "Сложность для маленьких сообщений" влияет исключительно на небольшие сообщения. Увеличив это число в два раза, вы сделаете отправку маленьких сообщений в два раза сложнее, в то время как сложность отправки больших сообщений не изменится. - - - - The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. - "Общая сложность" влияет на абсолютное количество вычислений, которые отправитель должен провести, чтобы отправить сообщение. Увеличив это число в два раза, вы увеличите в два раза объем требуемых вычислений. - - - - Demanded difficulty - Требуемая сложность - - - - Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. - Здесь Вы можете установить максимальную вычислительную работу, которую Вы согласны проделать, чтобы отправить сообщение другому пользователю. Ноль означает, чтобы любое значение допустимо. - - - - Maximum acceptable total difficulty: - Макс допустимая общая сложность: - - - - Maximum acceptable small message difficulty: - Макс допустимая сложность для маленький сообщений: - - - - Max acceptable difficulty - Макс допустимая сложность - - - - Listen for incoming connections when using proxy - Прослушивать входящие соединения если используется прокси - - - From 80744f0e0325d557d5a7a09f199c481f68c898e9 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Wed, 21 Aug 2013 16:59:21 +0200 Subject: [PATCH 33/50] test commit --- src/commit-test_ignore/ignoreme.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/commit-test_ignore/ignoreme.txt diff --git a/src/commit-test_ignore/ignoreme.txt b/src/commit-test_ignore/ignoreme.txt new file mode 100644 index 00000000..1bb1ff70 --- /dev/null +++ b/src/commit-test_ignore/ignoreme.txt @@ -0,0 +1 @@ +zrdz \ No newline at end of file From 9059a5189fde223f565146a2d29588797c79a68e Mon Sep 17 00:00:00 2001 From: sendiulo Date: Wed, 21 Aug 2013 17:04:43 +0200 Subject: [PATCH 34/50] test commit 2 --- src/commit-test_ignore/ignoreme.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/commit-test_ignore/ignoreme.txt diff --git a/src/commit-test_ignore/ignoreme.txt b/src/commit-test_ignore/ignoreme.txt deleted file mode 100644 index 1bb1ff70..00000000 --- a/src/commit-test_ignore/ignoreme.txt +++ /dev/null @@ -1 +0,0 @@ -zrdz \ No newline at end of file From da93d1d8b469d62bb8533d7b172364811ddb1a22 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Sat, 24 Aug 2013 09:07:46 +0200 Subject: [PATCH 35/50] Combobox for language selection. Unfortunately, I didn't manage to automatically provide all the languages that are available as *.qm files. By now we have to manually set the combobox items and the list for the languages in the bitmessageqt/__init__.py --- src/bitmessageqt/__init__.py | 72 ++++++------ src/bitmessageqt/settings.py | 100 ++++++++++------- src/bitmessageqt/settings.ui | 105 ++++++++++++------ src/helper_startup.py | 10 +- src/translations/bitmessage_en_pirate.ts | 2 +- ...tmessage_fr.pro~HEAD => bitmessage_fr.pro} | 0 6 files changed, 176 insertions(+), 113 deletions(-) rename src/translations/{bitmessage_fr.pro~HEAD => bitmessage_fr.pro} (100%) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 1cb13e34..06010f7c 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2031,10 +2031,10 @@ class MyForm(QtGui.QMainWindow): self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked())) shared.config.set('bitmessagesettings', 'willinglysendtomobile', str( self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) - shared.config.set('bitmessagesettings', 'overridelocale', str( - self.settingsDialogInstance.ui.checkBoxOverrideLocale.isChecked())) - shared.config.set('bitmessagesettings', 'userlocale', str( - self.settingsDialogInstance.ui.lineEditUserLocale.text())) + + lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex()) + shared.config.set('bitmessagesettings', 'userlocale', languages[lang_ind]) + if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()): if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( @@ -3045,10 +3045,13 @@ class settingsDialog(QtGui.QDialog): shared.config.getboolean('bitmessagesettings', 'startintray')) self.ui.checkBoxWillinglySendToMobile.setChecked( shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) - self.ui.checkBoxOverrideLocale.setChecked( - shared.safeConfigGetBoolean('bitmessagesettings', 'overridelocale')) - self.ui.lineEditUserLocale.setText(str( - shared.config.get('bitmessagesettings', 'userlocale'))) + + global languages + languages = ['system','en','eo','fr','de','es','ru','en_pirate'] + + user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) + self.ui.languageComboBox.setCurrentIndex(languages.index(user_countrycode)) + if shared.appdata == '': self.ui.checkBoxPortableMode.setChecked(True) if 'darwin' in sys.platform: @@ -3413,40 +3416,45 @@ def run(): app = QtGui.QApplication(sys.argv) translator = QtCore.QTranslator() - local_countrycode = str(locale.getdefaultlocale()[0]) - locale_lang = local_countrycode[0:2] + locale_countrycode = str(locale.getdefaultlocale()[0]) + locale_lang = locale_countrycode[0:2] user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) user_lang = user_countrycode[0:2] translation_path = "translations/bitmessage_" - if shared.config.getboolean('bitmessagesettings', 'overridelocale') == True: - # try the userinput if "overwridelanguage" is checked + if shared.config.get('bitmessagesettings', 'userlocale') == 'system': + # try to detect the users locale otherwise fallback to English try: - # check if the user input is a valid translation file - # this would also capture weird "countrycodes" like "en_pirate" or just "pirate" + # try the users full locale, e.g. 'en_US': + # since we usually only provide languages, not localozations + # this will usually fail + translator.load(translation_path + locale_countrycode) + except: + try: + # try the users locale language, e.g. 'en': + # since we usually only provide languages, not localozations + # this will usually succeed + translator.load(translation_path + locale_lang) + except: + # as English is already the default language, we don't + # need to do anything. No need to translate. + pass + else: + try: + # check if the user input is a valid translation file: + # since user_countrycode will be usually set by the combobox + # it will usually just be a language code translator.load(translation_path + user_countrycode) except: try: - # check if the user lang is a valid translation file - # in some cases this won't make sense, e.g. trying "pi" from "pirate" + # check if the user lang is a valid translation file: + # this is only needed if the user manually set his 'userlocale' + # in the keys.dat to a countrycode (e.g. 'de_CH') translator.load(translation_path + user_lang) except: - # The above is not compatible with all versions of OSX. - # Don't have language either, default to 'Merica USA! USA! - translator.load("translations/bitmessage_en_US") # Default to english. - else: - # try the userinput if "overridelanguage" is checked - try: - # check if the user input is a valid translation file - translator.load(translation_path + local_countrycode) - except: - try: - # check if the user lang is a valid translation file - translator.load(translation_path + locale_lang) - except: - # The above is not compatible with all versions of OSX. - # Don't have language either, default to 'Merica USA! USA! - translator.load("translations/bitmessage_en_US") # Default to english. + # as English is already the default language, we don't + # need to do anything. No need to translate. + pass QtGui.QApplication.installTranslator(translator) app.setStyleSheet("QStatusBar::item { border: 0px solid black }") diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index 8d2cf677..bd7d0240 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'settings.ui' # -# Created: Wed Aug 14 18:31:34 2013 -# by: PyQt4 UI code generator 4.10 +# Created: Sat Aug 24 08:28:46 2013 +# by: PyQt4 UI code generator 4.10.2 # # WARNING! All changes made in this file will be lost! @@ -41,63 +41,66 @@ class Ui_settingsDialog(object): self.tabUserInterface.setObjectName(_fromUtf8("tabUserInterface")) self.gridLayout_5 = QtGui.QGridLayout(self.tabUserInterface) self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) - self.labelSettingsNote = QtGui.QLabel(self.tabUserInterface) - self.labelSettingsNote.setText(_fromUtf8("")) - self.labelSettingsNote.setWordWrap(True) - self.labelSettingsNote.setObjectName(_fromUtf8("labelSettingsNote")) - self.gridLayout_5.addWidget(self.labelSettingsNote, 7, 0, 1, 1) - spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_5.addItem(spacerItem, 8, 0, 1, 1) - self.checkBoxStartInTray = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxStartInTray.setObjectName(_fromUtf8("checkBoxStartInTray")) - self.gridLayout_5.addWidget(self.checkBoxStartInTray, 1, 0, 1, 1) - self.checkBoxShowTrayNotifications = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxShowTrayNotifications.setObjectName(_fromUtf8("checkBoxShowTrayNotifications")) - self.gridLayout_5.addWidget(self.checkBoxShowTrayNotifications, 3, 0, 1, 1) self.checkBoxMinimizeToTray = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxMinimizeToTray.setChecked(True) self.checkBoxMinimizeToTray.setObjectName(_fromUtf8("checkBoxMinimizeToTray")) self.gridLayout_5.addWidget(self.checkBoxMinimizeToTray, 2, 0, 1, 1) - self.label_7 = QtGui.QLabel(self.tabUserInterface) - self.label_7.setWordWrap(True) - self.label_7.setObjectName(_fromUtf8("label_7")) - self.gridLayout_5.addWidget(self.label_7, 5, 0, 1, 1) + spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_5.addItem(spacerItem, 10, 0, 1, 1) self.checkBoxStartOnLogon = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxStartOnLogon.setObjectName(_fromUtf8("checkBoxStartOnLogon")) self.gridLayout_5.addWidget(self.checkBoxStartOnLogon, 0, 0, 1, 1) + self.checkBoxShowTrayNotifications = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxShowTrayNotifications.setObjectName(_fromUtf8("checkBoxShowTrayNotifications")) + self.gridLayout_5.addWidget(self.checkBoxShowTrayNotifications, 3, 0, 1, 1) self.checkBoxPortableMode = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxPortableMode.setObjectName(_fromUtf8("checkBoxPortableMode")) self.gridLayout_5.addWidget(self.checkBoxPortableMode, 4, 0, 1, 1) + self.checkBoxStartInTray = QtGui.QCheckBox(self.tabUserInterface) + self.checkBoxStartInTray.setObjectName(_fromUtf8("checkBoxStartInTray")) + self.gridLayout_5.addWidget(self.checkBoxStartInTray, 1, 0, 1, 1) + self.PortableModeDescription = QtGui.QLabel(self.tabUserInterface) + self.PortableModeDescription.setWordWrap(True) + self.PortableModeDescription.setObjectName(_fromUtf8("PortableModeDescription")) + self.gridLayout_5.addWidget(self.PortableModeDescription, 5, 0, 1, 2) self.checkBoxWillinglySendToMobile = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxWillinglySendToMobile.setObjectName(_fromUtf8("checkBoxWillinglySendToMobile")) - self.gridLayout_5.addWidget(self.checkBoxWillinglySendToMobile, 6, 0, 1, 1) - self.checkBoxOverrideLocale = QtGui.QCheckBox(self.tabUserInterface) - self.checkBoxOverrideLocale.setObjectName(_fromUtf8("checkBoxOverrideLocale")) - self.gridLayout_5.addWidget(self.checkBoxOverrideLocale, 7, 0, 1, 1) - self.lineEditUserLocale = QtGui.QLineEdit(self.tabUserInterface) - self.lineEditUserLocale.setObjectName(_fromUtf8("lineEditUserLocale")) - self.lineEditUserLocale.setMaximumSize(QtCore.QSize(70, 16777215)) - self.lineEditUserLocale.setEnabled(False) - self.gridLayout_5.addWidget(self.lineEditUserLocale, 7, 1, 1, 1) + self.gridLayout_5.addWidget(self.checkBoxWillinglySendToMobile, 6, 0, 1, 2) + self.groupBox = QtGui.QGroupBox(self.tabUserInterface) + self.groupBox.setObjectName(_fromUtf8("groupBox")) + self.horizontalLayout_2 = QtGui.QHBoxLayout(self.groupBox) + self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) + self.languageComboBox = QtGui.QComboBox(self.groupBox) + self.languageComboBox.setObjectName(_fromUtf8("languageComboBox")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) + self.horizontalLayout_2.addWidget(self.languageComboBox) + self.gridLayout_5.addWidget(self.groupBox, 10, 1, 1, 1) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) self.tabNetworkSettings = QtGui.QWidget() self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings")) self.gridLayout_4 = QtGui.QGridLayout(self.tabNetworkSettings) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) - self.groupBox = QtGui.QGroupBox(self.tabNetworkSettings) - self.groupBox.setObjectName(_fromUtf8("groupBox")) - self.gridLayout_3 = QtGui.QGridLayout(self.groupBox) + self.groupBox1 = QtGui.QGroupBox(self.tabNetworkSettings) + self.groupBox1.setObjectName(_fromUtf8("groupBox1")) + self.gridLayout_3 = QtGui.QGridLayout(self.groupBox1) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) spacerItem1 = QtGui.QSpacerItem(125, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem1, 0, 0, 1, 1) - self.label = QtGui.QLabel(self.groupBox) + self.label = QtGui.QLabel(self.groupBox1) self.label.setObjectName(_fromUtf8("label")) self.gridLayout_3.addWidget(self.label, 0, 1, 1, 1) - self.lineEditTCPPort = QtGui.QLineEdit(self.groupBox) + self.lineEditTCPPort = QtGui.QLineEdit(self.groupBox1) self.lineEditTCPPort.setMaximumSize(QtCore.QSize(70, 16777215)) self.lineEditTCPPort.setObjectName(_fromUtf8("lineEditTCPPort")) self.gridLayout_3.addWidget(self.lineEditTCPPort, 0, 2, 1, 1) - self.gridLayout_4.addWidget(self.groupBox, 0, 0, 1, 1) + self.gridLayout_4.addWidget(self.groupBox1, 0, 0, 1, 1) self.groupBox_2 = QtGui.QGroupBox(self.tabNetworkSettings) self.groupBox_2.setObjectName(_fromUtf8("groupBox_2")) self.gridLayout_2 = QtGui.QGridLayout(self.groupBox_2) @@ -313,7 +316,6 @@ class Ui_settingsDialog(object): self.tabWidgetSettings.setCurrentIndex(0) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), settingsDialog.accept) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), settingsDialog.reject) - QtCore.QObject.connect(self.checkBoxOverrideLocale, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditUserLocale.setEnabled) QtCore.QObject.connect(self.checkBoxAuthentication, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditSocksUsername.setEnabled) QtCore.QObject.connect(self.checkBoxAuthentication, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditSocksPassword.setEnabled) QtCore.QMetaObject.connectSlotsByName(settingsDialog) @@ -333,16 +335,24 @@ class Ui_settingsDialog(object): def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(_translate("settingsDialog", "Settings", None)) - self.checkBoxStartInTray.setText(_translate("settingsDialog", "Start Bitmessage in the tray (don\'t show main window)", None)) - self.checkBoxShowTrayNotifications.setText(_translate("settingsDialog", "Show notification when message received", None)) self.checkBoxMinimizeToTray.setText(_translate("settingsDialog", "Minimize to tray", None)) - self.label_7.setText(_translate("settingsDialog", "In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive.", None)) self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None)) + self.checkBoxShowTrayNotifications.setText(_translate("settingsDialog", "Show notification when message received", None)) self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None)) + self.checkBoxStartInTray.setText(_translate("settingsDialog", "Start Bitmessage in the tray (don\'t show main window)", None)) + self.PortableModeDescription.setText(_translate("settingsDialog", "In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive.", None)) self.checkBoxWillinglySendToMobile.setText(_translate("settingsDialog", "Willingly include unencrypted destination address when sending to a mobile device", None)) - self.checkBoxOverrideLocale.setText(_translate("settingsDialog", "Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'):", None)) + self.groupBox.setTitle(_translate("settingsDialog", "Interface Language", None)) + self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system")) + self.languageComboBox.setItemText(1, _translate("settingsDialog", "English", "en")) + self.languageComboBox.setItemText(2, _translate("settingsDialog", "Esperanto", "eo")) + self.languageComboBox.setItemText(3, _translate("settingsDialog", "French", "fr")) + self.languageComboBox.setItemText(4, _translate("settingsDialog", "German", "de")) + self.languageComboBox.setItemText(5, _translate("settingsDialog", "Spanish", "es")) + self.languageComboBox.setItemText(6, _translate("settingsDialog", "Russian", "ru")) + self.languageComboBox.setItemText(7, _translate("settingsDialog", "Pirate English", "en_pirate")) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) - self.groupBox.setTitle(_translate("settingsDialog", "Listening port", None)) + self.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None)) self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) self.groupBox_2.setTitle(_translate("settingsDialog", "Proxy server / Tor", None)) self.label_2.setText(_translate("settingsDialog", "Type:", None)) @@ -377,3 +387,13 @@ class Ui_settingsDialog(object): self.radioButtonNamecoinNmcontrol.setText(_translate("settingsDialog", "NMControl", None)) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNamecoin), _translate("settingsDialog", "Namecoin integration", None)) + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + settingsDialog = QtGui.QDialog() + ui = Ui_settingsDialog() + ui.setupUi(settingsDialog) + settingsDialog.show() + sys.exit(app.exec_()) + diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index 0ca22088..abacd30f 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -37,17 +37,17 @@ User Interface - - + + - + Minimize to tray - + true - + Qt::Vertical @@ -60,10 +60,10 @@ - - + + - Start Bitmessage in the tray (don't show main window) + Start Bitmessage on user login @@ -74,18 +74,22 @@ - - + + - Minimize to tray - - - true + Run in Portable Mode - - + + + + Start Bitmessage in the tray (don't show main window) + + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. @@ -94,27 +98,66 @@ - - - - Start Bitmessage on user login - - - - - - - Run in Portable Mode - - - - + Willingly include unencrypted destination address when sending to a mobile device + + + + Interface Language + + + + + + + System Settings + + + + + English + + + + + Esperanto + + + + + French + + + + + German + + + + + Spanish + + + + + Russian + + + + + Pirate English + + + + + + + diff --git a/src/helper_startup.py b/src/helper_startup.py index 67ae8d8c..24dc0156 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -70,15 +70,7 @@ def loadConfig(): shared.config.set( 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') shared.config.set('bitmessagesettings', 'dontconnect', 'true') - shared.config.set('bitmessagesettings', 'overridelocale', 'false') - try: - # this should set the userdefined locale to the default locale - # like this, the user will know his default locale - shared.config.set('bitmessagesettings', 'userlocale', str(locale.getdefaultlocale()[0])) - except: - # if we cannot determine the default locale let's default to english - # they user might use this as an country code - shared.config.set('bitmessagesettings', 'userlocale', 'en_US') + shared.config.set('bitmessagesettings', 'userlocale', 'system') ensureNamecoinOptions() if storeConfigFilesInSameDirectoryAsProgramByDefault: diff --git a/src/translations/bitmessage_en_pirate.ts b/src/translations/bitmessage_en_pirate.ts index a0311eba..496b7d64 100644 --- a/src/translations/bitmessage_en_pirate.ts +++ b/src/translations/bitmessage_en_pirate.ts @@ -1,6 +1,6 @@ - + MainWindow diff --git a/src/translations/bitmessage_fr.pro~HEAD b/src/translations/bitmessage_fr.pro similarity index 100% rename from src/translations/bitmessage_fr.pro~HEAD rename to src/translations/bitmessage_fr.pro From a36c696f9dbcadad53529b2161dd352164b0b777 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Sat, 24 Aug 2013 09:21:59 +0200 Subject: [PATCH 36/50] Now the userlocale can be set manually in the keys.dat without being overwritten (e.g. for importing language files that aren't already in the main code). --- src/bitmessageqt/__init__.py | 12 ++++++++---- src/bitmessageqt/settings.py | 4 +++- src/bitmessageqt/settings.ui | 5 +++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 06010f7c..3e513295 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2033,7 +2033,8 @@ class MyForm(QtGui.QMainWindow): self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex()) - shared.config.set('bitmessagesettings', 'userlocale', languages[lang_ind]) + if not languages[lang_ind] == 'other': + shared.config.set('bitmessagesettings', 'userlocale', languages[lang_ind]) if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()): if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): @@ -3047,10 +3048,13 @@ class settingsDialog(QtGui.QDialog): shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) global languages - languages = ['system','en','eo','fr','de','es','ru','en_pirate'] - + languages = ['system','en','eo','fr','de','es','ru','en_pirate','other'] user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) - self.ui.languageComboBox.setCurrentIndex(languages.index(user_countrycode)) + if user_countrycode in languages: + curr_index = languages.index(user_countrycode) + else: + curr_index = languages.index('other') + self.ui.languageComboBox.setCurrentIndex(curr_index) if shared.appdata == '': self.ui.checkBoxPortableMode.setChecked(True) diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index bd7d0240..ad597773 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'settings.ui' # -# Created: Sat Aug 24 08:28:46 2013 +# Created: Sat Aug 24 09:19:58 2013 # by: PyQt4 UI code generator 4.10.2 # # WARNING! All changes made in this file will be lost! @@ -80,6 +80,7 @@ class Ui_settingsDialog(object): self.languageComboBox.addItem(_fromUtf8("")) self.languageComboBox.addItem(_fromUtf8("")) self.languageComboBox.addItem(_fromUtf8("")) + self.languageComboBox.addItem(_fromUtf8("")) self.horizontalLayout_2.addWidget(self.languageComboBox) self.gridLayout_5.addWidget(self.groupBox, 10, 1, 1, 1) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) @@ -351,6 +352,7 @@ class Ui_settingsDialog(object): self.languageComboBox.setItemText(5, _translate("settingsDialog", "Spanish", "es")) self.languageComboBox.setItemText(6, _translate("settingsDialog", "Russian", "ru")) self.languageComboBox.setItemText(7, _translate("settingsDialog", "Pirate English", "en_pirate")) + self.languageComboBox.setItemText(8, _translate("settingsDialog", "Other (set in keys.dat)", "other")) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) self.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None)) self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index abacd30f..eec38d8d 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -153,6 +153,11 @@ Pirate English + + + Other (set in keys.dat) + + From 0132db33dca24840fce680050fbbe77910715b38 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sat, 24 Aug 2013 19:40:48 -0400 Subject: [PATCH 37/50] show number of each message type processed in the API command clientStatus --- src/bitmessagemain.py | 8 +++++++- src/bitmessageqt/__init__.py | 33 +++++++++++++++------------------ src/class_receiveDataThread.py | 10 +++++++--- src/shared.py | 4 ++++ 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index fd233bd5..8443a59f 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -849,7 +849,13 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): data += ']}' return data elif method == 'clientStatus': - return '{ "networkConnections" : "%s" }' % str(len(shared.connectedHostsList)) + if len(shared.connectedHostsList) == 0: + networkStatus = 'notConnected' + elif len(shared.connectedHostsList) > 0 and not shared.clientHasReceivedIncomingConnections: + networkStatus = 'connectedButHaveNotReceivedIncomingConnections' + else: + networkStatus = 'connectedAndReceivingIncomingConnections' + return json.dumps({'networkConnections':len(shared.connectedHostsList),'numberOfMessagesProcessed':shared.numberOfMessagesProcessed, 'numberOfBroadcastsProcessed':shared.numberOfBroadcastsProcessed, 'numberOfPubkeysProcessed':shared.numberOfPubkeysProcessed, 'networkStatus':networkStatus}, indent=4, separators=(',', ': ')) else: return 'API Error 0020: Invalid method: %s' % method diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 378989e0..28942f10 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -417,11 +417,11 @@ class MyForm(QtGui.QMainWindow): QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "updateNetworkStatusTab()"), self.updateNetworkStatusTab) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( - "incrementNumberOfMessagesProcessed()"), self.incrementNumberOfMessagesProcessed) + "updateNumberOfMessagesProcessed()"), self.updateNumberOfMessagesProcessed) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( - "incrementNumberOfPubkeysProcessed()"), self.incrementNumberOfPubkeysProcessed) + "updateNumberOfPubkeysProcessed()"), self.updateNumberOfPubkeysProcessed) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( - "incrementNumberOfBroadcastsProcessed()"), self.incrementNumberOfBroadcastsProcessed) + "updateNumberOfBroadcastsProcessed()"), self.updateNumberOfBroadcastsProcessed) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "setStatusIcon(PyQt_PyObject)"), self.setStatusIcon) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( @@ -1260,20 +1260,17 @@ class MyForm(QtGui.QMainWindow): self.actionShow.setChecked(not self.actionShow.isChecked()) self.appIndicatorShowOrHideWindow() - def incrementNumberOfMessagesProcessed(self): - self.numberOfMessagesProcessed += 1 + def updateNumberOfMessagesProcessed(self): self.ui.labelMessageCount.setText(_translate( - "MainWindow", "Processed %1 person-to-person messages.").arg(str(self.numberOfMessagesProcessed))) + "MainWindow", "Processed %1 person-to-person messages.").arg(str(shared.numberOfMessagesProcessed))) - def incrementNumberOfBroadcastsProcessed(self): - self.numberOfBroadcastsProcessed += 1 + def updateNumberOfBroadcastsProcessed(self): self.ui.labelBroadcastCount.setText(_translate( - "MainWindow", "Processed %1 broadcast messages.").arg(str(self.numberOfBroadcastsProcessed))) + "MainWindow", "Processed %1 broadcast messages.").arg(str(shared.numberOfBroadcastsProcessed))) - def incrementNumberOfPubkeysProcessed(self): - self.numberOfPubkeysProcessed += 1 + def updateNumberOfPubkeysProcessed(self): self.ui.labelPubkeyCount.setText(_translate( - "MainWindow", "Processed %1 public keys.").arg(str(self.numberOfPubkeysProcessed))) + "MainWindow", "Processed %1 public keys.").arg(str(shared.numberOfPubkeysProcessed))) def updateNetworkStatusTab(self): # print 'updating network status tab' @@ -3363,12 +3360,12 @@ class UISignaler(Thread,QThread): toAddress, fromLabel, fromAddress, subject, message, ackdata) elif command == 'updateNetworkStatusTab': self.emit(SIGNAL("updateNetworkStatusTab()")) - elif command == 'incrementNumberOfMessagesProcessed': - self.emit(SIGNAL("incrementNumberOfMessagesProcessed()")) - elif command == 'incrementNumberOfPubkeysProcessed': - self.emit(SIGNAL("incrementNumberOfPubkeysProcessed()")) - elif command == 'incrementNumberOfBroadcastsProcessed': - self.emit(SIGNAL("incrementNumberOfBroadcastsProcessed()")) + elif command == 'updateNumberOfMessagesProcessed': + self.emit(SIGNAL("updateNumberOfMessagesProcessed()")) + elif command == 'updateNumberOfPubkeysProcessed': + self.emit(SIGNAL("updateNumberOfPubkeysProcessed()")) + elif command == 'updateNumberOfBroadcastsProcessed': + self.emit(SIGNAL("updateNumberOfBroadcastsProcessed()")) elif command == 'setStatusIcon': self.emit(SIGNAL("setStatusIcon(PyQt_PyObject)"), data) elif command == 'rerenderInboxFromLabels': diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index 6adfe490..19df1bdc 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -256,6 +256,7 @@ class receiveDataThread(threading.Thread): def connectionFullyEstablished(self): self.connectionIsOrWasFullyEstablished = True if not self.initiatedConnection: + shared.clientHasReceivedIncomingConnections = True shared.UISignalQueue.put(('setStatusIcon', 'green')) self.sock.settimeout( 600) # We'll send out a pong every 5 minutes to make sure the connection stays alive if there has been no other traffic to send lately. @@ -392,8 +393,9 @@ class receiveDataThread(threading.Thread): objectType, self.streamNumber, data, embeddedTime) shared.inventoryLock.release() self.broadcastinv(self.inventoryHash) + shared.numberOfBroadcastsProcessed += 1 shared.UISignalQueue.put(( - 'incrementNumberOfBroadcastsProcessed', 'no data')) + 'updateNumberOfBroadcastsProcessed', 'no data')) self.processbroadcast( readPosition, data) # When this function returns, we will have either successfully processed this broadcast because we are interested in it, ignored it because we aren't interested in it, or found problem with the broadcast that warranted ignoring it. @@ -760,8 +762,9 @@ class receiveDataThread(threading.Thread): objectType, self.streamNumber, data, embeddedTime) shared.inventoryLock.release() self.broadcastinv(self.inventoryHash) + shared.numberOfMessagesProcessed += 1 shared.UISignalQueue.put(( - 'incrementNumberOfMessagesProcessed', 'no data')) + 'updateNumberOfMessagesProcessed', 'no data')) self.processmsg( readPosition, data) # When this function returns, we will have either successfully processed the message bound for us, ignored it because it isn't bound for us, or found problem with the message that warranted ignoring it. @@ -1178,8 +1181,9 @@ class receiveDataThread(threading.Thread): objectType, self.streamNumber, data, embeddedTime) shared.inventoryLock.release() self.broadcastinv(inventoryHash) + shared.numberOfPubkeysProcessed += 1 shared.UISignalQueue.put(( - 'incrementNumberOfPubkeysProcessed', 'no data')) + 'updateNumberOfPubkeysProcessed', 'no data')) self.processpubkey(data) diff --git a/src/shared.py b/src/shared.py index d2b82d11..fb19da26 100644 --- a/src/shared.py +++ b/src/shared.py @@ -64,6 +64,10 @@ successfullyDecryptMessageTimings = [ apiAddressGeneratorReturnQueue = Queue.Queue( ) # The address generator thread uses this queue to get information back to the API thread. ackdataForWhichImWatching = {} +clientHasReceivedIncomingConnections = False #used by API command clientStatus +numberOfMessagesProcessed = 0 +numberOfBroadcastsProcessed = 0 +numberOfPubkeysProcessed = 0 #If changed, these values will cause particularly unexpected behavior: You won't be able to either send or receive messages because the proof of work you do (or demand) won't match that done or demanded by others. Don't change them! networkDefaultProofOfWorkNonceTrialsPerByte = 320 #The amount of work that should be performed (and demanded) per byte of the payload. Double this number to double the work. From 82db79ca397aeecf9a9ed2707ca5d9b12dec1e1b Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sat, 24 Aug 2013 20:23:49 -0400 Subject: [PATCH 38/50] removed option from previous commit which allowed user-settable maximum network message size pending further discussion --- src/class_receiveDataThread.py | 13 +------------ src/helper_startup.py | 4 ---- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index f014aedd..19df1bdc 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -45,17 +45,6 @@ class receiveDataThread(threading.Thread): self.peer = shared.Peer(HOST, port) self.streamNumber = streamNumber self.payloadLength = 0 # This is the protocol payload length thus it doesn't include the 24 byte message header - self.maxMessageLength = 180000000 # maximum length of a message in bytes, default 180MB - - # get the maximum message length from the settings - try: - maxMsgLen = shared.config.getint( - 'bitmessagesettings', 'maxmessagelength') - if maxMsgLen > 32768: # minimum of 32K - self.maxMessageLength = maxMsgLen - except Exception: - pass - self.objectsThatWeHaveYetToCheckAndSeeWhetherWeAlreadyHave = {} self.selfInitiatedConnections = selfInitiatedConnections shared.connectedHostsList[ @@ -149,7 +138,7 @@ class receiveDataThread(threading.Thread): shared.knownNodesLock.acquire() shared.knownNodes[self.streamNumber][self.peer] = int(time.time()) shared.knownNodesLock.release() - if self.payloadLength <= self.maxMessageLength: # If the size of the message is greater than the maximum, ignore it. + if self.payloadLength <= 180000000: # If the size of the message is greater than 180MB, ignore it. (I get memory errors when processing messages much larger than this though it is concievable that this value will have to be lowered if some systems are less tolarant of large messages.) remoteCommand = self.data[4:16] with shared.printLock: print 'remoteCommand', repr(remoteCommand.replace('\x00', '')), ' from', self.peer diff --git a/src/helper_startup.py b/src/helper_startup.py index 8b4c2111..256dbcaa 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -69,11 +69,7 @@ def loadConfig(): shared.config.set( 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') shared.config.set('bitmessagesettings', 'dontconnect', 'true') -<<<<<<< HEAD ensureNamecoinOptions() -======= - shared.config.set('bitmessagesettings', 'maxMessageLength', '180000000') ->>>>>>> 3ff76875aa5d8b8dbadef48e28cc7e919b9042b3 if storeConfigFilesInSameDirectoryAsProgramByDefault: # Just use the same directory as the program and forget about From f0557e3987dab9c4b2ed34ada3e368be29b89b90 Mon Sep 17 00:00:00 2001 From: Rob Speed Date: Sun, 25 Aug 2013 04:36:43 -0400 Subject: [PATCH 39/50] Added Sip and PyQt to includes This should make it possible to distribute a DMG file. --- src/build_osx.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/build_osx.py b/src/build_osx.py index 901d1ca6..fd1bbcf9 100644 --- a/src/build_osx.py +++ b/src/build_osx.py @@ -5,12 +5,15 @@ version = "0.3.4" mainscript = ["bitmessagemain.py"] setup( - name = name, + name = name, version = version, app = mainscript, setup_requires = ["py2app"], - options = dict(py2app=dict( - resources = ["images"], - iconfile = "images/bitmessage.icns" - )) + options = dict( + py2app = dict( + resources = ["images"], + includes = ['sip', 'PyQt4._qt'], + iconfile = "images/bitmessage.icns" + ) + ) ) From f0ba10e2b9275325918e932603ca5d32c4ad6217 Mon Sep 17 00:00:00 2001 From: Rob Speed Date: Sun, 25 Aug 2013 04:43:32 -0400 Subject: [PATCH 40/50] Removed sudo when building DMG There's no reason that needs to be run as a superuser. --- osx.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 osx.sh diff --git a/osx.sh b/osx.sh old mode 100644 new mode 100755 index e5d2e371..2f59f446 --- a/osx.sh +++ b/osx.sh @@ -12,12 +12,12 @@ if [[ -z "$1" ]]; then exit fi -echo "Creating OS X packages for Bitmessage. This script will ask for sudo to create the dmg volume" +echo "Creating OS X packages for Bitmessage." cd src && python build_osx.py py2app if [[ $? = "0" ]]; then - sudo hdiutil create -fs HFS+ -volname "Bitmessage" -srcfolder dist/Bitmessage.app dist/bitmessage-v$1.dmg + hdiutil create -fs HFS+ -volname "Bitmessage" -srcfolder dist/Bitmessage.app dist/bitmessage-v$1.dmg else echo "Problem creating Bitmessage.app, stopping." exit From ea54f8e77961b9f01333cfc0fe33bc115db878a2 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sun, 25 Aug 2013 16:23:28 -0400 Subject: [PATCH 41/50] resolve merge conflict --- src/bitmessagemain.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index da4e0297..494814d3 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -38,21 +38,17 @@ from class_singleWorker import * from class_outgoingSynSender import * from class_singleListener import * from class_addressGenerator import * +from debug import logger # Helper Functions import helper_bootstrap -<<<<<<< HEAD -======= -from debug import logger - import sys if sys.platform == 'darwin': if float("{1}.{2}".format(*sys.version_info)) < 7.5: logger.critical("You should use python 2.7.5 or greater. Your version: %s", "{0}.{1}.{2}".format(*sys.version_info)) sys.exit(0) ->>>>>>> 53ca5b03ffb6b35ac03588107dc4a1d5cde7aad4 def connectToStream(streamNumber): selfInitiatedConnections[streamNumber] = {} if sys.platform[0:3] == 'win': From 1b5158d658f426cbd8bdf8bad28d9a942d069e1a Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sun, 25 Aug 2013 18:55:53 -0400 Subject: [PATCH 42/50] refactored helper_startup.py so that it can make use of a pre-set shared.appdata variable --- src/helper_startup.py | 155 +++++++++++++++++++++++------------------- src/namecoin.py | 2 +- 2 files changed, 85 insertions(+), 72 deletions(-) diff --git a/src/helper_startup.py b/src/helper_startup.py index 256dbcaa..2ce4ff2c 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -8,79 +8,92 @@ from namecoin import ensureNamecoinOptions storeConfigFilesInSameDirectoryAsProgramByDefault = False # The user may de-select Portable Mode in the settings if they want the config files to stay in the application data folder. def loadConfig(): - # First try to load the config file (the keys.dat file) from the program - # directory - shared.config.read('keys.dat') - try: - shared.config.get('bitmessagesettings', 'settingsversion') - print 'Loading config files from same directory as program' - shared.appdata = '' - except: - # Could not load the keys.dat file in the program directory. Perhaps it - # is in the appdata directory. - shared.appdata = shared.lookupAppdataFolder() - shared.config = ConfigParser.SafeConfigParser() + if shared.appdata: shared.config.read(shared.appdata + 'keys.dat') + #shared.appdata must have been specified as a startup option. try: shared.config.get('bitmessagesettings', 'settingsversion') - print 'Loading existing config files from', shared.appdata + print 'Loading config files from directory specified on startup: ' + shared.appdata + needToCreateKeysFile = False except: - # This appears to be the first time running the program; there is - # no config file (or it cannot be accessed). Create config file. - shared.config.add_section('bitmessagesettings') - shared.config.set('bitmessagesettings', 'settingsversion', '6') - shared.config.set('bitmessagesettings', 'port', '8444') - shared.config.set( - 'bitmessagesettings', 'timeformat', '%%a, %%d %%b %%Y %%I:%%M %%p') - shared.config.set('bitmessagesettings', 'blackwhitelist', 'black') - shared.config.set('bitmessagesettings', 'startonlogon', 'false') - if 'linux' in sys.platform: - shared.config.set( - 'bitmessagesettings', 'minimizetotray', 'false') - # This isn't implimented yet and when True on - # Ubuntu causes Bitmessage to disappear while - # running when minimized. - else: - shared.config.set( - 'bitmessagesettings', 'minimizetotray', 'true') - shared.config.set( - 'bitmessagesettings', 'showtraynotifications', 'true') - shared.config.set('bitmessagesettings', 'startintray', 'false') - shared.config.set('bitmessagesettings', 'socksproxytype', 'none') - shared.config.set( - 'bitmessagesettings', 'sockshostname', 'localhost') - shared.config.set('bitmessagesettings', 'socksport', '9050') - shared.config.set( - 'bitmessagesettings', 'socksauthentication', 'false') - shared.config.set( - 'bitmessagesettings', 'sockslisten', 'false') - shared.config.set('bitmessagesettings', 'socksusername', '') - shared.config.set('bitmessagesettings', 'sockspassword', '') - shared.config.set('bitmessagesettings', 'keysencrypted', 'false') - shared.config.set( - 'bitmessagesettings', 'messagesencrypted', 'false') - shared.config.set('bitmessagesettings', 'defaultnoncetrialsperbyte', str( - shared.networkDefaultProofOfWorkNonceTrialsPerByte)) - shared.config.set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str( - shared.networkDefaultPayloadLengthExtraBytes)) - shared.config.set('bitmessagesettings', 'minimizeonclose', 'false') - shared.config.set( - 'bitmessagesettings', 'maxacceptablenoncetrialsperbyte', '0') - shared.config.set( - 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') - shared.config.set('bitmessagesettings', 'dontconnect', 'true') - ensureNamecoinOptions() + needToCreateKeysFile = True - if storeConfigFilesInSameDirectoryAsProgramByDefault: - # Just use the same directory as the program and forget about - # the appdata folder - shared.appdata = '' - print 'Creating new config files in same directory as program.' - else: - print 'Creating new config files in', shared.appdata - if not os.path.exists(shared.appdata): - os.makedirs(shared.appdata) - if not sys.platform.startswith('win'): - os.umask(0o077) - with open(shared.appdata + 'keys.dat', 'wb') as configfile: - shared.config.write(configfile) + else: + shared.config.read('keys.dat') + try: + shared.config.get('bitmessagesettings', 'settingsversion') + print 'Loading config files from same directory as program.' + needToCreateKeysFile = False + shared.appdata = '' + except: + # Could not load the keys.dat file in the program directory. Perhaps it + # is in the appdata directory. + shared.appdata = shared.lookupAppdataFolder() + shared.config.read(shared.appdata + 'keys.dat') + try: + shared.config.get('bitmessagesettings', 'settingsversion') + print 'Loading existing config files from', shared.appdata + needToCreateKeysFile = False + except: + needToCreateKeysFile = True + + if needToCreateKeysFile: + # This appears to be the first time running the program; there is + # no config file (or it cannot be accessed). Create config file. + shared.config.add_section('bitmessagesettings') + shared.config.set('bitmessagesettings', 'settingsversion', '6') + shared.config.set('bitmessagesettings', 'port', '8444') + shared.config.set( + 'bitmessagesettings', 'timeformat', '%%a, %%d %%b %%Y %%I:%%M %%p') + shared.config.set('bitmessagesettings', 'blackwhitelist', 'black') + shared.config.set('bitmessagesettings', 'startonlogon', 'false') + if 'linux' in sys.platform: + shared.config.set( + 'bitmessagesettings', 'minimizetotray', 'false') + # This isn't implimented yet and when True on + # Ubuntu causes Bitmessage to disappear while + # running when minimized. + else: + shared.config.set( + 'bitmessagesettings', 'minimizetotray', 'true') + shared.config.set( + 'bitmessagesettings', 'showtraynotifications', 'true') + shared.config.set('bitmessagesettings', 'startintray', 'false') + shared.config.set('bitmessagesettings', 'socksproxytype', 'none') + shared.config.set( + 'bitmessagesettings', 'sockshostname', 'localhost') + shared.config.set('bitmessagesettings', 'socksport', '9050') + shared.config.set( + 'bitmessagesettings', 'socksauthentication', 'false') + shared.config.set( + 'bitmessagesettings', 'sockslisten', 'false') + shared.config.set('bitmessagesettings', 'socksusername', '') + shared.config.set('bitmessagesettings', 'sockspassword', '') + shared.config.set('bitmessagesettings', 'keysencrypted', 'false') + shared.config.set( + 'bitmessagesettings', 'messagesencrypted', 'false') + shared.config.set('bitmessagesettings', 'defaultnoncetrialsperbyte', str( + shared.networkDefaultProofOfWorkNonceTrialsPerByte)) + shared.config.set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str( + shared.networkDefaultPayloadLengthExtraBytes)) + shared.config.set('bitmessagesettings', 'minimizeonclose', 'false') + shared.config.set( + 'bitmessagesettings', 'maxacceptablenoncetrialsperbyte', '0') + shared.config.set( + 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') + shared.config.set('bitmessagesettings', 'dontconnect', 'true') + ensureNamecoinOptions() + + if storeConfigFilesInSameDirectoryAsProgramByDefault: + # Just use the same directory as the program and forget about + # the appdata folder + shared.appdata = '' + print 'Creating new config files in same directory as program.' + else: + print 'Creating new config files in', shared.appdata + if not os.path.exists(shared.appdata): + os.makedirs(shared.appdata) + if not sys.platform.startswith('win'): + os.umask(0o077) + with open(shared.appdata + 'keys.dat', 'wb') as configfile: + shared.config.write(configfile) diff --git a/src/namecoin.py b/src/namecoin.py index 9fbf4518..f9565ccf 100644 --- a/src/namecoin.py +++ b/src/namecoin.py @@ -270,7 +270,7 @@ def ensureNamecoinOptions (): nmc.close () except Exception as exc: - print "Failure reading namecoin config file: %s" % str (exc) + print "Could not read the Namecoin config file probably because you don't have Namecoin installed. That's ok; we don't really need it. Detailed error message: %s" % str (exc) # If still nothing found, set empty at least. if (not hasUser): From 4396bc7f97bb27e350f8a7ee4211bffb95c4f43f Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sun, 25 Aug 2013 19:31:54 -0400 Subject: [PATCH 43/50] manually undid much of pull #287. Discussion in #398 --- src/bitmessagemain.py | 7 --- src/bitmessageqt/__init__.py | 119 ++++++++++++++--------------------- src/class_bgWorker.py | 38 ----------- 3 files changed, 46 insertions(+), 118 deletions(-) delete mode 100644 src/class_bgWorker.py diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 494814d3..be962bc5 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -9,13 +9,6 @@ # The software version variable is now held in shared.py -# import ctypes -try: - from gevent import monkey - monkey.patch_all() -except ImportError as ex: - print "Not using the gevent module as it was not found. No need to worry." - import signal # Used to capture a Ctrl-C keypress so that Bitmessage can shutdown gracefully. # The next 3 are used for the API from SimpleXMLRPCServer import * diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 00ac8bde..011b7b54 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -3333,80 +3333,57 @@ class myTableWidgetItem(QTableWidgetItem): def __lt__(self, other): return int(self.data(33).toPyObject()) < int(other.data(33).toPyObject()) -from threading import Thread -class UISignaler(Thread,QThread): +class UISignaler(QThread): def __init__(self, parent=None): - Thread.__init__(self, parent) QThread.__init__(self, parent) def run(self): while True: - try: - command, data = shared.UISignalQueue.get() - if command == 'writeNewAddressToTable': - label, address, streamNumber = data - self.emit(SIGNAL( - "writeNewAddressToTable(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), label, address, str(streamNumber)) - elif command == 'updateStatusBar': - self.emit(SIGNAL("updateStatusBar(PyQt_PyObject)"), data) - elif command == 'updateSentItemStatusByHash': - hash, message = data - self.emit(SIGNAL( - "updateSentItemStatusByHash(PyQt_PyObject,PyQt_PyObject)"), hash, message) - elif command == 'updateSentItemStatusByAckdata': - ackData, message = data - self.emit(SIGNAL( - "updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), ackData, message) - elif command == 'displayNewInboxMessage': - inventoryHash, toAddress, fromAddress, subject, body = data - self.emit(SIGNAL( - "displayNewInboxMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), - inventoryHash, toAddress, fromAddress, subject, body) - elif command == 'displayNewSentMessage': - toAddress, fromLabel, fromAddress, subject, message, ackdata = data - self.emit(SIGNAL( - "displayNewSentMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), - toAddress, fromLabel, fromAddress, subject, message, ackdata) - elif command == 'updateNetworkStatusTab': - self.emit(SIGNAL("updateNetworkStatusTab()")) - elif command == 'updateNumberOfMessagesProcessed': - self.emit(SIGNAL("updateNumberOfMessagesProcessed()")) - elif command == 'updateNumberOfPubkeysProcessed': - self.emit(SIGNAL("updateNumberOfPubkeysProcessed()")) - elif command == 'updateNumberOfBroadcastsProcessed': - self.emit(SIGNAL("updateNumberOfBroadcastsProcessed()")) - elif command == 'setStatusIcon': - self.emit(SIGNAL("setStatusIcon(PyQt_PyObject)"), data) - elif command == 'rerenderInboxFromLabels': - self.emit(SIGNAL("rerenderInboxFromLabels()")) - elif command == 'rerenderSubscriptions': - self.emit(SIGNAL("rerenderSubscriptions()")) - elif command == 'removeInboxRowByMsgid': - self.emit(SIGNAL("removeInboxRowByMsgid(PyQt_PyObject)"), data) - else: - sys.stderr.write( - 'Command sent to UISignaler not recognized: %s\n' % command) - except Exception,ex: - # uncaught exception will block gevent - import traceback - traceback.print_exc() - traceback.print_stack() - print ex - pass - -try: - import gevent -except ImportError as ex: - gevent = None -else: - def mainloop(app): - while True: - app.processEvents() - gevent.sleep(0.01) - def testprint(): - #print 'this is running' - gevent.spawn_later(1, testprint) + command, data = shared.UISignalQueue.get() + if command == 'writeNewAddressToTable': + label, address, streamNumber = data + self.emit(SIGNAL( + "writeNewAddressToTable(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), label, address, str(streamNumber)) + elif command == 'updateStatusBar': + self.emit(SIGNAL("updateStatusBar(PyQt_PyObject)"), data) + elif command == 'updateSentItemStatusByHash': + hash, message = data + self.emit(SIGNAL( + "updateSentItemStatusByHash(PyQt_PyObject,PyQt_PyObject)"), hash, message) + elif command == 'updateSentItemStatusByAckdata': + ackData, message = data + self.emit(SIGNAL( + "updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), ackData, message) + elif command == 'displayNewInboxMessage': + inventoryHash, toAddress, fromAddress, subject, body = data + self.emit(SIGNAL( + "displayNewInboxMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), + inventoryHash, toAddress, fromAddress, subject, body) + elif command == 'displayNewSentMessage': + toAddress, fromLabel, fromAddress, subject, message, ackdata = data + self.emit(SIGNAL( + "displayNewSentMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), + toAddress, fromLabel, fromAddress, subject, message, ackdata) + elif command == 'updateNetworkStatusTab': + self.emit(SIGNAL("updateNetworkStatusTab()")) + elif command == 'updateNumberOfMessagesProcessed': + self.emit(SIGNAL("updateNumberOfMessagesProcessed()")) + elif command == 'updateNumberOfPubkeysProcessed': + self.emit(SIGNAL("updateNumberOfPubkeysProcessed()")) + elif command == 'updateNumberOfBroadcastsProcessed': + self.emit(SIGNAL("updateNumberOfBroadcastsProcessed()")) + elif command == 'setStatusIcon': + self.emit(SIGNAL("setStatusIcon(PyQt_PyObject)"), data) + elif command == 'rerenderInboxFromLabels': + self.emit(SIGNAL("rerenderInboxFromLabels()")) + elif command == 'rerenderSubscriptions': + self.emit(SIGNAL("rerenderSubscriptions()")) + elif command == 'removeInboxRowByMsgid': + self.emit(SIGNAL("removeInboxRowByMsgid(PyQt_PyObject)"), data) + else: + sys.stderr.write( + 'Command sent to UISignaler not recognized: %s\n' % command) def run(): app = QtGui.QApplication(sys.argv) @@ -3443,8 +3420,4 @@ def run(): myapp.notifierInit() if shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): myapp.showConnectDialog() # ask the user if we may connect - if gevent is None: - sys.exit(app.exec_()) - else: - gevent.joinall([gevent.spawn(testprint), gevent.spawn(mainloop, app), gevent.spawn(mainloop, app), gevent.spawn(mainloop, app), gevent.spawn(mainloop, app), gevent.spawn(mainloop, app)]) - print 'done' + sys.exit(app.exec_()) diff --git a/src/class_bgWorker.py b/src/class_bgWorker.py deleted file mode 100644 index c01e26ef..00000000 --- a/src/class_bgWorker.py +++ /dev/null @@ -1,38 +0,0 @@ -#! /usr/bin/python -# -*- coding: utf-8 -*- -# cody by linker.lin@me.com - -__author__ = 'linkerlin' - - -import threading -import Queue -import time - -class bgWorker(threading.Thread): - def __init__(self): - threading.Thread.__init__(self) - self.q = Queue.Queue() - self.setDaemon(True) - - def post(self,job): - self.q.put(job) - - def run(self): - while 1: - job=None - try: - job = self.q.get(block=True) - if job: - job() - except Exception as ex: - print "Error,job exception:",ex.message,type(ex) - time.sleep(0.05) - else: - #print "job: ", job, " done" - pass - finally: - time.sleep(0.05) - -bgworker = bgWorker() -bgworker.start() From 14a968b499075805d7d9fd2fb42f784d413cb55b Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Sun, 25 Aug 2013 22:52:38 -0400 Subject: [PATCH 44/50] github demanded a manual merge --- src/bitmessagemain.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index bc884121..662ca7a6 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -875,8 +875,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): except APIError as e: return str(e) except Exception as e: - print(e) - print(sys.exc_info()[0]) + logger.critical(e) + logger.critical(sys.exc_info()[0]) return "API Error 0021: Unexpected API Failure - %s" % str(e) # This thread, of which there is only one, runs the API. @@ -988,7 +988,6 @@ class Main: def getApiAddress(self): if not shared.safeConfigGetBoolean('bitmessagesettings', 'apienabled'): return None - address = shared.config.get('bitmessagesettings', 'apiinterface') port = shared.config.getint('bitmessagesettings', 'apiport') return {'address':address,'port':port} From 3ae8dd8eeef36091d5e0d3c1e750833191a0a91f Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Mon, 26 Aug 2013 00:06:49 -0400 Subject: [PATCH 45/50] log traceback on API exception --- src/bitmessagemain.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 662ca7a6..721b6a8d 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -875,8 +875,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): except APIError as e: return str(e) except Exception as e: - logger.critical(e) - logger.critical(sys.exc_info()[0]) + logger.exception(e) return "API Error 0021: Unexpected API Failure - %s" % str(e) # This thread, of which there is only one, runs the API. From b5f42d75496f9119070fe679fb096ddb20b374df Mon Sep 17 00:00:00 2001 From: Joshua Noble Date: Mon, 26 Aug 2013 22:29:57 -0400 Subject: [PATCH 46/50] Added trashSentMessageByAckData API command --- src/bitmessagemain.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 721b6a8d..e18a15d3 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -507,6 +507,19 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): shared.sqlLock.release() # shared.UISignalQueue.put(('removeSentRowByMsgid',msgid)) This function doesn't exist yet. return 'Trashed sent message (assuming message existed).' + elif method == 'trashSentMessageByAckData': + # This API method should only be used when msgid is not available + if len(params) == 0: + raise APIError(0, 'I need parameters!') + ackdata = self._decode(params[0], "hex") + t = (ackdata,) + shared.sqlLock.acquire() + shared.sqlSubmitQueue.put('''UPDATE sent SET folder='trash' WHERE ackdata=?''') + shared.sqlSubmitQueue.put(t) + shared.sqlReturnQueue.get() + shared.sqlSubmitQueue.put('commit') + shared.sqlLock.release() + return 'Trashed sent message (assuming message existed).' elif method == 'sendMessage': if len(params) == 0: raise APIError(0, 'I need parameters!') From 0d5f2680d404125204156d8a2a2bf81faa94d62f Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Tue, 27 Aug 2013 22:29:39 -0400 Subject: [PATCH 47/50] various modifications to previous commit regarding ability to select language --- src/bitmessageqt/__init__.py | 13 +++++++++---- src/bitmessageqt/settings.py | 21 ++++++--------------- src/bitmessageqt/settings.ui | 14 ++++++++++---- src/class_outgoingSynSender.py | 2 +- src/class_sqlThread.py | 8 ++++++++ src/helper_startup.py | 7 +++++++ 6 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index eab7f0e2..8b6b1ce7 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2049,14 +2049,19 @@ class MyForm(QtGui.QMainWindow): "MainWindow", "You must restart Bitmessage for the port number change to take effect.")) shared.config.set('bitmessagesettings', 'port', str( self.settingsDialogInstance.ui.lineEditTCPPort.text())) - if shared.config.get('bitmessagesettings', 'socksproxytype') == 'none' and str(self.settingsDialogInstance.ui.comboBoxProxyType.currentText())[0:5] == 'SOCKS': + #print 'self.settingsDialogInstance.ui.comboBoxProxyType.currentText()', self.settingsDialogInstance.ui.comboBoxProxyType.currentText() + #print 'self.settingsDialogInstance.ui.comboBoxProxyType.currentText())[0:5]', self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] + if shared.config.get('bitmessagesettings', 'socksproxytype') == 'none' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS': if shared.statusIconColor != 'red': QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( "MainWindow", "Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any).")) - if shared.config.get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and str(self.settingsDialogInstance.ui.comboBoxProxyType.currentText()) == 'none': + if shared.config.get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] != 'SOCKS': self.statusBar().showMessage('') - shared.config.set('bitmessagesettings', 'socksproxytype', str( - self.settingsDialogInstance.ui.comboBoxProxyType.currentText())) + if self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS': + shared.config.set('bitmessagesettings', 'socksproxytype', str( + self.settingsDialogInstance.ui.comboBoxProxyType.currentText())) + else: + shared.config.set('bitmessagesettings', 'socksproxytype', 'none') shared.config.set('bitmessagesettings', 'socksauthentication', str( self.settingsDialogInstance.ui.checkBoxAuthentication.isChecked())) shared.config.set('bitmessagesettings', 'sockshostname', str( diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index ad597773..0d8f9e72 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'settings.ui' # -# Created: Sat Aug 24 09:19:58 2013 +# Created: Tue Aug 27 22:23:38 2013 # by: PyQt4 UI code generator 4.10.2 # # WARNING! All changes made in this file will be lost! @@ -71,6 +71,7 @@ class Ui_settingsDialog(object): self.horizontalLayout_2 = QtGui.QHBoxLayout(self.groupBox) self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.languageComboBox = QtGui.QComboBox(self.groupBox) + self.languageComboBox.setMinimumSize(QtCore.QSize(100, 0)) self.languageComboBox.setObjectName(_fromUtf8("languageComboBox")) self.languageComboBox.addItem(_fromUtf8("")) self.languageComboBox.addItem(_fromUtf8("")) @@ -347,10 +348,10 @@ class Ui_settingsDialog(object): self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system")) self.languageComboBox.setItemText(1, _translate("settingsDialog", "English", "en")) self.languageComboBox.setItemText(2, _translate("settingsDialog", "Esperanto", "eo")) - self.languageComboBox.setItemText(3, _translate("settingsDialog", "French", "fr")) - self.languageComboBox.setItemText(4, _translate("settingsDialog", "German", "de")) - self.languageComboBox.setItemText(5, _translate("settingsDialog", "Spanish", "es")) - self.languageComboBox.setItemText(6, _translate("settingsDialog", "Russian", "ru")) + self.languageComboBox.setItemText(3, _translate("settingsDialog", "Français", "fr")) + self.languageComboBox.setItemText(4, _translate("settingsDialog", "Deutsch", "de")) + self.languageComboBox.setItemText(5, _translate("settingsDialog", "Español", "es")) + self.languageComboBox.setItemText(6, _translate("settingsDialog", "Русский", "ru")) self.languageComboBox.setItemText(7, _translate("settingsDialog", "Pirate English", "en_pirate")) self.languageComboBox.setItemText(8, _translate("settingsDialog", "Other (set in keys.dat)", "other")) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) @@ -389,13 +390,3 @@ class Ui_settingsDialog(object): self.radioButtonNamecoinNmcontrol.setText(_translate("settingsDialog", "NMControl", None)) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNamecoin), _translate("settingsDialog", "Namecoin integration", None)) - -if __name__ == "__main__": - import sys - app = QtGui.QApplication(sys.argv) - settingsDialog = QtGui.QDialog() - ui = Ui_settingsDialog() - ui.setupUi(settingsDialog) - settingsDialog.show() - sys.exit(app.exec_()) - diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index eec38d8d..02117149 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -113,6 +113,12 @@ + + + 100 + 0 + + System Settings @@ -130,22 +136,22 @@ - French + Français - German + Deutsch - Spanish + Español - Russian + Русский diff --git a/src/class_outgoingSynSender.py b/src/class_outgoingSynSender.py index 8a929c7d..c526c9b4 100644 --- a/src/class_outgoingSynSender.py +++ b/src/class_outgoingSynSender.py @@ -25,7 +25,7 @@ class outgoingSynSender(threading.Thread): def run(self): while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): time.sleep(2) - while True: + while shared.safeConfigGetBoolean('bitmessagesettings', 'sendoutgoingconnections'): while len(self.selfInitiatedConnections[self.streamNumber]) >= 8: # maximum number of outgoing connections = 8 time.sleep(10) if shared.shutdown: diff --git a/src/class_sqlThread.py b/src/class_sqlThread.py index 5a911246..47e41b42 100644 --- a/src/class_sqlThread.py +++ b/src/class_sqlThread.py @@ -204,6 +204,14 @@ class sqlThread(threading.Thread): item = '''update settings set value=? WHERE key='version';''' parameters = (2,) self.cur.execute(item, parameters) + + if not shared.config.has_option('bitmessagesettings', 'userlocale'): + shared.config.set('bitmessagesettings', 'userlocale', 'system') + if not shared.config.has_option('bitmessagesettings', 'sendoutgoingconnections'): + shared.config.set('bitmessagesettings', 'sendoutgoingconnections', 'True') + + # Are you hoping to add a new option to the keys.dat file of existing + # Bitmessage users? Add it right above this line! try: testpayload = '\x00\x00' diff --git a/src/helper_startup.py b/src/helper_startup.py index 12ea1b84..05afcb9c 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -84,6 +84,13 @@ def loadConfig(): 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') shared.config.set('bitmessagesettings', 'dontconnect', 'true') shared.config.set('bitmessagesettings', 'userlocale', 'system') + + # Are you hoping to add a new option to the keys.dat file? You're in + # the right place for adding it to users who install the software for + # the first time. But you must also add it to the keys.dat file of + # existing users. To do that, search the class_sqlThread.py file for the + # text: "right above this line!" + ensureNamecoinOptions() if storeConfigFilesInSameDirectoryAsProgramByDefault: From 83ffab9e4ac479215243f90b1c430282ecbf7b42 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Tue, 27 Aug 2013 22:38:32 -0400 Subject: [PATCH 48/50] manually merge #431 --- src/bitmessageqt/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 8b6b1ce7..3ad41c5e 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -3409,7 +3409,11 @@ def run(): app = QtGui.QApplication(sys.argv) translator = QtCore.QTranslator() - locale_countrycode = str(locale.getdefaultlocale()[0]) + try: + locale_countrycode = str(locale.getdefaultlocale()[0]) + except: + # The above is not compatible with all versions of OSX. + locale_countrycode = "en_US" # Default to english. locale_lang = locale_countrycode[0:2] user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) user_lang = user_countrycode[0:2] From e8cd025b18f2be5bb9cb60c022827a4b082e87dc Mon Sep 17 00:00:00 2001 From: akh81 Date: Wed, 28 Aug 2013 04:45:35 -0500 Subject: [PATCH 49/50] updated Russian translations --- src/translations/bitmessage_ru.qm | Bin 54915 -> 60311 bytes src/translations/bitmessage_ru.ts | 505 +++++++++++++++++------------- 2 files changed, 285 insertions(+), 220 deletions(-) diff --git a/src/translations/bitmessage_ru.qm b/src/translations/bitmessage_ru.qm index 2ce3c8bf2dd66f167330589e03ab1b6dbd7f2f17..f0bd634285c369e6704195da736297715118a88a 100644 GIT binary patch delta 6458 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 - + MainWindow @@ -11,7 +11,6 @@ Reply - . Ответить @@ -35,7 +34,7 @@ Сохранить сообщение как ... - + New Новый адрес @@ -90,7 +89,7 @@ Форсировать отправку - + Add new entry Добавить новую запись @@ -122,7 +121,7 @@ Acknowledgement of the message received %1 - Сообщение доставлено %1 + Сообщение доставлено в %1 @@ -157,10 +156,10 @@ Since startup on %1 - С начала работы %1 + С начала работы в %1 - + Not Connected Не соединено @@ -170,9 +169,9 @@ Показать Bitmessage - + Send - Отправка + Отправить @@ -180,23 +179,23 @@ Подписки - + Address Book Адресная книга - + Quit Выйти - + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. Создайте резервную копию этого файла перед тем как будете его редактировать. - + You may manage your keys by editing the keys.dat file stored in %1 It is important that you back up this file. @@ -205,19 +204,19 @@ It is important that you back up this file. Создайте резервную копию этого файла перед тем как будете его редактировать. - + Open keys.dat? Открыть файл keys.dat? - + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) Вы можете управлять Вашими ключами, отредактировав файл keys.dat, находящийся в той же папке, что и эта программа. Создайте резервную копию этого файла перед тем как будете его редактировать. Хотели бы Вы открыть этот файл сейчас? (пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) - + You may manage your keys by editing the keys.dat file stored in %1 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) @@ -227,192 +226,192 @@ It is important that you back up this file. Would you like to open the file now? (пожалуйста, закройте Bitmessage до того как Вы внесете в этот файл какие-либо изменения.) - + Delete trash? Очистить корзину? - + Are you sure you want to delete all trashed messages? Вы уверены, что хотите очистить корзину? - + bad passphrase Неподходящая секретная фраза - + You must type your passphrase. If you don't have one then this is not the form for you. Вы должны ввести секретную фразу. Если Вы не хотите это делать, то Вы выбрали неправильную опцию. - + Processed %1 person-to-person messages. Обработано %1 сообщений. - + Processed %1 broadcast messages. Обработано %1 рассылок. - + Processed %1 public keys. Обработано %1 открытых ключей. - + Total Connections: %1 Всего соединений: %1 - + Connection lost Соединение потеряно - + Connected Соединено - + Message trashed Сообщение удалено - + Error: Bitmessage addresses start with BM- Please check %1 Ошибка: Bitmessage адреса начинаются с BM- Пожалуйста, проверьте %1 - + Error: The address %1 is not typed or copied correctly. Please check it. Ошибка: адрес %1 внесен или скопирован неправильно. Пожалуйста, перепроверьте. - + Error: The address %1 contains invalid characters. Please check it. Ошибка: адрес %1 содержит запрещенные символы. Пожалуйста, перепроверьте. - + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. Ошибка: версия адреса в %1 слишком новая. Либо Вам нужно обновить Bitmessage, либо Ваш собеседник дал неправильный адрес. - + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. Ошибка: некоторые данные, закодированные в адресе %1, слишком короткие. Возможно, что-то не так с программой Вашего собеседника. - + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. Ошибка: некоторые данные, закодированные в адресе %1, слишком длинные. Возможно, что-то не так с программой Вашего собеседника. - + Error: Something is wrong with the address %1. Ошибка: что-то не так с адресом %1. - + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. Вы должны указать адрес в поле "От кого". Вы можете найти Ваш адрес во вкладе "Ваши Адреса". - + Sending to your address Отправка на Ваш собственный адрес - + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. Ошибка: Один из адресов, на который Вы отправляете сообщение, %1, принадлежит Вам. К сожалению, Bitmessage не может отправлять сообщения самому себе. Попробуйте запустить второго клиента на другом компьютере или на виртуальной машине. - + Address version number Версия адреса - + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. По поводу адреса %1: Bitmessage не поддерживаем адреса версии %2. Возможно, Вам нужно обновить клиент Bitmessage. - + Stream number Номер потока - + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. По поводу адреса %1: Bitmessage не поддерживаем стрим номер %2. Возможно, Вам нужно обновить клиент Bitmessage. - + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. Внимание: Вы не подключены к сети. Bitmessage проделает необходимые вычисления, чтобы отправить сообщение, но не отправит его до тех пор, пока Вы не подсоединитесь к сети. - + Your 'To' field is empty. Вы не заполнили поле 'Кому'. - + Work is queued. Вычисления поставлены в очередь. - + Right click one or more entries in your address book and select 'Send message to this address'. Нажмите правую кнопку мышки на каком-либо адресе и выберите "Отправить сообщение на этот адрес". - + Work is queued. %1 Вычисления поставлены в очередь. %1 - + New Message Новое сообщение - + From От - + Address is valid. Адрес введен правильно. - + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. Ошибка: Вы не можете добавлять один и тот же адрес в Адресную Книгу несколько раз. Просто переименуйте существующий адрес. - + The address you entered was invalid. Ignoring it. Вы ввели неправильный адрес. Это адрес проигнорирован. - + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. Ошибка: Вы не можете добавлять один и тот же адрес в подписку несколько раз. Просто переименуйте существующую подписку. - + Restart Перезапустить - + You must restart Bitmessage for the port number change to take effect. Вы должны перезапустить Bitmessage, чтобы смена номера порта имела эффект. @@ -422,167 +421,167 @@ It is important that you back up this file. Would you like to open the file now? Bitmessage будет использовать Ваш прокси в дальнейшем, тем не менее, мы рекомендуем перезапустить Bitmessage в ручную, чтобы закрыть уже существующие соединения. - + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. Ошибка: Вы не можете добавлять один и тот же адрес в список несколько раз. Просто переименуйте существующий адрес. - + Passphrase mismatch Секретная фраза не подходит - + The passphrase you entered twice doesn't match. Try again. Вы ввели две разные секретные фразы. Пожалуйста, повторите заново. - + Choose a passphrase Придумайте секретную фразу - + You really do need a passphrase. Вы действительно должны ввести секретную фразу. - + All done. Closing user interface... Программа завершена. Закрываем пользовательский интерфейс... - + Address is gone Адрес утерян - + Bitmessage cannot find your address %1. Perhaps you removed it? Bitmessage не может найти Ваш адрес %1. Возможно Вы удалили его? - + Address disabled Адрес выключен - + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. Ошибка: адрес, с которого Вы пытаетесь отправить, выключен. Вам нужно будет включить этот адрес во вкладке "Ваши адреса". - + Entry added to the Address Book. Edit the label to your liking. Запись добавлена в Адресную Книгу. Вы можете ее отредактировать. - + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. Удалено в корзину. Чтобы попасть в корзину, Вам нужно будет найти файл корзины на диске. - + Save As... Сохранить как ... - + Write error. Ошибка записи. - + No addresses selected. Вы не выбрали адрес. - + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. Опции были отключены, потому что ли они либо не подходят, либо еще не выполнены под Вашу операционную систему. - + The address should start with ''BM-'' Адрес должен начинаться с "BM-" - + The address is not typed or copied correctly (the checksum failed). Адрес введен или скопирован неверно (контрольная сумма не сходится). - + The version number of this address is higher than this software can support. Please upgrade Bitmessage. Версия этого адреса более поздняя, чем Ваша программа. Пожалуйста, обновите программу Bitmessage. - + The address contains invalid characters. Адрес содержит запрещенные символы. - + Some data encoded in the address is too short. Данные, закодированные в адресе, слишком короткие. - + Some data encoded in the address is too long. Данные, закодированные в адресе, слишком длинные. - + You are using TCP port %1. (This can be changed in the settings). Вы используете TCP порт %1 (Его можно поменять в настройках). - + Bitmessage Bitmessage - + To Кому - + From От кого - + Subject Тема - + Received Получено - + Inbox Входящие - + Load from Address book Взять из адресной книги - + Message: Сообщение: - + Subject: Тема: - + Send to one or more specific people Отправить одному или нескольким указанным получателям @@ -593,184 +592,184 @@ It is important that you back up this file. Would you like to open the file now? p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!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:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + To: Кому: - + From: От: - + Broadcast to everyone who is subscribed to your address Рассылка всем, кто подписался на Ваш адрес - + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. Пожалуйста, учитывайте, что рассылки шифруются лишь Вашим адресом. Любой человек, который знает Ваш адрес, сможет прочитать Вашу рассылку. - + Status Статус - + Sent Отправленные - + Label (not shown to anyone) - Название (не показывается никому) + Имя (не показывается никому) - + Address Адрес - + Stream Поток - + Your Identities Ваши Адреса - + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. Здесь Вы можете подписаться на рассылки от других пользователей. Все рассылки будут появляться у Вас во Входящих. Вы будете следить за всеми адресами, указанными здесь, даже если они в черном списке. - + Add new Subscription Добавить новую подписку - + Label - Название + Имя - + Subscriptions Подписки - + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. Адресная книга удобна для присвоения осмысленных имен Bitmessage адресам Ваших друзей. Вы можете добавлять новые записи с помощью кнопки "Добавить новую запись", или же правым кликом мышки на сообщении. - + Name or Label - Название + Имя - + Use a Blacklist (Allow all incoming messages except those on the Blacklist) Использовать черный список (Разрешить все входящие сообщения, кроме указанных в черном списке) - + Use a Whitelist (Block all incoming messages except those on the Whitelist) Использовать белый список (блокировать все входящие сообщения, кроме указанных в белом списке) - + Blacklist Черный список - + Stream # № потока - + Connections Соединений - + Total connections: 0 Всего соединений: 0 - + Since startup at asdf: С начала работы программы в asdf: - + Processed 0 person-to-person message. Обработано 0 сообщений. - + Processed 0 public key. Обработано 0 открытых ключей. - + Processed 0 broadcast. Обработано 0 рассылок. - + Network Status Статус сети - + File Файл - + Settings Настройки - + Help Помощь - + Import keys Импортировать ключи - + Manage keys Управлять ключами - + About О программе - + Regenerate deterministic addresses Сгенерировать заново все адреса - + Delete all trashed messages Стереть все сообщения из корзины @@ -780,130 +779,142 @@ p, li { white-space: pre-wrap; } Сообщение отправлено в %1 - + Chan name needed Требуется имя chan-а - + You didn't enter a chan name. Вы не ввели имя chan-a. - + Address already present Адрес уже существует - + Could not add chan because it appears to already be one of your identities. Не могу добавить chan, потому что это один из Ваших уже существующих адресов. - + Success Отлично - + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. Chan был успешно создан. Чтобы добавить других в сhan, сообщите им имя chan-а и этот Bitmessage адрес: %1. Этот адрес также отображается во вкладке "Ваши Адреса". - + Address too new Адрес слишком новый - + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. Этот Bitmessage адрес похож на правильный, но его версия этого адреса слишком новая. Возможно, Вам необходимо обновить программу Bitmessage. - + Address invalid Неправильный адрес - + That Bitmessage address is not valid. Этот Bitmessage адрес введен неправильно. - + Address does not match chan name Адрес не сходится с именем chan-а - + Although the Bitmessage address you entered was valid, it doesn't match the chan name. Вы ввели верный адрес Bitmessage, но он не сходится с именем chan-а. - + Successfully joined chan. Успешно присоединились к chan-у. - + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). Bitmessage будет использовать Ваш прокси, начиная прямо сейчас. Тем не менее Вам имеет смысл перезапустить Bitmessage, чтобы закрыть уже существующие соединения. - + This is a chan address. You cannot use it as a pseudo-mailing list. Это адрес chan-а. Вы не можете его использовать как адрес рассылки. - + Search Поиск - + All - Всем + По всем полям - + Message Текст сообщения - + Join / Create chan Подсоединиться или создать chan Mark Unread - ... - Mark Unread + Отметить как непрочитанное - + Fetched address from namecoin identity. - + Получить адрес через Namecoin. - + Testing... - + Проверяем... - + Fetch Namecoin ID - + Получить Namecoin ID - + Ctrl+Q - + Ctrl+Q - + F1 - + F1 + + + + <!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:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> + <!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:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> @@ -982,7 +993,7 @@ The 'Random Number' option is selected by default but deterministic ad Label (not shown to anyone except you) - Название (не показывается никому кроме Вас) + Имя (не показывается никому кроме Вас) @@ -1058,7 +1069,7 @@ The 'Random Number' option is selected by default but deterministic ad Label - Название + Имя @@ -1132,22 +1143,22 @@ The 'Random Number' option is selected by default but deterministic ad Bitmessage - Bitmessage + Bitmessage Bitmessage won't connect to anyone until you let it. - + Bitmessage не будет соединяться ни с кем, пока Вы не разрешите. Connect now - + Соединиться прямо сейчас Let me configure special network settings first - + Я хочу сперва настроить сетевые настройки @@ -1241,7 +1252,7 @@ The 'Random Number' option is selected by default but deterministic ad <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> - + <html><head/><body><p>Введите имя Вашего chan-a. Если Вы выберете достаточно сложное имя для chan-а (например, сложную и необычную секретную фразу) и никто из Ваших друзей не опубликует эту фразу, то Вам chan будет надежно зашифрован. Если Вы и кто-то другой независимо создадите chan с полностью идентичным именем, то скорее всего Вы получите в итоге один и тот же chan.</p></body></html> @@ -1305,214 +1316,268 @@ The 'Random Number' option is selected by default but deterministic ad settingsDialog - + Settings Настройки - + Start Bitmessage on user login Запускать Bitmessage при входе в систему - + Start Bitmessage in the tray (don't show main window) Запускать Bitmessage в свернутом виде (не показывать главное окно) - + Minimize to tray Сворачивать в трей - + Show notification when message received Показывать уведомления при получении новых сообщений - + Run in Portable Mode Запустить в переносном режиме - + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. В переносном режиме, все сообщения и конфигурационные файлы сохраняются в той же самой папке что и сама программа. Это делает более удобным использование Bitmessage с USB-флэшки. - + User Interface Пользовательские - + Listening port Порт прослушивания - + Listen for connections on port: Прослушивать соединения на порту: - + Proxy server / Tor Прокси сервер / Tor - + Type: Тип: - + none отсутствует - + SOCKS4a SOCKS4a - + SOCKS5 SOCKS5 - + Server hostname: Адрес сервера: - + Port: Порт: - + Authentication Авторизация - + Username: Имя пользователя: - + Pass: Прль: - + Network Settings Сетевые настройки - + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. Когда кто-либо отправляет Вам сообщение, его компьютер должен сперва решить определенную вычислительную задачу. Сложность этой задачи по умолчанию равна 1. Вы можете повысить эту сложность для новых адресов, которые Вы создадите, здесь. Таким образом, любые новые адреса, которые Вы создадите, могут требовать от отправителей сложность большую чем 1. Однако, есть одно исключение: если Вы специально добавите Вашего собеседника в адресную книгу, то Bitmessage автоматически уведомит его о том, что для него минимальная сложность будет составлять всегда всего лишь 1. - + Total difficulty: Общая сложность: - + Small message difficulty: Сложность для маленьких сообщений: - + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. "Сложность для маленьких сообщений" влияет исключительно на небольшие сообщения. Увеличив это число в два раза, вы сделаете отправку маленьких сообщений в два раза сложнее, в то время как сложность отправки больших сообщений не изменится. - + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. "Общая сложность" влияет на абсолютное количество вычислений, которые отправитель должен провести, чтобы отправить сообщение. Увеличив это число в два раза, вы увеличите в два раза объем требуемых вычислений. - + Demanded difficulty Требуемая сложность - + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. Здесь Вы можете установить максимальную вычислительную работу, которую Вы согласны проделать, чтобы отправить сообщение другому пользователю. Ноль означает, чтобы любое значение допустимо. - + Maximum acceptable total difficulty: Макс допустимая общая сложность: - + Maximum acceptable small message difficulty: Макс допустимая сложность для маленький сообщений: - + Max acceptable difficulty Макс допустимая сложность - + Listen for incoming connections when using proxy Прослушивать входящие соединения если используется прокси - + Willingly include unencrypted destination address when sending to a mobile device - + Специально прикреплять незашифрованный адрес получателя, когда посылаем на мобильное устройство - - Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): - - - - + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> - + <html><head/><body><p>Bitmessage умеет пользоваться программой Namecoin для того, чтобы сделать адреса более дружественными для пользователей. Например, вместо того, чтобы диктовать Вашему другу длинный и нудный адрес Bitmessage, Вы можете попросить его отправить сообщение на адрес вида <span style=" font-style:italic;">test. </span></p><p>(Перенести Ваш Bitmessage адрес в Namecoin по-прежнему пока довольно сложно).</p><p>Bitmessage может использовать либо прямо namecoind, либо уже запущенную программу nmcontrol.</p></body></html> - + Host: - + Адрес: - + Password: - + Пароль: - + Test - + Проверить - + Connect to: - + Подсоединиться к: - + Namecoind - + Namecoind - + NMControl - + NMControl - + Namecoin integration - + Интеграция с Namecoin + + + + Interface Language + Язык интерфейса + + + + System Settings + system + Язык по умолчанию + + + + English + en + English + + + + Esperanto + eo + Esperanto + + + + Français + fr + Francais + + + + Deutsch + de + Deutsch + + + + Español + es + Espanol + + + + Русский + ru + Русский + + + + Pirate English + en_pirate + Pirate English + + + + Other (set in keys.dat) + other + Другие (настроено в keys.dat) From 6b9914fe4661360314de12beeac7f61363ba7475 Mon Sep 17 00:00:00 2001 From: akh81 Date: Wed, 28 Aug 2013 04:50:52 -0500 Subject: [PATCH 50/50] updated Russian translations --- src/translations/bitmessage_ru.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/translations/bitmessage_ru.ts b/src/translations/bitmessage_ru.ts index 6c4819ee..3be907d0 100644 --- a/src/translations/bitmessage_ru.ts +++ b/src/translations/bitmessage_ru.ts @@ -1,6 +1,5 @@ - - + MainWindow @@ -1122,7 +1121,7 @@ The 'Random Number' option is selected by default but deterministic ad version ? версия ? - + Copyright © 2013 Jonathan Warren Копирайт © 2013 Джонатан Уоррен @@ -1545,7 +1544,7 @@ The 'Random Number' option is selected by default but deterministic ad - Français + Français fr Francais @@ -1557,13 +1556,13 @@ The 'Random Number' option is selected by default but deterministic ad - Español + Español es Espanol - Русский + Русский ru Русский