This commit is contained in:
kdmukai
2024-11-01 17:14:25 -05:00
parent f64f3945a8
commit a353e26bea
6 changed files with 10 additions and 541 deletions
-6
View File
@@ -1,9 +1,3 @@
# jdlcdl branch: kdmukai/initial_multilanguage
My self-directed exploration, from mid November through mid December 2022, to carry-on where kdmukai left-off this past summer, in similar style, regarding internationalization/localization of seedsigner codebase (w/ exploration focus in locale 'fr'). Note: requirements.txt has new dependencies; also, follow instructions in babel/ to build binary message catalogs.
---------------
# Build an offline, airgapped Bitcoin signing device for less than $50!
![Image of SeedSigners in Mini Pill Enclosures](docs/img/Mini_Pill_Main_Photo.jpg)
-515
View File
@@ -1,515 +0,0 @@
{
"settings_entries": [
{
"category": "system",
"attr_name": "locale",
"abbreviated_name": "lang",
"display_name": "Language",
"visibility": "general",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "\u010de\u0161tina",
"value": "cs"
},
{
"display_name": "English",
"value": "en"
},
{
"display_name": "Fran\u00e7ais",
"value": "fr"
},
{
"display_name": "Deutsch",
"value": "de"
},
{
"display_name": "Portugu\u00eas",
"value": "pt"
},
{
"display_name": "\u0440\u0443\u0441\u0441\u043a\u0438\u0439",
"value": "ru"
},
{
"display_name": "Espa\u00f1ol",
"value": "es"
}
],
"default_value": "en"
},
{
"category": "system",
"attr_name": "wordlist_language",
"abbreviated_name": "wordlist_lang",
"display_name": "Mnemonic language",
"visibility": "hidden",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "English",
"value": "en"
}
],
"default_value": "en"
},
{
"category": "system",
"attr_name": "persistent_settings",
"abbreviated_name": "persistent",
"display_name": "Persistent settings",
"visibility": "general",
"type": "enabled_disabled",
"help_text": "Store Settings on SD card",
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "D"
},
{
"category": "wallet",
"attr_name": "coordinators",
"abbreviated_name": "coords",
"display_name": "Coordinator software",
"visibility": "general",
"type": "multiselect",
"help_text": null,
"selection_options": [
{
"display_name": "BlueWallet",
"value": "bw"
},
{
"display_name": "Nunchuk",
"value": "nun"
},
{
"display_name": "Sparrow",
"value": "spa"
},
{
"display_name": "Specter Desktop",
"value": "spd"
},
{
"display_name": "Keeper",
"value": "kpr"
}
],
"default_value": [
"bw",
"nun",
"spa",
"spd"
]
},
{
"category": "system",
"attr_name": "denomination",
"abbreviated_name": "denom",
"display_name": "Denomination display",
"visibility": "general",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "BTC",
"value": "btc"
},
{
"display_name": "sats",
"value": "sats"
},
{
"display_name": "Threshold at 0.01",
"value": "thr"
},
{
"display_name": "BTC | sats hybrid",
"value": "hyb"
}
],
"default_value": "thr"
},
{
"category": "features",
"attr_name": "network",
"abbreviated_name": null,
"display_name": "Bitcoin network",
"visibility": "advanced",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "Mainnet",
"value": "M"
},
{
"display_name": "Testnet",
"value": "T"
},
{
"display_name": "Regtest",
"value": "R"
}
],
"default_value": "M"
},
{
"category": "features",
"attr_name": "qr_density",
"abbreviated_name": null,
"display_name": "QR code density",
"visibility": "advanced",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "Low",
"value": "L"
},
{
"display_name": "Medium",
"value": "M"
},
{
"display_name": "High",
"value": "H"
}
],
"default_value": "M"
},
{
"category": "features",
"attr_name": "xpub_export",
"abbreviated_name": null,
"display_name": "Xpub export",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "sig_types",
"abbreviated_name": "sigs",
"display_name": "Sig types",
"visibility": "advanced",
"type": "multiselect",
"help_text": null,
"selection_options": [
{
"display_name": "Single Sig",
"value": "ss"
},
{
"display_name": "Multisig",
"value": "ms"
}
],
"default_value": [
"ss",
"ms"
]
},
{
"category": "features",
"attr_name": "script_types",
"abbreviated_name": "scripts",
"display_name": "Script types",
"visibility": "advanced",
"type": "multiselect",
"help_text": null,
"selection_options": [
{
"display_name": "Native Segwit",
"value": "nat"
},
{
"display_name": "Nested Segwit",
"value": "nes"
},
{
"display_name": "Legacy",
"value": "leg"
},
{
"display_name": "Taproot",
"value": "tr"
},
{
"display_name": "Custom Derivation",
"value": "cus"
}
],
"default_value": [
"nat",
"nes",
"tr"
]
},
{
"category": "features",
"attr_name": "xpub_details",
"abbreviated_name": null,
"display_name": "Show xpub details",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "passphrase",
"abbreviated_name": null,
"display_name": "BIP-39 passphrase",
"visibility": "advanced",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
},
{
"display_name": "Required",
"value": "R"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "camera_rotation",
"abbreviated_name": "camera",
"display_name": "Camera rotation",
"visibility": "advanced",
"type": "select_1",
"help_text": null,
"selection_options": [
{
"display_name": "0\u00b0",
"value": 0
},
{
"display_name": "90\u00b0",
"value": 90
},
{
"display_name": "180\u00b0",
"value": 180
},
{
"display_name": "270\u00b0",
"value": 270
}
],
"default_value": 180
},
{
"category": "features",
"attr_name": "compact_seedqr",
"abbreviated_name": null,
"display_name": "Compact SeedQR",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "bip85_child_seeds",
"abbreviated_name": "bip85",
"display_name": "BIP-85 child seeds",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "D"
},
{
"category": "features",
"attr_name": "electrum_seeds",
"abbreviated_name": "electrum",
"display_name": "Electrum seeds",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": "Native Segwit only",
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "D"
},
{
"category": "features",
"attr_name": "message_signing",
"abbreviated_name": null,
"display_name": "Message signing",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "D"
},
{
"category": "features",
"attr_name": "privacy_warnings",
"abbreviated_name": "priv_warn",
"display_name": "Show privacy warnings",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "dire_warnings",
"abbreviated_name": "dire_warn",
"display_name": "Show dire warnings",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "qr_brightness_tips",
"abbreviated_name": null,
"display_name": "Show QR brightness tips",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "features",
"attr_name": "partner_logos",
"abbreviated_name": "partners",
"display_name": "Show partner logos",
"visibility": "advanced",
"type": "enabled_disabled",
"help_text": null,
"selection_options": [
{
"display_name": "Enabled",
"value": "E"
},
{
"display_name": "Disabled",
"value": "D"
}
],
"default_value": "E"
},
{
"category": "system",
"attr_name": "qr_background_color",
"abbreviated_name": "qr_brightness",
"display_name": "QR background color",
"visibility": "hidden",
"type": "free_entry",
"help_text": null,
"selection_options": null,
"default_value": 62
}
]
}
+8 -8
View File
@@ -29,42 +29,42 @@ class Keyboard:
COMPACT_KEY_FONT = "compact"
# TRANSLATOR_NOTE: The abbreviated label for the special key <del> on a standard keyboard.
babel_extract_food = _("del")
del_label = _("del")
KEY_BACKSPACE = {
"code": "DEL",
"letter": "del",
"letter": del_label,
"font": COMPACT_KEY_FONT,
"size": 2,
}
# TRANSLATOR_NOTE: The abbreviated label for the special key <space> on a standard keyboard.
babel_extract_food = _("space")
space_label = _("space")
KEY_SPACE = {
"code": "SPACE",
"letter": "space",
"letter": space_label,
"font": COMPACT_KEY_FONT,
"size": 1,
}
KEY_SPACE_2 = {
"code": "SPACE",
"letter": "space",
"letter": space_label,
"font": COMPACT_KEY_FONT,
"size": 2,
}
KEY_SPACE_3 = {
"code": "SPACE",
"letter": "space",
"letter": space_label,
"font": COMPACT_KEY_FONT,
"size": 3,
}
KEY_SPACE_4 = {
"code": "SPACE",
"letter": "space",
"letter": space_label,
"font": COMPACT_KEY_FONT,
"size": 4,
}
KEY_SPACE_5 = {
"code": "SPACE",
"letter": "space",
"letter": space_label,
"font": COMPACT_KEY_FONT,
"size": 5,
}
-3
View File
@@ -1,9 +1,6 @@
import os
from gettext import gettext as _
from PIL import Image, ImageDraw
from threading import Lock
from seedsigner.gui.components import Fonts, GUIConstants
from seedsigner.hardware.ST7789 import ST7789
from seedsigner.models.singleton import ConfigurableSingleton
+1 -7
View File
@@ -25,16 +25,10 @@ RET_CODE__POWER_BUTTON = 1001
@dataclass
class BaseScreen(BaseComponent):
disable_inputs: bool = False
def __post_init__(self):
super().__post_init__()
if not self.disable_inputs:
# For testing or rendering screen previews off the device when hardware
# support is not available.
self.hw_inputs = HardwareButtons.get_instance()
self.hw_inputs = HardwareButtons.get_instance()
# Implementation classes can add their own BaseThread to run in parallel with the
# main execution thread.
+1 -2
View File
@@ -111,7 +111,6 @@ def test_generate_screenshots(target_locale):
controller.storage.seeds.append(seed_12b)
controller.storage.seeds.append(seed_24)
controller.storage.set_pending_seed(seed_24_w_passphrase)
UnhandledExceptionViewFood = ["IndexError", "line 1, in some_buggy_code.py", "list index out of range"]
# Pending mnemonic for ToolsCalcFinalWordShowFinalWordView
controller.storage.init_pending_mnemonic(num_words=12)
@@ -295,7 +294,7 @@ def test_generate_screenshots(target_locale):
],
"Misc Error Views": [
NotYetImplementedView,
(UnhandledExceptionView, dict(error=UnhandledExceptionViewFood)),
(UnhandledExceptionView, dict(error=["IndexError", "line 1, in some_buggy_code.py", "list index out of range"])),
NetworkMismatchErrorView,
(OptionDisabledView, dict(settings_attr=SettingsConstants.SETTING__MESSAGE_SIGNING)),
(ErrorView, dict(