From 648750ef5c6e5f7d7b443a9ebfc1cfe986ffb8ee Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:16:28 -0800 Subject: [PATCH 01/20] Updated Install.md Noticed a few typos --- INSTALL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 0d7b6c61..111db5d9 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -68,8 +68,8 @@ cd PyBitmessage && python src/bitmessagemain.py ``` ##Creating a package for installation -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 +If you really want, you can make a package for PyBitmessage, which you may +install yourself or distribute to friends. This isn't recommended, since PyBitmessage is in Beta, and subject to frequent change. ####Linux @@ -78,7 +78,7 @@ First off, since PyBitmessage uses something nifty called [packagemonkey](https://github.com/fuzzgun/packagemonkey), go ahead and get 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 ``` From ab49956759e11eddb890b8d26a2b8be6b53d1fd2 Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:17:50 -0800 Subject: [PATCH 02/20] Update README.md Just a typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c725c3bc..73b5329c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ PyBitmessage Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate -authorities. It uses strong authentication which means that the sender of a +authorities. It uses strong authentication, which means that the sender of a message cannot be spoofed, and it aims to hide "non-content" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs. From 0e310849ca639585568885891b878f4df9050dc7 Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:19:29 -0800 Subject: [PATCH 03/20] Update arch.sh Sentence cased some comments --- arch.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch.sh b/arch.sh index e025ddcf..64c903a7 100755 --- a/arch.sh +++ b/arch.sh @@ -24,14 +24,14 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links make clean 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} 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} -# calculate the MD5 checksum +# Calculate the MD5 checksum CHECKSM=$(md5sum ${SOURCE}) sed -i "s/md5sums[^)]*)/md5sums=(${CHECKSM%% *})/g" archpackage/PKGBUILD From d9c60d8e5f6fa98f1a3eb3e33362d21c81c1d290 Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:20:28 -0800 Subject: [PATCH 04/20] Update debian.sh Sentence cased some comments, capitalized a noun --- debian.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian.sh b/debian.sh index d80d9db9..0cb07fff 100755 --- a/debian.sh +++ b/debian.sh @@ -29,7 +29,7 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links make clean make -# change the parent directory name to debian format +# Change the parent directory name to Debian format mv ../${APP} ../${DIR} # Create a source archive @@ -38,9 +38,9 @@ make source # Build the package dpkg-buildpackage -F -# sign files +# Sign files gpg -ba ../${APP}_${VERSION}-1_${ARCH_TYPE}.deb gpg -ba ../${APP}_${VERSION}.orig.tar.gz -# restore the parent directory name +# Restore the parent directory name mv ../${DIR} ../${APP} From 525a6ec58b6aacdbabca93e92626f9854460ba59 Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:21:01 -0800 Subject: [PATCH 05/20] Update ebuild.sh Sentence cased other comments --- ebuild.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebuild.sh b/ebuild.sh index 59295718..e5550355 100755 --- a/ebuild.sh +++ b/ebuild.sh @@ -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/-'${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 mkdir -p ~/ebuild rm -f ${SOURCE} mv ../${APP} ../${APP}-${VERSION} 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} From e133b907691fa5bfbd1bea7f3af06d53b52e09fe Mon Sep 17 00:00:00 2001 From: coolbeans7 Date: Fri, 24 Jan 2014 08:22:01 -0800 Subject: [PATCH 06/20] Update rpm.sh A bit more sentence casing. --- rpm.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rpm.sh b/rpm.sh index 074a4515..9b67ba61 100755 --- a/rpm.sh +++ b/rpm.sh @@ -24,25 +24,25 @@ sed -i 's/-'${PREV_VERSION}'.so/-'${VERSION}'.so/g' debian/*.links sudo yum groupinstall "Development Tools" sudo yum install rpmdevtools -# setup the rpmbuild directory tree +# Setup the rpmbuild directory tree rpmdev-setuptree -# create the source code in the SOURCES directory +# Create the source code in the SOURCES directory make clean mkdir -p ~/rpmbuild/SOURCES 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} 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} -# copy the spec file into the SPECS directory +# Copy the spec file into the SPECS directory cp -f rpmpackage/${APP}.spec ~/rpmbuild/SPECS -# build +# Build cd ~/rpmbuild/SPECS rpmbuild -ba ${APP}.spec cd ${CURRDIR} From 5c1e1206ef0e7f288cccc64dd8cc0b6ff0f37d67 Mon Sep 17 00:00:00 2001 From: Daniel Kraft Date: Tue, 28 Jan 2014 20:32:16 +0100 Subject: [PATCH 07/20] Use patch for email-like quoting with '>' chars. Apply the patch from https://github.com/Bitmessage/PyBitmessage/pull/271 for email-like "reply below text" with '>' quoting. The patch is slightly modified compared to the referenced pull request. --- src/bitmessageqt/__init__.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 7125cb60..3d5180f6 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -34,6 +34,7 @@ import hashlib from pyelliptic.openssl import OpenSSL import pickle import platform +import textwrap import debug from debug import logger import subprocess @@ -2613,6 +2614,25 @@ class MyForm(QtGui.QMainWindow): # 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. + # Format predefined text on message reply. + def quoted_text(self, 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): currentInboxRow = self.ui.tableWidgetInbox.currentRow() toAddressAtCurrentInboxRow = str(self.ui.tableWidgetInbox.item( @@ -2655,7 +2675,9 @@ class MyForm(QtGui.QMainWindow): else: self.ui.comboBoxSendFrom.setCurrentIndex(0) - self.ui.textEditMessage.setText('\n\n------------------------------------------------------\n' + unicode(messageAtCurrentInboxRow, 'utf-8)')) + #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:']: self.ui.lineEditSubject.setText( self.ui.tableWidgetInbox.item(currentInboxRow, 2).text()) From 6326147d6ff4e42c4787be4966c11dd0a346b5f5 Mon Sep 17 00:00:00 2001 From: Daniel Kraft Date: Tue, 28 Jan 2014 20:57:01 +0100 Subject: [PATCH 08/20] Make reply below quote opt-in. Add a new preference for 'reply below quote' and only use the new quoting style if it is set. --- src/bitmessageqt/__init__.py | 8 +- src/bitmessageqt/settings.py | 147 +++++++++++++++++------------------ src/bitmessageqt/settings.ui | 9 ++- src/helper_startup.py | 3 +- 4 files changed, 88 insertions(+), 79 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 3d5180f6..c33a60b5 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -2251,6 +2251,8 @@ class MyForm(QtGui.QMainWindow): self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked())) shared.config.set('bitmessagesettings', 'useidenticons', str( self.settingsDialogInstance.ui.checkBoxUseIdenticons.isChecked())) + shared.config.set('bitmessagesettings', 'replybelow', str( + self.settingsDialogInstance.ui.checkBoxReplyBelow.isChecked())) lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex()) if not languages[lang_ind] == 'other': @@ -2616,6 +2618,9 @@ class MyForm(QtGui.QMainWindow): # 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 = '> ', @@ -2675,7 +2680,6 @@ class MyForm(QtGui.QMainWindow): else: 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:']: @@ -3340,6 +3344,8 @@ class settingsDialog(QtGui.QDialog): shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile')) self.ui.checkBoxUseIdenticons.setChecked( shared.safeConfigGetBoolean('bitmessagesettings', 'useidenticons')) + self.ui.checkBoxReplyBelow.setChecked( + shared.safeConfigGetBoolean('bitmessagesettings', 'replybelow')) global languages languages = ['system','en','eo','fr','de','es','ru','no','ar','zh_cn','en_pirate','other'] diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index 293c133b..a79976cd 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'settings.ui' # -# Created: Mon Jan 20 14:26:31 2014 -# by: PyQt4 UI code generator 4.10.3 +# Created: Tue Jan 28 20:46:24 2014 +# by: PyQt4 UI code generator 4.9.3 # # WARNING! All changes made in this file will be lost! @@ -12,16 +12,7 @@ from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: - def _fromUtf8(s): - return s - -try: - _encoding = QtGui.QApplication.UnicodeUTF8 - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) -except AttributeError: - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) + _fromUtf8 = lambda s: s class Ui_settingsDialog(object): def setupUi(self, settingsDialog): @@ -72,6 +63,9 @@ class Ui_settingsDialog(object): self.checkBoxUseIdenticons = QtGui.QCheckBox(self.tabUserInterface) self.checkBoxUseIdenticons.setObjectName(_fromUtf8("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.setObjectName(_fromUtf8("groupBox")) self.formLayout_2 = QtGui.QFormLayout(self.groupBox) @@ -92,7 +86,7 @@ class Ui_settingsDialog(object): self.languageComboBox.addItem(_fromUtf8("")) self.languageComboBox.addItem(_fromUtf8("")) 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.tabNetworkSettings = QtGui.QWidget() self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings")) @@ -383,68 +377,69 @@ class Ui_settingsDialog(object): settingsDialog.setTabOrder(self.checkBoxSocksListen, self.buttonBox) def retranslateUi(self, settingsDialog): - settingsDialog.setWindowTitle(_translate("settingsDialog", "Settings", None)) - self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None)) - self.checkBoxStartInTray.setText(_translate("settingsDialog", "Start Bitmessage in the tray (don\'t show main window)", None)) - self.checkBoxMinimizeToTray.setText(_translate("settingsDialog", "Minimize to tray", None)) - self.checkBoxShowTrayNotifications.setText(_translate("settingsDialog", "Show notification when message received", None)) - self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None)) - self.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.checkBoxUseIdenticons.setText(_translate("settingsDialog", "Use Identicons", None)) - self.groupBox.setTitle(_translate("settingsDialog", "Interface Language", None)) - self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system")) - self.languageComboBox.setItemText(1, _translate("settingsDialog", "English", "en")) - self.languageComboBox.setItemText(2, _translate("settingsDialog", "Esperanto", "eo")) - self.languageComboBox.setItemText(3, _translate("settingsDialog", "Français", "fr")) - self.languageComboBox.setItemText(4, _translate("settingsDialog", "Deutsch", "de")) - self.languageComboBox.setItemText(5, _translate("settingsDialog", "Españl", "es")) - self.languageComboBox.setItemText(6, _translate("settingsDialog", "русский язык", "ru")) - self.languageComboBox.setItemText(7, _translate("settingsDialog", "Norsk", "no")) - self.languageComboBox.setItemText(8, _translate("settingsDialog", "العربية", "ar")) - self.languageComboBox.setItemText(9, _translate("settingsDialog", "简体中文", "zh_cn")) - self.languageComboBox.setItemText(10, _translate("settingsDialog", "Pirate English", "en_pirate")) - self.languageComboBox.setItemText(11, _translate("settingsDialog", "Other (set in keys.dat)", "other")) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None)) - self.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None)) - self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) - self.groupBox_2.setTitle(_translate("settingsDialog", "Proxy server / Tor", None)) - self.label_2.setText(_translate("settingsDialog", "Type:", None)) - self.label_3.setText(_translate("settingsDialog", "Server hostname:", None)) - self.label_4.setText(_translate("settingsDialog", "Port:", None)) - self.checkBoxAuthentication.setText(_translate("settingsDialog", "Authentication", None)) - self.label_5.setText(_translate("settingsDialog", "Username:", None)) - self.label_6.setText(_translate("settingsDialog", "Pass:", None)) - self.checkBoxSocksListen.setText(_translate("settingsDialog", "Listen for incoming connections when using proxy", None)) - self.comboBoxProxyType.setItemText(0, _translate("settingsDialog", "none", None)) - self.comboBoxProxyType.setItemText(1, _translate("settingsDialog", "SOCKS4a", None)) - self.comboBoxProxyType.setItemText(2, _translate("settingsDialog", "SOCKS5", None)) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNetworkSettings), _translate("settingsDialog", "Network Settings", None)) - self.label_9.setText(_translate("settingsDialog", "Total difficulty:", None)) - self.label_10.setText(_translate("settingsDialog", "The \'Total difficulty\' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work.", None)) - self.label_11.setText(_translate("settingsDialog", "Small message difficulty:", None)) - self.label_8.setText(_translate("settingsDialog", "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. ", None)) - self.label_12.setText(_translate("settingsDialog", "The \'Small message difficulty\' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn\'t really affect large messages.", None)) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabDemandedDifficulty), _translate("settingsDialog", "Demanded difficulty", None)) - self.label_15.setText(_translate("settingsDialog", "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.", None)) - self.label_13.setText(_translate("settingsDialog", "Maximum acceptable total difficulty:", None)) - self.label_14.setText(_translate("settingsDialog", "Maximum acceptable small message difficulty:", None)) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabMaxAcceptableDifficulty), _translate("settingsDialog", "Max acceptable difficulty", None)) - self.label_16.setText(_translate("settingsDialog", "

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 test.

(Getting your own Bitmessage address into Namecoin is still rather difficult).

Bitmessage can use either namecoind directly or a running nmcontrol instance.

", None)) - self.label_17.setText(_translate("settingsDialog", "Host:", None)) - self.label_18.setText(_translate("settingsDialog", "Port:", None)) - self.labelNamecoinUser.setText(_translate("settingsDialog", "Username:", None)) - self.labelNamecoinPassword.setText(_translate("settingsDialog", "Password:", None)) - self.pushButtonNamecoinTest.setText(_translate("settingsDialog", "Test", None)) - self.label_21.setText(_translate("settingsDialog", "Connect to:", None)) - self.radioButtonNamecoinNamecoind.setText(_translate("settingsDialog", "Namecoind", None)) - self.radioButtonNamecoinNmcontrol.setText(_translate("settingsDialog", "NMControl", None)) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNamecoin), _translate("settingsDialog", "Namecoin integration", None)) - self.label_7.setText(_translate("settingsDialog", "

By default, if you send a message to someone and he is offline for more than two days, Bitmessage will send the message again after an additional two days. This will be continued with exponential backoff forever; messages will be resent after 5, 10, 20 days ect. until the receiver acknowledges them. Here you may change that behavior by having Bitmessage give up after a certain number of days or months.

Leave these input fields blank for the default behavior.

", None)) - self.label_19.setText(_translate("settingsDialog", "Give up after", None)) - self.label_20.setText(_translate("settingsDialog", "and", None)) - self.label_22.setText(_translate("settingsDialog", "days", None)) - self.label_23.setText(_translate("settingsDialog", "months.", None)) - self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabResendsExpire), _translate("settingsDialog", "Resends Expire", None)) + settingsDialog.setWindowTitle(QtGui.QApplication.translate("settingsDialog", "Settings", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxStartOnLogon.setText(QtGui.QApplication.translate("settingsDialog", "Start Bitmessage on user login", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxStartInTray.setText(QtGui.QApplication.translate("settingsDialog", "Start Bitmessage in the tray (don\'t show main window)", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxMinimizeToTray.setText(QtGui.QApplication.translate("settingsDialog", "Minimize to tray", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxShowTrayNotifications.setText(QtGui.QApplication.translate("settingsDialog", "Show notification when message received", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxPortableMode.setText(QtGui.QApplication.translate("settingsDialog", "Run in Portable Mode", None, QtGui.QApplication.UnicodeUTF8)) + self.PortableModeDescription.setText(QtGui.QApplication.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, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxWillinglySendToMobile.setText(QtGui.QApplication.translate("settingsDialog", "Willingly include unencrypted destination address when sending to a mobile device", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxUseIdenticons.setText(QtGui.QApplication.translate("settingsDialog", "Use Identicons", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxReplyBelow.setText(QtGui.QApplication.translate("settingsDialog", "Reply below Quote", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("settingsDialog", "Interface Language", None, QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(0, QtGui.QApplication.translate("settingsDialog", "System Settings", "system", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(1, QtGui.QApplication.translate("settingsDialog", "English", "en", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(2, QtGui.QApplication.translate("settingsDialog", "Esperanto", "eo", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(3, QtGui.QApplication.translate("settingsDialog", "Français", "fr", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(4, QtGui.QApplication.translate("settingsDialog", "Deutsch", "de", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(5, QtGui.QApplication.translate("settingsDialog", "Españl", "es", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(6, QtGui.QApplication.translate("settingsDialog", "русский язык", "ru", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(7, QtGui.QApplication.translate("settingsDialog", "Norsk", "no", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(8, QtGui.QApplication.translate("settingsDialog", "العربية", "ar", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(9, QtGui.QApplication.translate("settingsDialog", "简体中文", "zh_cn", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(10, QtGui.QApplication.translate("settingsDialog", "Pirate English", "en_pirate", QtGui.QApplication.UnicodeUTF8)) + self.languageComboBox.setItemText(11, QtGui.QApplication.translate("settingsDialog", "Other (set in keys.dat)", "other", QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), QtGui.QApplication.translate("settingsDialog", "User Interface", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox1.setTitle(QtGui.QApplication.translate("settingsDialog", "Listening port", None, QtGui.QApplication.UnicodeUTF8)) + self.label.setText(QtGui.QApplication.translate("settingsDialog", "Listen for connections on port:", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox_2.setTitle(QtGui.QApplication.translate("settingsDialog", "Proxy server / Tor", None, QtGui.QApplication.UnicodeUTF8)) + self.label_2.setText(QtGui.QApplication.translate("settingsDialog", "Type:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_3.setText(QtGui.QApplication.translate("settingsDialog", "Server hostname:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_4.setText(QtGui.QApplication.translate("settingsDialog", "Port:", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxAuthentication.setText(QtGui.QApplication.translate("settingsDialog", "Authentication", None, QtGui.QApplication.UnicodeUTF8)) + self.label_5.setText(QtGui.QApplication.translate("settingsDialog", "Username:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_6.setText(QtGui.QApplication.translate("settingsDialog", "Pass:", None, QtGui.QApplication.UnicodeUTF8)) + self.checkBoxSocksListen.setText(QtGui.QApplication.translate("settingsDialog", "Listen for incoming connections when using proxy", None, QtGui.QApplication.UnicodeUTF8)) + self.comboBoxProxyType.setItemText(0, QtGui.QApplication.translate("settingsDialog", "none", None, QtGui.QApplication.UnicodeUTF8)) + self.comboBoxProxyType.setItemText(1, QtGui.QApplication.translate("settingsDialog", "SOCKS4a", None, QtGui.QApplication.UnicodeUTF8)) + self.comboBoxProxyType.setItemText(2, QtGui.QApplication.translate("settingsDialog", "SOCKS5", None, QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNetworkSettings), QtGui.QApplication.translate("settingsDialog", "Network Settings", None, QtGui.QApplication.UnicodeUTF8)) + self.label_9.setText(QtGui.QApplication.translate("settingsDialog", "Total difficulty:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_10.setText(QtGui.QApplication.translate("settingsDialog", "The \'Total difficulty\' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work.", None, QtGui.QApplication.UnicodeUTF8)) + self.label_11.setText(QtGui.QApplication.translate("settingsDialog", "Small message difficulty:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_8.setText(QtGui.QApplication.translate("settingsDialog", "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. ", None, QtGui.QApplication.UnicodeUTF8)) + self.label_12.setText(QtGui.QApplication.translate("settingsDialog", "The \'Small message difficulty\' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn\'t really affect large messages.", None, QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabDemandedDifficulty), QtGui.QApplication.translate("settingsDialog", "Demanded difficulty", None, QtGui.QApplication.UnicodeUTF8)) + self.label_15.setText(QtGui.QApplication.translate("settingsDialog", "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.", None, QtGui.QApplication.UnicodeUTF8)) + self.label_13.setText(QtGui.QApplication.translate("settingsDialog", "Maximum acceptable total difficulty:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_14.setText(QtGui.QApplication.translate("settingsDialog", "Maximum acceptable small message difficulty:", None, QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabMaxAcceptableDifficulty), QtGui.QApplication.translate("settingsDialog", "Max acceptable difficulty", None, QtGui.QApplication.UnicodeUTF8)) + self.label_16.setText(QtGui.QApplication.translate("settingsDialog", "

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 test.

(Getting your own Bitmessage address into Namecoin is still rather difficult).

Bitmessage can use either namecoind directly or a running nmcontrol instance.

", None, QtGui.QApplication.UnicodeUTF8)) + self.label_17.setText(QtGui.QApplication.translate("settingsDialog", "Host:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_18.setText(QtGui.QApplication.translate("settingsDialog", "Port:", None, QtGui.QApplication.UnicodeUTF8)) + self.labelNamecoinUser.setText(QtGui.QApplication.translate("settingsDialog", "Username:", None, QtGui.QApplication.UnicodeUTF8)) + self.labelNamecoinPassword.setText(QtGui.QApplication.translate("settingsDialog", "Password:", None, QtGui.QApplication.UnicodeUTF8)) + self.pushButtonNamecoinTest.setText(QtGui.QApplication.translate("settingsDialog", "Test", None, QtGui.QApplication.UnicodeUTF8)) + self.label_21.setText(QtGui.QApplication.translate("settingsDialog", "Connect to:", None, QtGui.QApplication.UnicodeUTF8)) + self.radioButtonNamecoinNamecoind.setText(QtGui.QApplication.translate("settingsDialog", "Namecoind", None, QtGui.QApplication.UnicodeUTF8)) + self.radioButtonNamecoinNmcontrol.setText(QtGui.QApplication.translate("settingsDialog", "NMControl", None, QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNamecoin), QtGui.QApplication.translate("settingsDialog", "Namecoin integration", None, QtGui.QApplication.UnicodeUTF8)) + self.label_7.setText(QtGui.QApplication.translate("settingsDialog", "

By default, if you send a message to someone and he is offline for more than two days, Bitmessage will send the message again after an additional two days. This will be continued with exponential backoff forever; messages will be resent after 5, 10, 20 days ect. until the receiver acknowledges them. Here you may change that behavior by having Bitmessage give up after a certain number of days or months.

Leave these input fields blank for the default behavior.

", None, QtGui.QApplication.UnicodeUTF8)) + self.label_19.setText(QtGui.QApplication.translate("settingsDialog", "Give up after", None, QtGui.QApplication.UnicodeUTF8)) + self.label_20.setText(QtGui.QApplication.translate("settingsDialog", "and", None, QtGui.QApplication.UnicodeUTF8)) + self.label_22.setText(QtGui.QApplication.translate("settingsDialog", "days", None, QtGui.QApplication.UnicodeUTF8)) + self.label_23.setText(QtGui.QApplication.translate("settingsDialog", "months.", None, QtGui.QApplication.UnicodeUTF8)) + self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabResendsExpire), QtGui.QApplication.translate("settingsDialog", "Resends Expire", None, QtGui.QApplication.UnicodeUTF8)) import bitmessage_icons_rc diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index 2af19613..4cb8fb4e 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -105,7 +105,14 @@ - + + + + Reply below Quote + + + + Interface Language diff --git a/src/helper_startup.py b/src/helper_startup.py index abc4958f..4d7ffbfc 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -90,6 +90,7 @@ def loadConfig(): shared.config.set('bitmessagesettings', 'userlocale', 'system') 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', 'replybelow', 'False') #start:UI setting to stop trying to send messages after X days/months shared.config.set( @@ -130,4 +131,4 @@ def isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections(): return False except Exception as err: print 'An Exception occurred within isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections:', err - return False \ No newline at end of file + return False From e63276c24074fb084aa7258126a9186121ba1ffa Mon Sep 17 00:00:00 2001 From: goldbook Date: Sat, 1 Feb 2014 17:15:50 +0900 Subject: [PATCH 09/20] add japanese transration. --- src/bitmessageqt/__init__.py | 2 +- src/bitmessageqt/settings.py | 6 +- src/translations/bitmessage_ja.pro | 33 + src/translations/bitmessage_ja.qm | Bin 0 -> 18960 bytes src/translations/bitmessage_ja.ts | 1462 ++++++++++++++++++++++++++++ 5 files changed, 1500 insertions(+), 3 deletions(-) create mode 100644 src/translations/bitmessage_ja.pro create mode 100644 src/translations/bitmessage_ja.qm create mode 100644 src/translations/bitmessage_ja.ts diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 7125cb60..888376fa 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -3320,7 +3320,7 @@ class settingsDialog(QtGui.QDialog): shared.safeConfigGetBoolean('bitmessagesettings', 'useidenticons')) 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')) if user_countrycode in languages: curr_index = languages.index(user_countrycode) diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index 293c133b..6f568a93 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -91,6 +91,7 @@ class Ui_settingsDialog(object): 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.setWidget(8, QtGui.QFormLayout.FieldRole, self.groupBox) self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8("")) @@ -403,8 +404,9 @@ class Ui_settingsDialog(object): self.languageComboBox.setItemText(7, _translate("settingsDialog", "Norsk", "no")) self.languageComboBox.setItemText(8, _translate("settingsDialog", "العربية", "ar")) self.languageComboBox.setItemText(9, _translate("settingsDialog", "简体中文", "zh_cn")) - self.languageComboBox.setItemText(10, _translate("settingsDialog", "Pirate English", "en_pirate")) - self.languageComboBox.setItemText(11, _translate("settingsDialog", "Other (set in keys.dat)", "other")) + self.languageComboBox.setItemText(10, _translate("settingsDialog", "日本語", "ja")) + 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.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None)) self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None)) diff --git a/src/translations/bitmessage_ja.pro b/src/translations/bitmessage_ja.pro new file mode 100644 index 00000000..f6e5ad63 --- /dev/null +++ b/src/translations/bitmessage_ja.pro @@ -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 diff --git a/src/translations/bitmessage_ja.qm b/src/translations/bitmessage_ja.qm new file mode 100644 index 0000000000000000000000000000000000000000..cd9798af939f1817018520f5e78721a2e722123e GIT binary patch literal 18960 zcmd5^33wdEl`cs$qmeX{ZP^ySFpXJT@+FnQ#s|j6k^vt&tOES@waopU1B}&Q%Zk^Z$ymb+Y|NR58JoG9&7SlUW5=yw z3t!*P@B=&h>L-ag^I7{bYr5+9pudAPU0sUjy{x5Y3u8-`vURH?jFm2DZT;WJ^Ir2g zXAE1vtB0{=x3SJB#w{;n=RUKTu`#pQd7fQZcMALBAA;b=%@Uu2-h%J2t+!u{ecr<^ z)UIP}=|px-|5V22Z)2~F+QV4+yX>b=d>6l8%-)*3268%uee%?Yj7^9Xl-%?&W5uTx zoG=Od^&MAG<2#A5nlS|@pZ^|XC;zHo{zag-VoJf1F_=H*!Gaa%EyTRSg67vT-m|^n z{0+A-R{QmWE5>90RcgWYcY)vfrwblEPz1THFL-YN=i**e@W(?C#`s?r94&0XH#LQG z4?&KjJcWA`;A86A!Z)@(!Px1E!gpOs#^#(={6zC~R3-7t=^DNneb9GDJ0y5C(zbVZZmew_gH2&nS0avv?+BGxoW!JBUSmM-fhRZPA!@I&Hu!_9VH9T3*uagOOnkP zUoxxYx`UAW`0|n)rhu<``%7+GdKCLORPynHlOWHk(iz*a{=6}zJ%=!EW`+4&bbRTB zi^rp1!Lm08KE(Z*Rd(oRoQvnFvJWb&8RLh_ zK2Um~?|1snm_z%x)pzc;807Q|U+6!(pyvVK*OpJheYw(iNB<)@pDy3MB*%%{d=D(R z3Ht8xJ)}c!v;NWdXh9Nsv)O!}@fF_>#x+Avf8~3*2hX`D_+A->^(!9ry*eB7>y9t? zzI#99xUPJ1{FithEuV2M=9gVsKKIHyaqnl9cYW(x@O7v>_Q^$z{lk&+Ee-o1r`6@J zKVJ*^2Fri7FMxetSpMIUGq8`dD`t_MD2-OsHeZi(4_2)D1oB%vyW*yeiy)636))96 zuIyIxIs1xH3!ViZOX8zi4lD!xrcsZN2Y(aZ9ree((6=)lfbbeVDZ&g_^s=3odhv~L z3hosFJ)J7XPo+)%sMZ=~n0ghEQQ+Na=YsL7;k zu5ZtgU3ayv8ZvVn&D1cnJsn5}jc6hj)iv4l(dzejCtrDud-I1wNR(S7R4ru;$mUMi zU(oV)YXcv&*xz&tkL7IO1fr2twUBBkDP0-R(}uMdrC!%#GOAvSnk|On5w>4yjox&M zJ>HiYpLdB#)+F9|!HI1T^BC{pyZA*AM3+ruv_&KoP5J|IH6-J8T9yzCvIz4tt)rYr zn%SivgV;rUBfrunXm32Et4T%EQ%bKt6^tmsh+k7Qf3GTApfbBab9pSt!+e8HkhFue zLWydd{qd-j!EwXq^Fo`#7@I;;5hQA5JWQ}@X#8b+W%nFsj}#7R*fVS zP0`Z50o9NZbG1fzw>`0FMLaGWb?U}F&0iK0#F6kq{w|h%0Dlhf!~8Kk5Atu~Z(NtF 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 A4FCWD literal 0 HcmV?d00001 diff --git a/src/translations/bitmessage_ja.ts b/src/translations/bitmessage_ja.ts new file mode 100644 index 00000000..b385e57d --- /dev/null +++ b/src/translations/bitmessage_ja.ts @@ -0,0 +1,1462 @@ + + + + + MainWindow + + + One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now? + %1は古いバージョン1のアドレスです。バージョン1のアドレスはサポートが終了しています。すぐに削除しますか? + + + + Reply + . + 返信 + + + + Add sender to your Address Book + 送信元をアドレス帳に追加 + + + + Move to Trash + ゴミ箱へ移動 + + + + View HTML code as formatted text + HTMLコードを整形したテキストで表示 + + + + Save message as... + 形式を選択してメッセージを保存 + + + + Mark Unread + 未読にする + + + + New + 新規 + + + + Enable + 有効 + + + + Disable + 無効 + + + + Copy address to clipboard + アドレスをコピー + + + + Special address behavior... + アドレスの特別な動作 + + + + Send message to this address + このアドレスへ送信 + + + + Subscribe to this address + このアドレスを購読 + + + + Add New Address + アドレスを追加 + + + + Delete + 削除 + + + + Copy destination address to clipboard + 宛先アドレスをコピー + + + + Force send + 強制的に送信 + + + + Add new entry + 新しい項目を追加 + + + + Since startup on %1 + + + + + Waiting on their encryption key. Will request it again soon. + + + + + Encryption key request queued. + + + + + Queued. + + + + + Message sent. Waiting on acknowledgement. Sent at %1 + + + + + Message sent. Sent at %1 + + + + + Need to do work to send message. Work is queued. + + + + + Acknowledgement of the message received %1 + + + + + Broadcast queued. + + + + + Broadcast on %1 + + + + + Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 + + + + + Problem: The recipient's encryption key is no good. Could not encrypt message. %1 + + + + + Forced difficulty override. Send should start soon. + + + + + Unknown status: %1 %2 + + + + + Not Connected + 未接続 + + + + Show Bitmessage + + + + + Send + 送る + + + + Subscribe + 購読 + + + + Address Book + アドレス帳 + + + + Quit + 終了 + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. + プログラムを同じディレクトリに保存されているkeys.datファイルを編集することで鍵を管理できます。ファイルをバックアップしておくことも重要です。 + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. + %1に保存されているkeys.datファイルを編集することで鍵を管理できます。ファイルをバックアップしておくことも重要です。 + + + + Open keys.dat? + keys.datを開きますか? + + + + You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + プログラムを同じディレクトリに保存されているkeys.datファイルを編集することで鍵を管理できます。ファイルをバックアップしておくことも重要です。すぐにファイルを開きますか?(必ず編集する前にBitmessageを終了してください) + + + + You may manage your keys by editing the keys.dat file stored in + %1 +It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.) + %1に保存されているkeys.datファイルを編集することで鍵を管理できます。ファイルをバックアップしておくことも重要です。すぐにファイルを開きますか?(必ず編集する前にBitmessageを終了してください) + + + + Delete trash? + ゴミ箱を空にしますか? + + + + Are you sure you want to delete all trashed messages? + ゴミ箱内のメッセージを全て削除してもよろしいですか? + + + + bad passphrase + 不正なパスフレーズ + + + + You must type your passphrase. If you don't have one then this is not the form for you. + パスフレーズを入力してください。パスフレーズがない場合は入力する必要はありません。 + + + + Chan name needed + Chan名が必要です + + + + You didn't enter a chan name. + chan名が入力されていません。 + + + + Address already present + + + + + Could not add chan because it appears to already be one of your identities. + + + + + Success + 成功 + + + + Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. + + + + + Address too new + + + + + Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. + + + + + Address invalid + アドレスが不正です + + + + That Bitmessage address is not valid. + このBitmessageアドレスは不正です。 + + + + Address does not match chan name + アドレスがchan名と一致しません + + + + Although the Bitmessage address you entered was valid, it doesn't match the chan name. + + + + + Successfully joined chan. + chanに参加しました。 + + + + Processed %1 person-to-person messages. + + + + + Processed %1 broadcast messages. + + + + + Processed %1 public keys. + + + + + Total Connections: %1 + 接続数: %1 + + + + Connection lost + 接続が切断されました + + + + Connected + 接続済み + + + + Message trashed + メッセージが削除されました + + + + Error: Bitmessage addresses start with BM- Please check %1 + + + + + Error: The address %1 is not typed or copied correctly. Please check it. + + + + + Error: The address %1 contains invalid characters. Please check it. + + + + + Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. + + + + + Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. + + + + + Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. + + + + + Error: Something is wrong with the address %1. + + + + + Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. + + + + + Sending to your address + アドレスへ送信中 + + + + Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. + + + + + Address version number + アドレスのバージョン番号 + + + + Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Stream number + ストリーム番号 + + + + Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. + + + + + Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. + + + + + Your 'To' field is empty. + 宛先が指定されていません。 + + + + Work is queued. + + + + + Right click one or more entries in your address book and select 'Send message to this address'. + + + + + Fetched address from namecoin identity. + + + + + Work is queued. %1 + + + + + New Message + 新規メッセージ + + + + From + 送信元 + + + + Address is valid. + アドレスが不正です。 + + + + The address you entered was invalid. Ignoring it. + 入力されたアドレスは不正です。無視されました。 + + + + Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. + + + + + Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. + + + + + Restart + 再開 + + + + You must restart Bitmessage for the port number change to take effect. + ポート番号の変更を有効にするにはBitmessageを再起動してください。 + + + + Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). + + + + + Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. + + + + + Passphrase mismatch + パスフレーズが一致しません + + + + The passphrase you entered twice doesn't match. Try again. + 再度入力されたパスフレーズが一致しません。再入力してください。 + + + + Choose a passphrase + パスフレーズを選択してください + + + + You really do need a passphrase. + + + + + All done. Closing user interface... + 完了しました。ユーザーインターフェースを閉じています。 + + + + Address is gone + + + + + Bitmessage cannot find your address %1. Perhaps you removed it? + アドレス%1が見つかりません。既に削除されている可能性があります。 + + + + Address disabled + アドレスが無効になりました + + + + Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. + + + + + Entry added to the Address Book. Edit the label to your liking. + + + + + Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back. + アイテムをゴミ箱へ移動。ゴミ箱の内容を表示する画面はありませんが、もし元に戻したくなった場合に備えてディスク上に残されます。 + + + + Save As... + 形式を選択して保存 + + + + Write error. + 書き込みエラー。 + + + + No addresses selected. + アドレスが未選択です。 + + + + Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. + + + + + Testing... + テスト中 + + + + This is a chan address. You cannot use it as a pseudo-mailing list. + + + + + The address should start with ''BM-'' + アドレスは「BM-」から始まります + + + + The address is not typed or copied correctly (the checksum failed). + このアドレスは正しく入力、またはコピーされていません。(チェックサムが一致しません)。 + + + + The version number of this address is higher than this software can support. Please upgrade Bitmessage. + このアドレスのバージョン番号はこのプログラムのサポート範囲外です。Bitmessageをアップデートしてください。 + + + + The address contains invalid characters. + 入力されたアドレスは不正な文字を含んでいます。 + + + + Some data encoded in the address is too short. + + + + + Some data encoded in the address is too long. + + + + + You are using TCP port %1. (This can be changed in the settings). + 使用中のポート %1 (設定で変更できます) + + + + Bitmessage + + + + + Search + 検索 + + + + All + 全て + + + + To + 宛先 + + + + From + 送信元 + + + + Subject + 題名 + + + + Message + メッセージ + + + + Received + 受信日時 + + + + Inbox + 受信箱 + + + + Load from Address book + アドレス帳から読み込み + + + + Fetch Namecoin ID + + + + + Message: + メッセージ: + + + + Subject: + 題名: + + + + Send to one or more specific people + 一人、または複数のユーザーへ送信 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + To: + 宛先: + + + + From: + 送信元: + + + + Broadcast to everyone who is subscribed to your address + 自分のアドレスを購読しているユーザー全員へ配信する + + + + Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. + + + + + Status + 状態 + + + + Sent + 送信済み + + + + Label (not shown to anyone) + ラベル(他の人からは見えません) + + + + Address + アドレス + + + + Stream + ストリーム + + + + Your Identities + アドレス一覧 + + + + Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. + + + + + Add new Subscription + 購読先を追加 + + + + Label + ラベル + + + + Subscriptions + 購読リスト + + + + The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. + + + + + Name or Label + 名前、ラベル + + + + Use a Blacklist (Allow all incoming messages except those on the Blacklist) + ブラックリストを使用(全てのメッセージを受信してブラックリストと一致する物だけ除外) + + + + Use a Whitelist (Block all incoming messages except those on the Whitelist) + ホワイトリストを使用(全てのメッセージを受信拒否してホワイトリストと一致する物だけ許可) + + + + Blacklist + ブラックリスト + + + + Stream # + ストリーム # + + + + Connections + 接続 + + + + Total connections: 0 + 接続数: 0 + + + + Since startup at asdf: + + + + + Processed 0 person-to-person message. + + + + + Processed 0 public key. + + + + + Processed 0 broadcast. + + + + + Network Status + ネットワークの状態 + + + + File + ファイル + + + + Settings + 設定 + + + + Help + ヘルプ + + + + Import keys + 鍵をインポート + + + + Manage keys + 鍵を管理 + + + + Ctrl+Q + Ctrrl+Q + + + + F1 + + + + + About + 概要 + + + + Regenerate deterministic addresses + + + + + Delete all trashed messages + ゴミ箱のメッセージを全て削除する + + + + Join / Create chan + chanに参加 / 作成 + + + + NewAddressDialog + + + Create new Address + 新しいアドレスを作成 + + + + Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. +The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: + + + + + <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + + + + + Use a random number generator to make an address + アドレスの生成に乱数ジェネレーターを使う + + + + Use a passpharase to make addresses + Use yee passpharase to make arrddresses + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + + + + + Make deterministic addresses + Make deterministic arrddresses + + + + Address version number: 3 + アドレスのバージョン番号: 3 + + + + In addition to your passphrase, you must remember these numbers: + + + + + Passphrase + パスフレーズ + + + + Number of addresses to make based on your passphrase: + パスフレーズから生成されたアドレスの数 + + + + Stream number: 1 + ストリーム数: 1 + + + + Retype passphrase + パスフレーズを再入力 + + + + Randomly generate address + ランダムなアドレスを生成する + + + + Label (not shown to anyone except you) + ラベル(他の人からは見えません) + + + + Use the most available stream + + + + + (best if this is the first of many addresses you will create) + + + + + Use the same stream as an existing address + 既存のアドレスと同じストリームを利用する + + + + (saves you some bandwidth and processing power) + (帯域と処理能力を節約する) + + + + Use a passphrase to make addresses + アドレスの作成にパスフレーズを使う + + + + NewSubscriptionDialog + + + Add new entry + 新しい項目を追加 + + + + Label + ラベル + + + + Address + アドレス + + + + SpecialAddressBehaviorDialog + + + Special Address Behavior + アドレスの特別な動作 + + + + Behave as a normal address + 通常のアドレスにする + + + + Behave as a pseudo-mailing-list address + 仮想メーリングリストとして使用する + + + + Mail received to a pseudo-mailing-list address will be automatically broadcast to subscribers (and thus will be public). + 仮想メーリングリストのアドレスが受信したアドレスは自動的に購読するユーザーに配信(公開)されます。 + + + + Name of the pseudo-mailing-list: + 仮想メーリングリストの名前: + + + + aboutDialog + + + PyBitmessage + + + + + version ? + Version ? + + + + About + 概要 + + + + Copyright © 2013 Jonathan Warren + + + + + <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> + + + + + This is Beta software. + このソフトウェアはベータ版です。 + + + + connectDialog + + + Bitmessage + + + + + Bitmessage won't connect to anyone until you let it. + Bitmessageはあなたが操作しない限りどこへも接続しません。 + + + + Connect now + 接続 + + + + Let me configure special network settings first + 最初に特別なネットワークの設定を行ってください + + + + helpDialog + + + Help + ヘルプ + + + + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + <a href="http://Bitmessage.org/wiki/PyBitmessage_Help">http://Bitmessage.org/wiki/PyBitmessage_Help</a> + + + + As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: + Bitmessageは協働プロジェクトです。ヘルプはBitmessage Wikiを参照してください: + + + + iconGlossaryDialog + + + Icon Glossary + + + + + You have no connections with other peers. + 他のpeerへ接続されていません。 + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to foward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + Yee have made least one connection to a peer pirate usin' outgoing connection but yee not yet received any incoming connections. Yee firewall, witches nest, or home router probably shant configured to foward incoming TCP connections to yee computer. Bitmessage be workin' just fine but it help fellow pirates if yee allowed for incoming connections and will help yee be a better-connected node matey. + + + + You are using TCP port ?. (This can be changed in the settings). + 使用中のポート ? (設定で変更できます) + + + + You do have connections with other peers and your firewall is correctly configured. + ファイアーウォールを適切に設定し、他のpeerへ接続してください。 + + + + You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. + + + + + newChanDialog + + + Dialog + ダイアログ + + + + Create a new chan + 新しいchanを作成 + + + + Join a chan + chanに参加 + + + + Create a chan + chanを作成 + + + + <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> + + + + + Chan name: + Chan名: + + + + <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> + + + + + Chan bitmessage address: + + + + + regenerateAddressesDialog + + + Regenerate Existing Addresses + 既存のアドレスを再生成する + + + + Regenerate existing addresses + 既存のアドレスを再生成する + + + + Passphrase + パスフレーズ + + + + Number of addresses to make based on your passphrase: + パスフレーズから生成されたアドレスの数: + + + + Address version Number: + アドレスのバージョン番号: + + + + 3 + + + + + Stream number: + ストリーム数: + + + + 1 + + + + + Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter + + + + + You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. + + + + + If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. + + + + + settingsDialog + + + Settings + 設定 + + + + Start Bitmessage on user login + ユーザのログイン時にBitmessageを起動 + + + + Start Bitmessage in the tray (don't show main window) + Bitmessageをトレイ内で起動する(メインウィンドウを表示しない) + + + + Minimize to tray + タスクトレイへ最小化 + + + + Show notification when message received + メッセージの受信時に通知する + + + + Run in Portable Mode + ポータブルモードで実行 + + + + In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. + ポータブルモード時、メッセージと設定ファイルは通常のアプリケーションデータのフォルダではなく同じディレクトリに保存されます。これによりBitmessageをUSBドライブから実行できます。 + + + + User Interface + ユーザインターフェース + + + + Listening port + リスニングポート + + + + Listen for connections on port: + 接続を待つポート: + + + + Proxy server / Tor + プロキシサーバー/Tor + + + + Type: + タイプ: + + + + none + 無し + + + + SOCKS4a + SOCKS4a + + + + SOCKS5 + SOCKS5 + + + + Server hostname: + サーバーホスト名: + + + + Port: + ポート: + + + + Authentication + 認証 + + + + Username: + ユーザー名: + + + + Pass: + パス: + + + + Network Settings + ネットワーク設定 + + + + When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. + + + + + Total difficulty: + Total difficulty: + + + + Small message difficulty: + Small message difficulty: + + + + The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. + + + + + The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. + + + + + Demanded difficulty + Demanded difficulty + + + + Willingly include unencrypted destination address when sending to a mobile device + + + + + Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): + 自動的に設定された言語・地域を上書きする(国コード、または言語コードを入力。例:「en_US」または「en」) + + + + Listen for incoming connections when using proxy + プロキシ使用時に外部からの接続を待機する + + + + Here you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable. + + + + + Maximum acceptable total difficulty: + + + + + Maximum acceptable small message difficulty: + + + + + Max acceptable difficulty + + + + + <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> + + + + + Host: + ホスト: + + + + Password: + パスワード: + + + + Test + テスト + + + + Connect to: + 接続先: + + + + Namecoind + + + + + NMControl + + + + + Namecoin integration + + + + From 1204442fcd255394961b1c202cac0fd7a557a200 Mon Sep 17 00:00:00 2001 From: IZARTeam Date: Thu, 6 Feb 2014 03:31:51 +0800 Subject: [PATCH 10/20] Add zh_cn translations in class_singleWorker.py And fix some mistakes in Chinese translation --- src/translations/bitmessage_zh_cn.qm | Bin 39733 -> 42405 bytes src/translations/bitmessage_zh_cn.ts | 93 ++++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/src/translations/bitmessage_zh_cn.qm b/src/translations/bitmessage_zh_cn.qm index dce6934795e909e521b6c72629bbcbaa515432aa..3f894afd7087d156a33a57fbe1448e33852bd982 100644 GIT binary patch delta 4535 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 diff --git a/src/translations/bitmessage_zh_cn.ts b/src/translations/bitmessage_zh_cn.ts index 1812e4bf..adc055e5 100644 --- a/src/translations/bitmessage_zh_cn.ts +++ b/src/translations/bitmessage_zh_cn.ts @@ -862,7 +862,7 @@ It is important that you back up this file. Would you like to open the file now? 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. - 已经移动项目到回收站。没有图形化的界面可以查看您的回收站,不过如果您还想找回的化它还在您的硬盘上。 + 已经移动项目到回收站。没有图形化的界面可以查看您的回收站,不过如果您还想找回的话它还在您的硬盘上。 @@ -882,7 +882,7 @@ It is important that you back up this file. Would you like to open the file now? Do you really want to remove this avatar? - 您真的想一处这个头像么? + 您真的想移除这个头像么? @@ -984,6 +984,95 @@ It is important that you back up this file. Would you like to open the file now? Message sent. Waiting for acknowledgement. Sent at %1 消息已经发送. 正在等待回执. 发送于 %1 + + + Error! Could not find sender address (your address) in the keys.dat file. + 错误! 无法在文件 keys.dat 中找到发送者地址(你的地址) + + + + Doing work necessary to send broadcast... + 正在做一些必须的工作来发送广播. + + + + Broadcast sent on %1 + 广播发送于 %1 + + + + Encryption key was requested earlier. + 已在更早的时候得到加密密钥. + + + + Sending a request for the recipient's encryption key. + 正在请求收件人的加密密钥. + + + + Looking up the receiver's public key + 正在查找收件人的公钥. + + + + Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings. %1 + 错误: 目标是一个移动设备, 要求不加密目标地址, 但是你的设置中不允许这么做. %1 + + + + Doing work necessary to send message. +There is no required difficulty for version 2 addresses like this. + 正在做一些必要的工作来发送消息. +这里要求的难度不像第2版的地址那样. + + + + Doing work necessary to send message. +Receiver's required difficulty: %1 and %2 + 正在做一些必要的工作来发送消息. +接收者要求的难度为: %1 和 %2 + + + + Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. + 错误: 收件人要求的做工量(%1 和 %2)大于我们的最大接受做工量. + + + + 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 + 错误: 你正在尝试发送消息到你自身或者一个频道, 但是你的加密密钥无法在文件keys.dat中找到. 无法加密消息. %1 + + + + Doing work necessary to send message. + 正在做一些必要的工作来发送消息. + + + + Message sent. Sent on %1 + 消息已经发送. 发送于 %1 + + + + Message sent. Waiting for acknowledgement. Sent on %1 + 消息已经发送. 正在等待回执. 发送于 %1 + + + + Doing work necessary to request encryption key. + 正在做一些必要的工作来请求加密密钥. + + + + Broacasting the public key request. This program will auto-retry if they are offline. + 正在广播公钥请求. 如果他们不在线, 这一过程将自动重试. + + + + Sending public key request. Waiting for reply. Requested at %1 + 正在发送公钥请求. 等待回应中. 请求于 %1 + NewAddressDialog From 03263156de8d18261a1683e25a11daf5d5313940 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 6 Feb 2014 13:16:07 +0000 Subject: [PATCH 11/20] Add a 'trustedpeer' option to keys.dat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If this option is specified in keys.dat then Bitmessage will connect to the host specified there instead of connecting to the hosts in the list of known nodes. It will also stop listening for incoming connections and the timing attack mitigation will be disabled. The expected use case is for example where a user is running a daemon on a dedicated machine in their local network and they occasionally want to check for messages using a second instance of the client on their laptop. In that case it would be much faster to catch up with the messages by directly downloading from the dedicated machine over the LAN. There is no need to connect to multiple peers or to do the timing attack mitigation because the daemon is trusted. The host is specified as hostname:port. Eg, ‘192.168.1.8:8444’. --- src/class_outgoingSynSender.py | 25 ++++++++++++++++++------- src/class_receiveDataThread.py | 24 +++++++++++------------- src/class_singleListener.py | 5 +++++ src/helper_startup.py | 13 +++++++++++++ src/shared.py | 12 ++++++++++++ 5 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/class_outgoingSynSender.py b/src/class_outgoingSynSender.py index f9343f62..fef781d3 100644 --- a/src/class_outgoingSynSender.py +++ b/src/class_outgoingSynSender.py @@ -22,26 +22,37 @@ class outgoingSynSender(threading.Thread): self.streamNumber = streamNumber 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): while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): time.sleep(2) 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) if shared.shutdown: break random.seed() - shared.knownNodesLock.acquire() - peer, = random.sample(shared.knownNodes[self.streamNumber], 1) - shared.knownNodesLock.release() + peer = self._getPeer() shared.alreadyAttemptedConnectionsListLock.acquire() while peer in shared.alreadyAttemptedConnectionsList or peer.host in shared.connectedHostsList: shared.alreadyAttemptedConnectionsListLock.release() # print 'choosing new sample' random.seed() - shared.knownNodesLock.acquire() - peer, = random.sample(shared.knownNodes[self.streamNumber], 1) - shared.knownNodesLock.release() + peer = self._getPeer() time.sleep(1) # Clear out the shared.alreadyAttemptedConnectionsList every half # hour so that this program will again attempt a connection diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index 2551f223..31ddce14 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -313,6 +313,14 @@ class receiveDataThread(threading.Thread): print 'Sending huge inv message with', numberOfObjects, 'objects to just this one peer' 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 def recbroadcast(self, data): @@ -341,10 +349,7 @@ class receiveDataThread(threading.Thread): sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ (time.time() - self.messageProcessingStartTime) - if sleepTime > 0 and doTimingAttackMitigation: - with shared.printLock: - print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.' - time.sleep(sleepTime) + self._sleepForTimingAttackMitigation(sleepTime) # We have received a msg message. def recmsg(self, data): @@ -373,10 +378,7 @@ class receiveDataThread(threading.Thread): sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ (time.time() - self.messageProcessingStartTime) - if sleepTime > 0 and doTimingAttackMitigation: - with shared.printLock: - print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.' - time.sleep(sleepTime) + self._sleepForTimingAttackMitigation(sleepTime) # We have received a pubkey def recpubkey(self, data): @@ -387,11 +389,7 @@ class receiveDataThread(threading.Thread): lengthOfTimeWeShouldUseToProcessThisMessage = .1 sleepTime = lengthOfTimeWeShouldUseToProcessThisMessage - \ (time.time() - self.pubkeyProcessingStartTime) - if sleepTime > 0 and doTimingAttackMitigation: - with shared.printLock: - print 'Timing attack mitigation: Sleeping for', sleepTime, 'seconds.' - time.sleep(sleepTime) - + self._sleepForTimingAttackMitigation(sleepTime) # We have received an inv message def recinv(self, data): diff --git a/src/class_singleListener.py b/src/class_singleListener.py index ec1f47d4..49dbf9ce 100644 --- a/src/class_singleListener.py +++ b/src/class_singleListener.py @@ -22,6 +22,11 @@ class singleListener(threading.Thread): self.selfInitiatedConnections = selfInitiatedConnections 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'): time.sleep(1) helper_bootstrap.dns() diff --git a/src/helper_startup.py b/src/helper_startup.py index abc4958f..f9b2ff36 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -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. +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(): if shared.appdata: shared.config.read(shared.appdata + 'keys.dat') @@ -122,6 +133,8 @@ def loadConfig(): with open(shared.appdata + 'keys.dat', 'wb') as configfile: shared.config.write(configfile) + _loadTrustedPeer() + def isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections(): try: VER_THIS=StrictVersion(platform.version()) diff --git a/src/shared.py b/src/shared.py index e6642c70..1ce570d6 100644 --- a/src/shared.py +++ b/src/shared.py @@ -92,6 +92,18 @@ namecoinDefaultRpcPort = "8336" # binary distributions vs source distributions. 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): queryreturn = sqlQuery('''select hash from inventory where hash=?''', hash) return queryreturn != [] From a34442d6374884417bee3398944c1021024eec03 Mon Sep 17 00:00:00 2001 From: goldbook Date: Fri, 7 Feb 2014 00:47:04 +0900 Subject: [PATCH 12/20] add more translation. --- src/translations/bitmessage_ja.qm | Bin 18960 -> 41102 bytes src/translations/bitmessage_ja.ts | 187 +++++++++++++++--------------- 2 files changed, 94 insertions(+), 93 deletions(-) diff --git a/src/translations/bitmessage_ja.qm b/src/translations/bitmessage_ja.qm index cd9798af939f1817018520f5e78721a2e722123e..6386a272ca8c676b22db6ce412e5b566c6a0959e 100644 GIT binary patch literal 41102 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 W?`Gy`xmTaAcdB)BDZ|9?fd3!h94CAL delta 1943 zcmZvceNa@_8OEQxd+&bT{cu50SX4CS!v#T|>}JZH~6=RNQH zd!KXn{6W)lKyc4}uXJMf6Ym>;oEq|R(XkJ|$^dlWCk{yLqs|7BL_pjJ7`_IicY)wq zU|}?%^#_)J3RqtTRyjG}2JuE1*Ns5D%Q<5q#78r!UyteRE=bLcHSQK9Zx-Me3(4(W z4)`yIbmjz*(F%RR0wD7`>EWZ zny8(4p>i`YXD*g3DhEvSu(a+2YUh|n+fmS138bCGiVCiqC&T^Hr!K(m#A;n54-Uc0 z&q|n(giYTwV8R(}dCSd8e}}DAZNS_h9Il%T#5drktr@WNv zxk2XTQ6lRy)7&E--C{_UM|O?6F7NeTXVQ(Dvxd=m*!B&U9!8>bQPtfEd`Z5^!XSsTZhEG^{yRX#TjF||1;#dtKmVQyMywKd*h$>5E+u_)m?-y4u5R``!6nTpCy4-;wAgox#Fk0bM^(moBE7c7 z$%<9Uvz>{iTcpFT=|K2isqHBVBwv+|>|z{0oz&6P1vmVkNT-_`fbkQhv#(1Gq?O)Z z7efymlWw%f6H$ir`3lYpf02f?L@TShqMsh+#dxG!_diyi*ruy(VQbPebSJ+26WyJv z>j?db^HX)|9)G|Yue&fxEOw3VR)-%=m!kJ;p{H!g`jqS}4y51f^X{_8_O1FCFRx*R z-TJb)3L@O7|5a`fP12};v;LP{r_rBozQ;ro#x&}4{e%3`%Ae|=h4H|!D~4pCCAM# zHLNG9KbuRxEu`Dmnh(qi=Cx7G@6^4|78RO1M^Oefn9nD))AgeHy=szk{>FSssG)a$ zHm2#nHh(xipJu&pzEMe?F~xk-#ssXF%)L?EA3MoyG4!7!$|V-ZhI`ZzOL!{-$iJ}6 zP&#=3otDB=txU{kSwFN5_{o1Qn=|*4)FR96?ieC2vE1LgmX&X{{HHvfg=AZuqwfn- zg*7Js2zy^*T{uL7t|)8!s$>$`W$lS2SsWkJsPKKZglo)X&Ia2HC(?L8p6zk~Go09O z8{SRRrJpCi%ps+qKT~1?5>+wKA*iK6 z>4KW$SSWDXq69c6DE-bNr90}BdUM7&je32iUZWPzuGAq^D!+vR4GA9mHN6etcjb2Wj{pNz_p Since startup on %1 - + 起動日時 %1 Waiting on their encryption key. Will request it again soon. - + 暗号化キーを待っています。再度リクエストします。 Encryption key request queued. - + 暗号鍵のリクエストはキューに入りました。 Queued. - + キューに入りました。 Message sent. Waiting on acknowledgement. Sent at %1 - + メッセージは送信されました。確認街です。送信先: %1 Message sent. Sent at %1 - + メッセージは送信されました。送信先: %1 Need to do work to send message. Work is queued. - + 送信のために処理を行う必要があります。処理はキューに入りました。 Acknowledgement of the message received %1 - + メッセージの確認を受け取りました %1 Broadcast queued. - + Broadcastがキューに入りました。 Broadcast on %1 - + Broadcast: %1 Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 - + 問題: 受信者が要求している処理は現在あなたが設定しているよりも高い難易度です。 %1 Problem: The recipient's encryption key is no good. Could not encrypt message. %1 - + 問題: 受信者の暗号鍵は正当でない物です。メッセージを暗号化できません。 %1 Forced difficulty override. Send should start soon. - + 難易度を強制上書きしました。まもなく送信されます。 Unknown status: %1 %2 - + 不明なステータス: %1 %2 @@ -177,12 +177,12 @@ Show Bitmessage - + Bitmessageを表示 Send - 送る + 送る @@ -261,12 +261,12 @@ It is important that you back up this file. Would you like to open the file now? Address already present - + アドレスは既に表示されています Could not add chan because it appears to already be one of your identities. - + chanを追加できません。既にアドレス一覧に含まれています。 @@ -276,17 +276,17 @@ It is important that you back up this file. Would you like to open the file now? Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in 'Your Identities'. - + chanの作成に成功しました。他の人がchanに参加できるようにするには、chanの名前とBitmessageアドレスを伝えてください: %1 アドレスは「アドレス一覧」に表示されます。 Address too new - + アドレスが新しすぎます Although that Bitmessage address might be valid, its version number is too new for us to handle. Perhaps you need to upgrade Bitmessage. - + このBitmessageアドレスは正当ですが、バージョン番号が現在使用中の物より新しいです。Bitmessageをアップデートしてください。 @@ -306,7 +306,7 @@ It is important that you back up this file. Would you like to open the file now? Although the Bitmessage address you entered was valid, it doesn't match the chan name. - + このBitmessageアドレスは正当ですが、chan名と一致していません。 @@ -316,17 +316,17 @@ It is important that you back up this file. Would you like to open the file now? Processed %1 person-to-person messages. - + 処理された1対1のメッセージ数 %1 Processed %1 broadcast messages. - + 処理されたBroadcastmessage数 %1 Processed %1 public keys. - + 処理された公開鍵数 %1 @@ -351,42 +351,42 @@ It is important that you back up this file. Would you like to open the file now? Error: Bitmessage addresses start with BM- Please check %1 - + エラー: Bitmessageアドレスは「BM-」で始まります。確認してください %1 Error: The address %1 is not typed or copied correctly. Please check it. - + エラー: アドレス %1 は正しく入力、またはコピーされていません。確認して下さい。 Error: The address %1 contains invalid characters. Please check it. - + エラー: アドレス %1 は不正な文字を含んでいます。確認して下さい。 Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever. - + エラー: アドレスのバージョン %1 は現在使用中の物より新しいです。Bitmessageをアップデートする必要があるか、連絡先がより賢いです。 Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance. - + エラー: アドレス %1 でエンコードされたデータが短すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。 Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance. - + エラー: アドレス %1 でエンコードされたデータが長すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。 Error: Something is wrong with the address %1. - + エラー: アドレス %1 には何かしら誤りがあります。 Error: You must specify a From address. If you don't have one, go to the 'Your Identities' tab. - + エラー: 送信元アドレスを指定してください。まだ作成していない場合には「アドレス一覧」のタブを開いてください。 @@ -396,7 +396,7 @@ It is important that you back up this file. Would you like to open the file now? Error: One of the addresses to which you are sending a message, %1, is yours. Unfortunately the Bitmessage client cannot process its own messages. Please try running a second client on a different computer or within a VM. - + エラー: 送信先アドレス %1 は自分自身のアドレスです。Bitmessageクライアントは自分自身へのメッセージを処理できません。別のPCか仮想マシン上でクライアントを立ち上げてください。 @@ -406,7 +406,7 @@ It is important that you back up this file. Would you like to open the file now? Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version. - + アドレス %1 に接続。%2 のバージョン番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。 @@ -416,12 +416,12 @@ It is important that you back up this file. Would you like to open the file now? Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version. - + アドレス %1 に接続。%2 のストリーム番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。 Warning: You are currently not connected. Bitmessage will do the work necessary to send the message but it won't send until you connect. - + 警告: 接続されていません。Bitmessageはメッセージの処理を行いますが、ネットワークに接続するまで送信はされません。 @@ -431,22 +431,22 @@ It is important that you back up this file. Would you like to open the file now? Work is queued. - + 処理がキューに入りました。 Right click one or more entries in your address book and select 'Send message to this address'. - + アドレス帳から一つ、または複数のアドレスを右クリックして「このアドレスへ送信」を選んでください。 Fetched address from namecoin identity. - + namecoin IDからアドレスを取得 Work is queued. %1 - + 処理がキューに入りました。 %1 @@ -471,12 +471,12 @@ It is important that you back up this file. Would you like to open the file now? Error: You cannot add the same address to your address book twice. Try renaming the existing one if you want. - + エラー: 同じアドレスを複数アドレス帳に追加する事はできません。既存の項目をリネームしてください。 Error: You cannot add the same address to your subsciptions twice. Perhaps rename the existing one if you want. - + エラー: 同じアドレスを複数購読リストに追加する事はできません。既存の項目をリネームしてください。 @@ -491,12 +491,12 @@ It is important that you back up this file. Would you like to open the file now? Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any). - + プロキシの設定を有効にするには手動でBitmessageを再起動してください。既に接続がある場合は切断されます。 Error: You cannot add the same address to your list twice. Perhaps rename the existing one if you want. - + エラー: 同じアドレスを複数リストに追加する事はできません。既存の項目をリネームしてください。 @@ -516,7 +516,7 @@ It is important that you back up this file. Would you like to open the file now? You really do need a passphrase. - + パスフレーズが必要です。 @@ -526,7 +526,7 @@ It is important that you back up this file. Would you like to open the file now? Address is gone - + アドレスが無効になりました。 @@ -541,12 +541,12 @@ It is important that you back up this file. Would you like to open the file now? Error: The address from which you are trying to send is disabled. You'll have to enable it on the 'Your Identities' tab before using it. - + エラー: 送信しようとしたアドレスは無効になっています。使用する前に「アドレス一覧」で有効にしてください。 Entry added to the Address Book. Edit the label to your liking. - + アドレス帳に項目が追加されました。ラベルは自由に編集できます。 @@ -571,7 +571,7 @@ It is important that you back up this file. Would you like to open the file now? Options have been disabled because they either aren't applicable or because they haven't yet been implemented for your operating system. - + 現在のOS上で未実装、または実装できないためオプションは無効化されました。 @@ -581,7 +581,7 @@ It is important that you back up this file. Would you like to open the file now? This is a chan address. You cannot use it as a pseudo-mailing list. - + chanアドレスは仮想メーリングリストのアドレスには使用できません。 @@ -606,12 +606,12 @@ It is important that you back up this file. Would you like to open the file now? Some data encoded in the address is too short. - + このアドレスでエンコードされたデータが短すぎます。 Some data encoded in the address is too long. - + このアドレスでエンコードされたデータが長過ぎます。 @@ -671,7 +671,7 @@ It is important that you back up this file. Would you like to open the file now? Fetch Namecoin ID - + namecoin IDを取得 @@ -695,7 +695,7 @@ It is important that you back up this file. Would you like to open the file now? p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + @@ -715,7 +715,7 @@ p, li { white-space: pre-wrap; } Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them. - + broadcastはあなたのアドレスのみで暗号化されます。あなたのアドレスを知っている人は全て読むことができます。 @@ -725,7 +725,7 @@ p, li { white-space: pre-wrap; } Sent - 送信済み + 送信済み @@ -750,7 +750,7 @@ p, li { white-space: pre-wrap; } Here you can subscribe to 'broadcast messages' that are sent by other users. Messages will appear in your Inbox. Addresses here override those on the Blacklist tab. - + 他のユーザが送信した「broadcastメッセージ」を購読できます。メッセージは受信箱に表示されます。このリストのアドレスはブラックリストより優先されます。 @@ -770,7 +770,7 @@ p, li { white-space: pre-wrap; } The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. - + アドレス帳は他のユーザのBitmessageアドレスにラベルや名前をつけることで受信箱を見やすくします。「追加」ボタンを押すか受信箱でメッセージを右クリックしてください。 @@ -810,22 +810,22 @@ p, li { white-space: pre-wrap; } Since startup at asdf: - + 起動してから asdf: Processed 0 person-to-person message. - + 処理された1対1のメッセージ数 0 Processed 0 public key. - + 処理された公開鍵数 0 Processed 0 broadcast. - + 処理されたBroadcastメッセージ数 0 @@ -875,7 +875,8 @@ p, li { white-space: pre-wrap; } Regenerate deterministic addresses - + 「決定論的アドレス」ともヤクセルが + deterministicアドレスを再生成 @@ -899,12 +900,12 @@ p, li { white-space: pre-wrap; } Here you may generate as many addresses as you like. Indeed, creating and abandoning addresses is encouraged. You may generate addresses by using either random numbers or by using a passphrase. If you use a passphrase, the address is called a "deterministic" address. The 'Random Number' option is selected by default but deterministic addresses have several pros and cons: - + 複数のアドレスを生成できます。アドレスを自由に生成、破棄することができます。アドレスは乱数かパスフレーズを使って生成できます。もしパスフレーズを使う場合、アドレスはdeterministicアドレスになります。デフォルトでは乱数による生成が選択されますが、deterministicアドレスにも長所と短所があります: <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> - + <html><head/><body><p><span style=" font-weight:600;">長所:<br/></span>記憶を頼りにアドレスを再生成できます。<br/>keys.datファイルのバックアップの心配をしないでも、パスフレーズを覚えておけばよくなります。<br/><span style=" font-weight:600;">短所:<br/></span>アドレスの暗号鍵を紛失した場合に備えてアドレスを再生成出来るようにしたい場合、パスフレーズを覚えて(もしくは書き留めて)必要があります。<br/>パスフレーズを覚えておくのに加えて、アドレスのバージョン番号とストリーム番号も覚えておく必要があります。<br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> @@ -969,12 +970,12 @@ The 'Random Number' option is selected by default but deterministic ad Use the most available stream - + 最も有効なストリームを使う (best if this is the first of many addresses you will create) - + (もしこれから複数のアドレスを生成するのであれば、最初の一つに最適です。) @@ -1063,7 +1064,7 @@ The 'Random Number' option is selected by default but deterministic ad <html><head/><body><p>Distributed under the MIT/X11 software license; see <a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a></p></body></html> - + @@ -1117,7 +1118,7 @@ The 'Random Number' option is selected by default but deterministic ad Icon Glossary - + アイコン一覧 @@ -1142,7 +1143,7 @@ The 'Random Number' option is selected by default but deterministic ad You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. - + 発信接続のために1つ以上のピアへ接続を行っていますが、まだ着信接続を受け取っていません。ファイアーウォールかホームルーターが外部からこのコンピューターへのTCP接続を受け取れるように設定されていないかも知れません。Bitmessageは正常に動作しますが、外部からの接続を許可してより良く接続されたノードになることはBitmessageネットワークへの助けになります。 @@ -1170,7 +1171,7 @@ The 'Random Number' option is selected by default but deterministic ad <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> - + <html><head/><body><p>chan名を入力してください。(強くて一意のパスフレーズのように)十分に複雑なchan名を選び、あなたの友人たちがそれを他人に教えない限りchanはセキュアでプライベートです。あなたと他の誰かが同じ名前のchanを作成した場合、現状では同じchanになる可能性が非常に高い。</p></body></html> @@ -1180,12 +1181,12 @@ The 'Random Number' option is selected by default but deterministic ad <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> - + <html><head/><body><p>chanは人々のグループに復号鍵を共有されることで存在します。chanで使われる鍵とBitmessageアドレスは読みやすい単語、またはフレーズ(chan名)から生成されます。chanに居る人たちへメッセージを送るには、通常の一対一のメッセージをchanアドレスへ送ります。</p><p>chansは実験的機能で、内容を管理するモデレーターを設けることはできません。</p></body></html> Chan bitmessage address: - + chanのbitmessageアドレス: @@ -1233,17 +1234,17 @@ The 'Random Number' option is selected by default but deterministic ad Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - + アドレスを1、2文字短くするために数分間追加の計算処理を行う You must check (or not check) this box just like you did (or didn't) when you made your addresses the first time. - + もしあなたが初めてアドレスを作ったのであればこのボックスをチェックする必要があります。(そうでない場合はしないでください)。 If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. - + もし以前にdeterministicアドレスを作ったことがあり、何かしらのトラブル(ハードディスクの故障のような)でそれを紛失していた場合、ここで再生成することができます。もし乱数でアドレスを作っていたのであればこのフォームは再生成には使えません。 @@ -1356,42 +1357,42 @@ The 'Random Number' option is selected by default but deterministic ad When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. - + 誰かがあなたにメッセージを送る時、相手のコンピューターはいくらか計算処理を行います。処理の難易度はデフォルトでは1です。この値を変更すると新しいアドレスではこのデフォルト値を引き上げることができます。その場合、新しいアドレスはメッセージの送信者により高い難易度を要求します。例外もあります: 友人や知り合いをアドレス帳に登録すると、Bitmessageは次にメッセージを送る際、自動的に要求される処理の難易度を最低限の1で済むように通知します。 Total difficulty: - Total difficulty: + 全体の難易度: Small message difficulty: - Small message difficulty: + 小さいメッセージの難易度: The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - + 「小さいメッセージの難易度」は小さいメッセージを行う時にだけ影響します。この値を二倍にすれば小さなメッセージに必要な処理の難易度は二倍になりますが、実際にはデータ量の多いメッセージには影響しません。 The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. - + 「全体の難易度」は完全に全てのメッセージに影響します。この値を二倍にすると処理量も二倍になります。 Demanded difficulty - Demanded difficulty + 要求される難易度 Willingly include unencrypted destination address when sending to a mobile device - + 携帯端末にメッセージを送る時は暗号化されていないアドレスを許可する Override automatic language localization (use countycode or language code, e.g. 'en_US' or 'en'): - 自動的に設定された言語・地域を上書きする(国コード、または言語コードを入力。例:「en_US」または「en」) + 自動的に設定された言語・地域を上書きする(国コード、または言語コードを入力。例:「en_US」または「en」): @@ -1401,27 +1402,27 @@ The 'Random Number' option is selected by default but deterministic ad 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. - + ここでは他のユーザーへメッセージを送る際に行うことを許可する処理量の上限を設定します。0を設定するとどんな量でも許容します。 Maximum acceptable total difficulty: - + 許可する難易度の上限: Maximum acceptable small message difficulty: - + 小さなメッセージに許可する難易度の上限: Max acceptable difficulty - + 許可する最大の難易度 <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> - + <html><head/><body><p>Bitmessageはアドレスを読みやすくするため、NamecoinというBitcoinベースの別のプログラムを利用できます。例えば、あなたの友人に長いBitmessageアドレスを伝える代わりに、単純に<span style=" font-style:italic;">テスト</span>でメッセージを送るよう伝えることができます。</p><p>(Bitmessageアドレスを独自にNamecoinにするのはかなり難しいです)。</p><p>Bitmessageは直接namecoindを使うか、nmcontrolインスタンスを使うことができます。</p></body></html> @@ -1446,17 +1447,17 @@ The 'Random Number' option is selected by default but deterministic ad Namecoind - + Namecoind NMControl - + NMControl Namecoin integration - + Namecoin連携 From 61d4e0889f491477be42015b49f210f9925899c8 Mon Sep 17 00:00:00 2001 From: goldbook Date: Sat, 8 Feb 2014 11:35:51 +0900 Subject: [PATCH 13/20] complete translation to japanese --- src/translations/bitmessage_ja.qm | Bin 41102 -> 41367 bytes src/translations/bitmessage_ja.ts | 32 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/translations/bitmessage_ja.qm b/src/translations/bitmessage_ja.qm index 6386a272ca8c676b22db6ce412e5b566c6a0959e..0d78d13d3cfdb36cace31497c506fe601741935e 100644 GIT binary patch delta 2978 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 U*qyV_OM= Processed %1 person-to-person messages. - 処理された1対1のメッセージ数 %1 + %1 通の1対1のメッセージを処理しました。 Processed %1 broadcast messages. - 処理されたBroadcastmessage数 %1 + %1 件のBroadcastメッセージを処理しました。 Processed %1 public keys. - 処理された公開鍵数 %1 + %1 件の公開鍵を処理しました。 @@ -441,7 +441,7 @@ It is important that you back up this file. Would you like to open the file now? Fetched address from namecoin identity. - namecoin IDからアドレスを取得 + namecoin IDからアドレスを取得。 @@ -526,12 +526,12 @@ It is important that you back up this file. Would you like to open the file now? Address is gone - アドレスが無効になりました。 + アドレスが無効になりました Bitmessage cannot find your address %1. Perhaps you removed it? - アドレス%1が見つかりません。既に削除されている可能性があります。 + アドレス %1 が見つかりません。既に削除していませんか? @@ -616,7 +616,7 @@ It is important that you back up this file. Would you like to open the file now? You are using TCP port %1. (This can be changed in the settings). - 使用中のポート %1 (設定で変更できます) + 使用中のポート %1 (設定で変更できます)。 @@ -815,17 +815,17 @@ p, li { white-space: pre-wrap; } Processed 0 person-to-person message. - 処理された1対1のメッセージ数 0 + 0 通の1対1のメッセージを処理しました。 Processed 0 public key. - 処理された公開鍵数 0 + 0 件の公開鍵を処理しました。 Processed 0 broadcast. - 処理されたBroadcastメッセージ数 0 + 0 件のBroadcastメッセージを処理しました。 @@ -905,7 +905,7 @@ The 'Random Number' option is selected by default but deterministic ad <html><head/><body><p><span style=" font-weight:600;">Pros:<br/></span>You can recreate your addresses on any computer from memory. <br/>You need-not worry about backing up your keys.dat file as long as you can remember your passphrase. <br/><span style=" font-weight:600;">Cons:<br/></span>You must remember (or write down) your passphrase if you expect to be able to recreate your keys if they are lost. <br/>You must remember the address version number and the stream number along with your passphrase. <br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">長所:<br/></span>記憶を頼りにアドレスを再生成できます。<br/>keys.datファイルのバックアップの心配をしないでも、パスフレーズを覚えておけばよくなります。<br/><span style=" font-weight:600;">短所:<br/></span>アドレスの暗号鍵を紛失した場合に備えてアドレスを再生成出来るようにしたい場合、パスフレーズを覚えて(もしくは書き留めて)必要があります。<br/>パスフレーズを覚えておくのに加えて、アドレスのバージョン番号とストリーム番号も覚えておく必要があります。<br/>If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you.</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">長所:<br/></span>記憶を頼りにアドレスを再生成できます。<br/>keys.datファイルのバックアップの心配をしないでも、パスフレーズを覚えておけばよくなります。<br/><span style=" font-weight:600;">短所:<br/></span>アドレスの暗号鍵を紛失した場合に備えてアドレスを再生成出来るようにしたい場合、パスフレーズを覚えて(もしくは書き留めて)必要があります。<br/>パスフレーズを覚えておくのに加えて、アドレスのバージョン番号とストリーム番号も覚えておく必要があります。<br/>弱いパスフレーズを設定すると、ネット上の誰かがブルートフォース攻撃を行ってあなたの送信メッセージ、受信メッセージを読んでしまう可能性があります。</p></body></html> @@ -920,12 +920,12 @@ The 'Random Number' option is selected by default but deterministic ad Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - + アドレスを1、2文字短くするために数分間追加の計算処理を行う Make deterministic addresses - Make deterministic arrddresses + deterministicアドレスを作る @@ -935,7 +935,7 @@ The 'Random Number' option is selected by default but deterministic ad In addition to your passphrase, you must remember these numbers: - + パスフレーズに加えて、これらの値を覚えておいてください: @@ -945,7 +945,7 @@ The 'Random Number' option is selected by default but deterministic ad Number of addresses to make based on your passphrase: - パスフレーズから生成されたアドレスの数 + パスフレーズから生成されたアドレスの数: @@ -1133,7 +1133,7 @@ The 'Random Number' option is selected by default but deterministic ad You are using TCP port ?. (This can be changed in the settings). - 使用中のポート ? (設定で変更できます) + 使用中のポート ? (設定で変更できます)。 From cfb1c079c557d7a1d4e046a1f4d5fccc8bf9fef9 Mon Sep 17 00:00:00 2001 From: goldbook Date: Sat, 8 Feb 2014 12:02:19 +0900 Subject: [PATCH 14/20] add language option --- src/bitmessageqt/settings.ui | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index 2af19613..f2195346 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -169,6 +169,12 @@ 简体中文 + + + + 日本語 + + Pirate English From fd6fd0719f16ebeeb7207d7aebe1d77087219e0f Mon Sep 17 00:00:00 2001 From: fyahfox Date: Sat, 8 Feb 2014 17:46:17 +0100 Subject: [PATCH 15/20] Update bitmessage_de.ts typo line 1296 --- src/translations/bitmessage_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/translations/bitmessage_de.ts b/src/translations/bitmessage_de.ts index 880c9e67..fbaaadb6 100644 --- a/src/translations/bitmessage_de.ts +++ b/src/translations/bitmessage_de.ts @@ -1293,7 +1293,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei You have made at least one connection to a peer using an outgoing connection but you have not yet received any incoming connections. Your firewall or home router probably isn't configured to forward incoming TCP connections to your computer. Bitmessage will work just fine but it would help the Bitmessage network if you allowed for incoming connections and will help you be a better-connected node. - Sie haben mindestes eine Verbindung mit einem Netzwerkteilnehmer über eine ausgehende Verbindung, aber Sie haben noch keine eingehende Verbindung. Ihre Firewall oder Router ist vermutlich nicht richtig konfiguriert um eingehende TCP-Verbindungen an Ihren Computer weiterzuleiten. Bittmessage wird gut funktionieren, jedoch helfen Sie dem Netzwerk, wenn Sie eingehende Verbindungen erlauben. Es hilft auch Ihnen schneller und mehr Verbindungen ins Netzwerk aufzubauen. + 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. From ff36037df9799d619e103c09dad1fe321659b276 Mon Sep 17 00:00:00 2001 From: fyahfox Date: Sat, 8 Feb 2014 18:40:02 +0100 Subject: [PATCH 16/20] Update bitmessage_de.ts typo --- src/translations/bitmessage_de.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/translations/bitmessage_de.ts b/src/translations/bitmessage_de.ts index fbaaadb6..1802cc5c 100644 --- a/src/translations/bitmessage_de.ts +++ b/src/translations/bitmessage_de.ts @@ -1537,12 +1537,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - Die "Schwierigkeit für kurze Nachrichten" trifft nur auf das senden kurzen Nachrichten zu. Verdoppelung des Wertes macht es fast doppelt so schwer kurze Nachrichten zu senden, aber hat keinen Effekt bei langen Nachrichten. + Die "Schwierigkeit für kurze Nachrichten" 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. The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work. - Die "Gesammtschwierigkeit" beeinflusst die absolute menge Arbeit die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit. + Die "Gesamtschwierigkeit" beeinflusst die absolute Menge Arbeit, die ein Sender verrichten muss. Verdoppelung dieses Wertes verdoppelt die Menge der Arbeit. @@ -1557,7 +1557,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Maximum acceptable total difficulty: - Maximale akzeptierte Gesammtschwierigkeit: + Maximale akzeptierte Gesamtschwierigkeit: @@ -1572,7 +1572,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Listen for incoming connections when using proxy - Auf eingehende Verdindungen warten, auch wenn eine Proxy-Server verwendet wird + Auf eingehende Verdindungen warten, auch wenn ein Proxy-Server verwendet wird @@ -1582,7 +1582,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei <html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to <span style=" font-style:italic;">test. </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p><p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html> - <html><head/><body><p>Bitmessage kann ein anderes Bitcoin basiertes Programm namens Namecoin nutzen um Adressen leserlicher zu machen. Zum Beispiel: Anstelle Ihrem Bekannten Ihre lange Bitmessage-Adresse vorzulesen, können Sie ihm einfach sagen, er soll eine Nachricht an <span style=" font-style:italic;">test </span>senden.</p><p> (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)</p><p>Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.</p></body></html> + <html><head/><body><p>Bitmessage kann ein anderes Bitcoin basiertes Programm namens Namecoin nutzen, um Adressen leserlicher zu machen. Zum Beispiel: Anstelle Ihrem Bekannten Ihre lange Bitmessage-Adresse vorzulesen, können Sie ihm einfach sagen, er soll eine Nachricht an <span style=" font-style:italic;">test </span>senden.</p><p> (Ihre Bitmessage-Adresse in Namecoin zu speichern ist noch sehr umständlich)</p><p>Bitmessage kann direkt namecoind verwenden, oder eine nmcontrol Instanz.</p></body></html> From 928d9501ccc3606361bef83e2779042de7f4ea3c Mon Sep 17 00:00:00 2001 From: fyahfox Date: Sat, 8 Feb 2014 18:41:33 +0100 Subject: [PATCH 17/20] Update bitmessage_de.ts --- src/translations/bitmessage_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/translations/bitmessage_de.ts b/src/translations/bitmessage_de.ts index 1802cc5c..d4d2ac3e 100644 --- a/src/translations/bitmessage_de.ts +++ b/src/translations/bitmessage_de.ts @@ -1537,7 +1537,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages. - Die "Schwierigkeit für kurze Nachrichten" trifft nur auf das Senden kurzer Nachrichten zu. Verdoppelung dieses Wertes macht es fast doppelt so schwer, kurze Nachrichten zu senden, aber hat keinen Effekt bei langen Nachrichten. + Die "Schwierigkeit für kurze Nachrichten" 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. From 272364ce7b78f4bdd3dedfc6b140eba1e3b7a3d6 Mon Sep 17 00:00:00 2001 From: fyahfox Date: Sun, 9 Feb 2014 14:22:28 +0100 Subject: [PATCH 18/20] Update bitmessage_de.ts added some translations typo --- src/translations/bitmessage_de.ts | 48 +++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/translations/bitmessage_de.ts b/src/translations/bitmessage_de.ts index d4d2ac3e..77b90908 100644 --- a/src/translations/bitmessage_de.ts +++ b/src/translations/bitmessage_de.ts @@ -5,17 +5,17 @@ Add new entry - Neuen Eintrag erstellen + Neuen Eintrag erstellen Label - + Name oder Bezeichnung Address - Adresse + Adresse @@ -153,7 +153,7 @@ Problem: The work demanded by the recipient is more difficult than you are willing to do. %1 - Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind zu berechnen. %1 + Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind, zu berechnen. %1 @@ -686,7 +686,7 @@ p, li { white-space: pre-wrap; } The Address book is useful for adding names or labels to other people's Bitmessage addresses so that you can recognize them more easily in your inbox. You can add entries here using the 'Add' button, or from your inbox by right-clicking on a message. - Das Adressbuch ist nützlich um die Bitmessage-Adressen anderer Personen Namen oder Beschreibungen zuzuordnen, so dass Sie sie einfacher im Posteingang erkennen können. Sie können Adressen über "Hinzufügen" eintragen, oder über einen Rechtsklick auf eine Nachricht im Posteingang. + 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 "Neuen Eintrag erstellen" hinzufügen, oder über einen Rechtsklick auf eine Nachricht im Posteingang. @@ -946,7 +946,7 @@ p, li { white-space: pre-wrap; } Set avatar... - + Avatar wählen... @@ -966,7 +966,7 @@ p, li { white-space: pre-wrap; } Inventory lookups per second: %1 - + Inventory lookups pro Sekunde: %1 @@ -981,12 +981,12 @@ p, li { white-space: pre-wrap; } Do you really want to remove this avatar? - + Wollen Sie diesen Avatar wirklich entfernen? You have already set an avatar for this address. Do you really want to overwrite it? - + Sie haben bereits einen Avatar für diese Adresse gewählt. Wollen Sie ihn wirklich überschreiben? @@ -1040,7 +1040,7 @@ p, li { white-space: pre-wrap; } Inventory lookups per second: 0 - + Inventory lookups pro Sekunde: 0 @@ -1130,7 +1130,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei (best if this is the first of many addresses you will create) - (zum generieren der erste Adresse empfohlen) + (Zum Generieren der ersten Adresse empfohlen) @@ -1145,7 +1145,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Address version number: 4 - Adress-Versionsnummer: 4 + Adress-Versionsnummer: 4 @@ -1275,7 +1275,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei As Bitmessage is a collaborative project, help can be found online in the Bitmessage Wiki: - Bei Bitmessage handelt es sich um ein kollaboratives Projekt, Hilfe finden Sie online in Bitmessage-Wiki: + Bitmessage ist ein kollaboratives Projekt. Hilfe finden Sie online im Bitmessage-Wiki: @@ -1336,7 +1336,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei <html><head/><body><p>A chan exists when a group of people share the same decryption keys. The keys and bitmessage address used by a chan are generated from a human-friendly word or phrase (the chan name). To send a message to everyone in the chan, send a normal person-to-person message to the chan address.</p><p>Chans are experimental and completely unmoderatable.</p></body></html> - <html><head/><body><p>Ein Chan existiert, wenn eine Gruppe von Leuten sich den gleichen Entschlüsselungscode teilen. Die Schlüssel und Bitmessage-Adressen werden basierend auf einem lesbaren Wort oder Satz generiert (Dem Chan-Namen). Um eine Nachricht an den Chan zu senden, senden Sie eine normale Person-zu-Person-Nachricht an die Chan-Adresse.</p><p>Chans sind experimentell and völlig unmoderierbar.</p><br></body></html> + <html><head/><body><p>Ein Chan existiert, wenn eine Gruppe von Leuten sich den gleichen Entschlüsselungscode teilen. Die Schlüssel und Bitmessage-Adressen werden basierend auf einem lesbaren Wort oder Satz generiert (dem Chan-Namen). Um eine Nachricht an den Chan zu senden, senden Sie eine normale Person-zu-Person-Nachricht an die Chan-Adresse.</p><p>Chans sind experimentell und völlig unmoderierbar.</p><br></body></html> @@ -1346,7 +1346,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei <html><head/><body><p>Enter a name for your chan. If you choose a sufficiently complex chan name (like a strong and unique passphrase) and none of your friends share it publicly then the chan will be secure and private. If you and someone else both create a chan with the same chan name then it is currently very likely that they will be the same chan.</p></body></html> - <html><head/><body><p>Geben Sie einen Namen für Ihren Chan ein. Wenn Sie einen ausreichend komplexen Chan-Namen wählen (Wie einen starkes und einzigartigen Kennwortsatz) und keiner Ihrer Freunde ihn öffentlich weitergibt, wird der Chan sicher und privat bleiben. Wenn eine andere Person einen Chan mit dem gleichen Namen erzeugt, werden diese zu einem Chan.</p><br></body></html> + <html><head/><body><p>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.</p><br></body></html> @@ -1369,7 +1369,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Number of addresses to make based on your passphrase: - Anzahl der Adressen die basierend auf diesem Kennwortsatz erzeugt werden sollen: + Anzahl der Adressen, die basierend auf diesem Kennwortsatz erzeugt werden sollen: @@ -1384,7 +1384,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Stream number: - Stream Nummer: + Stream-Nummer: @@ -1394,7 +1394,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Spend several minutes of extra computing time to make the address(es) 1 or 2 characters shorter - Verwenden Sie einige Minuten extra Rechenleistung um die Adresse(n) ein bis zwei Zeichen kürzer zu machen + Verwenden Sie einige Minuten extra Rechenleistung, um die Adresse(n) ein bis zwei Zeichen kürzer zu machen @@ -1404,12 +1404,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei If you have previously made deterministic addresses but lost them due to an accident (like hard drive failure), you can regenerate them here. If you used the random number generator to make your addresses then this form will be of no use to you. - Wenn Sie bereits deterministische Adressen erstellt haben, aber diese durch einen Unfall wie eine defekte Festplatte verloren haben, können Sie sie hier regenerieren. Wenn Sie den Zufallsgenerator verwendet haben um Ihre Adressen erstmals zu erstellen, kann dieses Formular Ihnen nicht helfen. + 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. Address version number: - + Adress-Versionsnummer: @@ -1427,7 +1427,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Start Bitmessage in the tray (don't show main window) - Bitmessage minimiert starten (Zeigt das Hauptfenster nicht an) + Bitmessage minimiert starten (zeigt das Hauptfenster nicht an) @@ -1442,12 +1442,12 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei Run in Portable Mode - In portablem Modus arbeiten + Im portablen Modus arbeiten In Portable Mode, messages and config files are stored in the same directory as the program rather than the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive. - Im portablen Modus werden Nachrichten und Konfigurationen im gleichen Ordner abgelegt, wie sich das Programm selbst befindet anstelle im normalen Anwendungsdaten-Ordner. Das macht es möglich Bitmessage auf einem USB-Stick zu betreiben. + 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. @@ -1522,7 +1522,7 @@ Die Zufallszahlen-Option ist standard, jedoch haben deterministische Adressen ei When someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1. - Wenn jemand Ihnen eine Nachricht schickt, muss der absendende Computer erst einige Arbeit verrichten. Die Schwierigkeit dieser Arbeit ist standardmäßig 1. Sie können diesen Wert für alle neuen Adressen, die Sie generieren hier ändern. Es gibt eine Ausnahme: Wenn Sie einen Freund oder Bekannten in Ihr Adressbuch übernehmen, wird Bitmessage ihn mit der nächsten Nachricht automatisch informieren, dass er nur noch die minimale Arbeit verrichten muss: Schwierigkeit 1. + 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. From 12d131f7f2f7c6e0c65a1d0a5f071eafe119d9ae Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Wed, 30 Apr 2014 12:44:16 -0400 Subject: [PATCH 19/20] Fixed minor label problem during init --- src/bitmessageqt/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 7125cb60..c20d955b 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -771,7 +771,7 @@ class MyForm(QtGui.QMainWindow): if shared.config.has_section(fromAddress): fromLabel = shared.config.get(fromAddress, 'label') - if fromLabel == '': + else: fromLabel = fromAddress toLabel = '' From 22934441dc93b05058aa8d9c67fd2235d19c6400 Mon Sep 17 00:00:00 2001 From: Jonathan Warren Date: Wed, 30 Apr 2014 15:39:25 -0400 Subject: [PATCH 20/20] Fix #662 - 'PyBitmessage does not wait for verack' --- src/class_receiveDataThread.py | 125 +++++++++++++++++++-------------- src/class_sendDataThread.py | 65 ++++++----------- src/defaultKnownNodes.py | 22 +++--- 3 files changed, 105 insertions(+), 107 deletions(-) diff --git a/src/class_receiveDataThread.py b/src/class_receiveDataThread.py index 127f18a4..62a6a99d 100644 --- a/src/class_receiveDataThread.py +++ b/src/class_receiveDataThread.py @@ -147,9 +147,9 @@ class receiveDataThread(threading.Thread): with shared.printLock: 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]) - elif remoteCommand == 'verack\x00\x00\x00\x00\x00\x00': + elif remoteCommand == 'verack\x00\x00\x00\x00\x00\x00' and not self.connectionIsOrWasFullyEstablished: self.recverack() elif remoteCommand == 'addr\x00\x00\x00\x00\x00\x00\x00\x00' and self.connectionIsOrWasFullyEstablished: self.recaddr(self.data[24:self.payloadLength + 24]) @@ -237,7 +237,12 @@ class receiveDataThread(threading.Thread): self.connectionFullyEstablished() def connectionFullyEstablished(self): + if self.connectionIsOrWasFullyEstablished: + # there is no reason to run this function a second time + return 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: shared.clientHasReceivedIncomingConnections = True shared.UISignalQueue.put(('setStatusIcon', 'green')) @@ -301,8 +306,9 @@ class receiveDataThread(threading.Thread): self.sendinvMessageToJustThisOnePeer( numberOfObjectsInInvMessage, payload) - # Self explanatory. Notice that there is also a broadcastinv function for - # broadcasting invs to everyone in our stream. + # Used to send a big inv message when the connection with a node is + # first fully established. Notice that there is also a broadcastinv + # function for broadcasting invs to everyone in our stream. def sendinvMessageToJustThisOnePeer(self, numberOfObjects, payload): payload = encodeVarint(numberOfObjects) + payload headerData = '\xe9\xbe\xb4\xd9' # magic bits, slighly different from Bitcoin's magic bits. @@ -665,7 +671,10 @@ class receiveDataThread(threading.Thread): 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): addrsInMyStream = {} addrsInChildStreamLeft = {} @@ -750,58 +759,68 @@ class receiveDataThread(threading.Thread): if len(data) < 83: # This version message is unreasonably short. Forget it. return - elif not self.verackSent: - self.remoteProtocolVersion, = unpack('>L', data[:4]) - if self.remoteProtocolVersion <= 1: - shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) - with shared.printLock: - print 'Closing connection to old protocol version 1 node: ', self.peer - return - # print 'remoteProtocolVersion', self.remoteProtocolVersion - self.myExternalIP = socket.inet_ntoa(data[40:44]) - # print 'myExternalIP', self.myExternalIP - self.remoteNodeIncomingPort, = unpack('>H', data[70:72]) - # print 'remoteNodeIncomingPort', self.remoteNodeIncomingPort - useragentLength, lengthOfUseragentVarint = decodeVarint( - data[80:84]) - readPosition = 80 + lengthOfUseragentVarint - useragent = data[readPosition:readPosition + useragentLength] - readPosition += useragentLength - numberOfStreamsInVersionMessage, lengthOfNumberOfStreamsInVersionMessage = decodeVarint( - data[readPosition:]) - readPosition += lengthOfNumberOfStreamsInVersionMessage - self.streamNumber, lengthOfRemoteStreamNumber = decodeVarint( - data[readPosition:]) + 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]) + if self.remoteProtocolVersion <= 1: + shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) with shared.printLock: - print 'Remote node useragent:', useragent, ' stream number:', self.streamNumber + print 'Closing connection to old protocol version 1 node: ', self.peer + return + # print 'remoteProtocolVersion', self.remoteProtocolVersion + self.myExternalIP = socket.inet_ntoa(data[40:44]) + # print 'myExternalIP', self.myExternalIP + self.remoteNodeIncomingPort, = unpack('>H', data[70:72]) + # print 'remoteNodeIncomingPort', self.remoteNodeIncomingPort + useragentLength, lengthOfUseragentVarint = decodeVarint( + data[80:84]) + readPosition = 80 + lengthOfUseragentVarint + useragent = data[readPosition:readPosition + useragentLength] + readPosition += useragentLength + numberOfStreamsInVersionMessage, lengthOfNumberOfStreamsInVersionMessage = decodeVarint( + data[readPosition:]) + readPosition += lengthOfNumberOfStreamsInVersionMessage + self.streamNumber, lengthOfRemoteStreamNumber = decodeVarint( + data[readPosition:]) + with shared.printLock: + print 'Remote node useragent:', useragent, ' stream number:', self.streamNumber - if self.streamNumber != 1: - shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) - with shared.printLock: - print 'Closed connection to', self.peer, 'because they are interested in stream', self.streamNumber, '.' - return - shared.connectedHostsList[ - self.peer.host] = 1 # We use this data structure to not only keep track of what hosts we are connected to so that we don't try to connect to them again, but also to list the connections count on the Network Status tab. - # If this was an incoming connection, then the sendData thread - # doesn't know the stream. We have to set it. - if not self.initiatedConnection: - shared.broadcastToSendDataQueues(( - 0, 'setStreamNumber', (self.peer, self.streamNumber))) - if data[72:80] == shared.eightBytesOfRandomDataUsedToDetectConnectionsToSelf: - shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) - with shared.printLock: - print 'Closing connection to myself: ', self.peer - return - self.sendDataThreadQueue.put((0, 'setRemoteProtocolVersion', self.remoteProtocolVersion)) + if self.streamNumber != 1: + shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) + with shared.printLock: + print 'Closed connection to', self.peer, 'because they are interested in stream', self.streamNumber, '.' + return + shared.connectedHostsList[ + self.peer.host] = 1 # We use this data structure to not only keep track of what hosts we are connected to so that we don't try to connect to them again, but also to list the connections count on the Network Status tab. + # If this was an incoming connection, then the sendData thread + # doesn't know the stream. We have to set it. + if not self.initiatedConnection: + self.sendDataThreadQueue.put((0, 'setStreamNumber', self.streamNumber)) + if data[72:80] == shared.eightBytesOfRandomDataUsedToDetectConnectionsToSelf: + shared.broadcastToSendDataQueues((0, 'shutdown', self.peer)) + with shared.printLock: + print 'Closing connection to myself: ', self.peer + 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)) - shared.knownNodesLock.acquire() - shared.knownNodes[self.streamNumber][shared.Peer(self.peer.host, self.remoteNodeIncomingPort)] = int(time.time()) - shared.needToWriteKnownNodesToDisk = True - shared.knownNodesLock.release() + shared.knownNodesLock.acquire() + shared.knownNodes[self.streamNumber][shared.Peer(self.peer.host, self.remoteNodeIncomingPort)] = int(time.time()) + shared.needToWriteKnownNodesToDisk = True + shared.knownNodesLock.release() - self.sendverack() - if self.initiatedConnection == False: - self.sendversion() + self.sendverack() + if self.initiatedConnection == False: + self.sendversion() # Sends a version message def sendversion(self): diff --git a/src/class_sendDataThread.py b/src/class_sendDataThread.py index 7cb20c59..1d67e97f 100644 --- a/src/class_sendDataThread.py +++ b/src/class_sendDataThread.py @@ -25,6 +25,7 @@ class sendDataThread(threading.Thread): self.data = '' self.objectHashHolderInstance = objectHashHolder(self.sendDataThreadQueue) self.objectHashHolderInstance.start() + self.connectionIsOrWasFullyEstablished = False def setup( @@ -71,16 +72,6 @@ class sendDataThread(threading.Thread): if data == self.peer or data == 'all': with shared.printLock: 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 # When you receive an incoming connection, a sendDataThread is # 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 # streamNumber of this send data thread here: elif command == 'setStreamNumber': - peerInMessage, specifiedStreamNumber = data - if peerInMessage == self.peer: - with shared.printLock: - print 'setting the stream number in the sendData thread (ID:', id(self), ') to', specifiedStreamNumber - - self.streamNumber = specifiedStreamNumber + self.streamNumber = data + with shared.printLock: + print 'setting the stream number in the sendData thread (ID:', id(self), ') to', self.streamNumber elif command == 'setRemoteProtocolVersion': specifiedRemoteProtocolVersion = data with shared.printLock: @@ -103,6 +91,9 @@ class sendDataThread(threading.Thread): elif command == 'advertisepeer': self.objectHashHolderInstance.holdPeer(data) 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( data) payload = '' @@ -127,17 +118,13 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: 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 elif command == 'advertiseobject': self.objectHashHolderInstance.holdHash(data) 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 = '' for hash in data: if hash not in self.someObjectsOfWhichThisRemoteNodeIsAlreadyAware: @@ -153,13 +140,6 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: 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 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. @@ -174,29 +154,28 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: 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 elif command == 'sendRawData': try: self.sock.sendall(data) self.lastTimeISentData = int(time.time()) except: - try: - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - except: - pass - shared.sendDataQueues.remove(self.sendDataThreadQueue) print 'Sending of data to', self.peer, 'failed. sendDataThread thread', self, 'ending now.' break + elif command == 'connectionIsOrWasFullyEstablished': + with shared.printLock: + print 'sendDataThread (associated with', self.peer, ') ID:', id(self), 'setting connectionIsOrWasFullyEstablished to True.' + self.connectionIsOrWasFullyEstablished = True else: with shared.printLock: print 'sendDataThread ID:', id(self), 'ignoring command', command, 'because the thread is not in stream', deststream + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass + shared.sendDataQueues.remove(self.sendDataThreadQueue) + with shared.printLock: + print 'Number of queues remaining in sendDataQueues:', len(shared.sendDataQueues) self.objectHashHolderInstance.close() diff --git a/src/defaultKnownNodes.py b/src/defaultKnownNodes.py index 201e913d..bf98c351 100644 --- a/src/defaultKnownNodes.py +++ b/src/defaultKnownNodes.py @@ -11,17 +11,17 @@ def createDefaultKnownNodes(appdata): ############## Stream 1 ################ stream1 = {} - stream1[shared.Peer('176.31.246.114', 8444)] = int(time.time()) - stream1[shared.Peer('109.229.197.133', 8444)] = int(time.time()) - stream1[shared.Peer('174.3.101.111', 8444)] = int(time.time()) - stream1[shared.Peer('90.188.238.79', 7829)] = int(time.time()) - stream1[shared.Peer('184.75.69.2', 8444)] = int(time.time()) - stream1[shared.Peer('60.225.209.243', 8444)] = int(time.time()) - stream1[shared.Peer('5.145.140.218', 8444)] = int(time.time()) - stream1[shared.Peer('5.19.255.216', 8444)] = int(time.time()) - stream1[shared.Peer('193.159.162.189', 8444)] = int(time.time()) - stream1[shared.Peer('86.26.15.171', 8444)] = int(time.time()) - + #stream1[shared.Peer('2604:2000:1380:9f:82e:148b:2746:d0c7', 8080)] = int(time.time()) + stream1[shared.Peer('68.33.0.104', 8444)] = int(time.time()) + stream1[shared.Peer('97.77.34.35', 8444)] = int(time.time()) + stream1[shared.Peer('71.232.195.131', 8444)] = int(time.time()) + stream1[shared.Peer('192.241.231.39', 8444)] = int(time.time()) + stream1[shared.Peer('75.66.0.116', 8444)] = int(time.time()) + stream1[shared.Peer('182.169.23.102', 8444)] = int(time.time()) + stream1[shared.Peer('75.95.134.9', 8444)] = int(time.time()) + stream1[shared.Peer('46.236.100.108', 48444)] = int(time.time()) + stream1[shared.Peer('66.108.53.42', 8080)] = int(time.time()) + ############# Stream 2 ################# stream2 = {} # None yet