diff --git a/.pylintrc b/.pylintrc index 18cb9456..b99a6edb 100644 --- a/.pylintrc +++ b/.pylintrc @@ -89,7 +89,8 @@ disable=bad-inline-option, duplicate-code, ungrouped-imports, raise-missing-from, - anomalous-backslash-in-string + anomalous-backslash-in-string, + too-many-positional-arguments # Todo: remove this and adapt for releases above 24.09.0 # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option diff --git a/CHANGELOG.md b/CHANGELOG.md index 74b3710b..6b7fe59e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,68 @@ +# Changelog 24.09.0 - September 16, 2024 + +### New Device Support: WonderMV +Manufactured by HiWonder, the WonderMV is similar to Yahboom K210 Module, with a few differences, including a metal enclosure, USB-C port, and screen backlight control. + +### Added Support for East Asian Languages - Korean and Simplified Chinese +After implementing low-level support for different glyph form factors, we were finally able to introduce the long-awaited Korean language translation. Simplified Chinese support followed shortly thereafter. + +### Faster PSBT Scanning +Reduced the time required to scan larger PSBTs by optimizing processing speed. + +### Improved QR Code Scanning +Enhanced scan success rates in challenging conditions, such as reduced focus or scanning from greater distances. + +### UI Standardization +The positions of "Yes" and "No" in prompts have been inverted to standardize the UI. Affirmative actions, such as "Yes," "Go," and "Proceed," will now be positioned on the right, while "No," "Esc," and "Back" will be on the left. + +### Enhanced Scanning Progress Bars +QR code progress bars now provide more detailed information. For UR PSBTs, the progress bar indicates when a valid frame is captured, while for BBQR, it displays the index or position of the last successfully scanned frame. + +### Mnemoniocs Editor - Loading Mnemonics +When manually loading an existing mnemonic, you can now correct typos and mistakes during the review stage by simply tapping or navigating to the incorrect words. The checksum word will be highlighted in red if the entered mnemonic is invalid to help detect eventual problems. + +### Mnemonics Editor - New Mnemonic +When generating new mnemonics through dice rolls or camera images, you can now modify the entropy by changing some of the mnemonic words. The final word will dynamically adjust to always produce a valid checksum. + +### Support for Scanning Various Binary Grid Formats +In addition to TinySeed, the camera can now scan and load mnemonics from equivalent formats, such as OneKey KeyTag, or even generic binary grids, like spreadsheets with colored, squared cells. + +### Message Signing Using SD cards +Recently released in Sparrow, the SD card message signing workflow is now supported. + +### Generate Double Mnemonics from Camera +When generating a new mnemonic using the camera, users can now choose to create a "Double Mnemonic," in addition to the standard 12 and 24-word options. This feature generates a 24-word mnemonic that, when split in half, forms two valid 12-word mnemonics. + +### Increased Valid Touch Surface +To improve touch accuracy, especially on small touchscreens, the touch surface area of buttons has been increased to make better use of the available screen space. + +### Add Account Descriptor Type Support +Krux now accepts urtype.Account type QR code descriptors. + +### Enhanced File Exploring +File explorer now better differentiate files from folders. + +### Camera Adjustments for Yahboom and WondeMV +Sensitivity and exposure adjustments were made to the GC2145 sensor, enhancing the scanning success rate for Yahboom and WondeMV devices. + +### About Shows Board Type +Ensure you flashed the correct firmware for your device consulting the "About" menu item. + +### Simplified Translations +Messages and terms were simplified to reduce firmware size and maintenance. + +### Bugfix - Signing Messages with ":" Character +Fixed an issue where signing messages containing the ":" character would result in invalid signatures when signing at addresses. + +### Bugfix - Import of Base64 Encoded PSBTs from SD Card +Fixed an issue where base64 encoded PSBTs imported from an SD card were not correctly detected and parsed. + +### Translation Removed: Polish +Polish translation was removed due to the lack of maintainers and known users. + +### Code Refactor and Optimizations +Several optimizations to increase performance and code quality. + # Changelog 24.07.0 - July 15, 2024 ### Maix Cube Support diff --git a/i18n/i18n.py b/i18n/i18n.py index 913f100d..f4f0e64c 100644 --- a/i18n/i18n.py +++ b/i18n/i18n.py @@ -19,16 +19,40 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. + import binascii import sys import json -from os import listdir, walk -from os.path import isfile, exists, join, basename +from os import listdir, walk, mkdir +from os.path import isfile, isdir, exists, join, basename import re SRC_DIR = "../src" TRANSLATION_FILES_DIR = "translations" +KRUX_LICENSE = """# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +""" + def find_translation_slugs(): """Searches the src directory for all 'slugs' that should be translated @@ -167,55 +191,67 @@ def remove_unnecessary(): def bake_translations(): - """Bakes all translations into a translations.py file inside the krux namespace""" - translation_table = {} + """ + Bakes individual translation tables into separate files inside the krux namespace + within a 'translations' subfolder. + """ + translations_dir = join(SRC_DIR, "krux", "translations") + + # Create the translations subfolder if it doesn't exist + if not isdir(translations_dir): + mkdir(translations_dir) + translation_filenames = [ f for f in listdir(TRANSLATION_FILES_DIR) if isfile(join(TRANSLATION_FILES_DIR, f)) ] translation_filenames.sort() + code_slugs = find_translation_slugs() + code_slugs = sorted(code_slugs) for translation_filename in translation_filenames: with open( join(TRANSLATION_FILES_DIR, translation_filename), "r", encoding="utf8" ) as translation_file: translations = json.load(translation_file) - lookup = {} - for slug, translation in list(translations.items()): - lookup[binascii.crc32(slug.encode("utf-8"))] = translation - translation_table[basename(translation_filename).split(".")[0]] = lookup - - with open( - join(SRC_DIR, "krux", "translations.py"), "w", encoding="utf8", newline="\n" - ) as translations: - translations.write( - """# The MIT License (MIT) - -# Copyright (c) 2021-2024 Krux contributors - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE.\n""" + translations_array = [] + for slug in code_slugs: + if slug not in translations: + translations_array.append(slug) + else: + translations_array.append(translations[slug]) + language_code = basename(translation_filename).split(".")[0][:2] + + # Write the individual translation array to a separate Python file + # in the 'translations' subfolder + with open( + join(translations_dir, f"{language_code}.py"), + "w", + encoding="utf8", + newline="\n", + ) as language_file: + language_file.write(KRUX_LICENSE) + language_file.write("# pylint: disable=C0301\n") + language_file.write("translation_array = ") + language_file.write(repr(translations_array)) + language_file.write("\n") + print("Baked: " + translations_dir + f"/{language_code}.py") + # Create an reference array for index lookup + reference_array = [] + for slug in code_slugs: + reference_array.append(binascii.crc32(slug.encode("utf-8"))) + # Create a file with a list of all available languages and index lookup array + with open(join(translations_dir, "__init__.py"), "w", encoding="utf8") as init_file: + init_file.write(KRUX_LICENSE) + init_file.write("available_languages = [") + init_file.write( + ", ".join([f'"{basename(f).split(".")[0]}"' for f in translation_filenames]) ) - translations.write("# pylint: disable=C0301\n") - translations.write("translation_table = ") - translations.write(repr(translation_table)) - translations.write("\n") - print("Baked " + SRC_DIR + "/krux/" + "translations.py") + init_file.write("]") + init_file.write("\n") + init_file.write("ref_array = ") + init_file.write(repr(reference_array)) + init_file.write("\n") def create_translation_file(locale): diff --git a/mkdocs.yml b/mkdocs.yml index 769ddfca..0ca1297e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -51,7 +51,7 @@ edit_uri: edit/main/docs docs_dir: docs site_dir: public extra: - latest_krux: krux-v24.09.beta10 + latest_krux: krux-v24.09.beta11 latest_installer: v0.0.2-alpha latest_installer_rpm: krux-installer-0.0.2_alpha-1.x86_64.rpm latest_installer_deb: krux-installer_0.0.2-alpha_amd64.deb diff --git a/poetry.lock b/poetry.lock index b5cecf6a..e70aba7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "astroid" -version = "3.2.2" +version = "3.3.3" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "astroid-3.2.2-py3-none-any.whl", hash = "sha256:e8a0083b4bb28fcffb6207a3bfc9e5d0a68be951dd7e336d5dcf639c682388c0"}, - {file = "astroid-3.2.2.tar.gz", hash = "sha256:8ead48e31b92b2e217b6c9733a21afafe479d52d6e164dd25fb1a770c7c3cf94"}, + {file = "astroid-3.3.3-py3-none-any.whl", hash = "sha256:2d79acfd3c594b6a2d4141fea98a1d62ab4a52e54332b1f1ddcf07b652cc5c0f"}, + {file = "astroid-3.3.3.tar.gz", hash = "sha256:63f8c5370d9bad8294163c87b2d440a7fdf546be6c72bbeac0549c93244dbd72"}, ] [package.dependencies] @@ -1131,17 +1131,17 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" -version = "3.2.5" +version = "3.3.0" description = "python code static checker" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "pylint-3.2.5-py3-none-any.whl", hash = "sha256:32cd6c042b5004b8e857d727708720c54a676d1e22917cf1a2df9b4d4868abd6"}, - {file = "pylint-3.2.5.tar.gz", hash = "sha256:e9b7171e242dcc6ebd0aaa7540481d1a72860748a0a7816b8fe6cf6c80a6fe7e"}, + {file = "pylint-3.3.0-py3-none-any.whl", hash = "sha256:02dce1845f68974b9b03045894eb3bf05a8b3c7da9fd10af4de3c91e69eb92f1"}, + {file = "pylint-3.3.0.tar.gz", hash = "sha256:c685fe3c061ee5fb0ce7c29436174ab84a2f525fce2a268b1986e921e083fe22"}, ] [package.dependencies] -astroid = ">=3.2.2,<=3.3.0-dev0" +astroid = ">=3.3.3,<=3.4.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, diff --git a/pyproject.toml b/pyproject.toml index dbf9db5e..ae9119e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ [tool.poetry] name = "krux" -version = "24.09.beta10" +version = "24.09.beta11" description = "Open-source signing device firmware for Bitcoin" authors = ["Jeff S "] diff --git a/src/boot.py b/src/boot.py index 6109627f..138e7652 100644 --- a/src/boot.py +++ b/src/boot.py @@ -24,6 +24,7 @@ import sys import time import gc +import os sys.path.append("") sys.path.append(".") @@ -44,6 +45,13 @@ def draw_splash(): def check_for_updates(): """Checks SD card, if a valid firmware is found asks if user wants to update the device""" + + # Check if the SD card is inserted and contains a firmware before loading the firmware module + try: + os.stat("/sd/firmware.bin") + except OSError: + return + from krux import firmware if firmware.upgrade(): diff --git a/src/krux/camera.py b/src/krux/camera.py index ee30e594..fae0743a 100644 --- a/src/krux/camera.py +++ b/src/krux/camera.py @@ -31,21 +31,26 @@ GC0328_ID = 0x9D # Dock GC2145_ID = 0x45 # Yahboom +COLOR_MODE = 0 +GRAYSCALE_MODE = 1 + class Camera: """Camera is a singleton interface for interacting with the device's camera""" def __init__(self): - self.initialized = False self.cam_id = None self.antiglare_enabled = False - self.initialize_sensor() + self.mode = None + try: + self.initialize_sensor() + sensor.run(0) + except Exception as e: + print("Camera not found:", e) def initialize_sensor(self, grayscale=False): """Initializes the camera""" - self.initialized = False self.antiglare_enabled = False - self.cam_id = sensor.get_id() if self.cam_id in (OV7740_ID, GC2145_ID): sensor.reset(freq=18200000) if board.config["type"] == "cube": @@ -54,9 +59,12 @@ def initialize_sensor(self, grayscale=False): sensor.set_vflip(1) else: sensor.reset() + self.cam_id = sensor.get_id() + self.mode = COLOR_MODE if grayscale and self.cam_id != GC2145_ID: # GC2145 does not support grayscale sensor.set_pixformat(sensor.GRAYSCALE) + self.mode = GRAYSCALE_MODE else: sensor.set_pixformat(sensor.RGB565) if self.cam_id == OV5642_ID: @@ -201,8 +209,13 @@ def snapshot(self): def initialize_run(self): """Initializes and runs sensor""" - self.initialize_sensor() + if self.mode is None: + raise ValueError("No camera found") + if self.mode != COLOR_MODE: + self.initialize_sensor() sensor.run(1) + if self.antiglare_enabled: + self.disable_antiglare() def stop_sensor(self): """Stops capturing from sensor""" diff --git a/src/krux/krux_settings.py b/src/krux/krux_settings.py index c8f02916..eabbae88 100644 --- a/src/krux/krux_settings.py +++ b/src/krux/krux_settings.py @@ -30,11 +30,11 @@ MAIN_TXT, TEST_TXT, ) -from .translations import translation_table from .key import SCRIPT_LONG_NAMES BAUDRATES = [1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200] +DEFAULT_LOCALE = "en-US" DEFAULT_TX_PIN = ( board.config["board_info"]["CONNEXT_A"] @@ -54,20 +54,69 @@ THERMAL_ADAFRUIT_TXT = "thermal/adafruit" -def translations(locale): - """Returns the translations map for the given locale""" - if locale in translation_table: - return translation_table[locale] - return None - - def t(slug): """Translates a slug according to the current locale""" + if not locale_control.translation: + return slug slug_id = binascii.crc32(slug.encode("utf-8")) - lookup = translations(Settings().i18n.locale) - if not lookup or slug_id not in lookup: + try: + translation_index = locale_control.reference.index(slug_id) + except: return slug - return lookup[slug_id] + return locale_control.translation[translation_index] + + +class LocaleControl: + """Manages the current locale and available translations""" + + def __init__(self): + self.reference = None + self.translation = None + self.locales = [] + self.update_locales() + + def update_locales(self): + """Updates the list of available locales""" + from .translations import available_languages + + self.locales = [] + self.locales.append(DEFAULT_LOCALE) + self.locales.extend(available_languages) + + def load_locale(self, locale): + """Loads translation based on the given locale""" + + if locale == DEFAULT_LOCALE: + self.reference = None + self.translation = None + return + module_path = "krux.translations.{}".format(locale[:2]) + translation_module = __import__(module_path) + # Navigate to the nested module (translations.) + for part in module_path.split(".")[1:]: + translation_module = getattr(translation_module, part) + + self.translation = getattr(translation_module, "translation_array") + if self.reference is None: + from .translations import ref_array + + self.reference = ref_array + + +locale_control = LocaleControl() + + +class I18nSettings(SettingsNamespace): + """I18n-specific settings""" + + namespace = "settings.i18n" + locale = CategorySetting("locale", DEFAULT_LOCALE, locale_control.locales) + + def label(self, attr): + """Returns a label for UI when given a setting name or namespace""" + return { + "locale": t("Locale"), + }[attr] class DefaultWallet(SettingsNamespace): @@ -89,22 +138,6 @@ def label(self, attr): }[attr] -class I18nSettings(SettingsNamespace): - """I18n-specific settings""" - - namespace = "settings.i18n" - DEFAULT_LOCALE = "en-US" - locale = CategorySetting( - "locale", DEFAULT_LOCALE, list(translation_table.keys()) + [DEFAULT_LOCALE] - ) - - def label(self, attr): - """Returns a label for UI when given a setting name or namespace""" - return { - "locale": t("Locale"), - }[attr] - - class ThermalSettings(SettingsNamespace): """Thermal printer settings""" @@ -420,3 +453,6 @@ def label(self, attr): } return main_menu[attr] + + +locale_control.load_locale(Settings().i18n.locale) diff --git a/src/krux/metadata.py b/src/krux/metadata.py index 63860fce..da978002 100644 --- a/src/krux/metadata.py +++ b/src/krux/metadata.py @@ -19,5 +19,5 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -VERSION = "24.09.beta10" +VERSION = "24.09.beta11" SIGNER_PUBKEY = "03339e883157e45891e61ca9df4cd3bb895ef32d475b8e793559ea10a36766689b" diff --git a/src/krux/pages/__init__.py b/src/krux/pages/__init__.py index da41ad50..ae0a0d34 100644 --- a/src/krux/pages/__init__.py +++ b/src/krux/pages/__init__.py @@ -24,6 +24,7 @@ import time import board import lcd +import _thread from .keypads import Keypad from ..themes import theme, WHITE, GREEN, DARKGREY from ..input import ( @@ -643,50 +644,51 @@ def draw_status_bar(self): STATUS_BAR_HEIGHT, theme.info_bg_color, ) - self.draw_battery_indicator() self.draw_network_indicator() self.draw_wallet_indicator() + if self.ctx.power_manager.has_battery(): + _thread.start_new_thread(self.draw_battery_indicator, ()) # self.draw_ram_indicator() # def draw_ram_indicator(self): # """Draws the amount of free RAM in the status bar +recently-collected""" + # def strnum(_in): - # large_units = ("","K","M") + # large_units = ("", "K", "M") # value = _in # for i in range(len(large_units)): # unit = large_units[i] # if value < 2**10: # break - # if i+1 < len(large_units): + # if i + 1 < len(large_units): # value /= 2**10 # if value == int(value): # fmt = "%d" + unit # else: - # if value < 1: - # fmt = "%0.3f" + unit - # elif value < 10: - # fmt = "%.2f" + unit - # elif value < 100: - # fmt = "%.1f" + unit - # else: - # fmt = "%d" + unit + # if value < 1: + # fmt = "%0.3f" + unit + # elif value < 10: + # fmt = "%.2f" + unit + # elif value < 100: + # fmt = "%.1f" + unit + # else: + # fmt = "%d" + unit # return fmt % value # pre_collect = gc.mem_free() # gc.collect() # post_collect = gc.mem_free() - # ram_text = "RAM: " + strnum(post_collect) + " +" + strnum(post_collect - pre_collect) + # ram_text = ( + # "RAM: " + strnum(post_collect) + " +" + strnum(post_collect - pre_collect) + # ) # self.ctx.display.draw_string(12, 0, ram_text, GREEN) def draw_battery_indicator(self): """Draws a battery icon with depletion proportional to battery voltage""" - if not self.ctx.power_manager.has_battery(): - return - charge = self.ctx.power_manager.battery_charge_remaining() if self.ctx.power_manager.usb_connected(): battery_color = theme.go_color diff --git a/src/krux/pages/home_pages/mnemonic_backup.py b/src/krux/pages/home_pages/mnemonic_backup.py index 26b892a7..15ddcfa8 100644 --- a/src/krux/pages/home_pages/mnemonic_backup.py +++ b/src/krux/pages/home_pages/mnemonic_backup.py @@ -202,7 +202,11 @@ def tiny_seed(self): tiny_seed.export() # Allow to print on thermal printer only - if Settings().hardware.printer.driver == THERMAL_ADAFRUIT_TXT: + if ( + Settings().hardware.printer.driver == THERMAL_ADAFRUIT_TXT + and self.ctx.camera.mode is not None + ): + # TinySeed printing requires a camera frame buffer to draw in. if self.print_prompt(t("Print Tiny Seed?")): tiny_seed.print_tiny_seed() return MENU_CONTINUE diff --git a/src/krux/pages/home_pages/sign_message_ui.py b/src/krux/pages/home_pages/sign_message_ui.py index 5641f36d..1315bdd6 100644 --- a/src/krux/pages/home_pages/sign_message_ui.py +++ b/src/krux/pages/home_pages/sign_message_ui.py @@ -20,11 +20,13 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -import gc -from embit import bip32, compact +from embit import bip32, compact, script +from embit.networks import NETWORKS import hashlib import binascii from .. import MENU_CONTINUE, LOAD_FROM_CAMERA, LOAD_FROM_SD, Menu +from ..utils import Utils +from ...key import SINGLESIG_SCRIPT_PURPOSE, P2PKH, P2WPKH, P2TR, P2SH_P2WPKH from ...themes import theme from ...display import ( DEFAULT_PADDING, @@ -41,159 +43,223 @@ SIGNED_FILE_SUFFIX, PUBKEY_FILE_EXTENSION, ) -from ..utils import Utils +from ...settings import TEST_TXT, MAIN_TXT + + +SD_MESSAGE_HEADER = "-----BEGIN BITCOIN SIGNED MESSAGE-----" +SD_SIGNATURE_HEADER = "-----BEGIN BITCOIN SIGNATURE-----" +SD_SIGNATURE_FOOTER = "-----END BITCOIN SIGNATURE-----" class SignMessage(Utils): """Message Signing user interface""" - def load_message(self): + def _load_message(self): """Loads a message from camera or SD card""" - load_method = self.load_method() - if load_method > LOAD_FROM_SD: - return (None, None, "") - if load_method == LOAD_FROM_CAMERA: from ..qr_capture import QRCodeCapture qr_capture = QRCodeCapture(self.ctx) data, qr_format = qr_capture.qr_capture_loop() return (data, qr_format, "") + if load_method == LOAD_FROM_SD: + message_filename, data = self.load_file(prompt=False) + return (data, FORMAT_NONE, message_filename) + return (None, None, "") + + def _is_valid_derivation_path(self, derivation_path): + """Checks if the derivation path is valid""" + try: + parts = derivation_path.split("/") + return parts[0] == "m" and all( + p[-1] in ("'hH") or p.isdigit() for p in parts[1:] + ) + except: + return False + + def get_network_from_path(self, derivation_path): + """Gets the network from the derivation path""" + parts = derivation_path.split("/") + if len(parts) < 2: + return None + + if parts[2] in ["0'", "0h", "0H"]: + return NETWORKS[MAIN_TXT] + if parts[2] in ["1'", "1h", "1H"]: + return NETWORKS[TEST_TXT] + return None - # If load_method == LOAD_FROM_SD - message_filename, data = self.load_file(prompt=False) - return (data, FORMAT_NONE, message_filename) - - def sign_at_address(self, data): - """Message signed at a derived Bitcoin address - Sparrow/Specter""" + def get_script_type_from_path(self, derivation_path): + """Gets the script type from the derivation path""" + parts = derivation_path.split("/") + if len(parts) < 2: + return None - if data.startswith(b"signmessage"): - data_blocks = data.split(b" ") - if len(data_blocks) >= 3: - derivation = data_blocks[1].decode() - message = b" ".join(data_blocks[2:]) - message = message.split(b":", 1) - if len(message) >= 2 and message[0] == b"ascii": - message = b" ".join(message[1:]) - derivation = bip32.parse_path(derivation) - self.ctx.display.clear() - address = self.ctx.wallet.descriptor.derive( - derivation[4], branch_index=0 - ).address(network=self.ctx.wallet.key.network) - short_address = self.fit_to_line( - address, str(derivation[4]) + ". ", fixed_chars=3 - ) - - # Maximum lines available for message - max_lines = TOTAL_LINES - if MINIMAL_DISPLAY: - max_lines -= 7 - else: - max_lines -= 10 - - offset_y = DEFAULT_PADDING - offset_y += ( - self.ctx.display.draw_hcentered_text( - t("Message:"), offset_y, theme.highlight_color - ) - * FONT_HEIGHT - ) - offset_y += ( - self.ctx.display.draw_hcentered_text( - message.decode(), offset_y, max_lines=max_lines - ) - + 1 - ) * FONT_HEIGHT - offset_y += ( - self.ctx.display.draw_hcentered_text( - t("Address") + ":", offset_y, theme.highlight_color - ) - * FONT_HEIGHT - ) - self.ctx.display.draw_hcentered_text(short_address, offset_y) - if not self.prompt(t("Sign?"), BOTTOM_PROMPT_LINE): - return "" - message_hash = hashlib.sha256( - hashlib.sha256( - b"\x18Bitcoin Signed Message:\n" - + compact.to_bytes(len(message)) - + message - ).digest() - ).digest() - sig = self.ctx.wallet.key.sign_at(derivation, message_hash) - - # Encode sig as base64 string - encoded_sig = base_encode(sig, 64).strip().decode() - self.ctx.display.clear() - self.ctx.display.draw_centered_text( - t("Signature") + ":\n\n%s" % encoded_sig - ) - self.ctx.input.wait_for_button() - return sig + script_from_deriv = int(parts[1].strip("'hH")) + for script_name, script_number in SINGLESIG_SCRIPT_PURPOSE.items(): + if script_number == script_from_deriv: + return script_name return None - def sign_standard_message(self, data): - """Signs a standard message""" - message_hash = None - if len(data) == 32: - # It's a sha256 hash already - message_hash = data + def get_bitcoin_address(self, derivation_path, script_type=""): + """Gets the Bitcoin address from the derivation path""" + + network = self.get_network_from_path(derivation_path) + if not script_type: + script_type = self.get_script_type_from_path(derivation_path) + path = bip32.parse_path(derivation_path) + child_key = self.ctx.wallet.key.root.derive(path) + pubkey = child_key.to_public() + + # Generate the Bitcoin address based on the script type + if script_type == P2WPKH: + p2wpkh_script = script.p2wpkh(pubkey) + addr = p2wpkh_script.address(network=network) + elif script_type == P2PKH: + p2pkh_script = script.p2pkh(pubkey) + addr = p2pkh_script.address(network=network) + elif script_type == P2SH_P2WPKH: + p2wpkh_script = script.p2wpkh(pubkey) + p2sh_script = script.p2sh(p2wpkh_script) + addr = p2sh_script.address(network=network) + elif script_type == P2TR: + taproot_script = script.p2tr(pubkey) + addr = taproot_script.address(network=network) else: - if len(data) == 64: - # It may be a hex-encoded sha256 hash - try: - message_hash = binascii.unhexlify(data) - except: - pass - if message_hash is None: - # It's a message, so compute its sha256 hash - message_hash = hashlib.sha256(data).digest() - - # memory management - del data - gc.collect() + raise ValueError("Unsupported script type: %s" % script_type) - self.ctx.display.clear() - self.ctx.display.draw_centered_text( - "SHA256:\n%s" % binascii.hexlify(message_hash).decode() + return addr + + def _sign_at_address(self, message, derivation_str, address=""): + """Signs a message at a derived Bitcoin address""" + + derivation = bip32.parse_path(derivation_str) + self._display_message_sign_prompt( + message, self.fit_to_line(address, str(derivation[4]) + ". ", fixed_chars=3) ) + if not self.prompt(t("Sign?"), BOTTOM_PROMPT_LINE): - return "" + return None + + message_hash = hashlib.sha256( + hashlib.sha256( + b"\x18Bitcoin Signed Message:\n" + + compact.to_bytes(len(message)) + + message + ).digest() + ).digest() + + sig = self.ctx.wallet.key.sign_at(derivation, message_hash) + self._display_signature(base_encode(sig, 64).strip().decode()) + return sig - # User confirmed to sign! - sig = self.ctx.wallet.key.sign(message_hash).serialize() + def _display_message_sign_prompt(self, message, address): + """Helper to display message and address for signing""" + max_lines = TOTAL_LINES - (7 if MINIMAL_DISPLAY else 10) + offset_y = DEFAULT_PADDING + self.ctx.display.clear() + + offset_y += ( + self.ctx.display.draw_hcentered_text( + t("Message:"), offset_y, theme.highlight_color + ) + * FONT_HEIGHT + ) + offset_y += ( + self.ctx.display.draw_hcentered_text( + message.decode(), offset_y, max_lines=max_lines + ) + + 1 + ) * FONT_HEIGHT + offset_y += ( + self.ctx.display.draw_hcentered_text( + t("Address") + ":", offset_y, theme.highlight_color + ) + * FONT_HEIGHT + ) + self.ctx.display.draw_hcentered_text(address, offset_y) - # Encode sig as base64 string - encoded_sig = base_encode(sig, 64).decode() + def _display_signature(self, encoded_sig): + """Helper to display the signature""" self.ctx.display.clear() self.ctx.display.draw_centered_text(t("Signature") + ":\n\n%s" % encoded_sig) self.ctx.input.wait_for_button() - return sig - def sign_message(self): - """Sign message user interface""" + def _sign_at_address_from_qr(self, data): + """Message signed at a derived Bitcoin address - Sparrow/Specter""" - # Load a Message - data, qr_format, message_filename = self.load_message() + if not data.startswith(b"signmessage"): + return None - if data is None: - self.flash_error(t("Failed to load message")) - return MENU_CONTINUE + data_blocks = data.split(b" ") + derivation = data_blocks[1].decode() + if len(data_blocks) < 3 or not self._is_valid_derivation_path(derivation): + return None - # message read OK! - data = data.encode() if isinstance(data, str) else data + message = b" ".join(data_blocks[2:]).split(b":", 1) + if len(message) < 2 or message[0] != b"ascii": + return None - sign_at_address = False - sig = self.sign_at_address(data) - if sig is None: # Not a message to sign at an address - sig = self.sign_standard_message(data) - else: - sign_at_address = True - if sig == "": # If user declined to sign - return MENU_CONTINUE + address = self.get_bitcoin_address(derivation) + signature = self._sign_at_address(b" ".join(message[1:]), derivation, address) + + return signature, message[1].decode(), address + + def _sign_at_address_from_sd(self, data): + """Message signed at a derived Bitcoin address - SD card""" + data = data.decode() if isinstance(data, bytes) else data + lines = [line.strip() for line in data.splitlines() if line.strip()] + script_type = lines[-1].lower() + if len(lines) < 2 or script_type not in SINGLESIG_SCRIPT_PURPOSE: + return None + derivation_path = lines[-2] + if not self._is_valid_derivation_path(derivation_path): + return None + address = self.get_bitcoin_address(derivation_path, script_type) + message = "\n".join(lines[:-2]) + signature = self._sign_at_address(message.encode(), derivation_path, address) + + return signature, message, address + + def sign_standard_message(self, data): + """Signs a standard message""" + message_hash = self._compute_message_hash(data) + if message_hash is None: + return "" + self.ctx.display.clear() + self.ctx.display.draw_centered_text( + "SHA256:\n%s" % binascii.hexlify(message_hash).decode() + ) + if not self.prompt(t("Sign?"), BOTTOM_PROMPT_LINE): + return "" + + sig = self.ctx.wallet.key.sign(message_hash).serialize() + self._display_signature(base_encode(sig, 64).strip().decode()) + return sig + + def _compute_message_hash(self, data): + """Computes the hash for the message""" + if len(data) == 32: + return data + if len(data) == 64: + try: + return binascii.unhexlify(data) + except: + pass + return hashlib.sha256(data).digest() + + def _export_signature( + self, + sig, + qr_format=FORMAT_NONE, + message_filename="", + message="", + address="", + ): + """Exports the message signature to a QR code or SD card""" sign_menu = Menu( self.ctx, [ @@ -207,49 +273,94 @@ def sign_message(self): ) index, _ = sign_menu.run_loop() - if index == 2: # Back + if index == 2: return MENU_CONTINUE pubkey = binascii.hexlify(self.ctx.wallet.key.account.sec()).decode() if index == 0: - # Show the base64 signed message as a QRCode - title = t("Signed Message") - encoded_sig = base_encode(sig, 64).strip().decode() - self.display_qr_codes(encoded_sig, qr_format, title) - self.print_standard_qr(encoded_sig, qr_format, title) - - if not sign_at_address: - # Show the public key as a QRCode - self.ctx.display.clear() - title = t("Hex Public Key") - self.ctx.display.draw_centered_text(title + ":\n\n%s" % pubkey) - self.ctx.input.wait_for_button() - - # Show the public key in hexadecimal format as a QRCode - self.display_qr_codes(pubkey, qr_format, title) - self.print_standard_qr(pubkey, qr_format, title) - return MENU_CONTINUE + at_address = address != "" + self._export_to_qr(sig, pubkey, qr_format, at_address) + elif self.has_sd_card(): + self._export_to_sd(sig, pubkey, message_filename, message, address) + return MENU_CONTINUE + + def _export_to_qr(self, sig, pubkey, qr_format, at_address=False): + """Exports the signature and public key to QR code""" + encoded_sig = base_encode(sig, 64).strip().decode() + title = t("Signed Message") + self.display_qr_codes(encoded_sig, qr_format, title) + self.print_standard_qr(encoded_sig, qr_format, title) - # If index == 1 save the signature file on the SD card - if self.has_sd_card(): - from ..file_operations import SaveFile + if not at_address: + self._display_and_export_pubkey(pubkey, qr_format) + + def _display_and_export_pubkey(self, pubkey, qr_format): + """Displays and exports the public key as QR code""" + title = t("Hex Public Key") + self.ctx.display.clear() + self.ctx.display.draw_centered_text(title + ":\n\n%s" % pubkey) + self.ctx.input.wait_for_button() + + self.display_qr_codes(pubkey, qr_format, title) + self.print_standard_qr(pubkey, qr_format, title) + + def _export_to_sd(self, sig, pubkey, message_filename, message="", address=""): + """Exports the signature and public key to SD card""" + from ..file_operations import SaveFile + + save_page = SaveFile(self.ctx) + if address: + file_content = "" + file_content = SD_MESSAGE_HEADER + "\n" + file_content += message + "\n" + file_content += SD_SIGNATURE_HEADER + "\n" + file_content += address + "\n" + file_content += base_encode(sig, 64).strip().decode() + "\n" + file_content += SD_SIGNATURE_FOOTER + else: + file_content = sig + extension = ".txt" if address else SIGNATURE_FILE_EXTENSION + save_page.save_file( + file_content, + "message", + message_filename, + t("Signature") + ":", + extension, + SIGNED_FILE_SUFFIX, + prompt=False, + ) - save_page = SaveFile(self.ctx) + if not address: + title = t("Hex Public Key") save_page.save_file( - sig, - "message", - message_filename, - t("Signature") + ":", - SIGNATURE_FILE_EXTENSION, - SIGNED_FILE_SUFFIX, + pubkey, "pubkey", "", title + ":", PUBKEY_FILE_EXTENSION, "", False ) - if not sign_at_address: - # Save the public key on the SD card - title = t("Hex Public Key") - save_page.save_file( - pubkey, "pubkey", "", title + ":", PUBKEY_FILE_EXTENSION, "", False + def sign_message(self): + """Sign message user interface""" + data, qr_format, message_filename = self._load_message() + + if data is None: + self.flash_error(t("Failed to load message")) + return MENU_CONTINUE + + if message_filename: + signature_data = self._sign_at_address_from_sd(data) + if signature_data: + sig, message, address = signature_data + self._export_signature( + sig, FORMAT_NONE, message_filename, message, address ) + return MENU_CONTINUE + data = data.encode() if isinstance(data, str) else data + signature_data = self._sign_at_address_from_qr(data) + if signature_data: + sig, message, address = signature_data + self._export_signature(sig, qr_format, message_filename, message, address) + return MENU_CONTINUE + sig = self.sign_standard_message(data) + if sig: + self._export_signature(sig, qr_format, message_filename) return MENU_CONTINUE diff --git a/src/krux/pages/qr_capture.py b/src/krux/pages/qr_capture.py index 637742eb..8f9bdc1a 100644 --- a/src/krux/pages/qr_capture.py +++ b/src/krux/pages/qr_capture.py @@ -22,6 +22,7 @@ import board import time from . import Page +from ..display import FONT_HEIGHT from ..input import PRESSED from ..themes import theme from ..qr import QRPartParser, FORMAT_UR @@ -58,6 +59,14 @@ def anti_glare_control(self): else: self.ctx.display.draw_centered_text(t("Anti-glare disabled")) time.sleep_ms(ANTI_GLARE_WAIT_TIME) + # Erase the message from the screen + self.ctx.display.fill_rectangle( + 0, + (self.ctx.display.height() - FONT_HEIGHT) // 2, + self.ctx.display.width(), + FONT_HEIGHT, + theme.bg_color, + ) self.ctx.display.to_landscape() self.ctx.input.reset_ios_state() diff --git a/src/krux/pages/settings_page.py b/src/krux/pages/settings_page.py index 06551dd8..fe56e7e1 100644 --- a/src/krux/pages/settings_page.py +++ b/src/krux/pages/settings_page.py @@ -40,6 +40,7 @@ TouchSettings, ButtonsSettings, t, + locale_control, ) from ..input import BUTTON_ENTER, BUTTON_PAGE, BUTTON_PAGE_PREV, BUTTON_TOUCH from ..sd_card import SDHandler @@ -289,6 +290,8 @@ def category_setting(self, settings_namespace, setting): new_category = categories[(i - 1) % len(categories)] setting.__set__(settings_namespace, new_category) break + if setting.attr == "locale": + locale_control.load_locale(new_category) if setting.attr == "theme": theme.update() if setting.attr == "brightness": diff --git a/src/krux/qr.py b/src/krux/qr.py index ea25ad7f..dba53085 100644 --- a/src/krux/qr.py +++ b/src/krux/qr.py @@ -348,8 +348,10 @@ def detect_format(data): """Detects the QR format of the given data""" qr_format = FORMAT_NONE try: - if data.startswith("p") and data.index("of") <= 5: - qr_format = FORMAT_PMOFN + if data.startswith("p"): + header = data.split(" ")[0] + if "of" in header and header[1:].split("of")[0].isdigit(): + qr_format = FORMAT_PMOFN elif data.lower().startswith("ur:"): qr_format = FORMAT_UR elif data.startswith("B$"): diff --git a/src/krux/translations.py b/src/krux/translations.py deleted file mode 100644 index cc4b7f82..00000000 --- a/src/krux/translations.py +++ /dev/null @@ -1,2974 +0,0 @@ -# The MIT License (MIT) - -# Copyright (c) 2021-2024 Krux contributors - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# pylint: disable=C0301 -translation_table = { - "de-DE": { - 232475068: "% des Betrags.", - 1185266064: "%d von %d Multisig", - 1503087751: "%d bis %d ", - 1178563089: "%s wurde entfernt.", - 1092222515: "(%d insgesamt)", - 3348584292: "(Experimental)", - 1099786887: "(nur zur Betrachtung)", - 2739590230: "12 Wörter", - 1310058127: "24 Wörter", - 1949634023: "Über", - 4287534872: "Annahme akzeptieren?", - 2995482424: "Konto", - 2415648848: "Konto #0 würde angenommen", - 1043817877: "Kontoindex", - 3439746594: "Wallet-Passphrase hinzufügen oder ändern?", - 2143824150: "Zusätzliche Entropie von der Kamera für den AES-CBC-Modus erforderlich", - 3270727197: "Adresse", - 900375497: "Richte Kamera und Sicherungsplatte richtig aus.", - 88746165: "Blendschutz deaktiviert", - 1521033296: "Blendschutz aktiviert", - 3857613120: "Aussehen", - 1056821534: "Bist Du sicher?", - 1868069640: "BGR-Farben", - 3455872521: "Zurück", - 4151330982: "Zurück zum Menü", - 2756316330: "Mnemonik-Backup", - 2256777600: "Ungültige Signatur", - 3937333362: "Baudrate", - 2046615409: "Binäres Gitter", - 928727036: "Randpolsterung", - 2519455027: "Helligkeit", - 2363604010: "Tasten", - 2038226551: "Entprellung der Tasten", - 3138204438: "Aufnahme abgebrochen", - 1207696150: "Change Adresse", - 3126552510: "Change Adressen", - 1583186953: "Thema ändern und neu starten?", - 3768416405: "Change:", - 388908871: "Änderungen bleiben bis zum Herunterfahren bestehen.", - 3442025874: "Prüfe SD-Karte", - 3119547911: "Überprüfen, ob diese Adresse zu dieser Wallet gehört?", - 1187826970: "Überprüfte %d Adresse ohne Übereinstimmungen.", - 2470115694: "Suche nach SD-Karte..", - 1851578965: "Untergeordneter Index", - 4094072796: "Erstelle QR-Code", - 167798282: "QR-Code aus Text erzeugen?", - 678449760: "Erstellt:", - 3513215254: "Benutzerdefinierte QR-Code", - 3585411775: "Anpassen", - 534274978: "Wenn Sie Ihr Wallet anpassen, wird ein neuer Schlüssel generiert.", - 124617190: "Schnitttiefe", - 597912140: "Cut-Methode", - 2504034831: "Dezimal", - 2751113454: "Entschlüsseln?", - 1272005728: "Standard-Wallet", - 4102535566: "Tiefe pro Durchgang", - 1712856005: "Deskriptor-Adressen", - 3278654271: "Bildschirm", - 3895447625: "Schalten Sie das Gerät nicht aus, es kann eine Weile dauern.", - 3836852788: "Fertig?", - 690625786: "Doppelte Gedächtnisstütze", - 382368239: "Driver", - 3582575312: "Verschlüsselt", - 1244124409: "Verschlüsselter QR-Code", - 2968548114: "Verschlüsselte Mnemonic wurde nicht gespeichert", - 781419966: "Speicherung der verschlüsselten Mnemonic mit ID:", - 350279787: "Verschlüsselung", - 2601598799: "Verschlüsselungsmodus", - 1821513079: "Geben Sie %d BIP-39 Wörter ein.", - 3504179008: "Gib jedes Wort Deiner BIP-39 Mnemonic als Zahl von 1 bis 2048 ein.", - 1100685007: "Gib jedes Wort Deiner BIP-39 Mnemonic als Hexadezimalzahl von 1 bis 800 ein.", - 4090266642: "Gib jedes Wort Deiner BIP-39 Mnemonic als Oktalzahl von 1 bis 4000 ein.", - 2780625730: "Gib jedes Wort Deiner BIP-39 Mnemonic ein.", - 889040671: "Fehler:", - 1505332462: "Esc", - 3838465623: "Dateien durchsuchen?", - 4170881190: "Auf SD-Karte exportieren..", - 1711312434: "Öffentlicher Schlüssel", - 3981762528: "Werkeinstellungen", - 383371114: "Entschlüsselung fehlgeschlagen", - 3048830188: "PSBT konnte nicht geladen werden", - 4192663412: "Adresse konnte nicht geladen werden", - 1996021743: "Schlüssel konnte nicht geladen werden", - 1108715658: "Nachricht konnte nicht geladen werden", - 1081425878: "Mnemonic konnte nicht geladen werden", - 928667220: "Ausgabedeskriptor konnte nicht geladen werden", - 1620572516: "Passphrase konnte nicht geladen werden", - 2946146830: "Mnemonic konnte nicht gespeichert werden", - 262248294: "Gebühr:", - 104500973: "Vorschubgeschwindigkeit", - 3313339187: "Dateiname", - 1982637349: "Dateiname %s existiert auf SD-Karte, überschreiben?", - 4006602858: "Fingerabdruck in PSBT deaktiviert", - 2542772894: "Die Firmware übersteigt die maximale Größe: %d", - 3748840176: "Umgedrehte X-Koordinaten", - 1406590538: "Flötendurchmesser", - 1077771640: "Frei:", - 1893243331: "Vom Speicher", - 1871146425: "Löschen Sie Ihre SD-Karte vollständig in einem anderen Gerät, um sicherzustellen, dass die Daten nicht wiederhergestellt werden können", - 3549015533: "Mnemonik erzeugen", - 3524220994: "BIP85-Untermnemonik generieren?", - 299338213: "Dieser Mnemonic eine benutzerdefinierte ID zuteilen? Andernfalls wird der aktuelle Fingerabdruck verwendet", - 602716148: "Go", - 1198393582: "Gute Entropie", - 133139382: "Hardware", - 3580020863: "Hex öffentlicher Schlüssel", - 2691246967: "Hexadezimal", - 3903754133: "Mnemonics ausblenden", - 3876651191: "Hohe Gebühren!", - 2880010062: "ID existiert bereits", - 3242179508: "Input (%d):", - 3034883011: "Installieren?", - 3755547839: "Unzureichende Entropie!", - 2032416055: "Unzureichende Entropie", - 2585599782: "Ungültige Adresse", - 2874529150: "Ungültiger Bootloader", - 4093416954: "Ungültige mnemonische Lange", - 1422874211: "Ungültiger öffentlicher Schlüssel", - 237577215: "Ungültige Wallet:", - 4122897393: "Umkehren", - 640219121: "Invertierte Farben", - 3000888649: "Schlüssel", - 3264569915: "Schlüssel wurde nicht zur Verfügung gestellt", - 3835918229: "Krux Drucker Test-QR", - 911419226: "LCD-Typ", - 766317539: "Sprache", - 4180141032: "Lassen Sie das Feld leer, wenn Sie möchten, dass Krux ein gültiges letztes Wort auswählt", - 3663022166: "Links", - 972436696: "Leitungsverzögerung", - 2176866982: "Linie:", - 2820726296: "Mnemonic laden", - 2369474953: "Wallet laden", - 2256441194: "Einen vertrauenswürdigen Wallet-Deskriptor laden, um Adressen anzuzeigen?", - 237136240: "Von SD-Karte laden", - 879727077: "Von SD-Karte laden?", - 1936877965: "Von der Kamera laden", - 669106195: "Eine laden?", - 3330705289: "Laden?", - 2596531078: "Lade Kamera..", - 2488179069: "Lade Change Adressen..", - 336702608: "Drucker wird geladen..", - 1201104769: "Lade Empfangsadressen..", - 3159494909: "Wird geladen..", - 1177338798: "Spracheinstellung", - 2817059741: "Speicherort", - 2917810189: "Maximale Länge überschritten (%s)", - 2030045667: "Nachricht", - 762611188: "Nachricht:", - 3928301843: "Fehlende Signaturdatei", - 1948316555: "Mnemonic", - 2123991188: "Mnemonische ID", - 1443208255: "Mnemotechnik und Passphrase werden beibehalten.", - 1746030071: "Mnemonic wurde nicht verschlüsselt", - 1237332019: "Geändert:", - 1845376098: "Multisig", - 4265479636: "Native Segwit - 84 würde angenommen", - 2939797024: "Netzwerk", - 73574491: "Neue Mnemonic", - 3634967631: "Neue Firmware erkannt.", - 4063104189: "Nein", - 2325721074: "Keine Passphrase", - 4092516657: "Nicht genug Würfe!", - 3089363813: "Zahlen", - 1577637745: "Oktal", - 391304453: "Andere Formate", - 3312581301: "PBKDF2-Iter.", - 995862913: "Male gestanzte Punkte schwarz an, damit sie erkannt werden können.", - 2987800462: "Papierbreite", - 3913146360: "Teil", - 3559456868: "Teilegröße", - 4249903283: "Passphrase", - 3745269737: "Pfad stimmt nicht überein", - 500286397: "Muster erkannt!", - 3040011773: "Alle gespeicherten verschlüsselten Mnemoniken und Einstellungen dauerhaft vom Flash-Speicher entfernen?", - 140802882: "Speicher", - 2578106186: "Pixelabweichungsindex:", - 1703779997: "Klartext-QR", - 3561756278: "Bitte lade einen Wallet Ausgabedeskriptor", - 784609464: "Tauchrate", - 3761518438: "Schlechte Entropie", - 3639136476: "Schlechte Entropie erkannt!", - 3037062877: "Drucke Test-QR", - 2362732578: "Tiny Seed drucken?", - 3123770978: "Als QR-Code drucken", - 3345150514: "Als QR-Code drucken?", - 3339507095: "Drucken?", - 1123106929: "Drucker", - 3903571079: "Druckertreiber nicht gesetzt!", - 3586624216: "Wird gedruckt..", - 3593149291: "Trotzdem fortfahren?", - 2580599003: "Weiter?", - 3108881025: "Wird bearbeitet..", - 1848310591: "QR-Code", - 710709610: "RX Pin", - 2697857197: "Empfangen", - 1746677167: "Empfangsadresse", - 1658501467: "Region:", - 3739634002: "Löschen %s?", - 1476462492: "Mnemonic löschen", - 1557093280: "Firmware-Dateien von der SD-Karte entfernen?", - 2817311427: "Res. - Format", - 2365886561: "Werkseinstellungen wiederherstellen und neu starten?", - 3091105710: "Zurück zum QR-Viewer", - 1662254634: "Überprüfe gescannte Daten und bearbeite sie bei Bedarf", - 1963678224: "Rechts", - 770350922: "Würfel mindestens %d Mal, um eine Mnemonic zu erzeugen.", - 3271055013: "Rollenverteilung:", - 432366011: "Würfe:", - 3976793317: "SD-Karte", - 2736513298: "SD-Karte nicht erkannt.", - 1166743226: "SHA256 der Würfe:", - 817419367: "SHA256 des Snapshots:", - 699906428: "QR-Bild auf SD-Karte speichern", - 2163347007: "Auf SD-Karte speichern?", - 3531742595: "Auf SD-Karte speichern?", - 2940025484: "Auf SD-Karte gespeichert", - 763824768: "Skala", - 4117455079: "Adresse\nscannen", - 4038076821: "Scan BIP39 Passphrase", - 923277590: "Schlüssel QR-Code Scannen", - 4006316572: "Wörter 1-12 erneut scannen", - 2736506158: "Wörter 13-24 scannen", - 2029624154: "Bildschirmschonerzeit", - 289960586: "Script-Art", - 1022211991: "Sicherheit", - 4255182430: "Selbstübertragung oder Change (%d):", - 3753172956: "Selbstübertragung:", - 473154195: "Einstellungen", - 563836138: "Die Einstellungen werden intern auf Flash gespeichert.", - 712533907: "Einstellungen auf SD-Karte gespeichert.", - 2377955518: "Shannons Entropie:", - 1825881236: "Ausschalten", - 3656120779: "Abschaltzeit:", - 2120776272: "Herunterfahren..", - 1061961408: "Signieren", - 2293863356: "Am QR-Code unterschreiben", - 2879966040: "Auf SD-Karte signieren", - 4282338366: "Signieren?", - 746161122: "Signatur", - 1988416729: "Signierte Nachricht", - 3672006076: "Signierte PSBT", - 3406791302: "Unterschreiben..", - 2281377987: "Single-Sig", - 2019512665: "Größe:", - 2344747135: "Einige Schecks können nicht durchgeführt werden.", - 2090568351: "Ausgabe (%d):", - 1260825919: "Ausgaben:", - 1232757391: "Statistiken für Nerds", - 3303592908: "Auf Flash speichern", - 720041451: "Auf der SD-Karte speichern", - 3514476519: "Wischen um den Modus zu ändern", - 1898550184: "TOUCH oder ENTER zum Erfassen", - 4228215415: "TX Pin", - 2612594937: "Text", - 1454688268: "Thema", - 1180180513: "Thermisch", - 2258131455: "Um sicherzustellen, dass die Daten nicht wiederhergestellt werden können, verwenden Sie die Funktion 'Gerät löschen'", - 2700207481: "Helligkeit umschalten", - 725348723: "Werkzeuge", - 3684696112: "Berühre Schwellenwert", - 2978718564: "Touchscreen", - 2732611775: "Weiter versuchen?", - 401829098: "BIP39 Passphrase eingeben", - 2061556020: "Schlüssel eingeben", - 2089395053: "Einheit", - 2786714360: "Upgrade abgeschlossen.", - 2674953168: "Verwende eine schwarze Hintergrundfläche.", - 2402455261: "Verwende die Entropie der Kamera, um eine neue Mnemonic zu erstellen", - 3336226318: "Belegt:", - 4003084591: "Wert %S außerhalb des Bereichs: [ %s, %s]", - 989428076: "Der Wert muss ein Vielfaches von %s sein", - 3429519584: "Überprüfung..", - 1889659487: "Version", - 4191058607: "Via Kamera", - 1254681955: "Via D20", - 525309547: "Via D6", - 590330112: "Via manueller Eingabe", - 1947603760: "Via Wörter", - 2504354847: "Warte auf die Erfassung", - 2076481321: "Wallet", - 2297028319: "Wallet-Deskriptor", - 4232654916: "Wallet Ausgabedeskriptor", - 2587172867: "Wallet Ausgabedeskriptor geladen!", - 2499782468: "Wallet Ausgabedeskriptor nicht gefunden.", - 2671738224: "Warnung:", - 262410364: "Gerät löschen", - 3522794335: "Gerät wird gewischt..", - 797660533: "Wort %d", - 3742424146: "Wortnummern", - 2965123464: "Wörter", - 1303016265: "Ja", - 2171149824: "ist eine gültige Adresse!", - 1875891934: "wurde in den ersten %d Adressen nicht gefunden", - }, - "es-MX": { - 232475068: "% del monto.", - 1185266064: "%d de %d multisig", - 1503087751: "%d a %d", - 1178563089: "%s eliminado.", - 1092222515: "(%d total)", - 3348584292: "(Experimental)", - 1099786887: "(Solo para observación)", - 2739590230: "12 palabras", - 1310058127: "24 palabras", - 1949634023: "Nosotros", - 4287534872: "¿Aceptar la suposición?", - 2995482424: "Cuenta", - 2415648848: "Se supondría que la cuenta #0", - 1043817877: "Índice de la cuenta", - 3439746594: "¿Añadir o cambiar passphrase de la cartera?", - 2143824150: "Se requiere entropía adicional de la cámara para el modo AES-CBC", - 3270727197: "Dirección", - 900375497: "Alinea la cámara y la placa de respaldo correctamente.", - 88746165: "Anti-reflejo desactivado", - 1521033296: "Anti-reflejo habilitado", - 3857613120: "Apariencia", - 1056821534: "¿Estás seguro?", - 1868069640: "Colores BGR", - 3455872521: "Atrás", - 4151330982: "Volver al Menú", - 2756316330: "Backup del Mnemónico", - 2256777600: "Firma incorrecta", - 3937333362: "Baudrate", - 2046615409: "Cuadrícula binaria", - 928727036: "Grosor del Borde", - 2519455027: "Brillo", - 2363604010: "Botones", - 2038226551: "Rebote de Botones", - 3138204438: "Captura cancelada", - 1207696150: "Cambio", - 3126552510: "Direcciones de Cambio", - 1583186953: "¿Cambiar de tema y reiniciar?", - 3768416405: "Cambio:", - 388908871: "Los cambios durarán hasta que el dispositivo se apague.", - 3442025874: "Verifica Tarjeta SD", - 3119547911: "¿Verificar que la dirección pertenece a esta cartera?", - 1187826970: "Comprobado %d direcciones sin coincidencias.", - 2470115694: "Comprobación de la tarjeta SD..", - 1851578965: "Índice Derivado", - 4094072796: "Crear Código QR", - 167798282: "¿Crear código QR desde texto?", - 678449760: "Creado:", - 3513215254: "Código QR Personalizado", - 3585411775: "Personalizar", - 534274978: "Personalizar tu cartera generará una nueva clave", - 124617190: "Profundidad de Corte", - 597912140: "Método de Corte", - 2504034831: "Decimal", - 2751113454: "¿Descifrar?", - 1272005728: "Cartera Predeterminada", - 4102535566: "Profundidad por Pasada", - 1712856005: "Direcciones del descriptor", - 3278654271: "Pantalla", - 3895447625: "No apagues el dispositivo, puede tardar un tiempo en completarse.", - 3836852788: "¿Listo?", - 690625786: "Doble mnemónico", - 382368239: "Operador", - 3582575312: "Cifrado", - 1244124409: "Código QR Cifrado", - 2968548114: "Mnemónico cifrado no se almacenó", - 781419966: "Mnemónico cifrado fue almacenado con ID:", - 350279787: "Cifrado", - 2601598799: "Modo de Cifrado", - 1821513079: "Ingrese %d palabras BIP-39.", - 3504179008: "Ingresa cada palabra de tu mnemónico BIP-39 como un número del 1 al 2048.", - 1100685007: "Ingresa cada palabra de tu mnemónico BIP-39 como un número en hexadecimal del 1 al 800.", - 4090266642: "Ingresa cada palabra de tu mnemónico BIP-39 como un número en octal del 1 al 4000.", - 2780625730: "Ingresa cada palabra de tu mnemónico BIP-39.", - 889040671: "Error:", - 1505332462: "Esc", - 3838465623: "¿Explorar archivos?", - 4170881190: "Exportando a la tarjeta SD..", - 1711312434: "Clave Pública Extendida", - 3981762528: "Ajustes de Fábrica", - 383371114: "Error al descifrar", - 3048830188: "No se pudo cargar la PSBT", - 4192663412: "No se pudo cargar la dirección", - 1996021743: "No se pudo cargar la clave", - 1108715658: "No se pudo cargar el mensaje", - 1081425878: "No se pudo importar el mnemónico", - 928667220: "No se pudo cargar el descriptor de salida", - 1620572516: "No se pudo cargar el passphrase", - 2946146830: "No pudo almacenar mnemónico", - 262248294: "Comisión:", - 104500973: "Feed Rate", - 3313339187: "Nombre del Archivo", - 1982637349: "El nombre de archivo %s existe en la tarjeta SD, ¿sobrescribir?", - 4006602858: "Huella dactilar no establecida en PSBT", - 2542772894: "El firmware supera el tamaño máximo: %d", - 3748840176: "Coordenadas X Invertidas", - 1406590538: "Diámetro de la Flauta", - 1077771640: "Libre:", - 1893243331: "Desde el Almacenamiento", - 1871146425: "Borra completamente su tarjeta SD en otro dispositivo para asegurarse de que los datos sean irrecuperables", - 3549015533: "Generar Mnemónico", - 3524220994: "¿Generar un mnemónico derivado BIP85?", - 299338213: "¿Darle a este mnemónico una identificación personalizada? De lo contrario se utilizará el fingerprint actual", - 602716148: "Ir", - 1198393582: "Buena entropía", - 133139382: "Hardware", - 3580020863: "Clave Pública Hexadecimal", - 2691246967: "Hexadecimal", - 3903754133: "Ocultar Mnemónicos", - 3876651191: "¡Tarifas altas!", - 2880010062: "ID ya existe", - 3242179508: "Entradas (%d):", - 3034883011: "¿Instalar?", - 3755547839: "¡Entropía Insuficiente!", - 2032416055: "Entropía insuficiente", - 2585599782: "Dirección inválida", - 2874529150: "Bootloader inválido", - 4093416954: "Longitud mnemónica no válida", - 1422874211: "Clave pública inválida", - 237577215: "Cartera inválida:", - 4122897393: "Invertir", - 640219121: "Colores Invertidos", - 3000888649: "Clave", - 3264569915: "No se proporcionó la clave", - 3835918229: "Test de impresión QR", - 911419226: "Tipo de LCD", - 766317539: "Idioma", - 4180141032: "Déjalo en blanco si quieres que Krux elija una última palabra válida", - 3663022166: "Izquierda", - 972436696: "Retraso de Línea", - 2176866982: "Línea:", - 2820726296: "Importar Mnemónico", - 2369474953: "Cargar Cartera", - 2256441194: "¿Cargar un descriptor de monedero de confianza para ver las direcciones?", - 237136240: "Cargar desde tarjeta SD", - 879727077: "¿Cargar desde la tarjeta SD?", - 1936877965: "Cargar desde la cámara", - 669106195: "¿Cargar algo?", - 3330705289: "¿Cargar?", - 2596531078: "Cargando Camara..", - 2488179069: "Cargando direcciones de cambio..", - 336702608: "Cargando impresora..", - 1201104769: "Cargando direcciones de recepción..", - 3159494909: "Cargando..", - 1177338798: "Idioma", - 2817059741: "Ubicación", - 2917810189: "Longitud máxima excedida (%s)", - 2030045667: "Mensaje", - 762611188: "Mensaje:", - 3928301843: "Falta archivo de firma", - 1948316555: "Mnemónico", - 2123991188: "Identificación del Mnemónico", - 1443208255: "Mnemónico y passphrase se mantendrán.", - 1746030071: "Mnemónico no fue descifrado", - 1237332019: "Modificado:", - 1845376098: "Multisig", - 4265479636: "Segwit nativo - 84 se supondría", - 2939797024: "Red", - 73574491: "Nuevo Mnemónico", - 3634967631: "Nuevo firmware detectado.", - 4063104189: "No", - 2325721074: "Sin Passphrase", - 4092516657: "¡No hay suficientes tiradas!", - 3089363813: "Números", - 1577637745: "Octales", - 391304453: "Otros Formatos", - 3312581301: "Iter. PBKDF2", - 995862913: "Pinte los puntos perforados de negro para que puedan ser detectados.", - 2987800462: "Ancho del Papel", - 3913146360: "Parte", - 3559456868: "Tamaño de la Pieza", - 4249903283: "Passphrase", - 3745269737: "La ruta no coincide", - 500286397: "¡Patrón detectado!", - 3040011773: "¿Eliminar permanentemente todos los mnemónicos y configuraciones cifradas almacenadas del flash?", - 140802882: "Guardar", - 2578106186: "Índice de desviación de píxeles:", - 1703779997: "QR de Texto", - 3561756278: "Carga un descriptor de cartera", - 784609464: "Tasa de Caída", - 3761518438: "Baja entropía", - 3639136476: "Mala entropía detectada!", - 3037062877: "Prueba de Impresión QR", - 2362732578: "¿Imprimir Tiny Seed?", - 3123770978: "Imprimir como Código QR", - 3345150514: "¿Imprimir con Codigo QR?", - 3339507095: "¿Impresión?", - 1123106929: "Impresora", - 3903571079: "¡El controlador de impresora no está configurado!", - 3586624216: "Imprimiendo..", - 3593149291: "¿Proceder de todas maneras?", - 2580599003: "¿Continuar?", - 3108881025: "Procesando..", - 1848310591: "Código QR", - 710709610: "RX Pin", - 2697857197: "Recepción", - 1746677167: "Direcciones de Recepción", - 1658501467: "Región:", - 3739634002: "Eliminar %s?", - 1476462492: "Eliminar Mnemónico", - 1557093280: "¿Eliminar archivos de firmware de la tarjeta SD?", - 2817311427: "Res. - Formato", - 2365886561: "¿Restablecer a la configuración de fábrica y reiniciar?", - 3091105710: "Volver al QR", - 1662254634: "Revisa los datos escaneados, edítalos si es necesario", - 1963678224: "Derecha", - 770350922: "Tira el dado al menos %d veces para generar un mnemónico.", - 3271055013: "Distribución de tiradas:", - 432366011: "Tiradas:", - 3976793317: "Tarjeta SD", - 2736513298: "Tarjeta SD no detectada.", - 1166743226: "SHA256 de las tiradas:", - 817419367: "SHA256 de la instantánea:", - 699906428: "Guardar Imagen QR en la Tarjeta SD", - 2163347007: "Guardar en tarjeta SD", - 3531742595: "¿Guardar en la tarjeta SD?", - 2940025484: "Guardado en la tarjeta SD", - 763824768: "Escala", - 4117455079: "Escanear Dirección", - 4038076821: "Escanear Passphrase BIP39", - 923277590: "Escanear el Código QR", - 4006316572: "Escaneo de palabras 1-12 de nuevo", - 2736506158: "Escaneo de palabras 13-24", - 2029624154: "Tiempo de Espera del Protector de Pantalla", - 289960586: "Tipo de Script", - 1022211991: "Seguridad", - 4255182430: "Autotransferencia o Cambio (%d):", - 3753172956: "Autotransferencia:", - 473154195: "Ajustes", - 563836138: "Ajustes almacenados internamente en flash.", - 712533907: "Configuración almacenada en la tarjeta SD.", - 2377955518: "Entropía de Shannon:", - 1825881236: "Apagar", - 3656120779: "Tiempo de Apagado", - 2120776272: "Apagando..", - 1061961408: "Firmar", - 2293863356: "Firmar en Código QR", - 2879966040: "Firmar en la Tarjeta SD", - 4282338366: "¿Firmar?", - 746161122: "Firma", - 1988416729: "Mensaje Firmado", - 3672006076: "PSBT Firmado", - 3406791302: "Firmando..", - 2281377987: "Single-sig", - 2019512665: "Tamaño:", - 2344747135: "Algunas comprobaciones no se pueden realizar.", - 2090568351: "Gastos (%d):", - 1260825919: "Gasto:", - 1232757391: "Estadísticas para Entendidos", - 3303592908: "Almacenar en Flash", - 720041451: "Almacenar en la Tarjeta SD", - 3514476519: "Deslizar para cambiar de modo", - 1898550184: "TOCA o ENTER para capturar", - 4228215415: "TX Pin", - 2612594937: "Texto", - 1454688268: "Tema", - 1180180513: "Térmico", - 2258131455: "Para garantizar que los datos no se puedan recuperar, utiliza la función de borrar dispositivo", - 2700207481: "Alternar Brillo", - 725348723: "Herramientas", - 3684696112: "Umbral Táctil", - 2978718564: "Pantalla Táctil", - 2732611775: "¿Intentar con mas?", - 401829098: "Escribe la Passphrase BIP39", - 2061556020: "Introduce la clave", - 2089395053: "Unidad", - 2786714360: "Actualización completa.", - 2674953168: "Usa una superficie de fondo negra.", - 2402455261: "Usa la entropía de la cámara para crear una nueva mnemónica", - 3336226318: "Usado:", - 4003084591: "Valor %s fuera del rango: [ %s, %s]", - 989428076: "El valor debe ser múltiple de %s", - 3429519584: "Verificando..", - 1889659487: "Versión", - 4191058607: "Desde Cámara", - 1254681955: "Vía D20", - 525309547: "Vía D6", - 590330112: "Introducción Manual", - 1947603760: "A Través de Palabras", - 2504354847: "Espera la captura", - 2076481321: "Cartera", - 2297028319: "Descriptor de Cartera", - 4232654916: "Descriptor de salida de cartera", - 2587172867: "¡Se ha cargado el descriptor de salida de la cartera!", - 2499782468: "No se encontró el descriptor de salida de la cartera.", - 2671738224: "Advertencia:", - 262410364: "Borrar Dispositivo", - 3522794335: "Borrando dispositivo..", - 797660533: "Palabra %d", - 3742424146: "Números de Palabra", - 2965123464: "Palabras", - 1303016265: "Sí", - 2171149824: "es una dirección válida!", - 1875891934: "NO FUE ENCONTRADO en las primeras %d direcciones", - }, - "fr-FR": { - 232475068: "% du montant.", - 1185266064: "%d de %d multisignature", - 1503087751: "%d à %d", - 1178563089: "%s supprimé.", - 1092222515: "(%d au total)", - 3348584292: "(Expérimental)", - 1099786887: "(consultation)", - 2739590230: "12 mots", - 1310058127: "24 mots", - 1949634023: "À propos", - 4287534872: "Accepter supposition\xa0?", - 2995482424: "Compte", - 2415648848: "Le compte n °0 serait supposé", - 1043817877: "Index du compte", - 3439746594: "Ajoutez ou modifiez la phrase secrète\u2009?", - 2143824150: "Entropie supplémentaire de la caméra requise pour le mode AES-CBC", - 3270727197: "Adresse", - 900375497: "Alignez correctement la caméra et plaque de sauvegarde.", - 88746165: "Anti-éblouissement désactivé", - 1521033296: "Anti-éblouissement activé", - 3857613120: "Apparence", - 1056821534: "Es-tu sûr\u2009?", - 1868069640: "Couleurs BGR", - 3455872521: "Retour", - 4151330982: "Retour au menu", - 2756316330: "Sauvegarde mnémonique", - 2256777600: "Mauvaise signature", - 3937333362: "Débit en bauds", - 2046615409: "Grille binaire", - 928727036: "Rembourrage de bordure", - 2519455027: "Luminosité", - 2363604010: "Boutons", - 2038226551: "Anti-rebond des boutons", - 3138204438: "Capture annulée", - 1207696150: "Changement", - 3126552510: "Adresses de Changement", - 1583186953: "Changer de thème et redémarrer\u2009?", - 3768416405: "La monnaie\u2009:", - 388908871: "Les modifications dureront jusqu'à l'arrêt.", - 3442025874: "Vérifiez la carte SD", - 3119547911: "Vérifiez que l'adresse appartient à cette portefeuille\u2009?", - 1187826970: "%d adresses vérifiées sans correspondance.", - 2470115694: "Vérification de la carte SD..", - 1851578965: "Indice enfant", - 4094072796: "Créer du code QR", - 167798282: "Créer du code QR à partir du texte\u2009?", - 678449760: "Créé\u2009:", - 3513215254: "Code QR personnalisé", - 3585411775: "Personnaliser", - 534274978: "La personnalisation de votre portefeuille générera une nouvelle clé.", - 124617190: "Profondeur de coupe", - 597912140: "Méthode de coupe", - 2504034831: "Décimal", - 2751113454: "Décrypter\u2009?", - 1272005728: "Portefeuille par défaut", - 4102535566: "Profondeur par passage", - 1712856005: "Adresses des descripteurs", - 3278654271: "Affichage", - 3895447625: "Ne pas éteindre, cela peut prendre un certain temps.", - 3836852788: "Terminé\u2009?", - 690625786: "Double mnémonique", - 382368239: "Conducteur", - 3582575312: "Chiffré", - 1244124409: "Code QR crypté", - 2968548114: "Le mnémonique crypté n'a pas été stocké", - 781419966: "Mnémonique cryptée a été stockée avec ID\u2009:", - 350279787: "Chiffrement", - 2601598799: "Mode de chiffrement", - 1821513079: "Entrez %d mots BIP-39.", - 3504179008: "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre de 1 à 2048.", - 1100685007: "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre en hexadécimal de 1 à 800.", - 4090266642: "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre en octal de 1 à 4000.", - 2780625730: "Entrez chaque mot de votre mnémonique BIP-39.", - 889040671: "Erreur\u2009:", - 1505332462: "Esc", - 3838465623: "Explorer des fichiers\u2009?", - 4170881190: "Exportation vers la carte SD..", - 1711312434: "Clé publique", - 3981762528: "Paramètres d'usine", - 383371114: "Échec de décrypter", - 3048830188: "Erreur de chargement PSBT", - 4192663412: "Erreur de chargement d'adresse", - 1996021743: "Échec du chargement de la clé", - 1108715658: "Échec du chargement du message", - 1081425878: "Erreur de chargement mnémonique", - 928667220: "Échec du chargement du descripteur de sortie", - 1620572516: "Échec du chargement de la phrase secrète", - 2946146830: "Échec de stocker mnémonique", - 262248294: "Frais\u2009:", - 104500973: "Taux d'alimentation", - 3313339187: "Nom de fichier", - 1982637349: "Le nom de fichier %s existe sur la carte SD, écraser\u2009?", - 4006602858: "Empreinte digitale manquante dans PSBT", - 2542772894: "Le micrologiciel dépasse la taille maximale\u2009: %d", - 3748840176: "Coordonnées X inversées", - 1406590538: "Diamètre de flûte", - 1077771640: "Libre\u2009:", - 1893243331: "Du stockage", - 1871146425: "Effacez complètement votre carte SD dans un autre appareil pour assurer que les données soient irrécupérables", - 3549015533: "Générer une mnémonique", - 3524220994: "Générer un mnémonique dérivé BIP-85\u2009?", - 299338213: "Donnez à ce mnémonique un identifiant personnalisé\u2009? Sinon l'empreinte actuelle sera utilisée", - 602716148: "Go", - 1198393582: "Bonne entropie", - 133139382: "Matériel", - 3580020863: "Clé public hexadécimal", - 2691246967: "Hexadécimal", - 3903754133: "Masquer les mnémoniques", - 3876651191: "Frais élevés\u2009!", - 2880010062: "Id existe déjà", - 3242179508: "Entrées (%d)\u2009:", - 3034883011: "Installer\u2009?", - 3755547839: "Entropie insuffisante\u2009!", - 2032416055: "Entropie insuffisante", - 2585599782: "Adresse invalide", - 2874529150: "Chargeur de démarrage invalide", - 4093416954: "Longueur mnémonique invalide", - 1422874211: "Clé publique non valide", - 237577215: "Portefeuille invalide\u2009:", - 4122897393: "Inverser", - 640219121: "Couleurs inversées", - 3000888649: "Clé", - 3264569915: "La clé n'a pas été fournie", - 3835918229: "Test de l'imprimante Krux QR", - 911419226: "Type d'écran LCD", - 766317539: "Langue", - 4180141032: "Laissez vide si vous souhaitez que Krux choisisse un dernier mot valide", - 3663022166: "Gauche", - 972436696: "Délai de Ligne", - 2176866982: "Ligne\u2009:", - 2820726296: "Charger mnémonique", - 2369474953: "Charger le portefeuille", - 2256441194: "Charger un descripteur de portefeuille de confiance pour afficher les adresses\u2009?", - 237136240: "Charger depuis la carte SD", - 879727077: "Charger depuis la carte SD\u2009?", - 1936877965: "Charger depuis une caméra", - 669106195: "En charger qu'un\u2009?", - 3330705289: "Charger\u2009?", - 2596531078: "Caméra de Chargement..", - 2488179069: "Chargement des adresses de monnaie..", - 336702608: "Chargement de l'imprimante..", - 1201104769: "Chargement des adresses de réception ..", - 3159494909: "Chargement..", - 1177338798: "Paramètres régionaux", - 2817059741: "Emplacement", - 2917810189: "Longueur maximale dépassée (%s)", - 2030045667: "Message", - 762611188: "Message\u2009:", - 3928301843: "Fichier de signature manquant", - 1948316555: "Mnémonique", - 2123991188: "ID mnémonique", - 1443208255: "Mnémonique et phrase secrète seront conservés.", - 1746030071: "Mnémonique n'était pas cryptée", - 1237332019: "Modifié\u2009:", - 1845376098: "Multi\nsignature", - 4265479636: "Native Segwit - 84 serait supposé", - 2939797024: "Réseau", - 73574491: "Nouveau mnémonique", - 3634967631: "Nouveau micrologiciel détecté.", - 4063104189: "Non", - 2325721074: "Pas de phrase secrète", - 4092516657: "Pas assez de jets\u2009!", - 3089363813: "Nombres", - 1577637745: "Octale", - 391304453: "Autres formats", - 3312581301: "Itér. PBKDF2", - 995862913: "Noircissez les points perforés afin qu'ils puissent être détectés.", - 2987800462: "Largeur du papier", - 3913146360: "Partie", - 3559456868: "Taille de la pièce", - 4249903283: "Phrase secréte", - 3745269737: "Inadéquation du chemin", - 500286397: "Structure détecté\u2009!", - 3040011773: "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash\u2009?", - 140802882: "Persister", - 2578106186: "Indice de déviation des pixels\u2009:", - 1703779997: "QR en Texte Brut", - 3561756278: "Veuillez charger un descripteur de sortie de portefeuille", - 784609464: "Taux de plongée", - 3761518438: "Mauvaise entropie", - 3639136476: "Faible entropie détectée\u2009!", - 3037062877: "Test d'impression QR", - 2362732578: "Imprimer Tiny Seed\u2009?", - 3123770978: "Imprimer en QR", - 3345150514: "Imprimer en QR\u2009?", - 3339507095: "Imprimer\u2009?", - 1123106929: "Imprimante", - 3903571079: "Le conducteur d'imprimante n'est pas défini\u2009!", - 3586624216: "Impression..", - 3593149291: "Procéder quand même\u2009?", - 2580599003: "Procéder\u2009?", - 3108881025: "Traitement..", - 1848310591: "QR Code", - 710709610: "RX Fiche", - 2697857197: "Recevoir", - 1746677167: "Adresses de Réception", - 1658501467: "Région\u2009:", - 3739634002: "Supprimer %s\u2009?", - 1476462492: "Supprimer mnémonique", - 1557093280: "Supprimer les fichiers micrologiciel de la carte SD\u2009?", - 2817311427: "Rés. - Format", - 2365886561: "Restaurer les paramètres d'usine et redémarrer\u2009?", - 3091105710: "Retour au visualiseur QR", - 1662254634: "Examinez les données numérisées, modifiez-les si nécessaire", - 1963678224: "À droite", - 770350922: "Lancez le dé au moins %d fois pour générer un mnémonique.", - 3271055013: "Distribution des jets\u2009:", - 432366011: "Jets\u2009:", - 3976793317: "Carte SD", - 2736513298: "Carte SD non détectée.", - 1166743226: "SHA256 de jets\u2009:", - 817419367: "SHA256 de snapshot\u2009:", - 699906428: "Enregistrer l'image QR sur la carte SD", - 2163347007: "Enregistrer sur la carte SD", - 3531742595: "Enregistrer sur la carte SD\u2009?", - 2940025484: "Enregistré sur la carte SD", - 763824768: "L'échelle", - 4117455079: "Scannez l'adresse", - 4038076821: "Scannez la phrase secrète BIP-39", - 923277590: "Scannez le Code QR de la clé", - 4006316572: "Analyser à nouveau les mots 1 à 12", - 2736506158: "Analyser les mots 13 à 24", - 2029624154: "Delai d'Inactivité", - 289960586: "Type de Script", - 1022211991: "Sécurité", - 4255182430: "Auto-transfert ou monnaie (%d)\u2009:", - 3753172956: "Auto-transfert\u2009:", - 473154195: "Paramètres", - 563836138: "Paramètres stockés en interne sur flash.", - 712533907: "Paramètres stockés sur la carte SD.", - 2377955518: "Entropie de Shannon\u2009:", - 1825881236: "Fermer", - 3656120779: "Delai d'Arrêt", - 2120776272: "Éteindre..", - 1061961408: "Signer", - 2293863356: "Signer avec le code QR", - 2879966040: "Signer sur la carte SD", - 4282338366: "Signer\u2009?", - 746161122: "Signature", - 1988416729: "Message signé", - 3672006076: "PSBT signé", - 3406791302: "Signature..", - 2281377987: "Clé unique", - 2019512665: "Capacité\u2009:", - 2344747135: "Certains chèques ne peuvent pas être effectués.", - 2090568351: "Dépense (%d)\u2009:", - 1260825919: "Dépense\u2009:", - 1232757391: "Statistiques pour les geeks", - 3303592908: "Stocker sur flash", - 720041451: "Stocker sur la carte SD", - 3514476519: "Faites glisser pour changer de mode", - 1898550184: "TOUCHEZ ou ENTER pour capturer", - 4228215415: "TX Fiche", - 2612594937: "Texte", - 1454688268: "Thème", - 1180180513: "Thermique", - 2258131455: "Pour assurer que les données soient irrécupérables, utilisez la fonctionnalité 'Effacer l'appareil'", - 2700207481: "Ajuster la luminosité", - 725348723: "Outils", - 3684696112: "Seuil Tactile", - 2978718564: "Écran Tactile", - 2732611775: "Réessayer\u2009?", - 401829098: "Entrez la phrase secrète BIP-39", - 2061556020: "Clé de type", - 2089395053: "Unité", - 2786714360: "Mise à niveau complète.", - 2674953168: "Utilisez une surface de fond noire.", - 2402455261: "Utilisez l'entropie de la caméra pour créer un nouveau mnémonique", - 3336226318: "Utilisé\u2009:", - 4003084591: "Valeur %s hors de portée: [%s, %s]", - 989428076: "La valeur doit être un multiple de %s", - 3429519584: "Vérification..", - 1889659487: "Version", - 4191058607: "Par caméra", - 1254681955: "Via D20", - 525309547: "Via D6", - 590330112: "Par saisie manuelle", - 1947603760: "Via Mots", - 2504354847: "Attendez la capture", - 2076481321: "Portefeuille", - 2297028319: "Descripteur de Portefeuille", - 4232654916: "Descripteur de sortie du portefeuille", - 2587172867: "Descripteur de sortie du portefeuille chargé\u2009!", - 2499782468: "Descripteur de sortie du portefeuille introuvable.", - 2671738224: "Avertissement\u2009:", - 262410364: "Effacer l'appareil", - 3522794335: "Effacement de l'appareil en cours..", - 797660533: "Mot %d", - 3742424146: "Numéros de mots", - 2965123464: "Mots", - 1303016265: "Oui", - 2171149824: "Adresse non valide\xa0!", - 1875891934: "n'A PAS ÉTÉ TROUVÉ dans les %d premières adresses", - }, - "ko-KR": { - 232475068: "수량: %", - 1185266064: "%d의 %d 멀티시그", - 1503087751: "%d 부터 %d", - 1178563089: "%s 제거되었습니다.", - 1092222515: "(총 %d)", - 3348584292: "(실험적 기능)", - 1099786887: "(잔액조회 전용)", - 2739590230: "12단어", - 1310058127: "24단어", - 1949634023: "기본 정보", - 4287534872: "가정을 수락하시겠습니까?", - 2995482424: "계정", - 2415648848: "계정 #0이 가정됩니다", - 1043817877: "계정 인덱스", - 3439746594: "패스프레이즈를 추가하거나 변경하시겠습니까?", - 2143824150: "AES-CBC 모드를 위해 카메라의 추가 엔트로피가 필요합니다", - 3270727197: "주소", - 900375497: "카메라와 보조 플레이트를 올바르게 정렬하십시오.", - 88746165: "눈부심방지 비활성화", - 1521033296: "눈부심방지 활성화", - 3857613120: "디스플레이", - 1056821534: "계속하시겠습니까?", - 1868069640: "BGR 색상", - 3455872521: "뒤로", - 4151330982: "메뉴로 돌아가기", - 2756316330: "니모닉 백업", - 2256777600: "잘못된 서명", - 3937333362: "Baudrate", - 2046615409: "이진수 그리드", - 928727036: "테두리 여백", - 2519455027: "밝기", - 2363604010: "버튼", - 2038226551: "버튼 바운스 방지", - 3138204438: "캡처 취소됨", - 1207696150: "잔돈", - 3126552510: "잔돈 주소", - 1583186953: "테마를 변경하고 재부팅하시겠습니까?", - 3768416405: "변경", - 388908871: "변경 사항은 종료될때까지 유지됩니다.", - 3442025874: "SD카드 확인", - 3119547911: "해당 주소가 이 지갑에 속하는지 확인하시겠습니까?", - 1187826970: "일치하는 주소가 없는 %d 개를 확인했습니다.", - 2470115694: "SD카드 확인 중..", - 1851578965: "차일드 인덱스", - 4094072796: "QR 코드 생성", - 167798282: "텍스트로부터 QR코드를 생성하시겠습니까?", - 678449760: "생성됨:", - 3513215254: "사용자 정의 QR코드", - 3585411775: "사용자 정의", - 534274978: "지갑을 커스터마이징하면 새로운 비밀키가 생성됩니다.", - 124617190: "Cut Depth", - 597912140: "Cut Method", - 2504034831: "10진수", - 2751113454: "복호화하시겠습니까?", - 1272005728: "지갑 기본설정", - 4102535566: "Depth Per Pass", - 1712856005: "디스크립터 주소", - 3278654271: "디스플레이", - 3895447625: "전원을 끄지 마십시오. 완료하는 데 시간이 걸릴 수 있습니다.", - 3836852788: "완료되었습니까?", - 690625786: "이중 니모닉", - 382368239: "드라이버", - 3582575312: "암호화 후 저장", - 1244124409: "암호화된 QR 코드", - 2968548114: "암호화된 니모닉을 저장하지 못했습니다", - 781419966: "암호화된 니모닉을 다음 아이디와 함께 저장했습니다:", - 350279787: "암호화", - 2601598799: "암호화 모드", - 1821513079: "%d개의 BIP-39 단어를 입력하십시오.", - 3504179008: "BIP-39 니모닉의 각 단어를 1에서 2048 사이의 숫자로 입력하십시오.", - 1100685007: "BIP-39 니모닉의 각 단어를 1에서 800 사이의 16진수 숫자로 입력하십시오.", - 4090266642: "BIP-39 니모닉의 각 단어를 1에서 4000 사이의 8진수 숫자로 입력하십시오.", - 2780625730: "BIP-39 니모닉의 각 단어를 입력하십시오.", - 889040671: "오류:", - 1505332462: "Esc", - 3838465623: "파일을 탐색하시겠습니까?", - 4170881190: "SD카드로 내보내는 중..", - 1711312434: "XPUB 내보내기", - 3981762528: "공장 초기 설정", - 383371114: "복호화에 실패했습니다", - 3048830188: "PSBT를 불러오지 못했습니다", - 4192663412: "주소를 불러오지 못했습니다", - 1996021743: "키 로드에 실패했습니다", - 1108715658: "메시지를 불러오지 못했습니다", - 1081425878: "니모닉을 불러오지 못했습니다", - 928667220: "아웃풋 디스크립터를 불러오지 못했습니다", - 1620572516: "패스프레이즈를 불러오지 못했습니다", - 2946146830: "니모닉을 저장하지 못했습니다", - 262248294: "수수료:", - 104500973: "Feed Rate", - 3313339187: "파일명", - 1982637349: "%s 파일명이 SD카드에 이미 존재합니다. 덮어쓰시겠습니까?", - 4006602858: "PSBT에서 지문이 설정되지 않았습니다", - 2542772894: "펌웨어가 최대 크기를 초과했습니다: %d", - 3748840176: "X 좌표 반전", - 1406590538: "플루트 직경", - 1077771640: "여유 공간:", - 1893243331: "저장공간에서 불러오기", - 1871146425: "다른 장치에서 데이터 복구가 불가능하도록 SD카드를 완전히 지우십시오", - 3549015533: "니모닉 생성", - 3524220994: "BIP85 파생 니모닉을 생성하시겠습니까?", - 299338213: "이 니모닉에 별도 아이디를 지정하시겠습니까? 지정하지 않으면 현재 지문을 사용합니다", - 602716148: "선택", - 1198393582: "엔트로피가 충분합니다", - 133139382: "하드웨어", - 3580020863: "16진수 공개키", - 2691246967: "16진수", - 3903754133: "니모닉 숨기기", - 3876651191: "수수료가 높습니다!", - 2880010062: "아이디가 이미 존재합니다", - 3242179508: "Input (%d):", - 3034883011: "설치하시겠습니까?", - 3755547839: "엔트로피가 충분하지 않습니다!", - 2032416055: "엔트로피가 충분하지 않습니다", - 2585599782: "주소가 잘못되었습니다", - 2874529150: "부트로더가 잘못되었습니다", - 4093416954: "니모닉 길이가 잘못되었습니다", - 1422874211: "공개키가 잘못되었습니다", - 237577215: "지갑이 잘못되었습니다:", - 4122897393: "반전", - 640219121: "반전된 색상", - 3000888649: "키", - 3264569915: "키가 제공되지 않았습니다", - 3835918229: "Krux 프린터 테스트 QR", - 911419226: "LCD 유형", - 766317539: "언어", - 4180141032: "마지막 단어를 Krux가 선택하도록 하려면 비워두십시오", - 3663022166: "왼쪽", - 972436696: "줄 지연", - 2176866982: "줄:", - 2820726296: "니모닉 불러오기", - 2369474953: "이대로 불러오기", - 2256441194: "주소를 보기위해 신뢰할 수 있는 월렛 디스크립터를 불러오시겠습니까?", - 237136240: "SD카드에서 불러오기", - 879727077: "SD카드에서 불러오시겠습니까?", - 1936877965: "카메라로 불러오기", - 669106195: "불러오시겠습니까?", - 3330705289: "불러오시겠습니까?", - 2596531078: "카메라를 구동 중입니다..", - 2488179069: "잔돈 주소를 불러옵니다..", - 336702608: "프린터를 로딩 중입니다..", - 1201104769: "수신 주소 불러옵니다..", - 3159494909: "로딩 중..", - 1177338798: "언어 설정", - 2817059741: "기본 저장소", - 2917810189: "최대 길이를 초과함 (%s)", - 2030045667: "메시지", - 762611188: "메시지:", - 3928301843: "서명 파일이 누락되었습니다", - 1948316555: "니모닉", - 2123991188: "니모닉 ID", - 1443208255: "니모닉과 암호는 유지됩니다.", - 1746030071: "니모닉이 암호화되지 않았습니다", - 1237332019: "수정되었습니다:", - 1845376098: "멀티시그", - 4265479636: "네이티브 세그윗 - BIP84를 적용합니다", - 2939797024: "네트워크", - 73574491: "새로운 니모닉", - 3634967631: "새로운 펌웨어가 감지되었습니다.", - 4063104189: "아니요", - 2325721074: "패스프레이즈 없음", - 4092516657: "주사위 횟수가 충분하지 않습니다!", - 3089363813: "시드문구 순번", - 1577637745: "8진수", - 391304453: "기타 형식", - 3312581301: "PBKDF2 Iter.", - 995862913: "카메라가 감지할 수 있도록 펀치된 점을 검게 칠하십시오.", - 2987800462: "종이 너비", - 3913146360: "파트", - 3559456868: "파트 사이즈", - 4249903283: "패스프레이즈", - 3745269737: "경로 불일치", - 500286397: "패턴이 감지되었습니다!", - 3040011773: "저장된 모든 니모닉 및 설정값을 영구적으로 제거하시겠습니까?", - 140802882: "저장", - 2578106186: "픽셀 편차 지수:", - 1703779997: "일반텍스트 QR", - 3561756278: "지갑 출력 디스크립터를 불러오십시오", - 784609464: "침수율", - 3761518438: "엔트로피가 부족합니다", - 3639136476: "엔트로피가 부족합니다!", - 3037062877: "QR 테스트 인쇄", - 2362732578: "Tiny Seed를 인쇄하시겠습니까?", - 3123770978: "QR로 인쇄", - 3345150514: "QR로 인쇄하시겠습니까?", - 3339507095: "인쇄하시겠습니까?", - 1123106929: "프린터", - 3903571079: "프린터 드라이버가 설정되지 않았습니다!", - 3586624216: "출력중", - 3593149291: "계속하시겠습니까?", - 2580599003: "계속하시겠습니까?", - 3108881025: "처리...", - 1848310591: "QR 코드", - 710709610: "RX 핀", - 2697857197: "받기", - 1746677167: "주소", - 1658501467: "지역:", - 3739634002: "%s을 제거하시겠습니까?", - 1476462492: "니모닉 제거", - 1557093280: "SD카드에서 펌웨어 파일을 제거하시겠습니까?", - 2817311427: "Res. - 형식", - 2365886561: "공장 설정을 복원하고 재부팅하시겠습니까?", - 3091105710: "QR 뷰어로 돌아가기", - 1662254634: "스캔된 데이터를 검토하고 필요한 경우 수정하십시오", - 1963678224: "오른쪽", - 770350922: "니모닉을 생성하려면 주사위를 최소 %d번 굴리십시오.", - 3271055013: "주사위값 분포:", - 432366011: "주사위 횟수:", - 3976793317: "SD카드", - 2736513298: "SD카드가 감지되지 않았습니다.", - 1166743226: "주사위의 SHA256:", - 817419367: "SHA256 스냅샷:", - 699906428: "QR 이미지를 SD카드에 저장", - 2163347007: "SD카드에 저장", - 3531742595: "SD카드에 저장하시겠습니까?", - 2940025484: "SD카드에 저장됨", - 763824768: "스케일", - 4117455079: "주소 스캔하기", - 4038076821: "BIP39 패스프레이즈 스캔하기", - 923277590: "비밀번호 QR 스캔", - 4006316572: "1번째부터 12번째 단어를 스캔 중입니다", - 2736506158: "13번째부터 24번째 단어를 스캔 중입니다", - 2029624154: "화면보호기 시간", - 289960586: "지갑 형식", - 1022211991: "보안", - 4255182430: "본인주소 전송 또는 잔돈 (%d):", - 3753172956: "자가 이체:", - 473154195: "설정", - 563836138: "설정은 플래시에서 내부적으로 저장됩니다.", - 712533907: "SD 카드에 저장된 설정.", - 2377955518: "Shannon의 엔트로피:", - 1825881236: "종료", - 3656120779: "자동 종료시간", - 2120776272: "종료 중..", - 1061961408: "서명하기", - 2293863356: "QR코드로 내보내기", - 2879966040: "SD카드로 내보내기", - 4282338366: "서명하시겠습니까?", - 746161122: "서명", - 1988416729: "서명된 메시지", - 3672006076: "서명된 PSBT", - 3406791302: "서명 중..", - 2281377987: "단일서명", - 2019512665: "크기:", - 2344747135: "일부 검사를 수행할 수 없습니다.", - 2090568351: "Spend (%d):", - 1260825919: "지출", - 1232757391: "전문가를 위한 통계", - 3303592908: "플래시 메모리에 저장", - 720041451: "SD카드에 저장", - 3514476519: "모드를 변경하려면 화면을 옆으로 쓸어내리세요", - 1898550184: "터치하거나 엔터를 눌러 캡처하십시오", - 4228215415: "TX 핀", - 2612594937: "텍스트", - 1454688268: "테마", - 1180180513: "Thermal", - 2258131455: "데이터 복구가 불가능하도록 장치 전체지우기 기능을 사용하십시오", - 2700207481: "밝기 전환", - 725348723: "도구", - 3684696112: "터치 민감도", - 2978718564: "터치스크린", - 2732611775: "더 하시겠습니까?", - 401829098: "BIP39 패스프레이즈 입력", - 2061556020: "비밀번호 입력", - 2089395053: "단위", - 2786714360: "업그레이드가 완료되었습니다", - 2674953168: "검은색 배경 화면을 사용하십시오.", - 2402455261: "카메라의 엔트로피를 사용하여 새로운 니모닉을 생성하십시오", - 3336226318: "이미 사용됨:", - 4003084591: "%s는 [%s, %s] 범위를 벗어났습니다", - 989428076: "값은 %s의 배수여야 합니다", - 3429519584: "검증 중..", - 1889659487: "버전", - 4191058607: "카메라", - 1254681955: "20면체 주사위", - 525309547: "일반 주사위", - 590330112: "직접 입력", - 1947603760: "니모닉 단어 입력", - 2504354847: "캡처될때까지 기다리십시오", - 2076481321: "지갑 설정", - 2297028319: "지갑 디스크립터", - 4232654916: "지갑 출력 디스크립터", - 2587172867: "지갑 출력 디스크립터가 로드되었습니다!", - 2499782468: "지갑 출력 디스크립터를 찾을 수 없습니다.", - 2671738224: "경고:", - 262410364: "기기 초기화", - 3522794335: "기기를 초기화하는 중입니다..", - 797660533: "%d 단어", - 3742424146: "단어 번호(1-2048)", - 2965123464: "시드문구", - 1303016265: "예", - 2171149824: " 은 유효한 주소가 아닙니다", - 1875891934: "첫 번째 %d 주소에서 찾을 수 없습니다", - }, - "nl-NL": { - 232475068: "% van het bedrag.", - 1185266064: "%d van %d multisig", - 1503087751: "%d tot %d", - 1178563089: "%s verwijderd.", - 1092222515: "(%d totaal)", - 3348584292: "(Experimenteel)", - 1099786887: "(alleen inzien)", - 2739590230: "12 woorden", - 1310058127: "24 woorden", - 1949634023: "Over", - 4287534872: "Aanname accepteren?", - 2995482424: "Account", - 2415648848: "Account #0 zou worden aangenomen", - 1043817877: "Accountindex", - 3439746594: "Wachtwoordzin voor portemonnee toevoegen of wijzigen?", - 2143824150: "Extra entropie van de camera vereist voor AES-CBC-modus", - 3270727197: "Adres", - 900375497: "Richt de camera en back-upplaat op de juiste manier.", - 88746165: "Anti reflecterend uitgeschakeld", - 1521033296: "Anti reflecterend ingeschakeld", - 3857613120: "Uiterlijk", - 1056821534: "Weet je het zeker?", - 1868069640: "BGR-kleuren", - 3455872521: "Terug", - 4151330982: "Terug naar menu", - 2756316330: "Backup geheugensteun", - 2256777600: "Ongeldige handtekening", - 3937333362: "Baudratio", - 2046615409: "Binair raster", - 928727036: "Rand opvulling", - 2519455027: "Helderheid", - 2363604010: "Knoppen", - 2038226551: "Debounce van knoppen", - 3138204438: "Opname geannuleerd", - 1207696150: "Change", - 3126552510: "Wisselgeldadres", - 1583186953: "Thema veranderen en opnieuw opstarten?", - 3768416405: "Wisselgeld:", - 388908871: "Wijzigingen blijven van kracht tot afsluiten.", - 3442025874: "Controleer SD kaart", - 3119547911: "Controleer of dit adres bij deze portemonnee hoort?", - 1187826970: "%d adressen gecontroleerd zonder overeenkomsten.", - 2470115694: "SD kaart controleren..", - 1851578965: "Onderliggende index", - 4094072796: "QR code maken", - 167798282: "QR code maken van tekst?", - 678449760: "Aangemaakt:", - 3513215254: "Aangepaste QR code", - 3585411775: "Aanpassen", - 534274978: "Bij aanpassen van de portemonnee zal er een nieuwe sleutel gegenereerd worden.", - 124617190: "Snijdiepte", - 597912140: "Snijmethode", - 2504034831: "Decimaal", - 2751113454: "Ontsleutelen?", - 1272005728: "Standaard portemonnee", - 4102535566: "Diepte per pas", - 1712856005: "Descriptoradressen", - 3278654271: "Weergave", - 3895447625: "Schakel het apparaat niet uit, het kan even duren voordat het klaar is.", - 3836852788: "Klaar?", - 690625786: "Dubbel geheugensteuntje", - 382368239: "Driver", - 3582575312: "Versleuteld", - 1244124409: "Versleutelde QR code", - 2968548114: "Versleutelde geheugensteun was niet opgeslagen", - 781419966: "Versleutelde geheugensteun is opgeslagen met ID:", - 350279787: "Versleutelen", - 2601598799: "Versleutel modus", - 1821513079: "Voer %d BIP-39 woorden in.", - 3504179008: "Voer elk woord van jouw BIP-39 geheugensteun in als een nummer van 1 tot 2048.", - 1100685007: "Voer elk woord van jouw BIP-39 geheugensteun in als een hexadecimaal van 1 tot 800.", - 4090266642: "Voer elk woord van jouw BIP-39 geheugensteun in als een octaal van 1 tot 4000.", - 2780625730: "Voer elk woord van jouw BIP-39 geheugensteun in.", - 889040671: "Fout:", - 1505332462: "Esc", - 3838465623: "Bestanden verkennen?", - 4170881190: "Exporteren naar SD kaart..", - 1711312434: "Uitgebreide publieke sleutel", - 3981762528: "Fabrieksinstellingen", - 383371114: "Ontsleutelen is niet gelukt", - 3048830188: "PSBT laden is niet gelukt", - 4192663412: "Adres laden is niet gelukt", - 1996021743: "Sleutel laden is niet gelukt", - 1108715658: "Bericht laden is niet gelukt", - 1081425878: "Geheugensteun laden is niet gelukt", - 928667220: "Descriptor laden is niet gelukt", - 1620572516: "Wachtwoord laden is niet gelukt", - 2946146830: "Geheugensteun opslaan is niet gelukt", - 262248294: "Tarief:", - 104500973: "Voedingssnelheid", - 3313339187: "Bestandsnaam", - 1982637349: "Bestandsnaam %s OVERSCHRIJVEN op SD kaart?", - 4006602858: "Vingerafdruk niet ingesteld in PSBT", - 2542772894: "Firmware overschrijdt de maximale grootte: %d", - 3748840176: "Geflipte X-coördinaten", - 1406590538: "Fluit diameter", - 1077771640: "Vrij:", - 1893243331: "Uit data-opslag", - 1871146425: "Wis uw SD kaart volledig in een ander apparaat om te zorgen dat de gegevens onherstelbaar zijn", - 3549015533: "Geheugensteun genereren", - 3524220994: "Een BIP85 afgeleide geheugensteun genereren?", - 299338213: "Eigen ID gebruiken voor geheugensteun? Anders vingerafdruk gebruiken", - 602716148: "Ga", - 1198393582: "Goede entropie", - 133139382: "Hardware", - 3580020863: "Hex publieke sleutel", - 2691246967: "Hexadecimaal", - 3903754133: "Verberg geheugensteunen", - 3876651191: "Hoge kosten!", - 2880010062: "ID bestaat al", - 3242179508: "Invoer (%d):", - 3034883011: "Installeren?", - 3755547839: "Onvoldoende Entropie!", - 2032416055: "Onvoldoende entropie", - 2585599782: "Ongeldig adres", - 2874529150: "Ongeldige bootloader", - 4093416954: "Ongeldige geheugensteun lengte", - 1422874211: "Ongeldige publieke sleutel", - 237577215: "Ongeldige portemonnee:", - 4122897393: "Omkeren", - 640219121: "Omgekeerde kleuren", - 3000888649: "Sleutel", - 3264569915: "Sleutel niet verstrekt", - 3835918229: "Krux printer test QR", - 911419226: "LCD-type", - 766317539: "Taal", - 4180141032: "Laat leeg als je wilt dat Krux een geldig laatste woord kiest", - 3663022166: "Links", - 972436696: "Lijn vertraging", - 2176866982: "Lijn:", - 2820726296: "Geheugensteun laden", - 2369474953: "Portemonnee laden", - 2256441194: "Een vertrouwde portemonnee descriptor laden om adressen te bekijken?", - 237136240: "Laden vanaf SD kaart", - 879727077: "Laden vanaf SD kaart?", - 1936877965: "Laden van camera", - 669106195: "Laden?", - 3330705289: "Laden?", - 2596531078: "Camera laden..", - 2488179069: "Wijzigingsadressen laden..", - 336702608: "Laadprinter..", - 1201104769: "Ontvangstadressen laden..", - 3159494909: "Laden..", - 1177338798: "Taal", - 2817059741: "Opslaglocatie", - 2917810189: "Maximale lengte overschreden (%s)", - 2030045667: "Bericht", - 762611188: "Bericht:", - 3928301843: "Handtekening bestand mist", - 1948316555: "Geheugensteun", - 2123991188: "Geheugensteun ID", - 1443208255: "Geheugensteun en wachtwoord worden bewaard.", - 1746030071: "Geheugensteun is niet versleuteld", - 1237332019: "Aangepast:", - 1845376098: "Multisig", - 4265479636: "Native Segwit - 84 zal worden gebruikt", - 2939797024: "Netwerk", - 73574491: "Geheugensteun aanmaken", - 3634967631: "Nieuwe firmware gevonden.", - 4063104189: "Nee", - 2325721074: "Geen wachtwoordzin", - 4092516657: "Niet genoeg gedobbeld!", - 3089363813: "Nummers", - 1577637745: "Octaal", - 391304453: "Andere indelingen", - 3312581301: "PBKDF2 iter.", - 995862913: "Maak geperforeerde stippen zwart zodat ze worden gedetecteerd.", - 2987800462: "Papier breedte", - 3913146360: "Deel", - 3559456868: "Deel grootte", - 4249903283: "Wachtwoord", - 3745269737: "Pad komt niet overeen", - 500286397: "Patroon gevonden!", - 3040011773: "Alle opgeslagen versleutelde mnemonics en instellingen permanent uit het flashgeheugen verwijderen?", - 140802882: "Opslag", - 2578106186: "Pixelafwijkingsindex:", - 1703779997: "Platte tekst QR", - 3561756278: "Laadt een portemonnee descriptor in", - 784609464: "Duik tarief", - 3761518438: "Slechte entropie", - 3639136476: "Lage entropie gedetecteerd!", - 3037062877: "Test QR afdrukken", - 2362732578: "Tiny Seed afdrukken?", - 3123770978: "Afdrukken naar QR", - 3345150514: "Afdrukken naar QR?", - 3339507095: "Afdrukken?", - 1123106929: "Printer", - 3903571079: "Printer driver niet ingesteld!", - 3586624216: "Afdrukken..", - 3593149291: "Toch doorgaan?", - 2580599003: "Doorgaan?", - 3108881025: "Verwerken..", - 1848310591: "QR code", - 710709610: "RX pin", - 2697857197: "Ontvangen", - 1746677167: "Ontvangstadres", - 1658501467: "Regio:", - 3739634002: "Verwijderen %s?", - 1476462492: "Geheugensteun verwijderen", - 1557093280: "Firmwarebestanden van SD kaart verwijderen?", - 2817311427: "Res. - Formaat", - 2365886561: "Fabrieksinstellingen herstellen en opnieuw opstarten?", - 3091105710: "Terug naar QR-lezer", - 1662254634: "Controleer gescande gegevens en bewerk indien nodig", - 1963678224: "Rechts", - 770350922: "Dobbel een dobbelsteen minstens %d keer voor het genereren van een geheugensteun.", - 3271055013: "Roldistributie:", - 432366011: "Gedobbeld:", - 3976793317: "SD kaart", - 2736513298: "SD kaart niet gedetecteerd.", - 1166743226: "Gedobbelde SHA256:", - 817419367: "Momentopname van SHA256:", - 699906428: "QR-afbeelding opslaan op SD kaart", - 2163347007: "Opslaan op SD kaart", - 3531742595: "Opslaan op SD kaart?", - 2940025484: "Opgeslagen op SD kaart", - 763824768: "Schaal", - 4117455079: "Adres scannen", - 4038076821: "BIP-39 Wachtwoord Scannen", - 923277590: "QR Code Sleutel Scannen", - 4006316572: "Woorden 1 t/m 12 opnieuw scannen", - 2736506158: "Woorden 13 t/m 24 scannen", - 2029624154: "Schermbeveiligingstijd", - 289960586: "Scripttype", - 1022211991: "Beveiliging", - 4255182430: "Overschrijving naar jezelf, of wisselgeld (%d):", - 3753172956: "Zelf overschrijving:", - 473154195: "Instellingen", - 563836138: "Instellingen intern opgeslagen op flitser.", - 712533907: "Instellingen opgeslagen op SD kaart.", - 2377955518: "Shannon's entropie:", - 1825881236: "Afsluiten", - 3656120779: "Uitschakelingstijd:", - 2120776272: "Bezig met afsluiten..", - 1061961408: "Ondertekenen", - 2293863356: "Teken op QR-code", - 2879966040: "Teken op SD kaart", - 4282338366: "Ondertekenen?", - 746161122: "Handtekening", - 1988416729: "Bericht ondertekend", - 3672006076: "PSBT ondertekend", - 3406791302: "Ondertekenen..", - 2281377987: "Enkele sleutel", - 2019512665: "Grootte:", - 2344747135: "Sommige controles kunnen niet worden uitgevoerd.", - 2090568351: "Uitgaven (%d):", - 1260825919: "Uitgaven:", - 1232757391: "Statistieken voor nerds", - 3303592908: "Opslaan op apparaat", - 720041451: "Opslaan op SD kaart", - 3514476519: "Verander modus", - 1898550184: "TIK of ENTER voor opname", - 4228215415: "TX pin", - 2612594937: "Tekst", - 1454688268: "Thema", - 1180180513: "Thermisch", - 2258131455: "Gebruik de functie 'Apparaat wissen' om te zorgen dat de gegevens onherstelbaar zijn", - 2700207481: "Helderheid schakelen", - 725348723: "Hulpmiddelen", - 3684696112: "Aanraak gevoeligheid", - 2978718564: "Aanraakscherm", - 2732611775: "Meer proberen?", - 401829098: "Voer een BIP-39 wachtwoord in", - 2061556020: "Voer sleutel in", - 2089395053: "Eenheid", - 2786714360: "Upgrade afgerond.", - 2674953168: "Gebruik een donker achergrond.", - 2402455261: "Gebruik de camera als entropie voor het aanmaken van een nieuwe geheugensteun", - 3336226318: "Gebruikt:", - 4003084591: "Waarde %s is buiten bereik: [%s, %s]", - 989428076: "Waarde moet meerdere van %s zijn", - 3429519584: "Bezig met verifiëren..", - 1889659487: "Versie", - 4191058607: "Via camera", - 1254681955: "Via D20", - 525309547: "Via D6", - 590330112: "Via handmatige invoer", - 1947603760: "Via woorden", - 2504354847: "Wacht op opname", - 2076481321: "Portemonnee", - 2297028319: "Descriptor", - 4232654916: "Portemonnee descriptor", - 2587172867: "Portemonnee descriptor geladen!", - 2499782468: "Portemonnee descriptor niet gevonden.", - 2671738224: "Waarschuwing:", - 262410364: "Apparaat wissen", - 3522794335: "Apparaat wissen..", - 797660533: "Woord %d", - 3742424146: "Woord nummers", - 2965123464: "Woorden", - 1303016265: "Yes", - 2171149824: "is geen geldig adres", - 1875891934: "werd NIET GEVONDEN in de eerste %d adressen", - }, - "pt-BR": { - 232475068: "% do valor.", - 1185266064: "%d da %d multisig", - 1503087751: "%d a %d", - 1178563089: "removido.", - 1092222515: "(%d total)", - 3348584292: "(Experimental)", - 1099786887: "(Somente visualização)", - 2739590230: "12 palavras", - 1310058127: "24 palavras", - 1949634023: "Sobre", - 4287534872: "Aceitar suposições?", - 2995482424: "Conta", - 2415648848: "A conta #0 seria assumida", - 1043817877: "Índice da Conta", - 3439746594: "Adicionar ou alterar senha da carteira?", - 2143824150: "Entropia adicional da câmera necessária para o modo AES-CBC", - 3270727197: "Endereço", - 900375497: "Alinhe a câmera e a placa de backup corretamente.", - 88746165: "Antirreflexo desativado", - 1521033296: "Antirreflexo ativado", - 3857613120: "Aparência", - 1056821534: "Tem certeza?", - 1868069640: "Cores BGR", - 3455872521: "Voltar", - 4151330982: "Voltar ao Menu", - 2756316330: "Backup de Mnemônico", - 2256777600: "Assinatura Inválida", - 3937333362: "Baudrate", - 2046615409: "Grade binária", - 928727036: "Borda", - 2519455027: "Brilho", - 2363604010: "Botões", - 2038226551: "Debounce dos Botões", - 3138204438: "Captura cancelada", - 1207696150: "Troco", - 3126552510: "Endereços de Troco", - 1583186953: "Mudar o tema e reiniciar?", - 3768416405: "Troco:", - 388908871: "Alterações só durarão até o desligamento.", - 3442025874: "Verifique o cartão SD", - 3119547911: "Verificar se este endereço pertence a carteira?", - 1187826970: "Verificado %d endereços sem correspondências.", - 2470115694: "Verificando o cartão SD..", - 1851578965: "Índice Derivado", - 4094072796: "Gerar Código QR", - 167798282: "Gerar código QR do texto?", - 678449760: "Criado:", - 3513215254: "Código QR Customizado", - 3585411775: "Customizar", - 534274978: "Personalizar sua carteira gerará uma nova chave.", - 124617190: "Profundidade de Corte", - 597912140: "Método de Corte", - 2504034831: "Decimal", - 2751113454: "Descriptografar?", - 1272005728: "Carteira Padrão", - 4102535566: "Profundidade da Passagem", - 1712856005: "Endereços do Descritor", - 3278654271: "Display", - 3895447625: "Não desligue, pode demorar um pouco para concluir.", - 3836852788: "Feito?", - 690625786: "Duplo mnemônico", - 382368239: "Driver", - 3582575312: "Criptografado", - 1244124409: "Código QR Criptografado", - 2968548114: "Mnemonic criptografado não foi armazenado", - 781419966: "Mnemônico criptografado foi armazenado com ID:", - 350279787: "Criptografia", - 2601598799: "Modo de Criptografia", - 1821513079: "Insira %d palavras BIP-39.", - 3504179008: "Digite o número de cada palavra do seu mnemônico BIP-39, de 1 a 2048.", - 1100685007: "Digite o número de cada palavra do seu mnemônico BIP-39 como um número em hexadecimal, de 1 a 800.", - 4090266642: "Digite o número de cada palavra do seu mnemônico BIP-39 como um número em octal, de 1 a 4000.", - 2780625730: "Digite cada palavra do seu mnemônico BIP-39.", - 889040671: "Erro:", - 1505332462: "Esc", - 3838465623: "Explorar arquivos?", - 4170881190: "Exportando para o cartão SD..", - 1711312434: "Chave Pública Estendida", - 3981762528: "Configurações de Fábrica", - 383371114: "Falhou em descriptografar", - 3048830188: "Falhou ao carregar PSBT", - 4192663412: "Falhou ao carregar endereço", - 1996021743: "Falha ao carregar a chave", - 1108715658: "Falhou ao carregar mensagem", - 1081425878: "Falhou ao carregar mnemônico", - 928667220: "Falha ao carregar o descritor de saída", - 1620572516: "Falha ao carregar a senha", - 2946146830: "Falhou ao armazenar mnemônico", - 262248294: "Taxa:", - 104500973: "Taxa de Alimentação", - 3313339187: "Nome do arquivo", - 1982637349: "O nome do arquivo %s existe no cartão SD, substituir?", - 4006602858: "Impressão digital não definida no PSBT", - 2542772894: "Firmware excede o tamanho máximo: %d", - 3748840176: "Coordenadas X invertidas", - 1406590538: "Diâmetro da Fresa", - 1077771640: "Livre:", - 1893243331: "Do Armazenamento", - 1871146425: "Apague totalmente seu cartão SD em outro dispositivo para garantir que os dados sejam irrecuperáveis", - 3549015533: "Gerar Mnemônico", - 3524220994: "Gerar um mnemônico derivado BIP85?", - 299338213: "Dê a este mnemônico um ID personalizado? Caso contrário, a impressão digital atual será usada", - 602716148: "Ir", - 1198393582: "Boa entropia", - 133139382: "Hardware", - 3580020863: "Chave pública hexadecimal", - 2691246967: "Hexadecimal", - 3903754133: "Ocultar Mnemônicos", - 3876651191: "Taxas altas!", - 2880010062: "Id já existe", - 3242179508: "Entradas (%d):", - 3034883011: "Instalar?", - 3755547839: "Entropia insuficiente!", - 2032416055: "Entropia insuficiente", - 2585599782: "Endereço inválido", - 2874529150: "Bootloader inválido", - 4093416954: "Comprimento de mnemônico inválido", - 1422874211: "Chave pública inválida", - 237577215: "Carteira inválida:", - 4122897393: "Invertido", - 640219121: "Cores invertidas", - 3000888649: "Chave", - 3264569915: "A chave não foi fornecida", - 3835918229: "Teste de impressão de QR krux", - 911419226: "Tipo de LCD", - 766317539: "Língua", - 4180141032: "Deixe em branco se quiser que o Krux escolha uma palavra final válida", - 3663022166: "Esquerda", - 972436696: "Atraso de Linha", - 2176866982: "Linha:", - 2820726296: "Carregar Mnemônico", - 2369474953: "Carregar Carteira", - 2256441194: "Carregar um descritor de carteira confiável para visualizar endereços?", - 237136240: "Carregar do cartão SD", - 879727077: "Carregar do cartão SD?", - 1936877965: "Carregar da câmera", - 669106195: "Carregar um?", - 3330705289: "Carregar?", - 2596531078: "Carregando Câmera..", - 2488179069: "Carregando endereços de troco..", - 336702608: "Carregando impressora..", - 1201104769: "Carregando endereços de recebimento..", - 3159494909: "Carregando..", - 1177338798: "Idioma", - 2817059741: "Local", - 2917810189: "Comprimento máximo excedido (%s)", - 2030045667: "Mensagem", - 762611188: "Mensagem:", - 3928301843: "Arquivo de assinatura faltando", - 1948316555: "Mnemônico", - 2123991188: "ID do mnemônico", - 1443208255: "Mnemônico e senha serão mantidos.", - 1746030071: "Mnemônico não foi criptografado", - 1237332019: "Modificado:", - 1845376098: "Multisig", - 4265479636: "Segwit nativo - 84 seria assumido", - 2939797024: "Rede", - 73574491: "Novo Mnemônico", - 3634967631: "Novo firmware detectado.", - 4063104189: "Não", - 2325721074: "Sem Senha", - 4092516657: "Jogadas insuficientes!", - 3089363813: "Números", - 1577637745: "Octal", - 391304453: "Outros Formatos", - 3312581301: "Iter. PBKDF2", - 995862913: "Pinte os pontos perfurados de preto para que possam ser detectados.", - 2987800462: "Largura do papel", - 3913146360: "Parte", - 3559456868: "Tamanho da peça", - 4249903283: "Senha", - 3745269737: "Incompatibilidade de caminho", - 500286397: "Padrão detectado!", - 3040011773: "Remover permanentemente todos os mnemônicos criptografados e configurações armazenados da memória flash?", - 140802882: "Salvar", - 2578106186: "Índice de desvio de pixels:", - 1703779997: "QR em Texto", - 3561756278: "Carregue um descritor da carteira", - 784609464: "Taxa de Mergulho", - 3761518438: "Entropia fraca", - 3639136476: "Baixa entropia detectada!", - 3037062877: "Imprimir QR de teste", - 2362732578: "Imprimir Tiny Seed?", - 3123770978: "Imprimir QR", - 3345150514: "Imprimir QR?", - 3339507095: "Imprimir?", - 1123106929: "Impressora", - 3903571079: "Driver de impressora não está definido!", - 3586624216: "Imprimindo..", - 3593149291: "Continuar mesmo assim?", - 2580599003: "Seguir?", - 3108881025: "Processando..", - 1848310591: "Código QR", - 710709610: "Pino RX", - 2697857197: "Recebimento", - 1746677167: "Endereços de Recebimento", - 1658501467: "Região:", - 3739634002: "Excluir %s?", - 1476462492: "Excluir Mnemônico", - 1557093280: "Remover arquivos de firmware do cartão SD?", - 2817311427: "Res. - Formato", - 2365886561: "Restaurar as configurações de fábrica e reiniciar?", - 3091105710: "Retornar ao Visualizador de QR", - 1662254634: "Revise os dados, edite se necessário", - 1963678224: "Direita", - 770350922: "Role o dado pelo menos %d vezes para gerar um mnemônico.", - 3271055013: "Distribuição de jogadas:", - 432366011: "Jogadas:", - 3976793317: "Cartão SD", - 2736513298: "Cartão SD não detectado.", - 1166743226: "SHA256 de jogadas:", - 817419367: "Sha256 da imagem:", - 699906428: "Salvar imagem do QR no cartão SD", - 2163347007: "Salvar no cartão SD", - 3531742595: "Salvar no cartão SD?", - 2940025484: "Salvo no cartão SD", - 763824768: "Escala", - 4117455079: "Escanear Endereço", - 4038076821: "Escanear a senha BIP39", - 923277590: "Escanear Código QR da Chave", - 4006316572: "Escaneando as palavras 1-12 novamente", - 2736506158: "Escaneando as palavras 13-24", - 2029624154: "Tempo para protetor de tela", - 289960586: "Tipo de Script", - 1022211991: "Segurança", - 4255182430: "Autotransferência ou Troco (%d):", - 3753172956: "Autotransferência:", - 473154195: "Configurações", - 563836138: "Configurações armazenadas internamente no flash.", - 712533907: "Configurações armazenadas no cartão SD.", - 2377955518: "Entropia de Shannon:", - 1825881236: "Desligar", - 3656120779: "Tempo de desligamento", - 2120776272: "Desligando..", - 1061961408: "Assinar", - 2293863356: "Assinar para código QR", - 2879966040: "Assinar para cartão SD", - 4282338366: "Assinar?", - 746161122: "Assinatura", - 1988416729: "Mensagem Assinada", - 3672006076: "PSBT Assinada", - 3406791302: "Assinando..", - 2281377987: "Single-sig", - 2019512665: "Total:", - 2344747135: "Algumas verificações não podem ser realizadas.", - 2090568351: "Gastos (%d):", - 1260825919: "Gasto:", - 1232757391: "Estatísticas para Nerds", - 3303592908: "Armazene na Flash", - 720041451: "Armazene no Cartão SD", - 3514476519: "Deslize para mudar de modo", - 1898550184: "TOQUE ou ENTER para capturar", - 4228215415: "Pino TX", - 2612594937: "Texto", - 1454688268: "Tema", - 1180180513: "Térmica", - 2258131455: "Para garantir que os dados sejam irrecuperáveis, use o recurso Limpar Dispositivo", - 2700207481: "Alternar brilho", - 725348723: "Ferramentas", - 3684696112: "Limiar de Toque", - 2978718564: "Touchscreen", - 2732611775: "Tentar mais?", - 401829098: "Digitar a senha BIP39", - 2061556020: "Digite a Chave", - 2089395053: "Unidade", - 2786714360: "Atualização completa.", - 2674953168: "Use uma superfície de fundo preta.", - 2402455261: "Use a entropia da câmera para criar um novo mnemônico", - 3336226318: "Usado:", - 4003084591: "Valor %s fora do alcance: [ %s, %s]", - 989428076: "O valor deve ser múltiplo de %s", - 3429519584: "Verificando..", - 1889659487: "Versão", - 4191058607: "Pela Câmera", - 1254681955: "Via D20", - 525309547: "Via D6", - 590330112: "Por entrada manual", - 1947603760: "Via Palavras", - 2504354847: "Aguarde a captura", - 2076481321: "Carteira", - 2297028319: "Descritor de Carteira", - 4232654916: "Descritor da carteira", - 2587172867: "Descritor de saída da carteira carregado!", - 2499782468: "O descritor de saída da carteira não foi encontrado.", - 2671738224: "Aviso:", - 262410364: "Limpar Dispositivo", - 3522794335: "Limpando Dispositivo..", - 797660533: "Palavra %d", - 3742424146: "Números das Palavras", - 2965123464: "Palavras", - 1303016265: "Sim", - 2171149824: "é um endereço válido!", - 1875891934: "NÃO FOI ENCONTRADO nos primeiros %d endereços", - }, - "ru-RU": { - 232475068: "% от суммы.", - 1185266064: "%d из %d мультиподпись", - 1503087751: "%d к %d", - 1178563089: "%s удален.", - 1092222515: "(%d всего)", - 3348584292: "(Эксперементальный)", - 1099786887: "(Только часы)", - 2739590230: "12 слов", - 1310058127: "24 слова", - 1949634023: "О Программе", - 4287534872: "Принять предположение?", - 2995482424: "Учетная запись", - 2415648848: "Будет принят счет №0", - 1043817877: "Индекс счета", - 3439746594: "Добавить или изменить пароль кошелька?", - 2143824150: "Для режима AES-CBC требуется дополнительная энтропия от камеры", - 3270727197: "Адрес", - 900375497: "Правильно совместите камеру и резервную пластину.", - 88746165: "Антиблик отключен", - 1521033296: "Антиблик включен", - 3857613120: "Внешний Вид", - 1056821534: "Вы уверены?", - 1868069640: "Цвета BGR", - 3455872521: "Назад", - 4151330982: "Назад в Mеню", - 2756316330: "Резервная мнемоника", - 2256777600: "Плохая подпись", - 3937333362: "Скорость Передачи Данных", - 2046615409: "Двоичная сетка", - 928727036: "Заполнение Границ", - 2519455027: "Яркость", - 2363604010: "Кнопки", - 2038226551: "Антидребезг кнопок", - 3138204438: "Захват отменен", - 1207696150: "Сдача", - 3126552510: "Адрес Сдачи", - 1583186953: "Сменить тему и перезагрузить?", - 3768416405: "Сдача:", - 388908871: "Изменения будут храниться до выключения.", - 3442025874: "Проверить SD Карту", - 3119547911: "Проверить, что адрес принадлежит этому кошельку?", - 1187826970: "Проверено %d адресов без совпадений.", - 2470115694: "Проверка SD карты..", - 1851578965: "Дочерний индекс", - 4094072796: "Создать QR Код", - 167798282: "Создать QR код из текста?", - 678449760: "Создано:", - 3513215254: "Пользовательский QR Код", - 3585411775: "Настроить", - 534274978: "Настройка вашего кошелька создаст новый ключ.", - 124617190: "Глубина Резки", - 597912140: "Метод Резки", - 2504034831: "Десятичный", - 2751113454: "Расшифровать?", - 1272005728: "Кошелек по умолчанию", - 4102535566: "Глубина за Проход", - 1712856005: "Адреса дескрипторов", - 3278654271: "Дисплеи", - 3895447625: "Не выключайте питание, это может занять некоторое время.", - 3836852788: "Готово?", - 690625786: "Двойная мнемоника", - 382368239: "Драйвер", - 3582575312: "Зашифровано", - 1244124409: "Зашифрованный QR Код", - 2968548114: "Зашифрованная мнемоника не была сохранена", - 781419966: "Зашифрованная мнемоника была сохранена с ID:", - 350279787: "Шифрование", - 2601598799: "Метод Шифрования", - 1821513079: "Введите %d слов BIP-39.", - 3504179008: "Введите каждое слово вашей мнемоники BIP-39 в виде числа от 1 до 2048.", - 1100685007: "Введите каждое слово вашей мнемоники BIP-39 в виде шестнадцатеричного числа от 1 до 800.", - 4090266642: "Введите каждое слово вашей мнемоники BIP-39 в виде восьмеричного числа от 1 до 4000.", - 2780625730: "Введите каждое слово вашей BIP-39 мнемоники.", - 889040671: "Ошибка:", - 1505332462: "Выйти", - 3838465623: "Исследовать файлы?", - 4170881190: "Экспортирование на SD карту..", - 1711312434: "Расширенный Публичный Ключ", - 3981762528: "Заводские Настройки", - 383371114: "Не удалось расшифровать", - 3048830188: "Не удалось загрузить PSBT", - 4192663412: "Не удалось загрузить адрес", - 1996021743: "Не удалось загрузить ключ", - 1108715658: "Не удалось загрузить сообщение", - 1081425878: "Не удалось загрузить мнемонику", - 928667220: "Не удалось загрузить выходной дескриптор", - 1620572516: "Не удалось загрузить фразу-пароль", - 2946146830: "Не удалось сохранить мнемонику", - 262248294: "Комиссия:", - 104500973: "Скорость Подачи", - 3313339187: "Имя файла", - 1982637349: "Файл %s существует на SD карте, перезаписать?", - 4006602858: "Отпечаток пальца не установлен в PSBT", - 2542772894: "Прошивка превышает максимальный размер: %d", - 3748840176: "Перевернутые координаты X", - 1406590538: "Диаметр Флюта", - 1077771640: "Свободно:", - 1893243331: "Из Памяти", - 1871146425: "Полностью стерите SD-карту в другом устройстве, чтобы убедиться, что данные не восстановимы", - 3549015533: "Создать Мнемонику", - 3524220994: "Сгенерировать дочернюю мнемонику BIP85?", - 299338213: "Назначить этой мнемоники кастомный ID? В ином случае будет использован текущий фингерпринт", - 602716148: "OK", - 1198393582: "Хорошая энтропия", - 133139382: "Аппаратное Обеспечение", - 3580020863: "Шестнадцатеричный Публичный Ключ", - 2691246967: "Шестнадцатеричный", - 3903754133: "Скрыть мнемоники", - 3876651191: "Высокие комиссии!", - 2880010062: "ID уже существует", - 3242179508: "Входы (%d):", - 3034883011: "Установить?", - 3755547839: "Недостаточная Энтропия!", - 2032416055: "Недостаточная энтропия", - 2585599782: "Неверный адрес", - 2874529150: "Неверный загрузчик", - 4093416954: "Неверная длина мнемоники", - 1422874211: "Неверный публичный ключ", - 237577215: "Неверный кошелек:", - 4122897393: "Инвертировать", - 640219121: "Перевернутые цвета", - 3000888649: "Ключ", - 3264569915: "Ключ не предоставлен", - 3835918229: "Тестовый QR Принтера Krux", - 911419226: "Тип ЖК-дисплея", - 766317539: "Язык", - 4180141032: "Оставьте пустым, если хотите, чтобы Krux выбрал подходящее последнее слово", - 3663022166: "Влево", - 972436696: "Задержка Линии", - 2176866982: "Линия:", - 2820726296: "Загрузить Мнемонику", - 2369474953: "Загрузить кошелек", - 2256441194: "Загрузить дескриптор доверенного кошелька для просмотра адресов?", - 237136240: "Загрузка с SD-карты", - 879727077: "Загрузить с SD карты?", - 1936877965: "Из камеры", - 669106195: "Загрузить один?", - 3330705289: "Загрузить?", - 2596531078: "Загрузка Камеры..", - 2488179069: "Загрузка адресов изменения..", - 336702608: "Загрузка принтера..", - 1201104769: "Загрузка адресов получения..", - 3159494909: "Загрузка..", - 1177338798: "Локаль", - 2817059741: "Расположение", - 2917810189: "Максимальная длина превышена (%s)", - 2030045667: "Сообщение", - 762611188: "Сообщение:", - 3928301843: "Отсутствует файл подписи", - 1948316555: "Мнемоника", - 2123991188: "ID Мнемоники", - 1443208255: "Мнемоника и парольная фраза будут сохранены.", - 1746030071: "Мнемоника не была зашифрована", - 1237332019: "Изменено:", - 1845376098: "Мультиподпись", - 4265479636: "Native Segwit - 84 будет принято", - 2939797024: "Сеть", - 73574491: "Новая Мнемоника", - 3634967631: "Обнаружена новая прошивка.", - 4063104189: "Нет", - 2325721074: "Нет Фраза-пароль", - 4092516657: "Недостаточно бросков!", - 3089363813: "Числа", - 1577637745: "Восьмеричный", - 391304453: "Другие форматы", - 3312581301: "PBKDF2 Итерации", - 995862913: "Закрасьте перфорированные точки черным цветом, чтобы их можно было обнаружить.", - 2987800462: "Ширина Бумаги", - 3913146360: "Часть", - 3559456868: "Размер Части", - 4249903283: "Фраза-пароль", - 3745269737: "Несоответствие пути", - 500286397: "Образец обнаружен!", - 3040011773: "Окончательно удалить все сохраненные зашифрованные мнемоники и настройки из флеш-памяти?", - 140802882: "Постоянная Память", - 2578106186: "Индекс отклонения пикселей:", - 1703779997: "QR Открытым Текстом", - 3561756278: "Пожалуйста загрузите выходной дескриптор кошелька", - 784609464: "Скорость Погружения", - 3761518438: "Плохая энтропия", - 3639136476: "Обнаружена плохая энтропия!", - 3037062877: "Напечатать Тестовый QR", - 2362732578: "Распечатать Tiny Seed?", - 3123770978: "Печать в QR", - 3345150514: "Напечатать в виде QR?", - 3339507095: "Печатать?", - 1123106929: "Принтер", - 3903571079: "Драйвер Принтера не установлен!", - 3586624216: "Идет печать..", - 3593149291: "Все равно продолжить?", - 2580599003: "Продолжить?", - 3108881025: "Обработка..", - 1848310591: "QR Код", - 710709610: "RX Пин", - 2697857197: "Получить", - 1746677167: "Адрес Получения", - 1658501467: "Регион:", - 3739634002: "Удалить %s?", - 1476462492: "Удалить Мнемонику", - 1557093280: "Удалить файлы прошивки с SD-карты?", - 2817311427: "Разреш. - Формат", - 2365886561: "Восстановить заводские настройки и перезагрузить?", - 3091105710: "Вернуться к QR-просмотрщику", - 1662254634: "Просмотрите отсканированные данные, отредактируйте при необходимости", - 1963678224: "Вправо", - 770350922: "Бросьте кубик не менее %d раз, чтобы сгенерировать мнемонику.", - 3271055013: "Распределение бросков:", - 432366011: "Броски:", - 3976793317: "SD карта", - 2736513298: "SD карта не обнаружена.", - 1166743226: "SHA256 бросков:", - 817419367: "SHA256 снэпшота:", - 699906428: "Сохранить QR-изображение на SD-карту", - 2163347007: "Сохранить на SD-карту", - 3531742595: "Сохранить на SD карту?", - 2940025484: "Сохранено на SD карту", - 763824768: "Шкала", - 4117455079: "Отсканировать Адрес", - 4038076821: "Отсканировать BIP39 фразу-пароль", - 923277590: "Отсканировать Ключ QR код", - 4006316572: "Сканирование слов 1-12 снова", - 2736506158: "Сканирование слов 13-24", - 2029624154: "Время Экранной Заставки", - 289960586: "Тип скрипта", - 1022211991: "Охрана", - 4255182430: "Трансфер самому себе или Сдача (%d):", - 3753172956: "Перевод самому себе:", - 473154195: "Настройки", - 563836138: "Настройки хранятся во флэш-памяти.", - 712533907: "Настройки сохранены на SD-карте.", - 2377955518: "Энтропия Шеннона:", - 1825881236: "Выключить", - 3656120779: "Время выключения", - 2120776272: "Выключение..", - 1061961408: "Подписать", - 2293863356: "Подписать QR-код", - 2879966040: "Подписать на SD-карте", - 4282338366: "Подписать?", - 746161122: "Подпись", - 1988416729: "Подписанное Сообщение", - 3672006076: "Подписанное PSBT", - 3406791302: "Подписание..", - 2281377987: "Одна подпись", - 2019512665: "Размер:", - 2344747135: "Некоторые проверки не могут быть выполнены.", - 2090568351: "Расход (%d):", - 1260825919: "Расход:", - 1232757391: "Статистика для Гиков", - 3303592908: "Сохранить на Флэш Память", - 720041451: "Сохранить на SD Карту", - 3514476519: "Свайпните, чтобы сменить режим", - 1898550184: "ПРИКОСНИТЕСЬ или нажмите ВВОД, чтобы захватить", - 4228215415: "TX Пин", - 2612594937: "Текст", - 1454688268: "Тема", - 1180180513: "Термальный", - 2258131455: "Для гарантии невосстановления данных используйте функцию Очистки Устройства", - 2700207481: "Регулировка Яркости", - 725348723: "Инструменты", - 3684696112: "Чувствительность", - 2978718564: "Тачскрин", - 2732611775: "Попробовать ещё?", - 401829098: "Ввести BIP39 фразу-пароль", - 2061556020: "Ввести Ключ", - 2089395053: "Единица Измерения", - 2786714360: "Обновление завершено.", - 2674953168: "Использовать черную фоновую поверхность.", - 2402455261: "Использовать энтропию камеры, чтобы создать новую мнемонику", - 3336226318: "Использовано:", - 4003084591: "Значение %s вне диапозона: [%s, %s]", - 989428076: "Значение должно быть кратным %s", - 3429519584: "Проверка..", - 1889659487: "Версия", - 4191058607: "С Помощью Камеры", - 1254681955: "С Помощью D20", - 525309547: "С Помощью D6", - 590330112: "С Помощью Ручного Ввода", - 1947603760: "Через Слово", - 2504354847: "Дождитесь Захвата", - 2076481321: "Кошелек", - 2297028319: "Дескриптор Кошелька", - 4232654916: "Выходной дескриптор кошелька", - 2587172867: "Выходной дескриптор кошелька загружен!", - 2499782468: "Выходной дескриптор кошелька не найден.", - 2671738224: "Предупреждение:", - 262410364: "Очистка Устройства", - 3522794335: "Очистка Устройства..", - 797660533: "Слово %d", - 3742424146: "Числа Слов", - 2965123464: "Слова", - 1303016265: "Да", - 2171149824: "некорректный адрес", - 1875891934: "нЕ НАЙДЕНО в первых %d адресах", - }, - "tr-TR": { - 232475068: "tutarın %'si.", - 1185266064: "%d / %d çoklu imza", - 1503087751: "%d to %d", - 1178563089: "%s kaldırıldı.", - 1092222515: "(toplam %d)", - 3348584292: "(Deneysel)", - 1099786887: "(sadece izle)", - 2739590230: "12 kelime", - 1310058127: "24 kelime", - 1949634023: "Hakkında", - 4287534872: "Varsayım kabul edilsin mi?", - 2995482424: "Hesap", - 2415648848: "#0 numaralı hesap varsayılacaktır", - 1043817877: "Hesap Endeksi", - 3439746594: "Cüzdan parolası eklensin mi veya değiştirilsin mi?", - 2143824150: "AES-CBC modu için kameradan ek entropi gereklidir", - 3270727197: "Adres", - 900375497: "Kamerayı ve yedek plakay'ı düzgün bir şekilde hizalayın.", - 88746165: "Parlama önleyici devre dışı", - 1521033296: "Parlama önleyici etkin", - 3857613120: "Görünüm", - 1056821534: "Emin misiniz?", - 1868069640: "BGR Renkleri", - 3455872521: "Geri", - 4151330982: "Menüye Dön", - 2756316330: "Yedek Mnemonic", - 2256777600: "Geçersiz imza", - 3937333362: "Baud Hızı", - 2046615409: "İkili Izgara", - 928727036: "Kenarlık Dolgusu", - 2519455027: "Parlaklık", - 2363604010: "Butonlar", - 2038226551: "Buton Geri-sekmesi", - 3138204438: "Yakalama iptal edildi", - 1207696150: "Para Üstü", - 3126552510: "Para Üstü Adresleri", - 1583186953: "Temayı değiştir ve yeniden başlat?", - 3768416405: "Para Üstü:", - 388908871: "Değişiklikler kapanışa kadar devam edecek.", - 3442025874: "SD Kartı Kontrol Et", - 3119547911: "Bu adresin, bu cüzdana ait olduğunu kontrol et?", - 1187826970: "Eşleşmeyen %d adres kontrol edildi.", - 2470115694: "SD kart kontrol ediliyor..", - 1851578965: "Türev Dizini", - 4094072796: "QR Kodu Oluştur", - 167798282: "Metinden QR kodu oluşturulsun mu?", - 678449760: "Oluşturuldu:", - 3513215254: "Özel QR Kodu", - 3585411775: "Özelleştir", - 534274978: "Cüzdanınızı özelleştirmek yeni bir Anahtar oluşturacaktır.", - 124617190: "Kesim Derinliği", - 597912140: "Kesim Yöntemi", - 2504034831: "Ondalık", - 2751113454: "Şifre çözülsün mü?", - 1272005728: "Varsayılan Cüzdan", - 4102535566: "Geçiş Başına Derinlik", - 1712856005: "Tanımlayıcı Adresler", - 3278654271: "Ekran", - 3895447625: "Kapatmayın, tamamlanması biraz zaman alabilir.", - 3836852788: "Tamamlandı mı?", - 690625786: "Çifte anımsatıcı", - 382368239: "Sürücü", - 3582575312: "Şifrelenmiş", - 1244124409: "Şifrelenmiş QR Kodu", - 2968548114: "Şifrelenmiş mnemonic depolanmadı", - 781419966: "Şifrelenmiş mnemonic ID ile depolandı:", - 350279787: "Şifreleme", - 2601598799: "Şifreleme Modu", - 1821513079: "%d BIP-39 kelime girin.", - 3504179008: "BIP-39 mnemonic'inizin her kelimesini 1'den 2048'e kadar bir sayı olarak girin.", - 1100685007: "BIP-39 mnemonic'inizin her kelimesini 1'den 800'e kadar onaltılık bir sayı olarak girin.", - 4090266642: "BIP-39 mnemonic'inizin her kelimesini 1'den 4000'e kadar sekizlik bir sayı olarak girin.", - 2780625730: "BIP-39 mnemonic'inizin her kelimesini girin.", - 889040671: "Hata:", - 1505332462: "Çıkış", - 3838465623: "Dosyaları ara?", - 4170881190: "SD karta aktarılıyor..", - 1711312434: "Genişletilmiş Public Key", - 3981762528: "Fabrika Ayarları", - 383371114: "Şifre çözme başarısız", - 3048830188: "PSBT yükleme başarısız", - 4192663412: "Adres yükleme başarısız", - 1996021743: "Anahtar yükleme başarısız", - 1108715658: "Mesaj yükleme başarısız", - 1081425878: "Mnemonic yükleme başarısız", - 928667220: "Çıktı tanımlayıcısı yüklemesi başarısız", - 1620572516: "Parola yükleme başarısız", - 2946146830: "Mnemonic depolama başarısız", - 262248294: "Ücret:", - 104500973: "Besleme Hızı", - 3313339187: "Dosya adı", - 1982637349: "%s dosya adı SD kartta var, üzerine yazılsın mı?", - 4006602858: "PSBT'de parmak izi ayarı kaldırıldı", - 2542772894: "Donanım yazılımı maksimum boyutu aşıyor: %d", - 3748840176: "X Koordinatları Tersine Çevrildi", - 1406590538: "Flute Çapı", - 1077771640: "Boş:", - 1893243331: "Depolamadan Seç", - 1871146425: "Verilerin geri kullanılamaz olduğundan emin olmak için SD kartınızı başka bir cihazda tamamen silin", - 3549015533: "Mnemonic Oluştur", - 3524220994: "BIP85 türevi anımsatıcı oluşturulsun mu?", - 299338213: "Bu mnemonic'e özel bir ID verilsin mi? Aksi takdirde mevcut parmak izi kullanılacaktır", - 602716148: "Seç", - 1198393582: "Yeterli entropi", - 133139382: "Donanım", - 3580020863: "Hex Public Key", - 2691246967: "Onaltılık", - 3903754133: "Mnemonic'leri Gizle", - 3876651191: "Yüksek ücret!", - 2880010062: "ID zaten var", - 3242179508: "Girişler (%d):", - 3034883011: "Yükle?", - 3755547839: "Yetersiz Entropi!", - 2032416055: "Yetersiz entropi", - 2585599782: "Geçersiz adres", - 2874529150: "Geçersiz önyükleyici", - 4093416954: "Geçersiz mnemonic uzunluğu", - 1422874211: "Geçersiz public key", - 237577215: "Geçersiz cüzdan:", - 4122897393: "Ters Çevir", - 640219121: "Ters Renkler", - 3000888649: "Anahtar", - 3264569915: "Anahtar sağlanmadı", - 3835918229: "Krux Yazıcı Test QR'ı", - 911419226: "LCD Tipi", - 766317539: "Dil", - 4180141032: "Krux'un geçerli bir son kelime seçmesini istiyorsanız boş bırakın", - 3663022166: "Sol", - 972436696: "Satır Gecikmesi", - 2176866982: "Satır:", - 2820726296: "Mnemonic Yükle", - 2369474953: "Cüzdan Yükle", - 2256441194: "Adresleri görüntülemek için güvenilir bir cüzdan tanımlayıcısı yüklensin mi?", - 237136240: "SD karttan yükle", - 879727077: "SD karttan yüklensin mi?", - 1936877965: "Kameradan yükle", - 669106195: "Bir tane mi yüklensin?", - 3330705289: "Yüklensin mi?", - 2596531078: "Kamera Yükleniyor..", - 2488179069: "Para üstü adresler yükleniyor..", - 336702608: "Yazıcı yükleniyor..", - 1201104769: "Alım adresler yükleniyor..", - 3159494909: "Yükleniyor..", - 1177338798: "Yerel", - 2817059741: "Konum", - 2917810189: "Maksimum uzunluk aşıldı (%s)", - 2030045667: "Mesaj", - 762611188: "Mesaj:", - 3928301843: "İmza dosyası eksik", - 1948316555: "Mnemonic", - 2123991188: "Mnemonic ID", - 1443208255: "Mnemonik ve parola tutulacaktır.", - 1746030071: "Mnemonic şifrelenmedi", - 1237332019: "Değiştirildi:", - 1845376098: "Çoklu imza", - 4265479636: "Yerel Segwit - 84 varsayılacaktır", - 2939797024: "Ağ", - 73574491: "Yeni Mnemonic", - 3634967631: "Yeni donanım yazılımı tespit edildi.", - 4063104189: "Hayır", - 2325721074: "Parola Yok", - 4092516657: "Yeterli zar atışı yok!", - 3089363813: "Numaralar", - 1577637745: "Sekizlik", - 391304453: "Diğer Formatlar", - 3312581301: "PBKDF2 Yinelemesi", - 995862913: "İşaretlenmiş noktaları siyaha boyayın ki tespit edilebilsinler.", - 2987800462: "Kağıt Genişliği", - 3913146360: "Parça", - 3559456868: "Parça Boyutu", - 4249903283: "Parola", - 3745269737: "Yol uyuşmazlığı", - 500286397: "Örüntü algılandı!", - 3040011773: "Tüm depolanmış ve şifrelenmiş mnemonic'ler ve ayarlar flash'tan kalıcı olarak kaldırılsın mı?", - 140802882: "Kalıcı Depolama", - 2578106186: "Piksel sapma indeksi:", - 1703779997: "Düz Metin QR'ı", - 3561756278: "Lütfen bir cüzdan çıktı tanımlayıcısı yükleyin", - 784609464: "Dalış Hızı", - 3761518438: "Düşük entropi", - 3639136476: "Düşük entropi tespit edildi!", - 3037062877: "Test QR'ını Yazdır", - 2362732578: "Tiny Seed Yazdırılsın mı?", - 3123770978: "QR'a Yazdır", - 3345150514: "QR'a yazdırılsın mı?", - 3339507095: "Yazdırılsın mı?", - 1123106929: "Yazıcı", - 3903571079: "Yazıcı Sürücüsü ayarlanmadı!", - 3586624216: "Yazdırılıyor..", - 3593149291: "Yine de devam edilsin mi?", - 2580599003: "Devam edilsin mi?", - 3108881025: "İşleniyor..", - 1848310591: "QR Kodu", - 710709610: "RX Pini", - 2697857197: "Al", - 1746677167: "Adresleri Al", - 1658501467: "Bölge:", - 3739634002: "%s kaldırılsın mı?", - 1476462492: "Mnemonic'i Kaldır", - 1557093280: "SD Karttan donanım yazılımı dosyaları kaldırılsın mı?", - 2817311427: "Çözünürlüğü Sıfırla", - 2365886561: "Fabrika ayarlarına geri dönüp ve yeniden başlatılsın mı?", - 3091105710: "QR Görüntüleyiciye Dön", - 1662254634: "Taranan verileri gözden geçirin, gerekirse düzenleyin", - 1963678224: "Sağ", - 770350922: "Bir mnemonic oluşturmak için zarı en az %d kez atın.", - 3271055013: "Zar atış dağılımı:", - 432366011: "Zar atışları:", - 3976793317: "SD kart", - 2736513298: "SD kart algılanmadı.", - 1166743226: "Zar atışlarının SHA256'sı:", - 817419367: "Snapshot'ın SHA256'sı:", - 699906428: "QR Görüntüsünü SD Karta Kaydet", - 2163347007: "SD karta kaydet", - 3531742595: "SD karta kaydedilsin mi?", - 2940025484: "SD karta kaydedildi", - 763824768: "Ölçek", - 4117455079: "Adresi Tara", - 4038076821: "BIP39 Parolasını Tara", - 923277590: "Anahtar QR Kodunu Tara", - 4006316572: "1-12 kelimeleri tekrar taranıyor", - 2736506158: "13-24 kelimeleri taranıyor", - 2029624154: "Ekran Koruyucu Süresi", - 289960586: "Betik Türü", - 1022211991: "Güvenlik", - 4255182430: "Kendine-transfer veya Para Üstü (%d):", - 3753172956: "Kendine-transfer:", - 473154195: "Ayarlar", - 563836138: "Ayarlar dahili olarak flaşta saklanır.", - 712533907: "Ayarlar SD karta kaydedildi.", - 2377955518: "Shannon Entropisi:", - 1825881236: "Kapat", - 3656120779: "Kapanma Süresi", - 2120776272: "Kapatılıyor..", - 1061961408: "İmzala", - 2293863356: "QR koduna imzala", - 2879966040: "SD karta imzala", - 4282338366: "İmzalansın mı?", - 746161122: "İmza", - 1988416729: "İmzalı Mesaj", - 3672006076: "İmzalı PSBT", - 3406791302: "İmzalanıyor..", - 2281377987: "Tek-imza", - 2019512665: "Boyut:", - 2344747135: "Bazı kontroller yerine getirilemedi.", - 2090568351: "Harcama (%d):", - 1260825919: "Harcama:", - 1232757391: "İnekler İçin İstatistikler", - 3303592908: "Flash'ta Sakla", - 720041451: "SD Kartta Sakla", - 3514476519: "Modu değiştirmek için kaydırın", - 1898550184: "Yakalamak için DOKUN veya GİR", - 4228215415: "TX Pini", - 2612594937: "Metin", - 1454688268: "Tema", - 1180180513: "Termal", - 2258131455: "Verilerin geri kullanılamaz olduğundan emin olmak için Cihazı Sil özelliğini kullanın", - 2700207481: "Parlaklığı Değiştir", - 725348723: "Araçlar", - 3684696112: "Dokunma Eşiği", - 2978718564: "Dokunmatik ekran", - 2732611775: "Daha fazla kez denensin mi?", - 401829098: "BIP39 parolasını yazın", - 2061556020: "Anahtar Yaz", - 2089395053: "Birim", - 2786714360: "Güncelleme tamamlandı.", - 2674953168: "Siyah bir arka plan yüzeyi kullanın.", - 2402455261: "Yeni bir mnemonic oluşturmak için kameranın entropisini kullanın", - 3336226318: "Kullanılan:", - 4003084591: "%s değeri aralık dışında: [%s, %s]", - 989428076: "Değer %s'nin katı olmalıdır", - 3429519584: "Doğrulanıyor..", - 1889659487: "Sürüm", - 4191058607: "Kamera Aracılığıyla", - 1254681955: "D20 Aracılığıyla", - 525309547: "D6 Aracılığıyla", - 590330112: "Manuel Giriş Aracılığıyla", - 1947603760: "Sözcüklerle", - 2504354847: "Yakalamanın tamamlanmasını bekleyin", - 2076481321: "Cüzdan", - 2297028319: "Cüzdan Tanımlayıcısı", - 4232654916: "Cüzdan çıktı tanımlayıcısı", - 2587172867: "Cüzdan çıktı tanımlayıcısı yüklendi!", - 2499782468: "Cüzdan çıktı tanımlayıcısı bulunamadı.", - 2671738224: "Uyarı:", - 262410364: "Cihazı Sil", - 3522794335: "Cihaz Siliniyor..", - 797660533: "Kelime %d", - 3742424146: "Kelime Numaraları", - 2965123464: "Kelimeler", - 1303016265: "Evet", - 2171149824: "geçerli bir adres!", - 1875891934: "ilk %d adreste BULUNAMADI", - }, - "vi-VN": { - 232475068: "% của số tiền.", - 1185266064: "%d của %d đa chữ kí", - 1503087751: "%d đến %d", - 1178563089: "%s Đã bỏ.", - 1092222515: "(tổng cộng %d)", - 3348584292: "(Thực nghiệm)", - 1099786887: "(chỉ xem)", - 2739590230: "12 từ", - 1310058127: "24 từ", - 1949634023: "Về chúng tôi", - 4287534872: "Chấp nhận giả định?", - 2995482424: "Tài khoản", - 2415648848: "Tài khoản #0 sẽ được giả định", - 1043817877: "Chỉ mục tài khoản", - 3439746594: "Thêm hoặc thay đổi cụm mật khẩu ví?", - 2143824150: "Cần thêm entropy từ camera cho chế độ AES-CBC", - 3270727197: "Địa chỉ", - 900375497: "Căn chỉnh camera và tấm dự phòng đúng cách.", - 88746165: "Chống lóa bị vô hiệu hóa", - 1521033296: "Đã bật chống lóa", - 3857613120: "Giao diện", - 1056821534: "Bạn có chắc không?", - 1868069640: "Màu BGR", - 3455872521: "Trở lại", - 4151330982: "Quay lại Menu", - 2756316330: "Sao lưu Mnemonic", - 2256777600: "Chữ ký xấu", - 3937333362: "Tốc độ baud", - 2046615409: "Lưới nhị phân", - 928727036: "Đệm viền", - 2519455027: "Độ sáng", - 2363604010: "Nút", - 2038226551: "Loại bỏ nhiễu nút", - 3138204438: "Hủy chụp hình", - 1207696150: "Thay đổi", - 3126552510: "Các địa chỉ tiền thối", - 1583186953: "Thay đổi giao diện và khởi động lại?", - 3768416405: "Thay đổi:", - 388908871: "Thay đổi sẽ kéo dài cho đến khi tắt máy.", - 3442025874: "Kiểm tra thẻ SD", - 3119547911: "Kiểm tra địa chỉ đó có thuộc về ví này không?", - 1187826970: "Đã kiểm tra %d địa chỉ không khớp.", - 2470115694: "Kiểm tra thẻ SD..", - 1851578965: "Chỉ mục phụ", - 4094072796: "Tạo mã QR", - 167798282: "Tạo mã QR từ văn bản?", - 678449760: "Tạo:", - 3513215254: "Mã QR tùy chỉnh", - 3585411775: "Tùy chỉnh", - 534274978: "Tùy chỉnh ví của bạn sẽ tạo một Khóa mới.", - 124617190: "Chiều sâu cắt", - 597912140: "Phương pháp cắt", - 2504034831: "Số thập phân", - 2751113454: "Giải mã?", - 1272005728: "Ví mặc định", - 4102535566: "Độ sâu mỗi lần cắt CNC", - 1712856005: "Địa chỉ người mô tả", - 3278654271: "Hiển thị", - 3895447625: "Không được tắt máy, có thể mất một lúc để hoàn thành.", - 3836852788: "Hoàn tất?", - 690625786: "Từ gợi nhớ kép", - 382368239: "Driver", - 3582575312: "Đã mã hóa", - 1244124409: "Mã QR được mã hóa", - 2968548114: "Mnemonic được mã hóa không được lưu trữ", - 781419966: "Mnemonic được mã hóa không được lưu trữ với ID:", - 350279787: "Mã hóa", - 2601598799: "Chế độ mã hóa", - 1821513079: "Nhập %d từ BIP-39.", - 3504179008: "Nhập từng từ của Mnemonic BIP-39 của bạn dưới dạng số từ 1 đến 2048.", - 1100685007: "Nhập từng từ trong Mnemonic BIP-39 của bạn dưới dạng số thập lục phân từ 1 đến 800.", - 4090266642: "Nhập từng từ trong Mnemonic BIP-39 của bạn dưới dạng số bát phân từ 1 đến 4000.", - 2780625730: "Nhập từng từ của Mnemonic BIP-39 của bạn.", - 889040671: "Lỗi:", - 1505332462: "Esc", - 3838465623: "Khám phá các tập tin?", - 4170881190: "Xuất vào thẻ SD ..", - 1711312434: "Khóa công cộng", - 3981762528: "Cài đặt Gốc", - 383371114: "Không giải mã được", - 3048830188: "Tải PSBT thất bại", - 4192663412: "Tải địa chỉ thất bại", - 1996021743: "Không tải được khóa", - 1108715658: "Không tải được tin nhắn", - 1081425878: "Tải mã Mnemonic thất bại", - 928667220: "Không tải được bộ mô tả đầu ra", - 1620572516: "Không tải được cụm mật khẩu", - 2946146830: "Không lưu trữ Mnemonic được", - 262248294: "Phí:", - 104500973: "Tốc độ cắt CNC", - 3313339187: "Tên tệp", - 1982637349: "Tên tệp %s tồn tại trên thẻ SD, ghi đè lên?", - 4006602858: "Bỏ dấu vân tay trong PSBT", - 2542772894: "Phần mềm vượt quá kích thước tối đa: %d", - 3748840176: "Tọa độ X bị lật", - 1406590538: "Đường kính mũi cắt CNC", - 1077771640: "Khả dụng:", - 1893243331: "Từ bộ lưu trữ", - 1871146425: "Xóa hoàn toàn thẻ SD trong một thiết bị khác để đảm bảo dữ liệu không thể phục hồi", - 3549015533: "Tạo Mnemonic", - 3524220994: "Tạo một Mnemonic phụ thuộc BIP85?", - 299338213: "Cung cấp cho Mnemonic này một ID tùy chỉnh? Nếu không thì fingerprint hiện tại sẽ được sử dụng", - 602716148: "Chọn", - 1198393582: "Entropy tốt", - 133139382: "Phần cứng", - 3580020863: "Khóa công cộng Hex", - 2691246967: "Thập lục phân", - 3903754133: "Ẩn Mnemonics", - 3876651191: "Phí cao!", - 2880010062: "Id đã tồn tại", - 3242179508: "Đầu vào (%d):", - 3034883011: "Cài đặt phần mềm?", - 3755547839: "Entropy không đủ!", - 2032416055: "Không đủ entropy", - 2585599782: "Địa chỉ không hợp lệ", - 2874529150: "Bộ tải khởi động không hợp lệ", - 4093416954: "Độ dài mã Mnemonic không hợp lệ", - 1422874211: "Khóa công cộng không hợp lệ", - 237577215: "Ví không hợp lệ:", - 4122897393: "Đảo ngược", - 640219121: "Màu đảo ngược", - 3000888649: "Chìa khóa", - 3264569915: "Khóa không được cung cấp", - 3835918229: "QR kiểm tra máy in Krux", - 911419226: "Loại LCD", - 766317539: "Ngôn ngữ", - 4180141032: "Để trống nếu bạn muốn Krux chọn một từ cuối cùng hợp lệ", - 3663022166: "Trái", - 972436696: "Độ trễ Dòng", - 2176866982: "Đường kẻ:", - 2820726296: "Tải mã mnemonic", - 2369474953: "Nạp Ví", - 2256441194: "Tải mô tả ví đáng tin cậy để xem địa chỉ?", - 237136240: "Tải từ thẻ SD", - 879727077: "Tải từ thẻ SD?", - 1936877965: "Tải từ máy ảnh", - 669106195: "Tải một?", - 3330705289: "Tải?", - 2596531078: "Đang tải máy ảnh..", - 2488179069: "Đang tải địa chỉ tiền thối..", - 336702608: "Đang tải máy in ..", - 1201104769: "Đang tải địa chỉ nhận..", - 3159494909: "Đang tải..", - 1177338798: "Ngôn ngữ", - 2817059741: "Vị trí lưu", - 2917810189: "Chiều dài tối đa vượt quá (%s)", - 2030045667: "Tin nhắn", - 762611188: "Tin nhắn:", - 3928301843: "Thiếu tập tin chữ ký", - 1948316555: "Mã mnemonic", - 2123991188: "Mnemonic ID ", - 1443208255: "Từ gợi nhớ và cụm mật khẩu sẽ được lưu giữ.", - 1746030071: "Mnemonic không được mã hóa", - 1237332019: "Đã sửa đổi:", - 1845376098: "Đa chữ kí", - 4265479636: "Native Segwit - 84 sẽ được giả định", - 2939797024: "Mạng lưới", - 73574491: "Mnemonic mới", - 3634967631: "Phát hiện phần sụn mới.", - 4063104189: "Không", - 2325721074: "Không có cụm mật khẩu", - 4092516657: "Không đủ số lần quay!", - 3089363813: "Số", - 1577637745: "Bát phân", - 391304453: "Các định dạng khác", - 3312581301: "Lặp lại PBKDF2", - 995862913: "Tô các chấm đục lỗ màu đen để chúng có thể được phát hiện.", - 2987800462: "Chiều rộng giấy", - 3913146360: "Phần", - 3559456868: "Kích thước một phần", - 4249903283: "Cụm mật khẩu", - 3745269737: "Đường dẫn không khớp", - 500286397: "Đã phát hiện mẫu!", - 3040011773: "Xóa vĩnh viễn mọi Mnemonics và cài đặt được mã hóa lưu trữ trong flash?", - 140802882: "Vị trí lưu", - 2578106186: "Chỉ số độ lệch điểm ảnh:", - 1703779997: "QR dạng văn bản", - 3561756278: "Vui lòng tải bộ mô tả đầu ra ví", - 784609464: "Tỷ lệ sụt giảm", - 3761518438: "Entropy kém", - 3639136476: "Phát hiện entropy yếu!", - 3037062877: "In kiểm tra QR", - 2362732578: "In Tiny Seed?", - 3123770978: "In ra QR", - 3345150514: "In ra mã QR?", - 3339507095: "In?", - 1123106929: "Máy in", - 3903571079: "Trình điều khiển máy in chưa được cài đặt!", - 3586624216: "Đang in..", - 3593149291: "Vẫn tiếp tục?", - 2580599003: "Thực hiện?", - 3108881025: "Đang xử lý..", - 1848310591: "Mã QR", - 710709610: "RX Pin", - 2697857197: "Nhận được", - 1746677167: "Các địa chỉ nhận", - 1658501467: "Vùng:", - 3739634002: "Xóa %s?", - 1476462492: "Xóa Mnemonic", - 1557093280: "Xóa các tệp firmware khỏi Thẻ SD?", - 2817311427: "Độ phân giải - Định dạng", - 2365886561: "Khôi phục cài đặt gốc và khởi động lại?", - 3091105710: "Quay lại Trình xem QR", - 1662254634: "Xem lại dữ liệu đã quét, chỉnh sửa nếu cần", - 1963678224: "Phải", - 770350922: "Lăn xúc xắc ít nhất %d lần để tạo Mnemonic.", - 3271055013: "Phân bổ xúc xắc:", - 432366011: "Tổng số lần quay xúc xắc:", - 3976793317: "Thẻ SD", - 2736513298: "Thẻ SD không được phát hiện.", - 1166743226: "SHA256 của xúc xắc:", - 817419367: "Sha256 của ảnh chụp:", - 699906428: "Lưu Ảnh QR vào Thẻ SD", - 2163347007: "Lưu vào thẻ SD", - 3531742595: "Lưu vào thẻ SD?", - 2940025484: "Đã lưu vào thẻ SD", - 763824768: "Tỉ lệ", - 4117455079: "Quét địa chỉ", - 4038076821: "Quét cụm mật khẩu BIP39", - 923277590: "Quét mã QR khóa", - 4006316572: "Đang quét lại từ 1-12", - 2736506158: "Đang quét từ 13-24", - 2029624154: "Thời gian chế độ bảo vệ màn hình", - 289960586: "Kiểu văn lệnh", - 1022211991: "Bảo mật", - 4255182430: "Tự chuyển nhượng hoặc giao dịch (%d):", - 3753172956: "Tự chuyển nhượng:", - 473154195: "Cài đặt", - 563836138: "Cài đặt được lưu trữ nội bộ trên đèn flash.", - 712533907: "Cài đặt được lưu trên thẻ SD.", - 2377955518: "Entropy của Shannon:", - 1825881236: "Tắt máy", - 3656120779: "Thời gian tắt máy", - 2120776272: "Đang tắt..", - 1061961408: "Chữ kí", - 2293863356: "Ký vào mã QR", - 2879966040: "Ký vào thẻ SD", - 4282338366: "Kí?", - 746161122: "Chữ ký", - 1988416729: "Tin nhắn đã ký", - 3672006076: "Đã ký PSBT", - 3406791302: "Đang ký..", - 2281377987: "Khóa đơn", - 2019512665: "Dung lượng:", - 2344747135: "Một số kiểm tra không thể được thực hiện.", - 2090568351: "Chi tiêu (%d):", - 1260825919: "Chi tiêu:", - 1232757391: "Số liệu thống kê cho Mọt sách", - 3303592908: "Lưu trữ trên flash", - 720041451: "Lưu trữ trên thẻ SD", - 3514476519: "Vuốt để thay đổi chế độ", - 1898550184: "Chạm màn hình hoặc nhấn nút ENTER để chụp", - 4228215415: "TX Pin", - 2612594937: "Chữ", - 1454688268: "Chủ đề", - 1180180513: "Nhiệt", - 2258131455: "Sử dụng tính năng Xóa dữ liệu trên thiết bị để đảm bảo dữ liệu không thể phục hồi", - 2700207481: "Chuyển đổi độ sáng", - 725348723: "Công cụ", - 3684696112: "Ngưỡng cảm ứng", - 2978718564: "Màn hình cảm ứng", - 2732611775: "Thử thêm nữa?", - 401829098: "Nhập cụm mật khẩu BIP39", - 2061556020: "Nhập khóa", - 2089395053: "Đơn vị", - 2786714360: "Nâng cấp hoàn tất.", - 2674953168: "Sử dụng bề mặt nền đen.", - 2402455261: "Sử dụng sự ngẫu nhiên của máy ảnh để tạo ra một Mnemonic mới", - 3336226318: "Đã sử dụng:", - 4003084591: "Giá trị %s ngoài phạm vi: [ %s, %s]", - 989428076: "Giá trị phải là bội của %s", - 3429519584: "Đang xác minh..", - 1889659487: "Phiên Bản", - 4191058607: "Qua máy ảnh", - 1254681955: "Qua xúc xắc 20 mặt", - 525309547: "Qua xúc xắc 6 mặt", - 590330112: "Thông qua đầu vào thủ công", - 1947603760: "Thông qua từ ngữ", - 2504354847: "Chờ bắt", - 2076481321: "Ví", - 2297028319: "Trình mô tả ví", - 4232654916: "Ví đầu ra mô tả", - 2587172867: "Đã tải bộ mô tả đầu ra của ví!", - 2499782468: "Không tìm thấy bộ mô tả đầu ra ví.", - 2671738224: "Cảnh báo:", - 262410364: "Xóa dữ liệu trên thiết bị", - 3522794335: "Đang xóa dữ liệu trên thiết bị..", - 797660533: "Kí tự %d", - 3742424146: "Từ số", - 2965123464: "Từ ngữ", - 1303016265: "Đúng", - 2171149824: "là một địa chỉ hợp lệ!", - 1875891934: "kHÔNG TÌM THẤY trong %d địa chỉ đầu tiên", - }, - "zh-CN": { - 232475068: "金额的百分比。", - 1185266064: "%d/%d 多签", - 1503087751: "%d到%d", - 1178563089: "%s 已移除.", - 1092222515: "(总计 %d)", - 3348584292: "(实验性)", - 1099786887: "(仅观看)", - 2739590230: "12 个词", - 1310058127: "24 个词", - 1949634023: "关于", - 4287534872: "接受假设?", - 2995482424: "账户", - 2415648848: "将假定为账户 #0", - 1043817877: "账户索引", - 3439746594: "添加或更改钱包密码?", - 2143824150: "AES-CBC 模式需要相机的额外熵", - 3270727197: "地址", - 900375497: "正确对齐摄像头和靠板。", - 88746165: "防眩光已禁用", - 1521033296: "防眩光已启用", - 3857613120: "外观", - 1056821534: "你确定吗?", - 1868069640: "BGR 颜色", - 3455872521: "返回", - 4151330982: "返回菜单", - 2756316330: "备份助记词", - 2256777600: "签名无效", - 3937333362: "波特率", - 2046615409: "二进制网格", - 928727036: "边框填充", - 2519455027: "亮度", - 2363604010: "按钮", - 2038226551: "按钮去抖动", - 3138204438: "捕获取消", - 1207696150: "找零", - 3126552510: "找零地址", - 1583186953: "更改主题并重新启动?", - 3768416405: "找零", - 388908871: "更改将在关机前保持。", - 3442025874: "检查 SD 卡", - 3119547911: "检查该地址是否属于此钱包?", - 1187826970: "已检查%d个不匹配的地址。", - 2470115694: "检查 SD 卡..", - 1851578965: "子索引", - 4094072796: "创建二维码", - 167798282: "从文本创建二维码?", - 678449760: "已创建:", - 3513215254: "自定义二维码", - 3585411775: "自定义", - 534274978: "自定义您的钱包将生成新密钥。", - 124617190: "切割深度", - 597912140: "切割方法", - 2504034831: "十进制", - 2751113454: "解密?", - 1272005728: "默认钱包", - 4102535566: "每次通过的深度", - 1712856005: "描述符地址", - 3278654271: "显示", - 3895447625: "请勿断电,可能需要一段时间完成。", - 3836852788: "完成了吗?", - 690625786: "双重助记符", - 382368239: "驱动程序", - 3582575312: "已加密", - 1244124409: "加密二维码", - 2968548114: "加密助记词未存储", - 781419966: "加密助记词已存储,ID 为:", - 350279787: "加密", - 2601598799: "加密模式", - 1821513079: "输入 %d 个 BIP-39 词。", - 3504179008: "将 BIP-39 助记词的每个词作为 1 到 2048 的数字输入。", - 1100685007: "将 BIP-39 助记词的每个词作为 1 到 800 的十六进制数输入。", - 4090266642: "将 BIP-39 助记词的每个词作为 1 到 4000 的八进制数输入。", - 2780625730: "输入每个 BIP-39 助记词。", - 889040671: "错误:", - 1505332462: "Esc", - 3838465623: "浏览文件?", - 4170881190: "导出到 SD 卡..", - 1711312434: "扩展公钥", - 3981762528: "出厂设置", - 383371114: "解密失败", - 3048830188: "加载 PSBT 失败", - 4192663412: "加载地址失败", - 1996021743: "加载密钥失败", - 1108715658: "加载消息失败", - 1081425878: "加载助记词失败", - 928667220: "加载输出描述符失败", - 1620572516: "加载密码失败", - 2946146830: "存储助记词失败", - 262248294: "费用:", - 104500973: "进给速度", - 3313339187: "文件名", - 1982637349: "文件名 %s 存在于 SD 卡上,覆盖?", - 4006602858: "PSBT 中未设置指纹", - 2542772894: "固件超过最大尺寸:%d", - 3748840176: "翻转 X 坐标", - 1406590538: "刀具直径", - 1077771640: "空闲:", - 1893243331: "从存储中", - 1871146425: "在其他设备中完全擦除您的 SD 卡以确保数据不可恢复", - 3549015533: "生成助记词", - 3524220994: "生成 BIP85 子助记词?", - 299338213: "为此助记词设置自定义 ID?否则将使用当前指纹", - 602716148: "去", - 1198393582: "良好的熵", - 133139382: "硬件", - 3580020863: "十六进制公钥", - 2691246967: "十六进制", - 3903754133: "隐藏助记词", - 3876651191: "高费用!", - 2880010062: "ID 已存在", - 3242179508: "输入 (%d):", - 3034883011: "安装?", - 3755547839: "熵不足!", - 2032416055: "熵不足", - 2585599782: "无效地址", - 2874529150: "无效引导程序", - 4093416954: "助记词长度无效", - 1422874211: "无效公钥", - 237577215: "无效钱包:", - 4122897393: "反转", - 640219121: "反转颜色", - 3000888649: "密钥", - 3264569915: "未提供密钥", - 3835918229: "Krux 打印机测试二维码", - 911419226: "LCD 类型", - 766317539: "语言", - 4180141032: "如果希望 Krux 选择有效的最后一个词,请留空", - 3663022166: "左", - 972436696: "行延迟", - 2176866982: "行:", - 2820726296: "加载助记词", - 2369474953: "加载钱包", - 2256441194: "加载受信任的钱包描述符以查看地址?", - 237136240: "从 SD 卡加载", - 879727077: "从 SD 卡加载?", - 1936877965: "从相机加载", - 669106195: "加载一个?", - 3330705289: "加载?", - 2596531078: "加载相机..", - 2488179069: "加载找零地址..", - 336702608: "加载打印机..", - 1201104769: "加载接收地址..", - 3159494909: "加载中..", - 1177338798: "语言环境", - 2817059741: "位置", - 2917810189: "超过最大长度(%s)", - 2030045667: "消息", - 762611188: "消息:", - 3928301843: "缺少签名文件", - 1948316555: "助记词", - 2123991188: "助记词 ID", - 1443208255: "助记词和密码将被保留。", - 1746030071: "助记词未加密", - 1237332019: "修改时间:", - 1845376098: "多签", - 4265479636: "假定为原生 Segwit - 84", - 2939797024: "网络", - 73574491: "新助记词", - 3634967631: "检测到新固件。", - 4063104189: "否", - 2325721074: "无密码", - 4092516657: "投掷次数不足!", - 3089363813: "数字", - 1577637745: "八进制", - 391304453: "其他格式", - 3312581301: "PBKDF2 迭代", - 995862913: "将打孔点涂黑,以便它们能被检测到。", - 2987800462: "纸张宽度", - 3913146360: "部分", - 3559456868: "部件尺寸", - 4249903283: "密码", - 3745269737: "路径不匹配", - 500286397: "检测到模式!", - 3040011773: "从闪存中永久删除所有存储的加密助记词和设置?", - 140802882: "保存", - 2578106186: "像素偏差指数:", - 1703779997: "明文二维码", - 3561756278: "请加载钱包输出描述符", - 784609464: "下刀速度", - 3761518438: "熵值低", - 3639136476: "检测到低熵!", - 3037062877: "打印测试二维码", - 2362732578: "打印 Tiny Seed?", - 3123770978: "打印到二维码", - 3345150514: "打印到二维码?", - 3339507095: "打印?", - 1123106929: "打印机", - 3903571079: "打印机驱动程序未设置!", - 3586624216: "正在打印", - 3593149291: "继续吗?", - 2580599003: "继续?", - 3108881025: "正在处理..", - 1848310591: "二维码", - 710709610: "RX 引脚", - 2697857197: "接收", - 1746677167: "接收地址", - 1658501467: "区域:", - 3739634002: "删除 %s?", - 1476462492: "删除助记词", - 1557093280: "从 SD 卡中删除固件文件?", - 2817311427: "分辨率 - 格式", - 2365886561: "恢复出厂设置并重新启动?", - 3091105710: "返回二维码查看器", - 1662254634: "审查扫描的数据,如有必要请编辑", - 1963678224: "右", - 770350922: "掷骰子至少 %d 次以生成助记词。", - 3271055013: "掷骰子分布:", - 432366011: "掷骰子:", - 3976793317: "SD 卡", - 2736513298: "未检测到 SD 卡。", - 1166743226: "掷骰子的 SHA256:", - 817419367: "快照的 SHA256:", - 699906428: "将二维码图像保存到 SD 卡", - 2163347007: "保存到 SD 卡", - 3531742595: "保存到 SD 卡?", - 2940025484: "保存到 SD 卡", - 763824768: "缩放", - 4117455079: "扫描地址", - 4038076821: "扫描 BIP39 密码", - 923277590: "扫描密钥二维码", - 4006316572: "重新扫描词 1-12", - 2736506158: "扫描词 13-24", - 2029624154: "屏保时间", - 289960586: "脚本类型", - 1022211991: "安全", - 4255182430: "自转或找零 (%d):", - 3753172956: "自行转账:", - 473154195: "设置", - 563836138: "设置存储在闪存的内部。", - 712533907: "设置存储在SD卡上。", - 2377955518: "香农熵:", - 1825881236: "关机", - 3656120779: "关机时间", - 2120776272: "关机中..", - 1061961408: "签名", - 2293863356: "签名到二维码", - 2879966040: "签名到 SD 卡", - 4282338366: "签名?", - 746161122: "签名", - 1988416729: "签名消息", - 3672006076: "已签名 PSBT", - 3406791302: "签名中..", - 2281377987: "单签", - 2019512665: "大小:", - 2344747135: "无法执行某些检查。", - 2090568351: "花费 (%d):", - 1260825919: "支出", - 1232757391: "极客统计数据", - 3303592908: "存储到闪存", - 720041451: "存储到 SD 卡", - 3514476519: "滑动切换模式", - 1898550184: "点击或按下 ENTER 捕获", - 4228215415: "TX 引脚", - 2612594937: "文本", - 1454688268: "主题", - 1180180513: "热敏", - 2258131455: "要确保数据不可恢复,请使用擦除设备功能", - 2700207481: "切换亮度", - 725348723: "工具", - 3684696112: "触摸阈值", - 2978718564: "触摸屏", - 2732611775: "再试一次?", - 401829098: "输入 BIP39 密码", - 2061556020: "输入密钥", - 2089395053: "单位", - 2786714360: "升级完成。", - 2674953168: "使用黑色背景表面。", - 2402455261: "使用相机的熵创建新助记词", - 3336226318: "已用:", - 4003084591: "值 %s 超出范围:[ %s,%s ]", - 989428076: "值必须是 %s 的倍数", - 3429519584: "验证中..", - 1889659487: "版本", - 4191058607: "通过相机", - 1254681955: "通过 D20", - 525309547: "通过 D6", - 590330112: "通过手动输入", - 1947603760: "通过词", - 2504354847: "等待捕获", - 2076481321: "钱包", - 2297028319: "钱包描述符", - 4232654916: "钱包输出描述符", - 2587172867: "钱包输出描述符已加载!", - 2499782468: "未找到钱包输出描述符。", - 2671738224: "警告:", - 262410364: "清除设备", - 3522794335: "清除设备中..", - 797660533: "词 %d", - 3742424146: "词数字", - 2965123464: "词", - 1303016265: "是", - 2171149824: " 不是一个有效地址", - 1875891934: "在前%d个地址中未找到", - }, -} diff --git a/src/krux/translations/__init__.py b/src/krux/translations/__init__.py new file mode 100644 index 00000000..0b8baef4 --- /dev/null +++ b/src/krux/translations/__init__.py @@ -0,0 +1,328 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +available_languages = [ + "de-DE", + "es-MX", + "fr-FR", + "ko-KR", + "nl-NL", + "pt-BR", + "ru-RU", + "tr-TR", + "vi-VN", + "zh-CN", +] +ref_array = [ + 232475068, + 1185266064, + 1503087751, + 1178563089, + 1092222515, + 3348584292, + 1099786887, + 2739590230, + 1310058127, + 1949634023, + 4287534872, + 2995482424, + 2415648848, + 1043817877, + 3439746594, + 2143824150, + 3270727197, + 900375497, + 88746165, + 1521033296, + 3857613120, + 1056821534, + 1868069640, + 3455872521, + 4151330982, + 2756316330, + 2256777600, + 3937333362, + 2046615409, + 928727036, + 2519455027, + 2363604010, + 2038226551, + 3138204438, + 1207696150, + 3126552510, + 1583186953, + 3768416405, + 388908871, + 3442025874, + 3119547911, + 1187826970, + 2470115694, + 1851578965, + 4094072796, + 167798282, + 678449760, + 3513215254, + 3585411775, + 534274978, + 124617190, + 597912140, + 2504034831, + 2751113454, + 1272005728, + 4102535566, + 1712856005, + 3278654271, + 3895447625, + 3836852788, + 690625786, + 382368239, + 3582575312, + 1244124409, + 2968548114, + 781419966, + 350279787, + 2601598799, + 1821513079, + 3504179008, + 1100685007, + 4090266642, + 2780625730, + 889040671, + 1505332462, + 3838465623, + 4170881190, + 1711312434, + 3981762528, + 383371114, + 3048830188, + 4192663412, + 1996021743, + 1108715658, + 1081425878, + 928667220, + 1620572516, + 2946146830, + 262248294, + 104500973, + 3313339187, + 1982637349, + 4006602858, + 2542772894, + 3748840176, + 1406590538, + 1077771640, + 1893243331, + 1871146425, + 3549015533, + 3524220994, + 299338213, + 602716148, + 1198393582, + 133139382, + 3580020863, + 2691246967, + 3903754133, + 3876651191, + 2880010062, + 3242179508, + 3034883011, + 3755547839, + 2032416055, + 2585599782, + 2874529150, + 4093416954, + 1422874211, + 237577215, + 4122897393, + 640219121, + 3000888649, + 3264569915, + 3835918229, + 911419226, + 766317539, + 4180141032, + 3663022166, + 972436696, + 2176866982, + 2820726296, + 2369474953, + 2256441194, + 237136240, + 879727077, + 1936877965, + 669106195, + 3330705289, + 2596531078, + 2488179069, + 336702608, + 1201104769, + 3159494909, + 1177338798, + 2817059741, + 2917810189, + 2030045667, + 762611188, + 3928301843, + 1948316555, + 2123991188, + 1443208255, + 1746030071, + 1237332019, + 1845376098, + 4265479636, + 2939797024, + 73574491, + 3634967631, + 4063104189, + 2325721074, + 4092516657, + 3089363813, + 1577637745, + 391304453, + 3312581301, + 995862913, + 2987800462, + 3913146360, + 3559456868, + 4249903283, + 3745269737, + 500286397, + 3040011773, + 140802882, + 2578106186, + 1703779997, + 3561756278, + 784609464, + 3761518438, + 3639136476, + 3037062877, + 2362732578, + 3123770978, + 3345150514, + 3339507095, + 1123106929, + 3903571079, + 3586624216, + 3593149291, + 2580599003, + 3108881025, + 1848310591, + 710709610, + 2697857197, + 1746677167, + 1658501467, + 3739634002, + 1476462492, + 1557093280, + 2817311427, + 2365886561, + 3091105710, + 1662254634, + 1963678224, + 770350922, + 3271055013, + 432366011, + 3976793317, + 2736513298, + 1166743226, + 817419367, + 699906428, + 2163347007, + 3531742595, + 2940025484, + 763824768, + 4117455079, + 4038076821, + 923277590, + 4006316572, + 2736506158, + 2029624154, + 289960586, + 1022211991, + 4255182430, + 3753172956, + 473154195, + 563836138, + 712533907, + 2377955518, + 1825881236, + 3656120779, + 2120776272, + 1061961408, + 2293863356, + 2879966040, + 4282338366, + 746161122, + 1988416729, + 3672006076, + 3406791302, + 2281377987, + 2019512665, + 2344747135, + 2090568351, + 1260825919, + 1232757391, + 3303592908, + 720041451, + 3514476519, + 1898550184, + 4228215415, + 2612594937, + 1454688268, + 1180180513, + 2258131455, + 2700207481, + 725348723, + 3684696112, + 2978718564, + 2732611775, + 401829098, + 2061556020, + 2089395053, + 2786714360, + 2674953168, + 2402455261, + 3336226318, + 4003084591, + 989428076, + 3429519584, + 1889659487, + 4191058607, + 1254681955, + 525309547, + 590330112, + 1947603760, + 2504354847, + 2076481321, + 2297028319, + 4232654916, + 2587172867, + 2499782468, + 2671738224, + 262410364, + 3522794335, + 797660533, + 3742424146, + 2965123464, + 1303016265, + 2171149824, + 1875891934, +] diff --git a/src/krux/translations/de.py b/src/krux/translations/de.py new file mode 100644 index 00000000..693a7bf3 --- /dev/null +++ b/src/krux/translations/de.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% des Betrags.", + "%d von %d Multisig", + "%d bis %d ", + "%s wurde entfernt.", + "(%d insgesamt)", + "(Experimental)", + "(nur zur Betrachtung)", + "12 Wörter", + "24 Wörter", + "Über", + "Annahme akzeptieren?", + "Konto", + "Konto #0 würde angenommen", + "Kontoindex", + "Wallet-Passphrase hinzufügen oder ändern?", + "Zusätzliche Entropie von der Kamera für den AES-CBC-Modus erforderlich", + "Adresse", + "Richte Kamera und Sicherungsplatte richtig aus.", + "Blendschutz deaktiviert", + "Blendschutz aktiviert", + "Aussehen", + "Bist Du sicher?", + "BGR-Farben", + "Zurück", + "Zurück zum Menü", + "Mnemonik-Backup", + "Ungültige Signatur", + "Baudrate", + "Binäres Gitter", + "Randpolsterung", + "Helligkeit", + "Tasten", + "Entprellung der Tasten", + "Aufnahme abgebrochen", + "Change Adresse", + "Change Adressen", + "Thema ändern und neu starten?", + "Change:", + "Änderungen bleiben bis zum Herunterfahren bestehen.", + "Prüfe SD-Karte", + "Überprüfen, ob diese Adresse zu dieser Wallet gehört?", + "Überprüfte %d Adresse ohne Übereinstimmungen.", + "Suche nach SD-Karte..", + "Untergeordneter Index", + "Erstelle QR-Code", + "QR-Code aus Text erzeugen?", + "Erstellt:", + "Benutzerdefinierte QR-Code", + "Anpassen", + "Wenn Sie Ihr Wallet anpassen, wird ein neuer Schlüssel generiert.", + "Schnitttiefe", + "Cut-Methode", + "Dezimal", + "Entschlüsseln?", + "Standard-Wallet", + "Tiefe pro Durchgang", + "Deskriptor-Adressen", + "Bildschirm", + "Schalten Sie das Gerät nicht aus, es kann eine Weile dauern.", + "Fertig?", + "Doppelte Gedächtnisstütze", + "Driver", + "Verschlüsselt", + "Verschlüsselter QR-Code", + "Verschlüsselte Mnemonic wurde nicht gespeichert", + "Speicherung der verschlüsselten Mnemonic mit ID:", + "Verschlüsselung", + "Verschlüsselungsmodus", + "Geben Sie %d BIP-39 Wörter ein.", + "Gib jedes Wort Deiner BIP-39 Mnemonic als Zahl von 1 bis 2048 ein.", + "Gib jedes Wort Deiner BIP-39 Mnemonic als Hexadezimalzahl von 1 bis 800 ein.", + "Gib jedes Wort Deiner BIP-39 Mnemonic als Oktalzahl von 1 bis 4000 ein.", + "Gib jedes Wort Deiner BIP-39 Mnemonic ein.", + "Fehler:", + "Esc", + "Dateien durchsuchen?", + "Auf SD-Karte exportieren..", + "Öffentlicher Schlüssel", + "Werkeinstellungen", + "Entschlüsselung fehlgeschlagen", + "PSBT konnte nicht geladen werden", + "Adresse konnte nicht geladen werden", + "Schlüssel konnte nicht geladen werden", + "Nachricht konnte nicht geladen werden", + "Mnemonic konnte nicht geladen werden", + "Ausgabedeskriptor konnte nicht geladen werden", + "Passphrase konnte nicht geladen werden", + "Mnemonic konnte nicht gespeichert werden", + "Gebühr:", + "Vorschubgeschwindigkeit", + "Dateiname", + "Dateiname %s existiert auf SD-Karte, überschreiben?", + "Fingerabdruck in PSBT deaktiviert", + "Die Firmware übersteigt die maximale Größe: %d", + "Umgedrehte X-Koordinaten", + "Flötendurchmesser", + "Frei:", + "Vom Speicher", + "Löschen Sie Ihre SD-Karte vollständig in einem anderen Gerät, um sicherzustellen, dass die Daten nicht wiederhergestellt werden können", + "Mnemonik erzeugen", + "BIP85-Untermnemonik generieren?", + "Dieser Mnemonic eine benutzerdefinierte ID zuteilen? Andernfalls wird der aktuelle Fingerabdruck verwendet", + "Go", + "Gute Entropie", + "Hardware", + "Hex öffentlicher Schlüssel", + "Hexadezimal", + "Mnemonics ausblenden", + "Hohe Gebühren!", + "ID existiert bereits", + "Input (%d):", + "Installieren?", + "Unzureichende Entropie!", + "Unzureichende Entropie", + "Ungültige Adresse", + "Ungültiger Bootloader", + "Ungültige mnemonische Lange", + "Ungültiger öffentlicher Schlüssel", + "Ungültige Wallet:", + "Umkehren", + "Invertierte Farben", + "Schlüssel", + "Schlüssel wurde nicht zur Verfügung gestellt", + "Krux Drucker Test-QR", + "LCD-Typ", + "Sprache", + "Lassen Sie das Feld leer, wenn Sie möchten, dass Krux ein gültiges letztes Wort auswählt", + "Links", + "Leitungsverzögerung", + "Linie:", + "Mnemonic laden", + "Wallet laden", + "Einen vertrauenswürdigen Wallet-Deskriptor laden, um Adressen anzuzeigen?", + "Von SD-Karte laden", + "Von SD-Karte laden?", + "Von der Kamera laden", + "Eine laden?", + "Laden?", + "Lade Kamera..", + "Lade Change Adressen..", + "Drucker wird geladen..", + "Lade Empfangsadressen..", + "Wird geladen..", + "Spracheinstellung", + "Speicherort", + "Maximale Länge überschritten (%s)", + "Nachricht", + "Nachricht:", + "Fehlende Signaturdatei", + "Mnemonic", + "Mnemonische ID", + "Mnemotechnik und Passphrase werden beibehalten.", + "Mnemonic wurde nicht verschlüsselt", + "Geändert:", + "Multisig", + "Native Segwit - 84 würde angenommen", + "Netzwerk", + "Neue Mnemonic", + "Neue Firmware erkannt.", + "Nein", + "Keine Passphrase", + "Nicht genug Würfe!", + "Zahlen", + "Oktal", + "Andere Formate", + "PBKDF2-Iter.", + "Male gestanzte Punkte schwarz an, damit sie erkannt werden können.", + "Papierbreite", + "Teil", + "Teilegröße", + "Passphrase", + "Pfad stimmt nicht überein", + "Muster erkannt!", + "Alle gespeicherten verschlüsselten Mnemoniken und Einstellungen dauerhaft vom Flash-Speicher entfernen?", + "Speicher", + "Pixelabweichungsindex:", + "Klartext-QR", + "Bitte lade einen Wallet Ausgabedeskriptor", + "Tauchrate", + "Schlechte Entropie", + "Schlechte Entropie erkannt!", + "Drucke Test-QR", + "Tiny Seed drucken?", + "Als QR-Code drucken", + "Als QR-Code drucken?", + "Drucken?", + "Drucker", + "Druckertreiber nicht gesetzt!", + "Wird gedruckt..", + "Trotzdem fortfahren?", + "Weiter?", + "Wird bearbeitet..", + "QR-Code", + "RX Pin", + "Empfangen", + "Empfangsadresse", + "Region:", + "Löschen %s?", + "Mnemonic löschen", + "Firmware-Dateien von der SD-Karte entfernen?", + "Res. - Format", + "Werkseinstellungen wiederherstellen und neu starten?", + "Zurück zum QR-Viewer", + "Überprüfe gescannte Daten und bearbeite sie bei Bedarf", + "Rechts", + "Würfel mindestens %d Mal, um eine Mnemonic zu erzeugen.", + "Rollenverteilung:", + "Würfe:", + "SD-Karte", + "SD-Karte nicht erkannt.", + "SHA256 der Würfe:", + "SHA256 des Snapshots:", + "QR-Bild auf SD-Karte speichern", + "Auf SD-Karte speichern?", + "Auf SD-Karte speichern?", + "Auf SD-Karte gespeichert", + "Skala", + "Adresse\nscannen", + "Scan BIP39 Passphrase", + "Schlüssel QR-Code Scannen", + "Wörter 1-12 erneut scannen", + "Wörter 13-24 scannen", + "Bildschirmschonerzeit", + "Script-Art", + "Sicherheit", + "Selbstübertragung oder Change (%d):", + "Selbstübertragung:", + "Einstellungen", + "Die Einstellungen werden intern auf Flash gespeichert.", + "Einstellungen auf SD-Karte gespeichert.", + "Shannons Entropie:", + "Ausschalten", + "Abschaltzeit:", + "Herunterfahren..", + "Signieren", + "Am QR-Code unterschreiben", + "Auf SD-Karte signieren", + "Signieren?", + "Signatur", + "Signierte Nachricht", + "Signierte PSBT", + "Unterschreiben..", + "Single-Sig", + "Größe:", + "Einige Schecks können nicht durchgeführt werden.", + "Ausgabe (%d):", + "Ausgaben:", + "Statistiken für Nerds", + "Auf Flash speichern", + "Auf der SD-Karte speichern", + "Wischen um den Modus zu ändern", + "TOUCH oder ENTER zum Erfassen", + "TX Pin", + "Text", + "Thema", + "Thermisch", + "Um sicherzustellen, dass die Daten nicht wiederhergestellt werden können, verwenden Sie die Funktion 'Gerät löschen'", + "Helligkeit umschalten", + "Werkzeuge", + "Berühre Schwellenwert", + "Touchscreen", + "Weiter versuchen?", + "BIP39 Passphrase eingeben", + "Schlüssel eingeben", + "Einheit", + "Upgrade abgeschlossen.", + "Verwende eine schwarze Hintergrundfläche.", + "Verwende die Entropie der Kamera, um eine neue Mnemonic zu erstellen", + "Belegt:", + "Wert %S außerhalb des Bereichs: [ %s, %s]", + "Der Wert muss ein Vielfaches von %s sein", + "Überprüfung..", + "Version", + "Via Kamera", + "Via D20", + "Via D6", + "Via manueller Eingabe", + "Via Wörter", + "Warte auf die Erfassung", + "Wallet", + "Wallet-Deskriptor", + "Wallet Ausgabedeskriptor", + "Wallet Ausgabedeskriptor geladen!", + "Wallet Ausgabedeskriptor nicht gefunden.", + "Warnung:", + "Gerät löschen", + "Gerät wird gewischt..", + "Wort %d", + "Wortnummern", + "Wörter", + "Ja", + "ist eine gültige Adresse!", + "wurde in den ersten %d Adressen nicht gefunden", +] diff --git a/src/krux/translations/es.py b/src/krux/translations/es.py new file mode 100644 index 00000000..cef85ea8 --- /dev/null +++ b/src/krux/translations/es.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% del monto.", + "%d de %d multisig", + "%d a %d", + "%s eliminado.", + "(%d total)", + "(Experimental)", + "(Solo para observación)", + "12 palabras", + "24 palabras", + "Nosotros", + "¿Aceptar la suposición?", + "Cuenta", + "Se supondría que la cuenta #0", + "Índice de la cuenta", + "¿Añadir o cambiar passphrase de la cartera?", + "Se requiere entropía adicional de la cámara para el modo AES-CBC", + "Dirección", + "Alinea la cámara y la placa de respaldo correctamente.", + "Anti-reflejo desactivado", + "Anti-reflejo habilitado", + "Apariencia", + "¿Estás seguro?", + "Colores BGR", + "Atrás", + "Volver al Menú", + "Backup del Mnemónico", + "Firma incorrecta", + "Baudrate", + "Cuadrícula binaria", + "Grosor del Borde", + "Brillo", + "Botones", + "Rebote de Botones", + "Captura cancelada", + "Cambio", + "Direcciones de Cambio", + "¿Cambiar de tema y reiniciar?", + "Cambio:", + "Los cambios durarán hasta que el dispositivo se apague.", + "Verifica Tarjeta SD", + "¿Verificar que la dirección pertenece a esta cartera?", + "Comprobado %d direcciones sin coincidencias.", + "Comprobación de la tarjeta SD..", + "Índice Derivado", + "Crear Código QR", + "¿Crear código QR desde texto?", + "Creado:", + "Código QR Personalizado", + "Personalizar", + "Personalizar tu cartera generará una nueva clave", + "Profundidad de Corte", + "Método de Corte", + "Decimal", + "¿Descifrar?", + "Cartera Predeterminada", + "Profundidad por Pasada", + "Direcciones del descriptor", + "Pantalla", + "No apagues el dispositivo, puede tardar un tiempo en completarse.", + "¿Listo?", + "Doble mnemónico", + "Operador", + "Cifrado", + "Código QR Cifrado", + "Mnemónico cifrado no se almacenó", + "Mnemónico cifrado fue almacenado con ID:", + "Cifrado", + "Modo de Cifrado", + "Ingrese %d palabras BIP-39.", + "Ingresa cada palabra de tu mnemónico BIP-39 como un número del 1 al 2048.", + "Ingresa cada palabra de tu mnemónico BIP-39 como un número en hexadecimal del 1 al 800.", + "Ingresa cada palabra de tu mnemónico BIP-39 como un número en octal del 1 al 4000.", + "Ingresa cada palabra de tu mnemónico BIP-39.", + "Error:", + "Esc", + "¿Explorar archivos?", + "Exportando a la tarjeta SD..", + "Clave Pública Extendida", + "Ajustes de Fábrica", + "Error al descifrar", + "No se pudo cargar la PSBT", + "No se pudo cargar la dirección", + "No se pudo cargar la clave", + "No se pudo cargar el mensaje", + "No se pudo importar el mnemónico", + "No se pudo cargar el descriptor de salida", + "No se pudo cargar el passphrase", + "No pudo almacenar mnemónico", + "Comisión:", + "Feed Rate", + "Nombre del Archivo", + "El nombre de archivo %s existe en la tarjeta SD, ¿sobrescribir?", + "Huella dactilar no establecida en PSBT", + "El firmware supera el tamaño máximo: %d", + "Coordenadas X Invertidas", + "Diámetro de la Flauta", + "Libre:", + "Desde el Almacenamiento", + "Borra completamente su tarjeta SD en otro dispositivo para asegurarse de que los datos sean irrecuperables", + "Generar Mnemónico", + "¿Generar un mnemónico derivado BIP85?", + "¿Darle a este mnemónico una identificación personalizada? De lo contrario se utilizará el fingerprint actual", + "Ir", + "Buena entropía", + "Hardware", + "Clave Pública Hexadecimal", + "Hexadecimal", + "Ocultar Mnemónicos", + "¡Tarifas altas!", + "ID ya existe", + "Entradas (%d):", + "¿Instalar?", + "¡Entropía Insuficiente!", + "Entropía insuficiente", + "Dirección inválida", + "Bootloader inválido", + "Longitud mnemónica no válida", + "Clave pública inválida", + "Cartera inválida:", + "Invertir", + "Colores Invertidos", + "Clave", + "No se proporcionó la clave", + "Test de impresión QR", + "Tipo de LCD", + "Idioma", + "Déjalo en blanco si quieres que Krux elija una última palabra válida", + "Izquierda", + "Retraso de Línea", + "Línea:", + "Importar Mnemónico", + "Cargar Cartera", + "¿Cargar un descriptor de monedero de confianza para ver las direcciones?", + "Cargar desde tarjeta SD", + "¿Cargar desde la tarjeta SD?", + "Cargar desde la cámara", + "¿Cargar algo?", + "¿Cargar?", + "Cargando Camara..", + "Cargando direcciones de cambio..", + "Cargando impresora..", + "Cargando direcciones de recepción..", + "Cargando..", + "Idioma", + "Ubicación", + "Longitud máxima excedida (%s)", + "Mensaje", + "Mensaje:", + "Falta archivo de firma", + "Mnemónico", + "Identificación del Mnemónico", + "Mnemónico y passphrase se mantendrán.", + "Mnemónico no fue descifrado", + "Modificado:", + "Multisig", + "Segwit nativo - 84 se supondría", + "Red", + "Nuevo Mnemónico", + "Nuevo firmware detectado.", + "No", + "Sin Passphrase", + "¡No hay suficientes tiradas!", + "Números", + "Octales", + "Otros Formatos", + "Iter. PBKDF2", + "Pinte los puntos perforados de negro para que puedan ser detectados.", + "Ancho del Papel", + "Parte", + "Tamaño de la Pieza", + "Passphrase", + "La ruta no coincide", + "¡Patrón detectado!", + "¿Eliminar permanentemente todos los mnemónicos y configuraciones cifradas almacenadas del flash?", + "Guardar", + "Índice de desviación de píxeles:", + "QR de Texto", + "Carga un descriptor de cartera", + "Tasa de Caída", + "Baja entropía", + "Mala entropía detectada!", + "Prueba de Impresión QR", + "¿Imprimir Tiny Seed?", + "Imprimir como Código QR", + "¿Imprimir con Codigo QR?", + "¿Impresión?", + "Impresora", + "¡El controlador de impresora no está configurado!", + "Imprimiendo..", + "¿Proceder de todas maneras?", + "¿Continuar?", + "Procesando..", + "Código QR", + "RX Pin", + "Recepción", + "Direcciones de Recepción", + "Región:", + "Eliminar %s?", + "Eliminar Mnemónico", + "¿Eliminar archivos de firmware de la tarjeta SD?", + "Res. - Formato", + "¿Restablecer a la configuración de fábrica y reiniciar?", + "Volver al QR", + "Revisa los datos escaneados, edítalos si es necesario", + "Derecha", + "Tira el dado al menos %d veces para generar un mnemónico.", + "Distribución de tiradas:", + "Tiradas:", + "Tarjeta SD", + "Tarjeta SD no detectada.", + "SHA256 de las tiradas:", + "SHA256 de la instantánea:", + "Guardar Imagen QR en la Tarjeta SD", + "Guardar en tarjeta SD", + "¿Guardar en la tarjeta SD?", + "Guardado en la tarjeta SD", + "Escala", + "Escanear Dirección", + "Escanear Passphrase BIP39", + "Escanear el Código QR", + "Escaneo de palabras 1-12 de nuevo", + "Escaneo de palabras 13-24", + "Tiempo de Espera del Protector de Pantalla", + "Tipo de Script", + "Seguridad", + "Autotransferencia o Cambio (%d):", + "Autotransferencia:", + "Ajustes", + "Ajustes almacenados internamente en flash.", + "Configuración almacenada en la tarjeta SD.", + "Entropía de Shannon:", + "Apagar", + "Tiempo de Apagado", + "Apagando..", + "Firmar", + "Firmar en Código QR", + "Firmar en la Tarjeta SD", + "¿Firmar?", + "Firma", + "Mensaje Firmado", + "PSBT Firmado", + "Firmando..", + "Single-sig", + "Tamaño:", + "Algunas comprobaciones no se pueden realizar.", + "Gastos (%d):", + "Gasto:", + "Estadísticas para Entendidos", + "Almacenar en Flash", + "Almacenar en la Tarjeta SD", + "Deslizar para cambiar de modo", + "TOCA o ENTER para capturar", + "TX Pin", + "Texto", + "Tema", + "Térmico", + "Para garantizar que los datos no se puedan recuperar, utiliza la función de borrar dispositivo", + "Alternar Brillo", + "Herramientas", + "Umbral Táctil", + "Pantalla Táctil", + "¿Intentar con mas?", + "Escribe la Passphrase BIP39", + "Introduce la clave", + "Unidad", + "Actualización completa.", + "Usa una superficie de fondo negra.", + "Usa la entropía de la cámara para crear una nueva mnemónica", + "Usado:", + "Valor %s fuera del rango: [ %s, %s]", + "El valor debe ser múltiple de %s", + "Verificando..", + "Versión", + "Desde Cámara", + "Vía D20", + "Vía D6", + "Introducción Manual", + "A Través de Palabras", + "Espera la captura", + "Cartera", + "Descriptor de Cartera", + "Descriptor de salida de cartera", + "¡Se ha cargado el descriptor de salida de la cartera!", + "No se encontró el descriptor de salida de la cartera.", + "Advertencia:", + "Borrar Dispositivo", + "Borrando dispositivo..", + "Palabra %d", + "Números de Palabra", + "Palabras", + "Sí", + "es una dirección válida!", + "NO FUE ENCONTRADO en las primeras %d direcciones", +] diff --git a/src/krux/translations/fr.py b/src/krux/translations/fr.py new file mode 100644 index 00000000..fbed06ce --- /dev/null +++ b/src/krux/translations/fr.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% du montant.", + "%d de %d multisignature", + "%d à %d", + "%s supprimé.", + "(%d au total)", + "(Expérimental)", + "(consultation)", + "12 mots", + "24 mots", + "À propos", + "Accepter supposition\xa0?", + "Compte", + "Le compte n °0 serait supposé", + "Index du compte", + "Ajoutez ou modifiez la phrase secrète\u2009?", + "Entropie supplémentaire de la caméra requise pour le mode AES-CBC", + "Adresse", + "Alignez correctement la caméra et plaque de sauvegarde.", + "Anti-éblouissement désactivé", + "Anti-éblouissement activé", + "Apparence", + "Es-tu sûr\u2009?", + "Couleurs BGR", + "Retour", + "Retour au menu", + "Sauvegarde mnémonique", + "Mauvaise signature", + "Débit en bauds", + "Grille binaire", + "Rembourrage de bordure", + "Luminosité", + "Boutons", + "Anti-rebond des boutons", + "Capture annulée", + "Changement", + "Adresses de Changement", + "Changer de thème et redémarrer\u2009?", + "La monnaie\u2009:", + "Les modifications dureront jusqu'à l'arrêt.", + "Vérifiez la carte SD", + "Vérifiez que l'adresse appartient à cette portefeuille\u2009?", + "%d adresses vérifiées sans correspondance.", + "Vérification de la carte SD..", + "Indice enfant", + "Créer du code QR", + "Créer du code QR à partir du texte\u2009?", + "Créé\u2009:", + "Code QR personnalisé", + "Personnaliser", + "La personnalisation de votre portefeuille générera une nouvelle clé.", + "Profondeur de coupe", + "Méthode de coupe", + "Décimal", + "Décrypter\u2009?", + "Portefeuille par défaut", + "Profondeur par passage", + "Adresses des descripteurs", + "Affichage", + "Ne pas éteindre, cela peut prendre un certain temps.", + "Terminé\u2009?", + "Double mnémonique", + "Conducteur", + "Chiffré", + "Code QR crypté", + "Le mnémonique crypté n'a pas été stocké", + "Mnémonique cryptée a été stockée avec ID\u2009:", + "Chiffrement", + "Mode de chiffrement", + "Entrez %d mots BIP-39.", + "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre de 1 à 2048.", + "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre en hexadécimal de 1 à 800.", + "Entrez chaque mot de votre mnémonique BIP-39 sous la forme d'un nombre en octal de 1 à 4000.", + "Entrez chaque mot de votre mnémonique BIP-39.", + "Erreur\u2009:", + "Esc", + "Explorer des fichiers\u2009?", + "Exportation vers la carte SD..", + "Clé publique", + "Paramètres d'usine", + "Échec de décrypter", + "Erreur de chargement PSBT", + "Erreur de chargement d'adresse", + "Échec du chargement de la clé", + "Échec du chargement du message", + "Erreur de chargement mnémonique", + "Échec du chargement du descripteur de sortie", + "Échec du chargement de la phrase secrète", + "Échec de stocker mnémonique", + "Frais\u2009:", + "Taux d'alimentation", + "Nom de fichier", + "Le nom de fichier %s existe sur la carte SD, écraser\u2009?", + "Empreinte digitale manquante dans PSBT", + "Le micrologiciel dépasse la taille maximale\u2009: %d", + "Coordonnées X inversées", + "Diamètre de flûte", + "Libre\u2009:", + "Du stockage", + "Effacez complètement votre carte SD dans un autre appareil pour assurer que les données soient irrécupérables", + "Générer une mnémonique", + "Générer un mnémonique dérivé BIP-85\u2009?", + "Donnez à ce mnémonique un identifiant personnalisé\u2009? Sinon l'empreinte actuelle sera utilisée", + "Go", + "Bonne entropie", + "Matériel", + "Clé public hexadécimal", + "Hexadécimal", + "Masquer les mnémoniques", + "Frais élevés\u2009!", + "Id existe déjà", + "Entrées (%d)\u2009:", + "Installer\u2009?", + "Entropie insuffisante\u2009!", + "Entropie insuffisante", + "Adresse invalide", + "Chargeur de démarrage invalide", + "Longueur mnémonique invalide", + "Clé publique non valide", + "Portefeuille invalide\u2009:", + "Inverser", + "Couleurs inversées", + "Clé", + "La clé n'a pas été fournie", + "Test de l'imprimante Krux QR", + "Type d'écran LCD", + "Langue", + "Laissez vide si vous souhaitez que Krux choisisse un dernier mot valide", + "Gauche", + "Délai de Ligne", + "Ligne\u2009:", + "Charger mnémonique", + "Charger le portefeuille", + "Charger un descripteur de portefeuille de confiance pour afficher les adresses\u2009?", + "Charger depuis la carte SD", + "Charger depuis la carte SD\u2009?", + "Charger depuis une caméra", + "En charger qu'un\u2009?", + "Charger\u2009?", + "Caméra de Chargement..", + "Chargement des adresses de monnaie..", + "Chargement de l'imprimante..", + "Chargement des adresses de réception ..", + "Chargement..", + "Paramètres régionaux", + "Emplacement", + "Longueur maximale dépassée (%s)", + "Message", + "Message\u2009:", + "Fichier de signature manquant", + "Mnémonique", + "ID mnémonique", + "Mnémonique et phrase secrète seront conservés.", + "Mnémonique n'était pas cryptée", + "Modifié\u2009:", + "Multi\nsignature", + "Native Segwit - 84 serait supposé", + "Réseau", + "Nouveau mnémonique", + "Nouveau micrologiciel détecté.", + "Non", + "Pas de phrase secrète", + "Pas assez de jets\u2009!", + "Nombres", + "Octale", + "Autres formats", + "Itér. PBKDF2", + "Noircissez les points perforés afin qu'ils puissent être détectés.", + "Largeur du papier", + "Partie", + "Taille de la pièce", + "Phrase secréte", + "Inadéquation du chemin", + "Structure détecté\u2009!", + "Supprimer définitivement tous les mnémoniques et paramètres chiffrés stockés dans le flash\u2009?", + "Persister", + "Indice de déviation des pixels\u2009:", + "QR en Texte Brut", + "Veuillez charger un descripteur de sortie de portefeuille", + "Taux de plongée", + "Mauvaise entropie", + "Faible entropie détectée\u2009!", + "Test d'impression QR", + "Imprimer Tiny Seed\u2009?", + "Imprimer en QR", + "Imprimer en QR\u2009?", + "Imprimer\u2009?", + "Imprimante", + "Le conducteur d'imprimante n'est pas défini\u2009!", + "Impression..", + "Procéder quand même\u2009?", + "Procéder\u2009?", + "Traitement..", + "QR Code", + "RX Fiche", + "Recevoir", + "Adresses de Réception", + "Région\u2009:", + "Supprimer %s\u2009?", + "Supprimer mnémonique", + "Supprimer les fichiers micrologiciel de la carte SD\u2009?", + "Rés. - Format", + "Restaurer les paramètres d'usine et redémarrer\u2009?", + "Retour au visualiseur QR", + "Examinez les données numérisées, modifiez-les si nécessaire", + "À droite", + "Lancez le dé au moins %d fois pour générer un mnémonique.", + "Distribution des jets\u2009:", + "Jets\u2009:", + "Carte SD", + "Carte SD non détectée.", + "SHA256 de jets\u2009:", + "SHA256 de snapshot\u2009:", + "Enregistrer l'image QR sur la carte SD", + "Enregistrer sur la carte SD", + "Enregistrer sur la carte SD\u2009?", + "Enregistré sur la carte SD", + "L'échelle", + "Scannez l'adresse", + "Scannez la phrase secrète BIP-39", + "Scannez le Code QR de la clé", + "Analyser à nouveau les mots 1 à 12", + "Analyser les mots 13 à 24", + "Delai d'Inactivité", + "Type de Script", + "Sécurité", + "Auto-transfert ou monnaie (%d)\u2009:", + "Auto-transfert\u2009:", + "Paramètres", + "Paramètres stockés en interne sur flash.", + "Paramètres stockés sur la carte SD.", + "Entropie de Shannon\u2009:", + "Fermer", + "Delai d'Arrêt", + "Éteindre..", + "Signer", + "Signer avec le code QR", + "Signer sur la carte SD", + "Signer\u2009?", + "Signature", + "Message signé", + "PSBT signé", + "Signature..", + "Clé unique", + "Capacité\u2009:", + "Certains chèques ne peuvent pas être effectués.", + "Dépense (%d)\u2009:", + "Dépense\u2009:", + "Statistiques pour les geeks", + "Stocker sur flash", + "Stocker sur la carte SD", + "Faites glisser pour changer de mode", + "TOUCHEZ ou ENTER pour capturer", + "TX Fiche", + "Texte", + "Thème", + "Thermique", + "Pour assurer que les données soient irrécupérables, utilisez la fonctionnalité 'Effacer l'appareil'", + "Ajuster la luminosité", + "Outils", + "Seuil Tactile", + "Écran Tactile", + "Réessayer\u2009?", + "Entrez la phrase secrète BIP-39", + "Clé de type", + "Unité", + "Mise à niveau complète.", + "Utilisez une surface de fond noire.", + "Utilisez l'entropie de la caméra pour créer un nouveau mnémonique", + "Utilisé\u2009:", + "Valeur %s hors de portée: [%s, %s]", + "La valeur doit être un multiple de %s", + "Vérification..", + "Version", + "Par caméra", + "Via D20", + "Via D6", + "Par saisie manuelle", + "Via Mots", + "Attendez la capture", + "Portefeuille", + "Descripteur de Portefeuille", + "Descripteur de sortie du portefeuille", + "Descripteur de sortie du portefeuille chargé\u2009!", + "Descripteur de sortie du portefeuille introuvable.", + "Avertissement\u2009:", + "Effacer l'appareil", + "Effacement de l'appareil en cours..", + "Mot %d", + "Numéros de mots", + "Mots", + "Oui", + "Adresse non valide\xa0!", + "n'A PAS ÉTÉ TROUVÉ dans les %d premières adresses", +] diff --git a/src/krux/translations/ko.py b/src/krux/translations/ko.py new file mode 100644 index 00000000..da9e17c1 --- /dev/null +++ b/src/krux/translations/ko.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "수량: %", + "%d의 %d 멀티시그", + "%d 부터 %d", + "%s 제거되었습니다.", + "(총 %d)", + "(실험적 기능)", + "(잔액조회 전용)", + "12단어", + "24단어", + "기본 정보", + "가정을 수락하시겠습니까?", + "계정", + "계정 #0이 가정됩니다", + "계정 인덱스", + "패스프레이즈를 추가하거나 변경하시겠습니까?", + "AES-CBC 모드를 위해 카메라의 추가 엔트로피가 필요합니다", + "주소", + "카메라와 보조 플레이트를 올바르게 정렬하십시오.", + "눈부심방지 비활성화", + "눈부심방지 활성화", + "디스플레이", + "계속하시겠습니까?", + "BGR 색상", + "뒤로", + "메뉴로 돌아가기", + "니모닉 백업", + "잘못된 서명", + "Baudrate", + "이진수 그리드", + "테두리 여백", + "밝기", + "버튼", + "버튼 바운스 방지", + "캡처 취소됨", + "잔돈", + "잔돈 주소", + "테마를 변경하고 재부팅하시겠습니까?", + "변경", + "변경 사항은 종료될때까지 유지됩니다.", + "SD카드 확인", + "해당 주소가 이 지갑에 속하는지 확인하시겠습니까?", + "일치하는 주소가 없는 %d 개를 확인했습니다.", + "SD카드 확인 중..", + "차일드 인덱스", + "QR 코드 생성", + "텍스트로부터 QR코드를 생성하시겠습니까?", + "생성됨:", + "사용자 정의 QR코드", + "사용자 정의", + "지갑을 커스터마이징하면 새로운 비밀키가 생성됩니다.", + "Cut Depth", + "Cut Method", + "10진수", + "복호화하시겠습니까?", + "지갑 기본설정", + "Depth Per Pass", + "디스크립터 주소", + "디스플레이", + "전원을 끄지 마십시오. 완료하는 데 시간이 걸릴 수 있습니다.", + "완료되었습니까?", + "이중 니모닉", + "드라이버", + "암호화 후 저장", + "암호화된 QR 코드", + "암호화된 니모닉을 저장하지 못했습니다", + "암호화된 니모닉을 다음 아이디와 함께 저장했습니다:", + "암호화", + "암호화 모드", + "%d개의 BIP-39 단어를 입력하십시오.", + "BIP-39 니모닉의 각 단어를 1에서 2048 사이의 숫자로 입력하십시오.", + "BIP-39 니모닉의 각 단어를 1에서 800 사이의 16진수 숫자로 입력하십시오.", + "BIP-39 니모닉의 각 단어를 1에서 4000 사이의 8진수 숫자로 입력하십시오.", + "BIP-39 니모닉의 각 단어를 입력하십시오.", + "오류:", + "Esc", + "파일을 탐색하시겠습니까?", + "SD카드로 내보내는 중..", + "XPUB 내보내기", + "공장 초기 설정", + "복호화에 실패했습니다", + "PSBT를 불러오지 못했습니다", + "주소를 불러오지 못했습니다", + "키 로드에 실패했습니다", + "메시지를 불러오지 못했습니다", + "니모닉을 불러오지 못했습니다", + "아웃풋 디스크립터를 불러오지 못했습니다", + "패스프레이즈를 불러오지 못했습니다", + "니모닉을 저장하지 못했습니다", + "수수료:", + "Feed Rate", + "파일명", + "%s 파일명이 SD카드에 이미 존재합니다. 덮어쓰시겠습니까?", + "PSBT에서 지문이 설정되지 않았습니다", + "펌웨어가 최대 크기를 초과했습니다: %d", + "X 좌표 반전", + "플루트 직경", + "여유 공간:", + "저장공간에서 불러오기", + "다른 장치에서 데이터 복구가 불가능하도록 SD카드를 완전히 지우십시오", + "니모닉 생성", + "BIP85 파생 니모닉을 생성하시겠습니까?", + "이 니모닉에 별도 아이디를 지정하시겠습니까? 지정하지 않으면 현재 지문을 사용합니다", + "선택", + "엔트로피가 충분합니다", + "하드웨어", + "16진수 공개키", + "16진수", + "니모닉 숨기기", + "수수료가 높습니다!", + "아이디가 이미 존재합니다", + "Input (%d):", + "설치하시겠습니까?", + "엔트로피가 충분하지 않습니다!", + "엔트로피가 충분하지 않습니다", + "주소가 잘못되었습니다", + "부트로더가 잘못되었습니다", + "니모닉 길이가 잘못되었습니다", + "공개키가 잘못되었습니다", + "지갑이 잘못되었습니다:", + "반전", + "반전된 색상", + "키", + "키가 제공되지 않았습니다", + "Krux 프린터 테스트 QR", + "LCD 유형", + "언어", + "마지막 단어를 Krux가 선택하도록 하려면 비워두십시오", + "왼쪽", + "줄 지연", + "줄:", + "니모닉 불러오기", + "이대로 불러오기", + "주소를 보기위해 신뢰할 수 있는 월렛 디스크립터를 불러오시겠습니까?", + "SD카드에서 불러오기", + "SD카드에서 불러오시겠습니까?", + "카메라로 불러오기", + "불러오시겠습니까?", + "불러오시겠습니까?", + "카메라를 구동 중입니다..", + "잔돈 주소를 불러옵니다..", + "프린터를 로딩 중입니다..", + "수신 주소 불러옵니다..", + "로딩 중..", + "언어 설정", + "기본 저장소", + "최대 길이를 초과함 (%s)", + "메시지", + "메시지:", + "서명 파일이 누락되었습니다", + "니모닉", + "니모닉 ID", + "니모닉과 암호는 유지됩니다.", + "니모닉이 암호화되지 않았습니다", + "수정되었습니다:", + "멀티시그", + "네이티브 세그윗 - BIP84를 적용합니다", + "네트워크", + "새로운 니모닉", + "새로운 펌웨어가 감지되었습니다.", + "아니요", + "패스프레이즈 없음", + "주사위 횟수가 충분하지 않습니다!", + "시드문구 순번", + "8진수", + "기타 형식", + "PBKDF2 Iter.", + "카메라가 감지할 수 있도록 펀치된 점을 검게 칠하십시오.", + "종이 너비", + "파트", + "파트 사이즈", + "패스프레이즈", + "경로 불일치", + "패턴이 감지되었습니다!", + "저장된 모든 니모닉 및 설정값을 영구적으로 제거하시겠습니까?", + "저장", + "픽셀 편차 지수:", + "일반텍스트 QR", + "지갑 출력 디스크립터를 불러오십시오", + "침수율", + "엔트로피가 부족합니다", + "엔트로피가 부족합니다!", + "QR 테스트 인쇄", + "Tiny Seed를 인쇄하시겠습니까?", + "QR로 인쇄", + "QR로 인쇄하시겠습니까?", + "인쇄하시겠습니까?", + "프린터", + "프린터 드라이버가 설정되지 않았습니다!", + "출력중", + "계속하시겠습니까?", + "계속하시겠습니까?", + "처리...", + "QR 코드", + "RX 핀", + "받기", + "주소", + "지역:", + "%s을 제거하시겠습니까?", + "니모닉 제거", + "SD카드에서 펌웨어 파일을 제거하시겠습니까?", + "Res. - 형식", + "공장 설정을 복원하고 재부팅하시겠습니까?", + "QR 뷰어로 돌아가기", + "스캔된 데이터를 검토하고 필요한 경우 수정하십시오", + "오른쪽", + "니모닉을 생성하려면 주사위를 최소 %d번 굴리십시오.", + "주사위값 분포:", + "주사위 횟수:", + "SD카드", + "SD카드가 감지되지 않았습니다.", + "주사위의 SHA256:", + "SHA256 스냅샷:", + "QR 이미지를 SD카드에 저장", + "SD카드에 저장", + "SD카드에 저장하시겠습니까?", + "SD카드에 저장됨", + "스케일", + "주소 스캔하기", + "BIP39 패스프레이즈 스캔하기", + "비밀번호 QR 스캔", + "1번째부터 12번째 단어를 스캔 중입니다", + "13번째부터 24번째 단어를 스캔 중입니다", + "화면보호기 시간", + "지갑 형식", + "보안", + "본인주소 전송 또는 잔돈 (%d):", + "자가 이체:", + "설정", + "설정은 플래시에서 내부적으로 저장됩니다.", + "SD 카드에 저장된 설정.", + "Shannon의 엔트로피:", + "종료", + "자동 종료시간", + "종료 중..", + "서명하기", + "QR코드로 내보내기", + "SD카드로 내보내기", + "서명하시겠습니까?", + "서명", + "서명된 메시지", + "서명된 PSBT", + "서명 중..", + "단일서명", + "크기:", + "일부 검사를 수행할 수 없습니다.", + "Spend (%d):", + "지출", + "전문가를 위한 통계", + "플래시 메모리에 저장", + "SD카드에 저장", + "모드를 변경하려면 화면을 옆으로 쓸어내리세요", + "터치하거나 엔터를 눌러 캡처하십시오", + "TX 핀", + "텍스트", + "테마", + "Thermal", + "데이터 복구가 불가능하도록 장치 전체지우기 기능을 사용하십시오", + "밝기 전환", + "도구", + "터치 민감도", + "터치스크린", + "더 하시겠습니까?", + "BIP39 패스프레이즈 입력", + "비밀번호 입력", + "단위", + "업그레이드가 완료되었습니다", + "검은색 배경 화면을 사용하십시오.", + "카메라의 엔트로피를 사용하여 새로운 니모닉을 생성하십시오", + "이미 사용됨:", + "%s는 [%s, %s] 범위를 벗어났습니다", + "값은 %s의 배수여야 합니다", + "검증 중..", + "버전", + "카메라", + "20면체 주사위", + "일반 주사위", + "직접 입력", + "니모닉 단어 입력", + "캡처될때까지 기다리십시오", + "지갑 설정", + "지갑 디스크립터", + "지갑 출력 디스크립터", + "지갑 출력 디스크립터가 로드되었습니다!", + "지갑 출력 디스크립터를 찾을 수 없습니다.", + "경고:", + "기기 초기화", + "기기를 초기화하는 중입니다..", + "%d 단어", + "단어 번호(1-2048)", + "시드문구", + "예", + " 은 유효한 주소가 아닙니다", + "첫 번째 %d 주소에서 찾을 수 없습니다", +] diff --git a/src/krux/translations/nl.py b/src/krux/translations/nl.py new file mode 100644 index 00000000..adde0fea --- /dev/null +++ b/src/krux/translations/nl.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% van het bedrag.", + "%d van %d multisig", + "%d tot %d", + "%s verwijderd.", + "(%d totaal)", + "(Experimenteel)", + "(alleen inzien)", + "12 woorden", + "24 woorden", + "Over", + "Aanname accepteren?", + "Account", + "Account #0 zou worden aangenomen", + "Accountindex", + "Wachtwoordzin voor portemonnee toevoegen of wijzigen?", + "Extra entropie van de camera vereist voor AES-CBC-modus", + "Adres", + "Richt de camera en back-upplaat op de juiste manier.", + "Anti reflecterend uitgeschakeld", + "Anti reflecterend ingeschakeld", + "Uiterlijk", + "Weet je het zeker?", + "BGR-kleuren", + "Terug", + "Terug naar menu", + "Backup geheugensteun", + "Ongeldige handtekening", + "Baudratio", + "Binair raster", + "Rand opvulling", + "Helderheid", + "Knoppen", + "Debounce van knoppen", + "Opname geannuleerd", + "Change", + "Wisselgeldadres", + "Thema veranderen en opnieuw opstarten?", + "Wisselgeld:", + "Wijzigingen blijven van kracht tot afsluiten.", + "Controleer SD kaart", + "Controleer of dit adres bij deze portemonnee hoort?", + "%d adressen gecontroleerd zonder overeenkomsten.", + "SD kaart controleren..", + "Onderliggende index", + "QR code maken", + "QR code maken van tekst?", + "Aangemaakt:", + "Aangepaste QR code", + "Aanpassen", + "Bij aanpassen van de portemonnee zal er een nieuwe sleutel gegenereerd worden.", + "Snijdiepte", + "Snijmethode", + "Decimaal", + "Ontsleutelen?", + "Standaard portemonnee", + "Diepte per pas", + "Descriptoradressen", + "Weergave", + "Schakel het apparaat niet uit, het kan even duren voordat het klaar is.", + "Klaar?", + "Dubbel geheugensteuntje", + "Driver", + "Versleuteld", + "Versleutelde QR code", + "Versleutelde geheugensteun was niet opgeslagen", + "Versleutelde geheugensteun is opgeslagen met ID:", + "Versleutelen", + "Versleutel modus", + "Voer %d BIP-39 woorden in.", + "Voer elk woord van jouw BIP-39 geheugensteun in als een nummer van 1 tot 2048.", + "Voer elk woord van jouw BIP-39 geheugensteun in als een hexadecimaal van 1 tot 800.", + "Voer elk woord van jouw BIP-39 geheugensteun in als een octaal van 1 tot 4000.", + "Voer elk woord van jouw BIP-39 geheugensteun in.", + "Fout:", + "Esc", + "Bestanden verkennen?", + "Exporteren naar SD kaart..", + "Uitgebreide publieke sleutel", + "Fabrieksinstellingen", + "Ontsleutelen is niet gelukt", + "PSBT laden is niet gelukt", + "Adres laden is niet gelukt", + "Sleutel laden is niet gelukt", + "Bericht laden is niet gelukt", + "Geheugensteun laden is niet gelukt", + "Descriptor laden is niet gelukt", + "Wachtwoord laden is niet gelukt", + "Geheugensteun opslaan is niet gelukt", + "Tarief:", + "Voedingssnelheid", + "Bestandsnaam", + "Bestandsnaam %s OVERSCHRIJVEN op SD kaart?", + "Vingerafdruk niet ingesteld in PSBT", + "Firmware overschrijdt de maximale grootte: %d", + "Geflipte X-coördinaten", + "Fluit diameter", + "Vrij:", + "Uit data-opslag", + "Wis uw SD kaart volledig in een ander apparaat om te zorgen dat de gegevens onherstelbaar zijn", + "Geheugensteun genereren", + "Een BIP85 afgeleide geheugensteun genereren?", + "Eigen ID gebruiken voor geheugensteun? Anders vingerafdruk gebruiken", + "Ga", + "Goede entropie", + "Hardware", + "Hex publieke sleutel", + "Hexadecimaal", + "Verberg geheugensteunen", + "Hoge kosten!", + "ID bestaat al", + "Invoer (%d):", + "Installeren?", + "Onvoldoende Entropie!", + "Onvoldoende entropie", + "Ongeldig adres", + "Ongeldige bootloader", + "Ongeldige geheugensteun lengte", + "Ongeldige publieke sleutel", + "Ongeldige portemonnee:", + "Omkeren", + "Omgekeerde kleuren", + "Sleutel", + "Sleutel niet verstrekt", + "Krux printer test QR", + "LCD-type", + "Taal", + "Laat leeg als je wilt dat Krux een geldig laatste woord kiest", + "Links", + "Lijn vertraging", + "Lijn:", + "Geheugensteun laden", + "Portemonnee laden", + "Een vertrouwde portemonnee descriptor laden om adressen te bekijken?", + "Laden vanaf SD kaart", + "Laden vanaf SD kaart?", + "Laden van camera", + "Laden?", + "Laden?", + "Camera laden..", + "Wijzigingsadressen laden..", + "Laadprinter..", + "Ontvangstadressen laden..", + "Laden..", + "Taal", + "Opslaglocatie", + "Maximale lengte overschreden (%s)", + "Bericht", + "Bericht:", + "Handtekening bestand mist", + "Geheugensteun", + "Geheugensteun ID", + "Geheugensteun en wachtwoord worden bewaard.", + "Geheugensteun is niet versleuteld", + "Aangepast:", + "Multisig", + "Native Segwit - 84 zal worden gebruikt", + "Netwerk", + "Geheugensteun aanmaken", + "Nieuwe firmware gevonden.", + "Nee", + "Geen wachtwoordzin", + "Niet genoeg gedobbeld!", + "Nummers", + "Octaal", + "Andere indelingen", + "PBKDF2 iter.", + "Maak geperforeerde stippen zwart zodat ze worden gedetecteerd.", + "Papier breedte", + "Deel", + "Deel grootte", + "Wachtwoord", + "Pad komt niet overeen", + "Patroon gevonden!", + "Alle opgeslagen versleutelde mnemonics en instellingen permanent uit het flashgeheugen verwijderen?", + "Opslag", + "Pixelafwijkingsindex:", + "Platte tekst QR", + "Laadt een portemonnee descriptor in", + "Duik tarief", + "Slechte entropie", + "Lage entropie gedetecteerd!", + "Test QR afdrukken", + "Tiny Seed afdrukken?", + "Afdrukken naar QR", + "Afdrukken naar QR?", + "Afdrukken?", + "Printer", + "Printer driver niet ingesteld!", + "Afdrukken..", + "Toch doorgaan?", + "Doorgaan?", + "Verwerken..", + "QR code", + "RX pin", + "Ontvangen", + "Ontvangstadres", + "Regio:", + "Verwijderen %s?", + "Geheugensteun verwijderen", + "Firmwarebestanden van SD kaart verwijderen?", + "Res. - Formaat", + "Fabrieksinstellingen herstellen en opnieuw opstarten?", + "Terug naar QR-lezer", + "Controleer gescande gegevens en bewerk indien nodig", + "Rechts", + "Dobbel een dobbelsteen minstens %d keer voor het genereren van een geheugensteun.", + "Roldistributie:", + "Gedobbeld:", + "SD kaart", + "SD kaart niet gedetecteerd.", + "Gedobbelde SHA256:", + "Momentopname van SHA256:", + "QR-afbeelding opslaan op SD kaart", + "Opslaan op SD kaart", + "Opslaan op SD kaart?", + "Opgeslagen op SD kaart", + "Schaal", + "Adres scannen", + "BIP-39 Wachtwoord Scannen", + "QR Code Sleutel Scannen", + "Woorden 1 t/m 12 opnieuw scannen", + "Woorden 13 t/m 24 scannen", + "Schermbeveiligingstijd", + "Scripttype", + "Beveiliging", + "Overschrijving naar jezelf, of wisselgeld (%d):", + "Zelf overschrijving:", + "Instellingen", + "Instellingen intern opgeslagen op flitser.", + "Instellingen opgeslagen op SD kaart.", + "Shannon's entropie:", + "Afsluiten", + "Uitschakelingstijd:", + "Bezig met afsluiten..", + "Ondertekenen", + "Teken op QR-code", + "Teken op SD kaart", + "Ondertekenen?", + "Handtekening", + "Bericht ondertekend", + "PSBT ondertekend", + "Ondertekenen..", + "Enkele sleutel", + "Grootte:", + "Sommige controles kunnen niet worden uitgevoerd.", + "Uitgaven (%d):", + "Uitgaven:", + "Statistieken voor nerds", + "Opslaan op apparaat", + "Opslaan op SD kaart", + "Verander modus", + "TIK of ENTER voor opname", + "TX pin", + "Tekst", + "Thema", + "Thermisch", + "Gebruik de functie 'Apparaat wissen' om te zorgen dat de gegevens onherstelbaar zijn", + "Helderheid schakelen", + "Hulpmiddelen", + "Aanraak gevoeligheid", + "Aanraakscherm", + "Meer proberen?", + "Voer een BIP-39 wachtwoord in", + "Voer sleutel in", + "Eenheid", + "Upgrade afgerond.", + "Gebruik een donker achergrond.", + "Gebruik de camera als entropie voor het aanmaken van een nieuwe geheugensteun", + "Gebruikt:", + "Waarde %s is buiten bereik: [%s, %s]", + "Waarde moet meerdere van %s zijn", + "Bezig met verifiëren..", + "Versie", + "Via camera", + "Via D20", + "Via D6", + "Via handmatige invoer", + "Via woorden", + "Wacht op opname", + "Portemonnee", + "Descriptor", + "Portemonnee descriptor", + "Portemonnee descriptor geladen!", + "Portemonnee descriptor niet gevonden.", + "Waarschuwing:", + "Apparaat wissen", + "Apparaat wissen..", + "Woord %d", + "Woord nummers", + "Woorden", + "Yes", + "is geen geldig adres", + "werd NIET GEVONDEN in de eerste %d adressen", +] diff --git a/src/krux/translations/pt.py b/src/krux/translations/pt.py new file mode 100644 index 00000000..0b61559d --- /dev/null +++ b/src/krux/translations/pt.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% do valor.", + "%d da %d multisig", + "%d a %d", + "removido.", + "(%d total)", + "(Experimental)", + "(Somente visualização)", + "12 palavras", + "24 palavras", + "Sobre", + "Aceitar suposições?", + "Conta", + "A conta #0 seria assumida", + "Índice da Conta", + "Adicionar ou alterar senha da carteira?", + "Entropia adicional da câmera necessária para o modo AES-CBC", + "Endereço", + "Alinhe a câmera e a placa de backup corretamente.", + "Antirreflexo desativado", + "Antirreflexo ativado", + "Aparência", + "Tem certeza?", + "Cores BGR", + "Voltar", + "Voltar ao Menu", + "Backup de Mnemônico", + "Assinatura Inválida", + "Baudrate", + "Grade binária", + "Borda", + "Brilho", + "Botões", + "Debounce dos Botões", + "Captura cancelada", + "Troco", + "Endereços de Troco", + "Mudar o tema e reiniciar?", + "Troco:", + "Alterações só durarão até o desligamento.", + "Verifique o cartão SD", + "Verificar se este endereço pertence a carteira?", + "Verificado %d endereços sem correspondências.", + "Verificando o cartão SD..", + "Índice Derivado", + "Gerar Código QR", + "Gerar código QR do texto?", + "Criado:", + "Código QR Customizado", + "Customizar", + "Personalizar sua carteira gerará uma nova chave.", + "Profundidade de Corte", + "Método de Corte", + "Decimal", + "Descriptografar?", + "Carteira Padrão", + "Profundidade da Passagem", + "Endereços do Descritor", + "Display", + "Não desligue, pode demorar um pouco para concluir.", + "Feito?", + "Duplo mnemônico", + "Driver", + "Criptografado", + "Código QR Criptografado", + "Mnemonic criptografado não foi armazenado", + "Mnemônico criptografado foi armazenado com ID:", + "Criptografia", + "Modo de Criptografia", + "Insira %d palavras BIP-39.", + "Digite o número de cada palavra do seu mnemônico BIP-39, de 1 a 2048.", + "Digite o número de cada palavra do seu mnemônico BIP-39 como um número em hexadecimal, de 1 a 800.", + "Digite o número de cada palavra do seu mnemônico BIP-39 como um número em octal, de 1 a 4000.", + "Digite cada palavra do seu mnemônico BIP-39.", + "Erro:", + "Esc", + "Explorar arquivos?", + "Exportando para o cartão SD..", + "Chave Pública Estendida", + "Configurações de Fábrica", + "Falhou em descriptografar", + "Falhou ao carregar PSBT", + "Falhou ao carregar endereço", + "Falha ao carregar a chave", + "Falhou ao carregar mensagem", + "Falhou ao carregar mnemônico", + "Falha ao carregar o descritor de saída", + "Falha ao carregar a senha", + "Falhou ao armazenar mnemônico", + "Taxa:", + "Taxa de Alimentação", + "Nome do arquivo", + "O nome do arquivo %s existe no cartão SD, substituir?", + "Impressão digital não definida no PSBT", + "Firmware excede o tamanho máximo: %d", + "Coordenadas X invertidas", + "Diâmetro da Fresa", + "Livre:", + "Do Armazenamento", + "Apague totalmente seu cartão SD em outro dispositivo para garantir que os dados sejam irrecuperáveis", + "Gerar Mnemônico", + "Gerar um mnemônico derivado BIP85?", + "Dê a este mnemônico um ID personalizado? Caso contrário, a impressão digital atual será usada", + "Ir", + "Boa entropia", + "Hardware", + "Chave pública hexadecimal", + "Hexadecimal", + "Ocultar Mnemônicos", + "Taxas altas!", + "Id já existe", + "Entradas (%d):", + "Instalar?", + "Entropia insuficiente!", + "Entropia insuficiente", + "Endereço inválido", + "Bootloader inválido", + "Comprimento de mnemônico inválido", + "Chave pública inválida", + "Carteira inválida:", + "Invertido", + "Cores invertidas", + "Chave", + "A chave não foi fornecida", + "Teste de impressão de QR krux", + "Tipo de LCD", + "Língua", + "Deixe em branco se quiser que o Krux escolha uma palavra final válida", + "Esquerda", + "Atraso de Linha", + "Linha:", + "Carregar Mnemônico", + "Carregar Carteira", + "Carregar um descritor de carteira confiável para visualizar endereços?", + "Carregar do cartão SD", + "Carregar do cartão SD?", + "Carregar da câmera", + "Carregar um?", + "Carregar?", + "Carregando Câmera..", + "Carregando endereços de troco..", + "Carregando impressora..", + "Carregando endereços de recebimento..", + "Carregando..", + "Idioma", + "Local", + "Comprimento máximo excedido (%s)", + "Mensagem", + "Mensagem:", + "Arquivo de assinatura faltando", + "Mnemônico", + "ID do mnemônico", + "Mnemônico e senha serão mantidos.", + "Mnemônico não foi criptografado", + "Modificado:", + "Multisig", + "Segwit nativo - 84 seria assumido", + "Rede", + "Novo Mnemônico", + "Novo firmware detectado.", + "Não", + "Sem Senha", + "Jogadas insuficientes!", + "Números", + "Octal", + "Outros Formatos", + "Iter. PBKDF2", + "Pinte os pontos perfurados de preto para que possam ser detectados.", + "Largura do papel", + "Parte", + "Tamanho da peça", + "Senha", + "Incompatibilidade de caminho", + "Padrão detectado!", + "Remover permanentemente todos os mnemônicos criptografados e configurações armazenados da memória flash?", + "Salvar", + "Índice de desvio de pixels:", + "QR em Texto", + "Carregue um descritor da carteira", + "Taxa de Mergulho", + "Entropia fraca", + "Baixa entropia detectada!", + "Imprimir QR de teste", + "Imprimir Tiny Seed?", + "Imprimir QR", + "Imprimir QR?", + "Imprimir?", + "Impressora", + "Driver de impressora não está definido!", + "Imprimindo..", + "Continuar mesmo assim?", + "Seguir?", + "Processando..", + "Código QR", + "Pino RX", + "Recebimento", + "Endereços de Recebimento", + "Região:", + "Excluir %s?", + "Excluir Mnemônico", + "Remover arquivos de firmware do cartão SD?", + "Res. - Formato", + "Restaurar as configurações de fábrica e reiniciar?", + "Retornar ao Visualizador de QR", + "Revise os dados, edite se necessário", + "Direita", + "Role o dado pelo menos %d vezes para gerar um mnemônico.", + "Distribuição de jogadas:", + "Jogadas:", + "Cartão SD", + "Cartão SD não detectado.", + "SHA256 de jogadas:", + "Sha256 da imagem:", + "Salvar imagem do QR no cartão SD", + "Salvar no cartão SD", + "Salvar no cartão SD?", + "Salvo no cartão SD", + "Escala", + "Escanear Endereço", + "Escanear a senha BIP39", + "Escanear Código QR da Chave", + "Escaneando as palavras 1-12 novamente", + "Escaneando as palavras 13-24", + "Tempo para protetor de tela", + "Tipo de Script", + "Segurança", + "Autotransferência ou Troco (%d):", + "Autotransferência:", + "Configurações", + "Configurações armazenadas internamente no flash.", + "Configurações armazenadas no cartão SD.", + "Entropia de Shannon:", + "Desligar", + "Tempo de desligamento", + "Desligando..", + "Assinar", + "Assinar para código QR", + "Assinar para cartão SD", + "Assinar?", + "Assinatura", + "Mensagem Assinada", + "PSBT Assinada", + "Assinando..", + "Single-sig", + "Total:", + "Algumas verificações não podem ser realizadas.", + "Gastos (%d):", + "Gasto:", + "Estatísticas para Nerds", + "Armazene na Flash", + "Armazene no Cartão SD", + "Deslize para mudar de modo", + "TOQUE ou ENTER para capturar", + "Pino TX", + "Texto", + "Tema", + "Térmica", + "Para garantir que os dados sejam irrecuperáveis, use o recurso Limpar Dispositivo", + "Alternar brilho", + "Ferramentas", + "Limiar de Toque", + "Touchscreen", + "Tentar mais?", + "Digitar a senha BIP39", + "Digite a Chave", + "Unidade", + "Atualização completa.", + "Use uma superfície de fundo preta.", + "Use a entropia da câmera para criar um novo mnemônico", + "Usado:", + "Valor %s fora do alcance: [ %s, %s]", + "O valor deve ser múltiplo de %s", + "Verificando..", + "Versão", + "Pela Câmera", + "Via D20", + "Via D6", + "Por entrada manual", + "Via Palavras", + "Aguarde a captura", + "Carteira", + "Descritor de Carteira", + "Descritor da carteira", + "Descritor de saída da carteira carregado!", + "O descritor de saída da carteira não foi encontrado.", + "Aviso:", + "Limpar Dispositivo", + "Limpando Dispositivo..", + "Palavra %d", + "Números das Palavras", + "Palavras", + "Sim", + "é um endereço válido!", + "NÃO FOI ENCONTRADO nos primeiros %d endereços", +] diff --git a/src/krux/translations/ru.py b/src/krux/translations/ru.py new file mode 100644 index 00000000..090010f0 --- /dev/null +++ b/src/krux/translations/ru.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% от суммы.", + "%d из %d мультиподпись", + "%d к %d", + "%s удален.", + "(%d всего)", + "(Эксперементальный)", + "(Только часы)", + "12 слов", + "24 слова", + "О Программе", + "Принять предположение?", + "Учетная запись", + "Будет принят счет №0", + "Индекс счета", + "Добавить или изменить пароль кошелька?", + "Для режима AES-CBC требуется дополнительная энтропия от камеры", + "Адрес", + "Правильно совместите камеру и резервную пластину.", + "Антиблик отключен", + "Антиблик включен", + "Внешний Вид", + "Вы уверены?", + "Цвета BGR", + "Назад", + "Назад в Mеню", + "Резервная мнемоника", + "Плохая подпись", + "Скорость Передачи Данных", + "Двоичная сетка", + "Заполнение Границ", + "Яркость", + "Кнопки", + "Антидребезг кнопок", + "Захват отменен", + "Сдача", + "Адрес Сдачи", + "Сменить тему и перезагрузить?", + "Сдача:", + "Изменения будут храниться до выключения.", + "Проверить SD Карту", + "Проверить, что адрес принадлежит этому кошельку?", + "Проверено %d адресов без совпадений.", + "Проверка SD карты..", + "Дочерний индекс", + "Создать QR Код", + "Создать QR код из текста?", + "Создано:", + "Пользовательский QR Код", + "Настроить", + "Настройка вашего кошелька создаст новый ключ.", + "Глубина Резки", + "Метод Резки", + "Десятичный", + "Расшифровать?", + "Кошелек по умолчанию", + "Глубина за Проход", + "Адреса дескрипторов", + "Дисплеи", + "Не выключайте питание, это может занять некоторое время.", + "Готово?", + "Двойная мнемоника", + "Драйвер", + "Зашифровано", + "Зашифрованный QR Код", + "Зашифрованная мнемоника не была сохранена", + "Зашифрованная мнемоника была сохранена с ID:", + "Шифрование", + "Метод Шифрования", + "Введите %d слов BIP-39.", + "Введите каждое слово вашей мнемоники BIP-39 в виде числа от 1 до 2048.", + "Введите каждое слово вашей мнемоники BIP-39 в виде шестнадцатеричного числа от 1 до 800.", + "Введите каждое слово вашей мнемоники BIP-39 в виде восьмеричного числа от 1 до 4000.", + "Введите каждое слово вашей BIP-39 мнемоники.", + "Ошибка:", + "Выйти", + "Исследовать файлы?", + "Экспортирование на SD карту..", + "Расширенный Публичный Ключ", + "Заводские Настройки", + "Не удалось расшифровать", + "Не удалось загрузить PSBT", + "Не удалось загрузить адрес", + "Не удалось загрузить ключ", + "Не удалось загрузить сообщение", + "Не удалось загрузить мнемонику", + "Не удалось загрузить выходной дескриптор", + "Не удалось загрузить фразу-пароль", + "Не удалось сохранить мнемонику", + "Комиссия:", + "Скорость Подачи", + "Имя файла", + "Файл %s существует на SD карте, перезаписать?", + "Отпечаток пальца не установлен в PSBT", + "Прошивка превышает максимальный размер: %d", + "Перевернутые координаты X", + "Диаметр Флюта", + "Свободно:", + "Из Памяти", + "Полностью стерите SD-карту в другом устройстве, чтобы убедиться, что данные не восстановимы", + "Создать Мнемонику", + "Сгенерировать дочернюю мнемонику BIP85?", + "Назначить этой мнемоники кастомный ID? В ином случае будет использован текущий фингерпринт", + "OK", + "Хорошая энтропия", + "Аппаратное Обеспечение", + "Шестнадцатеричный Публичный Ключ", + "Шестнадцатеричный", + "Скрыть мнемоники", + "Высокие комиссии!", + "ID уже существует", + "Входы (%d):", + "Установить?", + "Недостаточная Энтропия!", + "Недостаточная энтропия", + "Неверный адрес", + "Неверный загрузчик", + "Неверная длина мнемоники", + "Неверный публичный ключ", + "Неверный кошелек:", + "Инвертировать", + "Перевернутые цвета", + "Ключ", + "Ключ не предоставлен", + "Тестовый QR Принтера Krux", + "Тип ЖК-дисплея", + "Язык", + "Оставьте пустым, если хотите, чтобы Krux выбрал подходящее последнее слово", + "Влево", + "Задержка Линии", + "Линия:", + "Загрузить Мнемонику", + "Загрузить кошелек", + "Загрузить дескриптор доверенного кошелька для просмотра адресов?", + "Загрузка с SD-карты", + "Загрузить с SD карты?", + "Из камеры", + "Загрузить один?", + "Загрузить?", + "Загрузка Камеры..", + "Загрузка адресов изменения..", + "Загрузка принтера..", + "Загрузка адресов получения..", + "Загрузка..", + "Локаль", + "Расположение", + "Максимальная длина превышена (%s)", + "Сообщение", + "Сообщение:", + "Отсутствует файл подписи", + "Мнемоника", + "ID Мнемоники", + "Мнемоника и парольная фраза будут сохранены.", + "Мнемоника не была зашифрована", + "Изменено:", + "Мультиподпись", + "Native Segwit - 84 будет принято", + "Сеть", + "Новая Мнемоника", + "Обнаружена новая прошивка.", + "Нет", + "Нет Фраза-пароль", + "Недостаточно бросков!", + "Числа", + "Восьмеричный", + "Другие форматы", + "PBKDF2 Итерации", + "Закрасьте перфорированные точки черным цветом, чтобы их можно было обнаружить.", + "Ширина Бумаги", + "Часть", + "Размер Части", + "Фраза-пароль", + "Несоответствие пути", + "Образец обнаружен!", + "Окончательно удалить все сохраненные зашифрованные мнемоники и настройки из флеш-памяти?", + "Постоянная Память", + "Индекс отклонения пикселей:", + "QR Открытым Текстом", + "Пожалуйста загрузите выходной дескриптор кошелька", + "Скорость Погружения", + "Плохая энтропия", + "Обнаружена плохая энтропия!", + "Напечатать Тестовый QR", + "Распечатать Tiny Seed?", + "Печать в QR", + "Напечатать в виде QR?", + "Печатать?", + "Принтер", + "Драйвер Принтера не установлен!", + "Идет печать..", + "Все равно продолжить?", + "Продолжить?", + "Обработка..", + "QR Код", + "RX Пин", + "Получить", + "Адрес Получения", + "Регион:", + "Удалить %s?", + "Удалить Мнемонику", + "Удалить файлы прошивки с SD-карты?", + "Разреш. - Формат", + "Восстановить заводские настройки и перезагрузить?", + "Вернуться к QR-просмотрщику", + "Просмотрите отсканированные данные, отредактируйте при необходимости", + "Вправо", + "Бросьте кубик не менее %d раз, чтобы сгенерировать мнемонику.", + "Распределение бросков:", + "Броски:", + "SD карта", + "SD карта не обнаружена.", + "SHA256 бросков:", + "SHA256 снэпшота:", + "Сохранить QR-изображение на SD-карту", + "Сохранить на SD-карту", + "Сохранить на SD карту?", + "Сохранено на SD карту", + "Шкала", + "Отсканировать Адрес", + "Отсканировать BIP39 фразу-пароль", + "Отсканировать Ключ QR код", + "Сканирование слов 1-12 снова", + "Сканирование слов 13-24", + "Время Экранной Заставки", + "Тип скрипта", + "Охрана", + "Трансфер самому себе или Сдача (%d):", + "Перевод самому себе:", + "Настройки", + "Настройки хранятся во флэш-памяти.", + "Настройки сохранены на SD-карте.", + "Энтропия Шеннона:", + "Выключить", + "Время выключения", + "Выключение..", + "Подписать", + "Подписать QR-код", + "Подписать на SD-карте", + "Подписать?", + "Подпись", + "Подписанное Сообщение", + "Подписанное PSBT", + "Подписание..", + "Одна подпись", + "Размер:", + "Некоторые проверки не могут быть выполнены.", + "Расход (%d):", + "Расход:", + "Статистика для Гиков", + "Сохранить на Флэш Память", + "Сохранить на SD Карту", + "Свайпните, чтобы сменить режим", + "ПРИКОСНИТЕСЬ или нажмите ВВОД, чтобы захватить", + "TX Пин", + "Текст", + "Тема", + "Термальный", + "Для гарантии невосстановления данных используйте функцию Очистки Устройства", + "Регулировка Яркости", + "Инструменты", + "Чувствительность", + "Тачскрин", + "Попробовать ещё?", + "Ввести BIP39 фразу-пароль", + "Ввести Ключ", + "Единица Измерения", + "Обновление завершено.", + "Использовать черную фоновую поверхность.", + "Использовать энтропию камеры, чтобы создать новую мнемонику", + "Использовано:", + "Значение %s вне диапозона: [%s, %s]", + "Значение должно быть кратным %s", + "Проверка..", + "Версия", + "С Помощью Камеры", + "С Помощью D20", + "С Помощью D6", + "С Помощью Ручного Ввода", + "Через Слово", + "Дождитесь Захвата", + "Кошелек", + "Дескриптор Кошелька", + "Выходной дескриптор кошелька", + "Выходной дескриптор кошелька загружен!", + "Выходной дескриптор кошелька не найден.", + "Предупреждение:", + "Очистка Устройства", + "Очистка Устройства..", + "Слово %d", + "Числа Слов", + "Слова", + "Да", + "некорректный адрес", + "нЕ НАЙДЕНО в первых %d адресах", +] diff --git a/src/krux/translations/tr.py b/src/krux/translations/tr.py new file mode 100644 index 00000000..f5672f1a --- /dev/null +++ b/src/krux/translations/tr.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "tutarın %'si.", + "%d / %d çoklu imza", + "%d to %d", + "%s kaldırıldı.", + "(toplam %d)", + "(Deneysel)", + "(sadece izle)", + "12 kelime", + "24 kelime", + "Hakkında", + "Varsayım kabul edilsin mi?", + "Hesap", + "#0 numaralı hesap varsayılacaktır", + "Hesap Endeksi", + "Cüzdan parolası eklensin mi veya değiştirilsin mi?", + "AES-CBC modu için kameradan ek entropi gereklidir", + "Adres", + "Kamerayı ve yedek plakay'ı düzgün bir şekilde hizalayın.", + "Parlama önleyici devre dışı", + "Parlama önleyici etkin", + "Görünüm", + "Emin misiniz?", + "BGR Renkleri", + "Geri", + "Menüye Dön", + "Yedek Mnemonic", + "Geçersiz imza", + "Baud Hızı", + "İkili Izgara", + "Kenarlık Dolgusu", + "Parlaklık", + "Butonlar", + "Buton Geri-sekmesi", + "Yakalama iptal edildi", + "Para Üstü", + "Para Üstü Adresleri", + "Temayı değiştir ve yeniden başlat?", + "Para Üstü:", + "Değişiklikler kapanışa kadar devam edecek.", + "SD Kartı Kontrol Et", + "Bu adresin, bu cüzdana ait olduğunu kontrol et?", + "Eşleşmeyen %d adres kontrol edildi.", + "SD kart kontrol ediliyor..", + "Türev Dizini", + "QR Kodu Oluştur", + "Metinden QR kodu oluşturulsun mu?", + "Oluşturuldu:", + "Özel QR Kodu", + "Özelleştir", + "Cüzdanınızı özelleştirmek yeni bir Anahtar oluşturacaktır.", + "Kesim Derinliği", + "Kesim Yöntemi", + "Ondalık", + "Şifre çözülsün mü?", + "Varsayılan Cüzdan", + "Geçiş Başına Derinlik", + "Tanımlayıcı Adresler", + "Ekran", + "Kapatmayın, tamamlanması biraz zaman alabilir.", + "Tamamlandı mı?", + "Çifte anımsatıcı", + "Sürücü", + "Şifrelenmiş", + "Şifrelenmiş QR Kodu", + "Şifrelenmiş mnemonic depolanmadı", + "Şifrelenmiş mnemonic ID ile depolandı:", + "Şifreleme", + "Şifreleme Modu", + "%d BIP-39 kelime girin.", + "BIP-39 mnemonic'inizin her kelimesini 1'den 2048'e kadar bir sayı olarak girin.", + "BIP-39 mnemonic'inizin her kelimesini 1'den 800'e kadar onaltılık bir sayı olarak girin.", + "BIP-39 mnemonic'inizin her kelimesini 1'den 4000'e kadar sekizlik bir sayı olarak girin.", + "BIP-39 mnemonic'inizin her kelimesini girin.", + "Hata:", + "Çıkış", + "Dosyaları ara?", + "SD karta aktarılıyor..", + "Genişletilmiş Public Key", + "Fabrika Ayarları", + "Şifre çözme başarısız", + "PSBT yükleme başarısız", + "Adres yükleme başarısız", + "Anahtar yükleme başarısız", + "Mesaj yükleme başarısız", + "Mnemonic yükleme başarısız", + "Çıktı tanımlayıcısı yüklemesi başarısız", + "Parola yükleme başarısız", + "Mnemonic depolama başarısız", + "Ücret:", + "Besleme Hızı", + "Dosya adı", + "%s dosya adı SD kartta var, üzerine yazılsın mı?", + "PSBT'de parmak izi ayarı kaldırıldı", + "Donanım yazılımı maksimum boyutu aşıyor: %d", + "X Koordinatları Tersine Çevrildi", + "Flute Çapı", + "Boş:", + "Depolamadan Seç", + "Verilerin geri kullanılamaz olduğundan emin olmak için SD kartınızı başka bir cihazda tamamen silin", + "Mnemonic Oluştur", + "BIP85 türevi anımsatıcı oluşturulsun mu?", + "Bu mnemonic'e özel bir ID verilsin mi? Aksi takdirde mevcut parmak izi kullanılacaktır", + "Seç", + "Yeterli entropi", + "Donanım", + "Hex Public Key", + "Onaltılık", + "Mnemonic'leri Gizle", + "Yüksek ücret!", + "ID zaten var", + "Girişler (%d):", + "Yükle?", + "Yetersiz Entropi!", + "Yetersiz entropi", + "Geçersiz adres", + "Geçersiz önyükleyici", + "Geçersiz mnemonic uzunluğu", + "Geçersiz public key", + "Geçersiz cüzdan:", + "Ters Çevir", + "Ters Renkler", + "Anahtar", + "Anahtar sağlanmadı", + "Krux Yazıcı Test QR'ı", + "LCD Tipi", + "Dil", + "Krux'un geçerli bir son kelime seçmesini istiyorsanız boş bırakın", + "Sol", + "Satır Gecikmesi", + "Satır:", + "Mnemonic Yükle", + "Cüzdan Yükle", + "Adresleri görüntülemek için güvenilir bir cüzdan tanımlayıcısı yüklensin mi?", + "SD karttan yükle", + "SD karttan yüklensin mi?", + "Kameradan yükle", + "Bir tane mi yüklensin?", + "Yüklensin mi?", + "Kamera Yükleniyor..", + "Para üstü adresler yükleniyor..", + "Yazıcı yükleniyor..", + "Alım adresler yükleniyor..", + "Yükleniyor..", + "Yerel", + "Konum", + "Maksimum uzunluk aşıldı (%s)", + "Mesaj", + "Mesaj:", + "İmza dosyası eksik", + "Mnemonic", + "Mnemonic ID", + "Mnemonik ve parola tutulacaktır.", + "Mnemonic şifrelenmedi", + "Değiştirildi:", + "Çoklu imza", + "Yerel Segwit - 84 varsayılacaktır", + "Ağ", + "Yeni Mnemonic", + "Yeni donanım yazılımı tespit edildi.", + "Hayır", + "Parola Yok", + "Yeterli zar atışı yok!", + "Numaralar", + "Sekizlik", + "Diğer Formatlar", + "PBKDF2 Yinelemesi", + "İşaretlenmiş noktaları siyaha boyayın ki tespit edilebilsinler.", + "Kağıt Genişliği", + "Parça", + "Parça Boyutu", + "Parola", + "Yol uyuşmazlığı", + "Örüntü algılandı!", + "Tüm depolanmış ve şifrelenmiş mnemonic'ler ve ayarlar flash'tan kalıcı olarak kaldırılsın mı?", + "Kalıcı Depolama", + "Piksel sapma indeksi:", + "Düz Metin QR'ı", + "Lütfen bir cüzdan çıktı tanımlayıcısı yükleyin", + "Dalış Hızı", + "Düşük entropi", + "Düşük entropi tespit edildi!", + "Test QR'ını Yazdır", + "Tiny Seed Yazdırılsın mı?", + "QR'a Yazdır", + "QR'a yazdırılsın mı?", + "Yazdırılsın mı?", + "Yazıcı", + "Yazıcı Sürücüsü ayarlanmadı!", + "Yazdırılıyor..", + "Yine de devam edilsin mi?", + "Devam edilsin mi?", + "İşleniyor..", + "QR Kodu", + "RX Pini", + "Al", + "Adresleri Al", + "Bölge:", + "%s kaldırılsın mı?", + "Mnemonic'i Kaldır", + "SD Karttan donanım yazılımı dosyaları kaldırılsın mı?", + "Çözünürlüğü Sıfırla", + "Fabrika ayarlarına geri dönüp ve yeniden başlatılsın mı?", + "QR Görüntüleyiciye Dön", + "Taranan verileri gözden geçirin, gerekirse düzenleyin", + "Sağ", + "Bir mnemonic oluşturmak için zarı en az %d kez atın.", + "Zar atış dağılımı:", + "Zar atışları:", + "SD kart", + "SD kart algılanmadı.", + "Zar atışlarının SHA256'sı:", + "Snapshot'ın SHA256'sı:", + "QR Görüntüsünü SD Karta Kaydet", + "SD karta kaydet", + "SD karta kaydedilsin mi?", + "SD karta kaydedildi", + "Ölçek", + "Adresi Tara", + "BIP39 Parolasını Tara", + "Anahtar QR Kodunu Tara", + "1-12 kelimeleri tekrar taranıyor", + "13-24 kelimeleri taranıyor", + "Ekran Koruyucu Süresi", + "Betik Türü", + "Güvenlik", + "Kendine-transfer veya Para Üstü (%d):", + "Kendine-transfer:", + "Ayarlar", + "Ayarlar dahili olarak flaşta saklanır.", + "Ayarlar SD karta kaydedildi.", + "Shannon Entropisi:", + "Kapat", + "Kapanma Süresi", + "Kapatılıyor..", + "İmzala", + "QR koduna imzala", + "SD karta imzala", + "İmzalansın mı?", + "İmza", + "İmzalı Mesaj", + "İmzalı PSBT", + "İmzalanıyor..", + "Tek-imza", + "Boyut:", + "Bazı kontroller yerine getirilemedi.", + "Harcama (%d):", + "Harcama:", + "İnekler İçin İstatistikler", + "Flash'ta Sakla", + "SD Kartta Sakla", + "Modu değiştirmek için kaydırın", + "Yakalamak için DOKUN veya GİR", + "TX Pini", + "Metin", + "Tema", + "Termal", + "Verilerin geri kullanılamaz olduğundan emin olmak için Cihazı Sil özelliğini kullanın", + "Parlaklığı Değiştir", + "Araçlar", + "Dokunma Eşiği", + "Dokunmatik ekran", + "Daha fazla kez denensin mi?", + "BIP39 parolasını yazın", + "Anahtar Yaz", + "Birim", + "Güncelleme tamamlandı.", + "Siyah bir arka plan yüzeyi kullanın.", + "Yeni bir mnemonic oluşturmak için kameranın entropisini kullanın", + "Kullanılan:", + "%s değeri aralık dışında: [%s, %s]", + "Değer %s'nin katı olmalıdır", + "Doğrulanıyor..", + "Sürüm", + "Kamera Aracılığıyla", + "D20 Aracılığıyla", + "D6 Aracılığıyla", + "Manuel Giriş Aracılığıyla", + "Sözcüklerle", + "Yakalamanın tamamlanmasını bekleyin", + "Cüzdan", + "Cüzdan Tanımlayıcısı", + "Cüzdan çıktı tanımlayıcısı", + "Cüzdan çıktı tanımlayıcısı yüklendi!", + "Cüzdan çıktı tanımlayıcısı bulunamadı.", + "Uyarı:", + "Cihazı Sil", + "Cihaz Siliniyor..", + "Kelime %d", + "Kelime Numaraları", + "Kelimeler", + "Evet", + "geçerli bir adres!", + "ilk %d adreste BULUNAMADI", +] diff --git a/src/krux/translations/vi.py b/src/krux/translations/vi.py new file mode 100644 index 00000000..6ae21ad6 --- /dev/null +++ b/src/krux/translations/vi.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% của số tiền.", + "%d của %d đa chữ kí", + "%d đến %d", + "%s Đã bỏ.", + "(tổng cộng %d)", + "(Thực nghiệm)", + "(chỉ xem)", + "12 từ", + "24 từ", + "Về chúng tôi", + "Chấp nhận giả định?", + "Tài khoản", + "Tài khoản #0 sẽ được giả định", + "Chỉ mục tài khoản", + "Thêm hoặc thay đổi cụm mật khẩu ví?", + "Cần thêm entropy từ camera cho chế độ AES-CBC", + "Địa chỉ", + "Căn chỉnh camera và tấm dự phòng đúng cách.", + "Chống lóa bị vô hiệu hóa", + "Đã bật chống lóa", + "Giao diện", + "Bạn có chắc không?", + "Màu BGR", + "Trở lại", + "Quay lại Menu", + "Sao lưu Mnemonic", + "Chữ ký xấu", + "Tốc độ baud", + "Lưới nhị phân", + "Đệm viền", + "Độ sáng", + "Nút", + "Loại bỏ nhiễu nút", + "Hủy chụp hình", + "Thay đổi", + "Các địa chỉ tiền thối", + "Thay đổi giao diện và khởi động lại?", + "Thay đổi:", + "Thay đổi sẽ kéo dài cho đến khi tắt máy.", + "Kiểm tra thẻ SD", + "Kiểm tra địa chỉ đó có thuộc về ví này không?", + "Đã kiểm tra %d địa chỉ không khớp.", + "Kiểm tra thẻ SD..", + "Chỉ mục phụ", + "Tạo mã QR", + "Tạo mã QR từ văn bản?", + "Tạo:", + "Mã QR tùy chỉnh", + "Tùy chỉnh", + "Tùy chỉnh ví của bạn sẽ tạo một Khóa mới.", + "Chiều sâu cắt", + "Phương pháp cắt", + "Số thập phân", + "Giải mã?", + "Ví mặc định", + "Độ sâu mỗi lần cắt CNC", + "Địa chỉ người mô tả", + "Hiển thị", + "Không được tắt máy, có thể mất một lúc để hoàn thành.", + "Hoàn tất?", + "Từ gợi nhớ kép", + "Driver", + "Đã mã hóa", + "Mã QR được mã hóa", + "Mnemonic được mã hóa không được lưu trữ", + "Mnemonic được mã hóa không được lưu trữ với ID:", + "Mã hóa", + "Chế độ mã hóa", + "Nhập %d từ BIP-39.", + "Nhập từng từ của Mnemonic BIP-39 của bạn dưới dạng số từ 1 đến 2048.", + "Nhập từng từ trong Mnemonic BIP-39 của bạn dưới dạng số thập lục phân từ 1 đến 800.", + "Nhập từng từ trong Mnemonic BIP-39 của bạn dưới dạng số bát phân từ 1 đến 4000.", + "Nhập từng từ của Mnemonic BIP-39 của bạn.", + "Lỗi:", + "Esc", + "Khám phá các tập tin?", + "Xuất vào thẻ SD ..", + "Khóa công cộng", + "Cài đặt Gốc", + "Không giải mã được", + "Tải PSBT thất bại", + "Tải địa chỉ thất bại", + "Không tải được khóa", + "Không tải được tin nhắn", + "Tải mã Mnemonic thất bại", + "Không tải được bộ mô tả đầu ra", + "Không tải được cụm mật khẩu", + "Không lưu trữ Mnemonic được", + "Phí:", + "Tốc độ cắt CNC", + "Tên tệp", + "Tên tệp %s tồn tại trên thẻ SD, ghi đè lên?", + "Bỏ dấu vân tay trong PSBT", + "Phần mềm vượt quá kích thước tối đa: %d", + "Tọa độ X bị lật", + "Đường kính mũi cắt CNC", + "Khả dụng:", + "Từ bộ lưu trữ", + "Xóa hoàn toàn thẻ SD trong một thiết bị khác để đảm bảo dữ liệu không thể phục hồi", + "Tạo Mnemonic", + "Tạo một Mnemonic phụ thuộc BIP85?", + "Cung cấp cho Mnemonic này một ID tùy chỉnh? Nếu không thì fingerprint hiện tại sẽ được sử dụng", + "Chọn", + "Entropy tốt", + "Phần cứng", + "Khóa công cộng Hex", + "Thập lục phân", + "Ẩn Mnemonics", + "Phí cao!", + "Id đã tồn tại", + "Đầu vào (%d):", + "Cài đặt phần mềm?", + "Entropy không đủ!", + "Không đủ entropy", + "Địa chỉ không hợp lệ", + "Bộ tải khởi động không hợp lệ", + "Độ dài mã Mnemonic không hợp lệ", + "Khóa công cộng không hợp lệ", + "Ví không hợp lệ:", + "Đảo ngược", + "Màu đảo ngược", + "Chìa khóa", + "Khóa không được cung cấp", + "QR kiểm tra máy in Krux", + "Loại LCD", + "Ngôn ngữ", + "Để trống nếu bạn muốn Krux chọn một từ cuối cùng hợp lệ", + "Trái", + "Độ trễ Dòng", + "Đường kẻ:", + "Tải mã mnemonic", + "Nạp Ví", + "Tải mô tả ví đáng tin cậy để xem địa chỉ?", + "Tải từ thẻ SD", + "Tải từ thẻ SD?", + "Tải từ máy ảnh", + "Tải một?", + "Tải?", + "Đang tải máy ảnh..", + "Đang tải địa chỉ tiền thối..", + "Đang tải máy in ..", + "Đang tải địa chỉ nhận..", + "Đang tải..", + "Ngôn ngữ", + "Vị trí lưu", + "Chiều dài tối đa vượt quá (%s)", + "Tin nhắn", + "Tin nhắn:", + "Thiếu tập tin chữ ký", + "Mã mnemonic", + "Mnemonic ID ", + "Từ gợi nhớ và cụm mật khẩu sẽ được lưu giữ.", + "Mnemonic không được mã hóa", + "Đã sửa đổi:", + "Đa chữ kí", + "Native Segwit - 84 sẽ được giả định", + "Mạng lưới", + "Mnemonic mới", + "Phát hiện phần sụn mới.", + "Không", + "Không có cụm mật khẩu", + "Không đủ số lần quay!", + "Số", + "Bát phân", + "Các định dạng khác", + "Lặp lại PBKDF2", + "Tô các chấm đục lỗ màu đen để chúng có thể được phát hiện.", + "Chiều rộng giấy", + "Phần", + "Kích thước một phần", + "Cụm mật khẩu", + "Đường dẫn không khớp", + "Đã phát hiện mẫu!", + "Xóa vĩnh viễn mọi Mnemonics và cài đặt được mã hóa lưu trữ trong flash?", + "Vị trí lưu", + "Chỉ số độ lệch điểm ảnh:", + "QR dạng văn bản", + "Vui lòng tải bộ mô tả đầu ra ví", + "Tỷ lệ sụt giảm", + "Entropy kém", + "Phát hiện entropy yếu!", + "In kiểm tra QR", + "In Tiny Seed?", + "In ra QR", + "In ra mã QR?", + "In?", + "Máy in", + "Trình điều khiển máy in chưa được cài đặt!", + "Đang in..", + "Vẫn tiếp tục?", + "Thực hiện?", + "Đang xử lý..", + "Mã QR", + "RX Pin", + "Nhận được", + "Các địa chỉ nhận", + "Vùng:", + "Xóa %s?", + "Xóa Mnemonic", + "Xóa các tệp firmware khỏi Thẻ SD?", + "Độ phân giải - Định dạng", + "Khôi phục cài đặt gốc và khởi động lại?", + "Quay lại Trình xem QR", + "Xem lại dữ liệu đã quét, chỉnh sửa nếu cần", + "Phải", + "Lăn xúc xắc ít nhất %d lần để tạo Mnemonic.", + "Phân bổ xúc xắc:", + "Tổng số lần quay xúc xắc:", + "Thẻ SD", + "Thẻ SD không được phát hiện.", + "SHA256 của xúc xắc:", + "Sha256 của ảnh chụp:", + "Lưu Ảnh QR vào Thẻ SD", + "Lưu vào thẻ SD", + "Lưu vào thẻ SD?", + "Đã lưu vào thẻ SD", + "Tỉ lệ", + "Quét địa chỉ", + "Quét cụm mật khẩu BIP39", + "Quét mã QR khóa", + "Đang quét lại từ 1-12", + "Đang quét từ 13-24", + "Thời gian chế độ bảo vệ màn hình", + "Kiểu văn lệnh", + "Bảo mật", + "Tự chuyển nhượng hoặc giao dịch (%d):", + "Tự chuyển nhượng:", + "Cài đặt", + "Cài đặt được lưu trữ nội bộ trên đèn flash.", + "Cài đặt được lưu trên thẻ SD.", + "Entropy của Shannon:", + "Tắt máy", + "Thời gian tắt máy", + "Đang tắt..", + "Chữ kí", + "Ký vào mã QR", + "Ký vào thẻ SD", + "Kí?", + "Chữ ký", + "Tin nhắn đã ký", + "Đã ký PSBT", + "Đang ký..", + "Khóa đơn", + "Dung lượng:", + "Một số kiểm tra không thể được thực hiện.", + "Chi tiêu (%d):", + "Chi tiêu:", + "Số liệu thống kê cho Mọt sách", + "Lưu trữ trên flash", + "Lưu trữ trên thẻ SD", + "Vuốt để thay đổi chế độ", + "Chạm màn hình hoặc nhấn nút ENTER để chụp", + "TX Pin", + "Chữ", + "Chủ đề", + "Nhiệt", + "Sử dụng tính năng Xóa dữ liệu trên thiết bị để đảm bảo dữ liệu không thể phục hồi", + "Chuyển đổi độ sáng", + "Công cụ", + "Ngưỡng cảm ứng", + "Màn hình cảm ứng", + "Thử thêm nữa?", + "Nhập cụm mật khẩu BIP39", + "Nhập khóa", + "Đơn vị", + "Nâng cấp hoàn tất.", + "Sử dụng bề mặt nền đen.", + "Sử dụng sự ngẫu nhiên của máy ảnh để tạo ra một Mnemonic mới", + "Đã sử dụng:", + "Giá trị %s ngoài phạm vi: [ %s, %s]", + "Giá trị phải là bội của %s", + "Đang xác minh..", + "Phiên Bản", + "Qua máy ảnh", + "Qua xúc xắc 20 mặt", + "Qua xúc xắc 6 mặt", + "Thông qua đầu vào thủ công", + "Thông qua từ ngữ", + "Chờ bắt", + "Ví", + "Trình mô tả ví", + "Ví đầu ra mô tả", + "Đã tải bộ mô tả đầu ra của ví!", + "Không tìm thấy bộ mô tả đầu ra ví.", + "Cảnh báo:", + "Xóa dữ liệu trên thiết bị", + "Đang xóa dữ liệu trên thiết bị..", + "Kí tự %d", + "Từ số", + "Từ ngữ", + "Đúng", + "là một địa chỉ hợp lệ!", + "kHÔNG TÌM THẤY trong %d địa chỉ đầu tiên", +] diff --git a/src/krux/translations/zh.py b/src/krux/translations/zh.py new file mode 100644 index 00000000..8b95653d --- /dev/null +++ b/src/krux/translations/zh.py @@ -0,0 +1,317 @@ +# The MIT License (MIT) + +# Copyright (c) 2021-2024 Krux contributors + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# pylint: disable=C0301 +translation_array = [ + "% 的金额。", + "%d/%d 多签", + "%d到%d", + "已移除%s", + "(总计 %d)", + "(实验性)", + "(仅观察)", + "12 单词", + "24 单词", + "关于", + "接受假设?", + "账户", + "将假定为账户 #0", + "账户索引", + "添加或更改钱包密码?", + "AES-CBC 模式需要相机的额外熵", + "地址", + "正确对齐摄像头和背板。", + "防眩光已禁用", + "防眩光已启用", + "界面", + "确定?", + "BGR 颜色", + "返回", + "返回菜单", + "备份助记词", + "签名无效", + "波特率", + "二进制网格", + "边框填充", + "亮度", + "按钮", + "按钮去抖动", + "截取已取消", + "找零", + "找零地址", + "更改主题并重新启动?", + "找零", + "更改将在关机前保持。", + "检查 SD 卡", + "检查该地址是否属于此钱包?", + "已检查 %d 个不匹配的地址。", + "检查 SD 卡..", + "子索引", + "创建二维码", + "从文本创建二维码?", + "已创建:", + "自定义二维码", + "自定义", + "自定义您的钱包将生成新私钥。", + "切割深度", + "切割方法", + "十进制", + "解密?", + "默认钱包", + "每次通过的深度", + "描述符地址", + "显示", + "请勿断电,可能需要一段时间完成。", + "完成了吗?", + "双重助记词", + "驱动程序", + "已加密", + "加密二维码", + "加密助记词未存储", + "加密助记词已存储,ID 为:", + "加密", + "加密模式", + "输入 %d 个 BIP-39 词。", + "将 BIP-39 助记词的每个词作为 1 到 2048 的数字输入。", + "将 BIP-39 助记词的每个词作为 1 到 800 的十六进制数输入。", + "将 BIP-39 助记词的每个词作为 1 到 4000 的八进制数输入。", + "输入每个 BIP-39 助记词。", + "错误:", + "退出", + "浏览文件?", + "导出到 SD 卡..", + "扩展公钥", + "出厂设置", + "解密失败", + "加载 PSBT 失败", + "加载地址失败", + "加载密钥失败", + "加载消息失败", + "加载助记词失败", + "加载输出描述符失败", + "加载密码失败", + "存储助记词失败", + "费用:", + "进给速度", + "文件名", + "文件名 %s 存在于 SD 卡上,覆盖?", + "PSBT 中未设置指纹", + "固件超过最大尺寸:%d", + "翻转 X 坐标", + "刀具直径", + "空闲:", + "从存储中", + "在其他设备中完全擦除您的 SD 卡以确保数据不可恢复", + "生成助记词", + "生成 BIP85 子助记词?", + "为此助记词设置自定义 ID?否则将使用当前指纹", + "去", + "良好的熵", + "硬件", + "十六进制公钥", + "十六进制", + "隐藏助记词", + "高费用!", + "ID 已存在", + "输入 (%d):", + "安装?", + "熵不足!", + "熵不足", + "无效地址", + "无效的 ootloader ", + "助记词长度无效", + "无效公钥", + "无效钱包:", + "反转", + "反转颜色", + "密钥", + "未提供密钥", + "Krux 打印机测试二维码", + "LCD 类型", + "语言", + "如果希望 Krux 自动计算最后一位 Checksum,请留空", + "左", + "行延迟", + "行:", + "加载助记词", + "加载钱包", + "加载受信任的钱包描述符以查看地址?", + "从 SD 卡加载", + "从 SD 卡加载?", + "从相机加载", + "加载一个?", + "加载?", + "加载相机..", + "加载找零地址..", + "加载打印机..", + "加载接收地址..", + "加载中..", + "语言环境", + "位置", + "超过最大长度(%s)", + "消息", + "消息:", + "缺少签名文件", + "助记词", + "助记词 ID", + "助记词和密码将被保留。", + "助记词未加密", + "修改时间:", + "多签", + "假定为原生 Segwit - 84", + "网络", + "新助记词", + "检测到新固件。", + "否", + "无 Passphrase ", + "投掷次数不足!", + "数字", + "八进制", + "其他格式", + "PBKDF2 迭代", + "将打孔点涂黑,以便它们能被检测到。", + "纸张宽度", + "部分", + "部件尺寸", + "Passphrase", + "路径不匹配", + "检测到模式!", + "从 Flash 中永久删除所有存储的加密助记词和设置?", + "保存", + "像素偏差指数:", + "明文二维码", + "请加载钱包输出描述符", + "下刀速度", + "熵值低", + "检测到低熵!", + "打印测试二维码", + "打印 Tiny Seed?", + "打印到二维码", + "打印到二维码?", + "打印?", + "打印机", + "打印机驱动程序未设置!", + "正在打印", + "继续吗?", + "继续?", + "正在处理..", + "二维码", + "RX 引脚", + "接收", + "接收地址", + "区域:", + "删除 %s?", + "删除助记词", + "从 SD 卡中删除固件文件?", + "分辨率 - 格式", + "恢复出厂设置并重新设备?", + "返回二维码查看器", + "请检查扫描的数据,如有必要请编辑", + "右", + "掷骰子至少 %d 次以生成助记词。", + "掷骰子分布:", + "掷骰子:", + "SD 卡", + "未检测到 SD 卡。", + "掷骰子的 SHA256:", + "快照的 SHA256:", + "将二维码图像保存到 SD 卡", + "保存到 SD 卡", + "保存到 SD 卡?", + "保存到 SD 卡", + "缩放", + "扫描地址", + "扫描 BIP39 Passphrase", + "扫描私钥二维码", + "重新扫扫描第 1-12 个单词", + "扫描第 13-24 个单词", + "屏保时间", + "脚本类型", + "安全", + "自转或找零 (%d):", + "自行转账:", + "设置", + "设置存储在 Flash 内部。", + "设置存储在SD卡上。", + "香农熵:", + "关机", + "关机时间", + "关机中..", + "签名", + "二维码签名", + " SD 卡签名", + "是否签名?", + "签名", + "签名消息", + "已签名 PSBT", + "签名中..", + "单签", + "大小:", + "无法执行某些检查。", + "花费 (%d):", + "花费", + "极客统计数据", + "存储到 Flash", + "存储到 SD 卡", + "滑动切换模式", + "点击或按下 ENTER 截图", + "TX 引脚", + "文本", + "主题", + "热敏", + "要确保数据不可恢复,请使用擦除设备功能", + "调整亮度", + "工具", + "触摸阈值", + "触摸屏", + "再次尝试?", + "输入 BIP39 Phrasephrase", + "输入私钥", + "单位", + "升级已完成。", + "使用黑色背景界面。", + "使用摄像头的熵创建新助记词", + "已用:", + "值 %s 超出范围:[ %s,%s ]", + "值必须是 %s 的倍数", + "验证中..", + "版本", + "通过摄像头", + "通过 D20", + "通过 D6", + "通过手动输入", + "通过单词", + "等待截取", + "钱包", + "钱包描述", + "钱包输出描述符", + "钱包输出描述符加载重复!", + "未找到钱包输出描述符。", + "警告:", + "擦除设备", + "擦除设备中..", + "词 %d", + "单词序号", + "单词", + "是", + " 非有效地址", + "在前 %d 个地址中未找到", +] diff --git a/tests/pages/home_pages/test_home.py b/tests/pages/home_pages/test_home.py index 35c0f3a2..83456b75 100644 --- a/tests/pages/home_pages/test_home.py +++ b/tests/pages/home_pages/test_home.py @@ -437,7 +437,7 @@ def test_sign_psbt(mocker, m5stickv, tdata): None, None, [ - BUTTON_ENTER, # Load frm QR code + BUTTON_ENTER, # Load from QR code BUTTON_ENTER, # Path mismatch ACK BUTTON_ENTER, # PSBT resume BUTTON_ENTER, # output 1 diff --git a/tests/pages/home_pages/test_sign_message_ui.py b/tests/pages/home_pages/test_sign_message_ui.py index a37a9809..d33f8e28 100644 --- a/tests/pages/home_pages/test_sign_message_ui.py +++ b/tests/pages/home_pages/test_sign_message_ui.py @@ -228,54 +228,177 @@ def test_sign_message(mocker, m5stickv, tdata): def test_sign_message_at_address(mocker, m5stickv, tdata): from krux.pages.home_pages.sign_message_ui import SignMessage from krux.wallet import Wallet - from krux.input import BUTTON_ENTER + from krux.input import BUTTON_ENTER, BUTTON_PAGE, BUTTON_PAGE_PREV from krux.qr import FORMAT_NONE from krux.themes import theme from krux.pages.qr_capture import QRCodeCapture - BTN_SEQUENCE = [ - BUTTON_ENTER, # Load from camera - BUTTON_ENTER, # Confirm to sign message - BUTTON_ENTER, # Check signature - BUTTON_ENTER, # Sign to QR code - BUTTON_ENTER, # Check QR code + cases = [ + # Button sequence + # QR raw message + # SD raw message + # Sign to SD + # Message content + # Displayed address + # Signature + ( # 0 - Sign P2WPKH Mainnet + [ + BUTTON_ENTER, # Load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_ENTER, # Sign to QR code + BUTTON_ENTER, # Check QR code + ], + "signmessage m/84'/0h/0H/0/3 ascii:a test message with a colon ':' character.", + None, + False, + "a test message with a colon ':' character.", + "3. bc1qgl..cn3", + "IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=", + ), + ( # 1 - Sign P2WPKH Testnet + [ + BUTTON_ENTER, # Load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_ENTER, # Sign to QR code + BUTTON_ENTER, # Check QR code + ], + "signmessage m/84'/1h/0H/0/3 ascii:A test message.", + None, + False, + "A test message.", + "3. tb1qyn..5km", + "ILc30ti8OPSpCtzfj7sNnftANBCuVpyRX7pnM3iAgOk9F9IUtnXNPus0+MF12y5HKYHAB6IVYr66sLmL3Vi3oEE=", + ), + ( # 2 - Sign P2TR Mainnet + [ + BUTTON_ENTER, # Load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_ENTER, # Sign to QR code + BUTTON_ENTER, # Check QR code + ], + "signmessage m/86'/0h/0H/0/3 ascii:a test message with a colon ':' character.", + None, + False, + "a test message with a colon ':' character.", + "3. bc1py0..ler", + "H3Z5VioeLaC0rpdI2CflUu34IANgGxum0Rr9lmCziQRfUQv+vFND+nHvxHmJZA0uvLLI1/mTEEHD2bBfN6Y2d6w=", + ), + ( # 3 - Sign Legacy Mainnet + [ + BUTTON_ENTER, # Load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_ENTER, # Sign to QR code + BUTTON_ENTER, # Check QR code + ], + "signmessage m/44'/0h/0H/0/3 ascii:a test message with a colon ':' character.", + None, + False, + "a test message with a colon ':' character.", + "3. 1MVGa1..rsJ", + "IEpq8rUwSmDxO3GgwaZ75tw3DArtHtLi08kgQuRNXdteMI5KNEAWbpzsY8gRzGkspZN4YFiRu4RNCM+IsKkWys8=", + ), + ( # 4 - Sign Nested Segwit Mainnet + [ + BUTTON_ENTER, # Load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_ENTER, # Sign to QR code + BUTTON_ENTER, # Check QR code + ], + "signmessage m/49'/0h/0H/0/3 ascii:a test message with a colon ':' character.", + None, + False, + "a test message with a colon ':' character.", + "3. 38Cahk..EAN", + "HyH8898c2S6eF8hTPGhRqLC6UQrJrhw/fdguBeFG0cCrOFkbG8TCVURXOgxXaEV93vrFlHyxNGEvL10IcsLtvvI=", + ), + ( # 5 - Sign P2WPKH Mainnet - Save to SD card + [ + BUTTON_ENTER, # Confirm load from camera + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_PAGE, # Sign to SD card + BUTTON_ENTER, # Confirm sign to SD card + # BUTTON_PAGE_PREV, # Move to Go + BUTTON_ENTER, # Go + ], + "signmessage m/84'/0h/0H/0/3 ascii:A test message.", + None, + True, # Sign to SD + "A test message.", + "3. bc1qgl..cn3", + "IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=", + ), + ( # 6 - Sign P2WPKH Mainnet - Load from and save to SD card + [ + BUTTON_PAGE, # Load from SD card + BUTTON_ENTER, # Confirm load from SD card + BUTTON_ENTER, # Choose file "signmessage.txt" + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Confirm to sign message + BUTTON_ENTER, # Check signature + BUTTON_PAGE, # Sign to SD card + BUTTON_ENTER, # Confirm sign to SD card + BUTTON_PAGE_PREV, # Move to Go + BUTTON_ENTER, # Go + ], + None, + "A test message.\nm/84'/0h/0H/0/3\nP2WPKH", + True, # Sign to SD + "A test message.", + "3. bc1qgl..cn3", + "IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=", + ), ] - wallet = Wallet(tdata.SINGLESIG_SIGNING_KEY) - ctx = create_ctx(mocker, BTN_SEQUENCE, wallet) - mocker.patch.object(ctx.display, "width", new=lambda: 135) - message_signer = SignMessage(ctx) - mocker.spy(message_signer, "display_qr_codes") + case_count = 0 + for case in cases: + print("Case: ", case_count) + # A mainnet wallet + wallet = Wallet(tdata.SINGLESIG_SIGNING_KEY) + ctx = create_ctx(mocker, case[0], wallet) + mocker.patch.object(ctx.display, "width", new=lambda: 135) + message_signer = SignMessage(ctx) - mocker.patch.object( - QRCodeCapture, - "qr_capture_loop", - new=lambda self: ( - "signmessage m/84h/1h/0h/0/3 ascii:a test message with a colon ':' character.", - FORMAT_NONE, - ), - ) - qr_capturer = mocker.spy(QRCodeCapture, "qr_capture_loop") - message_signer.sign_message() + if case[1]: + mocker.spy(message_signer, "display_qr_codes") + mocker.patch.object( + QRCodeCapture, + "qr_capture_loop", + new=lambda self: ( + case[1], + FORMAT_NONE, + ), + ) + qr_capturer = mocker.spy(QRCodeCapture, "qr_capture_loop") + mocker.patch.object(message_signer, "has_sd_card", new=lambda: True) + if case[2]: # Load from SD card + mocker.patch.object( + message_signer, "load_file", return_value=("signmessage.txt", case[2]) + ) - qr_capturer.assert_called_once() - ctx.display.draw_hcentered_text.assert_has_calls( - [mocker.call("Message:", 10, theme.highlight_color)] - ) - ctx.display.draw_hcentered_text.assert_has_calls( - [ - mocker.call( - "a test message with a colon ':' character.", mocker.ANY, max_lines=10 + message_signer.sign_message() + + qr_capturer.assert_called_once() + ctx.display.draw_hcentered_text.assert_has_calls( + [mocker.call("Message:", 10, theme.highlight_color)] + ) + ctx.display.draw_hcentered_text.assert_has_calls( + [mocker.call(case[4], mocker.ANY, max_lines=10)] + ) + ctx.display.draw_hcentered_text.assert_has_calls( + [mocker.call("Address:", mocker.ANY, theme.highlight_color)] + ) + ctx.display.draw_hcentered_text.assert_has_calls( + [mocker.call(case[5], mocker.ANY)], + ) + if not case[3]: + message_signer.display_qr_codes.assert_called_once_with( + case[6], + 0, + "Signed Message", ) - ] - ) - ctx.display.draw_hcentered_text.assert_has_calls( - [mocker.call("Address:", mocker.ANY, theme.highlight_color)] - ) - ctx.display.draw_hcentered_text.assert_has_calls( - [mocker.call("3. bc1qgl..cn3", mocker.ANY)], - ) - message_signer.display_qr_codes.assert_called_once_with( - "IHx1+DGW83eZZpV8rOT/9l/yUYa2ncmCr/Mnq7XBJmmyFCUWKceHZQqUZAk60XuwlBox3d3hAa4FU59AXOjbALo=", - 0, - "Signed Message", - ) + case_count += 1 diff --git a/tests/pages/test_settings_page.py b/tests/pages/test_settings_page.py index e6f70fad..73cbbabc 100644 --- a/tests/pages/test_settings_page.py +++ b/tests/pages/test_settings_page.py @@ -17,11 +17,10 @@ def test_settings_m5stickv(m5stickv, mocker, mocker_printer): from krux.pages.settings_page import SettingsPage from krux.input import BUTTON_ENTER, BUTTON_PAGE, BUTTON_PAGE_PREV from krux.krux_settings import Settings, CategorySetting, NumberSetting - from krux.translations import translation_table + from krux.translations import available_languages - tlist = list(translation_table) - index_pt = tlist.index("pt-BR") - index_next = (index_pt + 1) % (len(tlist)) + index_pt = available_languages.index("pt-BR") + index_next = (index_pt + 1) % (len(available_languages)) cases = [ ( # 0 - Change Network @@ -83,7 +82,7 @@ def test_settings_m5stickv(m5stickv, mocker, mocker_printer): BUTTON_PAGE, BUTTON_ENTER, ), - lambda: Settings().i18n.locale == tlist[index_next], + lambda: Settings().i18n.locale == available_languages[index_next], ), ( # 3 Printer numeric settings ( @@ -186,17 +185,25 @@ def test_settings_on_amigo_tft(amigo, mocker, mocker_printer): import krux from krux.pages.settings_page import SettingsPage from krux.input import BUTTON_TOUCH - from krux.krux_settings import Settings, CategorySetting, NumberSetting - from krux.translations import translation_table - from krux.themes import WHITE, RED, GREEN, ORANGE - - tlist = list(translation_table) - index_pt = tlist.index("pt-BR") - index_next = (index_pt + 1) % (len(tlist)) - text_pt = translation_table[tlist[index_pt]][1177338798] + "\n" + tlist[index_pt] - text_next = ( - translation_table[tlist[index_next]][1177338798] + "\n" + tlist[index_next] - ) + from krux.krux_settings import Settings, CategorySetting + from krux.translations import available_languages, ref_array + from krux.translations.pt import translation_array as br_array + from krux.themes import WHITE, GREEN, ORANGE + + index_pt = available_languages.index("pt-BR") + index_next = (index_pt + 1) % (len(available_languages)) + slug_index = ref_array.index(1177338798) + text_pt = br_array[slug_index] + "\n" + available_languages[index_pt] + + # Get translations for the next language + next_language = available_languages[index_next] + # Construct the path to the nested module + next_module_path = f"krux.translations.{next_language[:2]}" + # Import the top-level module (krux) + next_trans_module = __import__(next_module_path, fromlist=[""]) + # Access the translation_array variable from the nested module + next_trans_array = getattr(next_trans_module, "translation_array") + text_next = next_trans_array[slug_index] + "\n" + available_languages[index_next] PREV_INDEX = 0 GO_INDEX = 1 @@ -272,7 +279,7 @@ def test_settings_on_amigo_tft(amigo, mocker, mocker_printer): mocker.call(text_pt, WHITE), mocker.call(text_next, WHITE), ], - lambda: Settings().i18n.locale == tlist[index_next], + lambda: Settings().i18n.locale == available_languages[index_next], CategorySetting, ), ] diff --git a/tests/test_camera.py b/tests/test_camera.py index 52229c2b..a8c8fc78 100644 --- a/tests/test_camera.py +++ b/tests/test_camera.py @@ -43,6 +43,67 @@ def test_initialize_sensors(mocker, m5stickv): ) +def test_fail_to_initialize_sensor(mocker, m5stickv): + from krux.camera import Camera + + # Mock sensor.reset to raise an exception + mocker.patch("sensor.reset", side_effect=Exception) + c = Camera() + with pytest.raises(Exception): + c.initialize_sensor() + assert c.mode == None + + +def test_initialize_run_no_sensor(mocker, m5stickv): + from krux.camera import Camera + + mocker.patch("sensor.reset", side_effect=Exception) + c = Camera() + try: + # Fails to initialize at boot + c.initialize_sensor() + except: + pass + with pytest.raises(ValueError, match="No camera found"): + c.initialize_run() + assert c.mode == None + + +def test_initialize_run(mocker, m5stickv): + from krux.camera import Camera, COLOR_MODE + + c = Camera() + c.initialize_sensor() + c.initialize_run() + assert c.mode == COLOR_MODE + assert c.cam_id is not None + assert c.antiglare_enabled == False + + +def test_initialize_run_from_grayscale(mocker, m5stickv): + from krux.camera import Camera, COLOR_MODE, GRAYSCALE_MODE + + c = Camera() + c.initialize_sensor() + c.mode = GRAYSCALE_MODE + c.initialize_run() + assert c.mode == COLOR_MODE + assert c.cam_id is not None + assert c.antiglare_enabled == False + + +def test_initialize_run_with_anti_glair_enabled(mocker, m5stickv): + from krux.camera import Camera, COLOR_MODE, GRAYSCALE_MODE + + c = Camera() + c.initialize_sensor() + c.antiglare_enabled = True + c.initialize_run() + assert c.mode == COLOR_MODE + assert c.cam_id is not None + assert c.antiglare_enabled == False + + def test_toggle_antiglare(mocker, m5stickv): import krux from krux.camera import Camera, OV7740_ID, OV2640_ID, GC0328_ID, GC2145_ID diff --git a/tests/test_i18n.py b/tests/test_i18n.py index 431d7cb2..898ffbe9 100644 --- a/tests/test_i18n.py +++ b/tests/test_i18n.py @@ -1,39 +1,30 @@ import pytest -@pytest.fixture -def tdata(mocker): +def test_translations(mocker, m5stickv): + from krux.krux_settings import t, locale_control + from krux.translations import available_languages, ref_array import binascii - return [ - {"en-US": {binascii.crc32("Hello world".encode("utf-8")): "Hello"}}, - {"es-MX": {binascii.crc32("Hello world".encode("utf-8")): "Hola"}}, - ] - - -def test_translations(mocker, m5stickv, tdata): - import binascii - from krux.krux_settings import translations - - cases = [ - (tdata[0], {binascii.crc32("Hello world".encode("utf-8")): "Hello"}), - (tdata[1], None), - ] - for case in cases: - mocker.patch("krux.krux_settings.translation_table", case[0]) - lookup = translations("en-US") - - assert lookup == case[1] - - -def test_t(mocker, m5stickv, tdata): - from krux.krux_settings import t - - cases = [ - (tdata[0], "Hello world", "Hello"), - (tdata[1], "Hello world", "Hello world"), - ] - for case in cases: - mocker.patch("krux.krux_settings.translation_table", case[0]) - - assert t(case[1]) == case[2] + # Test default language + assert t("Load Mnemonic") == "Load Mnemonic" + + # Test pt_BR + locale_control.load_locale("pt_BR") + assert t("Load Mnemonic") == "Carregar Mnemônico" + + # Test non existent slug + assert t("New Text") == "New Text" + + # Cross-check available languages reference files + crc32_index = binascii.crc32("Load Mnemonic".encode("utf-8")) + reference_index = ref_array.index(crc32_index) + for lang in available_languages: + # Construct the path to the nested module + lang_module_path = f"krux.translations.{lang[:2]}" + # Import the top-level module (krux) + lang_trans_module = __import__(lang_module_path, fromlist=[""]) + # Access the translation_array variable from the nested module + lang_trans_array = getattr(lang_trans_module, "translation_array") + locale_control.load_locale(lang) + assert t("Load Mnemonic") == lang_trans_array[reference_index]