electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 09714636efe52293177b6a1bdaae228906f355bc
parent 5f733a43122419ccc73684639641f49d0c878774
Author: thomasv <thomasv@gitorious>
Date:   Fri, 18 May 2012 15:28:55 +0200

version 0.50: localisation using gettext

Diffstat:
MMANIFEST.in | 2++
Aapp.fil | 2++
Mlib/gui_qt.py | 162++++++++++++++++++++++++++++++++++++++++----------------------------------------
Alib/i18n.py | 25+++++++++++++++++++++++++
Mlib/version.py | 2+-
Alocale/de/LC_MESSAGES/electrum.mo | 0
Alocale/electrum_de.po | 321+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alocale/electrum_fr.po | 321+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alocale/fr/LC_MESSAGES/electrum.mo | 0
Alocale/messages.pot | 321+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amki18n.py | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Msetup.py | 15++++++++++++++-
12 files changed, 1140 insertions(+), 83 deletions(-)

diff --git a/MANIFEST.in b/MANIFEST.in @@ -4,6 +4,8 @@ include electrum recursive-include lib *.py recursive-include ecdsa *.py recursive-include aes *.py +include app.fil include icons.qrc include remote.php recursive-include icons * +recursive-include i18n/locale * diff --git a/app.fil b/app.fil @@ -0,0 +1,2 @@ +lib/gui_qt.py +lib/gui.py diff --git a/lib/gui_qt.py b/lib/gui_qt.py @@ -17,6 +17,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import sys, time, datetime, re +from i18n import _ try: import PyQt4 @@ -25,7 +26,6 @@ except: print "on Linux systems, you may try 'sudo apt-get install python-qt4'" sys.exit(1) - from PyQt4.QtGui import * from PyQt4.QtCore import * import PyQt4.QtCore as QtCore @@ -156,12 +156,12 @@ class ElectrumWindow(QMainWindow): self.funds_error = False self.tabs = tabs = QTabWidget(self) - tabs.addTab(self.create_history_tab(), 'History') + tabs.addTab(self.create_history_tab(), _('History') ) if self.wallet.seed: - tabs.addTab(self.create_send_tab(), 'Send') - tabs.addTab(self.create_receive_tab(), 'Receive') - tabs.addTab(self.create_contacts_tab(),'Contacts') - tabs.addTab(self.create_wall_tab(), 'Wall') + tabs.addTab(self.create_send_tab(), _('Send') ) + tabs.addTab(self.create_receive_tab(), _('Receive') ) + tabs.addTab(self.create_contacts_tab(), _('Contacts') ) + tabs.addTab(self.create_wall_tab(), _('Wall') ) tabs.setMinimumSize(600, 400) tabs.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setCentralWidget(tabs) @@ -208,25 +208,25 @@ class ElectrumWindow(QMainWindow): def update_wallet(self): if self.wallet.interface and self.wallet.interface.is_connected: if self.wallet.blocks == -1: - text = "Connecting..." + text = _( "Connecting..." ) icon = QIcon(":icons/status_disconnected.png") elif self.wallet.blocks == 0: - text = "Server not ready" + text = _( "Server not ready" ) icon = QIcon(":icons/status_disconnected.png") elif not self.wallet.up_to_date: - text = "Synchronizing..." + text = _( "Synchronizing..." ) icon = QIcon(":icons/status_waiting.png") else: c, u = self.wallet.get_balance() - text = "Balance: %s "%( format_satoshis(c,False,self.wallet.num_zeros) ) + text = _( "Balance" ) + ": %s "%( format_satoshis(c,False,self.wallet.num_zeros) ) if u: text += "[%s unconfirmed]"%( format_satoshis(u,True,self.wallet.num_zeros).strip() ) icon = QIcon(":icons/status_connected.png") else: - text = "Not connected" + text = _( "Not connected" ) icon = QIcon(":icons/status_disconnected.png") if self.funds_error: - text = "Not enough funds" + text = _( "Not enough funds" ) self.statusBar().showMessage(text) self.status_button.setIcon( icon ) @@ -247,7 +247,7 @@ class ElectrumWindow(QMainWindow): w.setColumnWidth(2, 350) w.setColumnWidth(3, 140) w.setColumnWidth(4, 140) - w.setHeaderLabels( [ '', 'Date', 'Description', 'Amount', 'Balance'] ) + w.setHeaderLabels( [ '', _( 'Date' ), _( 'Description' ) , _('Amount'), _('Balance')] ) self.connect(w, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.tx_details) self.connect(w, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), self.tx_label_clicked) self.connect(w, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), self.tx_label_changed) @@ -264,7 +264,7 @@ class ElectrumWindow(QMainWindow): conf = 0 time_str = 'pending' - tx_details = "Transaction Details:\n\n" \ + tx_details = _("Transaction Details") +"\n\n" \ + "Transaction ID:\n" + tx_hash + "\n\n" \ + "Status: %d confirmations\n\n"%conf \ + "Date: %s\n\n"%time_str \ @@ -368,25 +368,25 @@ class ElectrumWindow(QMainWindow): grid.setColumnStretch(4,1) self.payto_e = QLineEdit() - grid.addWidget(QLabel('Pay to'), 1, 0) + grid.addWidget(QLabel(_('Pay to')), 1, 0) grid.addWidget(self.payto_e, 1, 1, 1, 3) self.message_e = QLineEdit() - grid.addWidget(QLabel('Description'), 2, 0) + grid.addWidget(QLabel(_('Description')), 2, 0) grid.addWidget(self.message_e, 2, 1, 1, 3) self.amount_e = QLineEdit() - grid.addWidget(QLabel('Amount'), 3, 0) + grid.addWidget(QLabel(_('Amount')), 3, 0) grid.addWidget(self.amount_e, 3, 1, 1, 2) self.fee_e = QLineEdit() - grid.addWidget(QLabel('Fee'), 4, 0) + grid.addWidget(QLabel(_('Fee')), 4, 0) grid.addWidget(self.fee_e, 4, 1, 1, 2) - b = EnterButton("Send", self.do_send) + b = EnterButton(_("Send"), self.do_send) grid.addWidget(b, 5, 1) - b = EnterButton("Clear",self.do_clear) + b = EnterButton(_("Clear"),self.do_clear) grid.addWidget(b, 5, 2) self.payto_sig = QLabel('') @@ -445,18 +445,18 @@ class ElectrumWindow(QMainWindow): to_address = r if not self.wallet.is_valid(to_address): - QMessageBox.warning(self, 'Error', 'Invalid Bitcoin Address:\n'+to_address, 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid Bitcoin Address') + ':\n' + to_address, _('OK')) return try: amount = int( Decimal( unicode( self.amount_e.text())) * 100000000 ) except: - QMessageBox.warning(self, 'Error', 'Invalid Amount', 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid Amount'), _('OK')) return try: fee = int( Decimal( unicode( self.fee_e.text())) * 100000000 ) except: - QMessageBox.warning(self, 'Error', 'Invalid Fee', 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid Fee'), _('OK')) return if self.wallet.use_encryption: @@ -474,11 +474,11 @@ class ElectrumWindow(QMainWindow): status, msg = self.wallet.sendtx( tx ) if status: - QMessageBox.information(self, '', 'Payment sent.\n'+msg, 'OK') + QMessageBox.information(self, '', _('Payment sent.')+'\n'+msg, _('OK')) self.do_clear() self.update_contacts_tab() else: - QMessageBox.warning(self, 'Error', msg, 'OK') + QMessageBox.warning(self, _('Error'), msg, _('OK')) def set_url(self, url): @@ -555,21 +555,21 @@ class ElectrumWindow(QMainWindow): l = self.contacts_list hbox = self.contacts_buttons_hbox - hbox.addWidget(EnterButton("QR",lambda: self.show_address_qrcode(self.get_current_addr(False)))) - hbox.addWidget(EnterButton("Copy to Clipboard", lambda: self.app.clipboard().setText(self.get_current_addr(False)))) + hbox.addWidget(EnterButton(_("QR"),lambda: self.show_address_qrcode(self.get_current_addr(False)))) + hbox.addWidget(EnterButton(_("Copy to Clipboard"), lambda: self.app.clipboard().setText(self.get_current_addr(False)))) def payto(): addr = self.get_current_addr(False) if not addr:return self.tabs.setCurrentIndex(1) self.payto_e.setText(addr) self.amount_e.setFocus() - hbox.addWidget(EnterButton('Pay to', lambda: payto())) - hbox.addWidget(EnterButton("New", self.newaddress_dialog)) + hbox.addWidget(EnterButton(_('Pay to'), lambda: payto())) + hbox.addWidget(EnterButton(_("New"), self.newaddress_dialog)) hbox.addStretch(1) def update_receive_buttons(self): addr = self.get_current_addr(True) - t = "Unfreeze" if addr in self.wallet.frozen_addresses else "Freeze" + t = _("Unfreeze") if addr in self.wallet.frozen_addresses else _("Freeze") self.freezeButton.setText(t) @@ -580,7 +580,7 @@ class ElectrumWindow(QMainWindow): l.setColumnWidth(1, 330) l.setColumnWidth(2, 100) l.setColumnWidth(3, 10) - l.setHeaderLabels( ['Address', 'Label','Balance','Tx']) + l.setHeaderLabels( [_('Address'), _('Label'), _('Balance'), _('Tx')] ) w = QWidget() vbox = QVBoxLayout() @@ -614,7 +614,7 @@ class ElectrumWindow(QMainWindow): l.setColumnWidth(0, 350) l.setColumnWidth(1, 330) l.setColumnWidth(2, 20) - l.setHeaderLabels( ['Address', 'Label','Tx']) + l.setHeaderLabels( [_('Address'), _('Label'), _('Tx')] ) w = QWidget() vbox = QVBoxLayout() @@ -708,7 +708,7 @@ class ElectrumWindow(QMainWindow): self.setStatusBar(sb) def newaddress_dialog(self): - text, ok = QInputDialog.getText(self, 'New Contact', 'Address:') + text, ok = QInputDialog.getText(self, _('New Contact'), _('Address') + ':') address = unicode(text) if ok: if self.wallet.is_valid(address): @@ -716,14 +716,14 @@ class ElectrumWindow(QMainWindow): self.wallet.save() self.update_contacts_tab() else: - QMessageBox.warning(self, 'Error', 'Invalid Address', 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid Address'), _('OK')) @staticmethod def show_seed_dialog(wallet, parent=None): from electrum import mnemonic if not wallet.seed: - QMessageBox.information(parent, 'Message', 'No seed', 'OK') + QMessageBox.information(parent, _('Message'), _('No seed'), _('OK')) return if wallet.use_encryption: @@ -735,17 +735,17 @@ class ElectrumWindow(QMainWindow): try: seed = wallet.pw_decode( wallet.seed, password) except: - QMessageBox.warning(parent, 'Error', 'Invalid Password', 'OK') + QMessageBox.warning(parent, _('Error'), _('Invalid Password'), _('OK')) return - msg = "Your wallet generation seed is:\n\n" + seed \ - + "\n\nPlease keep it in a safe place; if you lose it,\nyou will not be able to restore your wallet.\n\n" \ - + "Equivalently, your wallet seed can be stored and\nrecovered with the following mnemonic code:\n\n\"" \ + msg = _("Your wallet generation seed is") + ":\n\n" + seed + "\n\n"\ + + _("Please keep it in a safe place; if you lose it, you will not be able to restore your wallet.") + "\n\n" \ + + _("Equivalently, your wallet seed can be stored and recovered with the following mnemonic code") + ":\n\n\"" \ + ' '.join(mnemonic.mn_encode(seed)) + "\"\n\n\n" d = QDialog(None) d.setModal(1) - d.setWindowTitle("Seed") + d.setWindowTitle(_("Seed")) d.setMinimumSize(400, 270) vbox = QVBoxLayout() @@ -768,14 +768,14 @@ class ElectrumWindow(QMainWindow): else: app = QApplication - b = QPushButton("Copy to Clipboard") + b = QPushButton(_("Copy to Clipboard")) b.clicked.connect(lambda: app.clipboard().setText(seed + ' "' + ' '.join(mnemonic.mn_encode(seed))+'"')) hbox.addWidget(b) - b = QPushButton("View as QR Code") + b = QPushButton(_("View as QR Code")) b.clicked.connect(lambda: ElectrumWindow.show_seed_qrcode(seed)) hbox.addWidget(b) - b = QPushButton("OK") + b = QPushButton(_("OK")) b.clicked.connect(d.accept) hbox.addWidget(b) vbox.addLayout(hbox) @@ -787,13 +787,13 @@ class ElectrumWindow(QMainWindow): if not seed: return d = QDialog(None) d.setModal(1) - d.setWindowTitle("Seed") + d.setWindowTitle(_("Seed")) d.setMinimumSize(270, 300) vbox = QVBoxLayout() vbox.addWidget(QRCodeWidget(seed)) hbox = QHBoxLayout() hbox.addStretch(1) - b = QPushButton("OK") + b = QPushButton(_("OK")) hbox.addWidget(b) b.clicked.connect(d.accept) @@ -813,7 +813,7 @@ class ElectrumWindow(QMainWindow): hbox = QHBoxLayout() amount_e = QLineEdit() - hbox.addWidget(QLabel('Amount')) + hbox.addWidget(QLabel(_('Amount'))) hbox.addWidget(amount_e) vbox.addLayout(hbox) @@ -835,16 +835,16 @@ class ElectrumWindow(QMainWindow): def do_save(): from electrum import bmp bmp.save_qrcode(qrw.qr, "qrcode.bmp") - self.show_message("QR code saved to file 'qrcode.bmp'") + self.show_message(_("QR code saved to file") + " 'qrcode.bmp'") amount_e.textChanged.connect( amount_changed ) hbox = QHBoxLayout() hbox.addStretch(1) - b = QPushButton("Save") + b = QPushButton(_("Save")) b.clicked.connect(do_save) hbox.addWidget(b) - b = QPushButton("Close") + b = QPushButton(_("Close")) hbox.addWidget(b) b.clicked.connect(d.accept) @@ -853,10 +853,10 @@ class ElectrumWindow(QMainWindow): d.exec_() def question(self, msg): - return QMessageBox.question(self, 'Message', msg, QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes + return QMessageBox.question(self, _('Message'), msg, QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes def show_message(self, msg): - QMessageBox.information(self, 'Message', msg, 'OK') + QMessageBox.information(self, _('Message'), msg, _('OK')) def password_dialog(self ): d = QDialog(self) @@ -866,12 +866,12 @@ class ElectrumWindow(QMainWindow): pw.setEchoMode(2) vbox = QVBoxLayout() - msg = 'Please enter your password' + msg = _('Please enter your password') vbox.addWidget(QLabel(msg)) grid = QGridLayout() grid.setSpacing(8) - grid.addWidget(QLabel('Password'), 1, 0) + grid.addWidget(QLabel(_('Password')), 1, 0) grid.addWidget(pw, 1, 1) vbox.addLayout(grid) @@ -885,7 +885,7 @@ class ElectrumWindow(QMainWindow): def change_password_dialog( wallet, parent=None ): if not wallet.seed: - QMessageBox.information(parent, 'Message', 'No seed', 'OK') + QMessageBox.information(parent, _('Error'), _('No seed'), _('OK')) return d = QDialog(parent) @@ -900,22 +900,22 @@ class ElectrumWindow(QMainWindow): vbox = QVBoxLayout() if parent: - msg = 'Your wallet is encrypted. Use this dialog to change your password.\nTo disable wallet encryption, enter an empty new password.' if wallet.use_encryption else 'Your wallet keys are not encrypted' + msg = (_('Your wallet is encrypted. Use this dialog to change your password.')+'\n'+_('To disable wallet encryption, enter an empty new password.')) if wallet.use_encryption else _('Your wallet keys are not encrypted') else: - msg = "Please choose a password to encrypt your wallet keys.\nLeave these fields empty if you want to disable encryption." + msg = _("Please choose a password to encrypt your wallet keys.")+'\n'+_("Leave these fields empty if you want to disable encryption.") vbox.addWidget(QLabel(msg)) grid = QGridLayout() grid.setSpacing(8) if wallet.use_encryption: - grid.addWidget(QLabel('Password'), 1, 0) + grid.addWidget(QLabel(_('Password')), 1, 0) grid.addWidget(pw, 1, 1) - grid.addWidget(QLabel('New Password'), 2, 0) + grid.addWidget(QLabel(_('New Password')), 2, 0) grid.addWidget(new_pw, 2, 1) - grid.addWidget(QLabel('Confirm Password'), 3, 0) + grid.addWidget(QLabel(_('Confirm Password')), 3, 0) grid.addWidget(conf_pw, 3, 1) vbox.addLayout(grid) @@ -931,11 +931,11 @@ class ElectrumWindow(QMainWindow): try: seed = wallet.pw_decode( wallet.seed, password) except: - QMessageBox.warning(parent, 'Error', 'Incorrect Password', 'OK') + QMessageBox.warning(parent, _('Error'), _('Incorrect Password'), _('OK')) return if new_password != new_password2: - QMessageBox.warning(parent, 'Error', 'Passwords do not match', 'OK') + QMessageBox.warning(parent, _('Error'), _('Passwords do not match'), _('OK')) return wallet.update_password(seed, password, new_password) @@ -946,19 +946,19 @@ class ElectrumWindow(QMainWindow): d.setModal(1) vbox = QVBoxLayout() - msg = "Please enter your wallet seed or the corresponding mnemonic list of words, and the gap limit of your wallet." + msg = _("Please enter your wallet seed or the corresponding mnemonic list of words, and the gap limit of your wallet.") vbox.addWidget(QLabel(msg)) grid = QGridLayout() grid.setSpacing(8) seed_e = QLineEdit() - grid.addWidget(QLabel('Seed or mnemonic'), 1, 0) + grid.addWidget(QLabel(_('Seed or mnemonic')), 1, 0) grid.addWidget(seed_e, 1, 1) gap_e = QLineEdit() gap_e.setText("5") - grid.addWidget(QLabel('Gap limit'), 2, 0) + grid.addWidget(QLabel(_('Gap limit')), 2, 0) grid.addWidget(gap_e, 2, 1) gap_e.textChanged.connect(lambda: numbify(gap_e,True)) vbox.addLayout(grid) @@ -971,7 +971,7 @@ class ElectrumWindow(QMainWindow): try: gap = int(unicode(gap_e.text())) except: - QMessageBox.warning(None, 'Error', 'error', 'OK') + QMessageBox.warning(None, _('Error'), 'error', 'OK') sys.exit(0) try: @@ -983,10 +983,10 @@ class ElectrumWindow(QMainWindow): try: seed = mnemonic.mn_decode( seed.split(' ') ) except: - QMessageBox.warning(None, 'Error', 'I cannot decode this', 'OK') + QMessageBox.warning(None, _('Error'), _('I cannot decode this'), _('OK')) sys.exit(0) if not seed: - QMessageBox.warning(None, 'Error', 'no seed', 'OK') + QMessageBox.warning(None, _('Error'), _('No seed'), 'OK') sys.exit(0) wallet.seed = str(seed) @@ -1001,7 +1001,7 @@ class ElectrumWindow(QMainWindow): vbox = QVBoxLayout() - msg = 'Here are the settings of your wallet.' + msg = _('Here are the settings of your wallet.') vbox.addWidget(QLabel(msg)) grid = QGridLayout() @@ -1010,13 +1010,13 @@ class ElectrumWindow(QMainWindow): fee_e = QLineEdit() fee_e.setText("%s"% str( Decimal( self.wallet.fee)/100000000 ) ) - grid.addWidget(QLabel('Fee per tx. input'), 2, 0) + grid.addWidget(QLabel(_('Fee per tx. input')), 2, 0) grid.addWidget(fee_e, 2, 1) fee_e.textChanged.connect(lambda: numbify(fee_e,False)) nz_e = QLineEdit() nz_e.setText("%d"% self.wallet.num_zeros) - grid.addWidget(QLabel('Zeros displayed after decimal point'), 3, 0) + grid.addWidget(QLabel(_('Zeros displayed after decimal point')), 3, 0) grid.addWidget(nz_e, 3, 1) nz_e.textChanged.connect(lambda: numbify(nz_e,True)) @@ -1029,7 +1029,7 @@ class ElectrumWindow(QMainWindow): try: fee = int( 100000000 * Decimal(fee) ) except: - QMessageBox.warning(self, 'Error', 'Invalid value:%s'%fee, 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid value') +': %s'%fee, _('OK')) return if self.wallet.fee != fee: @@ -1041,7 +1041,7 @@ class ElectrumWindow(QMainWindow): nz = int( nz ) if nz>8: nz=8 except: - QMessageBox.warning(self, 'Error', 'Invalid value:%s'%nz, 'OK') + QMessageBox.warning(self, _('Error'), _('Invalid value')+':%s'%nz, _('OK')) return if self.wallet.num_zeros != nz: @@ -1055,13 +1055,13 @@ class ElectrumWindow(QMainWindow): interface = wallet.interface if parent: if interface.is_connected: - status = "Connected to %s:%d\n%d blocks"%(interface.host, interface.port, wallet.blocks) + status = _("Connected to")+" %s:%d\n%d blocks"%(interface.host, interface.port, wallet.blocks) else: - status = "Not connected" + status = _("Not connected") server = wallet.server else: import random - status = "Please choose a server." + status = _("Please choose a server.") server = random.choice( DEFAULT_SERVERS ) if not wallet.interface.servers: @@ -1133,16 +1133,16 @@ class ElectrumWindow(QMainWindow): set_button(current_line()[2]) - hbox.addWidget(QLabel('Protocol:')) + hbox.addWidget(QLabel(_('Protocol:'))) hbox.addWidget(radio1) hbox.addWidget(radio2) vbox.addLayout(hbox) if wallet.interface.servers: - label = 'Active Servers' + label = _('Active Servers') else: - label = 'Default Servers' + label = _('Default Servers') servers_list_widget = QTreeWidget(parent) servers_list_widget.setHeaderLabels( [ label ] ) @@ -1173,7 +1173,7 @@ class ElectrumWindow(QMainWindow): try: wallet.set_server(server) except: - QMessageBox.information(None, 'Error', 'error', 'OK') + QMessageBox.information(None, _('Error'), 'error', _('OK')) if parent == None: sys.exit(1) else: @@ -1216,7 +1216,7 @@ class ElectrumGui(): def restore_or_create(self): - msg = "Wallet file not found.\nDo you want to create a new wallet,\n or to restore an existing one?" + msg = _("Wallet file not found.")+"\n"+_("Do you want to create a new wallet, or to restore an existing one?") r = QMessageBox.question(None, 'Message', msg, 'create', 'restore', 'cancel', 0, 2) if r==2: return False @@ -1249,7 +1249,7 @@ class ElectrumGui(): print "recovery successful" wallet.save() else: - QMessageBox.information(None, 'Message', "No transactions found for this seed", 'OK') + QMessageBox.information(None, _('Error'), _("No transactions found for this seed"), _('OK')) wallet.save() return True diff --git a/lib/i18n.py b/lib/i18n.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# +# Electrum - lightweight Bitcoin client +# Copyright (C) 2012 thomasv@gitorious +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import gettext + +LOCALE_DIR = '/usr/share/locale' +#LOCALE_DIR = './locale' + +language = gettext.translation('electrum', LOCALE_DIR, fallback = True) +_ = language.ugettext diff --git a/lib/version.py b/lib/version.py @@ -1,2 +1,2 @@ -ELECTRUM_VERSION = "0.49d" +ELECTRUM_VERSION = "0.50" SEED_VERSION = 4 # bump this everytime the seed generation is modified diff --git a/locale/de/LC_MESSAGES/electrum.mo b/locale/de/LC_MESSAGES/electrum.mo Binary files differ. diff --git a/locale/electrum_de.po b/locale/electrum_de.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-18 15:14+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/gui_qt.py:1143 +msgid "Active Servers" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Address" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "Address:" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:379 lib/gui_qt.py:816 +msgid "Amount" +msgstr "" + +#: lib/gui_qt.py:221 lib/gui_qt.py:250 lib/gui_qt.py:583 +msgid "Balance" +msgstr "" + +#: lib/gui_qt.py:389 +msgid "Clear" +msgstr "" + +#: lib/gui_qt.py:847 +msgid "Close" +msgstr "" + +#: lib/gui_qt.py:918 +msgid "Confirm Password" +msgstr "" + +#: lib/gui_qt.py:1058 +msgid "Connected to" +msgstr "" + +#: lib/gui_qt.py:211 +msgid "Connecting..." +msgstr "" + +#: lib/gui_qt.py:163 +msgid "Contacts" +msgstr "" + +#: lib/gui_qt.py:559 lib/gui_qt.py:771 +msgid "Copy to Clipboard" +msgstr "" + +#: lib/gui_qt.py:250 +msgid "Date" +msgstr "" + +#: lib/gui_qt.py:1145 +msgid "Default Servers" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:375 +msgid "Description" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Do you want to create a new wallet, or to restore an existing one?" +msgstr "" + +#: lib/gui_qt.py:743 +msgid "Equivalently, your wallet seed can be stored and recovered with the following mnemonic code:" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:481 +#: lib/gui_qt.py:719 lib/gui_qt.py:738 lib/gui_qt.py:888 lib/gui_qt.py:934 +#: lib/gui_qt.py:938 lib/gui_qt.py:974 lib/gui_qt.py:986 lib/gui_qt.py:989 +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "Error" +msgstr "" + +#: lib/gui_qt.py:383 +msgid "Fee" +msgstr "" + +#: lib/gui_qt.py:1013 +msgid "Fee per tx. input" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Freeze" +msgstr "" + +#: lib/gui_qt.py:961 +msgid "Gap limit" +msgstr "" + +#: lib/gui_qt.py:1004 +msgid "Here are the settings of your wallet." +msgstr "" + +#: lib/gui_qt.py:159 +msgid "History" +msgstr "Auszug" + +#: lib/gui_qt.py:986 +msgid "I cannot decode this" +msgstr "" + +#: lib/gui_qt.py:934 +msgid "Incorrect Password" +msgstr "" + +#: lib/gui_qt.py:719 +msgid "Invalid Address" +msgstr "" + +#: lib/gui_qt.py:454 +msgid "Invalid Amount" +msgstr "" + +#: lib/gui_qt.py:448 +msgid "Invalid Bitcoin Address" +msgstr "" + +#: lib/gui_qt.py:459 +msgid "Invalid Fee" +msgstr "" + +#: lib/gui_qt.py:738 +msgid "Invalid Password" +msgstr "" + +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 +msgid "Invalid value" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Label" +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Leave these fields empty if you want to disable encryption." +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:856 lib/gui_qt.py:859 +msgid "Message" +msgstr "" + +#: lib/gui_qt.py:567 +msgid "New" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "New Contact" +msgstr "" + +#: lib/gui_qt.py:915 +msgid "New Password" +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:888 +msgid "No seed" +msgstr "" + +#: lib/gui_qt.py:1252 +msgid "No transactions found for this seed" +msgstr "" + +#: lib/gui_qt.py:225 lib/gui_qt.py:1060 +msgid "Not connected" +msgstr "" + +#: lib/gui_qt.py:229 +msgid "Not enough funds" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:477 +#: lib/gui_qt.py:481 lib/gui_qt.py:719 lib/gui_qt.py:726 lib/gui_qt.py:738 +#: lib/gui_qt.py:778 lib/gui_qt.py:796 lib/gui_qt.py:859 lib/gui_qt.py:888 +#: lib/gui_qt.py:934 lib/gui_qt.py:938 lib/gui_qt.py:986 lib/gui_qt.py:1032 +#: lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "OK" +msgstr "" + +#: lib/gui_qt.py:874 lib/gui_qt.py:912 +msgid "Password" +msgstr "" + +#: lib/gui_qt.py:938 +msgid "Passwords do not match" +msgstr "" + +#: lib/gui_qt.py:371 lib/gui_qt.py:566 +msgid "Pay to" +msgstr "" + +#: lib/gui_qt.py:477 +msgid "Payment sent." +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Please choose a password to encrypt your wallet keys." +msgstr "" + +#: lib/gui_qt.py:1064 +msgid "Please choose a server." +msgstr "" + +#: lib/gui_qt.py:869 +msgid "Please enter your password" +msgstr "" + +#: lib/gui_qt.py:949 +msgid "Please enter your wallet seed or the corresponding mnemonic list of words, and the gap limit of your wallet." +msgstr "" + +#: lib/gui_qt.py:742 +msgid "Please keep it in a safe place; if you lose it, you will not be able to restore your wallet." +msgstr "" + +#: lib/gui_qt.py:1136 +msgid "Protocol:" +msgstr "" + +#: lib/gui_qt.py:558 +msgid "QR" +msgstr "" + +#: lib/gui_qt.py:838 +msgid "QR code saved to file" +msgstr "" + +#: lib/gui_qt.py:162 +msgid "Receive" +msgstr "Empfangen" + +#: lib/gui_qt.py:844 +msgid "Save" +msgstr "" + +#: lib/gui_qt.py:748 lib/gui_qt.py:790 +msgid "Seed" +msgstr "" + +#: lib/gui_qt.py:956 +msgid "Seed or mnemonic" +msgstr "" + +#: lib/gui_qt.py:161 lib/gui_qt.py:386 +msgid "Send" +msgstr "Senden" + +#: lib/gui_qt.py:214 +msgid "Server not ready" +msgstr "" + +#: lib/gui_qt.py:217 +msgid "Synchronizing..." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "To disable wallet encryption, enter an empty new password." +msgstr "" + +#: lib/gui_qt.py:267 +msgid "Transaction Details" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Tx" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Unfreeze" +msgstr "" + +#: lib/gui_qt.py:774 +msgid "View as QR Code" +msgstr "" + +#: lib/gui_qt.py:164 +msgid "Wall" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Wallet file not found." +msgstr "" + +#: lib/gui_qt.py:741 +msgid "Your wallet generation seed is:" +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet is encrypted. Use this dialog to change your password." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet keys are not encrypted" +msgstr "" + +#: lib/gui_qt.py:1019 +msgid "Zeros displayed after decimal point" +msgstr "" + +#: lib/gui_qt.py:989 +msgid "no seed" +msgstr "" diff --git a/locale/electrum_fr.po b/locale/electrum_fr.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-18 15:14+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/gui_qt.py:1143 +msgid "Active Servers" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Address" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "Address:" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:379 lib/gui_qt.py:816 +msgid "Amount" +msgstr "" + +#: lib/gui_qt.py:221 lib/gui_qt.py:250 lib/gui_qt.py:583 +msgid "Balance" +msgstr "" + +#: lib/gui_qt.py:389 +msgid "Clear" +msgstr "" + +#: lib/gui_qt.py:847 +msgid "Close" +msgstr "" + +#: lib/gui_qt.py:918 +msgid "Confirm Password" +msgstr "" + +#: lib/gui_qt.py:1058 +msgid "Connected to" +msgstr "" + +#: lib/gui_qt.py:211 +msgid "Connecting..." +msgstr "" + +#: lib/gui_qt.py:163 +msgid "Contacts" +msgstr "" + +#: lib/gui_qt.py:559 lib/gui_qt.py:771 +msgid "Copy to Clipboard" +msgstr "" + +#: lib/gui_qt.py:250 +msgid "Date" +msgstr "" + +#: lib/gui_qt.py:1145 +msgid "Default Servers" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:375 +msgid "Description" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Do you want to create a new wallet, or to restore an existing one?" +msgstr "" + +#: lib/gui_qt.py:743 +msgid "Equivalently, your wallet seed can be stored and recovered with the following mnemonic code:" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:481 +#: lib/gui_qt.py:719 lib/gui_qt.py:738 lib/gui_qt.py:888 lib/gui_qt.py:934 +#: lib/gui_qt.py:938 lib/gui_qt.py:974 lib/gui_qt.py:986 lib/gui_qt.py:989 +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "Error" +msgstr "" + +#: lib/gui_qt.py:383 +msgid "Fee" +msgstr "" + +#: lib/gui_qt.py:1013 +msgid "Fee per tx. input" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Freeze" +msgstr "" + +#: lib/gui_qt.py:961 +msgid "Gap limit" +msgstr "" + +#: lib/gui_qt.py:1004 +msgid "Here are the settings of your wallet." +msgstr "" + +#: lib/gui_qt.py:159 +msgid "History" +msgstr "Historique" + +#: lib/gui_qt.py:986 +msgid "I cannot decode this" +msgstr "" + +#: lib/gui_qt.py:934 +msgid "Incorrect Password" +msgstr "" + +#: lib/gui_qt.py:719 +msgid "Invalid Address" +msgstr "" + +#: lib/gui_qt.py:454 +msgid "Invalid Amount" +msgstr "" + +#: lib/gui_qt.py:448 +msgid "Invalid Bitcoin Address" +msgstr "" + +#: lib/gui_qt.py:459 +msgid "Invalid Fee" +msgstr "" + +#: lib/gui_qt.py:738 +msgid "Invalid Password" +msgstr "" + +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 +msgid "Invalid value" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Label" +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Leave these fields empty if you want to disable encryption." +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:856 lib/gui_qt.py:859 +msgid "Message" +msgstr "" + +#: lib/gui_qt.py:567 +msgid "New" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "New Contact" +msgstr "" + +#: lib/gui_qt.py:915 +msgid "New Password" +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:888 +msgid "No seed" +msgstr "" + +#: lib/gui_qt.py:1252 +msgid "No transactions found for this seed" +msgstr "" + +#: lib/gui_qt.py:225 lib/gui_qt.py:1060 +msgid "Not connected" +msgstr "" + +#: lib/gui_qt.py:229 +msgid "Not enough funds" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:477 +#: lib/gui_qt.py:481 lib/gui_qt.py:719 lib/gui_qt.py:726 lib/gui_qt.py:738 +#: lib/gui_qt.py:778 lib/gui_qt.py:796 lib/gui_qt.py:859 lib/gui_qt.py:888 +#: lib/gui_qt.py:934 lib/gui_qt.py:938 lib/gui_qt.py:986 lib/gui_qt.py:1032 +#: lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "OK" +msgstr "" + +#: lib/gui_qt.py:874 lib/gui_qt.py:912 +msgid "Password" +msgstr "" + +#: lib/gui_qt.py:938 +msgid "Passwords do not match" +msgstr "" + +#: lib/gui_qt.py:371 lib/gui_qt.py:566 +msgid "Pay to" +msgstr "" + +#: lib/gui_qt.py:477 +msgid "Payment sent." +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Please choose a password to encrypt your wallet keys." +msgstr "" + +#: lib/gui_qt.py:1064 +msgid "Please choose a server." +msgstr "" + +#: lib/gui_qt.py:869 +msgid "Please enter your password" +msgstr "" + +#: lib/gui_qt.py:949 +msgid "Please enter your wallet seed or the corresponding mnemonic list of words, and the gap limit of your wallet." +msgstr "" + +#: lib/gui_qt.py:742 +msgid "Please keep it in a safe place; if you lose it, you will not be able to restore your wallet." +msgstr "" + +#: lib/gui_qt.py:1136 +msgid "Protocol:" +msgstr "" + +#: lib/gui_qt.py:558 +msgid "QR" +msgstr "" + +#: lib/gui_qt.py:838 +msgid "QR code saved to file" +msgstr "" + +#: lib/gui_qt.py:162 +msgid "Receive" +msgstr "Recevoir" + +#: lib/gui_qt.py:844 +msgid "Save" +msgstr "" + +#: lib/gui_qt.py:748 lib/gui_qt.py:790 +msgid "Seed" +msgstr "" + +#: lib/gui_qt.py:956 +msgid "Seed or mnemonic" +msgstr "" + +#: lib/gui_qt.py:161 lib/gui_qt.py:386 +msgid "Send" +msgstr "Envoyer" + +#: lib/gui_qt.py:214 +msgid "Server not ready" +msgstr "" + +#: lib/gui_qt.py:217 +msgid "Synchronizing..." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "To disable wallet encryption, enter an empty new password." +msgstr "" + +#: lib/gui_qt.py:267 +msgid "Transaction Details" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Tx" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Unfreeze" +msgstr "" + +#: lib/gui_qt.py:774 +msgid "View as QR Code" +msgstr "" + +#: lib/gui_qt.py:164 +msgid "Wall" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Wallet file not found." +msgstr "" + +#: lib/gui_qt.py:741 +msgid "Your wallet generation seed is:" +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet is encrypted. Use this dialog to change your password." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet keys are not encrypted" +msgstr "" + +#: lib/gui_qt.py:1019 +msgid "Zeros displayed after decimal point" +msgstr "" + +#: lib/gui_qt.py:989 +msgid "no seed" +msgstr "" diff --git a/locale/fr/LC_MESSAGES/electrum.mo b/locale/fr/LC_MESSAGES/electrum.mo Binary files differ. diff --git a/locale/messages.pot b/locale/messages.pot @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-18 15:14+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/gui_qt.py:1143 +msgid "Active Servers" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Address" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "Address:" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:379 lib/gui_qt.py:816 +msgid "Amount" +msgstr "" + +#: lib/gui_qt.py:221 lib/gui_qt.py:250 lib/gui_qt.py:583 +msgid "Balance" +msgstr "" + +#: lib/gui_qt.py:389 +msgid "Clear" +msgstr "" + +#: lib/gui_qt.py:847 +msgid "Close" +msgstr "" + +#: lib/gui_qt.py:918 +msgid "Confirm Password" +msgstr "" + +#: lib/gui_qt.py:1058 +msgid "Connected to" +msgstr "" + +#: lib/gui_qt.py:211 +msgid "Connecting..." +msgstr "" + +#: lib/gui_qt.py:163 +msgid "Contacts" +msgstr "" + +#: lib/gui_qt.py:559 lib/gui_qt.py:771 +msgid "Copy to Clipboard" +msgstr "" + +#: lib/gui_qt.py:250 +msgid "Date" +msgstr "" + +#: lib/gui_qt.py:1145 +msgid "Default Servers" +msgstr "" + +#: lib/gui_qt.py:250 lib/gui_qt.py:375 +msgid "Description" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Do you want to create a new wallet, or to restore an existing one?" +msgstr "" + +#: lib/gui_qt.py:743 +msgid "Equivalently, your wallet seed can be stored and recovered with the following mnemonic code:" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:481 +#: lib/gui_qt.py:719 lib/gui_qt.py:738 lib/gui_qt.py:888 lib/gui_qt.py:934 +#: lib/gui_qt.py:938 lib/gui_qt.py:974 lib/gui_qt.py:986 lib/gui_qt.py:989 +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "Error" +msgstr "" + +#: lib/gui_qt.py:383 +msgid "Fee" +msgstr "" + +#: lib/gui_qt.py:1013 +msgid "Fee per tx. input" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Freeze" +msgstr "" + +#: lib/gui_qt.py:961 +msgid "Gap limit" +msgstr "" + +#: lib/gui_qt.py:1004 +msgid "Here are the settings of your wallet." +msgstr "" + +#: lib/gui_qt.py:159 +msgid "History" +msgstr "" + +#: lib/gui_qt.py:986 +msgid "I cannot decode this" +msgstr "" + +#: lib/gui_qt.py:934 +msgid "Incorrect Password" +msgstr "" + +#: lib/gui_qt.py:719 +msgid "Invalid Address" +msgstr "" + +#: lib/gui_qt.py:454 +msgid "Invalid Amount" +msgstr "" + +#: lib/gui_qt.py:448 +msgid "Invalid Bitcoin Address" +msgstr "" + +#: lib/gui_qt.py:459 +msgid "Invalid Fee" +msgstr "" + +#: lib/gui_qt.py:738 +msgid "Invalid Password" +msgstr "" + +#: lib/gui_qt.py:1032 lib/gui_qt.py:1044 +msgid "Invalid value" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Label" +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Leave these fields empty if you want to disable encryption." +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:856 lib/gui_qt.py:859 +msgid "Message" +msgstr "" + +#: lib/gui_qt.py:567 +msgid "New" +msgstr "" + +#: lib/gui_qt.py:711 +msgid "New Contact" +msgstr "" + +#: lib/gui_qt.py:915 +msgid "New Password" +msgstr "" + +#: lib/gui_qt.py:726 lib/gui_qt.py:888 +msgid "No seed" +msgstr "" + +#: lib/gui_qt.py:1252 +msgid "No transactions found for this seed" +msgstr "" + +#: lib/gui_qt.py:225 lib/gui_qt.py:1060 +msgid "Not connected" +msgstr "" + +#: lib/gui_qt.py:229 +msgid "Not enough funds" +msgstr "" + +#: lib/gui_qt.py:448 lib/gui_qt.py:454 lib/gui_qt.py:459 lib/gui_qt.py:477 +#: lib/gui_qt.py:481 lib/gui_qt.py:719 lib/gui_qt.py:726 lib/gui_qt.py:738 +#: lib/gui_qt.py:778 lib/gui_qt.py:796 lib/gui_qt.py:859 lib/gui_qt.py:888 +#: lib/gui_qt.py:934 lib/gui_qt.py:938 lib/gui_qt.py:986 lib/gui_qt.py:1032 +#: lib/gui_qt.py:1044 lib/gui_qt.py:1176 lib/gui_qt.py:1252 +msgid "OK" +msgstr "" + +#: lib/gui_qt.py:874 lib/gui_qt.py:912 +msgid "Password" +msgstr "" + +#: lib/gui_qt.py:938 +msgid "Passwords do not match" +msgstr "" + +#: lib/gui_qt.py:371 lib/gui_qt.py:566 +msgid "Pay to" +msgstr "" + +#: lib/gui_qt.py:477 +msgid "Payment sent." +msgstr "" + +#: lib/gui_qt.py:905 +msgid "Please choose a password to encrypt your wallet keys." +msgstr "" + +#: lib/gui_qt.py:1064 +msgid "Please choose a server." +msgstr "" + +#: lib/gui_qt.py:869 +msgid "Please enter your password" +msgstr "" + +#: lib/gui_qt.py:949 +msgid "Please enter your wallet seed or the corresponding mnemonic list of words, and the gap limit of your wallet." +msgstr "" + +#: lib/gui_qt.py:742 +msgid "Please keep it in a safe place; if you lose it, you will not be able to restore your wallet." +msgstr "" + +#: lib/gui_qt.py:1136 +msgid "Protocol:" +msgstr "" + +#: lib/gui_qt.py:558 +msgid "QR" +msgstr "" + +#: lib/gui_qt.py:838 +msgid "QR code saved to file" +msgstr "" + +#: lib/gui_qt.py:162 +msgid "Receive" +msgstr "" + +#: lib/gui_qt.py:844 +msgid "Save" +msgstr "" + +#: lib/gui_qt.py:748 lib/gui_qt.py:790 +msgid "Seed" +msgstr "" + +#: lib/gui_qt.py:956 +msgid "Seed or mnemonic" +msgstr "" + +#: lib/gui_qt.py:161 lib/gui_qt.py:386 +msgid "Send" +msgstr "" + +#: lib/gui_qt.py:214 +msgid "Server not ready" +msgstr "" + +#: lib/gui_qt.py:217 +msgid "Synchronizing..." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "To disable wallet encryption, enter an empty new password." +msgstr "" + +#: lib/gui_qt.py:267 +msgid "Transaction Details" +msgstr "" + +#: lib/gui_qt.py:583 lib/gui_qt.py:617 +msgid "Tx" +msgstr "" + +#: lib/gui_qt.py:572 +msgid "Unfreeze" +msgstr "" + +#: lib/gui_qt.py:774 +msgid "View as QR Code" +msgstr "" + +#: lib/gui_qt.py:164 +msgid "Wall" +msgstr "" + +#: lib/gui_qt.py:1219 +msgid "Wallet file not found." +msgstr "" + +#: lib/gui_qt.py:741 +msgid "Your wallet generation seed is:" +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet is encrypted. Use this dialog to change your password." +msgstr "" + +#: lib/gui_qt.py:903 +msgid "Your wallet keys are not encrypted" +msgstr "" + +#: lib/gui_qt.py:1019 +msgid "Zeros displayed after decimal point" +msgstr "" + +#: lib/gui_qt.py:989 +msgid "no seed" +msgstr "" diff --git a/mki18n.py b/mki18n.py @@ -0,0 +1,52 @@ +#!/usr/bin/python + +import urllib2, os + +url = "https://en.bitcoin.it/wiki/Electrum/Translation?action=raw" +f = urllib2.urlopen(url) +lines = f.readlines() +dicts = {} +message = None +for line in lines: + l = line.strip() + if not l: continue + if l[0] != '*': continue + if l[0:2] == '**': + lang, translation = l.split(':') + lang = lang[2:] + if dicts.get(lang) is None: dicts[lang] = {} + dicts[lang][message] = translation + else: + message = l[1:] + +print dicts + + +cmd = 'xgettext -s --no-wrap -f app.fil --output=locale/messages.pot' +print cmd +os.system(cmd) + +f = open('locale/messages.pot','r') +s = f.read() +f.close() +s = s.replace('CHARSET', 'utf-8') + +for lang, strings in dicts.items(): + ss = s[:] + for k,v in strings.items(): + ss = ss.replace("msgid \"%s\"\nmsgstr \"\""%k,"msgid \"%s\"\nmsgstr \"%s\""%(k,v)) + f = open('locale/electrum_%s.po'%lang,'w') + f.write(ss) + f.close() + + if not os.path.exists('locale/'+lang): + os.mkdir('locale/'+lang) + + mo_dir = "locale/%s/LC_MESSAGES" % lang + if not os.path.exists(mo_dir): + os.mkdir(mo_dir) + + cmd = 'msgfmt --output-file="%s/electrum.mo" "locale/electrum_%s.po"' % (mo_dir,lang) + print cmd + os.system(cmd) + diff --git a/setup.py b/setup.py @@ -10,7 +10,20 @@ setup(name = "Electrum", install_requires = ['slowaes','ecdsa'], package_dir = {'electrum': 'lib'}, scripts= ['electrum'], - py_modules = ['electrum.version','electrum.wallet','electrum.interface','electrum.gui','electrum.gui_qt','electrum.icons_rc','electrum.mnemonic','electrum.pyqrnative','electrum.bmp'], + data_files=[ + ('/usr/share/locale/de/LC_MESSAGES', ['locale/de/LC_MESSAGES/electrum.mo']), + ('/usr/share/locale/fr/LC_MESSAGES', ['locale/fr/LC_MESSAGES/electrum.mo']), + ], + py_modules = ['electrum.version', + 'electrum.wallet', + 'electrum.interface', + 'electrum.gui', + 'electrum.gui_qt', + 'electrum.icons_rc', + 'electrum.mnemonic', + 'electrum.pyqrnative', + 'electrum.bmp', + 'electrum.i18n'], description = "Lightweight Bitcoin Wallet", author = "thomasv", license = "GNU GPLv3",