URI: 
       tversion 0.50: localisation using gettext - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 09714636efe52293177b6a1bdaae228906f355bc
   DIR parent 5f733a43122419ccc73684639641f49d0c878774
  HTML Author: thomasv <thomasv@gitorious>
       Date:   Fri, 18 May 2012 15:28:55 +0200
       
       version 0.50: localisation using gettext
       
       Diffstat:
         M MANIFEST.in                         |       2 ++
         A app.fil                             |       2 ++
         M lib/gui_qt.py                       |     162 +++++++++++++++---------------
         A lib/i18n.py                         |      25 +++++++++++++++++++++++++
         M lib/version.py                      |       2 +-
         A locale/de/LC_MESSAGES/electrum.mo   |       0 
         A locale/electrum_de.po               |     321 +++++++++++++++++++++++++++++++
         A locale/electrum_fr.po               |     321 +++++++++++++++++++++++++++++++
         A locale/fr/LC_MESSAGES/electrum.mo   |       0 
         A locale/messages.pot                 |     321 +++++++++++++++++++++++++++++++
         A mki18n.py                           |      52 +++++++++++++++++++++++++++++++
         M setup.py                            |      15 ++++++++++++++-
       
       12 files changed, 1140 insertions(+), 83 deletions(-)
       ---
   DIR diff --git a/MANIFEST.in b/MANIFEST.in
       t@@ -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 *
   DIR diff --git a/app.fil b/app.fil
       t@@ -0,0 +1,2 @@
       +lib/gui_qt.py
       +lib/gui.py
   DIR diff --git a/lib/gui_qt.py b/lib/gui_qt.py
       t@@ -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
       t@@ -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
       t@@ -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)
       t@@ -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 )
       t@@ -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)
       t@@ -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 \
       t@@ -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('')
       t@@ -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:
       t@@ -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):
       t@@ -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)
            
        
       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()
       t@@ -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()
       t@@ -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):
       t@@ -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:
       t@@ -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()
       t@@ -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)
       t@@ -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)
        
       t@@ -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)
        
       t@@ -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)
        
       t@@ -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)
       t@@ -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)
        
       t@@ -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)
       t@@ -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)
        
       t@@ -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)
       t@@ -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)
       t@@ -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:
       t@@ -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)
       t@@ -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()
       t@@ -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))
        
       t@@ -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:
       t@@ -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:
       t@@ -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:
       t@@ -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 ] )
       t@@ -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:
       t@@ -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
                
       t@@ -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
   DIR diff --git a/lib/i18n.py b/lib/i18n.py
       t@@ -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
   DIR diff --git a/lib/version.py b/lib/version.py
       t@@ -1,2 +1,2 @@
       -ELECTRUM_VERSION = "0.49d"
       +ELECTRUM_VERSION = "0.50"
        SEED_VERSION = 4  # bump this everytime the seed generation is modified
   DIR diff --git a/locale/de/LC_MESSAGES/electrum.mo b/locale/de/LC_MESSAGES/electrum.mo
       Binary files differ.
   DIR diff --git a/locale/electrum_de.po b/locale/electrum_de.po
       t@@ -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 ""
   DIR diff --git a/locale/electrum_fr.po b/locale/electrum_fr.po
       t@@ -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 ""
   DIR diff --git a/locale/fr/LC_MESSAGES/electrum.mo b/locale/fr/LC_MESSAGES/electrum.mo
       Binary files differ.
   DIR diff --git a/locale/messages.pot b/locale/messages.pot
       t@@ -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 ""
   DIR diff --git a/mki18n.py b/mki18n.py
       t@@ -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)
       +    
   DIR diff --git a/setup.py b/setup.py
       t@@ -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",