URI: 
       tFix localization related issues with digitalbitbox - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 3c505660a6c0827b72d12bd9bb7d5756974d5285
   DIR parent 2915cb98b20c75f4253aae2b10da49c2d361f170
  HTML Author: Johann Bauer <bauerj@bauerj.eu>
       Date:   Fri,  9 Mar 2018 23:52:34 +0100
       
       Fix localization related issues with digitalbitbox
       
       Diffstat:
         M plugins/digitalbitbox/digitalbitbo… |      83 ++++++++++++++++---------------
       
       1 file changed, 44 insertions(+), 39 deletions(-)
       ---
   DIR diff --git a/plugins/digitalbitbox/digitalbitbox.py b/plugins/digitalbitbox/digitalbitbox.py
       t@@ -106,7 +106,7 @@ class DigitalBitbox_Client():
            def dbb_has_password(self):
                reply = self.hid_send_plain(b'{"ping":""}')
                if 'ping' not in reply:
       -            raise Exception('Device communication error. Please unplug and replug your Digital Bitbox.')
       +            raise Exception(_('Device communication error. Please unplug and replug your Digital Bitbox.'))
                if reply['ping'] == 'password':
                    return True
                return False
       t@@ -124,9 +124,11 @@ class DigitalBitbox_Client():
                    if password is None:
                        return None
                    if len(password) < 4:
       -                msg = _("Password must have at least 4 characters.\r\n\r\nEnter password:")
       +                msg = _("Password must have at least 4 characters.") \
       +                      + "\n\n" + _("Enter password:")
                    elif len(password) > 64:
       -                msg = _("Password must have less than 64 characters.\r\n\r\nEnter password:")
       +                msg = _("Password must have less than 64 characters.") \
       +                      + "\n\n" + _("Enter password:")
                    else:
                        return password.encode('utf8')
        
       t@@ -137,9 +139,11 @@ class DigitalBitbox_Client():
                    if password is None:
                        return False
                    if len(password) < 4:
       -                msg = _("Password must have at least 4 characters.\r\n\r\nEnter password:")
       +                msg = _("Password must have at least 4 characters.") + \
       +                      "\n\n" + _("Enter password:")
                    elif len(password) > 64:
       -                msg = _("Password must have less than 64 characters.\r\n\r\nEnter password:")
       +                msg = _("Password must have less than 64 characters.") + \
       +                      "\n\n" + _("Enter password:")
                    else:
                        self.password = password.encode('utf8')
                        return True
       t@@ -150,10 +154,11 @@ class DigitalBitbox_Client():
                if self.password is None and not self.dbb_has_password():
                    if not self.setupRunning:
                        return False # A fresh device cannot connect to an existing wallet
       -            msg = _("An uninitialized Digital Bitbox is detected. " \
       -                    "Enter a new password below.\r\n\r\n REMEMBER THE PASSWORD!\r\n\r\n" \
       -                    "You cannot access your coins or a backup without the password.\r\n" \
       -                    "A backup is saved automatically when generating a new wallet.")
       +            msg = _("An uninitialized Digital Bitbox is detected.") + " " + \
       +                  _("Enter a new password below.") + "\n\n" + \
       +                  _("REMEMBER THE PASSWORD!") + "\n\n" + \
       +                  _("You cannot access your coins or a backup without the password.") + "\n" + \
       +                  _("A backup is saved automatically when generating a new wallet.")
                    if self.password_dialog(msg):
                        reply = self.hid_send_plain(b'{"password":"' + self.password + b'"}')
                    else:
       t@@ -168,14 +173,14 @@ class DigitalBitbox_Client():
                    if 'error' in reply:
                        self.password = None
                        if reply['error']['code'] == 109:
       -                    msg = _("Incorrect password entered.\r\n\r\n"  \
       -                            + reply['error']['message'] + "\r\n\r\n" \
       -                            "Enter your Digital Bitbox password:")
       +                    msg = _("Incorrect password entered.") + "\n\n" + \
       +                          + reply['error']['message'] + "\n\n" + \
       +                          _("Enter your Digital Bitbox password:")
                        else:
                            # Should never occur
       -                    msg = _("Unexpected error occurred.\r\n\r\n"  \
       -                            + reply['error']['message'] + "\r\n\r\n" \
       -                            "Enter your Digital Bitbox password:")
       +                    msg = _("Unexpected error occurred.") + "\n\n" + \
       +                          + reply['error']['message'] + "\n\n" + \
       +                          _("Enter your Digital Bitbox password:")
        
                # Initialize device if not yet initialized
                if not self.setupRunning:
       t@@ -191,7 +196,7 @@ class DigitalBitbox_Client():
        
        
            def recover_or_erase_dialog(self):
       -        msg = _("The Digital Bitbox is already seeded. Choose an option:\n")
       +        msg = _("The Digital Bitbox is already seeded. Choose an option:") + "\n"
                choices = [
                    (_("Create a wallet using the current seed")),
                    (_("Load a wallet from the micro SD card (the current seed is overwritten)")),
       t@@ -208,13 +213,13 @@ class DigitalBitbox_Client():
                        return
                else:
                    if self.hid_send_encrypt(b'{"device":"info"}')['device']['lock']:
       -                raise Exception("Full 2FA enabled. This is not supported yet.")
       +                raise Exception(_("Full 2FA enabled. This is not supported yet."))
                    # Use existing seed
                self.isInitialized = True
        
        
            def seed_device_dialog(self):
       -        msg = _("Choose how to initialize your Digital Bitbox:\n")
       +        msg = _("Choose how to initialize your Digital Bitbox:") + "\n"
                choices = [
                    (_("Generate a new random wallet")),
                    (_("Load a wallet from the micro SD card"))
       t@@ -280,9 +285,9 @@ class DigitalBitbox_Client():
        
        
            def dbb_erase(self):
       -        self.handler.show_message(_("Are you sure you want to erase the Digital Bitbox?\r\n\r\n" \
       -                                    "To continue, touch the Digital Bitbox's light for 3 seconds.\r\n\r\n" \
       -                                    "To cancel, briefly touch the light or wait for the timeout."))
       +        self.handler.show_message(_("Are you sure you want to erase the Digital Bitbox?") + "\n\n" +
       +                                  _("To continue, touch the Digital Bitbox's light for 3 seconds.") + "\n\n" +
       +                                  _("To cancel, briefly touch the light or wait for the timeout."))
                hid_reply = self.hid_send_encrypt(b'{"reset":"__ERASE__"}')
                self.handler.finished()
                if 'error' in hid_reply:
       t@@ -305,9 +310,9 @@ class DigitalBitbox_Client():
                    raise Exception('Canceled by user')
                key = self.stretch_key(key)
                if show_msg:
       -            self.handler.show_message(_("Loading backup...\r\n\r\n" \
       -                                        "To continue, touch the Digital Bitbox's light for 3 seconds.\r\n\r\n" \
       -                                        "To cancel, briefly touch the light or wait for the timeout."))
       +            self.handler.show_message(_("Loading backup...") + "\n\n" +
       +                                      _("To continue, touch the Digital Bitbox's light for 3 seconds.") + "\n\n" +
       +                                      _("To cancel, briefly touch the light or wait for the timeout."))
                msg = b'{"seed":{"source": "backup", "key": "%s", "filename": "%s"}}' % (key, backups['backup'][f].encode('utf8'))
                hid_reply = self.hid_send_encrypt(msg)
                self.handler.finished()
       t@@ -365,7 +370,7 @@ class DigitalBitbox_Client():
                    else:
                        self.hid_send_frame(msg)
                        r = self.hid_read_frame()
       -            r = r.rstrip(b' \t\r\n\0')
       +            r = r.rstrip(b' \t\n\0')
                    r = r.replace(b"\0", b'')
                    r = to_string(r, 'utf8')
                    reply = json.loads(r)
       t@@ -441,12 +446,12 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
                    dbb_client = self.plugin.get_client(self)
        
                    if not dbb_client.is_paired():
       -                raise Exception("Could not sign message.")
       +                raise Exception(_("Could not sign message."))
        
                    reply = dbb_client.hid_send_encrypt(msg)
       -            self.handler.show_message(_("Signing message ...\r\n\r\n" \
       -                                        "To continue, touch the Digital Bitbox's blinking light for 3 seconds.\r\n\r\n" \
       -                                        "To cancel, briefly touch the blinking light or wait for the timeout."))
       +            self.handler.show_message(_("Signing message ...") + "\n\n" +
       +                                      _("To continue, touch the Digital Bitbox's blinking light for 3 seconds.") + "\n\n" +
       +                                      _("To cancel, briefly touch the blinking light or wait for the timeout."))
                    reply = dbb_client.hid_send_encrypt(msg) # Send twice, first returns an echo for smart verification (not implemented)
                    self.handler.finished()
        
       t@@ -454,7 +459,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
                        raise Exception(reply['error']['message'])
        
                    if 'sign' not in reply:
       -                raise Exception("Could not sign message.")
       +                raise Exception(_("Could not sign message."))
        
                    if 'recid' in reply['sign'][0]:
                        # firmware > v2.1.1
       t@@ -463,7 +468,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
                        pk = point_to_ser(pk.pubkey.point, compressed)
                        addr = public_key_to_p2pkh(pk)
                        if verify_message(addr, sig, message) is False:
       -                    raise Exception("Could not sign message")
       +                    raise Exception(_("Could not sign message"))
                    elif 'pubkey' in reply['sign'][0]:
                        # firmware <= v2.1.1
                        for i in range(4):
       t@@ -475,7 +480,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
                            except Exception:
                                continue
                        else:
       -                    raise Exception("Could not sign message")
       +                    raise Exception(_("Could not sign message"))
        
        
                except BaseException as e:
       t@@ -576,14 +581,14 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
                            self.plugin.comserver_post_notification(reply)
        
                        if steps > 1:
       -                    self.handler.show_message(_("Signing large transaction. Please be patient ...\r\n\r\n" \
       -                                                "To continue, touch the Digital Bitbox's blinking light for 3 seconds. " \
       -                                                "(Touch " + str(step + 1) + " of " + str(int(steps)) + ")\r\n\r\n" \
       -                                                "To cancel, briefly touch the blinking light or wait for the timeout.\r\n\r\n"))
       +                    self.handler.show_message(_("Signing large transaction. Please be patient ...") + "\n\n" +
       +                                              _("To continue, touch the Digital Bitbox's blinking light for 3 seconds.") + " " +
       +                                              _("(Touch {} of {})").format((step + 1), steps) + "\n\n" +
       +                                              _("To cancel, briefly touch the blinking light or wait for the timeout.") + "\n\n")
                        else:
       -                    self.handler.show_message(_("Signing transaction ...\r\n\r\n" \
       -                                                "To continue, touch the Digital Bitbox's blinking light for 3 seconds.\r\n\r\n" \
       -                                                "To cancel, briefly touch the blinking light or wait for the timeout."))
       +                    self.handler.show_message(_("Signing transaction...") + "\n\n" +
       +                                              _("To continue, touch the Digital Bitbox's blinking light for 3 seconds.") + "\n\n" +
       +                                              _("To cancel, briefly touch the blinking light or wait for the timeout."))
        
                        # Send twice, first returns an echo for smart verification
                        reply = dbb_client.hid_send_encrypt(msg)