This commit is contained in:
Luke Montalvo 2014-04-30 19:09:29 -05:00
commit 276b8d3125
23 changed files with 1867 additions and 199 deletions

View File

@ -68,8 +68,8 @@ cd PyBitmessage && python src/bitmessagemain.py
``` ```
##Creating a package for installation ##Creating a package for installation
If you really want, you can make a package for PyBitmessage which you may If you really want, you can make a package for PyBitmessage, which you may
install yourself or distribute to friends. This isn't reccomended, since install yourself or distribute to friends. This isn't recommended, since
PyBitmessage is in Beta, and subject to frequent change. PyBitmessage is in Beta, and subject to frequent change.
####Linux ####Linux
@ -78,7 +78,7 @@ First off, since PyBitmessage uses something nifty called
[packagemonkey](https://github.com/fuzzgun/packagemonkey), go ahead and get [packagemonkey](https://github.com/fuzzgun/packagemonkey), go ahead and get
that installed. You may have to build it from source. that installed. You may have to build it from source.
Next, edit the generate.sh script. To your liking. Next, edit the generate.sh script to your liking.
Now, run the appropriate script for the type of package you'd like to make Now, run the appropriate script for the type of package you'd like to make
``` ```

View File

@ -4,7 +4,7 @@ PyBitmessage
Bitmessage is a P2P communications protocol used to send encrypted messages to Bitmessage is a P2P communications protocol used to send encrypted messages to
another person or to many subscribers. It is decentralized and trustless, another person or to many subscribers. It is decentralized and trustless,
meaning that you need-not inherently trust any entities like root certificate meaning that you need-not inherently trust any entities like root certificate
authorities. It uses strong authentication which means that the sender of a 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 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 sender and receiver of messages, from passive eavesdroppers like those running
warrantless wiretapping programs. warrantless wiretapping programs.

View File

@ -24,14 +24,14 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links
make clean make clean
rm -f archpackage/*.gz rm -f archpackage/*.gz
# having the root directory called name-version seems essential # Having the root directory called name-version seems essential
mv ../${APP} ../${APP}-${VERSION} mv ../${APP} ../${APP}-${VERSION}
tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs
# rename the root directory without the version number # Rename the root directory without the version number
mv ../${APP}-${VERSION} ../${APP} mv ../${APP}-${VERSION} ../${APP}
# calculate the MD5 checksum # Calculate the MD5 checksum
CHECKSM=$(md5sum ${SOURCE}) CHECKSM=$(md5sum ${SOURCE})
sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD

View File

@ -29,7 +29,7 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links
make clean make clean
make make
# change the parent directory name to debian format # Change the parent directory name to Debian format
mv ../${APP} ../${DIR} mv ../${APP} ../${DIR}
# Create a source archive # Create a source archive
@ -38,9 +38,9 @@ make source
# Build the package # Build the package
dpkg-buildpackage -F dpkg-buildpackage -F
# sign files # Sign files
gpg -ba ../${APP}_${VERSION}-1_${ARCH_TYPE}.deb gpg -ba ../${APP}_${VERSION}-1_${ARCH_TYPE}.deb
gpg -ba ../${APP}_${VERSION}.orig.tar.gz gpg -ba ../${APP}_${VERSION}.orig.tar.gz
# restore the parent directory name # Restore the parent directory name
mv ../${DIR} ../${APP} mv ../${DIR} ../${APP}

View File

@ -21,13 +21,13 @@ sed -i "s/|${PREV_VERSION}|/|${VERSION}|/g" puppypackage/*.specs
sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh sed -i 's/VERSION='${PREV_VERSION}'/VERSION='${VERSION}'/g' puppypackage/pinstall.sh puppypackage/puninstall.sh
sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links
# create the source code in the SOURCES directory # Create the source code in the SOURCES directory
make clean make clean
mkdir -p ~/ebuild mkdir -p ~/ebuild
rm -f ${SOURCE} rm -f ${SOURCE}
mv ../${APP} ../${APP}-${VERSION} mv ../${APP} ../${APP}-${VERSION}
tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs
# rename the root directory without the version number # Rename the root directory without the version number
mv ../${APP}-${VERSION} ../${APP} mv ../${APP}-${VERSION} ../${APP}

12
rpm.sh
View File

@ -24,25 +24,25 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links
sudo yum groupinstall "Development Tools" sudo yum groupinstall "Development Tools"
sudo yum install rpmdevtools sudo yum install rpmdevtools
# setup the rpmbuild directory tree # Setup the rpmbuild directory tree
rpmdev-setuptree rpmdev-setuptree
# create the source code in the SOURCES directory # Create the source code in the SOURCES directory
make clean make clean
mkdir -p ~/rpmbuild/SOURCES mkdir -p ~/rpmbuild/SOURCES
rm -f ${SOURCE} rm -f ${SOURCE}
# having the root directory called name-version seems essential # Having the root directory called name-version seems essential
mv ../${APP} ../${APP}-${VERSION} mv ../${APP} ../${APP}-${VERSION}
tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs tar -cvzf ${SOURCE} ../${APP}-${VERSION} --exclude-vcs
# rename the root directory without the version number # Rename the root directory without the version number
mv ../${APP}-${VERSION} ../${APP} mv ../${APP}-${VERSION} ../${APP}
# copy the spec file into the SPECS directory # Copy the spec file into the SPECS directory
cp -f rpmpackage/${APP}.spec ~/rpmbuild/SPECS cp -f rpmpackage/${APP}.spec ~/rpmbuild/SPECS
# build # Build
cd ~/rpmbuild/SPECS cd ~/rpmbuild/SPECS
rpmbuild -ba ${APP}.spec rpmbuild -ba ${APP}.spec
cd ${CURRDIR} cd ${CURRDIR}

View File

@ -34,6 +34,7 @@ import hashlib
from pyelliptic.openssl import OpenSSL from pyelliptic.openssl import OpenSSL
import pickle import pickle
import platform import platform
import textwrap
import debug import debug
from debug import logger from debug import logger
import subprocess import subprocess
@ -771,7 +772,7 @@ class MyForm(QtGui.QMainWindow):
if shared.config.has_section(fromAddress): if shared.config.has_section(fromAddress):
fromLabel = shared.config.get(fromAddress, 'label') fromLabel = shared.config.get(fromAddress, 'label')
if fromLabel == '': else:
fromLabel = fromAddress fromLabel = fromAddress
toLabel = '' toLabel = ''
@ -2250,6 +2251,8 @@ class MyForm(QtGui.QMainWindow):
self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked()))
shared.config.set('bitmessagesettings', 'useidenticons', str( shared.config.set('bitmessagesettings', 'useidenticons', str(
self.settingsDialogInstance.ui.checkBoxUseIdenticons.isChecked())) self.settingsDialogInstance.ui.checkBoxUseIdenticons.isChecked()))
shared.config.set('bitmessagesettings', 'replybelow', str(
self.settingsDialogInstance.ui.checkBoxReplyBelow.isChecked()))
lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex()) lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex())
if not languages[lang_ind] == 'other': if not languages[lang_ind] == 'other':
@ -2613,6 +2616,28 @@ class MyForm(QtGui.QMainWindow):
# We could also select upwards, but then our problem would be with the topmost message. # We could also select upwards, but then our problem would be with the topmost message.
# self.ui.tableWidgetInbox.clearSelection() manages to mark the message as read again. # self.ui.tableWidgetInbox.clearSelection() manages to mark the message as read again.
# Format predefined text on message reply.
def quoted_text(self, message):
if not shared.safeConfigGetBoolean('bitmessagesettings', 'replybelow'):
return '\n\n------------------------------------------------------\n' + message
quoteWrapper = textwrap.TextWrapper(replace_whitespace = False,
initial_indent = '> ',
subsequent_indent = '> ',
break_long_words = False,
break_on_hyphens = False)
def quote_line(line):
# Do quote empty lines.
if line == '' or line.isspace():
return '> '
# Quote already quoted lines, but do not wrap them.
elif line[0:2] == '> ':
return '> ' + line
# Wrap and quote lines/paragraphs new to this message.
else:
return quoteWrapper.fill(line)
return '\n'.join([quote_line(l) for l in message.splitlines()]) + '\n\n'
def on_action_InboxReply(self): def on_action_InboxReply(self):
currentInboxRow = self.ui.tableWidgetInbox.currentRow() currentInboxRow = self.ui.tableWidgetInbox.currentRow()
toAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item( toAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item(
@ -2655,7 +2680,8 @@ class MyForm(QtGui.QMainWindow):
else: else:
self.ui.comboBoxSendFrom.setCurrentIndex(0) self.ui.comboBoxSendFrom.setCurrentIndex(0)
self.ui.textEditMessage.setText('\n\n------------------------------------------------------\n' + unicode(messageAtCurrentInboxRow, 'utf-8)')) quotedText = self.quoted_text(unicode(messageAtCurrentInboxRow, 'utf-8'))
self.ui.textEditMessage.setText(quotedText)
if self.ui.tableWidgetInbox.item(currentInboxRow, 2).text()[0:3] in ['Re:', 'RE:']: if self.ui.tableWidgetInbox.item(currentInboxRow, 2).text()[0:3] in ['Re:', 'RE:']:
self.ui.lineEditSubject.setText( self.ui.lineEditSubject.setText(
self.ui.tableWidgetInbox.item(currentInboxRow, 2).text()) self.ui.tableWidgetInbox.item(currentInboxRow, 2).text())
@ -3318,9 +3344,11 @@ class settingsDialog(QtGui.QDialog):
shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile'))
self.ui.checkBoxUseIdenticons.setChecked( self.ui.checkBoxUseIdenticons.setChecked(
shared.safeConfigGetBoolean('bitmessagesettings', 'useidenticons')) shared.safeConfigGetBoolean('bitmessagesettings', 'useidenticons'))
self.ui.checkBoxReplyBelow.setChecked(
shared.safeConfigGetBoolean('bitmessagesettings', 'replybelow'))
global languages global languages
languages = ['system','en','eo','fr','de','es','ru','no','ar','zh_cn','en_pirate','other'] languages = ['system','en','eo','fr','de','es','ru','no','ar','zh_cn','ja','en_pirate','other']
user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale')) user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale'))
if user_countrycode in languages: if user_countrycode in languages:
curr_index = languages.index(user_countrycode) curr_index = languages.index(user_countrycode)

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'settings.ui' # Form implementation generated from reading ui file 'settings.ui'
# #
# Created: Mon Jan 20 14:26:31 2014 # Created: Wed Apr 30 18:35:41 2014
# by: PyQt4 UI code generator 4.10.3 # by: PyQt4 UI code generator 4.10.3
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
@ -26,7 +26,7 @@ except AttributeError:
class Ui_settingsDialog(object): class Ui_settingsDialog(object):
def setupUi(self, settingsDialog): def setupUi(self, settingsDialog):
settingsDialog.setObjectName(_fromUtf8("settingsDialog")) settingsDialog.setObjectName(_fromUtf8("settingsDialog"))
settingsDialog.resize(521, 399) settingsDialog.resize(521, 413)
self.gridLayout = QtGui.QGridLayout(settingsDialog) self.gridLayout = QtGui.QGridLayout(settingsDialog)
self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.buttonBox = QtGui.QDialogButtonBox(settingsDialog) self.buttonBox = QtGui.QDialogButtonBox(settingsDialog)
@ -72,6 +72,9 @@ class Ui_settingsDialog(object):
self.checkBoxUseIdenticons = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxUseIdenticons = QtGui.QCheckBox(self.tabUserInterface)
self.checkBoxUseIdenticons.setObjectName(_fromUtf8("checkBoxUseIdenticons")) self.checkBoxUseIdenticons.setObjectName(_fromUtf8("checkBoxUseIdenticons"))
self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.checkBoxUseIdenticons) self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.checkBoxUseIdenticons)
self.checkBoxReplyBelow = QtGui.QCheckBox(self.tabUserInterface)
self.checkBoxReplyBelow.setObjectName(_fromUtf8("checkBoxReplyBelow"))
self.formLayout.setWidget(8, QtGui.QFormLayout.LabelRole, self.checkBoxReplyBelow)
self.groupBox = QtGui.QGroupBox(self.tabUserInterface) self.groupBox = QtGui.QGroupBox(self.tabUserInterface)
self.groupBox.setObjectName(_fromUtf8("groupBox")) self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.formLayout_2 = QtGui.QFormLayout(self.groupBox) self.formLayout_2 = QtGui.QFormLayout(self.groupBox)
@ -91,8 +94,9 @@ class Ui_settingsDialog(object):
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.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.languageComboBox) self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.languageComboBox)
self.formLayout.setWidget(8, QtGui.QFormLayout.FieldRole, self.groupBox) self.formLayout.setWidget(9, QtGui.QFormLayout.FieldRole, self.groupBox)
self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8(""))
self.tabNetworkSettings = QtGui.QWidget() self.tabNetworkSettings = QtGui.QWidget()
self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings")) self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings"))
@ -392,6 +396,7 @@ class Ui_settingsDialog(object):
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.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.checkBoxWillinglySendToMobile.setText(_translate("settingsDialog", "Willingly include unencrypted destination address when sending to a mobile device", None))
self.checkBoxUseIdenticons.setText(_translate("settingsDialog", "Use Identicons", None)) self.checkBoxUseIdenticons.setText(_translate("settingsDialog", "Use Identicons", None))
self.checkBoxReplyBelow.setText(_translate("settingsDialog", "Reply below Quote", None))
self.groupBox.setTitle(_translate("settingsDialog", "Interface Language", None)) self.groupBox.setTitle(_translate("settingsDialog", "Interface Language", None))
self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system")) self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system"))
self.languageComboBox.setItemText(1, _translate("settingsDialog", "English", "en")) self.languageComboBox.setItemText(1, _translate("settingsDialog", "English", "en"))
@ -399,12 +404,13 @@ class Ui_settingsDialog(object):
self.languageComboBox.setItemText(3, _translate("settingsDialog", "Français", "fr")) self.languageComboBox.setItemText(3, _translate("settingsDialog", "Français", "fr"))
self.languageComboBox.setItemText(4, _translate("settingsDialog", "Deutsch", "de")) self.languageComboBox.setItemText(4, _translate("settingsDialog", "Deutsch", "de"))
self.languageComboBox.setItemText(5, _translate("settingsDialog", "Españl", "es")) self.languageComboBox.setItemText(5, _translate("settingsDialog", "Españl", "es"))
self.languageComboBox.setItemText(6, _translate("settingsDialog", "русский язык", "ru")) self.languageComboBox.setItemText(6, _translate("settingsDialog", "русский", "ru"))
self.languageComboBox.setItemText(7, _translate("settingsDialog", "Norsk", "no")) self.languageComboBox.setItemText(7, _translate("settingsDialog", "Norsk", "no"))
self.languageComboBox.setItemText(8, _translate("settingsDialog", "العربية", "ar")) self.languageComboBox.setItemText(8, _translate("settingsDialog", "العربية", "ar"))
self.languageComboBox.setItemText(9, _translate("settingsDialog", "简体中文", "zh_cn")) self.languageComboBox.setItemText(9, _translate("settingsDialog", "简体中文", "zh_cn"))
self.languageComboBox.setItemText(10, _translate("settingsDialog", "Pirate English", "en_pirate")) self.languageComboBox.setItemText(10, _translate("settingsDialog", "日本語", "ja"))
self.languageComboBox.setItemText(11, _translate("settingsDialog", "Other (set in keys.dat)", "other")) self.languageComboBox.setItemText(11, _translate("settingsDialog", "Pirate English", "en_pirate"))
self.languageComboBox.setItemText(12, _translate("settingsDialog", "Other (set in keys.dat)", "other"))
self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None))
self.groupBox1.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.label.setText(_translate("settingsDialog", "Listen for connections on port:", None))

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>521</width> <width>521</width>
<height>399</height> <height>413</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -105,7 +105,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="8" column="0">
<widget class="QCheckBox" name="checkBoxReplyBelow">
<property name="text">
<string>Reply below Quote</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>Interface Language</string> <string>Interface Language</string>
@ -151,7 +158,7 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string comment="ru">русский язык</string> <string comment="ru">русский</string>
</property> </property>
</item> </item>
<item> <item>
@ -169,6 +176,11 @@
<string comment="zh_cn">简体中文</string> <string comment="zh_cn">简体中文</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string comment="ja">日本語</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string comment="en_pirate">Pirate English</string> <string comment="en_pirate">Pirate English</string>

View File

@ -22,26 +22,37 @@ class outgoingSynSender(threading.Thread):
self.streamNumber = streamNumber self.streamNumber = streamNumber
self.selfInitiatedConnections = selfInitiatedConnections self.selfInitiatedConnections = selfInitiatedConnections
def _getPeer(self):
# If the user has specified a trusted peer then we'll only
# ever connect to that. Otherwise we'll pick a random one from
# the known nodes
shared.knownNodesLock.acquire()
if shared.trustedPeer:
peer = shared.trustedPeer
shared.knownNodes[self.streamNumber][peer] = time.time()
else:
peer, = random.sample(shared.knownNodes[self.streamNumber], 1)
shared.knownNodesLock.release()
return peer
def run(self): def run(self):
while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'):
time.sleep(2) time.sleep(2)
while shared.safeConfigGetBoolean('bitmessagesettings', 'sendoutgoingconnections'): while shared.safeConfigGetBoolean('bitmessagesettings', 'sendoutgoingconnections'):
while len(self.selfInitiatedConnections[self.streamNumber]) >= 8: # maximum number of outgoing connections = 8 maximumConnections = 1 if shared.trustedPeer else 8 # maximum number of outgoing connections = 8
while len(self.selfInitiatedConnections[self.streamNumber]) >= maximumConnections:
time.sleep(10) time.sleep(10)
if shared.shutdown: if shared.shutdown:
break break
random.seed() random.seed()
shared.knownNodesLock.acquire() peer = self._getPeer()
peer, = random.sample(shared.knownNodes[self.streamNumber], 1)
shared.knownNodesLock.release()
shared.alreadyAttemptedConnectionsListLock.acquire() shared.alreadyAttemptedConnectionsListLock.acquire()
while peer in shared.alreadyAttemptedConnectionsList or peer.host in shared.connectedHostsList: while peer in shared.alreadyAttemptedConnectionsList or peer.host in shared.connectedHostsList:
shared.alreadyAttemptedConnectionsListLock.release() shared.alreadyAttemptedConnectionsListLock.release()
# print 'choosing new sample' # print 'choosing new sample'
random.seed() random.seed()
shared.knownNodesLock.acquire() peer = self._getPeer()
peer, = random.sample(shared.knownNodes[self.streamNumber], 1)
shared.knownNodesLock.release()
time.sleep(1) time.sleep(1)
# Clear out the shared.alreadyAttemptedConnectionsList every half # Clear out the shared.alreadyAttemptedConnectionsList every half
# hour so that this program will again attempt a connection # hour so that this program will again attempt a connection

View File

@ -147,9 +147,9 @@ class receiveDataThread(threading.Thread):
with shared.printLock: with shared.printLock:
print 'remoteCommand', repr(remoteCommand.replace('\x00', '')), ' from', self.peer print 'remoteCommand', repr(remoteCommand.replace('\x00', '')), ' from', self.peer
if remoteCommand == 'version\x00\x00\x00\x00\x00': if remoteCommand == 'version\x00\x00\x00\x00\x00' and not self.connectionIsOrWasFullyEstablished:
self.recversion(self.data[24:self.payloadLength + 24]) self.recversion(self.data[24:self.payloadLength + 24])
elif remoteCommand == 'verack\x00\x00\x00\x00\x00\x00': elif remoteCommand == 'verack\x00\x00\x00\x00\x00\x00' and not self.connectionIsOrWasFullyEstablished:
self.recverack() self.recverack()
elif remoteCommand == 'addr\x00\x00\x00\x00\x00\x00\x00\x00' and self.connectionIsOrWasFullyEstablished: elif remoteCommand == 'addr\x00\x00\x00\x00\x00\x00\x00\x00' and self.connectionIsOrWasFullyEstablished:
self.recaddr(self.data[24:self.payloadLength + 24]) self.recaddr(self.data[24:self.payloadLength + 24])
@ -237,7 +237,12 @@ class receiveDataThread(threading.Thread):
self.connectionFullyEstablished() self.connectionFullyEstablished()
def connectionFullyEstablished(self): def connectionFullyEstablished(self):
if self.connectionIsOrWasFullyEstablished:
# there is no reason to run this function a second time
return
self.connectionIsOrWasFullyEstablished = True self.connectionIsOrWasFullyEstablished = True
# Command the corresponding sendDataThread to set its own connectionIsOrWasFullyEstablished variable to True also
self.sendDataThreadQueue.put((0, 'connectionIsOrWasFullyEstablished', 'no data'))
if not self.initiatedConnection: if not self.initiatedConnection:
shared.clientHasReceivedIncomingConnections = True shared.clientHasReceivedIncomingConnections = True
shared.UISignalQueue.put(('setStatusIcon', 'green')) shared.UISignalQueue.put(('setStatusIcon', 'green'))
@ -301,8 +306,9 @@ class receiveDataThread(threading.Thread):
self.sendinvMessageToJustThisOnePeer( self.sendinvMessageToJustThisOnePeer(
numberOfObjectsInInvMessage, payload) numberOfObjectsInInvMessage, payload)
# Self explanatory. Notice that there is also a broadcastinv function for # Used to send a big inv message when the connection with a node is
# broadcasting invs to everyone in our stream. # first fully established. Notice that there is also a broadcastinv
# function for broadcasting invs to everyone in our stream.
def sendinvMessageToJustThisOnePeer(self, numberOfObjects, payload): def sendinvMessageToJustThisOnePeer(self, numberOfObjects, payload):
payload = encodeVarint(numberOfObjects) + payload payload = encodeVarint(numberOfObjects) + payload
headerData = '\xe9\xbe\xb4\xd9' # magic bits, slighly different from Bitcoin's magic bits. headerData = '\xe9\xbe\xb4\xd9' # magic bits, slighly different from Bitcoin's magic bits.
@ -313,6 +319,14 @@ class receiveDataThread(threading.Thread):
print 'Sending huge inv message with', numberOfObjects, 'objects to just this one peer' print 'Sending huge inv message with', numberOfObjects, 'objects to just this one peer'
self.sendDataThreadQueue.put((0, 'sendRawData', headerData + payload)) self.sendDataThreadQueue.put((0, 'sendRawData', headerData + payload))
def _sleepForTimingAttackMitigation(self, sleepTime):
# We don't need to do the timing attack mitigation if we are
# only connected to the trusted peer because we can trust the
# peer not to attack
if sleepTime > 0 and doTimingAttackMitigation and shared.trustedPeer == None:
with shared.printLock:
print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.'
time.sleep(sleepTime)
# We have received a broadcast message # We have received a broadcast message
def recbroadcast(self, data): def recbroadcast(self, data):
@ -341,10 +355,7 @@ class receiveDataThread(threading.Thread):
sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \
(time.time() - self.messageProcessingStartTime) (time.time() - self.messageProcessingStartTime)
if sleepTime > 0 and doTimingAttackMitigation: self._sleepForTimingAttackMitigation(sleepTime)
with shared.printLock:
print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.'
time.sleep(sleepTime)
# We have received a msg message. # We have received a msg message.
def recmsg(self, data): def recmsg(self, data):
@ -373,10 +384,7 @@ class receiveDataThread(threading.Thread):
sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \
(time.time() - self.messageProcessingStartTime) (time.time() - self.messageProcessingStartTime)
if sleepTime > 0 and doTimingAttackMitigation: self._sleepForTimingAttackMitigation(sleepTime)
with shared.printLock:
print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.'
time.sleep(sleepTime)
# We have received a pubkey # We have received a pubkey
def recpubkey(self, data): def recpubkey(self, data):
@ -387,11 +395,7 @@ class receiveDataThread(threading.Thread):
lengthOfTimeWeShouldUseToProcessThisMessage = .1 lengthOfTimeWeShouldUseToProcessThisMessage = .1
sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \
(time.time() - self.pubkeyProcessingStartTime) (time.time() - self.pubkeyProcessingStartTime)
if sleepTime > 0 and doTimingAttackMitigation: self._sleepForTimingAttackMitigation(sleepTime)
with shared.printLock:
print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.'
time.sleep(sleepTime)
# We have received an inv message # We have received an inv message
def recinv(self, data): def recinv(self, data):
@ -665,7 +669,10 @@ class receiveDataThread(threading.Thread):
print 'knownNodes currently has', len(shared.knownNodes[self.streamNumber]), 'nodes for this stream.' print 'knownNodes currently has', len(shared.knownNodes[self.streamNumber]), 'nodes for this stream.'
# Send a big addr message to our peer # Send a huge addr message to our peer. This is only used
# when we fully establish a connection with a
# peer (with the full exchange of version and verack
# messages).
def sendaddr(self): def sendaddr(self):
addrsInMyStream = {} addrsInMyStream = {}
addrsInChildStreamLeft = {} addrsInChildStreamLeft = {}
@ -750,7 +757,15 @@ class receiveDataThread(threading.Thread):
if len(data) < 83: if len(data) < 83:
# This version message is unreasonably short. Forget it. # This version message is unreasonably short. Forget it.
return return
elif not self.verackSent: if self.verackSent:
"""
We must have already processed the remote node's version message.
There might be a time in the future when we Do want to process
a new version message, like if the remote node wants to update
the streams in which they are interested. But for now we'll
ignore this version message
"""
return
self.remoteProtocolVersion, = unpack('>L', data[:4]) self.remoteProtocolVersion, = unpack('>L', data[:4])
if self.remoteProtocolVersion <= 1: if self.remoteProtocolVersion <= 1:
shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) shared.broadcastToSendDataQueues((0, 'shutdown', self.peer))
@ -785,13 +800,15 @@ class receiveDataThread(threading.Thread):
# If this was an incoming connection, then the sendData thread # If this was an incoming connection, then the sendData thread
# doesn't know the stream. We have to set it. # doesn't know the stream. We have to set it.
if not self.initiatedConnection: if not self.initiatedConnection:
shared.broadcastToSendDataQueues(( self.sendDataThreadQueue.put((0, 'setStreamNumber', self.streamNumber))
0, 'setStreamNumber', (self.peer, self.streamNumber)))
if data[72:80] == shared.eightBytesOfRandomDataUsedToDetectConnectionsToSelf: if data[72:80] == shared.eightBytesOfRandomDataUsedToDetectConnectionsToSelf:
shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) shared.broadcastToSendDataQueues((0, 'shutdown', self.peer))
with shared.printLock: with shared.printLock:
print 'Closing connection to myself: ', self.peer print 'Closing connection to myself: ', self.peer
return return
# The other peer's protocol version is of interest to the sendDataThread but we learn of it
# in this version message. Let us inform the sendDataThread.
self.sendDataThreadQueue.put((0, 'setRemoteProtocolVersion', self.remoteProtocolVersion)) self.sendDataThreadQueue.put((0, 'setRemoteProtocolVersion', self.remoteProtocolVersion))
shared.knownNodesLock.acquire() shared.knownNodesLock.acquire()

View File

@ -25,6 +25,7 @@ class sendDataThread(threading.Thread):
self.data = '' self.data = ''
self.objectHashHolderInstance = objectHashHolder(self.sendDataThreadQueue) self.objectHashHolderInstance = objectHashHolder(self.sendDataThreadQueue)
self.objectHashHolderInstance.start() self.objectHashHolderInstance.start()
self.connectionIsOrWasFullyEstablished = False
def setup( def setup(
@ -71,16 +72,6 @@ class sendDataThread(threading.Thread):
if data == self.peer or data == 'all': if data == self.peer or data == 'all':
with shared.printLock: with shared.printLock:
print 'sendDataThread (associated with', self.peer, ') ID:', id(self), 'shutting down now.' print 'sendDataThread (associated with', self.peer, ') ID:', id(self), 'shutting down now.'
try:
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
except:
pass
shared.sendDataQueues.remove(self.sendDataThreadQueue)
with shared.printLock:
print 'len of sendDataQueues', len(shared.sendDataQueues)
break break
# When you receive an incoming connection, a sendDataThread is # When you receive an incoming connection, a sendDataThread is
# created even though you don't yet know what stream number the # created even though you don't yet know what stream number the
@ -89,12 +80,9 @@ class sendDataThread(threading.Thread):
# will continue on with the connection and will set the # will continue on with the connection and will set the
# streamNumber of this send data thread here: # streamNumber of this send data thread here:
elif command == 'setStreamNumber': elif command == 'setStreamNumber':
peerInMessage, specifiedStreamNumber = data self.streamNumber = data
if peerInMessage == self.peer:
with shared.printLock: with shared.printLock:
print 'setting the stream number in the sendData thread (ID:', id(self), ') to', specifiedStreamNumber print 'setting the stream number in the sendData thread (ID:', id(self), ') to', self.streamNumber
self.streamNumber = specifiedStreamNumber
elif command == 'setRemoteProtocolVersion': elif command == 'setRemoteProtocolVersion':
specifiedRemoteProtocolVersion = data specifiedRemoteProtocolVersion = data
with shared.printLock: with shared.printLock:
@ -103,6 +91,9 @@ class sendDataThread(threading.Thread):
elif command == 'advertisepeer': elif command == 'advertisepeer':
self.objectHashHolderInstance.holdPeer(data) self.objectHashHolderInstance.holdPeer(data)
elif command == 'sendaddr': elif command == 'sendaddr':
if not self.connectionIsOrWasFullyEstablished:
# not sending addr because we haven't sent and heard a verack from the remote node yet
return
numberOfAddressesInAddrMessage = len( numberOfAddressesInAddrMessage = len(
data) data)
payload = '' payload = ''
@ -127,17 +118,13 @@ class sendDataThread(threading.Thread):
self.lastTimeISentData = int(time.time()) self.lastTimeISentData = int(time.time())
except: except:
print 'sendaddr: self.sock.sendall failed' print 'sendaddr: self.sock.sendall failed'
try:
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
except:
pass
shared.sendDataQueues.remove(self.sendDataThreadQueue)
print 'sendDataThread thread (ID:', str(id(self)) + ') ending now. Was connected to', self.peer
break break
elif command == 'advertiseobject': elif command == 'advertiseobject':
self.objectHashHolderInstance.holdHash(data) self.objectHashHolderInstance.holdHash(data)
elif command == 'sendinv': elif command == 'sendinv':
if not self.connectionIsOrWasFullyEstablished:
# not sending inv because we haven't sent and heard a verack from the remote node yet
return
payload = '' payload = ''
for hash in data: for hash in data:
if hash not in self.someObjectsOfWhichThisRemoteNodeIsAlreadyAware: if hash not in self.someObjectsOfWhichThisRemoteNodeIsAlreadyAware:
@ -153,13 +140,6 @@ class sendDataThread(threading.Thread):
self.lastTimeISentData = int(time.time()) self.lastTimeISentData = int(time.time())
except: except:
print 'sendinv: self.sock.sendall failed' print 'sendinv: self.sock.sendall failed'
try:
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
except:
pass
shared.sendDataQueues.remove(self.sendDataThreadQueue)
print 'sendDataThread thread (ID:', str(id(self)) + ') ending now. Was connected to', self.peer
break break
elif command == 'pong': elif command == 'pong':
self.someObjectsOfWhichThisRemoteNodeIsAlreadyAware.clear() # To save memory, let us clear this data structure from time to time. As its function is to help us keep from sending inv messages to peers which sent us the same inv message mere seconds earlier, it will be fine to clear this data structure from time to time. self.someObjectsOfWhichThisRemoteNodeIsAlreadyAware.clear() # To save memory, let us clear this data structure from time to time. As its function is to help us keep from sending inv messages to peers which sent us the same inv message mere seconds earlier, it will be fine to clear this data structure from time to time.
@ -174,29 +154,26 @@ class sendDataThread(threading.Thread):
self.lastTimeISentData = int(time.time()) self.lastTimeISentData = int(time.time())
except: except:
print 'send pong failed' print 'send pong failed'
try:
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
except:
pass
shared.sendDataQueues.remove(self.sendDataThreadQueue)
print 'sendDataThread thread', self, 'ending now. Was connected to', self.peer
break break
elif command == 'sendRawData': elif command == 'sendRawData':
try: try:
self.sock.sendall(data) self.sock.sendall(data)
self.lastTimeISentData = int(time.time()) self.lastTimeISentData = int(time.time())
except: except:
print 'Sending of data to', self.peer, 'failed. sendDataThread thread', self, 'ending now.'
break
elif command == 'connectionIsOrWasFullyEstablished':
self.connectionIsOrWasFullyEstablished = True
else:
with shared.printLock:
print 'sendDataThread ID:', id(self), 'ignoring command', command, 'because the thread is not in stream', deststream
try: try:
self.sock.shutdown(socket.SHUT_RDWR) self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close() self.sock.close()
except: except:
pass pass
shared.sendDataQueues.remove(self.sendDataThreadQueue) shared.sendDataQueues.remove(self.sendDataThreadQueue)
print 'Sending of data to', self.peer, 'failed. sendDataThread thread', self, 'ending now.'
break
else:
with shared.printLock: with shared.printLock:
print 'sendDataThread ID:', id(self), 'ignoring command', command, 'because the thread is not in stream', deststream print 'Number of queues remaining in sendDataQueues:', len(shared.sendDataQueues)
self.objectHashHolderInstance.close() self.objectHashHolderInstance.close()

View File

@ -39,6 +39,11 @@ class singleListener(threading.Thread):
return sock return sock
def run(self): def run(self):
# If there is a trusted peer then we don't want to accept
# incoming connections so we'll just abandon the thread
if shared.trustedPeer:
return
while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'):
time.sleep(1) time.sleep(1)
helper_bootstrap.dns() helper_bootstrap.dns()

View File

@ -11,16 +11,16 @@ def createDefaultKnownNodes(appdata):
############## Stream 1 ################ ############## Stream 1 ################
stream1 = {} stream1 = {}
stream1[shared.Peer('176.31.246.114', 8444)] = int(time.time()) #stream1[shared.Peer('2604:2000:1380:9f:82e:148b:2746:d0c7', 8080)] = int(time.time())
stream1[shared.Peer('109.229.197.133', 8444)] = int(time.time()) stream1[shared.Peer('68.33.0.104', 8444)] = int(time.time())
stream1[shared.Peer('174.3.101.111', 8444)] = int(time.time()) stream1[shared.Peer('97.77.34.35', 8444)] = int(time.time())
stream1[shared.Peer('90.188.238.79', 7829)] = int(time.time()) stream1[shared.Peer('71.232.195.131', 8444)] = int(time.time())
stream1[shared.Peer('184.75.69.2', 8444)] = int(time.time()) stream1[shared.Peer('192.241.231.39', 8444)] = int(time.time())
stream1[shared.Peer('60.225.209.243', 8444)] = int(time.time()) stream1[shared.Peer('75.66.0.116', 8444)] = int(time.time())
stream1[shared.Peer('5.145.140.218', 8444)] = int(time.time()) stream1[shared.Peer('182.169.23.102', 8444)] = int(time.time())
stream1[shared.Peer('5.19.255.216', 8444)] = int(time.time()) stream1[shared.Peer('75.95.134.9', 8444)] = int(time.time())
stream1[shared.Peer('193.159.162.189', 8444)] = int(time.time()) stream1[shared.Peer('46.236.100.108', 48444)] = int(time.time())
stream1[shared.Peer('86.26.15.171', 8444)] = int(time.time()) stream1[shared.Peer('66.108.53.42', 8080)] = int(time.time())
############# Stream 2 ################# ############# Stream 2 #################
stream2 = {} stream2 = {}

View File

@ -12,6 +12,17 @@ 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. 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 _loadTrustedPeer():
try:
trustedPeer = shared.config.get('bitmessagesettings', 'trustedpeer')
except ConfigParser.Error:
# This probably means the trusted peer wasn't specified so we
# can just leave it as None
return
host, port = trustedPeer.split(':')
shared.trustedPeer = shared.Peer(host, int(port))
def loadConfig(): def loadConfig():
if shared.appdata: if shared.appdata:
shared.config.read(shared.appdata + 'keys.dat') shared.config.read(shared.appdata + 'keys.dat')
@ -90,6 +101,7 @@ def loadConfig():
shared.config.set('bitmessagesettings', 'userlocale', 'system') shared.config.set('bitmessagesettings', 'userlocale', 'system')
shared.config.set('bitmessagesettings', 'useidenticons', 'True') shared.config.set('bitmessagesettings', 'useidenticons', 'True')
shared.config.set('bitmessagesettings', 'identiconsuffix', ''.join(random.choice("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") for x in range(12))) # a twelve character pseudo-password to salt the identicons shared.config.set('bitmessagesettings', 'identiconsuffix', ''.join(random.choice("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") for x in range(12))) # a twelve character pseudo-password to salt the identicons
shared.config.set('bitmessagesettings', 'replybelow', 'False')
#start:UI setting to stop trying to send messages after X days/months #start:UI setting to stop trying to send messages after X days/months
shared.config.set( shared.config.set(
@ -122,6 +134,8 @@ def loadConfig():
with open(shared.appdata + 'keys.dat', 'wb') as configfile: with open(shared.appdata + 'keys.dat', 'wb') as configfile:
shared.config.write(configfile) shared.config.write(configfile)
_loadTrustedPeer()
def isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections(): def isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections():
try: try:
VER_THIS=StrictVersion(platform.version()) VER_THIS=StrictVersion(platform.version())

View File

@ -92,6 +92,18 @@ namecoinDefaultRpcPort = "8336"
# binary distributions vs source distributions. # binary distributions vs source distributions.
frozen = getattr(sys,'frozen', None) frozen = getattr(sys,'frozen', None)
# If the trustedpeer option is specified in keys.dat then this will
# contain a Peer which will be connected to instead of using the
# addresses advertised by other peers. The client will only connect to
# this peer and the timing attack mitigation will be disabled in order
# to download data faster. The expected use case is where the user has
# a fast connection to a trusted server where they run a BitMessage
# daemon permanently. If they then run a second instance of the client
# on a local machine periodically when they want to check for messages
# it will sync with the network a lot faster without compromising
# security.
trustedPeer = None
def isInSqlInventory(hash): def isInSqlInventory(hash):
queryreturn = sqlQuery('''select hash from inventory where hash=?''', hash) queryreturn = sqlQuery('''select hash from inventory where hash=?''', hash)
return queryreturn != [] return queryreturn != []

View File

@ -5,17 +5,17 @@
<message> <message>
<location filename="../bitmessageqt/addaddressdialog.py" line="62"/> <location filename="../bitmessageqt/addaddressdialog.py" line="62"/>
<source>Add new entry</source> <source>Add new entry</source>
<translation type="unfinished">Neuen Eintrag erstellen</translation> <translation>Neuen Eintrag erstellen</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/addaddressdialog.py" line="63"/> <location filename="../bitmessageqt/addaddressdialog.py" line="63"/>
<source>Label</source> <source>Label</source>
<translation type="unfinished"></translation> <translation>Name oder Bezeichnung</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/addaddressdialog.py" line="64"/> <location filename="../bitmessageqt/addaddressdialog.py" line="64"/>
<source>Address</source> <source>Address</source>
<translation type="unfinished">Adresse</translation> <translation>Adresse</translation>
</message> </message>
</context> </context>
<context> <context>
@ -153,7 +153,7 @@
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="850"/> <location filename="../bitmessageqt/__init__.py" line="850"/>
<source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source> <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
<translation>Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind zu berechnen. %1</translation> <translation>Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind, zu berechnen. %1</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="853"/> <location filename="../bitmessageqt/__init__.py" line="853"/>
@ -686,7 +686,7 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../bitmessageqt/bitmessageui.py" line="601"/> <location filename="../bitmessageqt/bitmessageui.py" line="601"/>
<source>The Address book is useful for adding names or labels to other people&apos;s Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the &apos;Add&apos; button, or from your inbox by right-clicking on a message.</source> <source>The Address book is useful for adding names or labels to other people&apos;s Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the &apos;Add&apos; button, or from your inbox by right-clicking on a message.</source>
<translation>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 &quot;Hinzufügen&quot; eintragen, oder über einen Rechtsklick auf eine Nachricht im Posteingang.</translation> <translation>Das Adressbuch ist nützlich, um die Bitmessage-Adressen anderer Personen Namen oder Beschreibungen zuzuordnen, sodass Sie sie einfacher im Posteingang erkennen können. Sie können Adressen über &quot;Neuen Eintrag erstellen&quot; hinzufügen, oder über einen Rechtsklick auf eine Nachricht im Posteingang.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/bitmessageui.py" line="614"/> <location filename="../bitmessageqt/bitmessageui.py" line="614"/>
@ -946,7 +946,7 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="2998"/> <location filename="../bitmessageqt/__init__.py" line="2998"/>
<source>Set avatar...</source> <source>Set avatar...</source>
<translation type="unfinished"></translation> <translation>Avatar wählen...</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="1359"/> <location filename="../bitmessageqt/__init__.py" line="1359"/>
@ -966,7 +966,7 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="1519"/> <location filename="../bitmessageqt/__init__.py" line="1519"/>
<source>Inventory lookups per second: %1</source> <source>Inventory lookups per second: %1</source>
<translation type="unfinished"></translation> <translation>Inventory lookups pro Sekunde: %1</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="2286"/> <location filename="../bitmessageqt/__init__.py" line="2286"/>
@ -981,12 +981,12 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="3005"/> <location filename="../bitmessageqt/__init__.py" line="3005"/>
<source>Do you really want to remove this avatar?</source> <source>Do you really want to remove this avatar?</source>
<translation type="unfinished"></translation> <translation>Wollen Sie diesen Avatar wirklich entfernen?</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="3013"/> <location filename="../bitmessageqt/__init__.py" line="3013"/>
<source>You have already set an avatar for this address. Do you really want to overwrite it?</source> <source>You have already set an avatar for this address. Do you really want to overwrite it?</source>
<translation type="unfinished"></translation> <translation>Sie haben bereits einen Avatar für diese Adresse gewählt. Wollen Sie ihn wirklich überschreiben?</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="3287"/> <location filename="../bitmessageqt/__init__.py" line="3287"/>
@ -1040,7 +1040,7 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../bitmessageqt/bitmessageui.py" line="627"/> <location filename="../bitmessageqt/bitmessageui.py" line="627"/>
<source>Inventory lookups per second: 0</source> <source>Inventory lookups per second: 0</source>
<translation type="unfinished"></translation> <translation>Inventory lookups pro Sekunde: 0</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1130,7 +1130,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/newaddressdialog.py" line="190"/> <location filename="../bitmessageqt/newaddressdialog.py" line="190"/>
<source> (best if this is the first of many addresses you will create)</source> <source> (best if this is the first of many addresses you will create)</source>
<translation>(zum generieren der erste Adresse empfohlen)</translation> <translation>(Zum Generieren der ersten Adresse empfohlen)</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/newaddressdialog.py" line="191"/> <location filename="../bitmessageqt/newaddressdialog.py" line="191"/>
@ -1145,7 +1145,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/newaddressdialog.py" line="181"/> <location filename="../bitmessageqt/newaddressdialog.py" line="181"/>
<source>Address version number: 4</source> <source>Address version number: 4</source>
<translation type="unfinished">Adress-Versionsnummer: 4</translation> <translation>Adress-Versionsnummer: 4</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1275,7 +1275,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/help.py" line="47"/> <location filename="../bitmessageqt/help.py" line="47"/>
<source>As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki:</source> <source>As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki:</source>
<translation>Bei Bitmessage handelt es sich um ein kollaboratives Projekt, Hilfe finden Sie online in Bitmessage-Wiki:</translation> <translation>Bitmessage ist ein kollaboratives Projekt. Hilfe finden Sie online im Bitmessage-Wiki:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1293,7 +1293,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/iconglossary.py" line="84"/> <location filename="../bitmessageqt/iconglossary.py" line="84"/>
<source>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&apos;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.</source> <source>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&apos;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.</source>
<translation>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.</translation> <translation>Sie haben mindestes eine Verbindung mit einem Netzwerkteilnehmer über eine ausgehende Verbindung, aber Sie haben noch keine eingehende Verbindung. Ihre Firewall oder Ihr Router ist vermutlich nicht richtig konfiguriert, um eingehende TCP-Verbindungen an Ihren Computer weiterzuleiten. Bitmessage wird gut funktionieren, jedoch helfen Sie dem Netzwerk, wenn Sie eingehende Verbindungen erlauben. Es hilft auch Ihnen schneller und mehr Verbindungen ins Netzwerk aufzubauen.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/iconglossary.py" line="85"/> <location filename="../bitmessageqt/iconglossary.py" line="85"/>
@ -1336,7 +1336,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/newchandialog.py" line="104"/> <location filename="../bitmessageqt/newchandialog.py" line="104"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Chans are experimental and completely unmoderatable.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Chans are experimental and completely unmoderatable.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Chans sind experimentell and völlig unmoderierbar.&lt;/p&gt;&lt;br&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Chans sind experimentell und völlig unmoderierbar.&lt;/p&gt;&lt;br&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/newchandialog.py" line="106"/> <location filename="../bitmessageqt/newchandialog.py" line="106"/>
@ -1346,7 +1346,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/newchandialog.py" line="101"/> <location filename="../bitmessageqt/newchandialog.py" line="101"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;br&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Geben Sie einen Namen für Ihren Chan ein. Wenn Sie einen ausreichend komplexen Chan-Namen wählen (wie einen starken, 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.&lt;/p&gt;&lt;br&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1369,7 +1369,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="117"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="117"/>
<source>Number of addresses to make based on your passphrase:</source> <source>Number of addresses to make based on your passphrase:</source>
<translation>Anzahl der Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen:</translation> <translation>Anzahl der Adressen, die basierend auf diesem Kennwortsatz erzeugt werden sollen:</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="108"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="108"/>
@ -1384,7 +1384,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="119"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="119"/>
<source>Stream number:</source> <source>Stream number:</source>
<translation>Stream Nummer:</translation> <translation>Stream-Nummer:</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="120"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="120"/>
@ -1394,7 +1394,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="121"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="121"/>
<source>Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter</source> <source>Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter</source>
<translation>Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen</translation> <translation>Verwenden Sie einige Minuten extra Rechenleistung, um die Adresse(n) ein bis zwei Zeichen kürzer zu machen</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="122"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="122"/>
@ -1404,12 +1404,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="123"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="123"/>
<source>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.</source> <source>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.</source>
<translation>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.</translation> <translation>Wenn Sie bereits deterministische Adressen erstellt haben, aber diese durch einen Unfall (zum Beispiel durch eine defekte Festplatte) verloren haben, können Sie sie hier regenerieren. Dies funktioniert nur dann, wenn Sie bei der erstmaligen Erstellung Ihrer Adressen nicht den Zufallsgenerator verwendet haben.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="118"/> <location filename="../bitmessageqt/regenerateaddresses.py" line="118"/>
<source>Address version number:</source> <source>Address version number:</source>
<translation type="unfinished"></translation> <translation>Adress-Versionsnummer:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1427,7 +1427,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="386"/> <location filename="../bitmessageqt/settings.py" line="386"/>
<source>Start Bitmessage in the tray (don&apos;t show main window)</source> <source>Start Bitmessage in the tray (don&apos;t show main window)</source>
<translation>Bitmessage minimiert starten (Zeigt das Hauptfenster nicht an)</translation> <translation>Bitmessage minimiert starten (zeigt das Hauptfenster nicht an)</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="387"/> <location filename="../bitmessageqt/settings.py" line="387"/>
@ -1442,12 +1442,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="389"/> <location filename="../bitmessageqt/settings.py" line="389"/>
<source>Run in Portable Mode</source> <source>Run in Portable Mode</source>
<translation>In portablem Modus arbeiten</translation> <translation>Im portablen Modus arbeiten</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="390"/> <location filename="../bitmessageqt/settings.py" line="390"/>
<source>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.</source> <source>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.</source>
<translation>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.</translation> <translation>Im portablen Modus werden Nachrichten und Konfigurationen im gleichen Ordner abgelegt, in dem sich das Programm selbst befindet (anstatt im normalen Anwendungsdaten-Ordner). Das macht es möglich, Bitmessage auf einem USB-Stick zu betreiben.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="404"/> <location filename="../bitmessageqt/settings.py" line="404"/>
@ -1522,7 +1522,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="422"/> <location filename="../bitmessageqt/settings.py" line="422"/>
<source>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. </source> <source>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. </source>
<translation>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.</translation> <translation>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.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="419"/> <location filename="../bitmessageqt/settings.py" line="419"/>
@ -1537,12 +1537,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="423"/> <location filename="../bitmessageqt/settings.py" line="423"/>
<source>The &apos;Small message difficulty&apos; 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&apos;t really affect large messages.</source> <source>The &apos;Small message difficulty&apos; 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&apos;t really affect large messages.</source>
<translation>Die &quot;Schwierigkeit für kurze Nachrichten&quot; 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.</translation> <translation>Die &quot;Schwierigkeit für kurze Nachrichten&quot; trifft nur auf das Senden kurzer Nachrichten zu. Verdoppelung dieses Wertes macht es fast doppelt so schwer, kurze Nachrichten zu senden, aber hat keinen Effekt bei langen Nachrichten.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="420"/> <location filename="../bitmessageqt/settings.py" line="420"/>
<source>The &apos;Total difficulty&apos; affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work.</source> <source>The &apos;Total difficulty&apos; affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work.</source>
<translation>Die &quot;Gesammtschwierigkeit&quot; beeinflusst die absolute menge Arbeit die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit.</translation> <translation>Die &quot;Gesamtschwierigkeit&quot; beeinflusst die absolute Menge Arbeit, die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit.</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="424"/> <location filename="../bitmessageqt/settings.py" line="424"/>
@ -1557,7 +1557,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="426"/> <location filename="../bitmessageqt/settings.py" line="426"/>
<source>Maximum acceptable total difficulty:</source> <source>Maximum acceptable total difficulty:</source>
<translation>Maximale akzeptierte Gesammtschwierigkeit:</translation> <translation>Maximale akzeptierte Gesamtschwierigkeit:</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="427"/> <location filename="../bitmessageqt/settings.py" line="427"/>
@ -1572,7 +1572,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="414"/> <location filename="../bitmessageqt/settings.py" line="414"/>
<source>Listen for incoming connections when using proxy</source> <source>Listen for incoming connections when using proxy</source>
<translation>Auf eingehende Verdindungen warten, auch wenn eine Proxy-Server verwendet wird</translation> <translation>Auf eingehende Verdindungen warten, auch wenn ein Proxy-Server verwendet wird</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="391"/> <location filename="../bitmessageqt/settings.py" line="391"/>
@ -1582,7 +1582,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei
<message> <message>
<location filename="../bitmessageqt/settings.py" line="429"/> <location filename="../bitmessageqt/settings.py" line="429"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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 &lt;span style=&quot; font-style:italic;&quot;&gt;test. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;(Getting your own Bitmessage address into Namecoin is still rather difficult).&lt;/p&gt;&lt;p&gt;Bitmessage can use either namecoind directly or a running nmcontrol instance.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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 &lt;span style=&quot; font-style:italic;&quot;&gt;test. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;(Getting your own Bitmessage address into Namecoin is still rather difficult).&lt;/p&gt;&lt;p&gt;Bitmessage can use either namecoind directly or a running nmcontrol instance.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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 &lt;span style=&quot; font-style:italic;&quot;&gt;test &lt;/span&gt;senden.&lt;/p&gt;&lt;p&gt; (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)&lt;/p&gt;&lt;p&gt;Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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 &lt;span style=&quot; font-style:italic;&quot;&gt;test &lt;/span&gt;senden.&lt;/p&gt;&lt;p&gt; (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)&lt;/p&gt;&lt;p&gt;Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="430"/> <location filename="../bitmessageqt/settings.py" line="430"/>

View File

@ -0,0 +1,33 @@
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_ja.ts
CODECFORTR = UTF-8

Binary file not shown.

View File

@ -0,0 +1,1463 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="ja_JP" sourcelanguage="en">
<context>
<name>MainWindow</name>
<message>
<location filename="../bitmessageqt/__init__.py" line="91"/>
<source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
<translation>%111</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="163"/>
<source>Reply</source>
<translatorcomment>.</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="165"/>
<source>Add sender to your Address Book</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="269"/>
<source>Move to Trash</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="169"/>
<source>View HTML code as formatted text</source>
<translation>HTMLコードを整形したテキストで表示</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="171"/>
<source>Save message as...</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="173"/>
<source>Mark Unread</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="573"/>
<source>New</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="292"/>
<source>Enable</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="294"/>
<source>Disable</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="290"/>
<source>Copy address to clipboard</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="200"/>
<source>Special address behavior...</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="218"/>
<source>Send message to this address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="222"/>
<source>Subscribe to this address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="224"/>
<source>Add New Address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="288"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="271"/>
<source>Copy destination address to clipboard</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="273"/>
<source>Force send</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="600"/>
<source>Add new entry</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="398"/>
<source>Since startup on %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="632"/>
<source>Waiting on their encryption key. Will request it again soon.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="635"/>
<source>Encryption key request queued.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="638"/>
<source>Queued.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="641"/>
<source>Message sent. Waiting on acknowledgement. Sent at %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="644"/>
<source>Message sent. Sent at %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="647"/>
<source>Need to do work to send message. Work is queued.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="650"/>
<source>Acknowledgement of the message received %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="653"/>
<source>Broadcast queued.</source>
<translation>Broadcastがキューに入りました</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="656"/>
<source>Broadcast on %1</source>
<translation>Broadcast: %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="659"/>
<source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
<translation>問題: 受信者が要求している処理は現在あなたが設定しているよりも高い難易度です %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="662"/>
<source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
<translation>問題: 受信者の暗号鍵は正当でない物です %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="665"/>
<source>Forced difficulty override. Send should start soon.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="668"/>
<source>Unknown status: %1 %2</source>
<translation>: %1 %2</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1344"/>
<source>Not Connected</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="821"/>
<source>Show Bitmessage</source>
<translation>Bitmessageを表示</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="556"/>
<source>Send</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="836"/>
<source>Subscribe</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="597"/>
<source>Address Book</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="622"/>
<source>Quit</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1130"/>
<source>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.</source>
<translation>keys.datファイルを編集することで鍵を管理できます</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1134"/>
<source>You may manage your keys by editing the keys.dat file stored in
%1
It is important that you back up this file.</source>
<translation>%1keys.datファイルを編集することで鍵を管理できます</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1141"/>
<source>Open keys.dat?</source>
<translation>keys.datを開きますか</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1138"/>
<source>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.)</source>
<translation>keys.datファイルを編集することで鍵を管理できますBitmessageを終了してください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1141"/>
<source>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.)</source>
<translation>%1keys.datファイルを編集することで鍵を管理できますBitmessageを終了してください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1147"/>
<source>Delete trash?</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1147"/>
<source>Are you sure you want to delete all trashed messages?</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1158"/>
<source>bad passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1158"/>
<source>You must type your passphrase. If you don&apos;t have one then this is not the form for you.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1197"/>
<source>Chan name needed</source>
<translation>Chan名が必要です</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1197"/>
<source>You didn&apos;t enter a chan name.</source>
<translation>chan名が入力されていません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1217"/>
<source>Address already present</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1217"/>
<source>Could not add chan because it appears to already be one of your identities.</source>
<translation>chanを追加できません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1222"/>
<source>Success</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1192"/>
<source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
<translation>chanの作成に成功しましたchanに参加できるようにするにはchanの名前とBitmessageアドレスを伝えてください: %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1201"/>
<source>Address too new</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1201"/>
<source>Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage.</source>
<translation>Bitmessageアドレスは正当ですが使Bitmessageをアップデートしてください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1205"/>
<source>Address invalid</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1205"/>
<source>That Bitmessage address is not valid.</source>
<translation>Bitmessageアドレスは不正です</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1213"/>
<source>Address does not match chan name</source>
<translation>chan名と一致しません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1213"/>
<source>Although the Bitmessage address you entered was valid, it doesn&apos;t match the chan name.</source>
<translation>Bitmessageアドレスは正当ですがchan名と一致していません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1222"/>
<source>Successfully joined chan. </source>
<translation>chanに参加しました</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1265"/>
<source>Processed %1 person-to-person messages.</source>
<translation>%1 11</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1270"/>
<source>Processed %1 broadcast messages.</source>
<translation>%1 Broadcastメッセージを処理しました</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1275"/>
<source>Processed %1 public keys.</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1319"/>
<source>Total Connections: %1</source>
<translation>: %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1338"/>
<source>Connection lost</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1379"/>
<source>Connected</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1425"/>
<source>Message trashed</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1559"/>
<source>Error: Bitmessage addresses start with BM- Please check %1</source>
<translation>エラー: BitmessageアドレスはBM- %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1562"/>
<source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
<translation>エラー: アドレス %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1565"/>
<source>Error: The address %1 contains invalid characters. Please check it.</source>
<translation>エラー: アドレス %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1568"/>
<source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
<translation>エラー: アドレスのバージョン %1 使Bitmessageをアップデートする必要があるか</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1571"/>
<source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
<translation>エラー: アドレス %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1574"/>
<source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
<translation>エラー: アドレス %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1577"/>
<source>Error: Something is wrong with the address %1.</source>
<translation>エラー: アドレス %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1644"/>
<source>Error: You must specify a From address. If you don&apos;t have one, go to the &apos;Your Identities&apos; tab.</source>
<translation>エラー: 送信元アドレスを指定してください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1588"/>
<source>Sending to your address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1588"/>
<source>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.</source>
<translation>エラー: 送信先アドレス %1 Bitmessageクライアントは自分自身へのメッセージを処理できませんPCか仮想マシン上でクライアントを立ち上げてください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1594"/>
<source>Address version number</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1594"/>
<source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
<translation> %1 %2 Bitmessageを最新のバージョンへアップデートしてください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1598"/>
<source>Stream number</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1598"/>
<source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
<translation> %1 %2 Bitmessageを最新のバージョンへアップデートしてください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1603"/>
<source>Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won&apos;t send until you connect.</source>
<translation>警告: 接続されていませんBitmessageはメッセージの処理を行いますが</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1640"/>
<source>Your &apos;To&apos; field is empty.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1695"/>
<source>Work is queued.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1717"/>
<source>Right click one or more entries in your address book and select &apos;Send message to this address&apos;.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1728"/>
<source>Fetched address from namecoin identity.</source>
<translation>namecoin IDからアドレスを取得</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1805"/>
<source>Work is queued. %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1874"/>
<source>New Message</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="1874"/>
<source>From </source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3282"/>
<source>Address is valid.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2230"/>
<source>The address you entered was invalid. Ignoring it.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2440"/>
<source>Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want.</source>
<translation>エラー: 同じアドレスを複数アドレス帳に追加する事はできません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2610"/>
<source>Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want.</source>
<translation>エラー: 同じアドレスを複数購読リストに追加する事はできません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2046"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2040"/>
<source>You must restart Bitmessage for the port number change to take effect.</source>
<translation>Bitmessageを再起動してください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2046"/>
<source>Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any).</source>
<translation>Bitmessageを再起動してください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2227"/>
<source>Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want.</source>
<translation>エラー: 同じアドレスを複数リストに追加する事はできません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2280"/>
<source>Passphrase mismatch</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2280"/>
<source>The passphrase you entered twice doesn&apos;t match. Try again.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2283"/>
<source>Choose a passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2283"/>
<source>You really do need a passphrase.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2306"/>
<source>All done. Closing user interface...</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2380"/>
<source>Address is gone</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2380"/>
<source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2384"/>
<source>Address disabled</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2384"/>
<source>Error: The address from which you are trying to send is disabled. You&apos;ll have to enable it on the &apos;Your Identities&apos; tab before using it.</source>
<translation>エラー: 送信しようとしたアドレスは無効になっています使</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2437"/>
<source>Entry added to the Address Book. Edit the label to your liking.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2502"/>
<source>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.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2476"/>
<source>Save As...</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2485"/>
<source>Write error.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="2596"/>
<source>No addresses selected.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3063"/>
<source>Options have been disabled because they either aren&apos;t applicable or because they haven&apos;t yet been implemented for your operating system.</source>
<translation>OS上で未実装</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3204"/>
<source>Testing...</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3245"/>
<source>This is a chan address. You cannot use it as a pseudo-mailing list.</source>
<translation>chanアドレスは仮想メーリングリストのアドレスには使用できません</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3264"/>
<source>The address should start with &apos;&apos;BM-&apos;&apos;</source>
<translation>BM-</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3267"/>
<source>The address is not typed or copied correctly (the checksum failed).</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3270"/>
<source>The version number of this address is higher than this software can support. Please upgrade Bitmessage.</source>
<translation>Bitmessageをアップデートしてください</translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3273"/>
<source>The address contains invalid characters.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3276"/>
<source>Some data encoded in the address is too short.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3279"/>
<source>Some data encoded in the address is too long.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/__init__.py" line="3324"/>
<source>You are using TCP port %1. (This can be changed in the settings).</source>
<translation>使 %1 </translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="524"/>
<source>Bitmessage</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="557"/>
<source>Search</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="558"/>
<source>All</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="565"/>
<source>To</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="567"/>
<source>From</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="569"/>
<source>Subject</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="562"/>
<source>Message</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="539"/>
<source>Received</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="540"/>
<source>Inbox</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="541"/>
<source>Load from Address book</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="542"/>
<source>Fetch Namecoin ID</source>
<translation>namecoin IDを取得</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="543"/>
<source>Message:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="544"/>
<source>Subject:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="545"/>
<source>Send to one or more specific people</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="546"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="551"/>
<source>To:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="552"/>
<source>From:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="553"/>
<source>Broadcast to everyone who is subscribed to your address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="555"/>
<source>Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them.</source>
<translation>broadcastはあなたのアドレスのみで暗号化されます</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="571"/>
<source>Status</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="572"/>
<source>Sent</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="576"/>
<source>Label (not shown to anyone)</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="605"/>
<source>Address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="580"/>
<source>Stream</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="581"/>
<source>Your Identities</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="582"/>
<source>Here you can subscribe to &apos;broadcast messages&apos; that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab.</source>
<translation>broadcastメッセージ</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="583"/>
<source>Add new Subscription</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="586"/>
<source>Label</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="589"/>
<source>Subscriptions</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="590"/>
<source>The Address book is useful for adding names or labels to other people&apos;s Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the &apos;Add&apos; button, or from your inbox by right-clicking on a message.</source>
<translation>Bitmessageアドレスにラベルや名前をつけることで受信箱を見やすくします</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="603"/>
<source>Name or Label</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="598"/>
<source>Use a Blacklist (Allow all incoming messages except those on the Blacklist)</source>
<translation>使</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="599"/>
<source>Use a Whitelist (Block all incoming messages except those on the Whitelist)</source>
<translation>使</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="606"/>
<source>Blacklist</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="608"/>
<source>Stream #</source>
<translation> #</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="610"/>
<source>Connections</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="611"/>
<source>Total connections: 0</source>
<translation>接続数: 0</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="612"/>
<source>Since startup at asdf:</source>
<translation> asdf:</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="613"/>
<source>Processed 0 person-to-person message.</source>
<translation>0 11</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="614"/>
<source>Processed 0 public key.</source>
<translation>0 </translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="615"/>
<source>Processed 0 broadcast.</source>
<translation>0 Broadcastメッセージを処理しました</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="616"/>
<source>Network Status</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="617"/>
<source>File</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="627"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="624"/>
<source>Help</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="620"/>
<source>Import keys</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="621"/>
<source>Manage keys</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="623"/>
<source>Ctrl+Q</source>
<translation>Ctrrl+Q</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="625"/>
<source>F1</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="626"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="628"/>
<source>Regenerate deterministic addresses</source>
<translatorcomment></translatorcomment>
<translation>deterministiアドレスを再生成</translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="629"/>
<source>Delete all trashed messages</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/bitmessageui.py" line="630"/>
<source>Join / Create chan</source>
<translation>chanに参加 / </translation>
</message>
</context>
<context>
<name>NewAddressDialog</name>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="173"/>
<source>Create new Address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="174"/>
<source>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 &quot;deterministic&quot; address.
The &apos;Random Number&apos; option is selected by default but deterministic addresses have several pros and cons:</source>
<translation>使使deterministicアドレスになりますdeterministicアドレスにも長所と短所があります:</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="176"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Pros:&lt;br/&gt;&lt;/span&gt;You can recreate your addresses on any computer from memory. &lt;br/&gt;You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. &lt;br/&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Cons:&lt;br/&gt;&lt;/span&gt;You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. &lt;br/&gt;You must remember the address version number and the stream number along with your passphrase. &lt;br/&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;:&lt;br/&gt;&lt;/span&gt;記憶を頼りにアドレスを再生成できます。&lt;br/&gt;keys.datファイルのバックアップの心配をしないでも&lt;br/&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;:&lt;br/&gt;&lt;/span&gt;アドレスの暗号鍵を紛失した場合に備えてアドレスを再生成出来るようにしたい場合、パスフレーズを覚えて(もしくは書き留めて)必要があります。&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="177"/>
<source>Use a random number generator to make an address</source>
<translation>使</translation>
</message>
<message>
<location filename="newaddressdialog.py" line="169"/>
<source>Use a passpharase to make addresses</source>
<translation type="obsolete">Use yee passpharase to make arrddresses</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="179"/>
<source>Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter</source>
<translation>12</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="180"/>
<source>Make deterministic addresses</source>
<translation>deterministiアドレスを作る</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="181"/>
<source>Address version number: 3</source>
<translation>アドレスのバージョン番号: 3</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="182"/>
<source>In addition to your passphrase, you must remember these numbers:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="183"/>
<source>Passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="184"/>
<source>Number of addresses to make based on your passphrase:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="185"/>
<source>Stream number: 1</source>
<translation>ストリーム数: 1</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="186"/>
<source>Retype passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="187"/>
<source>Randomly generate address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="188"/>
<source>Label (not shown to anyone except you)</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="189"/>
<source>Use the most available stream</source>
<translation>使</translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="190"/>
<source> (best if this is the first of many addresses you will create)</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="191"/>
<source>Use the same stream as an existing address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="192"/>
<source>(saves you some bandwidth and processing power)</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newaddressdialog.py" line="178"/>
<source>Use a passphrase to make addresses</source>
<translation>使</translation>
</message>
</context>
<context>
<name>NewSubscriptionDialog</name>
<message>
<location filename="../bitmessageqt/newsubscriptiondialog.py" line="57"/>
<source>Add new entry</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newsubscriptiondialog.py" line="58"/>
<source>Label</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newsubscriptiondialog.py" line="59"/>
<source>Address</source>
<translation></translation>
</message>
</context>
<context>
<name>SpecialAddressBehaviorDialog</name>
<message>
<location filename="../bitmessageqt/specialaddressbehavior.py" line="59"/>
<source>Special Address Behavior</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/specialaddressbehavior.py" line="60"/>
<source>Behave as a normal address</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/specialaddressbehavior.py" line="61"/>
<source>Behave as a pseudo-mailing-list address</source>
<translation>使</translation>
</message>
<message>
<location filename="../bitmessageqt/specialaddressbehavior.py" line="62"/>
<source>Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public).</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/specialaddressbehavior.py" line="63"/>
<source>Name of the pseudo-mailing-list:</source>
<translation>:</translation>
</message>
</context>
<context>
<name>aboutDialog</name>
<message>
<location filename="../bitmessageqt/about.py" line="58"/>
<source>PyBitmessage</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/about.py" line="59"/>
<source>version ?</source>
<translation>Version ?</translation>
</message>
<message>
<location filename="../bitmessageqt/about.py" line="57"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/about.py" line="60"/>
<source>Copyright © 2013 Jonathan Warren</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/about.py" line="61"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Distributed under the MIT/X11 software license; see &lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.opensource.org/licenses/mit-license.php&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/about.py" line="62"/>
<source>This is Beta software.</source>
<translation></translation>
</message>
</context>
<context>
<name>connectDialog</name>
<message>
<location filename="../bitmessageqt/connect.py" line="56"/>
<source>Bitmessage</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/connect.py" line="57"/>
<source>Bitmessage won&apos;t connect to anyone until you let it. </source>
<translation>Bitmessageはあなたが操作しない限りどこへも接続しません</translation>
</message>
<message>
<location filename="../bitmessageqt/connect.py" line="58"/>
<source>Connect now</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/connect.py" line="59"/>
<source>Let me configure special network settings first</source>
<translation></translation>
</message>
</context>
<context>
<name>helpDialog</name>
<message>
<location filename="../bitmessageqt/help.py" line="45"/>
<source>Help</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/help.py" line="46"/>
<source>&lt;a href=&quot;http://Bitmessage.org/wiki/PyBitmessage_Help&quot;&gt;http://Bitmessage.org/wiki/PyBitmessage_Help&lt;/a&gt;</source>
<translation>&lt;a href=&quot;http://Bitmessage.org/wiki/PyBitmessage_Help&quot;&gt;http://Bitmessage.org/wiki/PyBitmessage_Help&lt;/a&gt;</translation>
</message>
<message>
<location filename="../bitmessageqt/help.py" line="47"/>
<source>As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki:</source>
<translation>Bitmessageは協働プロジェクトですBitmessage Wikiを参照してください:</translation>
</message>
</context>
<context>
<name>iconGlossaryDialog</name>
<message>
<location filename="../bitmessageqt/iconglossary.py" line="82"/>
<source>Icon Glossary</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/iconglossary.py" line="83"/>
<source>You have no connections with other peers. </source>
<translation>peerへ接続されていません</translation>
</message>
<message>
<location filename="iconglossary.py" line="75"/>
<source>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&apos;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.</source>
<translation type="obsolete">Yee have made least one connection to a peer pirate usin&apos; 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&apos; just fine but it help fellow pirates if yee allowed for incoming connections and will help yee be a better-connected node matey.</translation>
</message>
<message>
<location filename="../bitmessageqt/iconglossary.py" line="85"/>
<source>You are using TCP port ?. (This can be changed in the settings).</source>
<translation>使 ? </translation>
</message>
<message>
<location filename="../bitmessageqt/iconglossary.py" line="86"/>
<source>You do have connections with other peers and your firewall is correctly configured.</source>
<translation>peerへ接続してください</translation>
</message>
<message>
<location filename="../bitmessageqt/iconglossary.py" line="84"/>
<source>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&apos;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.</source>
<translation>1TCP接続を受け取れるように設定されていないかも知れませんBitmessageは正常に動作しますがBitmessageネットワークへの助けになります</translation>
</message>
</context>
<context>
<name>newChanDialog</name>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="97"/>
<source>Dialog</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="98"/>
<source>Create a new chan</source>
<translation>chanを作成</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="103"/>
<source>Join a chan</source>
<translation>chanに参加</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="100"/>
<source>Create a chan</source>
<translation>chanを作成</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="101"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;chan名を入力してくださいchan名を選びchanはセキュアでプライベートですchanを作成した場合chanになる可能性が非常に高い&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="105"/>
<source>Chan name:</source>
<translation>Chan名:</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="104"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Chans are experimental and completely unmoderatable.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;chanは人々のグループに復号鍵を共有されることで存在しますchanで使われる鍵とBitmessageアドレスは読みやすい単語chan名chanに居る人たちへメッセージを送るにはchanアドレスへ送ります&lt;/p&gt;&lt;p&gt;chans&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../bitmessageqt/newchandialog.py" line="106"/>
<source>Chan bitmessage address:</source>
<translation>chanのbitmessageアドレス:</translation>
</message>
</context>
<context>
<name>regenerateAddressesDialog</name>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="104"/>
<source>Regenerate Existing Addresses</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="105"/>
<source>Regenerate existing addresses</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="106"/>
<source>Passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="107"/>
<source>Number of addresses to make based on your passphrase:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="108"/>
<source>Address version Number:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="109"/>
<source>3</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="110"/>
<source>Stream number:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="111"/>
<source>1</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="112"/>
<source>Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter</source>
<translation>12</translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="113"/>
<source>You must check (or not check) this box just like you did (or didn&apos;t) when you made your addresses the first time.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/regenerateaddresses.py" line="114"/>
<source>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.</source>
<translation>deterministicアドレスを作ったことがあり使</translation>
</message>
</context>
<context>
<name>settingsDialog</name>
<message>
<location filename="../bitmessageqt/settings.py" line="335"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="340"/>
<source>Start Bitmessage on user login</source>
<translation>Bitmessageを起動</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="336"/>
<source>Start Bitmessage in the tray (don&apos;t show main window)</source>
<translation>Bitmessageをトレイ内で起動する</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="338"/>
<source>Minimize to tray</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="337"/>
<source>Show notification when message received</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="341"/>
<source>Run in Portable Mode</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="339"/>
<source>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.</source>
<translation>BitmessageをUSBドライブから実行できます</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="344"/>
<source>User Interface</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="345"/>
<source>Listening port</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="346"/>
<source>Listen for connections on port:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="347"/>
<source>Proxy server / Tor</source>
<translation>/Tor</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="348"/>
<source>Type:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="349"/>
<source>none</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="350"/>
<source>SOCKS4a</source>
<translation>SOCKS4a</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="351"/>
<source>SOCKS5</source>
<translation>SOCKS5</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="352"/>
<source>Server hostname:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="371"/>
<source>Port:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="354"/>
<source>Authentication</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="372"/>
<source>Username:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="356"/>
<source>Pass:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="358"/>
<source>Network Settings</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="359"/>
<source>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. </source>
<translation>1例外もあります: 友人や知り合いをアドレス帳に登録するとBitmessageは次にメッセージを送る際1</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="360"/>
<source>Total difficulty:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="361"/>
<source>Small message difficulty:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="362"/>
<source>The &apos;Small message difficulty&apos; 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&apos;t really affect large messages.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="363"/>
<source>The &apos;Total difficulty&apos; affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work.</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="364"/>
<source>Demanded difficulty</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="342"/>
<source>Willingly include unencrypted destination address when sending to a mobile device</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="343"/>
<source>Override automatic language localization (use countycode or language code, e.g. &apos;en_US&apos; or &apos;en&apos;):</source>
<translation>:en_USen:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="357"/>
<source>Listen for incoming connections when using proxy</source>
<translation>使</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="365"/>
<source>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.</source>
<translation>0</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="366"/>
<source>Maximum acceptable total difficulty:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="367"/>
<source>Maximum acceptable small message difficulty:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="368"/>
<source>Max acceptable difficulty</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="369"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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 &lt;span style=&quot; font-style:italic;&quot;&gt;test. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;(Getting your own Bitmessage address into Namecoin is still rather difficult).&lt;/p&gt;&lt;p&gt;Bitmessage can use either namecoind directly or a running nmcontrol instance.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Bitmessageはアドレスを読みやすくするためNamecoinというBitcoinベースの別のプログラムを利用できますBitmessageアドレスを伝える代わりに&lt;span style=&quot; font-style:italic;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;BitmessageNamecoin&lt;/p&gt;&lt;p&gt;Bitmessagenamecoind使nmcontrol使&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="370"/>
<source>Host:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="373"/>
<source>Password:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="374"/>
<source>Test</source>
<translation></translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="375"/>
<source>Connect to:</source>
<translation>:</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="376"/>
<source>Namecoind</source>
<translation>Namecoind</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="377"/>
<source>NMControl</source>
<translation>NMControl</translation>
</message>
<message>
<location filename="../bitmessageqt/settings.py" line="378"/>
<source>Namecoin integration</source>
<translation>Namecoin連携</translation>
</message>
</context>
</TS>

View File

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="2.0" language="ru" sourcelanguage="en"> <!DOCTYPE TS>
<TS version="2.0" language="ru" sourcelanguage="en">
<context> <context>
<name>AddAddressDialog</name> <name>AddAddressDialog</name>
<message> <message>
<location filename="../bitmessageqt/addaddressdialog.py" line="62"/> <location filename="../bitmessageqt/addaddressdialog.py" line="62"/>
<source>Add new entry</source> <source>Add new entry</source>
<translation type="unfinished">Добавить новую запись</translation> <translation>Добавить новую запись</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/addaddressdialog.py" line="63"/> <location filename="../bitmessageqt/addaddressdialog.py" line="63"/>
@ -1239,7 +1240,7 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
<source>version ?</source> <source>version ?</source>
<translation>версия ?</translation> <translation>версия ?</translation>
</message> </message>
<message encoding="UTF-8"> <message utf8="true">
<location filename="../bitmessageqt/about.py" line="60"/> <location filename="../bitmessageqt/about.py" line="60"/>
<source>Copyright © 2013 Jonathan Warren</source> <source>Copyright © 2013 Jonathan Warren</source>
<translation type="obsolete">Копирайт © 2013 Джонатан Уоррен</translation> <translation type="obsolete">Копирайт © 2013 Джонатан Уоррен</translation>
@ -1256,7 +1257,7 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
</message> </message>
<message> <message>
<location filename="../bitmessageqt/about.py" line="69"/> <location filename="../bitmessageqt/about.py" line="69"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright &#xc2;&#xa9; 2012-2013 Jonathan Warren&lt;br/&gt;Copyright &#xc2;&#xa9; 2013 The Bitmessage Developers&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright © 2012-2013 Jonathan Warren&lt;br/&gt;Copyright © 2013 The Bitmessage Developers&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -1672,7 +1673,7 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="397"/> <location filename="../bitmessageqt/settings.py" line="397"/>
<source>Fran&#xc3;&#xa7;ais</source> <source>Français</source>
<comment>fr</comment> <comment>fr</comment>
<translation>Francais</translation> <translation>Francais</translation>
</message> </message>
@ -1684,13 +1685,13 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="353"/> <location filename="../bitmessageqt/settings.py" line="353"/>
<source>Espa&#xc3;&#xb1;ol</source> <source>Español</source>
<comment>es</comment> <comment>es</comment>
<translation type="obsolete">Espanol</translation> <translation type="obsolete">Espanol</translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="354"/> <location filename="../bitmessageqt/settings.py" line="354"/>
<source>&#xd0;&#xa0;&#xd1;&#x83;&#xd1;&#x81;&#xd1;&#x81;&#xd0;&#xba;&#xd0;&#xb8;&#xd0;&#xb9;</source> <source>Русский</source>
<comment>ru</comment> <comment>ru</comment>
<translation type="obsolete">Русский</translation> <translation type="obsolete">Русский</translation>
</message> </message>
@ -1713,13 +1714,13 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="399"/> <location filename="../bitmessageqt/settings.py" line="399"/>
<source>Espa&#xc3;&#xb1;l</source> <source>Españl</source>
<comment>es</comment> <comment>es</comment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/settings.py" line="400"/> <location filename="../bitmessageqt/settings.py" line="400"/>
<source>&#xd1;&#x80;&#xd1;&#x83;&#xd1;&#x81;&#xd1;&#x81;&#xd0;&#xba;&#xd0;&#xb8;&#xd0;&#xb9; &#xd1;&#x8f;&#xd0;&#xb7;&#xd1;&#x8b;&#xd0;&#xba;</source> <source>русский язык</source>
<comment>ru</comment> <comment>ru</comment>
<translation></translation> <translation></translation>
</message> </message>

Binary file not shown.

View File

@ -862,7 +862,7 @@ It is important that you back up this file. Would you like to open the file now?
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="2750"/> <location filename="../bitmessageqt/__init__.py" line="2750"/>
<source>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.</source> <source>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.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="2730"/> <location filename="../bitmessageqt/__init__.py" line="2730"/>
@ -882,7 +882,7 @@ It is important that you back up this file. Would you like to open the file now?
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="3063"/> <location filename="../bitmessageqt/__init__.py" line="3063"/>
<source>Do you really want to remove this avatar?</source> <source>Do you really want to remove this avatar?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../bitmessageqt/__init__.py" line="3071"/> <location filename="../bitmessageqt/__init__.py" line="3071"/>
@ -984,6 +984,95 @@ It is important that you back up this file. Would you like to open the file now?
<source>Message sent. Waiting for acknowledgement. Sent at %1</source> <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
<translation>. . %1</translation> <translation>. . %1</translation>
</message> </message>
<message>
<location filename="../class_singleWorker.py" line="361"/>
<source>Error! Could not find sender address (your address) in the keys.dat file.</source>
<translation>! keys.dat ()</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="426"/>
<source>Doing work necessary to send broadcast...</source>
<translation>广.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="443"/>
<source>Broadcast sent on %1</source>
<translation>广 %1</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="485"/>
<source>Encryption key was requested earlier.</source>
<translation>.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="523"/>
<source>Sending a request for the recipient&apos;s encryption key.</source>
<translation>.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="564"/>
<source>Looking up the receiver&apos;s public key</source>
<translation>.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="619"/>
<source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings. %1</source>
<translation>错误: 目标是一个移动设备, , . %1</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="636"/>
<source>Doing work necessary to send message.
There is no required difficulty for version 2 addresses like this.</source>
<translation>.
2.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="648"/>
<source>Doing work necessary to send message.
Receiver&apos;s required difficulty: %1 and %2</source>
<translation>.
: %1 %2</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="657"/>
<source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do.</source>
<translation>错误: 收件人要求的做工量(%1 %2). </translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="669"/>
<source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
<translation>错误: 你正在尝试发送消息到你自身或者一个频道, keys.dat中找到. . %1</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="681"/>
<source>Doing work necessary to send message.</source>
<translation>.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="831"/>
<source>Message sent. Sent on %1</source>
<translation>. %1</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="835"/>
<source>Message sent. Waiting for acknowledgement. Sent on %1</source>
<translation>. . %1</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="904"/>
<source>Doing work necessary to request encryption key.</source>
<translation>.</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="928"/>
<source>Broacasting the public key request. This program will auto-retry if they are offline.</source>
<translation>广. 线, .</translation>
</message>
<message>
<location filename="../class_singleWorker.py" line="929"/>
<source>Sending public key request. Waiting for reply. Requested at %1</source>
<translation>. . %1</translation>
</message>
</context> </context>
<context> <context>
<name>NewAddressDialog</name> <name>NewAddressDialog</name>