WIP - firmware translations

WIP - refactor and extend font generation for non-ascii characters

WIP - add czech characters mapping between UTF8 value and index

WIP - regenerate font files with czech characters

WIP - shorten czech button text, it was causing SHUTDOWN for some reason

WIP - support UTF8 characters in fonts.c

WIP - account for translation in tests

WIP - small fixes

WIP - fix last test

WIP - support UTF8 also in Rust font operations

WIP - add a script to find non-translated english strings in micropython code

WIP - add a validator script for checking missing micropython translations

WIP - translate remaining altcoins and other apps in core (fido, sdcard, TT layouts, ...)

WIP - generate czech glyphs for TT fonts

WIP - modify gen_font.py to account for negative bearing czech characters

WIP - extend translation validation scripts, move them into core/tools

WIP - translate TT layouts in Rust

WIP - fix tests

WIP - fix inverse coloring of nonprintable glyph

WIP - add build and test pipelines for Czech language

WIP - merge both JSON files together

WIP - run new isort

WIP - unify all the translation in Rust, expose to micropython

TEMP - leave en_merged.json file, so it is accessible by translators with old link

WIP - fixes

WIP - add french characters and translation via Google Translator

WIP - skip rustfmt in mako-created files

WIP - revert all the font height changes causing false-positive UI diff

WIP - fixes after rebase

WIP - fix broken translations

WIP - revert some wording changes causing UI diff

WIP - improve validation and translate scripts, translate missing strings

WIP - sort all keys alphabetically

WIP - remove any usage of translation in bootloader

WIP - add newline at the end of JSON file

WIP - fix bitcoin-only strings check

WIP - fix python support check

WIP - add some missing translations

WIP - fix SD card device test

WIP - fix pystyle

WIP - fix rust unittests

WIP - fix click tests

WIP - flag errors in french translations

WIP - add script transferring translations data into a byte blob

WIP - regenerate fr.rs

WIP - store and read language translations from flash

WIP - storing language name in storage

WIP - sending language_data in apply_settings protobuf message

WIP - separate protobuf message for translations, fixes

WIP - set up translations area for TT as well

WIP - get rid of TREZOR_LANG env variable during build

WIP - make the firmware buildable for TT

WIP - add basic device tests

WIP - set language for tests

WIP - counting with language when writing fixtures

WIP - add todos

WIP - fix CI

WIP - unify translations, make titles CAPITAL

WIP - translate missing english

WIP - skip translations messages for T1

WIP - not changing tests names for english

WIP - fix flake8

WIP - no test language setting for T1

WIP - clippy lint about complex data type

WIP - fix some english UI diff for TR

WIP - fix cstyle

WIP - minimize the usage of #[cfg(feature = "micropython")] outside translations module

WIP - minimize TT's UI diff

WIP - fix ruststyle

WIP - fix TR build

WIP - advanced Shamir text change

WIP - storing the language name as the first item in the translation data

WIP - modify and extend tests after storing language name

WIP - modify checklist sentence

WIP - add TEST_LANG into Makefile for all the emu tests

WIP - default arguments

WIP - reimplement default arguments

remove unneeded pub from get_info function

WIP - Rust handling of object attributes lookups from upy - thanks Matejcik!

WIP - generate mock interface for attribute-based translations lookups

WIP - change function calls to object attributes

WIP - symbolic link for unix/translations.c

WIP - fix and improve the reading of translations - thanks Matejcik!

WIP - add support for multiple languages in removing missing tests

WIP - fix multiple-accounts warning in tests

WIP - fix encoding of newlines in translations

WIP - fix czech tutorial text

WIP - fix czech click tests

WIP - do not translate wire error messages

WIP - add language options to click tests as well

WIP - setup czech device tests in CI

WIP - setup czech click tests in CI

WIP - record czech device tests for TR

WIP - record czech click tests for TR

WIP - record czech device tests for TT

WIP - record czech click tests for TT

WIP - pystyle

WIP - cstyle

WIP - fix Rust micropython import dependency

WIP - fix czech recordings

WIP - support french translations in tests

WIP - shorten some french words to fix the tests

WIP - fix micropython cfg compilation

WIP - record french click tests for TR

WIP - record french device tests for TR

WIP - record french device tests for TT

WIP - record french click tests for TT

WIP - fix french translations - shorten them

WIP - translate missing french words

WIP - fix click tests

WIP - add french tests into CI

WIP - pystyle

WIP - allow for czech/french tests in update script

WIP - update czech fixtures

WIP - update french fixtures

WIP - ruststyle

WIP - disallow MPU to run it on hardware

WIP - cstyle

WIP - change translations delimiter from * to \x00

WIP - change translations protobufs

WIP - remove language handling from storage

WIP - add header into JSON files

WIP - count with header in translations blob

WIP - yml style fixes

WIP - fix proto gen

WIP - verify version and data hash

WIP - fix loading test translations

feat(core): allow access to translations area in firmware

[no changelog]

WIP - fixes after rebase

WIP - increase the TT's translations area to 3 sectors

WIP - dynamically read the maximum translations size

WIP - record non-english tests from CI

WIP - loading font data from translations blob

WIP - bump translations version

WIP - include czech and french glyph data

WIP - whitelist another negative-bearing glyph

WIP - remove czech/french glyphs from common font files

WIP - fix language tests

WIP - specific fonts for specific models

WIP - revert the non-ascii font hardcoding

WIP - include missing BIG font into nonprintable logic

WIP - minor Rust code improvements

WIP - include newlines at the end of json files

WIP - move glyph Rust function to librust_fonts.h

WIP - add all fonts into translations file

WIP - move fonts into its own dir

WIP - reflect separate dir for fonts

WIP - not putting translations trezorhal into bootloader

WIP - write and read multiple fonts into translations data

WIP - silence pyright issue/notissue

WIP - delete no more used translations/*.py imports

WIP - fix bootloader builds by introducing translations feature and TRANSLATIONS flag

WIP - fix TT's bootloader Rust build

WIP - fix tests in non-english languages

WIP - not search for UTF-8 when there are no translations data

WIP - add colons to strings where missing

WIP - fix language loading in tests

WIP - fix signmessage input flow to work in all languages

WIP - create offset table for translation strings

WIP - code improvements

WIP - record foreign language fixtures + sync with main in english

WIP - do alignment check before reading u16 data

WIP - allocate blob in RAM for translations data

WIP - add TODO for blob generation

WIP - record non-english device tests

WIP - use bytes.align_to instead of messing with pointers

WIP - fixtures

WIP - remove unused import

WIP - add order.py

WIP - add order.json

WIP - take order.json into account in creating general.rs

WIP - take order.json into account in generating the blob

WIP - style

WIP - sort the language files

WIP - remove unused file

WIP - code improvements

WIP - add TODO for homescreen notification

WIP - translate plural forms

WIP - translate time intervals

WIP - sign translations with dev keys, validate signatures, improve robustness

WIP - improve tests for translations

WIP - add `trezorctl utils sign-translations` for production signing of the blob

WIP - pyright fix

WIP - changing TR progress loader offset - it was colliding with title

WIP - show indeterminate loader when loading translations data

WIP - record new and updated language tests

WIP - show the change language title/prompt in the target language

WIP - sort keys

WIP - add crowdin-cli into shell.nix

WIP - add crowdin sync script

WIP - bump translations version to 2.6.5

WIP - fix pyright

WIP - self-code-review ... C

WIP - self-code-review ... Rust

WIP - self-code-review ... python

WIP - translate Solana

WIP - improve translation string names

WIP - fix pystyle

WIP - fix TR bootloader build

WIP - fix typo in wrong_derivation_path

WIP - add french professional translations

WIP - clean extra and non-code characters from french

WIP - move the newly translated FR to new structure, mark missing strings

WIP - change TODO:missing to Google translated + (TODO)

WIP - regenerate french strings in Rust

WIP - add german and spanish JSONs

WIP - normalize and translate missing German and Spanish

WIP - script for generating all the device/click tests for models/languages

WIP - generate the device/click tests for existing languages

WIP - add german and spanish into CI test languages

WIP - regenerate jobs.md

WIP - improve language tests, simplify for more languages, add german and spanish

WIP - add spanish and german special chars

WIP - add german char into negative bearing

WIP - add german and spanish fonts

WIP - fix non-ascii header strings

WIP - remove unused rust language files

WIP - improve translation tool

WIP - add script to flatten JSON files

WIP - fix derivation path typo

WIP - flatten JSON files

WIP - fixes after JSON flattening

WIP - fix cstyle

WIP - reflect flat JSON in tests

WIP - improve the stability of multilanguage tests

WIP - fix yaml lint

WIP - fix python support check

WIP - improve the CI script

WIP - fix device tests

WIP - revert TR loader placement

WIP - fix address and colon issues
grdddj 10 months ago
parent 6331076444
commit c554c9d6e0

@ -144,6 +144,6 @@ vendorheader: ## generate vendor header
vendorheader_check: ## check that vendor header is up to date
./core/embed/vendorheader/generate.sh --quiet --check
gen: mocks icons templates protobuf ci_docs vendorheader solana_templates ## regenerate auto-generated files from sources
gen: templates mocks icons protobuf ci_docs vendorheader solana ## regenerate auto-generated files from sources
gen_check: mocks_check icons_check templates_check protobuf_check ci_docs_check vendorheader_check solana_templates_check ## check validity of auto-generated files
gen_check: templates_check mocks_check icons_check protobuf_check ci_docs_check vendorheader_check solana_templates_check ## check validity of auto-generated files

@ -0,0 +1,163 @@
from __future__ import annotations
import re
from dataclasses import dataclass
from pathlib import Path
from typing import Callable
HERE = Path(__file__).resolve().parent
TEST_FILE = HERE / "test.yml"
LANGS = {
"en": "english",
"cs": "czech",
"fr": "french",
"de": "german",
"es": "spanish",
}
MODELS = ["T", "R"]
@dataclass
class Replacement:
start: str
end: str
replacement: str
def replace_content_between_markers(
file_path: Path | str, replacements: list[Replacement]
) -> None:
with open(file_path, "r") as file:
content = file.read()
for replace in replacements:
pattern = rf"({replace.start}.*?{replace.end})"
content = re.sub(
pattern,
f"{replace.start}\n{replace.replacement}\n{replace.end}",
content,
flags=re.DOTALL,
)
with open(file_path, "w") as file:
file.write(content)
def get_device_test(lang: str, model: str) -> str:
lang_long = LANGS[lang]
model_or_empty = f" {model}" if model != "T" else ""
lang_long_or_empty = f" {lang_long}" if lang != "en" else ""
model_needs_or_empty = f" {model}" if model != "T" else ""
return f"""\
core device{model_or_empty} test{lang_long_or_empty}:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen{model_needs_or_empty} debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "{model}"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "{lang}" # {lang_long}
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
"""
def get_click_test(lang: str, model: str) -> str:
lang_long = LANGS[lang]
model_or_empty = f" {model}" if model != "T" else ""
lang_long_or_empty = f" {lang_long}" if lang != "en" else ""
model_needs_or_empty = f" {model}" if model != "T" else ""
return f"""\
core click{model_or_empty} test{lang_long_or_empty}:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen{model_needs_or_empty} debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "{model}"
TEST_LANG: "{lang}" # {lang_long}
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
"""
def get_all_tests_text(func: Callable[[str, str], str]) -> str:
text = ""
for model in MODELS:
for lang in LANGS:
content = func(lang, model)
text += content + "\n"
return text
def fill_device_tests() -> None:
replacement = Replacement(
start=r"##START_DEVICE_TESTS",
end=r"##END_DEVICE_TESTS",
replacement=get_all_tests_text(get_device_test),
)
replace_content_between_markers(TEST_FILE, [replacement])
def fill_click_tests() -> None:
replacement = Replacement(
start=r"##START_CLICK_TESTS",
end=r"##END_CLICK_TESTS",
replacement=get_all_tests_text(get_click_test),
)
replace_content_between_markers(TEST_FILE, [replacement])
if __name__ == "__main__":
fill_device_tests()
fill_click_tests()

@ -97,6 +97,7 @@ stdenvNoCC.mkDerivation ({
bash
bloaty # for binsize
check
crowdin-cli # for translations
curl # for connect tests
editorconfig-checker
gcc-arm-embedded

@ -51,14 +51,150 @@ core unit asan test:
# with the expected UI result.
# See artifacts for a comprehensive report of UI.
# See [docs/tests/ui-tests](../tests/ui-tests.md) for more info.
##START_DEVICE_TESTS
core device test:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: 1 # so that we get coverage data
MULTICORE: 4 # more could interfere with other jobs
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "en" # english
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device test czech:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "cs" # czech
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device test french:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "fr" # french
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device test german:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "de" # german
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device test spanish:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "es" # spanish
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
@ -88,9 +224,10 @@ core device R test:
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1"
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
MULTICORE: 4 # more could interfere with other jobs
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "en" # english
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
@ -114,6 +251,141 @@ core device R test:
reports:
junit: tests/junit.xml
core device R test czech:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "cs" # czech
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device R test french:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "fr" # french
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device R test german:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "de" # german
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
core device R test spanish:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
MULTICORE: "4" # more could interfere with other jobs
TEST_LANG: "es" # spanish
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_ui_multicore | ts -s"
after_script:
- mv core/src/.coverage.* core # there will be more coverage files (one per core)
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/junit.xml
- tests/trezor.log
- core/.coverage.*
when: always
expire_in: 1 week
reports:
junit: tests/junit.xml
##END_DEVICE_TESTS
core device asan test:
stage: test
<<: *gitlab_caching
@ -297,13 +569,145 @@ core fido2 asan test:
# Click tests - UI.
# See [docs/tests/click-tests](../tests/click-tests.md) for more info.
##START_CLICK_TESTS
core click test:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: 1
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
TEST_LANG: "en" # english
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click test czech:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
TEST_LANG: "cs" # czech
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click test french:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
TEST_LANG: "fr" # french
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click test german:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
TEST_LANG: "de" # german
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click test spanish:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "T"
TEST_LANG: "es" # spanish
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
@ -327,21 +731,53 @@ core click test:
expire_in: 1 week
when: always
# Click tests.
# See [docs/tests/click-tests](../tests/click-tests.md) for more info.
core click R test:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: 1
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
TEST_LANG: "en" # english
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click R test czech:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
TEST_LANG: "cs" # czech
script:
- nix-shell --run "poetry run make -C core test_emu_click_ui | ts -s"
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- nix-shell --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
@ -353,11 +789,111 @@ core click R test:
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click R test french:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
TEST_LANG: "fr" # french
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click R test german:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
TEST_LANG: "de" # german
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
core click R test spanish:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen R debug build
variables:
TREZOR_PROFILING: "1" # so that we get coverage data
TREZOR_MODEL: "R"
TEST_LANG: "es" # spanish
script:
- $NIX_SHELL --run "poetry run make -C core test_emu_click_ui | ts -s"
after_script:
- mv core/src/.coverage core/.coverage.test_click
- mv tests/ui_tests/reports/test/ test_ui_report
- $NIX_SHELL --run "poetry run python ci/prepare_ui_artifacts.py | ts -s"
- diff -u tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- ci/ui_test_records/
- test_ui_report
- tests/ui_tests/screens/
- tests/ui_tests/fixtures.suggestion.json
- tests/ui_tests/fixtures.results.json
- tests/trezor.log
- tests/junit.xml
- core/.coverage.*
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
##END_CLICK_TESTS
core click asan test:
stage: test
<<: *gitlab_caching

@ -161,7 +161,7 @@ message EndSession {
}
/**
* Request: change language and/or label of the device
* Request: change some property of the device, e.g. label or homescreen
* @start
* @next Success
* @next Failure
@ -180,6 +180,37 @@ message ApplySettings {
optional bool hide_passphrase_from_host = 11; // do not show passphrase coming from host
}
/**
* Request: change the device language via translation data.
* Does not send the translation data itself, as they are too large for one message.
* Device will request the translation data in chunks.
* @start
* @next TranslationDataRequest
* @next Failure
*/
message ChangeLanguage {
required uint32 data_length = 1; // byte length of the whole translation blob (set to 0 for default language - english)
}
/**
* Response: Device asks for more data from transaction payload.
* @end
* @next TranslationDataAck
*/
message TranslationDataRequest {
required uint32 data_length = 1; // Number of bytes being requested
required uint32 data_offset = 2; // Offset of the first byte being requested
}
/**
* Request: Translation payload data.
* @next TranslationDataRequest
* @next Success
*/
message TranslationDataAck {
required bytes data_chunk = 1; // Bytes from translation payload
}
/**
* Request: set flags of the device
* @start

@ -124,6 +124,9 @@ enum MessageType {
MessageType_UnlockBootloader = 96 [(bitcoin_only) = true, (wire_in) = true];
MessageType_AuthenticateDevice = 97 [(bitcoin_only) = true, (wire_out) = true];
MessageType_AuthenticityProof = 98 [(bitcoin_only) = true, (wire_in) = true];
MessageType_ChangeLanguage = 990 [(bitcoin_only) = true, (wire_in) = true];
MessageType_TranslationDataRequest = 991 [(bitcoin_only) = true, (wire_out) = true];
MessageType_TranslationDataAck = 992 [(bitcoin_only) = true, (wire_in) = true];
MessageType_SetU2FCounter = 63 [(wire_in) = true];
MessageType_GetNextU2FCounter = 80 [(wire_in) = true];

@ -116,6 +116,10 @@ def ascii_filter(s: str) -> str:
return re.sub("[^ -\x7e]", "_", s)
def utf8_str_filter(s: str) -> str:
return '"' + repr(s)[1:-1] + '"'
def make_support_filter(
support_info: SupportInfo,
) -> Callable[[str, Coins], Iterator[Coin]]:
@ -126,6 +130,7 @@ def make_support_filter(
MAKO_FILTERS = {
"utf8_str": utf8_str_filter,
"c_str": c_str_filter,
"ascii": ascii_filter,
"black_repr": black_repr_filter,

@ -29,6 +29,7 @@ TREZOR_MEMPERF ?= 0
ADDRESS_SANITIZER ?= 0
CMAKELISTS ?= 0
PYTEST_TIMEOUT ?= 400
TEST_LANG ?= "en"
# OpenOCD interface default. Alternative: ftdi/olimex-arm-usb-tiny-h
OPENOCD_INTERFACE ?= stlink
@ -95,11 +96,12 @@ test_rust: ## run rs unit tests
-- --test-threads=1 --nocapture
test_emu: ## run selected device tests from python-trezor
$(EMU_TEST) $(PYTEST) $(TESTPATH)/device_tests $(TESTOPTS)
$(EMU_TEST) $(PYTEST) $(TESTPATH)/device_tests $(TESTOPTS) --lang=$(TEST_LANG)
test_emu_multicore: ## run device tests using multiple cores
$(PYTEST) -n $(MULTICORE) $(TESTPATH)/device_tests $(TESTOPTS) --timeout $(PYTEST_TIMEOUT) \
--control-emulators --model=core --random-order-seed=$(shell echo $$RANDOM)
--control-emulators --model=core --random-order-seed=$(shell echo $$RANDOM) \
--lang=$(TEST_LANG)
test_emu_monero: ## run selected monero device tests from monero-agent
cd tests ; $(EMU_TEST) ./run_tests_device_emu_monero.sh $(TESTOPTS)
@ -113,31 +115,33 @@ test_emu_fido2: ## run fido2 device tests
$(EMU_TEST) --slip0014 $(PYTEST) --maxfail=5 --sim tests/standard/ --vendor trezor $(TESTOPTS)
test_emu_click: ## run click tests
$(EMU_TEST) $(PYTEST) $(TESTPATH)/click_tests $(TESTOPTS)
$(EMU_TEST) $(PYTEST) $(TESTPATH)/click_tests $(TESTOPTS) --lang=$(TEST_LANG)
test_emu_click_ui: ## run click tests with UI testing
$(EMU_TEST) $(PYTEST) $(TESTPATH)/click_tests $(TESTOPTS) \
--ui=test --ui-check-missing --do-master-diff
--ui=test --ui-check-missing --do-master-diff --lang=$(TEST_LANG)
test_emu_persistence: ## run persistence tests
$(PYTEST) $(TESTPATH)/persistence_tests $(TESTOPTS)
$(PYTEST) $(TESTPATH)/persistence_tests $(TESTOPTS) --lang=$(TEST_LANG)
test_emu_persistence_ui: ## run persistence tests with UI testing
$(PYTEST) $(TESTPATH)/persistence_tests $(TESTOPTS) \
--ui=test --ui-check-missing --do-master-diff
--ui=test --ui-check-missing --do-master-diff --lang=$(TEST_LANG)
test_emu_ui: ## run ui integration tests
$(EMU_TEST) $(PYTEST) $(TESTPATH)/device_tests $(TESTOPTS) \
--ui=test --ui-check-missing --record-text-layout --do-master-diff
--ui=test --ui-check-missing --record-text-layout --do-master-diff \
--lang=$(TEST_LANG)
test_emu_ui_multicore: ## run ui integration tests using multiple cores
$(PYTEST) -n $(MULTICORE) $(TESTPATH)/device_tests $(TESTOPTS) --timeout $(PYTEST_TIMEOUT) \
--ui=test --ui-check-missing --record-text-layout --do-master-diff \
--control-emulators --model=core --random-order-seed=$(shell echo $$RANDOM)
--control-emulators --model=core --random-order-seed=$(shell echo $$RANDOM) \
--lang=$(TEST_LANG)
test_emu_ui_record: ## record and hash screens for ui integration tests
$(EMU_TEST) $(PYTEST) $(TESTPATH)/device_tests $(TESTOPTS) \
--ui=record --ui-check-missing --do-master-diff
--ui=record --ui-check-missing --do-master-diff --lang=$(TEST_LANG)
test_emu_ui_record_multicore: ## quickly record all screens
make test_emu_ui_multicore || echo "All errors are recorded in fixtures.json"

@ -204,6 +204,7 @@ SOURCE_MOD += [
CPPDEFINES_MOD += [
'TREZOR_UI2',
'TRANSLATIONS',
]
if TREZOR_MODEL not in ('1', ):
@ -715,6 +716,7 @@ def cargo_build():
if BITCOIN_ONLY == '1':
features.append('bitcoin_only')
features.append('ui')
features.append('translations')
if PYOPT == '0':
features.append('ui_debug')

@ -219,6 +219,7 @@ elif TREZOR_MODEL in ('R', ):
CPPDEFINES_MOD += [
'TREZOR_UI2',
'TRANSLATIONS',
]
if TREZOR_MODEL not in ('1', ):
CPPDEFINES_MOD += [
@ -372,6 +373,7 @@ SOURCE_MICROPYTHON = [
]
SOURCE_UNIX = [
'embed/trezorhal/unix/translations.c',
'embed/trezorhal/unix/common.c',
'embed/trezorhal/unix/display-unix.c',
'embed/trezorhal/unix/flash.c',
@ -793,6 +795,7 @@ def cargo_build():
if BITCOIN_ONLY == '1':
features.append('bitcoin_only')
features.append('ui')
features.append('translations')
if PYOPT == '0':
features.append('debug')
if DMA2D:

@ -26,10 +26,12 @@
#if MICROPY_PY_TREZORCONFIG
#include "embed/extmod/trezorobj.h"
#include "embed/trezorhal/translations.h"
#include "common.h"
#include "memzero.h"
#include "storage.h"
#include "translations.h"
static secbool wrapped_ui_wait_callback(uint32_t wait, uint32_t progress,
const char *message) {
@ -311,6 +313,52 @@ STATIC mp_obj_t mod_trezorconfig_set(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_obj, 3, 4,
mod_trezorconfig_set);
/// def translations_set(blob: bytes, offset: int) -> None:
/// """
/// Save translations data at the certain offset.
/// """
STATIC mp_obj_t mod_trezorconfig_translations_set(mp_obj_t blob,
mp_obj_t offset) {
mp_buffer_info_t blob_b = {0};
blob_b.buf = NULL;
if (blob != mp_const_none) {
mp_get_buffer_raise(blob, &blob_b, MP_BUFFER_READ);
}
if (blob_b.len > translations_area_bytesize()) {
mp_raise_msg(&mp_type_RuntimeError, "Translations data blob too big");
}
uint32_t off = trezor_obj_get_uint(offset);
if (off + blob_b.len > translations_area_bytesize()) {
mp_raise_msg(&mp_type_RuntimeError, "Translations data cannot fit flash");
}
translations_write(blob_b.buf, off, blob_b.len);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_translations_set_obj,
mod_trezorconfig_translations_set);
/// def translations_wipe() -> None:
/// """
/// Wipe all the translations data before writing a new one.
/// """
STATIC mp_obj_t mod_trezorconfig_translations_wipe(void) {
translations_erase();
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_translations_wipe_obj,
mod_trezorconfig_translations_wipe);
/// def translations_max_bytesize() -> int:
/// """
/// How much is the maximum bytesize of translations data.
/// """
STATIC mp_obj_t mod_trezorconfig_translations_max_bytesize(void) {
uint32_t count = translations_area_bytesize();
return mp_obj_new_int_from_uint(count);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_translations_max_bytesize_obj,
mod_trezorconfig_translations_max_bytesize);
/// def delete(
/// app: int, key: int, public: bool = False, writable_locked: bool = False
/// ) -> bool:
@ -431,6 +479,12 @@ STATIC const mp_rom_map_elem_t mp_module_trezorconfig_globals_table[] = {
MP_ROM_PTR(&mod_trezorconfig_change_wipe_code_obj)},
{MP_ROM_QSTR(MP_QSTR_get), MP_ROM_PTR(&mod_trezorconfig_get_obj)},
{MP_ROM_QSTR(MP_QSTR_set), MP_ROM_PTR(&mod_trezorconfig_set_obj)},
{MP_ROM_QSTR(MP_QSTR_translations_set),
MP_ROM_PTR(&mod_trezorconfig_translations_set_obj)},
{MP_ROM_QSTR(MP_QSTR_translations_wipe),
MP_ROM_PTR(&mod_trezorconfig_translations_wipe_obj)},
{MP_ROM_QSTR(MP_QSTR_translations_max_bytesize),
MP_ROM_PTR(&mod_trezorconfig_translations_max_bytesize_obj)},
{MP_ROM_QSTR(MP_QSTR_delete), MP_ROM_PTR(&mod_trezorconfig_delete_obj)},
{MP_ROM_QSTR(MP_QSTR_set_counter),
MP_ROM_PTR(&mod_trezorconfig_set_counter_obj)},

@ -18,6 +18,7 @@
*/
#include "librust.h"
#include "librust_fonts.h"
#include "py/runtime.h"
#if MICROPY_PY_TREZORUI2
@ -27,3 +28,7 @@ MP_REGISTER_MODULE(MP_QSTR_trezorui2, mp_module_trezorui2);
#if MICROPY_PY_TREZORPROTO
MP_REGISTER_MODULE(MP_QSTR_trezorproto, mp_module_trezorproto);
#endif
#if MICROPY_PY_TREZORTRANSLATE
MP_REGISTER_MODULE(MP_QSTR_trezortranslate, mp_module_trezortranslate);
#endif

@ -163,6 +163,7 @@
#define MICROPY_PY_TREZORUI (1)
#define MICROPY_PY_TREZORUTILS (1)
#define MICROPY_PY_TREZORPROTO (1)
#define MICROPY_PY_TREZORTRANSLATE (1)
#define MICROPY_PY_TREZORUI2 (1)
#ifdef SYSTEM_VIEW

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_PixelOperator_Bold_8_glyph_125[] = { 5, 7, 6, 0, 7, 225, 140, 51, 27, 128 };
/* ~ */ static const uint8_t Font_PixelOperator_Bold_8_glyph_126[] = { 7, 2, 8, 0, 7, 119, 184 };
const uint8_t Font_PixelOperator_Bold_8_glyph_nonprintable[] = { 6, 7, 7, 0, 7, 132, 207, 57, 207, 252, 255 };
/* ? */ const uint8_t Font_PixelOperator_Bold_8_glyph_nonprintable[] = { 6, 7, 7, 0, 7, 132, 207, 57, 207, 252, 255 };
const uint8_t * const Font_PixelOperator_Bold_8[126 + 1 - 32] = {
Font_PixelOperator_Bold_8_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_PixelOperator_Regular_8_glyph_125[] = { 4, 7, 6, 0, 7, 194, 33, 34, 192 };
/* ~ */ static const uint8_t Font_PixelOperator_Regular_8_glyph_126[] = { 6, 2, 7, 0, 7, 102, 96 };
const uint8_t Font_PixelOperator_Regular_8_glyph_nonprintable[] = { 5, 7, 6, 0, 7, 139, 189, 221, 255, 127 };
/* ? */ const uint8_t Font_PixelOperator_Regular_8_glyph_nonprintable[] = { 5, 7, 6, 0, 7, 139, 189, 221, 255, 127 };
const uint8_t * const Font_PixelOperator_Regular_8[126 + 1 - 32] = {
Font_PixelOperator_Regular_8_glyph_32,

@ -105,7 +105,7 @@
/* } */ static const uint8_t Font_PixelOperatorMono_Regular_8_glyph_125[] = { 4, 7, 7, 0, 7, 194, 33, 34, 192 };
/* ~ */ static const uint8_t Font_PixelOperatorMono_Regular_8_glyph_126[] = { 6, 2, 7, 0, 7, 102, 96 };
const uint8_t Font_PixelOperatorMono_Regular_8_glyph_nonprintable[] = { 5, 7, 7, 0, 7, 139, 189, 221, 255, 127 };
/* ? */ const uint8_t Font_PixelOperatorMono_Regular_8_glyph_nonprintable[] = { 5, 7, 7, 0, 7, 139, 189, 221, 255, 127 };
const uint8_t * const Font_PixelOperatorMono_Regular_8[126 + 1 - 32] = {
Font_PixelOperatorMono_Regular_8_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_Roboto_Bold_20_glyph_125[] = { 7, 20, 7, 0, 16, 180, 3, 0, 0, 248, 79, 0, 0, 176, 239, 0, 0, 64, 255, 3, 0, 32, 255, 5, 0, 32, 255, 6, 0, 32, 255, 6, 0, 16, 255, 7, 0, 0, 252, 45, 0, 0, 210, 255, 2, 0, 210, 255, 2, 0, 252, 45, 0, 16, 255, 7, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 5, 0, 64, 255, 3, 0, 176, 239, 0, 0, 248, 79, 0, 0, 180, 3, 0, 0 };
/* ~ */ static const uint8_t Font_Roboto_Bold_20_glyph_126[] = { 11, 5, 13, 1, 8, 96, 254, 60, 0, 162, 9, 245, 255, 255, 6, 249, 12, 252, 108, 252, 255, 255, 6, 237, 3, 128, 255, 175, 0, 0, 0, 0, 65, 2, 0 };
const uint8_t Font_Roboto_Bold_20_glyph_nonprintable[] = { 10, 14, 10, 0, 14, 255, 40, 16, 163, 255, 79, 0, 0, 0, 247, 11, 16, 137, 0, 240, 8, 160, 255, 5, 192, 255, 255, 255, 4, 208, 255, 255, 175, 0, 243, 255, 255, 10, 16, 253, 255, 239, 0, 209, 255, 255, 143, 0, 251, 255, 255, 111, 16, 255, 255, 255, 255, 255, 255, 255, 255, 159, 65, 255, 255, 255, 47, 0, 252, 255, 255, 143, 64, 255, 255 };
/* ? */ const uint8_t Font_Roboto_Bold_20_glyph_nonprintable[] = { 10, 14, 10, 0, 14, 255, 40, 16, 163, 255, 79, 0, 0, 0, 247, 11, 16, 137, 0, 240, 8, 160, 255, 5, 192, 255, 255, 255, 4, 208, 255, 255, 175, 0, 243, 255, 255, 10, 16, 253, 255, 239, 0, 209, 255, 255, 143, 0, 251, 255, 255, 111, 16, 255, 255, 255, 255, 255, 255, 255, 255, 159, 65, 255, 255, 255, 47, 0, 252, 255, 255, 143, 64, 255, 255 };
const uint8_t * const Font_Roboto_Bold_20[126 + 1 - 32] = {
Font_Roboto_Bold_20_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_Roboto_Regular_20_glyph_125[] = { 7, 20, 7, 0, 16, 152, 1, 0, 0, 228, 29, 0, 0, 48, 159, 0, 0, 0, 238, 0, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 250, 2, 0, 0, 244, 27, 0, 0, 112, 255, 1, 0, 209, 143, 0, 0, 248, 5, 0, 0, 251, 1, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 222, 0, 0, 80, 143, 0, 0, 229, 29, 0, 0, 152, 1, 0, 0 };
/* ~ */ static const uint8_t Font_Roboto_Regular_20_glyph_126[] = { 12, 4, 14, 1, 8, 64, 253, 109, 0, 32, 59, 243, 173, 254, 43, 161, 31, 249, 1, 144, 255, 255, 7, 50, 0, 0, 115, 56, 0 };
const uint8_t Font_Roboto_Regular_20_glyph_nonprintable[] = { 9, 14, 9, 0, 14, 255, 57, 16, 213, 255, 111, 16, 69, 16, 254, 14, 242, 255, 8, 247, 125, 250, 255, 12, 245, 255, 255, 255, 10, 248, 255, 255, 239, 1, 254, 255, 255, 46, 160, 255, 255, 255, 3, 250, 255, 255, 191, 96, 255, 255, 255, 143, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 160, 255, 255, 255, 159, 160, 255, 255 };
/* ? */ const uint8_t Font_Roboto_Regular_20_glyph_nonprintable[] = { 9, 14, 9, 0, 14, 255, 57, 16, 213, 255, 111, 16, 69, 16, 254, 14, 242, 255, 8, 247, 125, 250, 255, 12, 245, 255, 255, 255, 10, 248, 255, 255, 239, 1, 254, 255, 255, 46, 160, 255, 255, 255, 3, 250, 255, 255, 191, 96, 255, 255, 255, 143, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 160, 255, 255, 255, 159, 160, 255, 255 };
const uint8_t * const Font_Roboto_Regular_20[126 + 1 - 32] = {
Font_Roboto_Regular_20_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_RobotoMono_Medium_20_glyph_125[] = { 7, 20, 12, 3, 16, 117, 1, 0, 0, 249, 30, 0, 0, 112, 175, 0, 0, 16, 255, 0, 0, 0, 255, 2, 0, 0, 255, 3, 0, 0, 255, 3, 0, 0, 254, 4, 0, 0, 248, 28, 0, 0, 144, 255, 11, 0, 144, 255, 10, 0, 248, 28, 0, 0, 254, 4, 0, 0, 255, 3, 0, 0, 255, 3, 0, 0, 255, 2, 0, 32, 255, 0, 0, 144, 159, 0, 0, 250, 29, 0, 0, 100, 0, 0, 0 };
/* ~ */ static const uint8_t Font_RobotoMono_Medium_20_glyph_126[] = { 12, 5, 12, 0, 8, 64, 237, 76, 0, 32, 22, 242, 255, 255, 8, 144, 63, 248, 6, 229, 239, 253, 14, 149, 0, 32, 251, 239, 3, 0, 0, 0, 16, 2, 0 };
const uint8_t Font_RobotoMono_Medium_20_glyph_nonprintable[] = { 10, 16, 12, 1, 15, 255, 207, 153, 251, 255, 239, 3, 0, 16, 250, 47, 0, 102, 2, 208, 12, 176, 255, 14, 128, 174, 250, 255, 47, 112, 255, 255, 255, 13, 160, 255, 255, 255, 3, 242, 255, 255, 79, 16, 253, 255, 255, 5, 209, 255, 255, 255, 0, 251, 255, 255, 255, 34, 254, 255, 255, 255, 255, 255, 255, 255, 255, 153, 255, 255, 255, 175, 0, 250, 255, 255, 207, 0, 253, 255, 255, 255, 255, 255, 255 };
/* ? */ const uint8_t Font_RobotoMono_Medium_20_glyph_nonprintable[] = { 10, 16, 12, 1, 15, 255, 207, 153, 251, 255, 239, 3, 0, 16, 250, 47, 0, 102, 2, 208, 12, 176, 255, 14, 128, 174, 250, 255, 47, 112, 255, 255, 255, 13, 160, 255, 255, 255, 3, 242, 255, 255, 79, 16, 253, 255, 255, 5, 209, 255, 255, 255, 0, 251, 255, 255, 255, 34, 254, 255, 255, 255, 255, 255, 255, 255, 255, 153, 255, 255, 255, 175, 0, 250, 255, 255, 207, 0, 253, 255, 255, 255, 255, 255, 255 };
const uint8_t * const Font_RobotoMono_Medium_20[126 + 1 - 32] = {
Font_RobotoMono_Medium_20_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_TTHoves_Bold_17_glyph_125[] = { 7, 17, 7, 0, 13, 65, 3, 0, 0, 246, 223, 1, 0, 246, 255, 10, 0, 16, 254, 13, 0, 0, 251, 13, 0, 0, 251, 13, 0, 0, 251, 14, 0, 0, 248, 207, 0, 0, 128, 255, 0, 0, 210, 255, 0, 0, 249, 127, 0, 0, 251, 14, 0, 0, 251, 13, 0, 0, 251, 13, 0, 81, 255, 12, 0, 246, 255, 8, 0, 246, 158, 0, 0 };
/* ~ */ static const uint8_t Font_TTHoves_Bold_17_glyph_126[] = { 10, 4, 10, 0, 7, 0, 98, 2, 0, 0, 128, 255, 159, 246, 143, 242, 255, 255, 255, 79, 245, 63, 180, 239, 7 };
const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 40, 32, 230, 255, 63, 0, 0, 16, 254, 10, 32, 39, 0, 248, 90, 213, 207, 0, 246, 255, 255, 95, 0, 249, 255, 223, 2, 96, 255, 255, 95, 0, 250, 255, 255, 47, 64, 255, 255, 255, 239, 238, 255, 255, 255, 63, 99, 255, 255, 255, 15, 48, 255, 255, 255, 15, 48, 255, 255 };
/* ? */ const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 40, 32, 230, 255, 63, 0, 0, 16, 254, 10, 32, 39, 0, 248, 90, 213, 207, 0, 246, 255, 255, 95, 0, 249, 255, 223, 2, 96, 255, 255, 95, 0, 250, 255, 255, 47, 64, 255, 255, 255, 239, 238, 255, 255, 255, 63, 99, 255, 255, 255, 15, 48, 255, 255, 255, 15, 48, 255, 255 };
const uint8_t * const Font_TTHoves_Bold_17[126 + 1 - 32] = {
Font_TTHoves_Bold_17_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_TTHoves_DemiBold_21_glyph_125[] = { 7, 20, 8, 0, 16, 97, 37, 0, 0, 244, 255, 8, 0, 244, 255, 47, 0, 0, 248, 79, 0, 0, 244, 95, 0, 0, 244, 95, 0, 0, 244, 95, 0, 0, 244, 95, 0, 0, 242, 175, 1, 0, 160, 255, 12, 0, 0, 249, 12, 0, 208, 255, 10, 0, 243, 143, 0, 0, 244, 95, 0, 0, 244, 95, 0, 0, 244, 95, 0, 0, 245, 95, 0, 97, 252, 79, 0, 244, 255, 14, 0, 244, 207, 3, 0 };
/* ~ */ static const uint8_t Font_TTHoves_DemiBold_21_glyph_126[] = { 12, 5, 12, 0, 8, 0, 215, 158, 1, 144, 73, 112, 255, 255, 61, 245, 111, 224, 255, 254, 255, 255, 47, 241, 143, 64, 254, 255, 9, 64, 37, 0, 113, 72, 0 };
const uint8_t Font_TTHoves_DemiBold_21_glyph_nonprintable[] = { 11, 15, 11, 0, 15, 255, 93, 2, 98, 254, 255, 175, 0, 0, 0, 192, 255, 30, 0, 100, 2, 16, 255, 11, 80, 255, 63, 0, 252, 157, 217, 255, 127, 0, 250, 255, 255, 255, 30, 0, 253, 255, 255, 159, 0, 80, 255, 255, 255, 9, 0, 248, 255, 255, 255, 2, 176, 255, 255, 255, 255, 0, 244, 255, 255, 255, 255, 85, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 17, 245, 255, 255, 255, 239, 0, 244, 255, 255, 255, 239, 0, 244, 255, 255 };
/* ? */ const uint8_t Font_TTHoves_DemiBold_21_glyph_nonprintable[] = { 11, 15, 11, 0, 15, 255, 93, 2, 98, 254, 255, 175, 0, 0, 0, 192, 255, 30, 0, 100, 2, 16, 255, 11, 80, 255, 63, 0, 252, 157, 217, 255, 127, 0, 250, 255, 255, 255, 30, 0, 253, 255, 255, 159, 0, 80, 255, 255, 255, 9, 0, 248, 255, 255, 255, 2, 176, 255, 255, 255, 255, 0, 244, 255, 255, 255, 255, 85, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 17, 245, 255, 255, 255, 239, 0, 244, 255, 255, 255, 239, 0, 244, 255, 255 };
const uint8_t * const Font_TTHoves_DemiBold_21[126 + 1 - 32] = {
Font_TTHoves_DemiBold_21_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_TTHoves_Regular_21_glyph_125[] = { 6, 20, 7, 0, 16, 81, 3, 0, 244, 143, 0, 0, 250, 0, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 246, 3, 0, 209, 77, 0, 48, 126, 0, 243, 25, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 247, 1, 0, 247, 1, 97, 237, 0, 244, 77, 0 };
/* ~ */ static const uint8_t Font_TTHoves_Regular_21_glyph_126[] = { 11, 4, 12, 0, 8, 0, 97, 21, 0, 48, 5, 64, 255, 239, 3, 208, 12, 192, 61, 211, 159, 251, 7, 224, 8, 0, 233, 142, 0 };
const uint8_t Font_TTHoves_Regular_21_glyph_nonprintable[] = { 10, 15, 11, 0, 15, 255, 76, 17, 163, 255, 159, 0, 84, 1, 246, 14, 226, 255, 79, 176, 10, 250, 255, 239, 96, 239, 255, 255, 255, 64, 255, 255, 255, 207, 96, 255, 255, 255, 46, 192, 255, 255, 175, 1, 251, 255, 255, 10, 211, 255, 255, 255, 4, 254, 255, 255, 255, 19, 255, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 255, 255, 255, 255, 1, 255, 255 };
/* ? */ const uint8_t Font_TTHoves_Regular_21_glyph_nonprintable[] = { 10, 15, 11, 0, 15, 255, 76, 17, 163, 255, 159, 0, 84, 1, 246, 14, 226, 255, 79, 176, 10, 250, 255, 239, 96, 239, 255, 255, 255, 64, 255, 255, 255, 207, 96, 255, 255, 255, 46, 192, 255, 255, 175, 1, 251, 255, 255, 10, 211, 255, 255, 255, 4, 254, 255, 255, 255, 19, 255, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 255, 255, 255, 255, 1, 255, 255 };
const uint8_t * const Font_TTHoves_Regular_21[126 + 1 - 32] = {
Font_TTHoves_Regular_21_glyph_32,

@ -102,7 +102,7 @@
/* } */ static const uint8_t Font_Unifont_Bold_16_glyph_125[] = { 5, 13, 7, 0, 11, 225, 140, 198, 24, 102, 99, 12, 110, 0 };
/* ~ */ static const uint8_t Font_Unifont_Bold_16_glyph_126[] = { 7, 3, 8, 0, 11, 99, 118, 48 };
const uint8_t Font_Unifont_Bold_16_glyph_nonprintable[] = { 7, 10, 8, 0, 10, 130, 112, 231, 207, 60, 249, 255, 231, 207 };
/* ? */ const uint8_t Font_Unifont_Bold_16_glyph_nonprintable[] = { 6, 10, 7, 0, 10, 5, 199, 60, 231, 60, 255, 207, 63 };
const uint8_t * const Font_Unifont_Bold_16[126 + 1 - 32] = {
Font_Unifont_Bold_16_glyph_32,

@ -106,7 +106,7 @@
/* } */ static const uint8_t Font_Unifont_Regular_16_glyph_125[] = { 4, 13, 7, 1, 11, 194, 36, 66, 18, 68, 34, 192 };
/* ~ */ static const uint8_t Font_Unifont_Regular_16_glyph_126[] = { 7, 3, 8, 0, 11, 99, 38, 48 }; // < --- advanced changed from 7 to 8
const uint8_t Font_Unifont_Regular_16_glyph_nonprintable[] = { 6, 10, 7, 0, 10, 133, 231, 190, 247, 190, 255, 239, 191 };
/* ? */ const uint8_t Font_Unifont_Regular_16_glyph_nonprintable[] = { 6, 10, 7, 0, 10, 133, 231, 190, 247, 190, 255, 239, 191 };
const uint8_t * const Font_Unifont_Regular_16[126 + 1 - 32] = {
Font_Unifont_Regular_16_glyph_32,

@ -19,19 +19,27 @@
#include "fonts.h"
#include <string.h>
#include <stdbool.h>
#include <stddef.h>
#ifdef TRANSLATIONS
#include "librust_fonts.h"
#endif
static uint8_t convert_char(const uint8_t c) {
static char last_was_utf8 = 0;
// TODO: make it return uint32_t (needs logic to assemble at most 4 bytes
// together)
static uint16_t convert_char_utf8(const uint8_t c) {
// Considering only two-byte UTF-8 characters currently
static uint8_t first_utf8_byte = 0;
// non-printable ASCII character
if (c < ' ') {
last_was_utf8 = 0;
first_utf8_byte = 0;
return 0x7F;
}
// regular ASCII character
if (c < 0x80) {
last_was_utf8 = 0;
first_utf8_byte = 0;
return c;
}
@ -39,13 +47,13 @@ static uint8_t convert_char(const uint8_t c) {
// bytes 11xxxxxx are first bytes of UTF-8 characters
if (c >= 0xC0) {
last_was_utf8 = 1;
return 0x7F;
first_utf8_byte = c;
return 0; // not print this
}
if (last_was_utf8) {
// bytes 10xxxxxx can be successive UTF-8 characters ...
return 0; // skip glyph
if (first_utf8_byte) {
// encountered a successive UTF-8 character ...
return ((uint16_t)first_utf8_byte << 8) | c;
} else {
// ... or they are just non-printable ASCII characters
return 0x7F;
@ -131,31 +139,48 @@ int font_baseline(int font) {
}
const uint8_t *font_get_glyph(int font, uint8_t c) {
c = convert_char(c);
if (!c) return 0;
uint16_t c_2bytes = convert_char_utf8(c);
if (!c_2bytes) return 0;
bool is_printable = c_2bytes != 0x7F;
#ifdef TRANSLATIONS
// found UTF8 character
// it is not hardcoded in firmware fonts, it must be extracted from the
// embedded blob
if (c_2bytes > 0xFF) {
PointerData glyph_data = get_utf8_glyph(c_2bytes, font);
// TODO: is it better to use (!glyph_data.ptr) or (glyph_data.ptr == NULL)?
// first one does not require import
if (glyph_data.ptr != NULL) {
return glyph_data.ptr;
} else {
is_printable = false;
}
}
#endif
// printable ASCII character
if (c >= ' ' && c < 0x7F) {
if (is_printable && c_2bytes >= ' ' && c_2bytes <= 126) {
switch (font) {
#ifdef TREZOR_FONT_NORMAL_ENABLE
case FONT_NORMAL:
return FONT_NORMAL_DATA[c - ' '];
return FONT_NORMAL_DATA[c_2bytes - ' '];
#endif
#ifdef TREZOR_FONT_DEMIBOLD_ENABLE
case FONT_DEMIBOLD:
return FONT_DEMIBOLD_DATA[c - ' '];
return FONT_DEMIBOLD_DATA[c_2bytes - ' '];
#endif
#ifdef TREZOR_FONT_BOLD_ENABLE
case FONT_BOLD:
return FONT_BOLD_DATA[c - ' '];
return FONT_BOLD_DATA[c_2bytes - ' '];
#endif
#ifdef TREZOR_FONT_MONO_ENABLE
case FONT_MONO:
return FONT_MONO_DATA[c - ' '];
return FONT_MONO_DATA[c_2bytes - ' '];
#endif
#ifdef TREZOR_FONT_BIG_ENABLE
case FONT_BIG:
return FONT_BIG_DATA[c - ' '];
return FONT_BIG_DATA[c_2bytes - ' '];
#endif
}
return 0;
@ -181,6 +206,10 @@ const uint8_t *font_get_glyph(int font, uint8_t c) {
#ifdef TREZOR_FONT_MONO_ENABLE
case FONT_MONO:
return NONPRINTABLE_GLYPH(FONT_MONO_DATA);
#endif
#ifdef TREZOR_FONT_BIG_ENABLE
case FONT_BIG:
return NONPRINTABLE_GLYPH(FONT_BIG_DATA);
#endif
}
return 0;

@ -15,6 +15,7 @@
extern const flash_area_t STORAGE_AREAS[STORAGE_AREAS_COUNT];
extern const flash_area_t BOARDLOADER_AREA;
extern const flash_area_t SECRET_AREA;
extern const flash_area_t TRANSLATIONS_AREA;
extern const flash_area_t BOOTLOADER_AREA;
extern const flash_area_t FIRMWARE_AREA;
extern const flash_area_t WIPE_AREA;

@ -38,6 +38,15 @@ const flash_area_t SECRET_AREA = {
},
};
const flash_area_t TRANSLATIONS_AREA = {
.num_subareas = 1,
.subarea[0] =
{
.first_sector = 13,
.num_sectors = 2,
},
};
const flash_area_t BOOTLOADER_AREA = {
.num_subareas = 1,
.subarea[0] =
@ -62,7 +71,7 @@ const flash_area_t FIRMWARE_AREA = {
};
const flash_area_t WIPE_AREA = {
.num_subareas = 4,
.num_subareas = 3,
.subarea[0] =
{
.first_sector = 4,
@ -74,12 +83,6 @@ const flash_area_t WIPE_AREA = {
.num_sectors = 6,
},
.subarea[2] =
{
.first_sector = 13,
.num_sectors = 2, // sector 15 skipped due to bootloader MPU
// settings, sector 12 is secret
},
.subarea[3] =
{
.first_sector = 16,
.num_sectors = 8,

@ -29,6 +29,15 @@ const flash_area_t BOARDLOADER_AREA = {
},
};
const flash_area_t TRANSLATIONS_AREA = {
.num_subareas = 1,
.subarea[0] =
{
.first_sector = 12,
.num_sectors = 3,
},
};
const flash_area_t BOOTLOADER_AREA = {
.num_subareas = 1,
.subarea[0] =

@ -32,6 +32,7 @@ rgb_led = []
backlight = []
usb = []
optiga = []
translations = []
test = [
"button",
"cc",
@ -43,7 +44,8 @@ test = [
"dma2d",
"touch",
"backlight",
"optiga"
"optiga",
"translations",
]
[lib]

@ -289,6 +289,7 @@ fn generate_trezorhal_bindings() {
.allowlist_function("storage_delete")
.allowlist_function("storage_set_counter")
.allowlist_function("storage_next_counter")
.allowlist_function("translations_read")
// display
.allowlist_function("display_clear")
.allowlist_function("display_offset")

@ -9,6 +9,7 @@ mp_obj_t protobuf_debug_msg_def_type();
extern mp_obj_module_t mp_module_trezorproto;
extern mp_obj_module_t mp_module_trezorui2;
extern mp_obj_module_t mp_module_trezortranslate;
#ifdef TREZOR_EMULATOR
mp_obj_t ui_debug_layout_type();

@ -0,0 +1,8 @@
typedef struct {
const uint8_t* ptr;
uint32_t len;
} PointerData;
// TODO: Theoretically, the `len` is not used by the client and does not have to
// be sent
PointerData get_utf8_glyph(uint16_t char_code, int font);

@ -13,6 +13,7 @@ static void _librust_qstrs(void) {
MP_QSTR_MESSAGE_WIRE_TYPE;
MP_QSTR_Msg;
MP_QSTR_MsgDef;
MP_QSTR_TR;
MP_QSTR___dict__;
MP_QSTR___name__;
MP_QSTR_account;
@ -89,6 +90,7 @@ static void _librust_qstrs(void) {
MP_QSTR_is_type_of;
MP_QSTR_items;
MP_QSTR_label;
MP_QSTR_language_name;
MP_QSTR_lines;
MP_QSTR_max_count;
MP_QSTR_max_feerate;

@ -35,6 +35,7 @@ const SD_SALT_AUTH_KEY: u16 = FLAG_PUBLIC | APP_DEVICE | 0x0012;
const INITIALIZED: u16 = FLAG_PUBLIC | APP_DEVICE | 0x0013;
const SAFETY_CHECK_LEVEL: u16 = APP_DEVICE | 0x0014;
const EXPERIMENTAL_FEATURES: u16 = APP_DEVICE | 0x0015;
const HIDE_PASSPHRASE_FROM_HOST: u16 = APP_DEVICE | 0x0016;
pub fn get_avatar_len() -> StorageResult<usize> {
get_length(HOMESCREEN)

@ -14,6 +14,8 @@ pub mod random;
pub mod rgb_led;
pub mod slip39;
pub mod storage;
#[cfg(feature = "translations")]
pub mod translations;
pub mod usb;
pub mod uzlib;
pub mod wordlist;

@ -0,0 +1,27 @@
use super::ffi;
#[repr(C)]
pub struct PointerData {
pub ptr: *const u8,
pub len: u32,
}
pub fn get_translations_blob() -> &'static [u8] {
let mut len: u32 = 0;
let ptr = unsafe { ffi::translations_read(&mut len, 0) };
if ptr.is_null() {
fatal_error!("Translations read failed", "");
}
unsafe { core::slice::from_raw_parts(ptr, len as usize) }
}
pub fn get_pointer_with_offset(offset: u16, len: u16) -> PointerData {
let ptr = unsafe { ffi::translations_read(&mut 0, offset.into()) };
if ptr.is_null() {
fatal_error!("Translations read failed", "");
}
PointerData {
ptr,
len: len.into(),
}
}

@ -144,6 +144,36 @@ impl Font {
display::text_width(text, self.into())
}
/// Supports UTF8 characters
fn get_glyph_from_char(self, c: char) -> Option<Glyph> {
let mut buffer = [0; 4];
let bytes = c.encode_utf8(&mut buffer);
for byte in bytes.bytes() {
if let Some(glyph) = self.get_glyph(byte) {
return Some(glyph);
}
}
None
}
/// Supports UTF8 characters
fn get_first_glyph_from_text(self, text: &str) -> Option<Glyph> {
if let Some(c) = text.chars().next() {
self.get_glyph_from_char(c)
} else {
None
}
}
/// Supports UTF8 characters
fn get_last_glyph_from_text(self, text: &str) -> Option<Glyph> {
if let Some(c) = text.chars().next_back() {
self.get_glyph_from_char(c)
} else {
None
}
}
/// Width of the text that is visible.
/// Not including the spaces before the first and after the last character.
pub fn visible_text_width(self, text: &str) -> i16 {
@ -152,14 +182,20 @@ impl Font {
return 0;
}
let first_char = unwrap!(text.chars().next());
let first_char_glyph = unwrap!(self.get_glyph(first_char as u8));
let first_char_bearing = if let Some(glyph) = self.get_first_glyph_from_text(text) {
glyph.bearing_x
} else {
0
};
let last_char = unwrap!(text.chars().last());
let last_char_glyph = unwrap!(self.get_glyph(last_char as u8));
let last_char_bearing = if let Some(glyph) = self.get_last_glyph_from_text(text) {
glyph.right_side_bearing()
} else {
0
};
// Strip leftmost and rightmost spaces/bearings/margins.
self.text_width(text) - first_char_glyph.bearing_x - last_char_glyph.right_side_bearing()
self.text_width(text) - first_char_bearing - last_char_bearing
}
/// Returning the x-bearing (offset) of the first character.
@ -169,9 +205,11 @@ impl Font {
return 0;
}
let first_char = unwrap!(text.chars().next());
let first_char_glyph = unwrap!(self.get_glyph(first_char as u8));
first_char_glyph.bearing_x
if let Some(glyph) = self.get_first_glyph_from_text(text) {
glyph.bearing_x
} else {
0
}
}
pub fn char_width(self, ch: char) -> i16 {

@ -9,6 +9,8 @@ pub mod event;
pub mod geometry;
pub mod lerp;
pub mod screens;
#[cfg(feature = "translations")]
pub mod translations;
#[macro_use]
pub mod util;

@ -13,7 +13,7 @@ use crate::{
use super::{
super::{
component::{Choice, ChoiceFactory, ChoicePage},
component::{ButtonLayout, Choice, ChoiceFactory, ChoicePage},
theme::bootloader::{BLD_BG, BLD_FG, ICON_EXIT, ICON_REDO, ICON_TRASH},
},
ReturnToC,
@ -70,6 +70,10 @@ impl Choice<&'static str> for MenuChoice {
BLD_BG,
);
}
fn btn_layout(&self) -> ButtonLayout<&'static str> {
ButtonLayout::arrow_armed_arrow("SELECT")
}
}
#[cfg(feature = "ui_debug")]

@ -9,6 +9,7 @@ use crate::{
Child, Component, Event, EventCtx, Pad, Paginate, Qr,
},
geometry::Rect,
translations::tr,
},
};
@ -48,11 +49,17 @@ where
let details_view = {
let mut para = ParagraphVecShort::new();
if let Some(account) = account {
para.add(Paragraph::new(&theme::TEXT_BOLD, "Account:".into()));
para.add(Paragraph::new(
&theme::TEXT_BOLD,
tr("words__account_colon").into(),
));
para.add(Paragraph::new(&theme::TEXT_MONO, account));
}
if let Some(path) = path {
para.add(Paragraph::new(&theme::TEXT_BOLD, "Derivation path:".into()));
para.add(Paragraph::new(
&theme::TEXT_BOLD,
tr("address_details__derivation_path").into(),
));
para.add(Paragraph::new(&theme::TEXT_MONO, path));
}
Paragraphs::new(para)
@ -123,7 +130,7 @@ where
} else {
let left = Some(ButtonDetails::left_arrow_icon());
let middle = if self.is_xpub_page() && self.subpages_in_current_page() > 1 {
Some(ButtonDetails::armed_text("SHOW ALL".into()))
Some(ButtonDetails::armed_text(tr("buttons__show_all").into()))
} else {
None
};

@ -513,12 +513,7 @@ where
Self::new(None, None, None)
}
/// Default button layout for all three buttons - icons.
pub fn default_three_icons() -> Self {
Self::arrow_armed_arrow("SELECT".into())
}
/// Special middle text for default icon layout.
/// Arrows at sides, armed text in the middle.
pub fn arrow_armed_arrow(text: T) -> Self {
Self::new(
Some(ButtonDetails::left_arrow_icon()),
@ -934,9 +929,6 @@ impl ButtonActions {
// DEBUG-ONLY SECTION BELOW
#[cfg(feature = "ui_debug")]
use crate::strutil::ShortString;
#[cfg(feature = "ui_debug")]
impl<T: StringType> crate::trace::Trace for Button<T> {
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
@ -969,19 +961,3 @@ impl<T: StringType> crate::trace::Trace for ButtonDetails<T> {
}
}
}
#[cfg(feature = "ui_debug")]
impl ButtonAction {
/// Describing the action as a string. Debug-only.
pub fn string(&self) -> ShortString {
match self {
ButtonAction::NextPage => "Next".into(),
ButtonAction::PrevPage => "Prev".into(),
ButtonAction::FirstPage => "First".into(),
ButtonAction::LastPage => "Last".into(),
ButtonAction::Cancel => "Cancel".into(),
ButtonAction::Confirm => "Confirm".into(),
ButtonAction::Info => "Info".into(),
}
}
}

@ -10,14 +10,13 @@ use crate::{
},
display::{self, Font},
geometry::{Alignment, Insets, Rect},
translations::tr,
util::animation_disabled,
},
};
use super::theme;
const HEADER: &str = "COINJOIN IN PROGRESS";
const FOOTER: &str = "Do not disconnect your Trezor!";
const FOOTER_TEXT_MARGIN: i16 = 8;
const LOADER_OFFSET: i16 = -15;
const LOADER_SPEED: u16 = 10;
@ -89,7 +88,7 @@ where
if self.indeterminate {
text_multiline(
self.area,
HEADER,
tr("coinjoin__title_progress"),
Font::BOLD,
theme::FG,
theme::BG,
@ -114,7 +113,7 @@ where
// BOTTOM
let top_rest = text_multiline_bottom(
self.area,
FOOTER,
tr("coinjoin__do_not_disconnect"),
Font::BOLD,
theme::FG,
theme::BG,
@ -140,8 +139,8 @@ where
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.component("CoinJoinProgress");
t.string("header", HEADER);
t.string("header", tr("coinjoin__title_progress"));
t.string("text", self.text.as_ref());
t.string("footer", FOOTER);
t.string("footer", tr("coinjoin__do_not_disconnect"));
}
}

@ -12,6 +12,7 @@ use crate::{
event::USBEvent,
geometry::{Alignment2D, Insets, Offset, Point, Rect},
layout::util::get_user_custom_image,
translations::tr,
},
};
@ -86,7 +87,11 @@ where
if !usb_configured() {
self.fill_notification_background();
// TODO: fill warning icons here as well?
display_center(baseline, &"NO USB CONNECTION", NOTIFICATION_FONT);
display_center(
baseline,
&tr("homescreen__title_no_usb_connection"),
NOTIFICATION_FONT,
);
} else if let Some((notification, _level)) = &self.notification {
self.fill_notification_background();
display_center(baseline, &notification.as_ref(), NOTIFICATION_FONT);
@ -196,9 +201,9 @@ where
// so that even middle-click triggers the event.
let invisible_btn_layout = ButtonLayout::arrow_armed_arrow("".into());
let instruction_str = if bootscreen {
"Click to Connect"
tr("homescreen__click_to_connect")
} else {
"Click to Unlock"
tr("homescreen__click_to_unlock")
};
Lockscreen {
label: Child::new(Label::centered(label, theme::TEXT_BIG)),
@ -268,7 +273,7 @@ where
T: StringType + Clone,
{
pub fn new(title: T, buffer_func: F) -> Self {
let btn_layout = ButtonLayout::cancel_none_text("CHANGE".into());
let btn_layout = ButtonLayout::cancel_none_text(tr("buttons__change").into());
ConfirmHomescreen {
title: Child::new(Label::centered(title, theme::TEXT_BOLD)),
buffer_func,

@ -26,9 +26,7 @@ pub trait Choice<T: StringType> {
0
}
fn btn_layout(&self) -> ButtonLayout<T> {
ButtonLayout::default_three_icons()
}
fn btn_layout(&self) -> ButtonLayout<T>;
/// Whether it is possible to do the middle action event without
/// releasing the button - after long-press duration is reached.

@ -1,8 +1,13 @@
pub mod choice;
pub mod choice_item;
#[cfg(feature = "translations")]
pub mod number_input;
#[cfg(feature = "translations")]
pub mod passphrase;
#[cfg(feature = "translations")]
pub mod pin;
#[cfg(feature = "translations")]
pub mod simple_choice;
#[cfg(feature = "translations")]
pub mod wordlist;

@ -3,6 +3,7 @@ use crate::{
ui::{
component::{Component, Event, EventCtx},
geometry::Rect,
translations::tr,
},
};
@ -31,7 +32,10 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactoryNumberInput {
fn get(&self, choice_index: usize) -> (Self::Item, Self::Action) {
let num = self.min + choice_index as u32;
let text: String<10> = String::from(num);
let mut choice_item = ChoiceItem::new(text, ButtonLayout::default_three_icons());
let mut choice_item = ChoiceItem::new(
text,
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
);
// Disabling prev/next buttons for the first/last choice.
// (could be done to the same button if there is only one)

@ -5,6 +5,7 @@ use crate::{
component::{text::common::TextBox, Child, Component, ComponentExt, Event, EventCtx},
display::Icon,
geometry::Rect,
translations::tr,
util::char_to_string,
},
};
@ -43,64 +44,81 @@ const DIGITS_INDEX: usize = 5;
const SPECIAL_INDEX: usize = 6;
const SPACE_INDEX: usize = 7;
/// Menu text, action, icon data, middle button with CONFIRM, without_release
const MENU: [(&str, PassphraseAction, Option<Icon>, bool, bool); MENU_LENGTH] = [
(
"SHOW",
PassphraseAction::Show,
Some(theme::ICON_EYE),
true,
false,
),
(
"CANCEL_OR_DELETE", // will be chosen dynamically
PassphraseAction::CancelOrDelete,
None,
true,
true, // without_release
),
(
"ENTER",
PassphraseAction::Enter,
Some(theme::ICON_TICK),
true,
false,
),
(
"abc",
PassphraseAction::Category(ChoiceCategory::LowercaseLetter),
None,
false,
false,
),
(
"ABC",
PassphraseAction::Category(ChoiceCategory::UppercaseLetter),
None,
false,
false,
),
(
"123",
PassphraseAction::Category(ChoiceCategory::Digit),
None,
false,
false,
),
(
"#$!",
PassphraseAction::Category(ChoiceCategory::SpecialSymbol),
None,
false,
false,
),
(
"SPACE",
PassphraseAction::Character(' '),
Some(theme::ICON_SPACE),
false,
false,
),
#[derive(Copy, Clone)]
struct MenuItem {
text: &'static str,
action: PassphraseAction,
icon: Option<Icon>,
show_confirm: bool,
without_release: bool,
translate: bool,
}
const MENU: [MenuItem; MENU_LENGTH] = [
MenuItem {
text: "inputs__show",
action: PassphraseAction::Show,
icon: Some(theme::ICON_EYE),
show_confirm: true,
without_release: false,
translate: true,
},
MenuItem {
text: "CANCEL_OR_DELETE",
action: PassphraseAction::CancelOrDelete,
icon: None,
show_confirm: true,
without_release: true,
translate: false,
},
MenuItem {
text: "inputs__enter",
action: PassphraseAction::Enter,
icon: Some(theme::ICON_TICK),
show_confirm: true,
without_release: false,
translate: true,
},
MenuItem {
text: "abc",
action: PassphraseAction::Category(ChoiceCategory::LowercaseLetter),
icon: None,
show_confirm: false,
without_release: false,
translate: false,
},
MenuItem {
text: "ABC",
action: PassphraseAction::Category(ChoiceCategory::UppercaseLetter),
icon: None,
show_confirm: false,
without_release: false,
translate: false,
},
MenuItem {
text: "123",
action: PassphraseAction::Category(ChoiceCategory::Digit),
icon: None,
show_confirm: false,
without_release: false,
translate: false,
},
MenuItem {
text: "#$!",
action: PassphraseAction::Category(ChoiceCategory::SpecialSymbol),
icon: None,
show_confirm: false,
without_release: false,
translate: false,
},
MenuItem {
text: "inputs__space",
action: PassphraseAction::Character(' '),
icon: Some(theme::ICON_SPACE),
show_confirm: false,
without_release: false,
translate: true,
},
];
#[derive(Clone, Copy)]
@ -177,34 +195,42 @@ impl ChoiceFactoryPassphrase {
choice_index: usize,
) -> (ChoiceItem<T>, PassphraseAction) {
// More options for CANCEL/DELETE button
let (mut text, action, mut icon, show_confirm, without_release) = MENU[choice_index];
if matches!(action, PassphraseAction::CancelOrDelete) {
let mut current_item = MENU[choice_index];
if matches!(current_item.action, PassphraseAction::CancelOrDelete) {
if self.is_empty {
text = "CANCEL";
icon = Some(theme::ICON_CANCEL);
current_item.text = tr("inputs__cancel");
current_item.icon = Some(theme::ICON_CANCEL);
} else {
text = "DELETE";
icon = Some(theme::ICON_DELETE);
current_item.text = tr("inputs__delete");
current_item.icon = Some(theme::ICON_DELETE);
}
}
let mut menu_item = ChoiceItem::new(text, ButtonLayout::default_three_icons());
// Translating when needed
if current_item.translate {
current_item.text = tr(current_item.text);
}
let mut menu_item = ChoiceItem::new(
current_item.text,
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
);
// Action buttons have different middle button text
if show_confirm {
let confirm_btn = ButtonDetails::armed_text("CONFIRM".into());
if current_item.show_confirm {
let confirm_btn = ButtonDetails::armed_text(tr("buttons__confirm").into());
menu_item.set_middle_btn(Some(confirm_btn));
}
// Making middle button create LongPress events
if without_release {
if current_item.without_release {
menu_item = menu_item.with_middle_action_without_release();
}
if let Some(icon) = icon {
if let Some(icon) = current_item.icon {
menu_item = menu_item.with_icon(icon);
}
(menu_item, action)
(menu_item, current_item.action)
}
/// Character choices with a BACK to MENU choice at the end (visible from
@ -215,14 +241,20 @@ impl ChoiceFactoryPassphrase {
) -> (ChoiceItem<T>, PassphraseAction) {
if is_menu_choice(&self.current_category, choice_index) {
(
ChoiceItem::new("BACK", ButtonLayout::arrow_armed_arrow("RETURN".into()))
.with_icon(theme::ICON_ARROW_BACK_UP),
ChoiceItem::new(
tr("inputs__back"),
ButtonLayout::arrow_armed_arrow(tr("inputs__return").into()),
)
.with_icon(theme::ICON_ARROW_BACK_UP),
PassphraseAction::Menu,
)
} else {
let ch = get_char(&self.current_category, choice_index);
(
ChoiceItem::new(char_to_string(ch), ButtonLayout::default_three_icons()),
ChoiceItem::new(
char_to_string(ch),
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
),
PassphraseAction::Character(ch),
)
}
@ -453,10 +485,10 @@ where
"current_category",
match self.current_category {
ChoiceCategory::Menu => "MENU",
ChoiceCategory::LowercaseLetter => MENU[LOWERCASE_INDEX].0,
ChoiceCategory::UppercaseLetter => MENU[UPPERCASE_INDEX].0,
ChoiceCategory::Digit => MENU[DIGITS_INDEX].0,
ChoiceCategory::SpecialSymbol => MENU[SPECIAL_INDEX].0,
ChoiceCategory::LowercaseLetter => MENU[LOWERCASE_INDEX].text,
ChoiceCategory::UppercaseLetter => MENU[UPPERCASE_INDEX].text,
ChoiceCategory::Digit => MENU[DIGITS_INDEX].text,
ChoiceCategory::SpecialSymbol => MENU[SPECIAL_INDEX].text,
},
);
t.child("choice_page", &self.choice_page);

@ -5,6 +5,7 @@ use crate::{
component::{text::common::TextBox, Child, Component, ComponentExt, Event, EventCtx},
display::{Font, Icon},
geometry::Rect,
translations::tr,
},
};
@ -27,22 +28,40 @@ const EMPTY_PIN_STR: &str = "_";
const CHOICE_LENGTH: usize = 13;
const NUMBER_START_INDEX: usize = 3;
/// Text, action, icon, without_release
const CHOICES: [(&str, PinAction, Option<Icon>, bool); CHOICE_LENGTH] = [
/// Text, action, icon, without_release, translate
const CHOICES: [(&str, PinAction, Option<Icon>, bool, bool); CHOICE_LENGTH] = [
// DELETE should be triggerable without release (after long-press)
("DELETE", PinAction::Delete, Some(theme::ICON_DELETE), true),
("SHOW", PinAction::Show, Some(theme::ICON_EYE), false),
("ENTER", PinAction::Enter, Some(theme::ICON_TICK), false),
("0", PinAction::Digit('0'), None, false),
("1", PinAction::Digit('1'), None, false),
("2", PinAction::Digit('2'), None, false),
("3", PinAction::Digit('3'), None, false),
("4", PinAction::Digit('4'), None, false),
("5", PinAction::Digit('5'), None, false),
("6", PinAction::Digit('6'), None, false),
("7", PinAction::Digit('7'), None, false),
("8", PinAction::Digit('8'), None, false),
("9", PinAction::Digit('9'), None, false),
(
"inputs__delete",
PinAction::Delete,
Some(theme::ICON_DELETE),
true, // without_release
true,
),
(
"inputs__show",
PinAction::Show,
Some(theme::ICON_EYE),
false,
true,
),
(
"inputs__enter",
PinAction::Enter,
Some(theme::ICON_TICK),
false,
true,
),
("0", PinAction::Digit('0'), None, false, false),
("1", PinAction::Digit('1'), None, false, false),
("2", PinAction::Digit('2'), None, false, false),
("3", PinAction::Digit('3'), None, false, false),
("4", PinAction::Digit('4'), None, false, false),
("5", PinAction::Digit('5'), None, false, false),
("6", PinAction::Digit('6'), None, false, false),
("7", PinAction::Digit('7'), None, false, false),
("8", PinAction::Digit('8'), None, false, false),
("9", PinAction::Digit('9'), None, false, false),
];
fn get_random_digit_position() -> usize {
@ -56,13 +75,21 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactoryPIN {
type Item = ChoiceItem<T>;
fn get(&self, choice_index: usize) -> (Self::Item, Self::Action) {
let (choice_str, action, icon, without_release) = CHOICES[choice_index];
let (mut choice_str, action, icon, without_release, translate) = CHOICES[choice_index];
let mut choice_item = ChoiceItem::new(choice_str, ButtonLayout::default_three_icons());
// Translating when needed
if translate {
choice_str = tr(choice_str);
}
let mut choice_item = ChoiceItem::new(
choice_str,
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
);
// Action buttons have different middle button text
if !matches!(action, PinAction::Digit(_)) {
let confirm_btn = ButtonDetails::armed_text("CONFIRM".into());
let confirm_btn = ButtonDetails::armed_text(tr("buttons__confirm").into());
choice_item.set_middle_btn(Some(confirm_btn));
}
@ -111,7 +138,7 @@ where
let (showing_real_prompt, header_line_content, pin_line_content) = if show_subprompt {
(
false,
String::from("WRONG PIN"),
String::from(tr("pin__title_wrong_pin")),
String::from(subprompt.as_ref()),
)
} else {

@ -3,6 +3,7 @@ use crate::{
ui::{
component::{Component, Event, EventCtx},
geometry::Rect,
translations::tr,
},
};
@ -38,7 +39,10 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactorySimple<T> {
fn get(&self, choice_index: usize) -> (Self::Item, Self::Action) {
let text = &self.choices[choice_index];
let mut choice_item = ChoiceItem::new(text, ButtonLayout::default_three_icons());
let mut choice_item = ChoiceItem::new(
text,
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
);
// Disabling prev/next buttons for the first/last choice when not in carousel.
// (could be done to the same button if there is only one)

@ -4,6 +4,7 @@ use crate::{
ui::{
component::{text::common::TextBox, Child, Component, ComponentExt, Event, EventCtx},
geometry::Rect,
translations::tr,
util::char_to_string,
},
};
@ -94,9 +95,12 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactoryWordlist {
// (is a requirement for WORDS, doing it for LETTERS as well to unite it)
if choice_index == DELETE_INDEX {
return (
ChoiceItem::new("DELETE", ButtonLayout::arrow_armed_arrow("CONFIRM".into()))
.with_icon(theme::ICON_DELETE)
.with_middle_action_without_release(),
ChoiceItem::new(
tr("inputs__delete"),
ButtonLayout::arrow_armed_arrow(tr("buttons__confirm").into()),
)
.with_icon(theme::ICON_DELETE)
.with_middle_action_without_release(),
WordlistAction::Delete,
);
}
@ -105,7 +109,10 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactoryWordlist {
let index = self.word_random_order[choice_index - 1];
let word = self.wordlist.get(index).unwrap_or_default();
(
ChoiceItem::new(word, ButtonLayout::default_three_icons()),
ChoiceItem::new(
word,
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
),
WordlistAction::Word(word),
)
} else {
@ -115,7 +122,10 @@ impl<T: StringType + Clone> ChoiceFactory<T> for ChoiceFactoryWordlist {
.nth(choice_index - 1)
.unwrap_or_default();
(
ChoiceItem::new(char_to_string(letter), ButtonLayout::default_three_icons()),
ChoiceItem::new(
char_to_string(letter),
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
),
WordlistAction::Letter(letter),
)
}

@ -26,32 +26,39 @@ pub use loader::{Loader, LoaderMsg, LoaderStyle, LoaderStyleSheet};
pub use result::ResultScreen;
pub use welcome_screen::WelcomeScreen;
#[cfg(feature = "translations")]
mod address_details;
mod changing_text;
#[cfg(feature = "translations")]
mod coinjoin_progress;
mod flow;
mod flow_pages;
mod frame;
#[cfg(feature = "micropython")]
mod homescreen;
#[cfg(feature = "translations")]
mod page;
mod progress;
mod result_anim;
mod result_popup;
mod scrollbar;
#[cfg(feature = "translations")]
mod share_words;
mod show_more;
mod title;
#[cfg(feature = "translations")]
pub use address_details::AddressDetails;
pub use changing_text::ChangingTextLine;
#[cfg(feature = "translations")]
pub use coinjoin_progress::CoinJoinProgress;
pub use flow::Flow;
pub use flow_pages::{FlowPages, Page};
pub use frame::{Frame, ScrollableContent, ScrollableFrame};
#[cfg(feature = "micropython")]
pub use homescreen::{check_homescreen_format, ConfirmHomescreen, Homescreen, Lockscreen};
#[cfg(feature = "translations")]
pub use input_methods::{
number_input::NumberInput,
passphrase::PassphraseEntry,
@ -59,10 +66,12 @@ pub use input_methods::{
simple_choice::SimpleChoice,
wordlist::{WordlistEntry, WordlistType},
};
#[cfg(feature = "translations")]
pub use page::ButtonPage;
pub use progress::Progress;
pub use result_anim::{ResultAnim, ResultAnimMsg};
pub use result_popup::{ResultPopup, ResultPopupMsg};
pub use scrollbar::ScrollBar;
#[cfg(feature = "translations")]
pub use share_words::ShareWords;
pub use show_more::{CancelInfoConfirmMsg, ShowMore};

@ -4,6 +4,7 @@ use crate::{
component::{Child, Component, ComponentExt, Event, EventCtx, Pad, PageMsg, Paginate},
display::Color,
geometry::{Insets, Rect},
translations::tr,
},
};
@ -44,7 +45,7 @@ where
content: Child::new(content),
pad: Pad::with_background(background).with_clear(),
cancel_btn_details: Some(ButtonDetails::cancel_icon()),
confirm_btn_details: Some(ButtonDetails::text("CONFIRM".into())),
confirm_btn_details: Some(ButtonDetails::text(tr("buttons__confirm").into())),
back_btn_details: Some(ButtonDetails::up_arrow_icon()),
next_btn_details: Some(ButtonDetails::down_arrow_icon_wide()),
// Setting empty layout for now, we do not yet know the page count.

@ -6,6 +6,7 @@ use crate::{
},
display::Font,
geometry::{Alignment, Offset, Rect},
translations::tr,
},
};
@ -71,9 +72,9 @@ where
fn get_final_text(&self) -> String<50> {
build_string!(
50,
"I wrote down all ",
tr("share_words__wrote_down_all"),
inttostr!(self.share_words.len() as u8),
" words in order."
tr("share_words__words_in_order")
)
}

@ -39,6 +39,7 @@ use crate::{
util::{iter_into_array, iter_into_vec, upy_disable_animation, ConfirmBlob},
},
model_tr::component::check_homescreen_format,
translations::tr,
},
};
@ -319,7 +320,7 @@ extern "C" fn new_confirm_action(n_args: usize, args: *const Obj, kwargs: *mut M
let action: Option<StrBuffer> = kwargs.get(Qstr::MP_QSTR_action)?.try_into_option()?;
let description: Option<StrBuffer> =
kwargs.get(Qstr::MP_QSTR_description)?.try_into_option()?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, "CONFIRM".into())?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, tr("buttons__confirm").into())?;
let verb_cancel: Option<StrBuffer> = kwargs
.get(Qstr::MP_QSTR_verb_cancel)
.unwrap_or_else(|_| Obj::const_none())
@ -355,7 +356,7 @@ extern "C" fn new_confirm_blob(n_args: usize, args: *const Obj, kwargs: *mut Map
let description: Option<StrBuffer> =
kwargs.get(Qstr::MP_QSTR_description)?.try_into_option()?;
let extra: Option<StrBuffer> = kwargs.get(Qstr::MP_QSTR_extra)?.try_into_option()?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, "CONFIRM".into())?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, tr("buttons__confirm").into())?;
let verb_cancel: Option<StrBuffer> = kwargs
.get(Qstr::MP_QSTR_verb_cancel)
.unwrap_or_else(|_| Obj::const_none())
@ -425,7 +426,7 @@ extern "C" fn new_confirm_properties(n_args: usize, args: *const Obj, kwargs: *m
content_in_button_page(
title,
paragraphs.into_paragraphs(),
"CONFIRM".into(),
tr("buttons__confirm").into(),
None,
hold,
)
@ -457,11 +458,11 @@ extern "C" fn new_confirm_reset_device(n_args: usize, args: *const Obj, kwargs:
let button: StrBuffer = kwargs.get(Qstr::MP_QSTR_button)?.try_into()?;
let ops = OpTextLayout::<StrBuffer>::new(theme::TEXT_NORMAL)
.text_normal("By continuing you agree to Trezor Company's terms and conditions.".into())
.text_normal(tr("reset__by_continuing").into())
.next_page()
.text_normal("More info at".into())
.text_normal(tr("reset__more_info_at").into())
.newline()
.text_bold("trezor.io/tos".into());
.text_bold(tr("reset__tos_link").into());
let formatted = FormattedText::new(ops).vertically_centered();
content_in_button_page(title, formatted, button, Some("".into()), false)
@ -473,25 +474,25 @@ extern "C" fn new_confirm_backup(n_args: usize, args: *const Obj, kwargs: *mut M
let block = move |_args: &[Obj], _kwargs: &Map| {
let get_page = move |page_index| match page_index {
0 => {
let btn_layout = ButtonLayout::text_none_arrow_wide("SKIP".into());
let btn_layout = ButtonLayout::text_none_arrow_wide(tr("buttons__skip").into());
let btn_actions = ButtonActions::cancel_none_next();
let ops = OpTextLayout::new(theme::TEXT_NORMAL)
.text_normal("New wallet created.".into())
.text_normal(tr("backup__new_wallet_created").into())
.newline()
.newline()
.text_normal("It should be backed up now!".into());
.text_normal(tr("backup__it_should_be_backed_up_now").into());
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted).with_title("SUCCESS".into())
Page::new(btn_layout, btn_actions, formatted)
.with_title(tr("words__title_success").into())
}
1 => {
let btn_layout = ButtonLayout::up_arrow_none_text("BACK UP".into());
let btn_layout = ButtonLayout::up_arrow_none_text(tr("buttons__back_up").into());
let btn_actions = ButtonActions::prev_none_confirm();
let ops = OpTextLayout::new(theme::TEXT_NORMAL).text_normal(
"You can use your backup to recover your wallet at any time.".into(),
);
let ops = OpTextLayout::new(theme::TEXT_NORMAL)
.text_normal(tr("backup__recover_anytime").into());
let formatted = FormattedText::new(ops).vertically_centered();
Page::<StrBuffer>::new(btn_layout, btn_actions, formatted)
.with_title("BACK UP WALLET".into())
.with_title(tr("backup__title_backup_wallet").into())
}
_ => unreachable!(),
};
@ -545,7 +546,7 @@ extern "C" fn new_confirm_value(n_args: usize, args: *const Obj, kwargs: *mut Ma
content_in_button_page(
title,
paragraphs,
verb.unwrap_or_else(|| "CONFIRM".into()),
verb.unwrap_or_else(|| tr("buttons__confirm").into()),
Some("".into()),
hold,
)
@ -559,16 +560,16 @@ extern "C" fn new_confirm_joint_total(n_args: usize, args: *const Obj, kwargs: *
let total_amount: StrBuffer = kwargs.get(Qstr::MP_QSTR_total_amount)?.try_into()?;
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_BOLD, "You are contributing:".into()),
Paragraph::new(&theme::TEXT_BOLD, tr("joint__you_are_contributing").into()),
Paragraph::new(&theme::TEXT_MONO, spending_amount),
Paragraph::new(&theme::TEXT_BOLD, "To the total amount:".into()),
Paragraph::new(&theme::TEXT_BOLD, tr("joint__to_the_total_amount").into()),
Paragraph::new(&theme::TEXT_MONO, total_amount),
]);
content_in_button_page(
"JOINT TRANSACTION".into(),
tr("joint__title").into(),
paragraphs,
"HOLD TO CONFIRM".into(),
tr("buttons__hold_to_confirm").into(),
Some("".into()),
true,
)
@ -583,22 +584,22 @@ extern "C" fn new_confirm_modify_output(n_args: usize, args: *const Obj, kwargs:
let amount_new: StrBuffer = kwargs.get(Qstr::MP_QSTR_amount_new)?.try_into()?;
let description = if sign < 0 {
"Decrease amount by:"
tr("modify_amount__decrease_amount")
} else {
"Increase amount by:"
tr("modify_amount__increase_amount")
};
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_NORMAL, description.into()),
Paragraph::new(&theme::TEXT_MONO, amount_change).break_after(),
Paragraph::new(&theme::TEXT_BOLD, "New amount:".into()),
Paragraph::new(&theme::TEXT_BOLD, tr("modify_amount__new_amount").into()),
Paragraph::new(&theme::TEXT_MONO, amount_new),
]);
content_in_button_page(
"MODIFY AMOUNT".into(),
tr("modify_amount__title").into(),
paragraphs,
"CONFIRM".into(),
tr("buttons__confirm").into(),
Some("".into()),
false,
)
@ -616,7 +617,7 @@ extern "C" fn new_confirm_output_address(n_args: usize, args: *const Obj, kwargs
let get_page = move |page_index| {
assert!(page_index == 0);
// RECIPIENT + address
let btn_layout = ButtonLayout::cancel_none_text("CONTINUE".into());
let btn_layout = ButtonLayout::cancel_none_text(tr("buttons__continue").into());
let btn_actions = ButtonActions::cancel_none_confirm();
// Not putting hyphens in the address.
// Potentially adding address label in different font.
@ -654,7 +655,7 @@ extern "C" fn new_confirm_output_amount(n_args: usize, args: *const Obj, kwargs:
let get_page = move |page_index| {
assert!(page_index == 0);
// AMOUNT + amount
let btn_layout = ButtonLayout::up_arrow_none_text("CONFIRM".into());
let btn_layout = ButtonLayout::up_arrow_none_text(tr("buttons__confirm").into());
let btn_actions = ButtonActions::cancel_none_confirm();
let ops = OpTextLayout::new(theme::TEXT_MONO).text_mono(amount.clone());
let formatted = FormattedText::new(ops).vertically_centered();
@ -684,7 +685,7 @@ extern "C" fn new_confirm_total(n_args: usize, args: *const Obj, kwargs: *mut Ma
match page_index {
0 => {
// Total amount + fee
let btn_layout = ButtonLayout::cancel_armed_info("CONFIRM".into());
let btn_layout = ButtonLayout::cancel_armed_info(tr("buttons__confirm").into());
let btn_actions = ButtonActions::cancel_confirm_next();
let ops = OpTextLayout::new(theme::TEXT_MONO)
@ -708,11 +709,11 @@ extern "C" fn new_confirm_total(n_args: usize, args: *const Obj, kwargs: *mut Ma
let fee_rate_amount = fee_rate_amount.clone().unwrap_or_default();
let ops = OpTextLayout::new(theme::TEXT_MONO)
.text_bold("FEE INFORMATION".into())
.text_bold(tr("confirm_total__title_fee").into())
.newline()
.newline()
.newline_half()
.text_bold("Fee rate:".into())
.text_bold(tr("confirm_total__fee_rate").into())
.newline()
.text_mono(fee_rate_amount);
@ -729,11 +730,11 @@ extern "C" fn new_confirm_total(n_args: usize, args: *const Obj, kwargs: *mut Ma
// TODO: include wallet info when available
let ops = OpTextLayout::new(theme::TEXT_MONO)
.text_bold("SENDING FROM".into())
.text_bold(tr("confirm_total__title_sending_from").into())
.newline()
.newline()
.newline_half()
.text_bold("Account:".into())
.text_bold(tr("words__account_colon").into())
.newline()
.text_mono(account_label);
@ -765,9 +766,9 @@ extern "C" fn new_altcoin_tx_summary(n_args: usize, args: *const Obj, kwargs: *m
0 => {
// Amount + fee
let btn_layout = if cancel_cross {
ButtonLayout::cancel_armed_info("CONFIRM".into())
ButtonLayout::cancel_armed_info(tr("buttons__confirm").into())
} else {
ButtonLayout::up_arrow_armed_info("CONFIRM".into())
ButtonLayout::up_arrow_armed_info(tr("buttons__confirm").into())
};
let btn_actions = ButtonActions::cancel_confirm_next();
@ -803,7 +804,7 @@ extern "C" fn new_altcoin_tx_summary(n_args: usize, args: *const Obj, kwargs: *m
let formatted = FormattedText::new(ops).vertically_centered();
Page::new(btn_layout, btn_actions, formatted)
.with_title("FEE INFORMATION".into())
.with_title(tr("confirm_total__title_fee").into())
.with_slim_arrows()
}
_ => unreachable!(),
@ -821,7 +822,7 @@ extern "C" fn new_confirm_address(n_args: usize, args: *const Obj, kwargs: *mut
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let address: StrBuffer = kwargs.get(Qstr::MP_QSTR_data)?.try_into()?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, "CONFIRM".into())?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, tr("buttons__confirm").into())?;
let chunkify: bool = kwargs.get_or(Qstr::MP_QSTR_chunkify, false)?;
let get_page = move |page_index| {
@ -872,62 +873,51 @@ extern "C" fn tutorial(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj
// really cancel the tutorial.
match page_index {
// title, text, btn_layout, btn_actions
0 => {
tutorial_screen(
"HELLO",
"Welcome to Trezor. Press right to continue.",
ButtonLayout::cancel_none_arrow(),
ButtonActions::last_none_next(),
)
},
1 => {
tutorial_screen(
"",
"Use Trezor by\nclicking the left and right buttons.\n\rContinue right.",
ButtonLayout::arrow_none_arrow(),
ButtonActions::prev_none_next(),
)
},
2 => {
tutorial_screen(
"HOLD TO CONFIRM",
"Press and hold the right button to\napprove important operations.",
ButtonLayout::arrow_none_htc("HOLD TO CONFIRM".into()),
ButtonActions::prev_none_next(),
)
},
3 => {
tutorial_screen(
"SCREEN SCROLL",
"Press right to scroll down to read all content when text doesn't fit on one screen.\n\rPress left to scroll up.",
ButtonLayout::arrow_none_text("CONTINUE".into()),
ButtonActions::prev_none_next(),
)
},
4 => {
tutorial_screen(
"CONFIRM",
"Press both left and right at the same\ntime to confirm.",
ButtonLayout::none_armed_none("CONFIRM".into()),
ButtonActions::none_next_none(),
)
},
5 => {
tutorial_screen(
"TUTORIAL COMPLETE",
"You're ready to\nuse Trezor.",
ButtonLayout::text_none_text("AGAIN".into(), "CONTINUE".into()),
ButtonActions::beginning_none_confirm(),
)
},
6 => {
tutorial_screen(
"SKIP TUTORIAL",
"Are you sure you\nwant to skip the tutorial?",
ButtonLayout::arrow_none_text("SKIP".into()),
ButtonActions::beginning_none_cancel(),
)
},
0 => tutorial_screen(
tr("tutorial__title_hello"),
tr("tutorial__welcome_press_right"),
ButtonLayout::cancel_none_arrow(),
ButtonActions::last_none_next(),
),
1 => tutorial_screen(
"",
tr("tutorial__use_trezor"),
ButtonLayout::arrow_none_arrow(),
ButtonActions::prev_none_next(),
),
2 => tutorial_screen(
tr("buttons__hold_to_confirm"),
tr("tutorial__press_and_hold"),
ButtonLayout::arrow_none_htc(tr("buttons__hold_to_confirm").into()),
ButtonActions::prev_none_next(),
),
3 => tutorial_screen(
tr("tutorial__title_screen_scroll"),
tr("tutorial__scroll_down"),
ButtonLayout::arrow_none_text(tr("buttons__continue").into()),
ButtonActions::prev_none_next(),
),
4 => tutorial_screen(
tr("buttons__confirm"),
tr("tutorial__middle_click"),
ButtonLayout::none_armed_none(tr("buttons__confirm").into()),
ButtonActions::none_next_none(),
),
5 => tutorial_screen(
tr("tutorial__title_tutorial_complete"),
tr("tutorial__ready_to_use"),
ButtonLayout::text_none_text(
tr("buttons__again").into(),
tr("buttons__continue").into(),
),
ButtonActions::beginning_none_confirm(),
),
6 => tutorial_screen(
tr("tutorial__title_skip"),
tr("tutorial__sure_you_want_skip"),
ButtonLayout::arrow_none_text(tr("buttons__skip").into()),
ButtonActions::beginning_none_cancel(),
),
_ => unreachable!(),
}
};
@ -957,28 +947,33 @@ extern "C" fn new_confirm_modify_fee(n_args: usize, args: *const Obj, kwargs: *m
.try_into_option()?;
let (description, change) = match sign {
s if s < 0 => ("Decrease fee by:", user_fee_change),
s if s > 0 => ("Increase fee by:", user_fee_change),
_ => ("Your fee did not change.", StrBuffer::empty()),
s if s < 0 => (tr("modify_fee__decrease_fee"), user_fee_change),
s if s > 0 => (tr("modify_fee__increase_fee"), user_fee_change),
_ => (tr("modify_fee__no_change"), StrBuffer::empty()),
};
let mut paragraphs_vec = ParagraphVecShort::new();
paragraphs_vec
.add(Paragraph::new(&theme::TEXT_BOLD, description.into()))
.add(Paragraph::new(&theme::TEXT_MONO, change))
.add(Paragraph::new(&theme::TEXT_BOLD, "Transaction fee:".into()).no_break())
.add(
Paragraph::new(&theme::TEXT_BOLD, tr("modify_fee__transaction_fee").into())
.no_break(),
)
.add(Paragraph::new(&theme::TEXT_MONO, total_fee_new));
if let Some(fee_rate_amount) = fee_rate_amount {
paragraphs_vec
.add(Paragraph::new(&theme::TEXT_BOLD, "Fee rate:".into()).no_break())
.add(
Paragraph::new(&theme::TEXT_BOLD, tr("modify_fee__fee_rate").into()).no_break(),
)
.add(Paragraph::new(&theme::TEXT_MONO, fee_rate_amount));
}
content_in_button_page(
"MODIFY FEE".into(),
tr("modify_fee__title").into(),
paragraphs_vec.into_paragraphs(),
"CONFIRM".into(),
tr("buttons__confirm").into(),
Some("".into()),
false,
)
@ -1060,25 +1055,25 @@ extern "C" fn new_confirm_fido(n_args: usize, args: *const Obj, kwargs: *mut Map
let (btn_layout, btn_actions) = if page_count == 1 {
// There is only one page
(
ButtonLayout::cancel_none_text("CONFIRM".into()),
ButtonLayout::cancel_none_text(tr("buttons__confirm").into()),
ButtonActions::cancel_none_confirm(),
)
} else if page_index == 0 {
// First page
(
ButtonLayout::cancel_armed_arrow("SELECT".into()),
ButtonLayout::cancel_armed_arrow(tr("buttons__select").into()),
ButtonActions::cancel_confirm_next(),
)
} else if page_index == page_count - 1 {
// Last page
(
ButtonLayout::arrow_armed_none("SELECT".into()),
ButtonLayout::arrow_armed_none(tr("buttons__select").into()),
ButtonActions::prev_confirm_none(),
)
} else {
// Page in the middle
(
ButtonLayout::arrow_armed_arrow("SELECT".into()),
ButtonLayout::arrow_armed_arrow(tr("buttons__select").into()),
ButtonActions::prev_confirm_next(),
)
};
@ -1162,7 +1157,7 @@ extern "C" fn new_show_info(n_args: usize, args: *const Obj, kwargs: *mut Map) -
extern "C" fn new_show_passphrase() -> Obj {
let block = move || {
let text: StrBuffer = "Please enter your passphrase.".into();
let text: StrBuffer = tr("passphrase__please_enter").into();
let paragraph = Paragraph::new(&theme::TEXT_NORMAL, text).centered();
let content = Paragraphs::new([paragraph]);
let obj = LayoutObj::new(content)?;
@ -1177,15 +1172,15 @@ extern "C" fn new_show_mismatch(n_args: usize, args: *const Obj, kwargs: *mut Ma
let get_page = move |page_index| {
assert!(page_index == 0);
let btn_layout = ButtonLayout::arrow_none_text("QUIT".into());
let btn_layout = ButtonLayout::arrow_none_text(tr("buttons__quit").into());
let btn_actions = ButtonActions::cancel_none_confirm();
let ops = OpTextLayout::<StrBuffer>::new(theme::TEXT_NORMAL)
.text_bold(title.clone())
.newline()
.newline_half()
.text_normal("Please contact Trezor support at".into())
.text_normal(tr("addr_mismatch__contact_support_at").into())
.newline()
.text_bold("trezor.io/support".into());
.text_bold(tr("addr_mismatch__support_url").into());
let formatted = FormattedText::new(ops);
Page::new(btn_layout, btn_actions, formatted)
};
@ -1265,18 +1260,19 @@ extern "C" fn new_confirm_coinjoin(n_args: usize, args: *const Obj, kwargs: *mut
// Decreasing bottom padding between paragraphs to fit one screen
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_BOLD, "Max rounds".into()).with_bottom_padding(2),
Paragraph::new(&theme::TEXT_BOLD, tr("coinjoin__max_rounds").into())
.with_bottom_padding(2),
Paragraph::new(&theme::TEXT_MONO, max_rounds),
Paragraph::new(&theme::TEXT_BOLD, "Max mining fee".into())
Paragraph::new(&theme::TEXT_BOLD, tr("coinjoin__max_mining_fee").into())
.with_bottom_padding(2)
.no_break(),
Paragraph::new(&theme::TEXT_MONO, max_feerate).with_bottom_padding(2),
]);
content_in_button_page(
"AUTHORIZE COINJOIN".into(),
tr("coinjoin__title").into(),
paragraphs,
"HOLD TO CONFIRM".into(),
tr("buttons__hold_to_confirm").into(),
None,
true,
)
@ -1367,7 +1363,8 @@ extern "C" fn new_show_share_words(n_args: usize, args: *const Obj, kwargs: *mut
let cancel_btn = Some(ButtonDetails::up_arrow_icon());
let confirm_btn = Some(
ButtonDetails::<StrBuffer>::text("HOLD TO CONFIRM".into()).with_default_duration(),
ButtonDetails::<StrBuffer>::text(tr("buttons__hold_to_confirm").into())
.with_default_duration(),
);
let obj = LayoutObj::new(
@ -1449,18 +1446,21 @@ extern "C" fn new_confirm_recovery(n_args: usize, args: *const Obj, kwargs: *mut
let mut paragraphs = ParagraphVecShort::new();
paragraphs.add(Paragraph::new(&theme::TEXT_NORMAL, description));
if show_info {
let first = "You'll only have to select the first 2-4 letters of each word.";
let second =
"Position of the cursor will change between entries for enhanced security.";
paragraphs
.add(Paragraph::new(&theme::TEXT_NORMAL, first.into()))
.add(Paragraph::new(&theme::TEXT_NORMAL, second.into()));
.add(Paragraph::new(
&theme::TEXT_NORMAL,
tr("recovery__only_first_n_letters").into(),
))
.add(Paragraph::new(
&theme::TEXT_NORMAL,
tr("recovery__cursor_will_change").into(),
));
}
let title = if dry_run {
"BACKUP CHECK"
tr("recovery__title_dry_run")
} else {
"RECOVER WALLET"
tr("recovery__title")
};
content_in_button_page(
@ -1476,7 +1476,7 @@ extern "C" fn new_confirm_recovery(n_args: usize, args: *const Obj, kwargs: *mut
extern "C" fn new_select_word_count(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = |_args: &[Obj], _kwargs: &Map| {
let title: StrBuffer = "NUMBER OF WORDS".into();
let title: StrBuffer = tr("word_count__title").into();
let choices: Vec<StrBuffer, 5> = ["12", "18", "20", "24", "33"]
.map(|num| num.into())
@ -1509,7 +1509,13 @@ extern "C" fn new_show_group_share_success(
Paragraph::new(&theme::TEXT_BOLD, l3),
]);
content_in_button_page("".into(), paragraphs, "CONTINUE".into(), None, false)
content_in_button_page(
"".into(),
paragraphs,
tr("buttons__continue").into(),
None,
false,
)
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
@ -1607,7 +1613,7 @@ extern "C" fn new_confirm_firmware_update(
let description: StrBuffer = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?;
let fingerprint: StrBuffer = kwargs.get(Qstr::MP_QSTR_fingerprint)?.try_into()?;
let title = "UPDATE FIRMWARE";
let title = tr("firmware_update__title");
let message = Label::left_aligned(description, theme::TEXT_NORMAL).vertically_centered();
let fingerprint = Label::left_aligned(
fingerprint,
@ -1616,8 +1622,18 @@ extern "C" fn new_confirm_firmware_update(
.vertically_centered();
let obj = LayoutObj::new(
Confirm::new(theme::BG, title, message, None, "INSTALL".into(), false)
.with_info_screen(StrBuffer::from("FW FINGERPRINT"), fingerprint),
Confirm::new(
theme::BG,
title,
message,
None,
tr("buttons__install").into(),
false,
)
.with_info_screen(
StrBuffer::from(tr("firmware_update__title_fingerprint")),
fingerprint,
),
)?;
Ok(obj.into())
};

@ -9,6 +9,7 @@ use crate::{
Component, Event, EventCtx, Paginate, Qr,
},
geometry::Rect,
translations::tr,
},
};
@ -42,13 +43,16 @@ where
{
let mut para = ParagraphVecShort::new();
if let Some(a) = account {
para.add(Paragraph::new(&theme::TEXT_NORMAL, "Account:".into()));
para.add(Paragraph::new(
&theme::TEXT_NORMAL,
tr("words__account_colon").into(),
));
para.add(Paragraph::new(&theme::TEXT_MONO, a));
}
if let Some(p) = path {
para.add(Paragraph::new(
&theme::TEXT_NORMAL,
"Derivation path:".into(),
tr("address_details__derivation_path").into(),
));
para.add(Paragraph::new(&theme::TEXT_MONO, p));
}

@ -9,6 +9,7 @@ use crate::{
},
display::loader::{loader_circular_uncompress, LoaderDimensions},
geometry::{Insets, Rect},
translations::tr,
util::animation_disabled,
},
};
@ -43,7 +44,8 @@ where
T: AsRef<str>,
{
let style = theme::label_coinjoin_progress();
let label = Label::centered("DO NOT DISCONNECT YOUR TREZOR!", style).vertically_centered();
let label =
Label::centered(tr("coinjoin__title_do_not_disconnect"), style).vertically_centered();
let bg = painter::rect_painter(style.background_color, theme::BG);
let inner = (bg, label);
CoinJoinProgress::with_background(text, inner, indeterminate)
@ -61,7 +63,7 @@ where
indeterminate,
content: Frame::centered(
theme::label_title(),
"COINJOIN IN PROGRESS",
tr("coinjoin__title_progress"),
Split::bottom(RECTANGLE_HEIGHT, 0, Empty, inner),
)
.into_child(),

@ -10,6 +10,7 @@ use crate::{
geometry::{Offset, Point, Rect},
layout::util::get_user_custom_image,
model_tt::{constant, theme::IMAGE_HOMESCREEN},
translations::tr,
},
};
@ -87,7 +88,7 @@ where
if !usb_configured() {
let (color, icon) = Self::level_to_style(0);
Some(HomescreenNotification {
text: "NO USB CONNECTION",
text: tr("homescreen__title_no_usb_connection"),
icon,
color,
})
@ -106,7 +107,7 @@ where
fn paint_loader(&mut self) {
display::text_center(
TOP_CENTER + Offset::y(HOLD_Y),
"HOLD TO LOCK",
tr("homescreen__title_hold_to_lock"),
Font::BOLD,
theme::FG,
theme::BG,
@ -302,9 +303,15 @@ where
fn paint(&mut self) {
let (locked, tap) = if self.bootscreen {
("NOT CONNECTED", "Tap to connect")
(
tr("lockscreen__title_not_connected"),
tr("lockscreen__tap_to_connect"),
)
} else {
("LOCKED", "Tap to unlock")
(
tr("lockscreen__title_locked"),
tr("lockscreen__tap_to_unlock"),
)
};
let mut label_style = theme::TEXT_DEMIBOLD;

@ -1,6 +1,8 @@
#[cfg(feature = "translations")]
mod address_details;
pub mod bl_confirm;
mod button;
#[cfg(feature = "translations")]
mod coinjoin_progress;
mod dialog;
mod fido;
@ -12,7 +14,9 @@ mod frame;
mod homescreen;
mod keyboard;
mod loader;
#[cfg(feature = "translations")]
mod number_input;
#[cfg(feature = "translations")]
mod page;
mod progress;
mod result;
@ -21,11 +25,13 @@ mod simple_page;
mod swipe;
mod welcome_screen;
#[cfg(feature = "translations")]
pub use address_details::AddressDetails;
pub use button::{
Button, ButtonContent, ButtonMsg, ButtonStyle, ButtonStyleSheet, CancelConfirmMsg,
CancelInfoConfirmMsg, IconText, SelectWordMsg,
};
#[cfg(feature = "translations")]
pub use coinjoin_progress::CoinJoinProgress;
pub use dialog::{Dialog, DialogMsg, IconDialog};
pub use error::ErrorScreen;
@ -42,7 +48,9 @@ pub use keyboard::{
word_count::{SelectWordCount, SelectWordCountMsg},
};
pub use loader::{Loader, LoaderMsg, LoaderStyle, LoaderStyleSheet};
#[cfg(feature = "translations")]
pub use number_input::{NumberInputDialog, NumberInputDialogMsg};
#[cfg(feature = "translations")]
pub use page::ButtonPage;
pub use progress::Progress;
pub use result::{ResultFooter, ResultScreen, ResultStyle};

@ -9,6 +9,7 @@ use crate::{
},
display::{self, Font},
geometry::{Grid, Insets, Offset, Rect},
translations::tr,
},
};
@ -45,8 +46,8 @@ where
input: NumberInput::new(min, max, init_value).into_child(),
paragraphs: Paragraphs::new(Paragraph::new(&theme::TEXT_NORMAL, text)).into_child(),
paragraphs_pad: Pad::with_background(theme::BG),
info_button: Button::with_text("INFO").into_child(),
confirm_button: Button::with_text("CONTINUE")
info_button: Button::with_text(tr("buttons__info")).into_child(),
confirm_button: Button::with_text(tr("buttons__continue"))
.styled(theme::button_confirm())
.into_child(),
}

@ -5,6 +5,7 @@ use crate::{
constant,
display::{self, Color},
geometry::{Insets, Rect},
translations::tr,
util::animation_disabled,
},
};
@ -88,8 +89,8 @@ where
}
pub fn with_hold(mut self) -> Self {
self.button_confirm =
Button::with_text("HOLD TO CONFIRM".into()).styled(theme::button_confirm());
self.button_confirm = Button::with_text(tr("buttons__hold_to_confirm").into())
.styled(theme::button_confirm());
self.loader = Some(Loader::new());
self
}

@ -40,6 +40,7 @@ use crate::{
util::{iter_into_array, upy_disable_animation, ConfirmBlob, PropsList},
},
model_tt::component::check_homescreen_format,
translations::tr,
},
};
@ -577,7 +578,7 @@ extern "C" fn new_confirm_address(n_args: usize, args: *const Obj, kwargs: *mut
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let description: Option<StrBuffer> =
kwargs.get(Qstr::MP_QSTR_description)?.try_into_option()?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, "CONFIRM".into())?;
let verb: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_verb, tr("buttons__confirm").into())?;
let extra: Option<StrBuffer> = kwargs.get(Qstr::MP_QSTR_extra)?.try_into_option()?;
let data: Obj = kwargs.get(Qstr::MP_QSTR_data)?;
let chunkify: bool = kwargs.get_or(Qstr::MP_QSTR_chunkify, false)?;
@ -630,7 +631,7 @@ extern "C" fn new_confirm_properties(n_args: usize, args: *const Obj, kwargs: *m
ButtonPage::new(paragraphs.into_paragraphs(), theme::BG).with_hold()
} else {
ButtonPage::new(paragraphs.into_paragraphs(), theme::BG)
.with_cancel_confirm(None, Some("CONFIRM".into()))
.with_cancel_confirm(None, Some(tr("buttons__confirm").into()))
};
let obj = LayoutObj::new(Frame::left_aligned(theme::label_title(), title, page))?;
Ok(obj.into())
@ -663,7 +664,7 @@ extern "C" fn new_confirm_homescreen(n_args: usize, args: *const Obj, kwargs: *m
_ => return Err(value_error!("Invalid image.")),
};
let buttons = Button::cancel_confirm_text(None, Some("CHANGE"));
let buttons = Button::cancel_confirm_text(None, Some(tr("buttons__change")));
let obj = LayoutObj::new(Frame::centered(
theme::label_title(),
title,
@ -683,12 +684,17 @@ extern "C" fn new_confirm_reset_device(n_args: usize, args: *const Obj, kwargs:
let paragraphs = Paragraphs::new([
Paragraph::new(
&theme::TEXT_NORMAL,
StrBuffer::from(
"By continuing you agree\nto Trezor Company's\nterms and conditions.\r",
),
StrBuffer::from(tr("reset__by_continuing")),
)
.with_bottom_padding(17), // simulating a carriage return
Paragraph::new(
&theme::TEXT_NORMAL,
StrBuffer::from(tr("reset__more_info_at")),
),
Paragraph::new(
&theme::TEXT_DEMIBOLD,
StrBuffer::from(tr("reset__tos_link")),
),
Paragraph::new(&theme::TEXT_NORMAL, StrBuffer::from("More info at")),
Paragraph::new(&theme::TEXT_DEMIBOLD, StrBuffer::from("trezor.io/tos")),
]);
let buttons = Button::cancel_confirm(
Button::with_icon(theme::ICON_CANCEL),
@ -840,23 +846,23 @@ extern "C" fn new_confirm_modify_output(n_args: usize, args: *const Obj, kwargs:
let amount_new: StrBuffer = kwargs.get(Qstr::MP_QSTR_amount_new)?.try_into()?;
let description = if sign < 0 {
"Decrease amount by:"
tr("modify_amount__decrease_amount")
} else {
"Increase amount by:"
tr("modify_amount__increase_amount")
};
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_NORMAL, description.into()),
Paragraph::new(&theme::TEXT_MONO, amount_change),
Paragraph::new(&theme::TEXT_NORMAL, "New amount:".into()),
Paragraph::new(&theme::TEXT_NORMAL, tr("modify_amount__new_amount").into()),
Paragraph::new(&theme::TEXT_MONO, amount_new),
]);
let obj = LayoutObj::new(Frame::left_aligned(
theme::label_title(),
"MODIFY AMOUNT",
tr("modify_amount__title"),
ButtonPage::<_, StrBuffer>::new(paragraphs, theme::BG)
.with_cancel_confirm(Some("^".into()), Some("CONTINUE".into())),
.with_cancel_confirm(Some("^".into()), Some(tr("buttons__continue").into())),
))?;
Ok(obj.into())
};
@ -871,12 +877,20 @@ extern "C" fn new_confirm_modify_fee(n_args: usize, args: *const Obj, kwargs: *m
let total_fee_new: StrBuffer = kwargs.get(Qstr::MP_QSTR_total_fee_new)?.try_into()?;
let (description, change, total_label) = match sign {
s if s < 0 => ("Decrease fee by:", user_fee_change, "New transaction fee:"),
s if s > 0 => ("Increase fee by:", user_fee_change, "New transaction fee:"),
s if s < 0 => (
tr("modify_fee__decrease_fee"),
user_fee_change,
tr("modify_fee__new_transaction_fee"),
),
s if s > 0 => (
tr("modify_fee__increase_fee"),
user_fee_change,
tr("modify_fee__new_transaction_fee"),
),
_ => (
"Fee did not change.\r",
tr("modify_fee__no_change"),
StrBuffer::empty(),
"Transaction fee:",
tr("modify_fee__transaction_fee"),
),
};
@ -910,7 +924,7 @@ fn new_show_modal(
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let value: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_value, StrBuffer::empty())?;
let description: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_description, StrBuffer::empty())?;
let button: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_button, "CONTINUE".into())?;
let button: StrBuffer = kwargs.get_or(Qstr::MP_QSTR_button, tr("buttons__continue").into())?;
let allow_cancel: bool = kwargs.get_or(Qstr::MP_QSTR_allow_cancel, true)?;
let time_ms: u32 = kwargs.get_or(Qstr::MP_QSTR_time_ms, 0)?;
@ -1004,7 +1018,7 @@ extern "C" fn new_confirm_fido(n_args: usize, args: *const Obj, kwargs: *mut Map
let controls = Button::cancel_confirm(
Button::with_icon(theme::ICON_CANCEL),
Button::with_text("CONFIRM").styled(theme::button_confirm()),
Button::with_text(tr("buttons__confirm")).styled(theme::button_confirm()),
true,
);
@ -1061,9 +1075,9 @@ extern "C" fn new_show_info(n_args: usize, args: *const Obj, kwargs: *mut Map) -
extern "C" fn new_show_mismatch(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let description: StrBuffer = "Please contact Trezor support at".into();
let url: StrBuffer = "trezor.io/support".into();
let button = "QUIT";
let description: StrBuffer = tr("addr_mismatch__contact_support_at").into();
let url: StrBuffer = tr("addr_mismatch__support_url").into();
let button = tr("buttons__quit");
let icon = BlendedImage::new(
theme::IMAGE_BG_OCTAGON,
@ -1211,15 +1225,15 @@ extern "C" fn new_confirm_coinjoin(n_args: usize, args: *const Obj, kwargs: *mut
let max_feerate: StrBuffer = kwargs.get(Qstr::MP_QSTR_max_feerate)?.try_into()?;
let paragraphs = Paragraphs::new([
Paragraph::new(&theme::TEXT_NORMAL, "Max rounds".into()),
Paragraph::new(&theme::TEXT_NORMAL, tr("coinjoin__max_rounds").into()),
Paragraph::new(&theme::TEXT_MONO, max_rounds),
Paragraph::new(&theme::TEXT_NORMAL, "Max mining fee".into()),
Paragraph::new(&theme::TEXT_NORMAL, tr("coinjoin__max_mining_fee").into()),
Paragraph::new(&theme::TEXT_MONO, max_feerate),
]);
let obj = LayoutObj::new(Frame::left_aligned(
theme::label_title(),
"AUTHORIZE COINJOIN",
tr("coinjoin__title"),
ButtonPage::<_, StrBuffer>::new(paragraphs, theme::BG).with_hold(),
))?;
Ok(obj.into())
@ -1234,7 +1248,7 @@ extern "C" fn new_request_pin(n_args: usize, args: *const Obj, kwargs: *mut Map)
let allow_cancel: bool = kwargs.get_or(Qstr::MP_QSTR_allow_cancel, true)?;
let warning: bool = kwargs.get_or(Qstr::MP_QSTR_wrong_pin, false)?;
let warning = if warning {
Some("Wrong PIN".into())
Some(tr("pin__wrong_pin").into())
} else {
None
};
@ -1399,9 +1413,9 @@ extern "C" fn new_confirm_recovery(n_args: usize, args: *const Obj, kwargs: *mut
.with_spacing(theme::RECOVERY_SPACING);
let notification = if dry_run {
"BACKUP CHECK"
tr("recovery__title_dry_run")
} else {
"RECOVER WALLET"
tr("recovery__title")
};
let obj = if info_button {
@ -1410,7 +1424,7 @@ extern "C" fn new_confirm_recovery(n_args: usize, args: *const Obj, kwargs: *mut
notification,
Dialog::new(
paragraphs,
Button::cancel_info_confirm("CONTINUE", "MORE INFO"),
Button::cancel_info_confirm(tr("buttons__continue"), tr("buttons__more_info")),
),
))?
} else {
@ -1429,14 +1443,14 @@ extern "C" fn new_select_word_count(n_args: usize, args: *const Obj, kwargs: *mu
let block = move |_args: &[Obj], kwargs: &Map| {
let dry_run: bool = kwargs.get(Qstr::MP_QSTR_dry_run)?.try_into()?;
let title = if dry_run {
"BACKUP CHECK"
tr("recovery__title_dry_run")
} else {
"RECOVER WALLET"
tr("recovery__title")
};
let paragraphs = Paragraphs::new(Paragraph::new(
&theme::TEXT_DEMIBOLD,
StrBuffer::from("Select the number of words in your backup."),
StrBuffer::from(tr("recovery__select_num_of_words")),
));
let obj = LayoutObj::new(Frame::left_aligned(
@ -1460,7 +1474,7 @@ extern "C" fn new_show_group_share_success(
let obj = LayoutObj::new(IconDialog::new_shares(
lines,
theme::button_bar(Button::with_text("CONTINUE").map(|msg| {
theme::button_bar(Button::with_text(tr("buttons__continue")).map(|msg| {
(matches!(msg, ButtonMsg::Clicked)).then(|| CancelConfirmMsg::Confirmed)
})),
))?;
@ -1483,9 +1497,9 @@ extern "C" fn new_show_remaining_shares(n_args: usize, args: *const Obj, kwargs:
let obj = LayoutObj::new(Frame::left_aligned(
theme::label_title(),
"REMAINING SHARES",
tr("recovery__title_remaining_shares"),
ButtonPage::<_, StrBuffer>::new(paragraphs.into_paragraphs(), theme::BG)
.with_cancel_confirm(None, Some("CONTINUE".into()))
.with_cancel_confirm(None, Some(tr("buttons__continue").into()))
.with_confirm_style(theme::button_default())
.without_cancel(),
))?;
@ -1600,16 +1614,16 @@ extern "C" fn new_confirm_firmware_update(
let description: StrBuffer = kwargs.get(Qstr::MP_QSTR_description)?.try_into()?;
let fingerprint: StrBuffer = kwargs.get(Qstr::MP_QSTR_fingerprint)?.try_into()?;
let title_str = StrBuffer::from("UPDATE FIRMWARE");
let title_str = StrBuffer::from(tr("firmware_update__title"));
let title = Label::left_aligned(title_str, theme::TEXT_BOLD).vertically_centered();
let msg = Label::left_aligned(description, theme::TEXT_NORMAL);
let left = Button::with_text("CANCEL").styled(theme::button_default());
let right = Button::with_text("INSTALL").styled(theme::button_confirm());
let left = Button::with_text(tr("buttons__cancel")).styled(theme::button_default());
let right = Button::with_text(tr("buttons__install")).styled(theme::button_confirm());
let obj = LayoutObj::new(
Confirm::new(theme::BG, left, right, ConfirmTitle::Text(title), msg).with_info(
"FW FINGERPRINT".into(),
tr("firmware_update__title_fingerprint").into(),
fingerprint,
theme::button_moreinfo(),
),

@ -0,0 +1,55 @@
import subprocess
import tempfile
from pathlib import Path
import json
import sys
import os
HERE = Path(__file__).parent
def download() -> None:
with tempfile.TemporaryDirectory() as temp_dir:
command = f"crowdin download --all --verbose --token $CROWDIN_TOKEN --base-path={temp_dir}"
print("command", command)
subprocess.run(command, shell=True, check=True)
for directory in Path(temp_dir).iterdir():
print("directory", directory)
lang_name = directory.name
en_file = directory / "en.json"
if not en_file.exists():
print("Skipping - no en.json inside", lang_name)
continue
print("Processing", lang_name)
data = json.loads(en_file.read_text())
lang_file = HERE / f"{lang_name}.json"
if not lang_file.exists():
print("Skipping - no lang_file on our side", lang_name)
continue
lang_file_data = json.loads(lang_file.read_text())
lang_file_data["translations"] = data["translations"]
lang_file.write_text(json.dumps(lang_file_data, indent=2, sort_keys=True, ensure_ascii=False) + "\n")
print("Translations updated", lang_name)
def upload() -> None:
command = "crowdin upload sources --token $CROWDIN_TOKEN"
print("command", command)
subprocess.run(command, shell=True, check=True)
if __name__ == "__main__":
if not os.environ.get("CROWDIN_TOKEN"):
print("CROWDIN_TOKEN env variable not set")
sys.exit(1)
if "download" in sys.argv:
download()
elif "upload" in sys.argv:
upload()
else:
print("Usage: python crowdin.py [download|upload]")
sys.exit(1)

@ -0,0 +1,12 @@
"project_id": "625982"
"base_path": "."
# api_token is being supplied on via `--token $CROWDIN_TOKEN` CLI option
"base_url": "https://api.crowdin.com"
"preserve_hierarchy": true
files: [
{
"source": "en.json",
"translation": "%two_letters_code%/%original_file_name%",
}
]

@ -0,0 +1,860 @@
{
"font": {
"Safe 3": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_cs.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_cs.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_cs.json",
"4_FONT_BIG": "font_unifont_regular_16_cs.json",
"5_FONT_DEMIBOLD": "font_unifont_bold_16_cs.json"
},
"T": {
"1_FONT_NORMAL": "font_tthoves_regular_21_cs.json",
"2_FONT_BOLD": "font_tthoves_bold_17_cs.json",
"3_FONT_MONO": "font_robotomono_medium_20_cs.json",
"4_FONT_BIG": null,
"5_FONT_DEMIBOLD": "font_tthoves_demibold_21_cs.json"
}
},
"header": {
"change_language_prompt": "Zmenit jazyk na cestinu?",
"change_language_title": "ZMENA JAZYKA",
"language": "cs",
"version": "2.6.5"
},
"translations": {
"addr_mismatch__contact_support_at": "Prosím, obraťte se na podporu Trezor na",
"addr_mismatch__key_mismatch": "Nesouhlasí klíč?",
"addr_mismatch__mismatch": "Nesouhlasí adresa?",
"addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__title": "NESOUHLASÍ ADRESA?",
"addr_mismatch__title_key_mismatch": "NESOUHLASÍ KLÍČ?",
"addr_mismatch__wrong_derivation_path": "Špatná derivační cesta pro zvolený účet.",
"addr_mismatch__xpub_mismatch": "Nesouhlasí XPUB?",
"address__public_key": "Veřejný klíč",
"address__title_cosigner": "SPOLUPODEPSÁNÍ",
"address__title_receive_address": "ADRESA PRO PŘIJETÍ",
"address__title_yours": "VAŠE",
"address_details__derivation_path": "Cesta odvození:",
"address_details__title_receive_address": "PŘIJMOUT ADRESU",
"address_details__title_receiving_to": "PŘIJÍMÁNÍ DO",
"authenticate__confirm_template": "Povolit připojený počítač potvrdit váš {} je pravý?",
"authenticate__header": "Ověřené zařízení",
"auto_lock__change_template": "Automaticky zamknout Trezor po {} nečinnosti?",
"auto_lock__title": "AUTO-ZÁMKOVÁNÍ",
"backup__can_back_up_anytime": "Svůj Trezor můžete zálohovat jednou, kdykoli.",
"backup__it_should_be_backed_up": "Měli byste nyní zálohovat svou novou peněženku.",
"backup__it_should_be_backed_up_now": "Proveďte zálohu!",
"backup__new_wallet_created": "Nová peněženka vytvořena.",
"backup__new_wallet_successfully_created": "Nová peněženka úspěšně vytvořena.",
"backup__recover_anytime": "Kdykoli můžete použít zálohu k obnovení peněženky.",
"backup__title_backup_wallet": "ZÁLOHOVAT PENĚŽENKU",
"backup__title_skip": "PŘESKOČIT ZÁLOHU",
"backup__want_to_skip": "Jste si jisti, že chcete přeskočit zálohu?",
"binance__buy": "Koupit",
"binance__confirm_cancel": "Potvrdit zrušení",
"binance__confirm_input": "Potvrdit vstup",
"binance__confirm_order": "Potvrdit objednávku",
"binance__confirm_output": "Potvrdit výstup",
"binance__order_id": "ID objednávky:",
"binance__pair": "Pár:",
"binance__price": "Cena:",
"binance__quantity": "Množství:",
"binance__sell": "Prodat",
"binance__sender_address": "Adresa odesílatele:",
"binance__side": "Strana:",
"bitcoin__commitment_data": "Data závazku:",
"bitcoin__confirm_locktime": "Potvrdit locktime",
"bitcoin__create_proof_of_ownership": "Chcete vytvořit důkaz vlastnictví?",
"bitcoin__high_mining_fee_template": "Poplatek za těžbu\n{}\nje neočekávaně vysoký.",
"bitcoin__locktime_no_effect": "Locktime je nastaven, ale nebude mít žádný účinek.",
"bitcoin__locktime_set_to": "Locktime nastaven:",
"bitcoin__locktime_set_to_blockheight": "Locktime nastaven na výšku bloku:",
"bitcoin__lot_of_change_outputs": "Mnoho výstupů změn.",
"bitcoin__multiple_accounts": "Více účtů",
"bitcoin__new_fee_rate": "Nová sazba poplatku:",
"bitcoin__simple_send_of": "Jednoduché odeslání",
"bitcoin__ticket_amount": "Částka lístku:",
"bitcoin__title_confirm_details": "POTVRDIT DETAILY",
"bitcoin__title_finalize_transaction": "DOKONČIT TRANSAKCI",
"bitcoin__title_high_mining_fee": "VYSOKÝ POPLATEK ZA TĚŽBU",
"bitcoin__title_meld_transaction": "SPOJIT TRANSAKCE",
"bitcoin__title_modify_amount": "UPRAVIT ČÁSTKU",
"bitcoin__title_payjoin": "PAYJOIN",
"bitcoin__title_proof_of_ownership": "DŮKAZ VLASTNICTVÍ",
"bitcoin__title_purchase_ticket": "KOUPIT LÍSTEK",
"bitcoin__title_update_transaction": "AKTUALIZOVAT TRANSAKCI",
"bitcoin__unknown_path": "Neznámá cesta",
"bitcoin__unknown_transaction": "Neznámá transakce",
"bitcoin__unusually_high_fee": "Neobvykle vysoký poplatek.",
"bitcoin__unverified_external_inputs": "Transakce obsahuje neověřené vnější vstupy.",
"bitcoin__valid_signature": "Podpis je platný.",
"bitcoin__voting_rights": "Právo hlasovat pro:",
"buttons__abort": "ZRUŠIT",
"buttons__access": "PŘÍSTUP",
"buttons__again": "ZNOVU",
"buttons__allow": "DOVOLIT",
"buttons__back": "ZADNÍ",
"buttons__back_up": "ZÁLOHOVAT",
"buttons__cancel": "ZRUŠIT",
"buttons__change": "ZMĚNIT",
"buttons__check": "ZKONTROLOVAT",
"buttons__check_again": "ZKONTROLOVAT ZNOVU",
"buttons__close": "ZAVŘÍT",
"buttons__confirm": "POTVRDIT",
"buttons__continue": "POKRAČOVAT",
"buttons__details": "DETAILY",
"buttons__enable": "POVOLIT",
"buttons__enter": "ZADAT",
"buttons__enter_share": "ZADAT PODÍL",
"buttons__export": "EXPORTOVAT",
"buttons__format": "FORMÁTOVAT",
"buttons__go_back": "VRÁTIT",
"buttons__hold_to_confirm": "PODRŽTE",
"buttons__info": "INFORMACE",
"buttons__install": "NAINSTALUJTE",
"buttons__more_info": "VÍCE INFORMACÍ",
"buttons__ok_i_understand": "OK, CHÁPU",
"buttons__purchase": "KOUPI",
"buttons__quit": "UKONČIT",
"buttons__restart": "RESTARTOVAT",
"buttons__retry": "ZNOVU",
"buttons__select": "VYBRAT",
"buttons__set": "NASTAVIT",
"buttons__show_all": "UKÁZAT VŠE",
"buttons__show_details": "UKÁZAT DETAILY",
"buttons__show_words": "UKÁZAT SLOVA",
"buttons__skip": "PŘESKOČIT",
"buttons__try_again": "ZKUSIT ZNOVU",
"buttons__turn_off": "VYPNOUT",
"buttons__turn_on": "ZAPNOUT",
"cardano__addr_base": "Základ",
"cardano__addr_enterprise": "Podnik",
"cardano__addr_legacy": "Dědictví",
"cardano__addr_pointer": "Ukazatel",
"cardano__addr_reward": "Odměna",
"cardano__address_no_staking": "adresa - žádné odměny za stávkování.",
"cardano__amount_burned_decimals_unknown": "Spálená částka:",
"cardano__amount_minted_decimals_unknown": "Vytvořená částka:",
"cardano__amount_sent_decimals_unknown": "Odeslána částka (desetinná čára neznámá):",
"cardano__anonymous_pool": "Pool nemá metadata (anonymní pool)",
"cardano__asset_fingerprint": "Otisk aktiv:",
"cardano__auxiliary_data_hash": "Hash pomocných dat:",
"cardano__block": "Blok",
"cardano__catalyst": "Katalyzátor",
"cardano__certificate": "Certifikát",
"cardano__certificate_path": "Cesta certifikátu",
"cardano__change_output": "Změnit výstup",
"cardano__change_output_path": "Cesta změny výstupu",
"cardano__change_output_staking_path": "Cesta stávkování změny výstupu",
"cardano__check_all_items": "Pečlivě zkontrolujte všechny položky.",
"cardano__choose_level_of_details": "Vyberte úroveň detailů:",
"cardano__collateral_input_id": "ID vstupu zajištění:",
"cardano__collateral_input_index": "Index vstupu zajištění:",
"cardano__collateral_output_contains_tokens": "Výstup zajištění obsahuje tokeny.",
"cardano__collateral_return": "Návrat zajištění",
"cardano__confirm": "Potvrdit:",
"cardano__confirm_signing_stake_pool": "Potvrdit podepsání registrace stávkového poolu jako vlastníka.",
"cardano__confirm_transaction": "Potvrdit transakci",
"cardano__confirming_a_multisig_transaction": "Potvrzování multisig transakce.",
"cardano__confirming_pool_registration": "Potvrzení registrace stávkového poolu.",
"cardano__confirming_transction": "Potvrzení transakce.",
"cardano__cost": "Náklady",
"cardano__credential_mismatch": "Pověření neodpovídá platebnímu pověření.",
"cardano__datum_hash": "Datum hash:",
"cardano__delegating_to": "Delegace na:",
"cardano__for_account_and_index_template": "pro účet {} a index {}:",
"cardano__for_account_template": "pro účet {}:",
"cardano__for_key_hash": "pro hash klíče:",
"cardano__for_script": "pro skript:",
"cardano__inline_datum": "Vložená data",
"cardano__input_id": "ID vstupu:",
"cardano__input_index": "Index vstupu:",
"cardano__intro_text_change": "Následující adresa je adresa změny. Její",
"cardano__intro_text_owned_by_device": "Následující adresa patří tomuto zařízení. Její",
"cardano__intro_text_registration_payment": "Adresa platby za registraci hlasovacího klíče patří tomuto zařízení. Její",
"cardano__key_hash": "hash klíče",
"cardano__margin": "Marže",
"cardano__multisig_path": "cesta multi-podpisu",
"cardano__nested_scripts_template": "Obsahuje {} vnořené skripty.",
"cardano__network": "Síť:",
"cardano__no_output_tx": "Transakce nemá výstupy, síť nelze ověřit.",
"cardano__nonce": "Nonce:",
"cardano__other": "jiné",
"cardano__path": "cesta",
"cardano__pledge": "Záruka",
"cardano__pointer": "ukazatel",
"cardano__policy_id": "ID politiky:",
"cardano__pool_metadata_hash": "Hash metadat poolu:",
"cardano__pool_metadata_url": "URL metadat poolu:",
"cardano__pool_owner": "Vlastník poolu:",
"cardano__pool_owner_path": "Cesta stávkování vlastníka poolu",
"cardano__pool_reward_account": "Účet odměn poolu:",
"cardano__reference_input_id": "ID referenčního vstupu:",
"cardano__reference_input_index": "Index referenčního vstupu:",
"cardano__reference_script": "Referenční skript",
"cardano__required_signer": "Požadovaný podepsaný",
"cardano__reward": "odměna",
"cardano__reward_address": "Adresa je odměna.",
"cardano__reward_eligibility_warning": "Varování: Adresa není platná adresa pro platby, není způsobilá pro odměny.",
"cardano__rewards_go_to": "Odměny jdou na:",
"cardano__script": "skript",
"cardano__script_all": "Vše",
"cardano__script_any": "Jakýkoliv",
"cardano__script_data_hash": "Hash dat skriptu:",
"cardano__script_hash": "Skript hash:",
"cardano__script_invalid_before": "Neplatné před",
"cardano__script_invalid_hereafter": "Neplatné odteď",
"cardano__script_key": "Klíč",
"cardano__script_n_of_k": "N z K",
"cardano__script_reward": "odměna skriptu",
"cardano__sending": "Odesílání",
"cardano__show_simple": "Zobrazit jednoduše",
"cardano__sign_tx_path_template": "Podepsat transakci pomocí {}:",
"cardano__stake_delegation": "Delegace stávky",
"cardano__stake_deregistration": "Zrušení registrace stávkového klíče",
"cardano__stake_pool_registration": "Registrace stávkového poolu",
"cardano__stake_pool_registration_pool_id": "Registrace stávkového poolu\nID poolu:",
"cardano__stake_registration": "Registrace stávkového klíče",
"cardano__staking_key_for_account": "Stávkový klíč pro účet",
"cardano__to_pool": "do poolu:",
"cardano__token_minting_path": "cesta ražby tokenů",
"cardano__total_collateral": "Celkové zajištění",
"cardano__transaction": "Transakce",
"cardano__transaction_contains_minting_or_burning": "Transakce obsahuje ražbu nebo spálení tokenů.",
"cardano__transaction_contains_script_address_no_datum": "Následující výstup transakce obsahuje skriptovou adresu, ale neobsahuje data.",
"cardano__transaction_fee": "Poplatek za transakci:",
"cardano__transaction_id": "ID transakce:",
"cardano__transaction_no_collateral_input": "Transakce neobsahuje vstupy zajištění. Skript Plutus nebude moci běžet.",
"cardano__transaction_no_script_data_hash": "Transakce neobsahuje hash dat skriptu. Skript Plutus nebude moci běžet.",
"cardano__transaction_output_contains_tokens": "Následující výstup transakce obsahuje tokeny.",
"cardano__ttl": "TTL:",
"cardano__unknown_collateral_amount": "Neznámá částka zajištění.",
"cardano__unusual_path": "Neobvyklá cesta.",
"cardano__valid_since": "Platné od:",
"cardano__verify_script": "Ověřit skript",
"cardano__vote_key_registration": "Registrace hlasovacího klíče (CIP-36)",
"cardano__vote_public_key": "Veřejný klíč hlasování:",
"cardano__voting_purpose": "Účel hlasování:",
"cardano__warning": "Varování",
"cardano__weight": "Váha:",
"cardano__withdrawal_for_address_template": "Potvrdit výběr pro adresu {}:",
"cardano__witness_path": "Cesta svědka",
"cardano__x_of_y_signatures_template": "Vyžaduje {} z {} podpisů.",
"coinjoin__access_account": "Přístup k vašemu coinjoin účtu?",
"coinjoin__do_not_disconnect": "Neodpojujte svůj Trezor!",
"coinjoin__max_mining_fee": "Maximální poplatek za těžbu:",
"coinjoin__max_rounds": "Maximální počet kol:",
"coinjoin__title": "AUTORIZOVAT COINJOIN",
"coinjoin__title_do_not_disconnect": "NEODPOJUJTE SVŮJ TREZOR!",
"coinjoin__title_progress": "COINJOIN V PRŮBĚHU",
"coinjoin__waiting_for_others": "Čekání na ostatní",
"confirm_total__fee_rate": "Sazba poplatku:",
"confirm_total__sending_from_account": "Odesílání z účtu:",
"confirm_total__title_fee": "INFORMACE O POPLATKU",
"confirm_total__title_sending_from": "ODESLÁNÍ OD",
"debug__loading_seed": "Načítání seedu",
"debug__loading_seed_not_recommended": "Načítání soukromého seedu není doporučeno.",
"device_name__change_template": "Změnit název zařízení na {}?",
"device_name__title": "NÁZEV ZAŘÍZENÍ",
"entropy__send": "Opravdu chcete odeslat entropii?",
"entropy__title": "VNITŘNÍ ENTROPIE",
"entropy__title_confirm": "POTVRDIT ENTROPII",
"eos__about_to_sign_template": "Chystáte se podepsat {}.",
"eos__action_name": "Název akce:",
"eos__arbitrary_data": "Libovolná data",
"eos__buy_ram": "Koupit RAM",
"eos__bytes": "Byty:",
"eos__cancel_vote": "Zrušit hlasování",
"eos__checksum": "Kontrolní součet:",
"eos__code": "Kód:",
"eos__contract": "Smlouva:",
"eos__cpu": "CPU:",
"eos__creator": "Tvůrce:",
"eos__delegate": "Delegovat",
"eos__delete_auth": "Smazat ověření",
"eos__from": "Od:",
"eos__link_auth": "Propojit ověření",
"eos__memo": "Poznámka",
"eos__name": "Jméno:",
"eos__net": "NET:",
"eos__new_account": "Nový účet",
"eos__owner": "Vlastník:",
"eos__parent": "Rodič:",
"eos__payer": "Plátce:",
"eos__permission": "Oprávnění:",
"eos__proxy": "Proxy:",
"eos__receiver": "Příjemce:",
"eos__refund": "Vrátit peníze",
"eos__requirement": "Požadavek:",
"eos__sell_ram": "Prodat RAM",
"eos__sender": "Odesílatel:",
"eos__sign_transaction": "Podepsat transakci",
"eos__threshold": "Práh:",
"eos__to": "Do:",
"eos__transfer": "Převod:",
"eos__type": "Typ:",
"eos__undelegate": "Zrušit delegaci",
"eos__unlink_auth": "Odpojit ověření",
"eos__update_auth": "Aktualizovat ověření",
"eos__vote_for_producers": "Hlasovat pro producenty",
"eos__vote_for_proxy": "Hlasovat pro proxy",
"eos__voter": "Volitel:",
"ethereum__amount_sent": "Odeslaná částka:",
"ethereum__contract": "Smlouva:",
"ethereum__data_size_template": "Velikost: {} bajtů",
"ethereum__gas_limit": "Limit plynu:",
"ethereum__gas_price": "Cena plynu:",
"ethereum__max_gas_price": "Maximální cena plynu:",
"ethereum__name_and_version": "Jméno a verze",
"ethereum__new_contract": "nová smlouva?",
"ethereum__no_message_field": "Žádné pole zprávy",
"ethereum__priority_fee": "Prioritní poplatek:",
"ethereum__show_full_array": "Zobrazit celé pole",
"ethereum__show_full_domain": "Zobrazit celou doménu",
"ethereum__show_full_message": "Zobrazit celou zprávu",
"ethereum__show_full_struct": "Zobrazit celou strukturu",
"ethereum__sign_eip712": "Opravdu podepsat data podle EIP-712?",
"ethereum__title_confirm_data": "POTVRDIT DATA",
"ethereum__title_confirm_domain": "POTVRDIT DOMÉNU",
"ethereum__title_confirm_message": "POTVRDIT ZPRÁVU",
"ethereum__title_confirm_struct": "POTVRDIT STRUKTURU",
"ethereum__title_confirm_typed_data": "POTVRDIT ZAPSANÁ DATA",
"ethereum__title_signing_address": "ADRESA PRO PODEPSÁNÍ",
"ethereum__units_template": "{} jednotek",
"ethereum__unknown_token": "Neznámý token",
"ethereum__valid_signature": "Podpis je platný.",
"experimental_mode__enable": "Povolit experimentální funkce?",
"experimental_mode__only_for_dev": "Pouze pro vývoj a beta testování!",
"experimental_mode__title": "EXPERIMENTÁLNÍ REŽIM",
"fido__already_registered": "Již zaregistrováno",
"fido__device_already_registered": "Toto zařízení je již zaregistrováno s touto aplikací.",
"fido__device_already_registered_with_template": "Toto zařízení je již zaregistrováno s {}.",
"fido__device_not_registered": "Toto zařízení není zaregistrováno s touto aplikací.",
"fido__does_not_belong": "Kredence nepatří tomuto autentikátoru.",
"fido__erase_credentials": "Opravdu chcete smazat všechny pověření?",
"fido__export_credentials": "Exportovat informace z tohoto autentikátoru?",
"fido__not_registered": "Není zaregistrováno",
"fido__not_registered_with_template": "Toto zařízení není zaregistrováno s\n{}.",
"fido__please_enable_pin_protection": "Prosím, povolte ochranu PIN.",
"fido__title_authenticate": "FIDO2 AUTENTIZACE",
"fido__title_import_credential": "IMPORTOVAT KREDENCE",
"fido__title_list_credentials": "UKAŽ KREDENCE",
"fido__title_register": "FIDO2 REGISTRACE",
"fido__title_remove_credential": "ODSTRANIT KREDENCE",
"fido__title_reset": "RESET FIDO2",
"fido__title_u2f_auth": "U2F AUTENTIZACE",
"fido__title_u2f_register": "U2F REGISTRACE",
"fido__title_verify_user": "FIDO2 OVĚŘIT UŽIVATELE",
"fido__unable_to_verify_user": "Nelze ověřit uživatele.",
"fido__wanna_erase_credentials": "Opravdu chcete smazat všechny přihlašovací údaje?",
"firmware_update__title": "AKTUALIZOVAT FIRMWARE",
"firmware_update__title_fingerprint": "FW OTISKY PRSTŮ",
"homescreen__click_to_connect": "Klikněte pro připojení",
"homescreen__click_to_unlock": "Klikněte pro odemčení",
"homescreen__title_backup_failed": "ZÁLOHA SELHALA",
"homescreen__title_backup_needed": "ZÁLOHA POTŘEBNÁ",
"homescreen__title_coinjoin_authorized": "COINJOIN AUTORIZOVÁNO",
"homescreen__title_experimental_mode": "EXPERIMENTÁLNÍ REŽIM",
"homescreen__title_hold_to_lock": "DRŽET PRO ZAMKNUTÍ",
"homescreen__title_no_usb_connection": "ŽÁDNÉ USB PŘIPOJENÍ",
"homescreen__title_pin_not_set": "PIN NEBYL NASTAVEN",
"homescreen__title_seedless": "BEZ SEMÍNKA",
"homescreen__title_set": "ZMĚNIT ÚVODNÍ OBRAZOVKU?",
"inputs__back": "ZPĚT",
"inputs__cancel": "ZRUŠIT",
"inputs__delete": "SMAZAT",
"inputs__enter": "ZADAT",
"inputs__return": "VRÁTIT",
"inputs__show": "UKÁZAT",
"inputs__space": "MEZERNÍK",
"joint__title": "SPOLEČNÁ TRANSAKCE",
"joint__to_the_total_amount": "Celkové částce:",
"joint__you_are_contributing": "Přispíváte:",
"lockscreen__tap_to_connect": "Klepněte pro připojení",
"lockscreen__tap_to_unlock": "Klepněte pro odemčení",
"lockscreen__title_locked": "ZAMKNUTO",
"lockscreen__title_not_connected": "NEPŘIPOJENO",
"misc__decrypt_value": "Dešifrovat hodnotu",
"misc__encrypt_value": "Zašifrovat hodnotu",
"misc__title_suite_labeling": "OZNAČENÍ SUITE",
"modify_amount__decrease_amount": "Snížit částku o:",
"modify_amount__increase_amount": "Zvýšit částku o:",
"modify_amount__new_amount": "Nová částka:",
"modify_amount__title": "UPRAVIT ČÁSTKU",
"modify_fee__decrease_fee": "Snížit poplatek o:",
"modify_fee__fee_rate": "Sazba poplatku:",
"modify_fee__increase_fee": "Zvýšit poplatek o:",
"modify_fee__new_transaction_fee": "Nový transakční poplatek:",
"modify_fee__no_change": "Váš poplatek se nezměnil.",
"modify_fee__title": "UPRAVIT POPLATEK",
"modify_fee__transaction_fee": "Transakční poplatek:",
"monero__confirm_export": "Potvrdit export",
"monero__confirm_ki_sync": "Potvrdit synchronizaci klíčových obrázků",
"monero__confirm_refresh": "Potvrdit obnovení",
"monero__confirm_unlock_time": "Potvrdit čas odemknutí",
"monero__hashing_inputs": "Hašování vstupů",
"monero__payment_id": "ID platby",
"monero__postprocessing": "Dokončování zpracování...",
"monero__processing": "Zpracovávání...",
"monero__processing_inputs": "Zpracování vstupů",
"monero__processing_outputs": "Zpracování výstupů",
"monero__signing": "Podepisování...",
"monero__signing_inputs": "Podepisování vstupů",
"monero__unlock_time_set_template": "Čas odemknutí této transakce je nastaven na {}",
"monero__wanna_export_tx_der": "Opravdu chcete exportovat tx_der pro tx_proof?",
"monero__wanna_export_tx_key": "Opravdu chcete exportovat tx_key?",
"monero__wanna_export_watchkey": "Opravdu chcete exportovat pouze sledovací pověření?",
"monero__wanna_start_refresh": "Opravdu chcete spustit obnovení?",
"monero__wanna_sync_key_images": "Opravdu chcete synchronizovat klíčové obrázky?",
"nem__absolute": "absolutní",
"nem__activate": "Aktivovat",
"nem__add": "Přidat",
"nem__confirm_action": "Potvrdit akci",
"nem__confirm_address": "Potvrdit adresu",
"nem__confirm_creation_fee": "Potvrdit poplatek za vytvoření",
"nem__confirm_mosaic": "Potvrdit mozaiku",
"nem__confirm_multisig_fee": "Potvrdit vícepodepisový poplatek",
"nem__confirm_namespace": "Potvrdit jmenný prostor",
"nem__confirm_payload": "Potvrdit náklad",
"nem__confirm_properties": "Potvrdit vlastnosti",
"nem__confirm_rental_fee": "Potvrdit nájemné",
"nem__confirm_transfer_of": "Potvrdit převod",
"nem__convert_account_to_multisig": "Převést účet na vícepodepisový účet?",
"nem__cosign_transaction_for": "Spolupodepsat transakci pro",
"nem__cosignatory": " spolupodepisovatel",
"nem__create_mosaic": "Vytvořit mozaiku",
"nem__create_namespace": "Vytvořit jmenný prostor",
"nem__deactivate": "Deaktivovat",
"nem__decrease": "Snížit",
"nem__description": "Popis:",
"nem__divisibility_and_levy_cannot_be_shown": "Dělitelnost a zpoplatnění nelze zobrazit pro neznámé mozaiky",
"nem__encrypted": "Zašifrované:",
"nem__final_confirm": "Konečné potvrzení",
"nem__immutable": "neměnitelný",
"nem__increase": "Zvýšit",
"nem__initial_supply": "Počáteční zásoba:",
"nem__initiate_transaction_for": "Zahájit transakci pro",
"nem__levy_divisibility": "Dělitelnost zpoplatnění:",
"nem__levy_fee": "Poplatek za zpoplatnění:",
"nem__levy_fee_of": "Poplatek ze zpoplatnění:",
"nem__levy_mosaic": "Mozaika zpoplatnění:",
"nem__levy_namespace": "Jmenný prostor zpoplatnění:",
"nem__levy_recipient": "Příjemce zpoplatnění:",
"nem__levy_type": "Typ zpoplatnění:",
"nem__modify_supply_for": "Upravit zásobu pro",
"nem__modify_the_number_of_cosignatories_by": "Upravit počet spolupodepisovatelů o ",
"nem__mutable": "měnitelný",
"nem__of": "z",
"nem__percentile": "percentil",
"nem__raw_units_template": "{} surové jednotky",
"nem__remote_harvesting": " vzdálená sklizeň?",
"nem__remove": "Odebrat",
"nem__set_minimum_cosignatories_to": "Nastavit minimální počet spolupodepisovatelů na ",
"nem__sign_tx_fee_template": "Podepsat tuto transakci\na zaplatit {}\nza síťový poplatek?",
"nem__supply_change": "Změna zásob",
"nem__supply_units_template": "{} zásoby po {} celých jednotkách?",
"nem__transferable": "Přenosné?",
"nem__under_namespace": "pod jmenným prostorem",
"nem__unencrypted": "Nezašifrované:",
"nem__unknown_mosaic": "Neznámá mozaika!",
"passphrase__access_hidden_wallet": "Přistoupit ke skryté peněžence?",
"passphrase__always_on_device": "Opravdu chcete heslo vždy zadávat na zařízení?",
"passphrase__from_host_not_shown": "Heslo poskytnuté hostitelem bude použita, ale nebude zobrazeno kvůli nastavení zařízení.",
"passphrase__hidden_wallet": "Skrytá peněženka",
"passphrase__hide": "Skrýt heslo pocházející z hostitele?",
"passphrase__next_screen_will_show_passphrase": "Další obrazovka zobrazí heslo.",
"passphrase__please_enter": "Prosím, zadejte své heslo.",
"passphrase__revoke_on_device": "Chcete zrušit nastavení hesla na zařízení?",
"passphrase__title_confirm": "POTVRDIT HESLO",
"passphrase__title_enter": "ZADAT HESLO",
"passphrase__title_hide": "SKRÝT HESLO",
"passphrase__title_settings": "NASTAVENÍ HESLA",
"passphrase__title_source": "ZDROJ HESLA",
"passphrase__turn_off": "Vypnout ochranu heslem?",
"passphrase__turn_on": "Zapnout ochranu heslem?",
"pin__change": "Změnit PIN?",
"pin__changed": "PIN změněn",
"pin__cursor_will_change": "Pozice kurzoru se bude mezi zadáními měnit pro zvýšení bezpečnosti.",
"pin__diff_from_wipe_code": "PIN nesmí být stejný jako kód pro vymazání.",
"pin__disabled": "Ochrana PIN vypnuta.",
"pin__enabled": "Ochrana PIN zapnuta.",
"pin__enter": "Zadat PIN",
"pin__enter_new": "Zadejte nový PIN",
"pin__entered_not_valid": "Zadaný PIN není platný.",
"pin__info": "PIN bude vyžadován pro přístup k tomuto zařízení.",
"pin__invalid_pin": "Neplatný PIN",
"pin__last_attempt": "Poslední pokus",
"pin__mismatch": "Zadané PINy nesouhlasí!",
"pin__pin_mismatch": "NESHODA PIN",
"pin__please_check_again": "Zkontrolujte prosím znovu.",
"pin__reenter_new": "Znovu PIN",
"pin__reenter_to_confirm": "Pro potvrzení znovu zadejte PIN.",
"pin__should_be_long": "PIN by měl být 4-50 číslic dlouhý.",
"pin__title_check_pin": "ZKONTROLOVAT PIN",
"pin__title_settings": "NASTAVENÍ PINU",
"pin__title_wrong_pin": "ŠPATNÝ ŠPENDLÍK",
"pin__tries_left": "zbývající pokusy",
"pin__turn_off": "Opravdu chcete vypnout ochranu PIN?",
"pin__turn_on": "Zapnout ochranu PIN?",
"pin__wrong_pin": "Špatný PIN",
"plurals__contains_x_keys": "klíč|klíče|klíčů",
"plurals__lock_after_x_hours": "hodině|hodinách|hodinách",
"plurals__lock_after_x_milliseconds": "milisekundě|milisekundách|milisekundách",
"plurals__lock_after_x_minutes": "minutě|minutách|minutách",
"plurals__lock_after_x_seconds": "sekundě|sekundách|sekundách",
"plurals__sign_x_actions": "akci|akce|akcí",
"plurals__transaction_of_x_operations": "operace|operací|operací",
"plurals__x_groups_needed": "skupina|skupiny|skupin",
"plurals__x_shares_needed": "podíl|podíly|podílů",
"progress__authenticity_check": "Kontrola autentičnosti ...",
"progress__done": "Hotovo",
"progress__loading_transaction": "Načítání transakce...",
"progress__one_second_left": "Zbývá 1 sekunda",
"progress__please_wait": "PROSÍM ČEKEJTE",
"progress__processing": "PROCESOVÁNÍ",
"progress__refreshing": "Obnovování...",
"progress__signing_transaction": "Podpis transakce...",
"progress__syncing": "Synchronizace...",
"progress__x_seconds_left_template": "Zbývá {} sekund",
"reboot_to_bootloader__restart": "Chcete restartovat Trezor v režimu bootloader?",
"reboot_to_bootloader__title": "PŘEJÍT DO REŽIMU BOOTLOADER",
"reboot_to_bootloader__version_by_template": "Verze firmwaru {}\nod {}",
"recovery__cancel_dry_run": "Zrušit kontrolu zálohy",
"recovery__check_dry_run": "Zkontrolovat zálohu?",
"recovery__cursor_will_change": "Pozice kurzoru se změní mezi položkami pro zvýšenou bezpečnost.",
"recovery__dry_run_bip39_valid_match": "Zadané záchranné semínko je platné a odpovídá tomu v zařízení.",
"recovery__dry_run_bip39_valid_mismatch": "Zadané záchranné semínko je platné, ale neodpovídá tomu v zařízení.",
"recovery__dry_run_slip39_valid_match": "Zadané záchranné podíly jsou platné a odpovídají tomu, co je aktuálně v zařízení.",
"recovery__dry_run_slip39_valid_mismatch": "Zadané záchranné podíly jsou platné, ale neodpovídají tomu, co je aktuálně v zařízení.",
"recovery__enter_any_share": "Zadejte libovolný podíl",
"recovery__enter_backup": "Zadejte svou zálohu",
"recovery__enter_different_share": "Zadejte prosím odlišný podíl.",
"recovery__enter_share_from_diff_group": "Zadejte podíl z odlišné skupiny.",
"recovery__group_num_template": "Skupina {}",
"recovery__group_threshold_reached": "Práh skupiny dosažen.",
"recovery__invalid_seed_entered": "Zadáno neplatné záchranné semínko.",
"recovery__invalid_share_entered": "Zadán neplatný záchranný podíl.",
"recovery__more_shares_needed": "Potřebuje se více podílů",
"recovery__num_of_words": "Vyberte počet slov ve vaší záloze.",
"recovery__only_first_n_letters": "Budete muset vybrat pouze první 2-4 písmena každého slova.",
"recovery__progress_will_be_lost": "Veškerý pokrok bude ztracen.",
"recovery__select_num_of_words": "Vyberte počet slov ve vaší záloze.",
"recovery__share_already_entered": "Podíl již byl zadán",
"recovery__share_from_another_shamir": "Zadali jste podíl z jiného Shamir Backupu.",
"recovery__share_num_template": "Podíl {}",
"recovery__title": "OBNOVIT PENĚŽENKU",
"recovery__title_cancel_dry_run": "ZRUŠIT KONTROLU ZÁLOHY",
"recovery__title_cancel_recovery": "ZRUŠIT OBNOVENÍ",
"recovery__title_dry_run": "KONTROLA ZÁLOHY",
"recovery__title_recover": "OBNOVIT PENĚŽENKU",
"recovery__title_remaining_shares": "ZBÝVAJÍCÍ PODÍLY",
"recovery__type_word_x_of_y_template": "Napište slovo {} z {}",
"recovery__wallet_recovered": "Peněženka úspěšně obnovena",
"recovery__wanna_cancel_dry_run": "Jste si jisti, že chcete zrušit kontrolu zálohy?",
"recovery__wanna_cancel_recovery": "Jste si jisti, že chcete zrušit proces obnovení?",
"recovery__word_count_template": "({} slov)",
"recovery__word_x_of_y_template": "SLOVO {} Z {}",
"recovery__x_more_items_starting_template_plural": "Ještě {count} {plural} začínající",
"recovery__x_more_shares_needed_template_plural": "Potřebujete ještě {count} {plural}.",
"recovery__x_of_y_entered_template": "{} z {} podílů úspěšně zadáno.",
"recovery__you_have_entered": "Zadali jste",
"reset__advanced_group_threshold_info": "Prah skupiny určuje počet skupin potřebných k obnovení vaší peněženky.",
"reset__all_x_of_y_template": "všechny {} z {} podílů",
"reset__any_x_of_y_template": "libovolný {} z {} podílů",
"reset__button_create": "VYTVOŘIT PENĚŽENKU",
"reset__button_recover": "OBNOVIT PENĚŽENKU",
"reset__by_continuing": "Pokračováním souhlasíte s podmínkami společnosti Trezor.",
"reset__check_backup_title": "ZKONTROLOVAT ZÁLOHU",
"reset__check_group_share_title_template": "KONTROLA G{} - PODÍL {}",
"reset__check_seed_title": "ZKONTROLOVAT SEED",
"reset__check_share_title_template": "KONTROLA PODÍL #{}",
"reset__continue_with_next_share": "Pokračujte s dalším podílem.",
"reset__continue_with_share_template": "Pokračujte s podílem #{}.",
"reset__finished_verifying_group_template": "Dokončili jste ověření svých záchranných podílů pro skupinu {}.",
"reset__finished_verifying_seed": "Dokončili jste ověření svého záchranného semínka.",
"reset__finished_verifying_shares": "Dokončili jste ověření svých záchranných podílů.",
"reset__group_description": "Skupina se skládá z obnovovacích podílů.",
"reset__group_info": "Každá skupina má stanovený počet podílů a vlastní práh. V dalších krocích nastavíte počty podílů a prahy.",
"reset__group_share_checked_successfully_template": "Skupina {} - Podíl {} úspěšně zkontrolován.",
"reset__group_share_title_template": "SKUPINA {} - PODÍL {}",
"reset__more_info_at": "Více informací na",
"reset__need_all_share_template": "K obnovení budete potřebovat všechny {} podíly.",
"reset__need_any_share_template": "K obnovení budete potřebovat libovolný {} z podílů.",
"reset__needed_to_form_a_group": "potřebné k vytvoření skupiny. ",
"reset__needed_to_recover_your_wallet": "potřebné k obnovení vaší peněženky. ",
"reset__never_make_digital_copy": "Nikdy nedělejte digitální kopii své zálohy nebo ji neukládejte online!",
"reset__num_of_share_holders_template": "{} lidí nebo míst bude držet jeden podíl.",
"reset__num_of_shares_advanced_info_template": "Každý obnovovací podíl je posloupnost 20 slov. V dalším kroku zvolíte prahový počet podílů potřebných k vytvoření skupiny {}.",
"reset__num_of_shares_basic_info": "Každý obnovovací podíl je posloupnost 20 slov. V dalším kroku zvolíte, kolik podílů potřebujete k obnovení vaší peněženky.",
"reset__num_shares_for_group_template": "Požadovaný počet podílů pro vytvoření skupiny {}.",
"reset__number_of_shares_info": "= celkový počet unikátních seznamů slov použitých pro zálohu peněženky.",
"reset__one_share": "1 podíl",
"reset__only_one_share_will_be_created": "Bude vytvořen pouze jeden podíl.",
"reset__recovery_seed_title": "OBNOVIT SEED",
"reset__recovery_share_title_template": "OBNOVIT PODÍL #{}",
"reset__required_number_of_groups": "Požadovaný počet skupin pro obnovení.",
"reset__select_correct_word": "Vyberte správné slovo pro každou pozici.",
"reset__select_word_template": "VYBRAT {} SLOVO",
"reset__select_word_x_of_y_template": "Vyberte slovo {} z {}:",
"reset__set_it_to_count_template": "Nastavte na {} a budete potřebovat ",
"reset__share_checked_successfully_template": "Záchranný podíl #{} úspěšně zkontrolován.",
"reset__share_words_title": "STANDARDNÍ ZÁLOHA",
"reset__slip39_checklist_num_groups": "Počet skupin",
"reset__slip39_checklist_num_shares": "Počet podílů",
"reset__slip39_checklist_set_num_groups": "Nastavit počet skupin",
"reset__slip39_checklist_set_num_shares": "Nastavit počet akcií",
"reset__slip39_checklist_set_sizes": "Nastavit velikosti a prahy",
"reset__slip39_checklist_set_sizes_longer": "Nastavit velikosti a prahové hodnoty pro každou skupinu",
"reset__slip39_checklist_set_threshold": "Nastavit práh",
"reset__slip39_checklist_title": "KONTROLNÍ SEZNAM ZÁLOHY",
"reset__slip39_checklist_write_down": "Zapsat a ověřit podíly",
"reset__slip39_checklist_write_down_recovery": "Zapište si a zkontrolujte všechny obnovovací akcie",
"reset__the_threshold_sets_the_number_of_shares": "Prah určuje počet podílů ",
"reset__threshold_info": "= minimální počet unikátních seznamů slov použitých pro obnovení.",
"reset__title_backup_is_done": "ZÁLOHA JE HOTOVÁ",
"reset__title_create_wallet": "VYTVOŘIT PENĚŽENKU",
"reset__title_create_wallet_shamir": "VYTVOŘIT PENĚŽENKU (SHAMIR)",
"reset__title_group_threshold": "PRÁH SKUPINY",
"reset__title_number_of_groups": "POČET SKUPIN",
"reset__title_number_of_shares": "POČET PODÍLŮ",
"reset__title_set_group_threshold": "NASTAVIT PRAHOVÝ POČET SKUPIN",
"reset__title_set_number_of_groups": "NASTAVIT POČET SKUPIN",
"reset__title_set_number_of_shares": "NASTAVIT POČET PODÍLŮ",
"reset__title_set_threshold": "NASTAVIT PRAH",
"reset__to_form_group_template": "pro vytvoření skupiny {}.",
"reset__tos_link": "trezor.io/tos",
"reset__total_number_of_shares_in_group_template": "Nastavte celkový počet podílů ve skupině {}.",
"reset__use_your_backup": "Použijte zálohu, pokud potřebujete obnovit svou peněženku.",
"reset__write_down_words_template": "Zapište všechna {} slova v pořadí.",
"reset__wrong_word_selected": "Vybráno nesprávné slovo!",
"reset__you_need_one_share": "K obnovení potřebujete 1 podíl.",
"reset__your_backup_is_done": "Vaše záloha je hotova.",
"ripple__confirm_tag": "Potvrdit značku",
"ripple__destination_tag_template": "Cílová značka: {}",
"rotation__change_template": "Chcete změnit rotaci zařízení na {}?",
"rotation__east": "východ",
"rotation__north": "sever",
"rotation__south": "jih",
"rotation__title_change": "ZMĚNIT ROTACI",
"rotation__west": "západ",
"safety_checks__approve_unsafe_always": "Trezor vám umožní schválit některé akce, které by mohly být nebezpečné.",
"safety_checks__approve_unsafe_temporary": "Trezor vám dočasně umožní schválit některé akce, které by mohly být nebezpečné.",
"safety_checks__enforce_strict": "Opravdu chcete vynutit přísné kontroly bezpečnosti (doporučeno)?",
"safety_checks__title": "KONTROLY BEZPEČNOSTI",
"safety_checks__title_safety_override": "PŘEPÍNÁNÍ BEZPEČNOSTI",
"sd_card__all_data_will_be_lost": "Všechna data na SD kartě budou ztracena.",
"sd_card__card_required": "Vyžadována SD karta.",
"sd_card__disable": "Opravdu chcete odebrat ochranu SD karty ze svého zařízení?",
"sd_card__disabled": "Úspěšně jste zakázali ochranu SD karty.",
"sd_card__enable": "Opravdu chcete zajistit své zařízení ochranou SD karty?",
"sd_card__enabled": "Úspěšně jste povolili ochranu SD karty.",
"sd_card__error": "Chyba SD karty",
"sd_card__format_card": "Naformátovat SD kartu",
"sd_card__insert_correct_card": "Vložte do zařízení správnou SD kartu.",
"sd_card__please_insert": "Vložte prosím vaši SD kartu.",
"sd_card__please_unplug_and_insert": "Odpojte prosím zařízení a vložte vaši SD kartu.",
"sd_card__problem_accessing": "Došlo k problému při přístupu k SD kartě.",
"sd_card__refresh": "Opravdu chcete nahradit aktuální tajemství SD karty nově vygenerovaným?",
"sd_card__refreshed": "Úspěšně jste obnovili ochranu SD karty.",
"sd_card__restart": "Chcete restartovat Trezor v režimu bootloader?",
"sd_card__title": "OCHRANA SD KARTY",
"sd_card__title_problem": "PROBLÉM SE SD KARTOU",
"sd_card__unknown_filesystem": "Neznámý souborový systém",
"sd_card__unplug_and_insert_correct": "Odpojte zařízení a vložte správnou SD kartu.",
"sd_card__use_different_card": "Použijte jinou kartu nebo naformátujte SD kartu na souborový systém FAT32",
"sd_card__wanna_format": "Opravdu chcete naformátovat SD kartu?",
"sd_card__wrong_sd_card": "Špatná SD karta",
"send__address_path": "Adresová cesta",
"send__confirm_sending": "Potvrdit_odeslání",
"send__from_multiple_accounts": "Odesílání z více účtů.",
"send__including_fee": "Včetně poplatku:",
"send__maximum_fee": "Maximální poplatek:",
"send__receiving_to_multisig": "Přijímání na multisig adresu.",
"send__title_confirm_sending": "POTVRDIT ODESLÁNÍ",
"send__title_joint_transaction": "SPOLEČNÁ TRANSAKCE",
"send__title_receiving_to": "PŘIJÍMÁNÍ NA",
"send__title_sending": "ODESÍLÁNÍ",
"send__title_sending_amount": "ČÁSTKA K ODESLÁNÍ",
"send__title_sending_to": "ODESLÁNÍ NA",
"send__to_the_total_amount": "Celková částka:",
"send__total_amount": "Celková částka:",
"send__transaction_id": "ID transakce:",
"send__you_are_contributing": "Přispíváte:",
"share_words__words_in_order": " slova v pořadí.",
"share_words__wrote_down_all": "Napsal jsem všechny ",
"sign_message__bytes_template": "{} Bajty",
"sign_message__confirm_address": "POTVRDIT ADRESU",
"sign_message__confirm_message": "POTVRDIT ZPRÁVU",
"sign_message__message_size": "Velikost zprávy:",
"sign_message__verify_address": "Ověřte adresu",
"solana__account_index": "Index účtu",
"solana__associated_token_account": "Přidružený účet tokenů",
"solana__confirm_multisig": "Potvrďte multisig",
"solana__expected_fee": "Očekávaný poplatek",
"solana__instruction_accounts_template": "Instrukce obsahuje {} účty a její data jsou {} bajty dlouhé.",
"solana__instruction_data": "Instruktážní data",
"solana__instruction_is_multisig": "Následující instrukce je instrukce multisig.",
"solana__is_provided_via_lookup_table_template": "{} je poskytován prostřednictvím vyhledávací tabulky.",
"solana__lookup_table_address": "Adresa tabulky vyhledávání",
"solana__multiple_signers": "Více signatářů",
"solana__token_address": "Adresa tokenů",
"solana__transaction_contains_unknown_instructions": "Transakce obsahuje neznámé pokyny.",
"solana__transaction_requires_x_signers_template": "Transakce vyžaduje {} signatáři, který zvyšuje poplatek.",
"stellar__account_merge": "Sloučení účtů",
"stellar__account_thresholds": "Práhové hodnoty účtu",
"stellar__add_signer": "Přidat podepisovatele",
"stellar__add_trust": "Přidat důvěru",
"stellar__all_will_be_sent_to": "Vše XLM bude odesláno na:",
"stellar__allow_trust": "Povolit důvěru",
"stellar__asset": "Aktiva",
"stellar__balance_id": "ID rovnováhy",
"stellar__bump_sequence": "Zvýšit sekvenci",
"stellar__buying": "Kupování:",
"stellar__claim_claimable_balance": "Nárokuj balanci.",
"stellar__clear_data": "Vymazat data",
"stellar__clear_flags": "Vymazat příznaky",
"stellar__confirm_issuer": "Potvrdit vydavatele",
"stellar__confirm_memo": "Potvrdit poznámku",
"stellar__confirm_network": "Potvrdit síť",
"stellar__confirm_operation": "Potvrdit operaci",
"stellar__confirm_stellar": "Potvrdit Stellar",
"stellar__confirm_timebounds": "Potvrdit časová omezení",
"stellar__create_account": "Vytvořit účet",
"stellar__debited_amount": "Odepsaná částka",
"stellar__delete": "Smazat",
"stellar__delete_passive_offer": "Smazat pasivní nabídku",
"stellar__delete_trust": "Smazat důvěru",
"stellar__destination": "Cíl:",
"stellar__exchanges_require_memo": "Důležité: Mnoho směnáren vyžaduje poznámku při vkladu",
"stellar__final_confirm": "Konečné potvrzení",
"stellar__hash": "Haš:",
"stellar__high": "Vysoký:",
"stellar__home_domain": "Domovská doména",
"stellar__inflation": "Inflace",
"stellar__initial_balance": "Počáteční zůstatek",
"stellar__initialize_signing_with": "Inicializovat podepisování s",
"stellar__issuer_template": "{} vydavatel:",
"stellar__key": "Klíč:",
"stellar__limit": "Limit:",
"stellar__low": "Nízký:",
"stellar__master_weight": "Hlavní váha:",
"stellar__medium": "Střední:",
"stellar__new_offer": "Nová nabídka",
"stellar__new_passive_offer": "Nová pasivní nabídka",
"stellar__no_memo_set": "Žádná poznámka nenastavena!",
"stellar__no_restriction": "[bez omezení]",
"stellar__on_network_template": "Transakce je na {}",
"stellar__path_pay": "Platba cestou",
"stellar__path_pay_at_least": "Platba cestou alespoň",
"stellar__pay": "Platit:",
"stellar__pay_at_most": "Zaplatit nejvýše:",
"stellar__preauth_transaction": "Předautentizovaná transakce:",
"stellar__price_per_template": "Cena za {}:",
"stellar__private_network": "soukromá síť",
"stellar__remove_signer": "Odebrat podepisovatele",
"stellar__revoke_trust": "Zrušit důvěru",
"stellar__selling": "Prodej:",
"stellar__set_data": "Nastavit data",
"stellar__set_flags": "Nastavit příznaky",
"stellar__set_sequence_to_template": "Nastavit sekvenci na {}?",
"stellar__sign_tx_count_template": "Podepsat tuto transakci složenou z {}",
"stellar__sign_tx_fee_template": "a zaplatit {} za poplatek?",
"stellar__source_account": "Zdrojový účet:",
"stellar__testnet_network": "testovací síť",
"stellar__trusted_account": "Důvěryhodný účet",
"stellar__update": "Aktualizovat",
"stellar__valid_from": "Platné od (UTC)",
"stellar__valid_to": "Platné do (UTC)",
"stellar__value_sha256": "Hodnota (SHA-256):",
"stellar__wanna_clean_value_key_template": "Chcete vymazat klíč hodnoty {}?",
"stellar__your_account": "váš účet",
"tezos__baker_address": "Adresa pekaře:",
"tezos__balance": "Zůstatek:",
"tezos__ballot": "Hlasovací lístek:",
"tezos__confirm_delegation": "Potvrdit delegaci",
"tezos__confirm_origination": "Potvrdit vznik",
"tezos__delegator": "Delegátor:",
"tezos__proposal": "Návrh",
"tezos__register_delegate": "Registrovat delegáta",
"tezos__remove_delegation": "Odstranit delegaci",
"tezos__submit_ballot": "Odeslat hlasovací lístek",
"tezos__submit_proposal": "Předložit návrh",
"tezos__submit_proposals": "Předložit návrhy",
"tutorial__middle_click": "Stiskněte současně vlevo a vpravo pro potvrzení.",
"tutorial__press_and_hold": "Stiskněte a podržte pravé tlačítko pro schválení důležitých operací.",
"tutorial__ready_to_use": "Jste připraveni používat Trezor.",
"tutorial__scroll_down": "Stiskněte vpravo pro posun dolů a přečtěte si veškerý obsah, pokud text nezapadne na jednu obrazovku. Stiskněte vlevo pro posun nahoru.",
"tutorial__sure_you_want_skip": "Jste si jisti, že chcete tutoriál přeskočit?",
"tutorial__title_hello": "AHOJ",
"tutorial__title_screen_scroll": "POSUN OBRAZOVKY",
"tutorial__title_skip": "PŘESKOČIT TUTORIÁL",
"tutorial__title_tutorial_complete": "TUTORIÁL DOKONČEN",
"tutorial__use_trezor": "Trezor má levé a pravé tlačítko.\n\rPokračujte vpravo.",
"tutorial__welcome_press_right": "Vítejte v Trezoru. Stiskněte vpravo pro pokračování.",
"u2f__get": "Zvýšit a získat U2F čítač?",
"u2f__set_template": "Nastavit U2F čítač na {}?",
"u2f__title_get": "ZÍSKAT U2F ČÍTAČ",
"u2f__title_set": "NASTAVIT U2F ČÍTAČ",
"wipe__info": "Všechna data budou smazána.",
"wipe__title": "VYMAZAT ZAŘÍZENÍ",
"wipe__want_to_wipe": "Opravdu chcete vymazat zařízení?\n",
"wipe_code__change": "Změnit kód pro vymazání?",
"wipe_code__changed": "Kód pro vymazání změněn",
"wipe_code__diff_from_pin": "Kód pro vymazání musí být odlišný od vašeho PINu.\nZkuste to prosím znovu.",
"wipe_code__disabled": "Kód pro vymazání zakázán.",
"wipe_code__enabled": "Kód pro vymazání povolen.",
"wipe_code__enter_new": "Zadejte nový kód pro vymazání",
"wipe_code__info": "Kód vymaže všechna data z tohoto zařízení.",
"wipe_code__invalid": "Neplatný kód pro vymazání",
"wipe_code__mismatch": "Zadané kódy pro vymazání nesouhlasí!",
"wipe_code__reenter": "Znovu zadejte kód pro vymazání",
"wipe_code__reenter_to_confirm": "Pro potvrzení znovu zadejte kód pro vymazání.",
"wipe_code__title_check": "ZKONTROLOVAT KÓD PRO VYMAZÁNÍ",
"wipe_code__title_invalid": "NEPLATNÝ KÓD PRO VYMAZÁNÍ",
"wipe_code__title_settings": "NASTAVENÍ VÝMAZU",
"wipe_code__turn_off": "Vypnout ochranu kódem pro vymazání?",
"wipe_code__turn_on": "Zapnout ochranu kódem pro vymazání?",
"wipe_code__wipe_code_mismatch": "NESHODA KÓDU PRO VYMAZÁNÍ",
"word_count__title": "POČET SLOV",
"words__account": "Účet",
"words__account_colon": "Účet: (TODO)",
"words__address": "Adresa",
"words__amount": "Částka:",
"words__are_you_sure": "Jste si jisti?",
"words__array_of": "Pole o",
"words__blockhash": "Blockhash",
"words__buying": "Koupit",
"words__confirm": "Potvrdit",
"words__confirm_fee": "Potvrdit poplatek",
"words__contains": "Obsahuje",
"words__continue_anyway": "Přesto pokračovat?",
"words__continue_with": "Pokračovat s",
"words__error": "Chyba",
"words__fee": "Poplatek",
"words__from": "od",
"words__keep_it_safe": "Uchovávejte v bezpečí!",
"words__know_what_your_doing": "Pokračujte pouze, pokud víte, co děláte!",
"words__my_trezor": "Můj Trezor",
"words__no": "Ne",
"words__outputs": "výstupy",
"words__please_check_again": "Zkontrolujte to prosím znovu",
"words__please_try_again": "Zkuste to prosím znovu",
"words__really_wanna": "Opravdu chcete",
"words__recipient": "Příjemce",
"words__sign": "Podepsat",
"words__signer": "Signer",
"words__title_check": "KONTROLA",
"words__title_group": "SKUPINA",
"words__title_information": "INFORMACE",
"words__title_remember": "PAMATOVAT",
"words__title_share": "PODÍL",
"words__title_shares": "PODÍLY",
"words__title_success": "ÚSPĚCH",
"words__title_summary": "SHRNUTÍ",
"words__title_threshold": "PRÁH",
"words__unknown": "Neznámý",
"words__warning": "Varování",
"words__writable": "Zapisovatelný",
"words__yes": "Ano"
}
}

@ -0,0 +1,860 @@
{
"font": {
"Safe 3": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_de.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_de.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_de.json",
"4_FONT_BIG": "font_unifont_regular_16_de.json",
"5_FONT_DEMIBOLD": "font_unifont_bold_16_de.json"
},
"T": {
"1_FONT_NORMAL": "font_tthoves_regular_21_de.json",
"2_FONT_BOLD": "font_tthoves_bold_17_de.json",
"3_FONT_MONO": "font_robotomono_medium_20_de.json",
"4_FONT_BIG": null,
"5_FONT_DEMIBOLD": "font_tthoves_demibold_21_de.json"
}
},
"header": {
"change_language_prompt": "Sprache andern?",
"change_language_title": "SPRACHE",
"language": "de",
"version": "2.6.5"
},
"translations": {
"addr_mismatch__contact_support_at": "Bitte wenden Sie sich an den Trezor -Support unter (TODO)",
"addr_mismatch__key_mismatch": "Schlüsselfehlanpassung? (TODO)",
"addr_mismatch__mismatch": "Adressenkonflikt?",
"addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__title": "ADRESSENKONFLIKT?",
"addr_mismatch__title_key_mismatch": "Schlüsselfehlanpassung? (TODO)",
"addr_mismatch__wrong_derivation_path": "Falscher Ableitungspfad für ausgewähltes Konto. (TODO)",
"addr_mismatch__xpub_mismatch": "XPUB Mismatch? (TODO)",
"address__public_key": "Öffentlicher Schlüssel (TODO)",
"address__title_cosigner": "MITUNTERZEICHNER",
"address__title_receive_address": "EMPFÄNGERADRESSE",
"address__title_yours": "DEINER",
"address_details__derivation_path": "Ableitungspfad:",
"address_details__title_receive_address": "EMPFÄNGERADRESSE",
"address_details__title_receiving_to": "EMPFÄNGER",
"authenticate__confirm_template": "Erlauben Sie den angeschlossenen Computer, zu bestätigen, dass Ihr {} echt ist? (TODO)",
"authenticate__header": "AUTHENTIFIZIEREN (TODO)",
"auto_lock__change_template": "Trezor nach {} Inaktivität automatisch sperren?",
"auto_lock__title": "AUTO-LOCK-VERZÖGERUNG",
"backup__can_back_up_anytime": "Du kannst deinen Trezor jederzeit einmalig sichern.",
"backup__it_should_be_backed_up": "Du solltest jetzt dein neues Wallet sichern.",
"backup__it_should_be_backed_up_now": "Es sollte jetzt gesichert werden!",
"backup__new_wallet_created": "Neues Wallet wurde erstellt.",
"backup__new_wallet_successfully_created": "Neues Wallet wurde erfolgreich erstellt.",
"backup__recover_anytime": "Mit dem Backup kannst du jederzeit dein Wallet wiederherstellen.",
"backup__title_backup_wallet": "WALLET-BACKUP",
"backup__title_skip": "BACKUP ÜBERSPRINGEN",
"backup__want_to_skip": "Möchtest du das Backup wirklich überspringen?",
"binance__buy": "Kaufen",
"binance__confirm_cancel": "Abbrechen bestätigen",
"binance__confirm_input": "Eingabe bestätigen",
"binance__confirm_order": "Order bestätigen",
"binance__confirm_output": "Ausgabe bestätigen",
"binance__order_id": "Order-ID:",
"binance__pair": "Paar:",
"binance__price": "Preis:",
"binance__quantity": "Menge:",
"binance__sell": "Verkaufen",
"binance__sender_address": "Senderadresse:",
"binance__side": "Seite:",
"bitcoin__commitment_data": "Commitment-Daten:",
"bitcoin__confirm_locktime": "Sperrzeit bestätigen",
"bitcoin__create_proof_of_ownership": "Möchtest du einen Eigentumsnachweis erstellen?",
"bitcoin__high_mining_fee_template": "Die Mining-Gebühr von\n{}\nist unerwartet hoch.",
"bitcoin__locktime_no_effect": "Sperrzeit ist festgelegt, hat aber keine Auswirkungen.",
"bitcoin__locktime_set_to": "Sperrzeit festgelegt auf:",
"bitcoin__locktime_set_to_blockheight": "Sperrzeit festgelegt auf Blockhöhe:",
"bitcoin__lot_of_change_outputs": "Viele Wechselgeldausgaben.",
"bitcoin__multiple_accounts": "Mehrere Konten (TODO)",
"bitcoin__new_fee_rate": "Neuer Gebührensatz:",
"bitcoin__simple_send_of": "Einfaches Senden von",
"bitcoin__ticket_amount": "Ticketbetrag:",
"bitcoin__title_confirm_details": "DETAILS BESTÄTIGEN",
"bitcoin__title_finalize_transaction": "TRANSAKTION ABSCHLIESSEN",
"bitcoin__title_high_mining_fee": "HOHE MINING-GEBÜHR",
"bitcoin__title_meld_transaction": "TRANSAKTION ZUSAMMENFÜHREN",
"bitcoin__title_modify_amount": "BETRAG ÄNDERN",
"bitcoin__title_payjoin": "PAYJOIN",
"bitcoin__title_proof_of_ownership": "EIGENTUMSNACHWEIS",
"bitcoin__title_purchase_ticket": "TICKET KAUFEN",
"bitcoin__title_update_transaction": "TRANSAKTION AKTUALISIEREN",
"bitcoin__unknown_path": "Unbekannter Pfad",
"bitcoin__unknown_transaction": "Unbekannte Transaktion",
"bitcoin__unusually_high_fee": "Ungewöhnlich hohe Gebühr.",
"bitcoin__unverified_external_inputs": "Die Transaktion enthält nicht verifizierte externe Eingaben.",
"bitcoin__valid_signature": "Die Signatur ist gültig.",
"bitcoin__voting_rights": "Stimmrechte an:",
"buttons__abort": "ABBRECHEN",
"buttons__access": "ZUGRIFF",
"buttons__again": "WIEDERHOLEN",
"buttons__allow": "ERLAUBEN (TODO)",
"buttons__back": "ZURÜCK (TODO)",
"buttons__back_up": "SICHERN",
"buttons__cancel": "ABBRECHEN",
"buttons__change": "ÄNDERN",
"buttons__check": "PRÜFEN",
"buttons__check_again": "ERNEUT PRÜFEN",
"buttons__close": "SCHLIESSEN",
"buttons__confirm": "BESTÄTIGEN",
"buttons__continue": "WEITER",
"buttons__details": "DETAILS",
"buttons__enable": "AKTIVIEREN",
"buttons__enter": "EINGEBEN",
"buttons__enter_share": "SHARE EINGEBEN",
"buttons__export": "EXPORTIEREN",
"buttons__format": "FORMATIEREN",
"buttons__go_back": "GEH ZURÜCK (TODO)",
"buttons__hold_to_confirm": "Z. BEST. HALTEN",
"buttons__info": "INFO",
"buttons__install": "INSTALLIEREN (TODO)",
"buttons__more_info": "WEITERE INFOS",
"buttons__ok_i_understand": "OK, ICH VERSTEHE",
"buttons__purchase": "KAUFEN",
"buttons__quit": "BEENDEN",
"buttons__restart": "NEU STARTEN",
"buttons__retry": "WIEDERHOLEN",
"buttons__select": "AUSWÄHLEN",
"buttons__set": "FESTLEGEN",
"buttons__show_all": "ALLE ANZEIGEN",
"buttons__show_details": "ZEIGE DETAILS (TODO)",
"buttons__show_words": "WÖRTER ANZEIGEN",
"buttons__skip": "ÜBSPR",
"buttons__try_again": "WIEDERHOLEN",
"buttons__turn_off": "DEAKTIVIEREN",
"buttons__turn_on": "AKTIVIEREN",
"cardano__addr_base": "Basis",
"cardano__addr_enterprise": "Enterprise",
"cardano__addr_legacy": "Veraltet",
"cardano__addr_pointer": "Pointer",
"cardano__addr_reward": "Belohnung",
"cardano__address_no_staking": "Adresse - keine Staking-Belohnungen.",
"cardano__amount_burned_decimals_unknown": "Menge verbrannt (Dezimalstellen unbekannt): (TODO)",
"cardano__amount_minted_decimals_unknown": "Menge geprägt (Dezimalstellen unbekannt): (TODO)",
"cardano__amount_sent_decimals_unknown": "Betrag gesendet (unbekannt): (TODO)",
"cardano__anonymous_pool": "Pool hat keine Metadaten (anonymer Pool)",
"cardano__asset_fingerprint": "Asset-Fingerabdruck:",
"cardano__auxiliary_data_hash": "Hilfsdaten-Hash:",
"cardano__block": "Block",
"cardano__catalyst": "Catalyst",
"cardano__certificate": "Zertifikat",
"cardano__certificate_path": "Zertifikatspfad",
"cardano__change_output": "Wechselgeldausgabe",
"cardano__change_output_path": "Wechselgeldausgabepfad",
"cardano__change_output_staking_path": "Wechselgeldausgabe-Staking-Pfad",
"cardano__check_all_items": "Prüfe alle Elemente sorgfältig.",
"cardano__choose_level_of_details": "Detailebene auswählen:",
"cardano__collateral_input_id": "Sicherheiten-Eingabe-ID:",
"cardano__collateral_input_index": "Sicherheiten-Eingabeindex:",
"cardano__collateral_output_contains_tokens": "Die Rückgabe von Sicherheiten beinhaltet Token.",
"cardano__collateral_return": "Rückgabe von Sicherheiten",
"cardano__confirm": "Bestätigen:",
"cardano__confirm_signing_stake_pool": "Bestätige, dass du die Registrierung des Pools als Eigentümer signiert hast.",
"cardano__confirm_transaction": "Transaktion bestätigen",
"cardano__confirming_a_multisig_transaction": "Multisig-Transaktion bestätigen.",
"cardano__confirming_pool_registration": "Pool-Registrierung als Besitzer bestätigen.",
"cardano__confirming_transction": "Transaktion bestätigen.",
"cardano__cost": "Kosten",
"cardano__credential_mismatch": "Daten stimmen nicht mit Zahlungsdaten überein.",
"cardano__datum_hash": "Datum Hash: (TODO)",
"cardano__delegating_to": "Delegieren an:",
"cardano__for_account_and_index_template": "Für Konto {} und index {}: (TODO)",
"cardano__for_account_template": "Für Konto {}: (TODO)",
"cardano__for_key_hash": "für Key-Hash:",
"cardano__for_script": "für Skript:",
"cardano__inline_datum": "Inline-Bezugspunkt",
"cardano__input_id": "Eingabe-ID:",
"cardano__input_index": "Eingabenindex:",
"cardano__intro_text_change": "Die folgende Adresse ist eine Wechselgeldadresse. Ihr(e)",
"cardano__intro_text_owned_by_device": "Die folgende Adresse gehört diesem Gerät. Ihr(e)",
"cardano__intro_text_registration_payment": "Die Zahlungsadresse für die Registrierung des Voting-Keys gehört diesem Gerät. Ihr(e)",
"cardano__key_hash": "Key-Hash",
"cardano__margin": "Marge",
"cardano__multisig_path": "Multisig-Pfad",
"cardano__nested_scripts_template": "Enthält {} verschachtelte Skripte.",
"cardano__network": "Netzwerk:",
"cardano__no_output_tx": "Transaktion hat keine Ausgaben. Netzwerk kann nicht verifiziert werden.",
"cardano__nonce": "Nonce:",
"cardano__other": "andere",
"cardano__path": "Pfad",
"cardano__pledge": "Pledge",
"cardano__pointer": "Pointer",
"cardano__policy_id": "Richtlinien-ID:",
"cardano__pool_metadata_hash": "Pool-Metadaten-Hash:",
"cardano__pool_metadata_url": "Pool-Metadaten-URL:",
"cardano__pool_owner": "Pool-Eigentümer:",
"cardano__pool_owner_path": "Pool-Eigentümer-Staking-Pfad",
"cardano__pool_reward_account": "Pool-Belohnungskonto:",
"cardano__reference_input_id": "Referenz-Eingabe-ID:",
"cardano__reference_input_index": "Referenz-Eingabeindex:",
"cardano__reference_script": "Referenzskript",
"cardano__required_signer": "Erforderlicher Unterzeichner",
"cardano__reward": "Belohnung",
"cardano__reward_address": "Adresse ist eine Adresse für Belohnungen.",
"cardano__reward_eligibility_warning": "Warnung: Die Adresse ist keine Zahlungsadresse und somit nicht für Belohnungen berechtigt.",
"cardano__rewards_go_to": "Belohnung geht an:",
"cardano__script": "Skript",
"cardano__script_all": "Alle",
"cardano__script_any": "Beliebige",
"cardano__script_data_hash": "Skriptdaten-Hash:",
"cardano__script_hash": "Skript-Hash:",
"cardano__script_invalid_before": "Ungültig vor",
"cardano__script_invalid_hereafter": "Ungültig nach",
"cardano__script_key": "Key",
"cardano__script_n_of_k": "N von K",
"cardano__script_reward": "Skript-Belohnung",
"cardano__sending": "Wird gesendet",
"cardano__show_simple": "Einfach anzeigen",
"cardano__sign_tx_path_template": "Transaktion signieren mit {}:",
"cardano__stake_delegation": "Stake-Delegierung",
"cardano__stake_deregistration": "Stake-Key-Deregistrierung",
"cardano__stake_pool_registration": "Staking-Pool-Registrierung",
"cardano__stake_pool_registration_pool_id": "Staking-Pool-Registrierung\nPool-ID:",
"cardano__stake_registration": "Stake-Key-Registrierung",
"cardano__staking_key_for_account": "Staking-Key für Konto",
"cardano__to_pool": "an Pool:",
"cardano__token_minting_path": "Token-Minting-Pfad",
"cardano__total_collateral": "Gesamtsicherheiten:",
"cardano__transaction": "Transaktion",
"cardano__transaction_contains_minting_or_burning": "Die Transaktion beinhaltet das Minting oder Burning von Token.",
"cardano__transaction_contains_script_address_no_datum": "Die folgende Transaktionsausgabe enthält eine Skriptadresse, aber keinen Bezugspunkt.",
"cardano__transaction_fee": "Transaktionsgebühr:",
"cardano__transaction_id": "Transaktions-ID:",
"cardano__transaction_no_collateral_input": "Die Transaktion enthält keine Sicherheiten. Das Plutus-Skript kann nicht ausgeführt werden.",
"cardano__transaction_no_script_data_hash": "Die Transaktion enthält keinen Skriptdaten-Hash. Das Plutus-Skript kann nicht ausgeführt werden.",
"cardano__transaction_output_contains_tokens": "Die folgende Transaktionsausgabe beinhaltet Token.",
"cardano__ttl": "TTL:",
"cardano__unknown_collateral_amount": "Unbekannter Sicherheitenbetrag.",
"cardano__unusual_path": "Pfad ist ungewöhnlich.",
"cardano__valid_since": "Gültig seit:",
"cardano__verify_script": "Skript verifizieren",
"cardano__vote_key_registration": "Vote-Key-Registrierung (CIP-36)",
"cardano__vote_public_key": "Public Key für Vote:",
"cardano__voting_purpose": "Voting-Zweck:",
"cardano__warning": "Warnung",
"cardano__weight": "Gewicht:",
"cardano__withdrawal_for_address_template": "Auszahlung für {} Adresse bestätigen:",
"cardano__witness_path": "Zeugenpfad",
"cardano__x_of_y_signatures_template": "Erfordert {} von {} Signaturen.",
"coinjoin__access_account": "Auf CoinJoin-Konto zugreifen?",
"coinjoin__do_not_disconnect": "Trenne deinen Trezor nicht!",
"coinjoin__max_mining_fee": "Max. Mining-Gebühr:",
"coinjoin__max_rounds": "Max. Runden:",
"coinjoin__title": "COINJOIN AUTORISIEREN",
"coinjoin__title_do_not_disconnect": "TRENNE DEINEN TREZOR NICHT!",
"coinjoin__title_progress": "COINJOIN LÄUFT",
"coinjoin__waiting_for_others": "Auf andere warten",
"confirm_total__fee_rate": "Gebührensatz:",
"confirm_total__sending_from_account": "Gesendet von Konto:",
"confirm_total__title_fee": "GEBÜHREN-INFO",
"confirm_total__title_sending_from": "GESENDET VON",
"debug__loading_seed": "Seed wird geladen",
"debug__loading_seed_not_recommended": "Das Laden von privaten Seeds wird nicht empfohlen.",
"device_name__change_template": "Gerätename in {} ändern?",
"device_name__title": "GERÄTENAME",
"entropy__send": "Möchtest du die Entropie wirklich senden?",
"entropy__title": "INTERNE ENTROPIE",
"entropy__title_confirm": "ENTROPIE BESTÄTIGEN",
"eos__about_to_sign_template": "Du bist dabei, {} zu signieren.",
"eos__action_name": "Aktionsname:",
"eos__arbitrary_data": "Beliebige Daten",
"eos__buy_ram": "RAM kaufen",
"eos__bytes": "Bytes:",
"eos__cancel_vote": "Vote abbrechen",
"eos__checksum": "Prüfsumme:",
"eos__code": "Code:",
"eos__contract": "Kontrakt:",
"eos__cpu": "CPU:",
"eos__creator": "Ersteller:",
"eos__delegate": "Delegieren",
"eos__delete_auth": "Auth löschen",
"eos__from": "Von:",
"eos__link_auth": "Auth verknüpfen",
"eos__memo": "Memo",
"eos__name": "Name:",
"eos__net": "NET:",
"eos__new_account": "Neues Konto",
"eos__owner": "Eigentümer:",
"eos__parent": "Elternteil:",
"eos__payer": "Zahlender:",
"eos__permission": "Berechtigung:",
"eos__proxy": "Proxy:",
"eos__receiver": "Empfänger:",
"eos__refund": "Rückerstattung",
"eos__requirement": "Anforderung:",
"eos__sell_ram": "RAM verkaufen (TODO)",
"eos__sender": "Sender:",
"eos__sign_transaction": "Transaktion signieren",
"eos__threshold": "Schwelle:",
"eos__to": "An:",
"eos__transfer": "Überweisung:",
"eos__type": "Typ:",
"eos__undelegate": "Delegieren aufheben",
"eos__unlink_auth": "Auth-Verknüpfung aufheben",
"eos__update_auth": "Auth aktualisieren",
"eos__vote_for_producers": "Vote für Produzenten",
"eos__vote_for_proxy": "Vote für Proxy",
"eos__voter": "Voter:",
"ethereum__amount_sent": "Gesendeter Betrag:",
"ethereum__contract": "Kontrakt:",
"ethereum__data_size_template": "Größe: {} Bytes",
"ethereum__gas_limit": "Gas-Grenze:",
"ethereum__gas_price": "Gas-Preis:",
"ethereum__max_gas_price": "Max. Gas-Preis:",
"ethereum__name_and_version": "Name und Version",
"ethereum__new_contract": "neuer Kontrakt?",
"ethereum__no_message_field": "Kein Nachrichtenfeld",
"ethereum__priority_fee": "Prioritätsgebühr:",
"ethereum__show_full_array": "Vollständiges Array anzeigen",
"ethereum__show_full_domain": "Vollständige Domain anzeigen",
"ethereum__show_full_message": "Vollständige Nachricht anzeigen",
"ethereum__show_full_struct": "Vollständige Struktur anzeigen",
"ethereum__sign_eip712": "EIP-712-Daten wirklich signieren?",
"ethereum__title_confirm_data": "DATEN BESTÄTIGEN",
"ethereum__title_confirm_domain": "DOMAIN BESTÄTIGEN",
"ethereum__title_confirm_message": "NACHRICHT BESTÄTIGEN",
"ethereum__title_confirm_struct": "STRUKTUR BESTÄTIGEN",
"ethereum__title_confirm_typed_data": "DATEN BESTÄTIGEN",
"ethereum__title_signing_address": "SIGNIERADRESSE",
"ethereum__units_template": "{} Einheiten",
"ethereum__unknown_token": "Ungültiger Token",
"ethereum__valid_signature": "Die Signatur ist gültig.",
"experimental_mode__enable": "Experimentelle Funktionen aktivieren?",
"experimental_mode__only_for_dev": "Nur für Entwicklung und Beta-Tests.",
"experimental_mode__title": "EXPERIMENTIERMODUS",
"fido__already_registered": "Bereits registriert",
"fido__device_already_registered": "Das Gerät ist bereits bei dieser Anwendung registriert.",
"fido__device_already_registered_with_template": "Dieses Gerät ist bereits bei {} registriert.",
"fido__device_not_registered": "Das Gerät ist nicht bei dieser Anwendung registriert.",
"fido__does_not_belong": "Die Daten, die du importieren möchtest,\ngehören nicht zu diesem Authentifikator.",
"fido__erase_credentials": "alle Daten löschen?",
"fido__export_credentials": "Informationen über die auf diesem Gerät gespeicherten Daten exportieren?",
"fido__not_registered": "Nicht registriert",
"fido__not_registered_with_template": "Dieses Gerät ist nicht registriert bei\n{}.",
"fido__please_enable_pin_protection": "Aktiviere den PIN-Schutz.",
"fido__title_authenticate": "FIDO2 AUTHENTIFIZIEREN",
"fido__title_import_credential": "DATEN IMPORTIEREN",
"fido__title_list_credentials": "DATEN AUFLISTEN",
"fido__title_register": "FIDO2 REGISTRIEREN",
"fido__title_remove_credential": "DATEN ENTFERNEN",
"fido__title_reset": "FIDO2 ZURÜCKSETZEN",
"fido__title_u2f_auth": "U2F authentifizieren",
"fido__title_u2f_register": "U2F registrieren",
"fido__title_verify_user": "FIDO2 Benutzer verifizieren",
"fido__unable_to_verify_user": "Benutzer kann nicht verifiziert werden.",
"fido__wanna_erase_credentials": "Möchtest du wirklich alle Daten löschen?",
"firmware_update__title": "FIRMWARE AKTUALISIEREN (TODO)",
"firmware_update__title_fingerprint": "FW Fingerabdruck (TODO)",
"homescreen__click_to_connect": "Zum Verbinden klicken",
"homescreen__click_to_unlock": "Zum Entsperren klicken",
"homescreen__title_backup_failed": "BACKUP FEHLGESCHLAGEN",
"homescreen__title_backup_needed": "BACKUP ERFORDERLICH",
"homescreen__title_coinjoin_authorized": "COINJOIN AUTORISIERT",
"homescreen__title_experimental_mode": "EXPERIMENTIERMODUS",
"homescreen__title_hold_to_lock": "ZUM SPERREN HALTEN",
"homescreen__title_no_usb_connection": "KEINE USB-VERBINDUNG",
"homescreen__title_pin_not_set": "PIN NICHT FESTGELEGT",
"homescreen__title_seedless": "OHNE SEED",
"homescreen__title_set": "STARTBILDSCHIRM FESTLEGEN",
"inputs__back": "ZURÜCK",
"inputs__cancel": "ABBRECHEN",
"inputs__delete": "LÖSCHEN",
"inputs__enter": "EINGEBEN",
"inputs__return": "ZURÜCK",
"inputs__show": "ANZEIGEN",
"inputs__space": "LEER",
"joint__title": "GEMEINSAME TRANSAKTION",
"joint__to_the_total_amount": "Gesamtbetrag:",
"joint__you_are_contributing": "Dein Anteil:",
"lockscreen__tap_to_connect": "Zum Verbinden tippen",
"lockscreen__tap_to_unlock": "Zum Entsperren tippen",
"lockscreen__title_locked": "GESPERRT",
"lockscreen__title_not_connected": "NICHT VERBUNDEN",
"misc__decrypt_value": "Wert entschlüsseln",
"misc__encrypt_value": "Wert verschlüsseln",
"misc__title_suite_labeling": "SUITE-LABELING",
"modify_amount__decrease_amount": "Betrag reduzieren um:",
"modify_amount__increase_amount": "Betrag erhöhen um:",
"modify_amount__new_amount": "Neuer Betrag:",
"modify_amount__title": "BETRAG ÄNDERN",
"modify_fee__decrease_fee": "Gebühr reduzieren um:",
"modify_fee__fee_rate": "Gebührensatz:",
"modify_fee__increase_fee": "Gebühr erhöhen um:",
"modify_fee__new_transaction_fee": "Neue Transaktionsgebühr:",
"modify_fee__no_change": "Deine Gebühr hat sich nicht geändert.",
"modify_fee__title": "GEBÜHR ÄNDERN",
"modify_fee__transaction_fee": "Transaktionsgebühr:",
"monero__confirm_export": "Export bestätigen",
"monero__confirm_ki_sync": "KI-Sync bestätigen",
"monero__confirm_refresh": "Aktualisieren bestätigen",
"monero__confirm_unlock_time": "Entsperrzeit bestätigen",
"monero__hashing_inputs": "Eingaben werden gehasht",
"monero__payment_id": "Zahlungs-ID",
"monero__postprocessing": "Wird nachgearbeitet...",
"monero__processing": "Wird verarbeitet...",
"monero__processing_inputs": "Eingaben werden verarbeitet",
"monero__processing_outputs": "Ausgaben werden verarbeitet",
"monero__signing": "Wird signiert...",
"monero__signing_inputs": "Eingaben werden signiert",
"monero__unlock_time_set_template": "Entsperrzeit für diese Transaktion ist auf {} festgelegt",
"monero__wanna_export_tx_der": "Möchtest du wirklich tx_key exportieren\nfür tx_proof?",
"monero__wanna_export_tx_key": "Möchtest du wirklich tx_key exportieren?",
"monero__wanna_export_watchkey": "Möchtest du wirklich Watch-Only-Daten exportieren?",
"monero__wanna_start_refresh": "Möchtest du wirklich\ndie Aktualisierung starten?",
"monero__wanna_sync_key_images": "Möchtest du wirklich\nKey-Images synchronisieren?",
"nem__absolute": "absolut",
"nem__activate": "Aktivieren",
"nem__add": "Hinzufügen",
"nem__confirm_action": "Aktion bestätigen",
"nem__confirm_address": "Adresse bestätigen",
"nem__confirm_creation_fee": "Erstellungsgebühr bestätigen",
"nem__confirm_mosaic": "Mosaik bestätigen",
"nem__confirm_multisig_fee": "Multisig-Gebühr bestätigen",
"nem__confirm_namespace": "Namespace bestätigen",
"nem__confirm_payload": "Nutzdaten bestätigen",
"nem__confirm_properties": "Eigenschaften bestätigen",
"nem__confirm_rental_fee": "Leihgebühr bestätigen",
"nem__confirm_transfer_of": "Bestätigung der Überweisung von",
"nem__convert_account_to_multisig": "Konto in Multisig-Konto umwandeln?",
"nem__cosign_transaction_for": "Transaktion mitzeichnen für",
"nem__cosignatory": " Mitunterzeichner",
"nem__create_mosaic": "Mosaik erstellen",
"nem__create_namespace": "Namespace erstellen",
"nem__deactivate": "Deaktivieren",
"nem__decrease": "Verringern",
"nem__description": "Beschreibung:",
"nem__divisibility_and_levy_cannot_be_shown": "Teilbarkeit und Abgaben können bei unbekannten Mosaiken nicht angezeigt werden",
"nem__encrypted": "Verschlüsselt:",
"nem__final_confirm": "Letzte Bestätigung",
"nem__immutable": "unveränderlich",
"nem__increase": "Erhöhen",
"nem__initial_supply": "Anfängliches Angebot:",
"nem__initiate_transaction_for": "Transaktion initiieren für",
"nem__levy_divisibility": "Teilbarkeit der Abgaben:",
"nem__levy_fee": "Abgabengebühr",
"nem__levy_fee_of": "Abgabengebühr von",
"nem__levy_mosaic": "Abgabenmosaik:",
"nem__levy_namespace": "Abgaben-Namespace:",
"nem__levy_recipient": "Abgabenempfänger:",
"nem__levy_type": "Abgabentyp:",
"nem__modify_supply_for": "Ändern des Angebots für",
"nem__modify_the_number_of_cosignatories_by": "Ändern der Anzahl der Mitunterzeichner um ",
"nem__mutable": "veränderlich",
"nem__of": "von",
"nem__percentile": "Perzentil",
"nem__raw_units_template": "{} Roheinheiten",
"nem__remote_harvesting": " Remote-Harvesting?",
"nem__remove": "Entfernen",
"nem__set_minimum_cosignatories_to": "Mindestanzahl der Mitunterzeichner festlegen auf ",
"nem__sign_tx_fee_template": "Diese Transaktion signieren\nund {} zahlen\nfür Netzwerkgebühr?",
"nem__supply_change": "Angebotsänderung",
"nem__supply_units_template": "{} Angebot um {} ganze Einheiten?",
"nem__transferable": "Übertragbar?",
"nem__under_namespace": "unter Namespace",
"nem__unencrypted": "Unverschlüsselt:",
"nem__unknown_mosaic": "Unbekanntes Mosaik.",
"passphrase__access_hidden_wallet": "Auf Passphrase Wallet zugreifen?",
"passphrase__always_on_device": "Möchtest du die Passphrase wirklich immer auf dem Gerät eingeben?",
"passphrase__from_host_not_shown": "Vom Host bereitgestellte Passphrase wird verwendet, aufgrund der Geräteeinstellungen aber nicht angezeigt.",
"passphrase__hidden_wallet": "Passphrase Wallet",
"passphrase__hide": "Passphrase vom Host ausblenden?",
"passphrase__next_screen_will_show_passphrase": "Passphrase wird auf dem nächsten Bildschirm angezeigt.",
"passphrase__please_enter": "Gib deine Passphrase ein.",
"passphrase__revoke_on_device": "Möchtest du die Passphrase auf dem Gerät widerrufen?",
"passphrase__title_confirm": "PASSPHRASE BESTÄTIGEN",
"passphrase__title_enter": "PASSPHRASE EINGEBEN",
"passphrase__title_hide": "PASSPHRASE AUSBLENDEN",
"passphrase__title_settings": "PASSPHRASEN-EINSTELLUNGEN",
"passphrase__title_source": "PASSPHRASEN-QUELLE",
"passphrase__turn_off": "Passphrasenschutz deaktivieren?",
"passphrase__turn_on": "Passphrasenschutz aktivieren?",
"pin__change": "PIN ändern?",
"pin__changed": "PIN geändert.",
"pin__cursor_will_change": "Die Cursorposition ändert sich für mehr Sicherheit zwischen den Einträgen.",
"pin__diff_from_wipe_code": "Die neue PIN muss sich von deinem Löschcode unterscheiden.",
"pin__disabled": "PIN-Schutz\ndeaktiviert.",
"pin__enabled": "PIN-Schutz\naktiviert.",
"pin__enter": "PIN eingeben",
"pin__enter_new": "Neue PIN eingeben",
"pin__entered_not_valid": "Der Pin, den Sie eingegeben haben, ist nicht gültig. (TODO)",
"pin__info": "PIN ist erforderlich, um auf das Gerät zuzugreifen.",
"pin__invalid_pin": "Die eingegebene PIN ist ungültig.",
"pin__last_attempt": "Letzter Versuch",
"pin__mismatch": "Eingegebene PINs stimmen nicht überein.",
"pin__pin_mismatch": "Pin -Nichtübereinstimmung (TODO)",
"pin__please_check_again": "Bitte noch einmal prüfen.",
"pin__reenter_new": "Neue PIN erneut eingeben",
"pin__reenter_to_confirm": "Gib die PIN zur Bestätigung erneut ein.",
"pin__should_be_long": "PIN sollte aus 4-50 Ziffern bestehen.",
"pin__title_check_pin": "PIN PRÜFEN",
"pin__title_settings": "PIN-EINSTELLUNGEN",
"pin__title_wrong_pin": "FALSCHE PIN",
"pin__tries_left": "Versuche übrig",
"pin__turn_off": "Möchtest du den PIN-Schutz wirklich deaktivieren?",
"pin__turn_on": "PIN-Schutz aktivieren?",
"pin__wrong_pin": "Falsche PIN",
"plurals__contains_x_keys": "Schlüssel | Schlüssel (TODO)",
"plurals__lock_after_x_hours": "Stunde | Stunden (TODO)",
"plurals__lock_after_x_milliseconds": "Millisekunden | Millisekunden (TODO)",
"plurals__lock_after_x_minutes": "Minute | Minuten (TODO)",
"plurals__lock_after_x_seconds": "Zweite | Sekunden (TODO)",
"plurals__sign_x_actions": "Aktion | Aktionen (TODO)",
"plurals__transaction_of_x_operations": "Betrieb | Operationen (TODO)",
"plurals__x_groups_needed": "Gruppe | Gruppen (TODO)",
"plurals__x_shares_needed": "Aktien | Aktien (TODO)",
"progress__authenticity_check": "Authentizität überprüfen ... (TODO)",
"progress__done": "Fertig",
"progress__loading_transaction": "Transaktion wird geladen...",
"progress__one_second_left": "1 Sekunde verbleibend",
"progress__please_wait": "BITTE WARTEN",
"progress__processing": "VERARBEITUNG",
"progress__refreshing": "Wird aktualisiert...",
"progress__signing_transaction": "Transaktion wird signiert...",
"progress__syncing": "Wird synchronisiert...",
"progress__x_seconds_left_template": "{} Sekunden verbleibend",
"reboot_to_bootloader__restart": "Möchtest du Trezor im Bootloader-Modus neu starten?",
"reboot_to_bootloader__title": "ZUM BOOTLOADER",
"reboot_to_bootloader__version_by_template": "Firmware Version {}\nvon {} (TODO)",
"recovery__cancel_dry_run": "Backup-Überprüfung abbrechen",
"recovery__check_dry_run": "Backup überprüfen?",
"recovery__cursor_will_change": "Die Cursorposition ändert sich für mehr Sicherheit zwischen den Einträgen.",
"recovery__dry_run_bip39_valid_match": "Der eingegebene Recovery Seed ist gültig und stimmt mit dem auf dem Gerät überein.",
"recovery__dry_run_bip39_valid_mismatch": "Der eingegebene Recovery Seed ist gültig, stimmt aber nicht mit dem auf dem Gerät überein.",
"recovery__dry_run_slip39_valid_match": "Die eingegebenen Recovery Shares sind gültig und stimmen mit den Daten auf dem Gerät überein.",
"recovery__dry_run_slip39_valid_mismatch": "Die eingegebenen Recovery Shares sind gültig, stimmen aber nicht mit den Daten auf dem Gerät überein.",
"recovery__enter_any_share": "Share eingeben",
"recovery__enter_backup": "Gib dein Backup ein.",
"recovery__enter_different_share": "Gib einen anderen Share ein.",
"recovery__enter_share_from_diff_group": "Gib einen Share von einer anderen Gruppe ein.",
"recovery__group_num_template": "Gruppe {}",
"recovery__group_threshold_reached": "Gruppenschwelle wurde erreicht.",
"recovery__invalid_seed_entered": "Eingegebener Recovery Seed ist ungültig.",
"recovery__invalid_share_entered": "Eingegebener Recovery Share ist ungültig.",
"recovery__more_shares_needed": "Weitere Shares erforderlich",
"recovery__num_of_words": "Wähle die Anzahl der Wörter in deinem Backup aus.",
"recovery__only_first_n_letters": "Sie müssen nur die ersten 2-4 Buchstaben jedes Wortes auswählen. (TODO)",
"recovery__progress_will_be_lost": "Alle Fortschritte gehen verloren.",
"recovery__select_num_of_words": "Wähle die Anzahl der Wörter in deinem Backup aus.",
"recovery__share_already_entered": "Share wurde bereits eingegeben.",
"recovery__share_from_another_shamir": "Du hast einen Share von einem anderen Shamir-Backup eingegeben.",
"recovery__share_num_template": "Share {}",
"recovery__title": "WALLET WIEDERHERSTELLEN",
"recovery__title_cancel_dry_run": "BACKUP-ÜBERPRÜFUNG ABBRECHEN",
"recovery__title_cancel_recovery": "WIEDERHERSTELLUNG ABBRECHEN",
"recovery__title_dry_run": "BACKUP-ÜBERPRÜFUNG",
"recovery__title_recover": "WALLET WIEDERHERSTELLEN",
"recovery__title_remaining_shares": "VERBLEIBENDE SHARES",
"recovery__type_word_x_of_y_template": "Tippe Wort {} von {}",
"recovery__wallet_recovered": "Wallet-Wiederherstellung erfolgreich",
"recovery__wanna_cancel_dry_run": "Möchtest du die Backup-Überprüfung wirklich abbrechen?",
"recovery__wanna_cancel_recovery": "Möchtest du die Wiederherstellung wirklich abbrechen?",
"recovery__word_count_template": "({} Wörter)",
"recovery__word_x_of_y_template": "WORT {} VON {}",
"recovery__x_more_items_starting_template_plural": "{count} mehr {Plural} Start (TODO)",
"recovery__x_more_shares_needed_template_plural": "{count} mehr {plural} benötigt. (TODO)",
"recovery__x_of_y_entered_template": "{} von {} Shares erfolgreich eingegeben.",
"recovery__you_have_entered": "Du hast eingegeben",
"reset__advanced_group_threshold_info": "Die Gruppenschwelle bestimmt, wie viele Gruppen zur Wallet-Wiederherstellung nötig sind.",
"reset__all_x_of_y_template": "alle {} der {} Shares",
"reset__any_x_of_y_template": "{} der {} Shares",
"reset__button_create": "WALLET ERSTELLEN",
"reset__button_recover": "WALLET WIEDERHERSTELLEN",
"reset__by_continuing": "Wenn du fortfährst, stimmst du den Geschäftsbedingungen von Trezor Company zu.",
"reset__check_backup_title": "BACKUP ÜBERPRÜFEN",
"reset__check_group_share_title_template": "G{} - SHARE {} ÜBERPRÜFEN",
"reset__check_seed_title": "SEED ÜBERPRÜFEN",
"reset__check_share_title_template": "SHARE #{} ÜBERPRÜFEN",
"reset__continue_with_next_share": "Fahre mit dem nächsten Share fort.",
"reset__continue_with_share_template": "Fahre mit Share #{} fort.",
"reset__finished_verifying_group_template": "Die Überprüfung deiner Recovery Shares für die Gruppe {} ist abgeschlossen.",
"reset__finished_verifying_seed": "Die Überprüfung deines Recovery Seeds ist abgeschlossen.",
"reset__finished_verifying_shares": "Die Überprüfung deiner Recovery Shares ist abgeschlossen.",
"reset__group_description": "Eine Gruppe besteht aus Recovery Shares.",
"reset__group_info": "Jede Gruppe hat eine bestimmte Anzahl von Shares und eine eigene Schwelle. In den nächsten Schritten legst du die Anzahl der Shares und die Schwellen fest.",
"reset__group_share_checked_successfully_template": "Gruppe {} - Share {} erfolgreich geprüft.",
"reset__group_share_title_template": "GRUPPE {} - SHARE {}",
"reset__more_info_at": "Weitere Informationen unter",
"reset__need_all_share_template": "Du benötigst alle {} Shares zur Wiederherstellung.",
"reset__need_any_share_template": "Du benötigst {} Shares zur Wiederherstellung.",
"reset__needed_to_form_a_group": "erforderlich, um Gruppe zu bilden. ",
"reset__needed_to_recover_your_wallet": "erforderlich, um dein Wallet wiederherzustellen. ",
"reset__never_make_digital_copy": "Erstelle niemals eine digitale Kopie deines Backups oder lade es online hoch!",
"reset__num_of_share_holders_template": "{} Personen oder Standorte halten jeweils einen Share.",
"reset__num_of_shares_advanced_info_template": "Jeder Recovery Share besteht aus 20 Wörtern. Wähle jetzt die Schwelle für die Anzahl der Shares zur Bildung von Gruppe {}.",
"reset__num_of_shares_basic_info": "Jeder Recovery Share besteht aus 20 Wörtern. Wähle jetzt, wie viele Shares du für die Wiederherstellung deiner Wallets benötigst.",
"reset__num_shares_for_group_template": "Die erforderliche Anzahl an Shares zur Bildung der Gruppe {}.",
"reset__number_of_shares_info": "= Gesamtzahl eindeutiger Wortlisten für Wallet-Backup.",
"reset__one_share": "1 Share",
"reset__only_one_share_will_be_created": "Es wird nur ein Share erstellt.",
"reset__recovery_seed_title": "RECOVERY SEED",
"reset__recovery_share_title_template": "RECOVERY SHARE #{}",
"reset__required_number_of_groups": "Die für die Wiederherstellung erforderliche Anzahl von Gruppen.",
"reset__select_correct_word": "Wähle für jede Position das richtige Wort.",
"reset__select_word_template": "{} WORT AUSWÄHLEN",
"reset__select_word_x_of_y_template": "Wort {} von {} auswählen:",
"reset__set_it_to_count_template": "Bei {} benötigst du ",
"reset__share_checked_successfully_template": "Recovery Share #{} erfolgreich geprüft.",
"reset__share_words_title": "STANDARD-BACKUP",
"reset__slip39_checklist_num_groups": "Anzahl der Gruppen",
"reset__slip39_checklist_num_shares": "Anzahl der Shares",
"reset__slip39_checklist_set_num_groups": "Stellen Sie die Anzahl der Gruppen fest (TODO)",
"reset__slip39_checklist_set_num_shares": "Anzahl der Aktien festlegen (TODO)",
"reset__slip39_checklist_set_sizes": "Größen und Schwellen festlegen",
"reset__slip39_checklist_set_sizes_longer": "Setzen Sie Größe und Schwellenwert für jede Gruppe (TODO)",
"reset__slip39_checklist_set_threshold": "Schwelle festlegen",
"reset__slip39_checklist_title": "BACKUP-CHECKLISTE",
"reset__slip39_checklist_write_down": "Alle Shares notieren und prüfen",
"reset__slip39_checklist_write_down_recovery": "Schreiben Sie auf und überprüfen Sie alle Wiederherstellungsanteile (TODO)",
"reset__the_threshold_sets_the_number_of_shares": "Die Schwelle bestimmt die Anzahl der Shares ",
"reset__threshold_info": "= Mindestanzahl eindeutiger Wortlisten für Wiederherstellung.",
"reset__title_backup_is_done": "BACKUP FERTIG",
"reset__title_create_wallet": "WALLET ERSTELLEN",
"reset__title_create_wallet_shamir": "WALLET ERSTELLEN (SHAMIR)",
"reset__title_group_threshold": "GRUPPENSCHWELLE",
"reset__title_number_of_groups": "ANZAHL DER GRUPPEN",
"reset__title_number_of_shares": "ANZAHL SHARES",
"reset__title_set_group_threshold": "GRUPPENSCHWELLE FESTLEGEN",
"reset__title_set_number_of_groups": "ANZAHL DER GRUPPEN FESTLEGEN",
"reset__title_set_number_of_shares": "ANZAHL DER SHARES FESTLEGEN",
"reset__title_set_threshold": "SCHWELLE FESTLEGEN",
"reset__to_form_group_template": "zur Bildung von Gruppe {}.",
"reset__tos_link": "trezor.io/tos",
"reset__total_number_of_shares_in_group_template": "Bestimme die Anzahl der Shares in Gruppe {}.",
"reset__use_your_backup": "Verwende dein Backup, um dein Wallet wiederherzustellen.",
"reset__write_down_words_template": "Schreibe alle {} Wörter der Reihe nach auf.",
"reset__wrong_word_selected": "Ausgewähltes Wort ist falsch!",
"reset__you_need_one_share": "Du benötigst 1 Share zur Wiederherstellung.",
"reset__your_backup_is_done": "Dein Backup ist abgeschlossen.",
"ripple__confirm_tag": "Tag bestätigen",
"ripple__destination_tag_template": "Ziel-Tag:\n{}",
"rotation__change_template": "Möchtest du das Gerät nach {} drehen?",
"rotation__east": "Osten",
"rotation__north": "Norden",
"rotation__south": "Süden",
"rotation__title_change": "DREHUNG ÄNDERN",
"rotation__west": "Westen",
"safety_checks__approve_unsafe_always": "Trezor erlaubt dir, einige Aktionen zu genehmigen, die unsicher sein könnten.",
"safety_checks__approve_unsafe_temporary": "Trezor erlaubt dir vorübergehend, einige Aktionen zu genehmigen, die unsicher sein könnten.",
"safety_checks__enforce_strict": "Möchtest du wirklich strenge Sicherheitsüberprüfungen erzwingen (empfohlen)?",
"safety_checks__title": "SICHERHEITSÜBERPRÜFUNGEN",
"safety_checks__title_safety_override": "SICHERHEITSÜBERSCHREIBUNG",
"sd_card__all_data_will_be_lost": "Alle Daten auf der SD-Karte gehen verloren.",
"sd_card__card_required": "SD-Karte erforderlich.",
"sd_card__disable": "Möchtest du den SD-Kartenschutz wirklich vom Gerät entfernen?",
"sd_card__disabled": "Du hast den SD-Schutz erfolgreich deaktiviert.",
"sd_card__enable": "Möchtest du dein Gerät wirklich mit dem SD-Kartenschutz sichern?",
"sd_card__enabled": "Du hast den SD-Schutz erfolgreich aktiviert.",
"sd_card__error": "SD-Kartenfehler",
"sd_card__format_card": "SD-Karte formatieren",
"sd_card__insert_correct_card": "Lege die für dieses Gerät passende SD-Karte ein.",
"sd_card__please_insert": "Lege deine SD-Karte ein.",
"sd_card__please_unplug_and_insert": "Trenne das Gerät und lege deine SD-Karte ein.",
"sd_card__problem_accessing": "Es gab ein Problem beim Zugriff auf die SD-Karte.",
"sd_card__refresh": "Möchtest du wirklich das aktuelle SD-Kartengeheimnis durch ein neu generiertes ersetzen?",
"sd_card__refreshed": "Du hast den SD-Schutz erfolgreich aktualisiert.",
"sd_card__restart": "Möchtest du Trezor im Bootloader-Modus neu starten?",
"sd_card__title": "SD-KARTENSCHUTZ",
"sd_card__title_problem": "SD-Kartenproblem",
"sd_card__unknown_filesystem": "Unbekanntes Dateisystem",
"sd_card__unplug_and_insert_correct": "Trenne das Gerät und lege die richtige SD-Karte ein.",
"sd_card__use_different_card": "Verwende eine andere Karte oder formatiere die SD-Karte mit dem FAT32-Dateisystem",
"sd_card__wanna_format": "Möchtest du die SD-Karte wirklich formatieren?",
"sd_card__wrong_sd_card": "Falsche SD-Karte",
"send__address_path": "Adressweg (TODO)",
"send__confirm_sending": "Confirm_sending",
"send__from_multiple_accounts": "Senden von mehreren Konten. (TODO)",
"send__including_fee": "Einschließlich Gebühr:",
"send__maximum_fee": "Max. Gebühr:",
"send__receiving_to_multisig": "Empfangen auf eine Multisig -Adresse. (TODO)",
"send__title_confirm_sending": "SENDEN BESTÄTIGEN",
"send__title_joint_transaction": "GEMEINSAME TRANSAKTION",
"send__title_receiving_to": "Empfangen zu (TODO)",
"send__title_sending": "SENDEN",
"send__title_sending_amount": "BETRAG SENDEN",
"send__title_sending_to": "SENDEN AN",
"send__to_the_total_amount": "Gesamtbetrag:",
"send__total_amount": "Gesamtbetrag:",
"send__transaction_id": "Transaktions-ID:",
"send__you_are_contributing": "Dein Anteil:",
"share_words__words_in_order": " Wörter der Reihe nach notiert.",
"share_words__wrote_down_all": "Ich habe alle ",
"sign_message__bytes_template": "{} Bytes (TODO)",
"sign_message__confirm_address": "SIGNIERADRESSE",
"sign_message__confirm_message": "NACHRICHT BESTÄTIGEN",
"sign_message__message_size": "Nachrichtengröße: (TODO)",
"sign_message__verify_address": "ADRESSE BESTÄTIGEN (TODO)",
"solana__account_index": "Kontoindex (TODO)",
"solana__associated_token_account": "Assoziiertes Token -Konto (TODO)",
"solana__confirm_multisig": "Multisig bestätigen (TODO)",
"solana__expected_fee": "Erwartete Gebühr (TODO)",
"solana__instruction_accounts_template": "Der Befehl enthält {} Konten und ihre Daten sind {} Bytes lang. (TODO)",
"solana__instruction_data": "Anweisungsdaten (TODO)",
"solana__instruction_is_multisig": "Die folgende Anweisung ist eine Multisig -Anweisung. (TODO)",
"solana__is_provided_via_lookup_table_template": "{} wird über eine Nachschlagtabelle bereitgestellt. (TODO)",
"solana__lookup_table_address": "Suchtabellenadresse (TODO)",
"solana__multiple_signers": "Mehrere Unterzeichner (TODO)",
"solana__token_address": "Token -Adresse (TODO)",
"solana__transaction_contains_unknown_instructions": "Die Transaktion enthält unbekannte Anweisungen. (TODO)",
"solana__transaction_requires_x_signers_template": "Die Transaktion erfordert {} Unterzeichner, was die Gebühr erhöht. (TODO)",
"stellar__account_merge": "Kontozusammenführung",
"stellar__account_thresholds": "Kontoschwellen",
"stellar__add_signer": "Unterzeichner hinzufügen",
"stellar__add_trust": "Trust hinzufügen",
"stellar__all_will_be_sent_to": "Alle XLM werden gesendet an:",
"stellar__allow_trust": "Trust zulassen",
"stellar__asset": "Asset",
"stellar__balance_id": "Balance -ID (TODO)",
"stellar__bump_sequence": "Bump-Sequenz",
"stellar__buying": "Kaufen:",
"stellar__claim_claimable_balance": "Anspruchsbeanspruchungsbilanz (TODO)",
"stellar__clear_data": "Daten löschen",
"stellar__clear_flags": "Flags löschen",
"stellar__confirm_issuer": "Aussteller bestätigen",
"stellar__confirm_memo": "Memo bestätigen",
"stellar__confirm_network": "Netzwerk bestätigen",
"stellar__confirm_operation": "Operation bestätigen",
"stellar__confirm_stellar": "Stellar bestätigen",
"stellar__confirm_timebounds": "Zeitrahmen bestätigen",
"stellar__create_account": "Konto erstellen",
"stellar__debited_amount": "Abgebuchter Betrag",
"stellar__delete": "Löschen",
"stellar__delete_passive_offer": "Passives Angebot löschen",
"stellar__delete_trust": "Trust löschen",
"stellar__destination": "Ziel:",
"stellar__exchanges_require_memo": "Wichtig: Viele Börsen verlangen bei der Einzahlung ein Memo",
"stellar__final_confirm": "Letzte Bestätigung",
"stellar__hash": "Hash:",
"stellar__high": "Hoch:",
"stellar__home_domain": "Startseite",
"stellar__inflation": "Inflation",
"stellar__initial_balance": "Startguthaben",
"stellar__initialize_signing_with": "Initialisierung der Unterzeichnung mit",
"stellar__issuer_template": "{} Aussteller:",
"stellar__key": "Key:",
"stellar__limit": "Grenze:",
"stellar__low": "Niedrig:",
"stellar__master_weight": "Master-Gewicht:",
"stellar__medium": "Mittel:",
"stellar__new_offer": "Neues Angebot",
"stellar__new_passive_offer": "Neues passives Angebot",
"stellar__no_memo_set": "Kein Memo festgelegt.",
"stellar__no_restriction": "[keine Einschränkung]",
"stellar__on_network_template": "Transaktion ist auf {}",
"stellar__path_pay": "Path Pay",
"stellar__path_pay_at_least": "Path Pay mindestens",
"stellar__pay": "Zahlen:",
"stellar__pay_at_most": "Maximal:",
"stellar__preauth_transaction": "Vor-Auth-Transaktion:",
"stellar__price_per_template": "Preis pro {}:",
"stellar__private_network": "privates Netzwerk",
"stellar__remove_signer": "Unterzeichner entfernen",
"stellar__revoke_trust": "Trust aufheben",
"stellar__selling": "Verkaufen:",
"stellar__set_data": "Daten festlegen",
"stellar__set_flags": "Flags festlegen",
"stellar__set_sequence_to_template": "Sequenz auf {} setzen?",
"stellar__sign_tx_count_template": "Signiere diese Transaktion, die sich aus {} zusammensetzt ",
"stellar__sign_tx_fee_template": " und zahle {}\nGebühr?",
"stellar__source_account": "Quellkonto:",
"stellar__testnet_network": "Testnet-Netzwerk",
"stellar__trusted_account": "Vertrauenswürdiges Konto",
"stellar__update": "Aktualisieren",
"stellar__valid_from": "Gültig von (UTC)",
"stellar__valid_to": "Gültig bis (UTC)",
"stellar__value_sha256": "Wert (SHA-256):",
"stellar__wanna_clean_value_key_template": "Möchtest du den Wert-Key {} löschen?",
"stellar__your_account": " dein Konto",
"tezos__baker_address": "Baker-Adresse:",
"tezos__balance": "Guthaben:",
"tezos__ballot": "Abstimmung:",
"tezos__confirm_delegation": "Delegierung bestätigen",
"tezos__confirm_origination": "Herkunft bestätigen",
"tezos__delegator": "Delegator:",
"tezos__proposal": "Vorschlag",
"tezos__register_delegate": "Delegierten registrieren",
"tezos__remove_delegation": "Delegierung entfernen",
"tezos__submit_ballot": "Abstimmung senden",
"tezos__submit_proposal": "Vorschlag senden",
"tezos__submit_proposals": "Vorschläge senden",
"tutorial__middle_click": "Drücke gleichzeitig rechts und links,\num zu bestätigen.",
"tutorial__press_and_hold": "Drücke und halte die rechte Taste,\num wichtige Vorgänge zu genehmigen.",
"tutorial__ready_to_use": "Du kannst jetzt\nTrezor verwenden.",
"tutorial__scroll_down": "Drücke rechts, um nach unten zu scrollen und alles zu lesen, wenn der Text nicht auf einen Bildschirm passt.\n\rDrücke links, um nach oben zu scrollen.",
"tutorial__sure_you_want_skip": "Möchtest du das Tutorial\nwirklich überspringen?",
"tutorial__title_hello": "HALLO",
"tutorial__title_screen_scroll": "BILDSCHIRM SCROLLEN",
"tutorial__title_skip": "TUTORIAL ÜBERSPRINGEN",
"tutorial__title_tutorial_complete": "TUTORIAL BEENDET",
"tutorial__use_trezor": "Verwende Trezor durch\ndrücken der linken und rechten Tasten.\n\rWeiter rechts.",
"tutorial__welcome_press_right": "Willkommen bei Trezor. Drücke rechts, um fortzufahren.",
"u2f__get": "U2F-Zähler erhöhen und abrufen?",
"u2f__set_template": "U2F-Zähler auf {} setzen?",
"u2f__title_get": "U2F-ZÄHLER ERHALTEN",
"u2f__title_set": "U2F-ZÄHLER FESTLEGEN",
"wipe__info": "Alle Daten werden gelöscht.",
"wipe__title": "GERÄTEDATEN LÖSCHEN",
"wipe__want_to_wipe": "Möchtest du die Gerätedaten wirklich löschen?\n",
"wipe_code__change": "Löschcode ändern?",
"wipe_code__changed": "Löschcode geändert.",
"wipe_code__diff_from_pin": "Der Löschcode muss sich von deiner PIN unterscheiden.\nVersuche es noch einmal.",
"wipe_code__disabled": "Löschcode deaktiviert.",
"wipe_code__enabled": "Löschcode aktiviert.",
"wipe_code__enter_new": "Neuen Löschcode eingeben",
"wipe_code__info": "Mit dem Löschcode können alle Daten von diesem Gerät gelöscht werden.",
"wipe_code__invalid": "Ungültiger Löschcode (TODO)",
"wipe_code__mismatch": "Eingegebene Löschcodes stimmen nicht überein.",
"wipe_code__reenter": "Löschcode neu eingeben",
"wipe_code__reenter_to_confirm": "Gib den Löschcode zur Bestätigung erneut ein.",
"wipe_code__title_check": "LÖSCHCODE PRÜFEN",
"wipe_code__title_invalid": "UNGÜLTIGER LÖSCHCODE",
"wipe_code__title_settings": "LÖSCHCODE-EINSTELL.",
"wipe_code__turn_off": "Löschcode-Schutz deaktivieren?",
"wipe_code__turn_on": "Löschcode-Schutz aktivieren?",
"wipe_code__wipe_code_mismatch": "Code -Nichtübereinstimmung löschen (TODO)",
"word_count__title": "ANZAHL DER WÖRTER",
"words__account": "Konto (TODO)",
"words__account_colon": "Konto: (TODO)",
"words__address": "Adresse (TODO)",
"words__amount": "Menge (TODO)",
"words__are_you_sure": "Bist du dir sicher?",
"words__array_of": "Anordnung von (TODO)",
"words__blockhash": "Blockhash (TODO)",
"words__buying": "Kaufen",
"words__confirm": "Bestätigen (TODO)",
"words__confirm_fee": "Gebühr bestätigen (TODO)",
"words__contains": "Enthält (TODO)",
"words__continue_anyway": "trotzdem fortfahren?",
"words__continue_with": "Weiter mit",
"words__error": "Fehler",
"words__fee": "Gebühr (TODO)",
"words__from": "von",
"words__keep_it_safe": "Sicher aufbewahren!",
"words__know_what_your_doing": "Fahre nur fort, wenn du dir ganz sicher bist!",
"words__my_trezor": "Mein Trezor (TODO)",
"words__no": "NEIN (TODO)",
"words__outputs": "Ausgaben",
"words__please_check_again": "Noch einmal prüfen",
"words__please_try_again": "Noch einmal versuchen",
"words__really_wanna": "Möchtest du wirklich",
"words__recipient": "Empfänger (TODO)",
"words__sign": "Signieren",
"words__signer": "Unterzeichner (TODO)",
"words__title_check": "PRÜFEN",
"words__title_group": "GRUPPE",
"words__title_information": "INFORMATION (TODO)",
"words__title_remember": "ERINNERUNG",
"words__title_share": "SHARE",
"words__title_shares": "SHARES",
"words__title_success": "ERFOLG",
"words__title_summary": "ZUSAMMENFASSUNG",
"words__title_threshold": "SCHWELLE",
"words__unknown": "Unbekannt",
"words__warning": "Warnung",
"words__writable": "Schreibbar (TODO)",
"words__yes": "Ja (TODO)"
}
}

@ -0,0 +1,842 @@
{
"header": {
"language": "en",
"version": "2.6.5"
},
"translations": {
"addr_mismatch__contact_support_at": "Please contact Trezor support at",
"addr_mismatch__key_mismatch": "Key mismatch?",
"addr_mismatch__mismatch": "Address mismatch?",
"addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__title": "ADDRESS MISMATCH?",
"addr_mismatch__title_key_mismatch": "KEY MISMATCH?",
"addr_mismatch__wrong_derivation_path": "Wrong derivation path for selected account.",
"addr_mismatch__xpub_mismatch": "XPUB mismatch?",
"address__public_key": "Public key",
"address__title_cosigner": "COSIGNER",
"address__title_receive_address": "RECEIVE ADDRESS",
"address__title_yours": "YOURS",
"address_details__derivation_path": "Derivation path:",
"address_details__title_receive_address": "RECEIVE ADDRESS",
"address_details__title_receiving_to": "RECEIVING TO",
"authenticate__confirm_template": "Allow connected computer to confirm your {} is genuine?",
"authenticate__header": "Authenticate device",
"auto_lock__change_template": "Auto-lock your Trezor after {} of inactivity?",
"auto_lock__title": "AUTO-LOCK DELAY",
"backup__can_back_up_anytime": "You can back up your Trezor once, at any time.",
"backup__it_should_be_backed_up": "You should back up your new wallet right now.",
"backup__it_should_be_backed_up_now": "It should be backed up now!",
"backup__new_wallet_created": "New wallet created.",
"backup__new_wallet_successfully_created": "New wallet created successfully.",
"backup__recover_anytime": "You can use your backup to recover your wallet at any time.",
"backup__title_backup_wallet": "BACK UP WALLET",
"backup__title_skip": "SKIP BACKUP",
"backup__want_to_skip": "Are you sure you want to skip the backup?",
"binance__buy": "Buy",
"binance__confirm_cancel": "Confirm cancel",
"binance__confirm_input": "Confirm input",
"binance__confirm_order": "Confirm order",
"binance__confirm_output": "Confirm output",
"binance__order_id": "Order ID:",
"binance__pair": "Pair:",
"binance__price": "Price:",
"binance__quantity": "Quantity:",
"binance__sell": "Sell",
"binance__sender_address": "Sender address:",
"binance__side": "Side:",
"bitcoin__commitment_data": "Commitment data:",
"bitcoin__confirm_locktime": "Confirm locktime",
"bitcoin__create_proof_of_ownership": "Do you want to create a proof of ownership?",
"bitcoin__high_mining_fee_template": "The mining fee of\n{}\nis unexpectedly high.",
"bitcoin__locktime_no_effect": "Locktime is set but will have no effect.",
"bitcoin__locktime_set_to": "Locktime set to:",
"bitcoin__locktime_set_to_blockheight": "Locktime set to blockheight:",
"bitcoin__lot_of_change_outputs": "A lot of change-outputs.",
"bitcoin__multiple_accounts": "Multiple accounts",
"bitcoin__new_fee_rate": "New fee rate:",
"bitcoin__simple_send_of": "Simple send of",
"bitcoin__ticket_amount": "Ticket amount:",
"bitcoin__title_confirm_details": "CONFIRM DETAILS",
"bitcoin__title_finalize_transaction": "FINALIZE TRANSACTION",
"bitcoin__title_high_mining_fee": "HIGH MINING FEE",
"bitcoin__title_meld_transaction": "MELD TRANSACTIONS",
"bitcoin__title_modify_amount": "MODIFY AMOUNT",
"bitcoin__title_payjoin": "PAYJOIN",
"bitcoin__title_proof_of_ownership": "PROOF OF OWNERSHIP",
"bitcoin__title_purchase_ticket": "PURCHASE TICKET",
"bitcoin__title_update_transaction": "UPDATE TRANSACTION",
"bitcoin__unknown_path": "Unknown path",
"bitcoin__unknown_transaction": "Unknown transaction",
"bitcoin__unusually_high_fee": "Unusually high fee.",
"bitcoin__unverified_external_inputs": "The transaction contains unverified external inputs.",
"bitcoin__valid_signature": "The signature is valid.",
"bitcoin__voting_rights": "Voting rights to:",
"buttons__abort": "ABORT",
"buttons__access": "ACCESS",
"buttons__again": "AGAIN",
"buttons__allow": "ALLOW",
"buttons__back": "BACK",
"buttons__back_up": "BACK UP",
"buttons__cancel": "CANCEL",
"buttons__change": "CHANGE",
"buttons__check": "CHECK",
"buttons__check_again": "CHECK AGAIN",
"buttons__close": "CLOSE",
"buttons__confirm": "CONFIRM",
"buttons__continue": "CONTINUE",
"buttons__details": "DETAILS",
"buttons__enable": "ENABLE",
"buttons__enter": "ENTER",
"buttons__enter_share": "ENTER SHARE",
"buttons__export": "EXPORT",
"buttons__format": "FORMAT",
"buttons__go_back": "GO BACK",
"buttons__hold_to_confirm": "HOLD TO CONFIRM",
"buttons__info": "INFO",
"buttons__install": "INSTALL",
"buttons__more_info": "MORE INFO",
"buttons__ok_i_understand": "OK, I UNDERSTAND",
"buttons__purchase": "PURCHASE",
"buttons__quit": "QUIT",
"buttons__restart": "RESTART",
"buttons__retry": "RETRY",
"buttons__select": "SELECT",
"buttons__set": "SET",
"buttons__show_all": "SHOW ALL",
"buttons__show_details": "SHOW DETAILS",
"buttons__show_words": "SHOW WORDS",
"buttons__skip": "SKIP",
"buttons__try_again": "TRY AGAIN",
"buttons__turn_off": "TURN OFF",
"buttons__turn_on": "TURN ON",
"cardano__addr_base": "Base",
"cardano__addr_enterprise": "Enterprise",
"cardano__addr_legacy": "Legacy",
"cardano__addr_pointer": "Pointer",
"cardano__addr_reward": "Reward",
"cardano__address_no_staking": "address - no staking rewards.",
"cardano__amount_burned_decimals_unknown": "Amount burned (decimals unknown):",
"cardano__amount_minted_decimals_unknown": "Amount minted (decimals unknown):",
"cardano__amount_sent_decimals_unknown": "Amount sent (decimals unknown):",
"cardano__anonymous_pool": "Pool has no metadata (anonymous pool)",
"cardano__asset_fingerprint": "Asset fingerprint:",
"cardano__auxiliary_data_hash": "Auxiliary data hash:",
"cardano__block": "Block",
"cardano__catalyst": "Catalyst",
"cardano__certificate": "Certificate",
"cardano__certificate_path": "Certificate path",
"cardano__change_output": "Change output",
"cardano__change_output_path": "Change output path",
"cardano__change_output_staking_path": "Change output staking path",
"cardano__check_all_items": "Check all items carefully.",
"cardano__choose_level_of_details": "Choose level of details:",
"cardano__collateral_input_id": "Collateral input ID:",
"cardano__collateral_input_index": "Collateral input index:",
"cardano__collateral_output_contains_tokens": "The collateral return output contains tokens.",
"cardano__collateral_return": "Collateral return",
"cardano__confirm": "Confirm:",
"cardano__confirm_signing_stake_pool": "Confirm signing the stake pool registration as an owner.",
"cardano__confirm_transaction": "Confirm transaction",
"cardano__confirming_a_multisig_transaction": "Confirming a multisig transaction.",
"cardano__confirming_pool_registration": "Confirming pool registration as owner.",
"cardano__confirming_transction": "Confirming a transaction.",
"cardano__cost": "Cost",
"cardano__credential_mismatch": "Credential doesn't match payment credential.",
"cardano__datum_hash": "Datum hash:",
"cardano__delegating_to": "Delegating to:",
"cardano__for_account_and_index_template": "for account {} and index {}:",
"cardano__for_account_template": "for account {}:",
"cardano__for_key_hash": "for key hash:",
"cardano__for_script": "for script:",
"cardano__inline_datum": "Inline datum",
"cardano__input_id": "Input ID:",
"cardano__input_index": "Input index:",
"cardano__intro_text_change": "The following address is a change address. Its",
"cardano__intro_text_owned_by_device": "The following address is owned by this device. Its",
"cardano__intro_text_registration_payment": "The vote key registration payment address is owned by this device. Its",
"cardano__key_hash": "key hash",
"cardano__margin": "Margin",
"cardano__multisig_path": "multi-sig path",
"cardano__nested_scripts_template": "Contains {} nested scripts.",
"cardano__network": "Network:",
"cardano__no_output_tx": "Transaction has no outputs, network cannot be verified.",
"cardano__nonce": "Nonce:",
"cardano__other": "other",
"cardano__path": "path",
"cardano__pledge": "Pledge",
"cardano__pointer": "pointer",
"cardano__policy_id": "Policy ID:",
"cardano__pool_metadata_hash": "Pool metadata hash:",
"cardano__pool_metadata_url": "Pool metadata url:",
"cardano__pool_owner": "Pool owner:",
"cardano__pool_owner_path": "Pool owner staking path",
"cardano__pool_reward_account": "Pool reward account:",
"cardano__reference_input_id": "Reference input ID:",
"cardano__reference_input_index": "Reference input index:",
"cardano__reference_script": "Reference script",
"cardano__required_signer": "Required signer",
"cardano__reward": "reward",
"cardano__reward_address": "Address is a reward address.",
"cardano__reward_eligibility_warning": "Warning: The address is not a payment address, it is not eligible for rewards.",
"cardano__rewards_go_to": "Rewards go to:",
"cardano__script": "script",
"cardano__script_all": "All",
"cardano__script_any": "Any",
"cardano__script_data_hash": "Script data hash:",
"cardano__script_hash": "Script hash:",
"cardano__script_invalid_before": "Invalid before",
"cardano__script_invalid_hereafter": "Invalid hereafter",
"cardano__script_key": "Key",
"cardano__script_n_of_k": "N of K",
"cardano__script_reward": "script reward",
"cardano__sending": "Sending",
"cardano__show_simple": "Show Simple",
"cardano__sign_tx_path_template": "Sign transaction with {}:",
"cardano__stake_delegation": "Stake delegation",
"cardano__stake_deregistration": "Stake key deregistration",
"cardano__stake_pool_registration": "Stakepool registration",
"cardano__stake_pool_registration_pool_id": "Stake pool registration\nPool ID:",
"cardano__stake_registration": "Stake key registration",
"cardano__staking_key_for_account": "Staking key for account",
"cardano__to_pool": "to pool:",
"cardano__token_minting_path": "token minting path",
"cardano__total_collateral": "Total collateral:",
"cardano__transaction": "Transaction",
"cardano__transaction_contains_minting_or_burning": "The transaction contains minting or burning of tokens.",
"cardano__transaction_contains_script_address_no_datum": "The following transaction output contains a script address, but does not contain a datum.",
"cardano__transaction_fee": "Transaction fee:",
"cardano__transaction_id": "Transaction ID:",
"cardano__transaction_no_collateral_input": "The transaction contains no collateral inputs. Plutus script will not be able to run.",
"cardano__transaction_no_script_data_hash": "The transaction contains no script data hash. Plutus script will not be able to run.",
"cardano__transaction_output_contains_tokens": "The following transaction output contains tokens.",
"cardano__ttl": "TTL:",
"cardano__unknown_collateral_amount": "Unknown collateral amount.",
"cardano__unusual_path": "Path is unusual.",
"cardano__valid_since": "Valid since:",
"cardano__verify_script": "Verify script",
"cardano__vote_key_registration": "Vote key registration (CIP-36)",
"cardano__vote_public_key": "Vote public key:",
"cardano__voting_purpose": "Voting purpose:",
"cardano__warning": "Warning",
"cardano__weight": "Weight:",
"cardano__withdrawal_for_address_template": "Confirm withdrawal for {} address:",
"cardano__witness_path": "Witness path",
"cardano__x_of_y_signatures_template": "Requires {} out of {} signatures.",
"coinjoin__access_account": "Access your coinjoin account?",
"coinjoin__do_not_disconnect": "Do not disconnect your Trezor!",
"coinjoin__max_mining_fee": "Max mining fee",
"coinjoin__max_rounds": "Max rounds",
"coinjoin__title": "AUTHORIZE COINJOIN",
"coinjoin__title_do_not_disconnect": "DO NOT DISCONNECT YOUR TREZOR!",
"coinjoin__title_progress": "COINJOIN IN PROGRESS",
"coinjoin__waiting_for_others": "Waiting for others",
"confirm_total__fee_rate": "Fee rate:",
"confirm_total__sending_from_account": "Sending from account:",
"confirm_total__title_fee": "FEE INFORMATION",
"confirm_total__title_sending_from": "SENDING FROM",
"debug__loading_seed": "Loading seed",
"debug__loading_seed_not_recommended": "Loading private seed is not recommended.",
"device_name__change_template": "Change device name to {}?",
"device_name__title": "DEVICE NAME",
"entropy__send": "Do you really want to send entropy?",
"entropy__title": "INTERNAL ENTROPY",
"entropy__title_confirm": "CONFIRM ENTROPY",
"eos__about_to_sign_template": "You are about to sign {}.",
"eos__action_name": "Action Name:",
"eos__arbitrary_data": "Arbitrary data",
"eos__buy_ram": "Buy RAM",
"eos__bytes": "Bytes:",
"eos__cancel_vote": "Cancel vote",
"eos__checksum": "Checksum:",
"eos__code": "Code:",
"eos__contract": "Contract:",
"eos__cpu": "CPU:",
"eos__creator": "Creator:",
"eos__delegate": "Delegate",
"eos__delete_auth": "Delete Auth",
"eos__from": "From:",
"eos__link_auth": "Link Auth",
"eos__memo": "Memo",
"eos__name": "Name:",
"eos__net": "NET:",
"eos__new_account": "New account",
"eos__owner": "Owner:",
"eos__parent": "Parent:",
"eos__payer": "Payer:",
"eos__permission": "Permission:",
"eos__proxy": "Proxy:",
"eos__receiver": "Receiver:",
"eos__refund": "Refund",
"eos__requirement": "Requirement:",
"eos__sell_ram": "Sell RAM",
"eos__sender": "Sender:",
"eos__sign_transaction": "Sign transaction",
"eos__threshold": "Threshold:",
"eos__to": "To:",
"eos__transfer": "Transfer:",
"eos__type": "Type:",
"eos__undelegate": "Undelegate",
"eos__unlink_auth": "Unlink Auth",
"eos__update_auth": "Update Auth",
"eos__vote_for_producers": "Vote for producers",
"eos__vote_for_proxy": "Vote for proxy",
"eos__voter": "Voter:",
"ethereum__amount_sent": "Amount sent:",
"ethereum__contract": "Contract:",
"ethereum__data_size_template": "Size: {} bytes",
"ethereum__gas_limit": "Gas limit:",
"ethereum__gas_price": "Gas price:",
"ethereum__max_gas_price": "Max gas price:",
"ethereum__name_and_version": "Name and version",
"ethereum__new_contract": "new contract?",
"ethereum__no_message_field": "No message field",
"ethereum__priority_fee": "Priority fee:",
"ethereum__show_full_array": "Show full array",
"ethereum__show_full_domain": "Show full domain",
"ethereum__show_full_message": "Show full message",
"ethereum__show_full_struct": "Show full struct",
"ethereum__sign_eip712": "Really sign EIP-712 typed data?",
"ethereum__title_confirm_data": "CONFIRM DATA",
"ethereum__title_confirm_domain": "CONFIRM DOMAIN",
"ethereum__title_confirm_message": "CONFIRM MESSAGE",
"ethereum__title_confirm_struct": "CONFIRM STRUCT",
"ethereum__title_confirm_typed_data": "CONFIRM TYPED DATA",
"ethereum__title_signing_address": "SIGNING ADDRESS",
"ethereum__units_template": "{} units",
"ethereum__unknown_token": "Unknown token",
"ethereum__valid_signature": "The signature is valid.",
"experimental_mode__enable": "Enable experimental features?",
"experimental_mode__only_for_dev": "Only for development and beta testing!",
"experimental_mode__title": "EXPERIMENTAL MODE",
"fido__already_registered": "Already registered",
"fido__device_already_registered": "This device is already registered with this application.",
"fido__device_already_registered_with_template": "This device is already registered with {}.",
"fido__device_not_registered": "This device is not registered with this application.",
"fido__does_not_belong": "The credential you are trying to import does\nnot belong to this authenticator.",
"fido__erase_credentials": "erase all credentials?",
"fido__export_credentials": "Export information about the credentials stored on this device?",
"fido__not_registered": "Not registered",
"fido__not_registered_with_template": "This device is not registered with\n{}.",
"fido__please_enable_pin_protection": "Please enable PIN protection.",
"fido__title_authenticate": "FIDO2 AUTHENTICATE",
"fido__title_import_credential": "IMPORT CREDENTIAL",
"fido__title_list_credentials": "LIST CREDENTIALS",
"fido__title_register": "FIDO2 REGISTER",
"fido__title_remove_credential": "REMOVE CREDENTIAL",
"fido__title_reset": "FIDO2 RESET",
"fido__title_u2f_auth": "U2F AUTHENTICATE",
"fido__title_u2f_register": "U2F REGISTER",
"fido__title_verify_user": "FIDO2 VERIFY USER",
"fido__unable_to_verify_user": "Unable to verify user.",
"fido__wanna_erase_credentials": "Do you really want to erase all credentials?",
"firmware_update__title": "UPDATE FIRMWARE",
"firmware_update__title_fingerprint": "FW FINGERPRINT",
"homescreen__click_to_connect": "Click to Connect",
"homescreen__click_to_unlock": "Click to Unlock",
"homescreen__title_backup_failed": "BACKUP FAILED",
"homescreen__title_backup_needed": "BACKUP NEEDED",
"homescreen__title_coinjoin_authorized": "COINJOIN AUTHORIZED",
"homescreen__title_experimental_mode": "EXPERIMENTAL MODE",
"homescreen__title_hold_to_lock": "HOLD TO LOCK",
"homescreen__title_no_usb_connection": "NO USB CONNECTION",
"homescreen__title_pin_not_set": "PIN NOT SET",
"homescreen__title_seedless": "SEEDLESS",
"homescreen__title_set": "CHANGE HOMESCREEN?",
"inputs__back": "BACK",
"inputs__cancel": "CANCEL",
"inputs__delete": "DELETE",
"inputs__enter": "ENTER",
"inputs__return": "RETURN",
"inputs__show": "SHOW",
"inputs__space": "SPACE",
"joint__title": "JOINT TRANSACTION",
"joint__to_the_total_amount": "To the total amount:",
"joint__you_are_contributing": "You are contributing:",
"lockscreen__tap_to_connect": "Tap to connect",
"lockscreen__tap_to_unlock": "Tap to unlock",
"lockscreen__title_locked": "LOCKED",
"lockscreen__title_not_connected": "NOT CONNECTED",
"misc__decrypt_value": "Decrypt value",
"misc__encrypt_value": "Encrypt value",
"misc__title_suite_labeling": "SUITE LABELING",
"modify_amount__decrease_amount": "Decrease amount by:",
"modify_amount__increase_amount": "Increase amount by:",
"modify_amount__new_amount": "New amount:",
"modify_amount__title": "MODIFY AMOUNT",
"modify_fee__decrease_fee": "Decrease fee by:",
"modify_fee__fee_rate": "Fee rate:",
"modify_fee__increase_fee": "Increase fee by:",
"modify_fee__new_transaction_fee": "New transaction fee:",
"modify_fee__no_change": "Your fee did not change.",
"modify_fee__title": "MODIFY FEE",
"modify_fee__transaction_fee": "Transaction fee:",
"monero__confirm_export": "Confirm export",
"monero__confirm_ki_sync": "Confirm ki sync",
"monero__confirm_refresh": "Confirm refresh",
"monero__confirm_unlock_time": "Confirm unlock time",
"monero__hashing_inputs": "Hashing inputs",
"monero__payment_id": "Payment ID",
"monero__postprocessing": "Postprocessing...",
"monero__processing": "Processing...",
"monero__processing_inputs": "Processing inputs",
"monero__processing_outputs": "Processing outputs",
"monero__signing": "Signing...",
"monero__signing_inputs": "Signing inputs",
"monero__unlock_time_set_template": "Unlock time for this transaction is set to {}",
"monero__wanna_export_tx_der": "Do you really want to export tx_der\nfor tx_proof?",
"monero__wanna_export_tx_key": "Do you really want to export tx_key?",
"monero__wanna_export_watchkey": "Do you really want to export watch-only credentials?",
"monero__wanna_start_refresh": "Do you really want to\nstart refresh?",
"monero__wanna_sync_key_images": "Do you really want to\nsync key images?",
"nem__absolute": "absolute",
"nem__activate": "Activate",
"nem__add": "Add",
"nem__confirm_action": "Confirm action",
"nem__confirm_address": "Confirm address",
"nem__confirm_creation_fee": "Confirm creation fee",
"nem__confirm_mosaic": "Confirm mosaic",
"nem__confirm_multisig_fee": "Confirm multisig fee",
"nem__confirm_namespace": "Confirm namespace",
"nem__confirm_payload": "Confirm payload",
"nem__confirm_properties": "Confirm properties",
"nem__confirm_rental_fee": "Confirm rental fee",
"nem__confirm_transfer_of": "Confirm transfer of",
"nem__convert_account_to_multisig": "Convert account to multisig account?",
"nem__cosign_transaction_for": "Cosign transaction for",
"nem__cosignatory": " cosignatory",
"nem__create_mosaic": "Create mosaic",
"nem__create_namespace": "Create namespace",
"nem__deactivate": "Deactivate",
"nem__decrease": "Decrease",
"nem__description": "Description:",
"nem__divisibility_and_levy_cannot_be_shown": "Divisibility and levy cannot be shown for unknown mosaics",
"nem__encrypted": "Encrypted:",
"nem__final_confirm": "Final confirm",
"nem__immutable": "immutable",
"nem__increase": "Increase",
"nem__initial_supply": "Initial supply:",
"nem__initiate_transaction_for": "Initiate transaction for",
"nem__levy_divisibility": "Levy divisibility:",
"nem__levy_fee": "Levy fee:",
"nem__levy_fee_of": "Confirm mosaic levy fee of",
"nem__levy_mosaic": "Levy mosaic:",
"nem__levy_namespace": "Levy namespace:",
"nem__levy_recipient": "Levy recipient:",
"nem__levy_type": "Levy type:",
"nem__modify_supply_for": "Modify supply for",
"nem__modify_the_number_of_cosignatories_by": "Modify the number of cosignatories by ",
"nem__mutable": "mutable",
"nem__of": "of",
"nem__percentile": "percentile",
"nem__raw_units_template": "{} raw units",
"nem__remote_harvesting": " remote harvesting?",
"nem__remove": "Remove",
"nem__set_minimum_cosignatories_to": "Set minimum cosignatories to ",
"nem__sign_tx_fee_template": "Sign this transaction\nand pay {}\nfor network fee?",
"nem__supply_change": "Supply change",
"nem__supply_units_template": "{} supply by {} whole units?",
"nem__transferable": "Transferable?",
"nem__under_namespace": "under namespace",
"nem__unencrypted": "Unencrypted:",
"nem__unknown_mosaic": "Unknown mosaic!",
"passphrase__access_hidden_wallet": "Access hidden wallet?",
"passphrase__always_on_device": "Do you really want to enter passphrase always on the device?",
"passphrase__from_host_not_shown": "Passphrase provided by host will be used but will not be displayed due to the device settings.",
"passphrase__hidden_wallet": "Hidden wallet",
"passphrase__hide": "Hide passphrase coming from host?",
"passphrase__next_screen_will_show_passphrase": "Next screen will show the passphrase.",
"passphrase__please_enter": "Please enter your passphrase.",
"passphrase__revoke_on_device": "Do you want to revoke the passphrase on device setting?",
"passphrase__title_confirm": "CONFIRM PASSPHRASE",
"passphrase__title_enter": "ENTER PASSPHRASE",
"passphrase__title_hide": "HIDE PASSPHRASE",
"passphrase__title_settings": "PASSPHRASE SETTINGS",
"passphrase__title_source": "PASSPHRASE SOURCE",
"passphrase__turn_off": "Turn off passphrase protection?",
"passphrase__turn_on": "Turn on passphrase protection?",
"pin__change": "Change PIN?",
"pin__changed": "PIN changed.",
"pin__cursor_will_change": "Position of the cursor will change between entries for enhanced security.",
"pin__diff_from_wipe_code": "The new PIN must be different from your wipe code.",
"pin__disabled": "PIN protection\nturned off.",
"pin__enabled": "PIN protection\nturned on.",
"pin__enter": "Enter PIN",
"pin__enter_new": "Enter new PIN",
"pin__entered_not_valid": "The PIN you have entered is not valid.",
"pin__info": "PIN will be required to access this device.",
"pin__invalid_pin": "Invalid PIN",
"pin__last_attempt": "Last attempt",
"pin__mismatch": "Entered PINs do not match!",
"pin__pin_mismatch": "PIN mismatch",
"pin__please_check_again": "Please check again.",
"pin__reenter_new": "Re-enter new PIN",
"pin__reenter_to_confirm": "Please re-enter PIN to confirm.",
"pin__should_be_long": "PIN should be 4-50 digits long.",
"pin__title_check_pin": "CHECK PIN",
"pin__title_settings": "PIN SETTINGS",
"pin__title_wrong_pin": "WRONG PIN",
"pin__tries_left": "tries left",
"pin__turn_off": "Are you sure you want to turn off PIN protection?",
"pin__turn_on": "Turn on PIN protection?",
"pin__wrong_pin": "Wrong PIN",
"plurals__contains_x_keys": "key|keys",
"plurals__lock_after_x_hours": "hour|hours",
"plurals__lock_after_x_milliseconds": "millisecond|milliseconds",
"plurals__lock_after_x_minutes": "minute|minutes",
"plurals__lock_after_x_seconds": "second|seconds",
"plurals__sign_x_actions": "action|actions",
"plurals__transaction_of_x_operations": "operation|operations",
"plurals__x_groups_needed": "group|groups",
"plurals__x_shares_needed": "share|shares",
"progress__authenticity_check": "Checking authenticity...",
"progress__done": "Done",
"progress__loading_transaction": "Loading transaction...",
"progress__one_second_left": "1 second left",
"progress__please_wait": "PLEASE WAIT",
"progress__processing": "PROCESSING",
"progress__refreshing": "Refreshing...",
"progress__signing_transaction": "Signing transaction...",
"progress__syncing": "Syncing...",
"progress__x_seconds_left_template": "{} seconds left",
"reboot_to_bootloader__restart": "Trezor will restart in bootloader mode.",
"reboot_to_bootloader__title": "GO TO BOOTLOADER",
"reboot_to_bootloader__version_by_template": "Firmware version {}\nby {}",
"recovery__cancel_dry_run": "Cancel backup check",
"recovery__check_dry_run": "Check your backup?",
"recovery__cursor_will_change": "Position of the cursor will change between entries for enhanced security.",
"recovery__dry_run_bip39_valid_match": "The entered recovery seed is valid and matches the one in the device.",
"recovery__dry_run_bip39_valid_mismatch": "The entered recovery seed is valid but does not match the one in the device.",
"recovery__dry_run_slip39_valid_match": "The entered recovery shares are valid and match what is currently in the device.",
"recovery__dry_run_slip39_valid_mismatch": "The entered recovery shares are valid but do not match what is currently in the device.",
"recovery__enter_any_share": "Enter any share",
"recovery__enter_backup": "Enter your backup.",
"recovery__enter_different_share": "Please enter a different share.",
"recovery__enter_share_from_diff_group": "Enter share from a different group.",
"recovery__group_num_template": "Group {}",
"recovery__group_threshold_reached": "Group threshold reached.",
"recovery__invalid_seed_entered": "Invalid recovery seed entered.",
"recovery__invalid_share_entered": "Invalid recovery share entered.",
"recovery__more_shares_needed": "More shares needed",
"recovery__num_of_words": "Select the number of words in your backup.",
"recovery__only_first_n_letters": "You'll only have to select the first 2-4 letters of each word.",
"recovery__progress_will_be_lost": "All progress will be lost.",
"recovery__select_num_of_words": "Select the number of words in your backup.",
"recovery__share_already_entered": "Share already entered",
"recovery__share_from_another_shamir": "You have entered a share from another Shamir Backup.",
"recovery__share_num_template": "Share {}",
"recovery__title": "RECOVER WALLET",
"recovery__title_cancel_dry_run": "CANCEL BACKUP CHECK",
"recovery__title_cancel_recovery": "CANCEL RECOVERY",
"recovery__title_dry_run": "BACKUP CHECK",
"recovery__title_recover": "RECOVER WALLET",
"recovery__title_remaining_shares": "REMAINING SHARES",
"recovery__type_word_x_of_y_template": "Type word {} of {}",
"recovery__wallet_recovered": "Wallet recovered successfully",
"recovery__wanna_cancel_dry_run": "Are you sure you want to cancel the backup check?",
"recovery__wanna_cancel_recovery": "Are you sure you want to cancel the recovery process?",
"recovery__word_count_template": "({} words)",
"recovery__word_x_of_y_template": "WORD {} OF {}",
"recovery__x_more_items_starting_template_plural": "{count} more {plural} starting",
"recovery__x_more_shares_needed_template_plural": "{count} more {plural} needed.",
"recovery__x_of_y_entered_template": "{} of {} shares entered successfully.",
"recovery__you_have_entered": "You have entered",
"reset__advanced_group_threshold_info": "The group threshold specifies the number of groups required to recover your wallet.",
"reset__all_x_of_y_template": "all {} of {} shares",
"reset__any_x_of_y_template": "any {} of {} shares",
"reset__button_create": "CREATE WALLET",
"reset__button_recover": "RECOVER WALLET",
"reset__by_continuing": "By continuing you agree to Trezor Company's terms and conditions.",
"reset__check_backup_title": "CHECK BACKUP",
"reset__check_group_share_title_template": "CHECK G{} - SHARE {}",
"reset__check_seed_title": "CHECK SEED",
"reset__check_share_title_template": "CHECK SHARE #{}",
"reset__continue_with_next_share": "Continue with the next share.",
"reset__continue_with_share_template": "Continue with share #{}.",
"reset__finished_verifying_group_template": "You have finished verifying your recovery shares for group {}.",
"reset__finished_verifying_seed": "You have finished verifying your recovery seed.",
"reset__finished_verifying_shares": "You have finished verifying your recovery shares.",
"reset__group_description": "A group is made up of recovery shares.",
"reset__group_info": "Each group has a set number of shares and its own threshold. In the next steps you will set the numbers of shares and the thresholds.",
"reset__group_share_checked_successfully_template": "Group {} - Share {} checked successfully.",
"reset__group_share_title_template": "GROUP {} - SHARE {}",
"reset__more_info_at": "More info at",
"reset__need_all_share_template": "For recovery you need all {} of the shares.",
"reset__need_any_share_template": "For recovery you need any {} of the shares.",
"reset__needed_to_form_a_group": "needed to form a group. ",
"reset__needed_to_recover_your_wallet": "needed to recover your wallet. ",
"reset__never_make_digital_copy": "Never make a digital copy of your backup or upload it online!",
"reset__num_of_share_holders_template": "{} people or locations will each hold one share.",
"reset__num_of_shares_advanced_info_template": "Each recovery share is a sequence of 20 words. Next you will choose the threshold number of shares needed to form Group {}.",
"reset__num_of_shares_basic_info": "Each recovery share is a sequence of 20 words. Next you will choose how many shares you need to recover your wallet.",
"reset__num_shares_for_group_template": "The required number of shares to form Group {}.",
"reset__number_of_shares_info": "= total number of unique word lists used for wallet backup.",
"reset__one_share": "1 share",
"reset__only_one_share_will_be_created": "Only one share will be created.",
"reset__recovery_seed_title": "RECOVERY SEED",
"reset__recovery_share_title_template": "RECOVERY SHARE #{}",
"reset__required_number_of_groups": "The required number of groups for recovery.",
"reset__select_correct_word": "Select the correct word for each position.",
"reset__select_word_template": "SELECT {} WORD",
"reset__select_word_x_of_y_template": "Select word {} of {}:",
"reset__set_it_to_count_template": "Set it to {} and you will need ",
"reset__share_checked_successfully_template": "Recovery share #{} checked successfully.",
"reset__share_words_title": "STANDARD BACKUP",
"reset__slip39_checklist_num_groups": "Number of groups",
"reset__slip39_checklist_num_shares": "Number of shares",
"reset__slip39_checklist_set_num_groups": "Set number of groups",
"reset__slip39_checklist_set_num_shares": "Set number of shares",
"reset__slip39_checklist_set_sizes": "Set sizes and thresholds",
"reset__slip39_checklist_set_sizes_longer": "Set size and threshold for each group",
"reset__slip39_checklist_set_threshold": "Set threshold",
"reset__slip39_checklist_title": "BACKUP CHECKLIST",
"reset__slip39_checklist_write_down": "Write down and check all shares",
"reset__slip39_checklist_write_down_recovery": "Write down and check all recovery shares",
"reset__the_threshold_sets_the_number_of_shares": "The threshold sets the number of shares ",
"reset__threshold_info": "= minimum number of unique word lists used for recovery.",
"reset__title_backup_is_done": "BACKUP IS DONE",
"reset__title_create_wallet": "CREATE WALLET",
"reset__title_create_wallet_shamir": "CREATE WALLET (SHAMIR)",
"reset__title_group_threshold": "GROUP THRESHOLD",
"reset__title_number_of_groups": "NUMBER OF GROUPS",
"reset__title_number_of_shares": "NUMBER OF SHARES",
"reset__title_set_group_threshold": "SET GROUP THRESHOLD",
"reset__title_set_number_of_groups": "SET NUMBER OF GROUPS",
"reset__title_set_number_of_shares": "SET NUMBER OF SHARES",
"reset__title_set_threshold": "SET THRESHOLD",
"reset__to_form_group_template": "to form Group {}.",
"reset__tos_link": "trezor.io/tos",
"reset__total_number_of_shares_in_group_template": "Set the total number of shares in Group {}.",
"reset__use_your_backup": "Use your backup when you need to recover your wallet.",
"reset__write_down_words_template": "Write down all {} words in order.",
"reset__wrong_word_selected": "Wrong word selected!",
"reset__you_need_one_share": "For recovery you need 1 share.",
"reset__your_backup_is_done": "Your backup is done.",
"ripple__confirm_tag": "Confirm tag",
"ripple__destination_tag_template": "Destination tag:\n{}",
"rotation__change_template": "Do you want to change device rotation to {}?",
"rotation__east": "east",
"rotation__north": "north",
"rotation__south": "south",
"rotation__title_change": "CHANGE ROTATION",
"rotation__west": "west",
"safety_checks__approve_unsafe_always": "Trezor will allow you to approve some actions which might be unsafe.",
"safety_checks__approve_unsafe_temporary": "Trezor will temporarily allow you to approve some actions which might be unsafe.",
"safety_checks__enforce_strict": "Do you really want to enforce strict safety checks (recommended)?",
"safety_checks__title": "SAFETY CHECKS",
"safety_checks__title_safety_override": "SAFETY OVERRIDE",
"sd_card__all_data_will_be_lost": "All data on the SD card will be lost.",
"sd_card__card_required": "SD card required.",
"sd_card__disable": "Do you really want to remove SD card protection from your device?",
"sd_card__disabled": "You have successfully disabled SD protection.",
"sd_card__enable": "Do you really want to secure your device with SD card protection?",
"sd_card__enabled": "You have successfully enabled SD protection.",
"sd_card__error": "SD card error",
"sd_card__format_card": "Format SD card",
"sd_card__insert_correct_card": "Please insert the correct SD card for this device.",
"sd_card__please_insert": "Please insert your SD card.",
"sd_card__please_unplug_and_insert": "Please unplug the device and insert your SD card.",
"sd_card__problem_accessing": "There was a problem accessing the SD card.",
"sd_card__refresh": "Do you really want to replace the current SD card secret with a newly generated one?",
"sd_card__refreshed": "You have successfully refreshed SD protection.",
"sd_card__restart": "Do you want to restart Trezor in bootloader mode?",
"sd_card__title": "SD CARD PROTECTION",
"sd_card__title_problem": "SD CARD PROBLEM",
"sd_card__unknown_filesystem": "Unknown filesystem.",
"sd_card__unplug_and_insert_correct": "Please unplug the device and insert the correct SD card.",
"sd_card__use_different_card": "Use a different card or format the SD card to the FAT32 filesystem.",
"sd_card__wanna_format": "Do you really want to format the SD card?",
"sd_card__wrong_sd_card": "Wrong SD card.",
"send__address_path": "address path",
"send__confirm_sending": "SENDING AMOUNT",
"send__from_multiple_accounts": "Sending from multiple accounts.",
"send__including_fee": "Including fee:",
"send__maximum_fee": "Maximum fee:",
"send__receiving_to_multisig": "Receiving to a multisig address.",
"send__title_confirm_sending": "CONFIRM SENDING",
"send__title_joint_transaction": "JOINT TRANSACTION",
"send__title_receiving_to": "RECEIVING TO",
"send__title_sending": "SENDING",
"send__title_sending_amount": "SENDING AMOUNT",
"send__title_sending_to": "SENDING TO",
"send__to_the_total_amount": "To the total amount:",
"send__total_amount": "Total amount:",
"send__transaction_id": "Transaction ID:",
"send__you_are_contributing": "You are contributing:",
"share_words__words_in_order": " words in order.",
"share_words__wrote_down_all": "I wrote down all ",
"sign_message__bytes_template": "{} Bytes",
"sign_message__confirm_address": "SIGNING ADDRESS",
"sign_message__confirm_message": "CONFIRM MESSAGE",
"sign_message__message_size": "Message size:",
"sign_message__verify_address": "VERIFY ADDRESS",
"solana__account_index": "Account index",
"solana__associated_token_account": "Associated token account",
"solana__confirm_multisig": "Confirm multisig",
"solana__expected_fee": "Expected fee",
"solana__instruction_accounts_template": "Instruction contains {} accounts and its data is {} bytes long.",
"solana__instruction_data": "Instruction data",
"solana__instruction_is_multisig": "The following instruction is a multisig instruction.",
"solana__is_provided_via_lookup_table_template": "{} is provided via a lookup table.",
"solana__lookup_table_address": "Lookup table address",
"solana__multiple_signers": "Multiple signers",
"solana__token_address": "Token address",
"solana__transaction_contains_unknown_instructions": "Transaction contains unknown instructions.",
"solana__transaction_requires_x_signers_template": "Transaction requires {} signers which increases the fee.",
"stellar__account_merge": "Account Merge",
"stellar__account_thresholds": "Account Thresholds",
"stellar__add_signer": "Add Signer",
"stellar__add_trust": "Add trust",
"stellar__all_will_be_sent_to": "All XLM will be sent to:",
"stellar__allow_trust": "Allow trust",
"stellar__asset": "Asset",
"stellar__balance_id": "Balance ID",
"stellar__bump_sequence": "Bump Sequence",
"stellar__buying": "Buying:",
"stellar__claim_claimable_balance": "Claim Claimable Balance",
"stellar__clear_data": "Clear data",
"stellar__clear_flags": "Clear flags",
"stellar__confirm_issuer": "Confirm Issuer",
"stellar__confirm_memo": "Confirm memo",
"stellar__confirm_network": "Confirm network",
"stellar__confirm_operation": "Confirm operation",
"stellar__confirm_stellar": "Confirm Stellar",
"stellar__confirm_timebounds": "Confirm timebounds",
"stellar__create_account": "Create Account",
"stellar__debited_amount": "Debited amount",
"stellar__delete": "Delete",
"stellar__delete_passive_offer": "Delete Passive Offer",
"stellar__delete_trust": "Delete trust",
"stellar__destination": "Destination:",
"stellar__exchanges_require_memo": "Important: Many exchanges require a memo when depositing",
"stellar__final_confirm": "Final confirm",
"stellar__hash": "Hash:",
"stellar__high": "High:",
"stellar__home_domain": "Home Domain",
"stellar__inflation": "Inflation",
"stellar__initial_balance": "Initial Balance",
"stellar__initialize_signing_with": "Initialize signing with",
"stellar__issuer_template": "{} issuer:",
"stellar__key": "Key:",
"stellar__limit": "Limit:",
"stellar__low": "Low:",
"stellar__master_weight": "Master Weight:",
"stellar__medium": "Medium:",
"stellar__new_offer": "New Offer",
"stellar__new_passive_offer": "New Passive Offer",
"stellar__no_memo_set": "No memo set!",
"stellar__no_restriction": "[no restriction]",
"stellar__on_network_template": "Transaction is on {}",
"stellar__path_pay": "Path Pay",
"stellar__path_pay_at_least": "Path Pay at least",
"stellar__pay": "Pay:",
"stellar__pay_at_most": "Pay at most:",
"stellar__preauth_transaction": "Pre-auth transaction:",
"stellar__price_per_template": "Price per {}:",
"stellar__private_network": "private network",
"stellar__remove_signer": "Remove Signer",
"stellar__revoke_trust": "Revoke trust",
"stellar__selling": "Selling:",
"stellar__set_data": "Set data",
"stellar__set_flags": "Set flags",
"stellar__set_sequence_to_template": "Set sequence to {}?",
"stellar__sign_tx_count_template": "Sign this transaction made up of {}",
"stellar__sign_tx_fee_template": " and pay {}\nfor fee?",
"stellar__source_account": "Source account:",
"stellar__testnet_network": "testnet network",
"stellar__trusted_account": "Trusted Account",
"stellar__update": "Update",
"stellar__valid_from": "Valid from (UTC)",
"stellar__valid_to": "Valid to (UTC)",
"stellar__value_sha256": "Value (SHA-256):",
"stellar__wanna_clean_value_key_template": "Do you want to clear value key {}?",
"stellar__your_account": " your account",
"tezos__baker_address": "Baker address:",
"tezos__balance": "Balance:",
"tezos__ballot": "Ballot:",
"tezos__confirm_delegation": "Confirm delegation",
"tezos__confirm_origination": "Confirm origination",
"tezos__delegator": "Delegator:",
"tezos__proposal": "Proposal",
"tezos__register_delegate": "Register delegate",
"tezos__remove_delegation": "Remove delegation",
"tezos__submit_ballot": "Submit ballot",
"tezos__submit_proposal": "Submit proposal",
"tezos__submit_proposals": "Submit proposals",
"tutorial__middle_click": "Press both left and right at the same\ntime to confirm.",
"tutorial__press_and_hold": "Press and hold the right button to\napprove important operations.",
"tutorial__ready_to_use": "You're ready to\nuse Trezor.",
"tutorial__scroll_down": "Press right to scroll down to read all content when text doesn't fit on one screen.\n\rPress left to scroll up.",
"tutorial__sure_you_want_skip": "Are you sure you\nwant to skip the tutorial?",
"tutorial__title_hello": "HELLO",
"tutorial__title_screen_scroll": "SCREEN SCROLL",
"tutorial__title_skip": "SKIP TUTORIAL",
"tutorial__title_tutorial_complete": "TUTORIAL COMPLETE",
"tutorial__use_trezor": "Use Trezor by\nclicking the left and right buttons.\n\rContinue right.",
"tutorial__welcome_press_right": "Welcome to Trezor. Press right to continue.",
"u2f__get": "Increase and retrieve the U2F counter?",
"u2f__set_template": "Set the U2F counter to {}?",
"u2f__title_get": "GET U2F COUNTER",
"u2f__title_set": "SET U2F COUNTER",
"wipe__info": "All data will be erased.",
"wipe__title": "WIPE DEVICE",
"wipe__want_to_wipe": "Do you really want to wipe the device?\n",
"wipe_code__change": "Change wipe code?",
"wipe_code__changed": "Wipe code changed.",
"wipe_code__diff_from_pin": "The wipe code must be different from your PIN.",
"wipe_code__disabled": "Wipe code disabled.",
"wipe_code__enabled": "Wipe code enabled.",
"wipe_code__enter_new": "Enter new wipe code",
"wipe_code__info": "Wipe code can be used to erase all data from this device.",
"wipe_code__invalid": "Invalid wipe code",
"wipe_code__mismatch": "Entered wipe codes do not match!",
"wipe_code__reenter": "Re-enter wipe code",
"wipe_code__reenter_to_confirm": "Please re-enter wipe code to confirm.",
"wipe_code__title_check": "CHECK WIPE CODE",
"wipe_code__title_invalid": "INVALID WIPE CODE",
"wipe_code__title_settings": "WIPE CODE SETTINGS",
"wipe_code__turn_off": "Turn off wipe code protection?",
"wipe_code__turn_on": "Turn on wipe code protection?",
"wipe_code__wipe_code_mismatch": "Wipe code mismatch",
"word_count__title": "NUMBER OF WORDS",
"words__account": "Account",
"words__account_colon": "Account:",
"words__address": "Address",
"words__amount": "Amount",
"words__are_you_sure": "Are you sure?",
"words__array_of": "Array of",
"words__blockhash": "Blockhash",
"words__buying": "Buying",
"words__confirm": "Confirm",
"words__confirm_fee": "Confirm fee",
"words__contains": "Contains",
"words__continue_anyway": "Continue anyway?",
"words__continue_with": "Continue with",
"words__error": "Error",
"words__fee": "Fee",
"words__from": "from",
"words__keep_it_safe": "Keep it safe!",
"words__know_what_your_doing": "Continue only if you know what you are doing!",
"words__my_trezor": "My Trezor",
"words__no": "No",
"words__outputs": "outputs",
"words__please_check_again": "Please check again",
"words__please_try_again": "Please try again",
"words__really_wanna": "Do you really want to",
"words__recipient": "Recipient",
"words__sign": "Sign",
"words__signer": "Signer",
"words__title_check": "CHECK",
"words__title_group": "GROUP",
"words__title_information": "INFORMATION",
"words__title_remember": "REMEMBER",
"words__title_share": "SHARE",
"words__title_shares": "SHARES",
"words__title_success": "SUCCESS",
"words__title_summary": "SUMMARY",
"words__title_threshold": "THRESHOLD",
"words__unknown": "Unknown",
"words__warning": "Warning",
"words__writable": "Writable",
"words__yes": "Yes"
}
}

@ -0,0 +1,843 @@
//! generated from en.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const EN_TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
addr_mismatch__contact_support_at: "Please contact Trezor support at",
addr_mismatch__key_mismatch: "Key mismatch?",
addr_mismatch__mismatch: "Address mismatch?",
addr_mismatch__support_url: "trezor.io/support",
addr_mismatch__title: "ADDRESS MISMATCH?",
addr_mismatch__title_key_mismatch: "KEY MISMATCH?",
addr_mismatch__wrong_derivation_path: "Wrong derivation path for selected account.",
addr_mismatch__xpub_mismatch: "XPUB mismatch?",
address__public_key: "Public key",
address__title_cosigner: "COSIGNER",
address__title_receive_address: "RECEIVE ADDRESS",
address__title_yours: "YOURS",
address_details__derivation_path: "Derivation path:",
address_details__title_receive_address: "RECEIVE ADDRESS",
address_details__title_receiving_to: "RECEIVING TO",
authenticate__confirm_template: "Allow connected computer to confirm your {} is genuine?",
authenticate__header: "Authenticate device",
auto_lock__change_template: "Auto-lock your Trezor after {} of inactivity?",
auto_lock__title: "AUTO-LOCK DELAY",
backup__can_back_up_anytime: "You can back up your Trezor once, at any time.",
backup__it_should_be_backed_up: "You should back up your new wallet right now.",
backup__it_should_be_backed_up_now: "It should be backed up now!",
backup__new_wallet_created: "New wallet created.",
backup__new_wallet_successfully_created: "New wallet created successfully.",
backup__recover_anytime: "You can use your backup to recover your wallet at any time.",
backup__title_backup_wallet: "BACK UP WALLET",
backup__title_skip: "SKIP BACKUP",
backup__want_to_skip: "Are you sure you want to skip the backup?",
binance__buy: "Buy",
binance__confirm_cancel: "Confirm cancel",
binance__confirm_input: "Confirm input",
binance__confirm_order: "Confirm order",
binance__confirm_output: "Confirm output",
binance__order_id: "Order ID:",
binance__pair: "Pair:",
binance__price: "Price:",
binance__quantity: "Quantity:",
binance__sell: "Sell",
binance__sender_address: "Sender address:",
binance__side: "Side:",
bitcoin__commitment_data: "Commitment data:",
bitcoin__confirm_locktime: "Confirm locktime",
bitcoin__create_proof_of_ownership: "Do you want to create a proof of ownership?",
bitcoin__high_mining_fee_template: "The mining fee of\n{}\nis unexpectedly high.",
bitcoin__locktime_no_effect: "Locktime is set but will have no effect.",
bitcoin__locktime_set_to: "Locktime set to:",
bitcoin__locktime_set_to_blockheight: "Locktime set to blockheight:",
bitcoin__lot_of_change_outputs: "A lot of change-outputs.",
bitcoin__multiple_accounts: "Multiple accounts",
bitcoin__new_fee_rate: "New fee rate:",
bitcoin__simple_send_of: "Simple send of",
bitcoin__ticket_amount: "Ticket amount:",
bitcoin__title_confirm_details: "CONFIRM DETAILS",
bitcoin__title_finalize_transaction: "FINALIZE TRANSACTION",
bitcoin__title_high_mining_fee: "HIGH MINING FEE",
bitcoin__title_meld_transaction: "MELD TRANSACTIONS",
bitcoin__title_modify_amount: "MODIFY AMOUNT",
bitcoin__title_payjoin: "PAYJOIN",
bitcoin__title_proof_of_ownership: "PROOF OF OWNERSHIP",
bitcoin__title_purchase_ticket: "PURCHASE TICKET",
bitcoin__title_update_transaction: "UPDATE TRANSACTION",
bitcoin__unknown_path: "Unknown path",
bitcoin__unknown_transaction: "Unknown transaction",
bitcoin__unusually_high_fee: "Unusually high fee.",
bitcoin__unverified_external_inputs: "The transaction contains unverified external inputs.",
bitcoin__valid_signature: "The signature is valid.",
bitcoin__voting_rights: "Voting rights to:",
buttons__abort: "ABORT",
buttons__access: "ACCESS",
buttons__again: "AGAIN",
buttons__allow: "ALLOW",
buttons__back: "BACK",
buttons__back_up: "BACK UP",
buttons__cancel: "CANCEL",
buttons__change: "CHANGE",
buttons__check: "CHECK",
buttons__check_again: "CHECK AGAIN",
buttons__close: "CLOSE",
buttons__confirm: "CONFIRM",
buttons__continue: "CONTINUE",
buttons__details: "DETAILS",
buttons__enable: "ENABLE",
buttons__enter: "ENTER",
buttons__enter_share: "ENTER SHARE",
buttons__export: "EXPORT",
buttons__format: "FORMAT",
buttons__go_back: "GO BACK",
buttons__hold_to_confirm: "HOLD TO CONFIRM",
buttons__info: "INFO",
buttons__install: "INSTALL",
buttons__more_info: "MORE INFO",
buttons__ok_i_understand: "OK, I UNDERSTAND",
buttons__purchase: "PURCHASE",
buttons__quit: "QUIT",
buttons__restart: "RESTART",
buttons__retry: "RETRY",
buttons__select: "SELECT",
buttons__set: "SET",
buttons__show_all: "SHOW ALL",
buttons__show_details: "SHOW DETAILS",
buttons__show_words: "SHOW WORDS",
buttons__skip: "SKIP",
buttons__try_again: "TRY AGAIN",
buttons__turn_off: "TURN OFF",
buttons__turn_on: "TURN ON",
cardano__addr_base: "Base",
cardano__addr_enterprise: "Enterprise",
cardano__addr_legacy: "Legacy",
cardano__addr_pointer: "Pointer",
cardano__addr_reward: "Reward",
cardano__address_no_staking: "address - no staking rewards.",
cardano__amount_burned_decimals_unknown: "Amount burned (decimals unknown):",
cardano__amount_minted_decimals_unknown: "Amount minted (decimals unknown):",
cardano__amount_sent_decimals_unknown: "Amount sent (decimals unknown):",
cardano__anonymous_pool: "Pool has no metadata (anonymous pool)",
cardano__asset_fingerprint: "Asset fingerprint:",
cardano__auxiliary_data_hash: "Auxiliary data hash:",
cardano__block: "Block",
cardano__catalyst: "Catalyst",
cardano__certificate: "Certificate",
cardano__certificate_path: "Certificate path",
cardano__change_output: "Change output",
cardano__change_output_path: "Change output path",
cardano__change_output_staking_path: "Change output staking path",
cardano__check_all_items: "Check all items carefully.",
cardano__choose_level_of_details: "Choose level of details:",
cardano__collateral_input_id: "Collateral input ID:",
cardano__collateral_input_index: "Collateral input index:",
cardano__collateral_output_contains_tokens: "The collateral return output contains tokens.",
cardano__collateral_return: "Collateral return",
cardano__confirm: "Confirm:",
cardano__confirm_signing_stake_pool: "Confirm signing the stake pool registration as an owner.",
cardano__confirm_transaction: "Confirm transaction",
cardano__confirming_a_multisig_transaction: "Confirming a multisig transaction.",
cardano__confirming_pool_registration: "Confirming pool registration as owner.",
cardano__confirming_transction: "Confirming a transaction.",
cardano__cost: "Cost",
cardano__credential_mismatch: "Credential doesn't match payment credential.",
cardano__datum_hash: "Datum hash:",
cardano__delegating_to: "Delegating to:",
cardano__for_account_and_index_template: "for account {} and index {}:",
cardano__for_account_template: "for account {}:",
cardano__for_key_hash: "for key hash:",
cardano__for_script: "for script:",
cardano__inline_datum: "Inline datum",
cardano__input_id: "Input ID:",
cardano__input_index: "Input index:",
cardano__intro_text_change: "The following address is a change address. Its",
cardano__intro_text_owned_by_device: "The following address is owned by this device. Its",
cardano__intro_text_registration_payment: "The vote key registration payment address is owned by this device. Its",
cardano__key_hash: "key hash",
cardano__margin: "Margin",
cardano__multisig_path: "multi-sig path",
cardano__nested_scripts_template: "Contains {} nested scripts.",
cardano__network: "Network:",
cardano__no_output_tx: "Transaction has no outputs, network cannot be verified.",
cardano__nonce: "Nonce:",
cardano__other: "other",
cardano__path: "path",
cardano__pledge: "Pledge",
cardano__pointer: "pointer",
cardano__policy_id: "Policy ID:",
cardano__pool_metadata_hash: "Pool metadata hash:",
cardano__pool_metadata_url: "Pool metadata url:",
cardano__pool_owner: "Pool owner:",
cardano__pool_owner_path: "Pool owner staking path",
cardano__pool_reward_account: "Pool reward account:",
cardano__reference_input_id: "Reference input ID:",
cardano__reference_input_index: "Reference input index:",
cardano__reference_script: "Reference script",
cardano__required_signer: "Required signer",
cardano__reward: "reward",
cardano__reward_address: "Address is a reward address.",
cardano__reward_eligibility_warning: "Warning: The address is not a payment address, it is not eligible for rewards.",
cardano__rewards_go_to: "Rewards go to:",
cardano__script: "script",
cardano__script_all: "All",
cardano__script_any: "Any",
cardano__script_data_hash: "Script data hash:",
cardano__script_hash: "Script hash:",
cardano__script_invalid_before: "Invalid before",
cardano__script_invalid_hereafter: "Invalid hereafter",
cardano__script_key: "Key",
cardano__script_n_of_k: "N of K",
cardano__script_reward: "script reward",
cardano__sending: "Sending",
cardano__show_simple: "Show Simple",
cardano__sign_tx_path_template: "Sign transaction with {}:",
cardano__stake_delegation: "Stake delegation",
cardano__stake_deregistration: "Stake key deregistration",
cardano__stake_pool_registration: "Stakepool registration",
cardano__stake_pool_registration_pool_id: "Stake pool registration\nPool ID:",
cardano__stake_registration: "Stake key registration",
cardano__staking_key_for_account: "Staking key for account",
cardano__to_pool: "to pool:",
cardano__token_minting_path: "token minting path",
cardano__total_collateral: "Total collateral:",
cardano__transaction: "Transaction",
cardano__transaction_contains_minting_or_burning: "The transaction contains minting or burning of tokens.",
cardano__transaction_contains_script_address_no_datum: "The following transaction output contains a script address, but does not contain a datum.",
cardano__transaction_fee: "Transaction fee:",
cardano__transaction_id: "Transaction ID:",
cardano__transaction_no_collateral_input: "The transaction contains no collateral inputs. Plutus script will not be able to run.",
cardano__transaction_no_script_data_hash: "The transaction contains no script data hash. Plutus script will not be able to run.",
cardano__transaction_output_contains_tokens: "The following transaction output contains tokens.",
cardano__ttl: "TTL:",
cardano__unknown_collateral_amount: "Unknown collateral amount.",
cardano__unusual_path: "Path is unusual.",
cardano__valid_since: "Valid since:",
cardano__verify_script: "Verify script",
cardano__vote_key_registration: "Vote key registration (CIP-36)",
cardano__vote_public_key: "Vote public key:",
cardano__voting_purpose: "Voting purpose:",
cardano__warning: "Warning",
cardano__weight: "Weight:",
cardano__withdrawal_for_address_template: "Confirm withdrawal for {} address:",
cardano__witness_path: "Witness path",
cardano__x_of_y_signatures_template: "Requires {} out of {} signatures.",
coinjoin__access_account: "Access your coinjoin account?",
coinjoin__do_not_disconnect: "Do not disconnect your Trezor!",
coinjoin__max_mining_fee: "Max mining fee",
coinjoin__max_rounds: "Max rounds",
coinjoin__title: "AUTHORIZE COINJOIN",
coinjoin__title_do_not_disconnect: "DO NOT DISCONNECT YOUR TREZOR!",
coinjoin__title_progress: "COINJOIN IN PROGRESS",
coinjoin__waiting_for_others: "Waiting for others",
confirm_total__fee_rate: "Fee rate:",
confirm_total__sending_from_account: "Sending from account:",
confirm_total__title_fee: "FEE INFORMATION",
confirm_total__title_sending_from: "SENDING FROM",
debug__loading_seed: "Loading seed",
debug__loading_seed_not_recommended: "Loading private seed is not recommended.",
device_name__change_template: "Change device name to {}?",
device_name__title: "DEVICE NAME",
entropy__send: "Do you really want to send entropy?",
entropy__title: "INTERNAL ENTROPY",
entropy__title_confirm: "CONFIRM ENTROPY",
eos__about_to_sign_template: "You are about to sign {}.",
eos__action_name: "Action Name:",
eos__arbitrary_data: "Arbitrary data",
eos__buy_ram: "Buy RAM",
eos__bytes: "Bytes:",
eos__cancel_vote: "Cancel vote",
eos__checksum: "Checksum:",
eos__code: "Code:",
eos__contract: "Contract:",
eos__cpu: "CPU:",
eos__creator: "Creator:",
eos__delegate: "Delegate",
eos__delete_auth: "Delete Auth",
eos__from: "From:",
eos__link_auth: "Link Auth",
eos__memo: "Memo",
eos__name: "Name:",
eos__net: "NET:",
eos__new_account: "New account",
eos__owner: "Owner:",
eos__parent: "Parent:",
eos__payer: "Payer:",
eos__permission: "Permission:",
eos__proxy: "Proxy:",
eos__receiver: "Receiver:",
eos__refund: "Refund",
eos__requirement: "Requirement:",
eos__sell_ram: "Sell RAM",
eos__sender: "Sender:",
eos__sign_transaction: "Sign transaction",
eos__threshold: "Threshold:",
eos__to: "To:",
eos__transfer: "Transfer:",
eos__type: "Type:",
eos__undelegate: "Undelegate",
eos__unlink_auth: "Unlink Auth",
eos__update_auth: "Update Auth",
eos__vote_for_producers: "Vote for producers",
eos__vote_for_proxy: "Vote for proxy",
eos__voter: "Voter:",
ethereum__amount_sent: "Amount sent:",
ethereum__contract: "Contract:",
ethereum__data_size_template: "Size: {} bytes",
ethereum__gas_limit: "Gas limit:",
ethereum__gas_price: "Gas price:",
ethereum__max_gas_price: "Max gas price:",
ethereum__name_and_version: "Name and version",
ethereum__new_contract: "new contract?",
ethereum__no_message_field: "No message field",
ethereum__priority_fee: "Priority fee:",
ethereum__show_full_array: "Show full array",
ethereum__show_full_domain: "Show full domain",
ethereum__show_full_message: "Show full message",
ethereum__show_full_struct: "Show full struct",
ethereum__sign_eip712: "Really sign EIP-712 typed data?",
ethereum__title_confirm_data: "CONFIRM DATA",
ethereum__title_confirm_domain: "CONFIRM DOMAIN",
ethereum__title_confirm_message: "CONFIRM MESSAGE",
ethereum__title_confirm_struct: "CONFIRM STRUCT",
ethereum__title_confirm_typed_data: "CONFIRM TYPED DATA",
ethereum__title_signing_address: "SIGNING ADDRESS",
ethereum__units_template: "{} units",
ethereum__unknown_token: "Unknown token",
ethereum__valid_signature: "The signature is valid.",
experimental_mode__enable: "Enable experimental features?",
experimental_mode__only_for_dev: "Only for development and beta testing!",
experimental_mode__title: "EXPERIMENTAL MODE",
fido__already_registered: "Already registered",
fido__device_already_registered: "This device is already registered with this application.",
fido__device_already_registered_with_template: "This device is already registered with {}.",
fido__device_not_registered: "This device is not registered with this application.",
fido__does_not_belong: "The credential you are trying to import does\nnot belong to this authenticator.",
fido__erase_credentials: "erase all credentials?",
fido__export_credentials: "Export information about the credentials stored on this device?",
fido__not_registered: "Not registered",
fido__not_registered_with_template: "This device is not registered with\n{}.",
fido__please_enable_pin_protection: "Please enable PIN protection.",
fido__title_authenticate: "FIDO2 AUTHENTICATE",
fido__title_import_credential: "IMPORT CREDENTIAL",
fido__title_list_credentials: "LIST CREDENTIALS",
fido__title_register: "FIDO2 REGISTER",
fido__title_remove_credential: "REMOVE CREDENTIAL",
fido__title_reset: "FIDO2 RESET",
fido__title_u2f_auth: "U2F AUTHENTICATE",
fido__title_u2f_register: "U2F REGISTER",
fido__title_verify_user: "FIDO2 VERIFY USER",
fido__unable_to_verify_user: "Unable to verify user.",
fido__wanna_erase_credentials: "Do you really want to erase all credentials?",
firmware_update__title: "UPDATE FIRMWARE",
firmware_update__title_fingerprint: "FW FINGERPRINT",
homescreen__click_to_connect: "Click to Connect",
homescreen__click_to_unlock: "Click to Unlock",
homescreen__title_backup_failed: "BACKUP FAILED",
homescreen__title_backup_needed: "BACKUP NEEDED",
homescreen__title_coinjoin_authorized: "COINJOIN AUTHORIZED",
homescreen__title_experimental_mode: "EXPERIMENTAL MODE",
homescreen__title_hold_to_lock: "HOLD TO LOCK",
homescreen__title_no_usb_connection: "NO USB CONNECTION",
homescreen__title_pin_not_set: "PIN NOT SET",
homescreen__title_seedless: "SEEDLESS",
homescreen__title_set: "CHANGE HOMESCREEN?",
inputs__back: "BACK",
inputs__cancel: "CANCEL",
inputs__delete: "DELETE",
inputs__enter: "ENTER",
inputs__return: "RETURN",
inputs__show: "SHOW",
inputs__space: "SPACE",
joint__title: "JOINT TRANSACTION",
joint__to_the_total_amount: "To the total amount:",
joint__you_are_contributing: "You are contributing:",
lockscreen__tap_to_connect: "Tap to connect",
lockscreen__tap_to_unlock: "Tap to unlock",
lockscreen__title_locked: "LOCKED",
lockscreen__title_not_connected: "NOT CONNECTED",
misc__decrypt_value: "Decrypt value",
misc__encrypt_value: "Encrypt value",
misc__title_suite_labeling: "SUITE LABELING",
modify_amount__decrease_amount: "Decrease amount by:",
modify_amount__increase_amount: "Increase amount by:",
modify_amount__new_amount: "New amount:",
modify_amount__title: "MODIFY AMOUNT",
modify_fee__decrease_fee: "Decrease fee by:",
modify_fee__fee_rate: "Fee rate:",
modify_fee__increase_fee: "Increase fee by:",
modify_fee__new_transaction_fee: "New transaction fee:",
modify_fee__no_change: "Your fee did not change.",
modify_fee__title: "MODIFY FEE",
modify_fee__transaction_fee: "Transaction fee:",
monero__confirm_export: "Confirm export",
monero__confirm_ki_sync: "Confirm ki sync",
monero__confirm_refresh: "Confirm refresh",
monero__confirm_unlock_time: "Confirm unlock time",
monero__hashing_inputs: "Hashing inputs",
monero__payment_id: "Payment ID",
monero__postprocessing: "Postprocessing...",
monero__processing: "Processing...",
monero__processing_inputs: "Processing inputs",
monero__processing_outputs: "Processing outputs",
monero__signing: "Signing...",
monero__signing_inputs: "Signing inputs",
monero__unlock_time_set_template: "Unlock time for this transaction is set to {}",
monero__wanna_export_tx_der: "Do you really want to export tx_der\nfor tx_proof?",
monero__wanna_export_tx_key: "Do you really want to export tx_key?",
monero__wanna_export_watchkey: "Do you really want to export watch-only credentials?",
monero__wanna_start_refresh: "Do you really want to\nstart refresh?",
monero__wanna_sync_key_images: "Do you really want to\nsync key images?",
nem__absolute: "absolute",
nem__activate: "Activate",
nem__add: "Add",
nem__confirm_action: "Confirm action",
nem__confirm_address: "Confirm address",
nem__confirm_creation_fee: "Confirm creation fee",
nem__confirm_mosaic: "Confirm mosaic",
nem__confirm_multisig_fee: "Confirm multisig fee",
nem__confirm_namespace: "Confirm namespace",
nem__confirm_payload: "Confirm payload",
nem__confirm_properties: "Confirm properties",
nem__confirm_rental_fee: "Confirm rental fee",
nem__confirm_transfer_of: "Confirm transfer of",
nem__convert_account_to_multisig: "Convert account to multisig account?",
nem__cosign_transaction_for: "Cosign transaction for",
nem__cosignatory: " cosignatory",
nem__create_mosaic: "Create mosaic",
nem__create_namespace: "Create namespace",
nem__deactivate: "Deactivate",
nem__decrease: "Decrease",
nem__description: "Description:",
nem__divisibility_and_levy_cannot_be_shown: "Divisibility and levy cannot be shown for unknown mosaics",
nem__encrypted: "Encrypted:",
nem__final_confirm: "Final confirm",
nem__immutable: "immutable",
nem__increase: "Increase",
nem__initial_supply: "Initial supply:",
nem__initiate_transaction_for: "Initiate transaction for",
nem__levy_divisibility: "Levy divisibility:",
nem__levy_fee: "Levy fee:",
nem__levy_fee_of: "Confirm mosaic levy fee of",
nem__levy_mosaic: "Levy mosaic:",
nem__levy_namespace: "Levy namespace:",
nem__levy_recipient: "Levy recipient:",
nem__levy_type: "Levy type:",
nem__modify_supply_for: "Modify supply for",
nem__modify_the_number_of_cosignatories_by: "Modify the number of cosignatories by ",
nem__mutable: "mutable",
nem__of: "of",
nem__percentile: "percentile",
nem__raw_units_template: "{} raw units",
nem__remote_harvesting: " remote harvesting?",
nem__remove: "Remove",
nem__set_minimum_cosignatories_to: "Set minimum cosignatories to ",
nem__sign_tx_fee_template: "Sign this transaction\nand pay {}\nfor network fee?",
nem__supply_change: "Supply change",
nem__supply_units_template: "{} supply by {} whole units?",
nem__transferable: "Transferable?",
nem__under_namespace: "under namespace",
nem__unencrypted: "Unencrypted:",
nem__unknown_mosaic: "Unknown mosaic!",
passphrase__access_hidden_wallet: "Access hidden wallet?",
passphrase__always_on_device: "Do you really want to enter passphrase always on the device?",
passphrase__from_host_not_shown: "Passphrase provided by host will be used but will not be displayed due to the device settings.",
passphrase__hidden_wallet: "Hidden wallet",
passphrase__hide: "Hide passphrase coming from host?",
passphrase__next_screen_will_show_passphrase: "Next screen will show the passphrase.",
passphrase__please_enter: "Please enter your passphrase.",
passphrase__revoke_on_device: "Do you want to revoke the passphrase on device setting?",
passphrase__title_confirm: "CONFIRM PASSPHRASE",
passphrase__title_enter: "ENTER PASSPHRASE",
passphrase__title_hide: "HIDE PASSPHRASE",
passphrase__title_settings: "PASSPHRASE SETTINGS",
passphrase__title_source: "PASSPHRASE SOURCE",
passphrase__turn_off: "Turn off passphrase protection?",
passphrase__turn_on: "Turn on passphrase protection?",
pin__change: "Change PIN?",
pin__changed: "PIN changed.",
pin__cursor_will_change: "Position of the cursor will change between entries for enhanced security.",
pin__diff_from_wipe_code: "The new PIN must be different from your wipe code.",
pin__disabled: "PIN protection\nturned off.",
pin__enabled: "PIN protection\nturned on.",
pin__enter: "Enter PIN",
pin__enter_new: "Enter new PIN",
pin__entered_not_valid: "The PIN you have entered is not valid.",
pin__info: "PIN will be required to access this device.",
pin__invalid_pin: "Invalid PIN",
pin__last_attempt: "Last attempt",
pin__mismatch: "Entered PINs do not match!",
pin__pin_mismatch: "PIN mismatch",
pin__please_check_again: "Please check again.",
pin__reenter_new: "Re-enter new PIN",
pin__reenter_to_confirm: "Please re-enter PIN to confirm.",
pin__should_be_long: "PIN should be 4-50 digits long.",
pin__title_check_pin: "CHECK PIN",
pin__title_settings: "PIN SETTINGS",
pin__title_wrong_pin: "WRONG PIN",
pin__tries_left: "tries left",
pin__turn_off: "Are you sure you want to turn off PIN protection?",
pin__turn_on: "Turn on PIN protection?",
pin__wrong_pin: "Wrong PIN",
plurals__contains_x_keys: "key|keys",
plurals__lock_after_x_hours: "hour|hours",
plurals__lock_after_x_milliseconds: "millisecond|milliseconds",
plurals__lock_after_x_minutes: "minute|minutes",
plurals__lock_after_x_seconds: "second|seconds",
plurals__sign_x_actions: "action|actions",
plurals__transaction_of_x_operations: "operation|operations",
plurals__x_groups_needed: "group|groups",
plurals__x_shares_needed: "share|shares",
progress__authenticity_check: "Checking authenticity...",
progress__done: "Done",
progress__loading_transaction: "Loading transaction...",
progress__one_second_left: "1 second left",
progress__please_wait: "PLEASE WAIT",
progress__processing: "PROCESSING",
progress__refreshing: "Refreshing...",
progress__signing_transaction: "Signing transaction...",
progress__syncing: "Syncing...",
progress__x_seconds_left_template: "{} seconds left",
reboot_to_bootloader__restart: "Trezor will restart in bootloader mode.",
reboot_to_bootloader__title: "GO TO BOOTLOADER",
reboot_to_bootloader__version_by_template: "Firmware version {}\nby {}",
recovery__cancel_dry_run: "Cancel backup check",
recovery__check_dry_run: "Check your backup?",
recovery__cursor_will_change: "Position of the cursor will change between entries for enhanced security.",
recovery__dry_run_bip39_valid_match: "The entered recovery seed is valid and matches the one in the device.",
recovery__dry_run_bip39_valid_mismatch: "The entered recovery seed is valid but does not match the one in the device.",
recovery__dry_run_slip39_valid_match: "The entered recovery shares are valid and match what is currently in the device.",
recovery__dry_run_slip39_valid_mismatch: "The entered recovery shares are valid but do not match what is currently in the device.",
recovery__enter_any_share: "Enter any share",
recovery__enter_backup: "Enter your backup.",
recovery__enter_different_share: "Please enter a different share.",
recovery__enter_share_from_diff_group: "Enter share from a different group.",
recovery__group_num_template: "Group {}",
recovery__group_threshold_reached: "Group threshold reached.",
recovery__invalid_seed_entered: "Invalid recovery seed entered.",
recovery__invalid_share_entered: "Invalid recovery share entered.",
recovery__more_shares_needed: "More shares needed",
recovery__num_of_words: "Select the number of words in your backup.",
recovery__only_first_n_letters: "You'll only have to select the first 2-4 letters of each word.",
recovery__progress_will_be_lost: "All progress will be lost.",
recovery__select_num_of_words: "Select the number of words in your backup.",
recovery__share_already_entered: "Share already entered",
recovery__share_from_another_shamir: "You have entered a share from another Shamir Backup.",
recovery__share_num_template: "Share {}",
recovery__title: "RECOVER WALLET",
recovery__title_cancel_dry_run: "CANCEL BACKUP CHECK",
recovery__title_cancel_recovery: "CANCEL RECOVERY",
recovery__title_dry_run: "BACKUP CHECK",
recovery__title_recover: "RECOVER WALLET",
recovery__title_remaining_shares: "REMAINING SHARES",
recovery__type_word_x_of_y_template: "Type word {} of {}",
recovery__wallet_recovered: "Wallet recovered successfully",
recovery__wanna_cancel_dry_run: "Are you sure you want to cancel the backup check?",
recovery__wanna_cancel_recovery: "Are you sure you want to cancel the recovery process?",
recovery__word_count_template: "({} words)",
recovery__word_x_of_y_template: "WORD {} OF {}",
recovery__x_more_items_starting_template_plural: "{count} more {plural} starting",
recovery__x_more_shares_needed_template_plural: "{count} more {plural} needed.",
recovery__x_of_y_entered_template: "{} of {} shares entered successfully.",
recovery__you_have_entered: "You have entered",
reset__advanced_group_threshold_info: "The group threshold specifies the number of groups required to recover your wallet.",
reset__all_x_of_y_template: "all {} of {} shares",
reset__any_x_of_y_template: "any {} of {} shares",
reset__button_create: "CREATE WALLET",
reset__button_recover: "RECOVER WALLET",
reset__by_continuing: "By continuing you agree to Trezor Company's terms and conditions.",
reset__check_backup_title: "CHECK BACKUP",
reset__check_group_share_title_template: "CHECK G{} - SHARE {}",
reset__check_seed_title: "CHECK SEED",
reset__check_share_title_template: "CHECK SHARE #{}",
reset__continue_with_next_share: "Continue with the next share.",
reset__continue_with_share_template: "Continue with share #{}.",
reset__finished_verifying_group_template: "You have finished verifying your recovery shares for group {}.",
reset__finished_verifying_seed: "You have finished verifying your recovery seed.",
reset__finished_verifying_shares: "You have finished verifying your recovery shares.",
reset__group_description: "A group is made up of recovery shares.",
reset__group_info: "Each group has a set number of shares and its own threshold. In the next steps you will set the numbers of shares and the thresholds.",
reset__group_share_checked_successfully_template: "Group {} - Share {} checked successfully.",
reset__group_share_title_template: "GROUP {} - SHARE {}",
reset__more_info_at: "More info at",
reset__need_all_share_template: "For recovery you need all {} of the shares.",
reset__need_any_share_template: "For recovery you need any {} of the shares.",
reset__needed_to_form_a_group: "needed to form a group. ",
reset__needed_to_recover_your_wallet: "needed to recover your wallet. ",
reset__never_make_digital_copy: "Never make a digital copy of your backup or upload it online!",
reset__num_of_share_holders_template: "{} people or locations will each hold one share.",
reset__num_of_shares_advanced_info_template: "Each recovery share is a sequence of 20 words. Next you will choose the threshold number of shares needed to form Group {}.",
reset__num_of_shares_basic_info: "Each recovery share is a sequence of 20 words. Next you will choose how many shares you need to recover your wallet.",
reset__num_shares_for_group_template: "The required number of shares to form Group {}.",
reset__number_of_shares_info: "= total number of unique word lists used for wallet backup.",
reset__one_share: "1 share",
reset__only_one_share_will_be_created: "Only one share will be created.",
reset__recovery_seed_title: "RECOVERY SEED",
reset__recovery_share_title_template: "RECOVERY SHARE #{}",
reset__required_number_of_groups: "The required number of groups for recovery.",
reset__select_correct_word: "Select the correct word for each position.",
reset__select_word_template: "SELECT {} WORD",
reset__select_word_x_of_y_template: "Select word {} of {}:",
reset__set_it_to_count_template: "Set it to {} and you will need ",
reset__share_checked_successfully_template: "Recovery share #{} checked successfully.",
reset__share_words_title: "STANDARD BACKUP",
reset__slip39_checklist_num_groups: "Number of groups",
reset__slip39_checklist_num_shares: "Number of shares",
reset__slip39_checklist_set_num_groups: "Set number of groups",
reset__slip39_checklist_set_num_shares: "Set number of shares",
reset__slip39_checklist_set_sizes: "Set sizes and thresholds",
reset__slip39_checklist_set_sizes_longer: "Set size and threshold for each group",
reset__slip39_checklist_set_threshold: "Set threshold",
reset__slip39_checklist_title: "BACKUP CHECKLIST",
reset__slip39_checklist_write_down: "Write down and check all shares",
reset__slip39_checklist_write_down_recovery: "Write down and check all recovery shares",
reset__the_threshold_sets_the_number_of_shares: "The threshold sets the number of shares ",
reset__threshold_info: "= minimum number of unique word lists used for recovery.",
reset__title_backup_is_done: "BACKUP IS DONE",
reset__title_create_wallet: "CREATE WALLET",
reset__title_create_wallet_shamir: "CREATE WALLET (SHAMIR)",
reset__title_group_threshold: "GROUP THRESHOLD",
reset__title_number_of_groups: "NUMBER OF GROUPS",
reset__title_number_of_shares: "NUMBER OF SHARES",
reset__title_set_group_threshold: "SET GROUP THRESHOLD",
reset__title_set_number_of_groups: "SET NUMBER OF GROUPS",
reset__title_set_number_of_shares: "SET NUMBER OF SHARES",
reset__title_set_threshold: "SET THRESHOLD",
reset__to_form_group_template: "to form Group {}.",
reset__tos_link: "trezor.io/tos",
reset__total_number_of_shares_in_group_template: "Set the total number of shares in Group {}.",
reset__use_your_backup: "Use your backup when you need to recover your wallet.",
reset__write_down_words_template: "Write down all {} words in order.",
reset__wrong_word_selected: "Wrong word selected!",
reset__you_need_one_share: "For recovery you need 1 share.",
reset__your_backup_is_done: "Your backup is done.",
ripple__confirm_tag: "Confirm tag",
ripple__destination_tag_template: "Destination tag:\n{}",
rotation__change_template: "Do you want to change device rotation to {}?",
rotation__east: "east",
rotation__north: "north",
rotation__south: "south",
rotation__title_change: "CHANGE ROTATION",
rotation__west: "west",
safety_checks__approve_unsafe_always: "Trezor will allow you to approve some actions which might be unsafe.",
safety_checks__approve_unsafe_temporary: "Trezor will temporarily allow you to approve some actions which might be unsafe.",
safety_checks__enforce_strict: "Do you really want to enforce strict safety checks (recommended)?",
safety_checks__title: "SAFETY CHECKS",
safety_checks__title_safety_override: "SAFETY OVERRIDE",
sd_card__all_data_will_be_lost: "All data on the SD card will be lost.",
sd_card__card_required: "SD card required.",
sd_card__disable: "Do you really want to remove SD card protection from your device?",
sd_card__disabled: "You have successfully disabled SD protection.",
sd_card__enable: "Do you really want to secure your device with SD card protection?",
sd_card__enabled: "You have successfully enabled SD protection.",
sd_card__error: "SD card error",
sd_card__format_card: "Format SD card",
sd_card__insert_correct_card: "Please insert the correct SD card for this device.",
sd_card__please_insert: "Please insert your SD card.",
sd_card__please_unplug_and_insert: "Please unplug the device and insert your SD card.",
sd_card__problem_accessing: "There was a problem accessing the SD card.",
sd_card__refresh: "Do you really want to replace the current SD card secret with a newly generated one?",
sd_card__refreshed: "You have successfully refreshed SD protection.",
sd_card__restart: "Do you want to restart Trezor in bootloader mode?",
sd_card__title: "SD CARD PROTECTION",
sd_card__title_problem: "SD CARD PROBLEM",
sd_card__unknown_filesystem: "Unknown filesystem.",
sd_card__unplug_and_insert_correct: "Please unplug the device and insert the correct SD card.",
sd_card__use_different_card: "Use a different card or format the SD card to the FAT32 filesystem.",
sd_card__wanna_format: "Do you really want to format the SD card?",
sd_card__wrong_sd_card: "Wrong SD card.",
send__address_path: "address path",
send__confirm_sending: "SENDING AMOUNT",
send__from_multiple_accounts: "Sending from multiple accounts.",
send__including_fee: "Including fee:",
send__maximum_fee: "Maximum fee:",
send__receiving_to_multisig: "Receiving to a multisig address.",
send__title_confirm_sending: "CONFIRM SENDING",
send__title_joint_transaction: "JOINT TRANSACTION",
send__title_receiving_to: "RECEIVING TO",
send__title_sending: "SENDING",
send__title_sending_amount: "SENDING AMOUNT",
send__title_sending_to: "SENDING TO",
send__to_the_total_amount: "To the total amount:",
send__total_amount: "Total amount:",
send__transaction_id: "Transaction ID:",
send__you_are_contributing: "You are contributing:",
share_words__words_in_order: " words in order.",
share_words__wrote_down_all: "I wrote down all ",
sign_message__bytes_template: "{} Bytes",
sign_message__confirm_address: "SIGNING ADDRESS",
sign_message__confirm_message: "CONFIRM MESSAGE",
sign_message__message_size: "Message size:",
sign_message__verify_address: "VERIFY ADDRESS",
solana__account_index: "Account index",
solana__associated_token_account: "Associated token account",
solana__confirm_multisig: "Confirm multisig",
solana__expected_fee: "Expected fee",
solana__instruction_accounts_template: "Instruction contains {} accounts and its data is {} bytes long.",
solana__instruction_data: "Instruction data",
solana__instruction_is_multisig: "The following instruction is a multisig instruction.",
solana__is_provided_via_lookup_table_template: "{} is provided via a lookup table.",
solana__lookup_table_address: "Lookup table address",
solana__multiple_signers: "Multiple signers",
solana__token_address: "Token address",
solana__transaction_contains_unknown_instructions: "Transaction contains unknown instructions.",
solana__transaction_requires_x_signers_template: "Transaction requires {} signers which increases the fee.",
stellar__account_merge: "Account Merge",
stellar__account_thresholds: "Account Thresholds",
stellar__add_signer: "Add Signer",
stellar__add_trust: "Add trust",
stellar__all_will_be_sent_to: "All XLM will be sent to:",
stellar__allow_trust: "Allow trust",
stellar__asset: "Asset",
stellar__balance_id: "Balance ID",
stellar__bump_sequence: "Bump Sequence",
stellar__buying: "Buying:",
stellar__claim_claimable_balance: "Claim Claimable Balance",
stellar__clear_data: "Clear data",
stellar__clear_flags: "Clear flags",
stellar__confirm_issuer: "Confirm Issuer",
stellar__confirm_memo: "Confirm memo",
stellar__confirm_network: "Confirm network",
stellar__confirm_operation: "Confirm operation",
stellar__confirm_stellar: "Confirm Stellar",
stellar__confirm_timebounds: "Confirm timebounds",
stellar__create_account: "Create Account",
stellar__debited_amount: "Debited amount",
stellar__delete: "Delete",
stellar__delete_passive_offer: "Delete Passive Offer",
stellar__delete_trust: "Delete trust",
stellar__destination: "Destination:",
stellar__exchanges_require_memo: "Important: Many exchanges require a memo when depositing",
stellar__final_confirm: "Final confirm",
stellar__hash: "Hash:",
stellar__high: "High:",
stellar__home_domain: "Home Domain",
stellar__inflation: "Inflation",
stellar__initial_balance: "Initial Balance",
stellar__initialize_signing_with: "Initialize signing with",
stellar__issuer_template: "{} issuer:",
stellar__key: "Key:",
stellar__limit: "Limit:",
stellar__low: "Low:",
stellar__master_weight: "Master Weight:",
stellar__medium: "Medium:",
stellar__new_offer: "New Offer",
stellar__new_passive_offer: "New Passive Offer",
stellar__no_memo_set: "No memo set!",
stellar__no_restriction: "[no restriction]",
stellar__on_network_template: "Transaction is on {}",
stellar__path_pay: "Path Pay",
stellar__path_pay_at_least: "Path Pay at least",
stellar__pay: "Pay:",
stellar__pay_at_most: "Pay at most:",
stellar__preauth_transaction: "Pre-auth transaction:",
stellar__price_per_template: "Price per {}:",
stellar__private_network: "private network",
stellar__remove_signer: "Remove Signer",
stellar__revoke_trust: "Revoke trust",
stellar__selling: "Selling:",
stellar__set_data: "Set data",
stellar__set_flags: "Set flags",
stellar__set_sequence_to_template: "Set sequence to {}?",
stellar__sign_tx_count_template: "Sign this transaction made up of {}",
stellar__sign_tx_fee_template: " and pay {}\nfor fee?",
stellar__source_account: "Source account:",
stellar__testnet_network: "testnet network",
stellar__trusted_account: "Trusted Account",
stellar__update: "Update",
stellar__valid_from: "Valid from (UTC)",
stellar__valid_to: "Valid to (UTC)",
stellar__value_sha256: "Value (SHA-256):",
stellar__wanna_clean_value_key_template: "Do you want to clear value key {}?",
stellar__your_account: " your account",
tezos__baker_address: "Baker address:",
tezos__balance: "Balance:",
tezos__ballot: "Ballot:",
tezos__confirm_delegation: "Confirm delegation",
tezos__confirm_origination: "Confirm origination",
tezos__delegator: "Delegator:",
tezos__proposal: "Proposal",
tezos__register_delegate: "Register delegate",
tezos__remove_delegation: "Remove delegation",
tezos__submit_ballot: "Submit ballot",
tezos__submit_proposal: "Submit proposal",
tezos__submit_proposals: "Submit proposals",
tutorial__middle_click: "Press both left and right at the same\ntime to confirm.",
tutorial__press_and_hold: "Press and hold the right button to\napprove important operations.",
tutorial__ready_to_use: "You're ready to\nuse Trezor.",
tutorial__scroll_down: "Press right to scroll down to read all content when text doesn't fit on one screen.\n\rPress left to scroll up.",
tutorial__sure_you_want_skip: "Are you sure you\nwant to skip the tutorial?",
tutorial__title_hello: "HELLO",
tutorial__title_screen_scroll: "SCREEN SCROLL",
tutorial__title_skip: "SKIP TUTORIAL",
tutorial__title_tutorial_complete: "TUTORIAL COMPLETE",
tutorial__use_trezor: "Use Trezor by\nclicking the left and right buttons.\n\rContinue right.",
tutorial__welcome_press_right: "Welcome to Trezor. Press right to continue.",
u2f__get: "Increase and retrieve the U2F counter?",
u2f__set_template: "Set the U2F counter to {}?",
u2f__title_get: "GET U2F COUNTER",
u2f__title_set: "SET U2F COUNTER",
wipe__info: "All data will be erased.",
wipe__title: "WIPE DEVICE",
wipe__want_to_wipe: "Do you really want to wipe the device?\n",
wipe_code__change: "Change wipe code?",
wipe_code__changed: "Wipe code changed.",
wipe_code__diff_from_pin: "The wipe code must be different from your PIN.",
wipe_code__disabled: "Wipe code disabled.",
wipe_code__enabled: "Wipe code enabled.",
wipe_code__enter_new: "Enter new wipe code",
wipe_code__info: "Wipe code can be used to erase all data from this device.",
wipe_code__invalid: "Invalid wipe code",
wipe_code__mismatch: "Entered wipe codes do not match!",
wipe_code__reenter: "Re-enter wipe code",
wipe_code__reenter_to_confirm: "Please re-enter wipe code to confirm.",
wipe_code__title_check: "CHECK WIPE CODE",
wipe_code__title_invalid: "INVALID WIPE CODE",
wipe_code__title_settings: "WIPE CODE SETTINGS",
wipe_code__turn_off: "Turn off wipe code protection?",
wipe_code__turn_on: "Turn on wipe code protection?",
wipe_code__wipe_code_mismatch: "Wipe code mismatch",
word_count__title: "NUMBER OF WORDS",
words__account: "Account",
words__account_colon: "Account:",
words__address: "Address",
words__amount: "Amount",
words__are_you_sure: "Are you sure?",
words__array_of: "Array of",
words__blockhash: "Blockhash",
words__buying: "Buying",
words__confirm: "Confirm",
words__confirm_fee: "Confirm fee",
words__contains: "Contains",
words__continue_anyway: "Continue anyway?",
words__continue_with: "Continue with",
words__error: "Error",
words__fee: "Fee",
words__from: "from",
words__keep_it_safe: "Keep it safe!",
words__know_what_your_doing: "Continue only if you know what you are doing!",
words__my_trezor: "My Trezor",
words__no: "No",
words__outputs: "outputs",
words__please_check_again: "Please check again",
words__please_try_again: "Please try again",
words__really_wanna: "Do you really want to",
words__recipient: "Recipient",
words__sign: "Sign",
words__signer: "Signer",
words__title_check: "CHECK",
words__title_group: "GROUP",
words__title_information: "INFORMATION",
words__title_remember: "REMEMBER",
words__title_share: "SHARE",
words__title_shares: "SHARES",
words__title_success: "SUCCESS",
words__title_summary: "SUMMARY",
words__title_threshold: "THRESHOLD",
words__unknown: "Unknown",
words__warning: "Warning",
words__writable: "Writable",
words__yes: "Yes",
};

@ -0,0 +1,28 @@
//! generated from en.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
<%
import json
from pathlib import Path
THIS = Path(local.filename).resolve()
SRCDIR = THIS.parent
file = SRCDIR / "en.json"
data = json.loads(file.read_text())["translations"]
items_to_write: list[tuple[str, str]] = []
for key, value in data.items():
items_to_write.append((key, value))
items_to_write.sort(key=lambda x: x[0])
%>\
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const EN_TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
% for k, v in items_to_write:
${k}: ${utf8_str(v)},
% endfor
};

@ -0,0 +1,860 @@
{
"font": {
"Safe 3": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_es.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_es.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_es.json",
"4_FONT_BIG": "font_unifont_regular_16_es.json",
"5_FONT_DEMIBOLD": "font_unifont_bold_16_es.json"
},
"T": {
"1_FONT_NORMAL": "font_tthoves_regular_21_es.json",
"2_FONT_BOLD": "font_tthoves_bold_17_es.json",
"3_FONT_MONO": "font_robotomono_medium_20_es.json",
"4_FONT_BIG": null,
"5_FONT_DEMIBOLD": "font_tthoves_demibold_21_es.json"
}
},
"header": {
"change_language_prompt": "Cambiar el idioma?",
"change_language_title": "IDIOMA",
"language": "es",
"version": "2.6.5"
},
"translations": {
"addr_mismatch__contact_support_at": "Póngase en contacto con el soporte de Trezor en (TODO)",
"addr_mismatch__key_mismatch": "¿Deseginimiento de llave? (TODO)",
"addr_mismatch__mismatch": "¿La dirección es errónea?",
"addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__title": "¿DIRECCIÓN ERRÓNEA?",
"addr_mismatch__title_key_mismatch": "¿Deseginimiento de llave? (TODO)",
"addr_mismatch__wrong_derivation_path": "Ruta de derivación incorrecta para una cuenta seleccionada. (TODO)",
"addr_mismatch__xpub_mismatch": "¿No coincide con XPUB? (TODO)",
"address__public_key": "Llave pública (TODO)",
"address__title_cosigner": "COFIRMANTE",
"address__title_receive_address": "DIRECCIÓN DESTINO",
"address__title_yours": "TUYO",
"address_details__derivation_path": "Ruta de derivación:",
"address_details__title_receive_address": "DIRECCIÓN DESTINO",
"address_details__title_receiving_to": "RECIBIR EN",
"authenticate__confirm_template": "Permitir que la computadora conectada confirme que su {} es genuino? (TODO)",
"authenticate__header": "Dispositivo de autenticación (TODO)",
"auto_lock__change_template": "¿Bloquear automáticamente Trezor después de {} de inactividad?",
"auto_lock__title": "TIEMPO BLOQUEO AUTO.",
"backup__can_back_up_anytime": "Puedes hacer una copia de seguridad del Trezor cuando quieras.",
"backup__it_should_be_backed_up": "Deberías hacer ya una copia de seguridad del nuevo monedero.",
"backup__it_should_be_backed_up_now": "Se debe hacer una copia de seguridad ahora.",
"backup__new_wallet_created": "Se ha creado un nuevo monedero.",
"backup__new_wallet_successfully_created": "Se ha creado un nuevo monedero.",
"backup__recover_anytime": "La copia de seguridad sirve para recuperar el monedero en cualquier momento.",
"backup__title_backup_wallet": "C. SEG. MONEDERO",
"backup__title_skip": "OMITIR C. SEG.",
"backup__want_to_skip": "¿Seguro que quieres omitir la copia de seguridad?",
"binance__buy": "Comprar",
"binance__confirm_cancel": "Confirmar cancelación",
"binance__confirm_input": "Confirmar entrada",
"binance__confirm_order": "Confirmar orden",
"binance__confirm_output": "Confirmar salida",
"binance__order_id": "ID de orden:",
"binance__pair": "Par:",
"binance__price": "Precio:",
"binance__quantity": "Cantidad:",
"binance__sell": "Vender",
"binance__sender_address": "Dirección del remitente:",
"binance__side": "Lado:",
"bitcoin__commitment_data": "Datos de la asignación:",
"bitcoin__confirm_locktime": "Confirma el tiempo de bloqueo",
"bitcoin__create_proof_of_ownership": "¿Deseas crear una prueba de propiedad?",
"bitcoin__high_mining_fee_template": "La comisión de minería de\n{}\nes inesperadamente alta.",
"bitcoin__locktime_no_effect": "El tiempo de bloqueo está ajustado, pero no tendrá ningún efecto.",
"bitcoin__locktime_set_to": "Tiempo de bloqueo ajustado en:",
"bitcoin__locktime_set_to_blockheight": "Tiempo de bloqueo ajustado en blockheight:",
"bitcoin__lot_of_change_outputs": "Muchas salidas de cambio.",
"bitcoin__multiple_accounts": "Multiples cuentas (TODO)",
"bitcoin__new_fee_rate": "Nueva comisión:",
"bitcoin__simple_send_of": "Envío sencillo de",
"bitcoin__ticket_amount": "Importe del ticket:",
"bitcoin__title_confirm_details": "CONFIRMAR DETALLES",
"bitcoin__title_finalize_transaction": "FINALIZAR TRANSACCIÓN",
"bitcoin__title_high_mining_fee": "ALTA TASA MINERÍA",
"bitcoin__title_meld_transaction": "COMBINAR TRANSACCIÓN",
"bitcoin__title_modify_amount": "MODIFICAR IMPORTE",
"bitcoin__title_payjoin": "PAYJOIN",
"bitcoin__title_proof_of_ownership": "PRUEBA PROPIEDAD",
"bitcoin__title_purchase_ticket": "TICKET COMPRA",
"bitcoin__title_update_transaction": "ACTUALIZAR TRANSACCIÓN",
"bitcoin__unknown_path": "Ruta desconocida",
"bitcoin__unknown_transaction": "Transacción desconocida",
"bitcoin__unusually_high_fee": "Comisión inusualmente alta.",
"bitcoin__unverified_external_inputs": "La transacción contiene entradas externas sin verificar.",
"bitcoin__valid_signature": "La firma es válida.",
"bitcoin__voting_rights": "Derechos de voto de:",
"buttons__abort": "ABORTAR",
"buttons__access": "ACCEDER",
"buttons__again": "DE NUEVO",
"buttons__allow": "PERMITIR (TODO)",
"buttons__back": "ATRÁS (TODO)",
"buttons__back_up": "C. SEG.",
"buttons__cancel": "CANCELAR",
"buttons__change": "CAMBIAR",
"buttons__check": "REVISAR",
"buttons__check_again": "RECOMPROBAR",
"buttons__close": "CERRAR",
"buttons__confirm": "CONFIRMAR",
"buttons__continue": "CONTINUAR",
"buttons__details": "DETALLES",
"buttons__enable": "ACTIVAR",
"buttons__enter": "INTRODUCIR",
"buttons__enter_share": "INTRO. REC. COMP.",
"buttons__export": "EXPORTAR",
"buttons__format": "FORMATEAR",
"buttons__go_back": "REGRESA (TODO)",
"buttons__hold_to_confirm": "CONFIRMA PULSANDO",
"buttons__info": "INFO",
"buttons__install": "INSTALAR (TODO)",
"buttons__more_info": "MÁS INFO",
"buttons__ok_i_understand": "LO ENTIENDO",
"buttons__purchase": "COMPRAR",
"buttons__quit": "SALIR",
"buttons__restart": "REINICIAR",
"buttons__retry": "REINTENTAR",
"buttons__select": "SELECCIONAR",
"buttons__set": "AJUSTAR",
"buttons__show_all": "MOSTRAR TODO",
"buttons__show_details": "MOSTRAR DETALLES (TODO)",
"buttons__show_words": "MOSTRAR PALABRAS",
"buttons__skip": "OMITIR",
"buttons__try_again": "REINTENTAR",
"buttons__turn_off": "APAGAR",
"buttons__turn_on": "ENCENDER",
"cardano__addr_base": "Base",
"cardano__addr_enterprise": "Enterprise",
"cardano__addr_legacy": "Legacy",
"cardano__addr_pointer": "Pointer",
"cardano__addr_reward": "Recompensa",
"cardano__address_no_staking": "dirección: sin recompensas de staking.",
"cardano__amount_burned_decimals_unknown": "Cantidad quemada (decimales desconocidos): (TODO)",
"cardano__amount_minted_decimals_unknown": "Cantidad acuñada (decimales desconocidos): (TODO)",
"cardano__amount_sent_decimals_unknown": "Cantidad enviada (decimales desconocidos): (TODO)",
"cardano__anonymous_pool": "El pool no tiene metadatos (anónimo)",
"cardano__asset_fingerprint": "Huella digital del activo:",
"cardano__auxiliary_data_hash": "Hash de datos auxiliares:",
"cardano__block": "Bloque",
"cardano__catalyst": "Catalizador",
"cardano__certificate": "Certificado",
"cardano__certificate_path": "Ruta del certificado",
"cardano__change_output": "Salida de cambio",
"cardano__change_output_path": "Ruta de salida de cambio",
"cardano__change_output_staking_path": "Ruta de staking de salida de cambio",
"cardano__check_all_items": "Revisa todos los elementos con atención.",
"cardano__choose_level_of_details": "Selecciona el nivel de detalles:",
"cardano__collateral_input_id": "ID de entrada de garantía:",
"cardano__collateral_input_index": "Índice de entrada de garantía:",
"cardano__collateral_output_contains_tokens": "La salida de rentabilidad de la garantía contiene tokens.",
"cardano__collateral_return": "Rentabilidad de la garantía",
"cardano__confirm": "Confirmar:",
"cardano__confirm_signing_stake_pool": "Confirma la firma del registro del stake pool como propietario.",
"cardano__confirm_transaction": "Confirmar la transacción",
"cardano__confirming_a_multisig_transaction": "Confirmar una transacción multifirma.",
"cardano__confirming_pool_registration": "Confirmar el registro del pool como propietario.",
"cardano__confirming_transction": "Confirmar una transacción.",
"cardano__cost": "Coste",
"cardano__credential_mismatch": "Las credenciales no coinciden con las de pago.",
"cardano__datum_hash": "Hash datum: (TODO)",
"cardano__delegating_to": "Delegar en:",
"cardano__for_account_and_index_template": "Para la cuenta {} e índice {}: (TODO)",
"cardano__for_account_template": "para cuenta {}: (TODO)",
"cardano__for_key_hash": "para hash de clave:",
"cardano__for_script": "para script:",
"cardano__inline_datum": "Datos en línea",
"cardano__input_id": "ID de entrada:",
"cardano__input_index": "Índice de entrada:",
"cardano__intro_text_change": "La siguiente dirección es de cambio. Su",
"cardano__intro_text_owned_by_device": "La siguiente dirección es propiedad de este dispositivo. Su",
"cardano__intro_text_registration_payment": "La dirección de pago del registro de la clave de voto es propiedad de este dispositivo. Su",
"cardano__key_hash": "hash de clave",
"cardano__margin": "Margen",
"cardano__multisig_path": "ruta multifirma",
"cardano__nested_scripts_template": "Contiene {} scripts anidados.",
"cardano__network": "Red:",
"cardano__no_output_tx": "La transacción no tiene salidas; la red no se puede verificar.",
"cardano__nonce": "Nonce:",
"cardano__other": "otros",
"cardano__path": "ruta",
"cardano__pledge": "Compromiso",
"cardano__pointer": "pointer",
"cardano__policy_id": "ID de política:",
"cardano__pool_metadata_hash": "Hash de metadatos del pool:",
"cardano__pool_metadata_url": "url de metadatos del pool:",
"cardano__pool_owner": "Propietario del pool:",
"cardano__pool_owner_path": "Ruta de staking del propietario del pool",
"cardano__pool_reward_account": "Cuenta de recompensas de pool:",
"cardano__reference_input_id": "ID de entrada de referencia:",
"cardano__reference_input_index": "Índice de entrada de referencia:",
"cardano__reference_script": "Script de referencia",
"cardano__required_signer": "Firma necesaria",
"cardano__reward": "recompensa",
"cardano__reward_address": "La dirección es una dirección de recompensa.",
"cardano__reward_eligibility_warning": "Advertencia: La dirección no es una dirección de pago, no admite recompensas.",
"cardano__rewards_go_to": "Las recompensas van a:",
"cardano__script": "script",
"cardano__script_all": "Todo",
"cardano__script_any": "Parte",
"cardano__script_data_hash": "Hash de datos de script:",
"cardano__script_hash": "Hash de script:",
"cardano__script_invalid_before": "No válido antes",
"cardano__script_invalid_hereafter": "No válido en adelante",
"cardano__script_key": "Clave",
"cardano__script_n_of_k": "N de K",
"cardano__script_reward": "recompensa de script",
"cardano__sending": "Envío",
"cardano__show_simple": "Mostrar simple",
"cardano__sign_tx_path_template": "Firmar transacción con {}:",
"cardano__stake_delegation": "Delegación de stake",
"cardano__stake_deregistration": "Anulación del registro de la clave de stake",
"cardano__stake_pool_registration": "Registro de stake pool",
"cardano__stake_pool_registration_pool_id": "Registro de stake pool\nID de grupo:",
"cardano__stake_registration": "Registro de la clave de stake",
"cardano__staking_key_for_account": "Clave de staking para la cuenta",
"cardano__to_pool": "para el pool:",
"cardano__token_minting_path": "ruta de acuñación de token",
"cardano__total_collateral": "Garantía total:",
"cardano__transaction": "Transacción",
"cardano__transaction_contains_minting_or_burning": "La transacción contiene acuñación o quema de tokens.",
"cardano__transaction_contains_script_address_no_datum": "La siguiente salida de transacción contiene una dirección de script, pero no contiene un dato.",
"cardano__transaction_fee": "Comisión de transacción:",
"cardano__transaction_id": "ID de la transacción:",
"cardano__transaction_no_collateral_input": "La transacción no contiene entradas de garantía. El script Plutus no se podrá ejecutar.",
"cardano__transaction_no_script_data_hash": "La transacción no contiene hash de datos de script. El script Plutus no se podrá ejecutar.",
"cardano__transaction_output_contains_tokens": "La siguiente salida de transacción contiene tokens.",
"cardano__ttl": "TTL:",
"cardano__unknown_collateral_amount": "Importe de garantía desconocido.",
"cardano__unusual_path": "La ruta es inusual.",
"cardano__valid_since": "Válido desde:",
"cardano__verify_script": "Verificar script",
"cardano__vote_key_registration": "Registro de la clave de voto (CIP-36)",
"cardano__vote_public_key": "Clave pública de voto:",
"cardano__voting_purpose": "Propósito de la votación:",
"cardano__warning": "Advertencia",
"cardano__weight": "Importancia:",
"cardano__withdrawal_for_address_template": "Confirmar retirada para la dirección de {}:",
"cardano__witness_path": "Ruta de testigo",
"cardano__x_of_y_signatures_template": "Requiere {} de {} firmas.",
"coinjoin__access_account": "¿Acceder a tu cuenta de CoinJoin?",
"coinjoin__do_not_disconnect": "¡No desconectes el Trezor!",
"coinjoin__max_mining_fee": "Comisión de minería máx.:",
"coinjoin__max_rounds": "Número máx. rondas:",
"coinjoin__title": "AUTORIZAR COINJOIN",
"coinjoin__title_do_not_disconnect": "¡NO DESCONECTES EL TREZOR!",
"coinjoin__title_progress": "COINJOIN EN CURSO",
"coinjoin__waiting_for_others": "Esperando a los demás",
"confirm_total__fee_rate": "Comisión:",
"confirm_total__sending_from_account": "Envío desde cuenta:",
"confirm_total__title_fee": "INFO. COMISIÓN",
"confirm_total__title_sending_from": "ENVÍO DESDE",
"debug__loading_seed": "Cargando semilla",
"debug__loading_seed_not_recommended": "No se recomienda cargar una semilla privada.",
"device_name__change_template": "¿Cambiar el nombre del dispositivo a {}?",
"device_name__title": "NOMBRE DISPOSITIVO",
"entropy__send": "¿Seguro que quieres enviar la entropía?",
"entropy__title": "ENTROPÍA INTERNA",
"entropy__title_confirm": "CONFIRMAR ENTROPÍA",
"eos__about_to_sign_template": "Está a punto de firmar {}.",
"eos__action_name": "Nombre de acción:",
"eos__arbitrary_data": "Datos arbitrarios",
"eos__buy_ram": "Comprar RAM",
"eos__bytes": "Bytes:",
"eos__cancel_vote": "Cancelar voto",
"eos__checksum": "Suma de comprobación:",
"eos__code": "Código:",
"eos__contract": "Contrato:",
"eos__cpu": "CPU:",
"eos__creator": "Creador:",
"eos__delegate": "Delegar",
"eos__delete_auth": "Eliminar auth",
"eos__from": "De:",
"eos__link_auth": "Vincular auth",
"eos__memo": "Nota",
"eos__name": "Nombre:",
"eos__net": "NET:",
"eos__new_account": "Nueva cuenta",
"eos__owner": "Propietario:",
"eos__parent": "Principal:",
"eos__payer": "Pagador:",
"eos__permission": "Permiso:",
"eos__proxy": "Representación:",
"eos__receiver": "Destinatario:",
"eos__refund": "Reembolso",
"eos__requirement": "Requisito:",
"eos__sell_ram": "Vender Ram (TODO)",
"eos__sender": "Remitente:",
"eos__sign_transaction": "Firmar transacción",
"eos__threshold": "Umbral:",
"eos__to": "Para:",
"eos__transfer": "Transferencia:",
"eos__type": "Tipo:",
"eos__undelegate": "Anular delegación",
"eos__unlink_auth": "Desvincular auth",
"eos__update_auth": "Actualizar auth",
"eos__vote_for_producers": "Votar por productores",
"eos__vote_for_proxy": "Votar por representación",
"eos__voter": "Votante:",
"ethereum__amount_sent": "Importe enviado:",
"ethereum__contract": "Contrato:",
"ethereum__data_size_template": "Tamaño: {} bytes",
"ethereum__gas_limit": "Límite de gas:",
"ethereum__gas_price": "Precio de gas:",
"ethereum__max_gas_price": "Precio máximo de gas:",
"ethereum__name_and_version": "Nombre y versión",
"ethereum__new_contract": "¿Nuevo contrato?",
"ethereum__no_message_field": "No hay ningún campo de mensaje.",
"ethereum__priority_fee": "Comisión de prioridad:",
"ethereum__show_full_array": "Mostrar matriz completa.",
"ethereum__show_full_domain": "Mostrar dominio completo.",
"ethereum__show_full_message": "Mostrar mensaje completo.",
"ethereum__show_full_struct": "Mostrar estructura completa.",
"ethereum__sign_eip712": "¿Seguro que quieres firmar los datos EIP-712?",
"ethereum__title_confirm_data": "CONFIRMAR DATOS",
"ethereum__title_confirm_domain": "CONFIRMAR DOMINIO",
"ethereum__title_confirm_message": "CONFIRMAR MENSAJE",
"ethereum__title_confirm_struct": "CONFIRMAR ESTRUCTURA",
"ethereum__title_confirm_typed_data": "CONFIRMAR DATOS",
"ethereum__title_signing_address": "DIRECCIÓN FIRMA",
"ethereum__units_template": "{} unidades",
"ethereum__unknown_token": "Token desconocido",
"ethereum__valid_signature": "La firma es válida.",
"experimental_mode__enable": "¿Activar funciones experimentales?",
"experimental_mode__only_for_dev": "Solo para desarrollo y pruebas beta.",
"experimental_mode__title": "MODO EXPERIMENTAL",
"fido__already_registered": "Ya registrado",
"fido__device_already_registered": "Este dispositivo ya está registrado en esta aplicación.",
"fido__device_already_registered_with_template": "Este dispositivo ya está registrado en {}.",
"fido__device_not_registered": "Este dispositivo no está registrado en esta aplicación.",
"fido__does_not_belong": "La credencial que estás tratando de importar\nno pertenece a este autenticador.",
"fido__erase_credentials": "¿Borrar todas las credenciales?",
"fido__export_credentials": "¿Exportar información sobre las credenciales almacenadas en este dispositivo?",
"fido__not_registered": "No registrado",
"fido__not_registered_with_template": "Este dispositivo no está registrado en\n{}.",
"fido__please_enable_pin_protection": "Activa la protección con PIN.",
"fido__title_authenticate": "AUTENTICACIÓN FIDO2",
"fido__title_import_credential": "IMPORTAR CREDENCIAL",
"fido__title_list_credentials": "LISTAR CREDENCIALES",
"fido__title_register": "REGISTRO FIDO2",
"fido__title_remove_credential": "ELIMINAR CREDENCIAL",
"fido__title_reset": "RESTABLECER FIDO2",
"fido__title_u2f_auth": "Autenticación U2F",
"fido__title_u2f_register": "Registro U2F",
"fido__title_verify_user": "Verificar usuario FIDO2",
"fido__unable_to_verify_user": "No se puede verificar el usuario.",
"fido__wanna_erase_credentials": "¿Seguro que quieres borrar todas las credenciales?",
"firmware_update__title": "ACTUALICE EL FIRMWARE (TODO)",
"firmware_update__title_fingerprint": "Huella digital de FW (TODO)",
"homescreen__click_to_connect": "Haz clic para conectar",
"homescreen__click_to_unlock": "Haz clic para desbloquear",
"homescreen__title_backup_failed": "ERROR C. SEG.",
"homescreen__title_backup_needed": "C. SEG. NECESARIA",
"homescreen__title_coinjoin_authorized": "COINJOIN AUTORIZADO",
"homescreen__title_experimental_mode": "MODO EXPERIMENTAL",
"homescreen__title_hold_to_lock": "BLOQUEA PULSANDO",
"homescreen__title_no_usb_connection": "SIN CONEXIÓN USB",
"homescreen__title_pin_not_set": "PIN NO CONFIGURADO",
"homescreen__title_seedless": "SIN SEMILLA",
"homescreen__title_set": "CONFIG. PANT. INICIO",
"inputs__back": "ATRÁS",
"inputs__cancel": "CANCELAR",
"inputs__delete": "ELIMINAR",
"inputs__enter": "INTRODUCIR",
"inputs__return": "VOLVER",
"inputs__show": "MOSTRAR",
"inputs__space": "ESPACIO",
"joint__title": "TRANSACCIÓN CONJUNTA",
"joint__to_the_total_amount": "Al importe total:",
"joint__you_are_contributing": "Estás aportando:",
"lockscreen__tap_to_connect": "Toca para conectar",
"lockscreen__tap_to_unlock": "Toca para desbloquear",
"lockscreen__title_locked": "BLOQUEADO",
"lockscreen__title_not_connected": "NO CONECTADO",
"misc__decrypt_value": "Descifrar valor",
"misc__encrypt_value": "Cifrar valor",
"misc__title_suite_labeling": "ETIQUETADO SUITE",
"modify_amount__decrease_amount": "Reducir importe en:",
"modify_amount__increase_amount": "Aumentar importe en:",
"modify_amount__new_amount": "Nuevo importe:",
"modify_amount__title": "MODIFICAR IMPORTE",
"modify_fee__decrease_fee": "Reducir comisión en:",
"modify_fee__fee_rate": "Comisión:",
"modify_fee__increase_fee": "Aumentar comisión en:",
"modify_fee__new_transaction_fee": "Nueva comisión de transacción:",
"modify_fee__no_change": "La comisión no ha cambiado.",
"modify_fee__title": "MODIFICAR COMISIÓN",
"modify_fee__transaction_fee": "Comisión de transacción:",
"monero__confirm_export": "Confirmar exportación",
"monero__confirm_ki_sync": "Confirmar sincronización imagen clave",
"monero__confirm_refresh": "Confirmar actualización",
"monero__confirm_unlock_time": "Confirmar hora desbloqueo",
"monero__hashing_inputs": "Hashing de entradas",
"monero__payment_id": "ID de pago",
"monero__postprocessing": "Posprocesando...",
"monero__processing": "Procesando...",
"monero__processing_inputs": "Procesando entradas",
"monero__processing_outputs": "Procesando salidas",
"monero__signing": "Firmando...",
"monero__signing_inputs": "Firmando entradas",
"monero__unlock_time_set_template": "El tiempo de desbloqueo de esta transacción se ha ajustado en {}.",
"monero__wanna_export_tx_der": "¿Seguro que quieres exportar tx_der\npara tx_proof?",
"monero__wanna_export_tx_key": "¿Seguro que quieres exportar tx_key?",
"monero__wanna_export_watchkey": "¿Seguro que quieres exportar las credenciales de solo lectura?",
"monero__wanna_start_refresh": "¿Seguro que quieres\nactualizar?",
"monero__wanna_sync_key_images": "¿Seguro que quieres\nsincronizar imágenes clave?",
"nem__absolute": "absoluto",
"nem__activate": "Activar",
"nem__add": "Añadir",
"nem__confirm_action": "Confirmar acción",
"nem__confirm_address": "Confirmar dirección",
"nem__confirm_creation_fee": "Confirmar comisión de creación",
"nem__confirm_mosaic": "Confirmar mosaico",
"nem__confirm_multisig_fee": "Confirmar comisión multifirma",
"nem__confirm_namespace": "Confirmar espacio de nombres",
"nem__confirm_payload": "Confirmar carga",
"nem__confirm_properties": "Confirmar propiedades",
"nem__confirm_rental_fee": "Confirmar comisión de alquiler",
"nem__confirm_transfer_of": "Confirmar transferencia de",
"nem__convert_account_to_multisig": "¿Convertir la cuenta en una cuenta multifirma?",
"nem__cosign_transaction_for": "Firmar conjuntamente transacción para",
"nem__cosignatory": " cofirmante",
"nem__create_mosaic": "Crear mosaico",
"nem__create_namespace": "Crear espacio de nombres",
"nem__deactivate": "Desactivar",
"nem__decrease": "Disminuir",
"nem__description": "Descripción:",
"nem__divisibility_and_levy_cannot_be_shown": "La divisibilidad y la imposición de tasas no se muestran para mosaicos desconocidos.",
"nem__encrypted": "Cifrado:",
"nem__final_confirm": "Confirmación final",
"nem__immutable": "invariable",
"nem__increase": "Aumentar",
"nem__initial_supply": "Suministro inicial:",
"nem__initiate_transaction_for": "Iniciar transacción para",
"nem__levy_divisibility": "Divisibilidad de la tasa:",
"nem__levy_fee": "Comisión de tasa:",
"nem__levy_fee_of": "Comisión de tasa de",
"nem__levy_mosaic": "Mosaico de tasa:",
"nem__levy_namespace": "Espacio de nombre de la tasa:",
"nem__levy_recipient": "Receptor de la tasa:",
"nem__levy_type": "Tipo de tasa:",
"nem__modify_supply_for": "Modificar suministro de",
"nem__modify_the_number_of_cosignatories_by": "Modificar número de cofirmantes en ",
"nem__mutable": "variable",
"nem__of": "de",
"nem__percentile": "percentil",
"nem__raw_units_template": "{} unidades sin procesar",
"nem__remote_harvesting": " cosecha remota",
"nem__remove": "Retirar",
"nem__set_minimum_cosignatories_to": "Establecer mínimo de cofirmantes en ",
"nem__sign_tx_fee_template": "¿Firmar esta transacción\ny pagar {}\npor la comisión de red?",
"nem__supply_change": "Cambio de suministro",
"nem__supply_units_template": "¿Suministro de {} por {} unidades completas?",
"nem__transferable": "¿Es transferible?",
"nem__under_namespace": "en el espacio de nombres",
"nem__unencrypted": "Sin cifrar:",
"nem__unknown_mosaic": "Mosaico desconocido.",
"passphrase__access_hidden_wallet": "¿Acceder al monedero oculto?",
"passphrase__always_on_device": "¿Seguro que quieres introducir la frase de contraseña siempre en el dispositivo?",
"passphrase__from_host_not_shown": "Se utilizará la frase de contraseña proporcionada por el host, pero no se mostrará por la configuración del dispositivo.",
"passphrase__hidden_wallet": "Monedero oculto",
"passphrase__hide": "¿Ocultar la frase de contraseña del host?",
"passphrase__next_screen_will_show_passphrase": "En la siguiente pantalla verás la frase de contraseña.",
"passphrase__please_enter": "Escribe la frase de contraseña.",
"passphrase__revoke_on_device": "¿Deseas revocar la frase de contraseña en la configuración del dispositivo?",
"passphrase__title_confirm": "VALIDA FRASE CONTR.",
"passphrase__title_enter": "INTRO. FRASE CONTR.",
"passphrase__title_hide": "OCULTAR FRASE CONTR.",
"passphrase__title_settings": "CONFIG. FRASE CONTR.",
"passphrase__title_source": "ORIGEN FRASE CONTR.",
"passphrase__turn_off": "¿Desactivar la protección por frase de contraseña?",
"passphrase__turn_on": "¿Activar la protección por frase de contraseña?",
"pin__change": "¿Cambiar PIN?",
"pin__changed": "PIN cambiado.",
"pin__cursor_will_change": "La posición del cursor cambiará de una a otra para mejorar la seguridad.",
"pin__diff_from_wipe_code": "El nuevo PIN no debe ser el código de borrar.",
"pin__disabled": "Protección con PIN\ndesactivada.",
"pin__enabled": "Protección con PIN\nactivada.",
"pin__enter": "Introduce el PIN.",
"pin__enter_new": "Introduce un nuevo PIN.",
"pin__entered_not_valid": "El pin que ha ingresado no es válido. (TODO)",
"pin__info": "Necesitarás un PIN para acceder al dispositivo.",
"pin__invalid_pin": "El PIN introducido no es válido.",
"pin__last_attempt": "Último intento",
"pin__mismatch": "Los PIN introducidos no coinciden.",
"pin__pin_mismatch": "Desajuste (TODO)",
"pin__please_check_again": "Vuelve a comprobarlo.",
"pin__reenter_new": "Vuelve a introducir el nuevo PIN.",
"pin__reenter_to_confirm": "Vuelve a introducir el PIN para confirmar.",
"pin__should_be_long": "El PIN debe tener 4-50 dígitos.",
"pin__title_check_pin": "REVISAR PIN",
"pin__title_settings": "AJUSTES PIN",
"pin__title_wrong_pin": "PIN INCORRECTO",
"pin__tries_left": "intentos restantes",
"pin__turn_off": "¿Seguro que quieres desactivar la protección con PIN?",
"pin__turn_on": "¿Activar la protección con PIN?",
"pin__wrong_pin": "PIN incorrecto",
"plurals__contains_x_keys": "clave | claves (TODO)",
"plurals__lock_after_x_hours": "hora | Horas (TODO)",
"plurals__lock_after_x_milliseconds": "milisegundo | milisegundos (TODO)",
"plurals__lock_after_x_minutes": "minuto | minutos (TODO)",
"plurals__lock_after_x_seconds": "segundo | segundos (TODO)",
"plurals__sign_x_actions": "Acción | Acciones (TODO)",
"plurals__transaction_of_x_operations": "Operación | Operaciones (TODO)",
"plurals__x_groups_needed": "grupo | grupos (TODO)",
"plurals__x_shares_needed": "acciones | acciones (TODO)",
"progress__authenticity_check": "Verificar la autenticidad ... (TODO)",
"progress__done": "Listo",
"progress__loading_transaction": "Cargando transacción...",
"progress__one_second_left": "Queda 1 segundo",
"progress__please_wait": "ESPERA",
"progress__processing": "PROCESANDO",
"progress__refreshing": "Actualizando...",
"progress__signing_transaction": "Firmando transacción...",
"progress__syncing": "Sincronizando...",
"progress__x_seconds_left_template": "Quedan {} segundos",
"reboot_to_bootloader__restart": "¿Deseas reiniciar el Trezor en modo bootloader?",
"reboot_to_bootloader__title": "IR A BOOTLOADER",
"reboot_to_bootloader__version_by_template": "Versión de firmware {}\npor {} (TODO)",
"recovery__cancel_dry_run": "Anular la revisión de la copia de seguridad",
"recovery__check_dry_run": "¿Revisar la copia de seguridad?",
"recovery__cursor_will_change": "La posición del cursor cambiará de una a otra para mejorar la seguridad.",
"recovery__dry_run_bip39_valid_match": "La semilla de recuperación introducida es válida y coincide con la del dispositivo.",
"recovery__dry_run_bip39_valid_mismatch": "La semilla de recuperación introducida es válida, pero no coincide con la del dispositivo.",
"recovery__dry_run_slip39_valid_match": "Los recursos compartidos de recuperación introducidos son válidos y coinciden con el contenido actual del dispositivo.",
"recovery__dry_run_slip39_valid_mismatch": "Los recursos compartidos de recuperación introducidos son válidos, pero no coinciden con el contenido actual del dispositivo.",
"recovery__enter_any_share": "Introduce algún recurso compartido.",
"recovery__enter_backup": "Introduce la copia de seguridad.",
"recovery__enter_different_share": "Introduce un recurso compartido distinto.",
"recovery__enter_share_from_diff_group": "Introduce un recurso compartido de otro grupo.",
"recovery__group_num_template": "Grupo {}",
"recovery__group_threshold_reached": "Se ha alcanzado el umbral de grupo.",
"recovery__invalid_seed_entered": "Se ha introducido una semilla de recuperación no válida.",
"recovery__invalid_share_entered": "Se ha introducido un recurso compartido de recuperación no válido.",
"recovery__more_shares_needed": "Se necesitan más recursos compartidos.",
"recovery__num_of_words": "Selecciona el número de palabras de la copia de seguridad.",
"recovery__only_first_n_letters": "Solo tendrá que seleccionar las primeras 2-4 letras de cada palabra. (TODO)",
"recovery__progress_will_be_lost": "Se perderá todo el progreso.",
"recovery__select_num_of_words": "Selecciona el número de palabras de la copia de seguridad.",
"recovery__share_already_entered": "Ya se ha introducido el recurso compartido.",
"recovery__share_from_another_shamir": "Has introducido un recurso compartido de otra copia de seguridad de Shamir.",
"recovery__share_num_template": "Recurso compartido {}",
"recovery__title": "RECUPERAR MONEDERO",
"recovery__title_cancel_dry_run": "ANULAR REV. C. SEG.",
"recovery__title_cancel_recovery": "ANULAR RECUPERACIÓN",
"recovery__title_dry_run": "REVISAR C. SEG.",
"recovery__title_recover": "RECUPERAR MONEDERO",
"recovery__title_remaining_shares": "REC. COMP. RESTANTES",
"recovery__type_word_x_of_y_template": "Escribe la palabra {} de {}",
"recovery__wallet_recovered": "Se ha recuperado el monedero.",
"recovery__wanna_cancel_dry_run": "¿Seguro que quieres anular la revisión de la copia de seguridad?",
"recovery__wanna_cancel_recovery": "¿Seguro que quieres anular el proceso de recuperación?",
"recovery__word_count_template": "({} palabras)",
"recovery__word_x_of_y_template": "PALABRA {} DE {}",
"recovery__x_more_items_starting_template_plural": "{Count} más {plural} iniciando (TODO)",
"recovery__x_more_shares_needed_template_plural": "{Count} More {Plural} necesaria. (TODO)",
"recovery__x_of_y_entered_template": "Se han introducido {} de {} recursos compartidos.",
"recovery__you_have_entered": "Has introducido",
"reset__advanced_group_threshold_info": "El umbral de grupo determina el n.º de grupos necesarios para recuperar el monedero.",
"reset__all_x_of_y_template": "los {} de los {} recursos compartidos",
"reset__any_x_of_y_template": "alguno de los {} de los {} recursos compartidos",
"reset__button_create": "CREAR MONEDERO",
"reset__button_recover": "RECUPERAR MONEDERO",
"reset__by_continuing": "Al continuar, aceptas los términos y condiciones de Trezor Company.",
"reset__check_backup_title": "REVISAR C. SEG.",
"reset__check_group_share_title_template": "REVISAR REC. COMP. {} G {}",
"reset__check_seed_title": "REVISAR SEMILLA",
"reset__check_share_title_template": "REVISAR RECURSO N. {}",
"reset__continue_with_next_share": "Continuar con el siguiente recurso compartido.",
"reset__continue_with_share_template": "Continuar con el recurso n.º {}.",
"reset__finished_verifying_group_template": "Has terminado de verificar los recursos compartidos de recuperación del grupo {}.",
"reset__finished_verifying_seed": "Has terminado de verificar la semilla de recuperación.",
"reset__finished_verifying_shares": "Has terminado de verificar los recursos compartidos de recuperación.",
"reset__group_description": "Un grupo se compone de recursos compartidos de recuperación.",
"reset__group_info": "Cada grupo tiene un n.º determinado de recursos compartidos y su propio umbral. En los siguientes pasos, ajustarás el número de recursos compartidos y los umbrales.",
"reset__group_share_checked_successfully_template": "Se ha verificado el recurso compartido {} del grupo {}.",
"reset__group_share_title_template": "REC. COMP. {} GRUPO {}",
"reset__more_info_at": "Más información en",
"reset__need_all_share_template": "Para la recuperación, se necesitan los {} recursos compartidos.",
"reset__need_any_share_template": "Para la recuperación, se necesita alguno de los {} recursos compartidos.",
"reset__needed_to_form_a_group": "para formar un grupo. ",
"reset__needed_to_recover_your_wallet": "para recuperar el monedero. ",
"reset__never_make_digital_copy": "No hagas nunca una copia digital de la copia de seguridad ni la cargues en línea.",
"reset__num_of_share_holders_template": "{} persona/s o ubicación/es tendrá/n un recurso compartido.",
"reset__num_of_shares_advanced_info_template": "Cada recurso compartido de recuperación es una secuencia de 20 palabras. A continuación, elige el umbral de recursos compartidos necesario para formar el grupo {}.",
"reset__num_of_shares_basic_info": "Cada recurso compartido de recuperación es una secuencia de 20 palabras. A continuación, elige cuántos recursos compartidos necesitas para recuperar el monedero.",
"reset__num_shares_for_group_template": "Número necesario de recursos compartidos para formar el grupo {}.",
"reset__number_of_shares_info": "= total de listas de palabras únicas utilizadas para la copia de seguridad del monedero.",
"reset__one_share": "1 recurso compartido",
"reset__only_one_share_will_be_created": "Solo se creará un recurso compartido.",
"reset__recovery_seed_title": "SEMILLA RECUPERACIÓN",
"reset__recovery_share_title_template": "RECURSO RECUPERACIÓN N. {}",
"reset__required_number_of_groups": "El n.º de grupos necesario para la recuperación.",
"reset__select_correct_word": "Selecciona la palabra correcta para cada posición.",
"reset__select_word_template": "SELEC. {} PALABRA",
"reset__select_word_x_of_y_template": "Selecciona palabra {} de {}:",
"reset__set_it_to_count_template": "Ajústalo en {} y necesitarás ",
"reset__share_checked_successfully_template": "Se ha verificado el recurso de recuperación n.º {}.",
"reset__share_words_title": "C. SEG. ESTÁNDAR",
"reset__slip39_checklist_num_groups": "Número de grupos",
"reset__slip39_checklist_num_shares": "Número de recursos compartidos",
"reset__slip39_checklist_set_num_groups": "Establecer el número de grupos (TODO)",
"reset__slip39_checklist_set_num_shares": "Establecer un número de acciones (TODO)",
"reset__slip39_checklist_set_sizes": "Definir tamaños y umbrales",
"reset__slip39_checklist_set_sizes_longer": "Establecer tamaño y umbral para cada grupo (TODO)",
"reset__slip39_checklist_set_threshold": "Ajustar umbral",
"reset__slip39_checklist_title": "LISTA C. SEG.",
"reset__slip39_checklist_write_down": "Escribir y comprobar todos los recursos compartidos",
"reset__slip39_checklist_write_down_recovery": "Escriba y verifique todas las acciones de recuperación (TODO)",
"reset__the_threshold_sets_the_number_of_shares": "El umbral establece el número de recursos compartidos ",
"reset__threshold_info": "= mínimo de listas de palabras únicas utilizadas para la recuperación.",
"reset__title_backup_is_done": "C. SEG. COMPLETA",
"reset__title_create_wallet": "CREAR MONEDERO",
"reset__title_create_wallet_shamir": "CREAR MONEDERO (SHAMIR)",
"reset__title_group_threshold": "UMBRAL GRUPOS",
"reset__title_number_of_groups": "N.º GRUPOS",
"reset__title_number_of_shares": "N.º REC. COMP.",
"reset__title_set_group_threshold": "AJUSTAR UMBRAL GRUPOS",
"reset__title_set_number_of_groups": "AJUSTAR N.º GRUPOS",
"reset__title_set_number_of_shares": "AJUSTAR N.º REC. COMP.",
"reset__title_set_threshold": "AJUSTAR UMBRAL",
"reset__to_form_group_template": "para formar el grupo {}.",
"reset__tos_link": "trezor.io/tos",
"reset__total_number_of_shares_in_group_template": "Establece el n.º total de recursos compartidos del grupo {}.",
"reset__use_your_backup": "Utiliza la copia de seguridad cuando necesites recuperar el monedero.",
"reset__write_down_words_template": "Escribe las {} palabras en orden.",
"reset__wrong_word_selected": "Se ha seleccionado una palabra incorrecta.",
"reset__you_need_one_share": "Para la recuperación, se necesita 1 recurso compartido.",
"reset__your_backup_is_done": "La copia de seguridad ha finalizado.",
"ripple__confirm_tag": "Confirmar etiqueta",
"ripple__destination_tag_template": "Etiqueta de destino:\n{}",
"rotation__change_template": "¿Quieres cambiar la rotación del dispositivo al {}?",
"rotation__east": "este",
"rotation__north": "norte",
"rotation__south": "sur",
"rotation__title_change": "CAMBIAR ROTACIÓN",
"rotation__west": "oeste",
"safety_checks__approve_unsafe_always": "Trezor te permitirá aprobar algunas acciones que podrían no ser seguras.",
"safety_checks__approve_unsafe_temporary": "Trezor te permitirá aprobar temporalmente algunas acciones que podrían no ser seguras.",
"safety_checks__enforce_strict": "¿Seguro que quieres aplicar estrictos controles de seguridad (recomendado)?",
"safety_checks__title": "COMPROB. SEGURIDAD",
"safety_checks__title_safety_override": "ANULACIÓN SEGURIDAD",
"sd_card__all_data_will_be_lost": "Se perderán todos los datos de la tarjeta SD.",
"sd_card__card_required": "Se necesita una tarjeta SD.",
"sd_card__disable": "¿Seguro que quieres quitar la protección de la tarjeta SD del dispositivo?",
"sd_card__disabled": "Has desactivado la protección SD.",
"sd_card__enable": "¿Seguro que quieres aplicar la protección de la tarjeta SD al dispositivo?",
"sd_card__enabled": "Has activado la protección SD.",
"sd_card__error": "Error de tarjeta SD",
"sd_card__format_card": "Formatea la tarjeta SD.",
"sd_card__insert_correct_card": "Introduce la tarjeta SD correcta para este dispositivo.",
"sd_card__please_insert": "Introduce la tarjeta SD.",
"sd_card__please_unplug_and_insert": "Desconecta el dispositivo e introduce la tarjeta SD.",
"sd_card__problem_accessing": "Se ha producido un problema al acceder a la tarjeta SD.",
"sd_card__refresh": "¿Seguro que quieres sustituir el secreto de la tarjeta SD actual por uno nuevo?",
"sd_card__refreshed": "Has actualizado la protección SD.",
"sd_card__restart": "¿Deseas reiniciar el Trezor en modo bootloader?",
"sd_card__title": "PROTECCIÓN SD",
"sd_card__title_problem": "Problema con la tarjeta SD",
"sd_card__unknown_filesystem": "Sistema de archivos desconocido",
"sd_card__unplug_and_insert_correct": "Desconecta el dispositivo e introduce la tarjeta SD correcta.",
"sd_card__use_different_card": "Utiliza una tarjeta diferente o formatea la tarjeta SD al sistema de archivos FAT32.",
"sd_card__wanna_format": "¿Seguro que quieres formatear la tarjeta SD?",
"sd_card__wrong_sd_card": "Tarjeta SD incorrecta",
"send__address_path": "ruta de dirección (TODO)",
"send__confirm_sending": "Confirm_sending",
"send__from_multiple_accounts": "Envío desde múltiples cuentas. (TODO)",
"send__including_fee": "Comisión incluida:",
"send__maximum_fee": "Comisión máxima:",
"send__receiving_to_multisig": "Recibir una dirección multisig. (TODO)",
"send__title_confirm_sending": "CONFIRMAR ENVÍO",
"send__title_joint_transaction": "TRANSACCIÓN CONJUNTA",
"send__title_receiving_to": "Recibir a (TODO)",
"send__title_sending": "ENVÍO",
"send__title_sending_amount": "IMPORTE ENVÍO",
"send__title_sending_to": "ENVÍO A",
"send__to_the_total_amount": "Al importe total:",
"send__total_amount": "Importe total:",
"send__transaction_id": "ID de la transacción:",
"send__you_are_contributing": "Estás aportando:",
"share_words__words_in_order": " palabras en orden.",
"share_words__wrote_down_all": "Escribí todas las ",
"sign_message__bytes_template": "{} Bytes (TODO)",
"sign_message__confirm_address": "DIRECCIÓN FIRMA",
"sign_message__confirm_message": "CONFIRMAR MENSAJE",
"sign_message__message_size": "Tamaño del mensaje: (TODO)",
"sign_message__verify_address": "VERIFICA LA DIRECCIÓN (TODO)",
"solana__account_index": "Índice de cuenta (TODO)",
"solana__associated_token_account": "Cuenta de token asociado (TODO)",
"solana__confirm_multisig": "Confirmar multisig (TODO)",
"solana__expected_fee": "Tarifa esperada (TODO)",
"solana__instruction_accounts_template": "La instrucción contiene cuentas {} y sus datos son {} bytes de largo. (TODO)",
"solana__instruction_data": "Datos de instrucciones (TODO)",
"solana__instruction_is_multisig": "La siguiente instrucción es una instrucción multisig. (TODO)",
"solana__is_provided_via_lookup_table_template": "{} se proporciona a través de una tabla de búsqueda. (TODO)",
"solana__lookup_table_address": "Dirección de la tabla de búsqueda (TODO)",
"solana__multiple_signers": "Múltiples firmantes (TODO)",
"solana__token_address": "Dirección token (TODO)",
"solana__transaction_contains_unknown_instructions": "La transacción contiene instrucciones desconocidas. (TODO)",
"solana__transaction_requires_x_signers_template": "La transacción requiere {} firmantes que aumentan la tarifa. (TODO)",
"stellar__account_merge": "Fusión de cuentas",
"stellar__account_thresholds": "Umbrales de cuenta",
"stellar__add_signer": "Añadir firmante",
"stellar__add_trust": "Añadir trustline",
"stellar__all_will_be_sent_to": "Todos los XLM se enviarán a:",
"stellar__allow_trust": "Permitir trustline",
"stellar__asset": "Activo",
"stellar__balance_id": "Balance ID (TODO)",
"stellar__bump_sequence": "Incrementar secuencia",
"stellar__buying": "Compra:",
"stellar__claim_claimable_balance": "Reclamar saldo reclamable (TODO)",
"stellar__clear_data": "Borrar datos",
"stellar__clear_flags": "Borrar indicadores",
"stellar__confirm_issuer": "Confirmar emisor",
"stellar__confirm_memo": "Confirmar nota",
"stellar__confirm_network": "Confirmar red",
"stellar__confirm_operation": "Confirmar operación",
"stellar__confirm_stellar": "Confirmar Stellar",
"stellar__confirm_timebounds": "Confirmar límites de tiempo",
"stellar__create_account": "Crear cuenta",
"stellar__debited_amount": "Importe adeudado",
"stellar__delete": "Eliminar",
"stellar__delete_passive_offer": "Eliminar oferta pasiva",
"stellar__delete_trust": "Eliminar trustline",
"stellar__destination": "Destino:",
"stellar__exchanges_require_memo": "Importante: En muchos exchanges es necesario dejar nota al hacer un depósito.",
"stellar__final_confirm": "Confirmación final",
"stellar__hash": "Hash:",
"stellar__high": "Alta:",
"stellar__home_domain": "Dominio principal",
"stellar__inflation": "Inflación",
"stellar__initial_balance": "Saldo inicial",
"stellar__initialize_signing_with": "Iniciar firma con",
"stellar__issuer_template": "Emisor {}:",
"stellar__key": "Clave:",
"stellar__limit": "Límite:",
"stellar__low": "Baja:",
"stellar__master_weight": "Importancia del principal:",
"stellar__medium": "Media:",
"stellar__new_offer": "Nueva oferta",
"stellar__new_passive_offer": "Nueva oferta pasiva",
"stellar__no_memo_set": "No se ha establecido ninguna nota.",
"stellar__no_restriction": "[sin restricciones]",
"stellar__on_network_template": "Transacción en {}",
"stellar__path_pay": "Path payment",
"stellar__path_pay_at_least": "Path payment por un mínimo de",
"stellar__pay": "Pago:",
"stellar__pay_at_most": "Pago máximo:",
"stellar__preauth_transaction": "Transacción preautorización:",
"stellar__price_per_template": "Precio por {}:",
"stellar__private_network": "red privada",
"stellar__remove_signer": "Eliminar firmante",
"stellar__revoke_trust": "Revocar trustline",
"stellar__selling": "Venta:",
"stellar__set_data": "Configurar datos",
"stellar__set_flags": "Configurar indicadores",
"stellar__set_sequence_to_template": "¿Establecer secuencia en {}?",
"stellar__sign_tx_count_template": "¿Firmar esta transacción compuesta por {}",
"stellar__sign_tx_fee_template": " y pagar {}\npor comisión?",
"stellar__source_account": "Cuenta origen:",
"stellar__testnet_network": "red Testnet",
"stellar__trusted_account": "Cuenta de confianza",
"stellar__update": "Actualizar",
"stellar__valid_from": "Válido desde (UTC)",
"stellar__valid_to": "Válido hasta (UTC)",
"stellar__value_sha256": "Valor (SHA-256):",
"stellar__wanna_clean_value_key_template": "¿Quieres borrar la clave de valor {}?",
"stellar__your_account": " tu cuenta",
"tezos__baker_address": "Dirección de panadero:",
"tezos__balance": "Saldo:",
"tezos__ballot": "Papeleta:",
"tezos__confirm_delegation": "Confirmar delegación",
"tezos__confirm_origination": "Confirmar originación",
"tezos__delegator": "Delegador:",
"tezos__proposal": "Propuesta",
"tezos__register_delegate": "Registrar delegado",
"tezos__remove_delegation": "Eliminar delegación",
"tezos__submit_ballot": "Enviar papeleta",
"tezos__submit_proposal": "Enviar propuesta",
"tezos__submit_proposals": "Enviar propuestas",
"tutorial__middle_click": "Pulsa a la vez ambos botones\npara confirmar.",
"tutorial__press_and_hold": "Mantén pulsado el botón derecho para\naprobar las operaciones importantes.",
"tutorial__ready_to_use": "Todo está listo para\nque uses tu Trezor.",
"tutorial__scroll_down": "Pulsa el botón derecho para desplazarte hacia abajo y leer todo el contenido cuando el texto no quepa en una pantalla.\n\rPulsa el botón izquierdo para desplazarte hacia arriba.",
"tutorial__sure_you_want_skip": "¿Seguro que quieres\nomitir el tutorial?",
"tutorial__title_hello": "HOLA",
"tutorial__title_screen_scroll": "DESPLAZARSE",
"tutorial__title_skip": "OMITIR TUTORIAL",
"tutorial__title_tutorial_complete": "TUTORIAL COMPLETO",
"tutorial__use_trezor": "Para usar Trezor,\nhaz clic en los botones izquierdo y derecho.\n\rContinuar (botón derecho).",
"tutorial__welcome_press_right": "Te damos la bienvenida a Trezor. Pulsa el botón derecho para continuar.",
"u2f__get": "¿Aumentar y recuperar el contador U2F?",
"u2f__set_template": "¿Ajustar el contador U2F a {}?",
"u2f__title_get": "OBTENER CONTADOR U2F",
"u2f__title_set": "CONFIG. CONTADOR U2F",
"wipe__info": "Se borrarán todos los datos.",
"wipe__title": "BORRAR DISPOSITIVO",
"wipe__want_to_wipe": "¿Seguro que quieres borrar el dispositivo?\n",
"wipe_code__change": "¿Cambiar el código de borrar?",
"wipe_code__changed": "El código de borrar se ha cambiado.",
"wipe_code__diff_from_pin": "El código de borrar debe ser diferente del PIN.\nInténtalo de nuevo.",
"wipe_code__disabled": "El código de borrar se ha desactivado.",
"wipe_code__enabled": "El código de borrar se ha activado.",
"wipe_code__enter_new": "Escribe el nuevo código de borrar",
"wipe_code__info": "El código de borrar se puede utilizar para borrar todos los datos de este dispositivo.",
"wipe_code__invalid": "Código de limpieza no válido (TODO)",
"wipe_code__mismatch": "Los códigos de borrar no coinciden.",
"wipe_code__reenter": "Vuelve a introducir el código de borrar.",
"wipe_code__reenter_to_confirm": "Vuelve a introducir el código de borrar para confirmar.",
"wipe_code__title_check": "REVISAR CÓD. BORRAR",
"wipe_code__title_invalid": "CÓD. BORRAR NO VÁLIDO",
"wipe_code__title_settings": "AJUSTES CÓD. BORRAR",
"wipe_code__turn_off": "¿Desactivar la protección de código de borrar?",
"wipe_code__turn_on": "¿Activar la protección del código de borrar?",
"wipe_code__wipe_code_mismatch": "Limpiar el coincidencia de código (TODO)",
"word_count__title": "N.º PALABRAS",
"words__account": "Cuenta (TODO)",
"words__account_colon": "Cuenta: (TODO)",
"words__address": "DIRECCIÓN (TODO)",
"words__amount": "Cantidad (TODO)",
"words__are_you_sure": "¿Seguro?",
"words__array_of": "Gama de (TODO)",
"words__blockhash": "Blockhash (TODO)",
"words__buying": "Comprar",
"words__confirm": "Confirmar (TODO)",
"words__confirm_fee": "Confirmar tarifa (TODO)",
"words__contains": "Contiene (TODO)",
"words__continue_anyway": "continuar de todos modos?",
"words__continue_with": "Continuar con",
"words__error": "Error",
"words__fee": "Tarifa (TODO)",
"words__from": "de",
"words__keep_it_safe": "¡Guárdala en un lugar seguro!",
"words__know_what_your_doing": "Continúa solo si tienes los conocimientos necesarios.",
"words__my_trezor": "Mi trezor (TODO)",
"words__no": "No (TODO)",
"words__outputs": "salidas",
"words__please_check_again": "Vuelve a comprobarlo",
"words__please_try_again": "Inténtalo de nuevo",
"words__really_wanna": "¿Seguro que quieres",
"words__recipient": "Recipiente (TODO)",
"words__sign": "Firmar",
"words__signer": "Firmante (TODO)",
"words__title_check": "REVISAR",
"words__title_group": "GRUPO",
"words__title_information": "INFORMACIÓN (TODO)",
"words__title_remember": "RECORDAR",
"words__title_share": "REC. COMP.",
"words__title_shares": "REC. COMP.",
"words__title_success": "COMPLETADO",
"words__title_summary": "RESUMEN",
"words__title_threshold": "UMBRAL",
"words__unknown": "Desconocido",
"words__warning": "Advertencia",
"words__writable": "Escribible (TODO)",
"words__yes": "Sí (TODO)"
}
}

@ -0,0 +1,855 @@
//! generated from export.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
use super::micropython::{language_name_obj, TR_OBJ};
use crate::micropython::{map::Map, module::Module, qstr::Qstr};
#[no_mangle]
#[rustfmt::skip]
pub static mp_module_trezortranslate: Module = obj_module! {
// TODO: add function to get all the translations keys in order
// - so that client can validate it is sending correct keys in correct order
/// def language_name() -> str:
/// """Get the name of the current language."""
Qstr::MP_QSTR_language_name => obj_fn_0!(language_name_obj).as_obj(),
/// class TR:
/// """Translation object with attributes."""
/// addr_mismatch__contact_support_at: str
/// addr_mismatch__key_mismatch: str
/// addr_mismatch__mismatch: str
/// addr_mismatch__support_url: str
/// addr_mismatch__title: str
/// addr_mismatch__title_key_mismatch: str
/// addr_mismatch__wrong_derivation_path: str
/// addr_mismatch__xpub_mismatch: str
/// address__public_key: str
/// address__title_cosigner: str
/// address__title_receive_address: str
/// address__title_yours: str
/// address_details__derivation_path: str
/// address_details__title_receive_address: str
/// address_details__title_receiving_to: str
/// authenticate__confirm_template: str
/// authenticate__header: str
/// auto_lock__change_template: str
/// auto_lock__title: str
/// backup__can_back_up_anytime: str
/// backup__it_should_be_backed_up: str
/// backup__it_should_be_backed_up_now: str
/// backup__new_wallet_created: str
/// backup__new_wallet_successfully_created: str
/// backup__recover_anytime: str
/// backup__title_backup_wallet: str
/// backup__title_skip: str
/// backup__want_to_skip: str
/// binance__buy: str
/// binance__confirm_cancel: str
/// binance__confirm_input: str
/// binance__confirm_order: str
/// binance__confirm_output: str
/// binance__order_id: str
/// binance__pair: str
/// binance__price: str
/// binance__quantity: str
/// binance__sell: str
/// binance__sender_address: str
/// binance__side: str
/// bitcoin__commitment_data: str
/// bitcoin__confirm_locktime: str
/// bitcoin__create_proof_of_ownership: str
/// bitcoin__high_mining_fee_template: str
/// bitcoin__locktime_no_effect: str
/// bitcoin__locktime_set_to: str
/// bitcoin__locktime_set_to_blockheight: str
/// bitcoin__lot_of_change_outputs: str
/// bitcoin__multiple_accounts: str
/// bitcoin__new_fee_rate: str
/// bitcoin__simple_send_of: str
/// bitcoin__ticket_amount: str
/// bitcoin__title_confirm_details: str
/// bitcoin__title_finalize_transaction: str
/// bitcoin__title_high_mining_fee: str
/// bitcoin__title_meld_transaction: str
/// bitcoin__title_modify_amount: str
/// bitcoin__title_payjoin: str
/// bitcoin__title_proof_of_ownership: str
/// bitcoin__title_purchase_ticket: str
/// bitcoin__title_update_transaction: str
/// bitcoin__unknown_path: str
/// bitcoin__unknown_transaction: str
/// bitcoin__unusually_high_fee: str
/// bitcoin__unverified_external_inputs: str
/// bitcoin__valid_signature: str
/// bitcoin__voting_rights: str
/// buttons__abort: str
/// buttons__access: str
/// buttons__again: str
/// buttons__allow: str
/// buttons__back: str
/// buttons__back_up: str
/// buttons__cancel: str
/// buttons__change: str
/// buttons__check: str
/// buttons__check_again: str
/// buttons__close: str
/// buttons__confirm: str
/// buttons__continue: str
/// buttons__details: str
/// buttons__enable: str
/// buttons__enter: str
/// buttons__enter_share: str
/// buttons__export: str
/// buttons__format: str
/// buttons__go_back: str
/// buttons__hold_to_confirm: str
/// buttons__info: str
/// buttons__install: str
/// buttons__more_info: str
/// buttons__ok_i_understand: str
/// buttons__purchase: str
/// buttons__quit: str
/// buttons__restart: str
/// buttons__retry: str
/// buttons__select: str
/// buttons__set: str
/// buttons__show_all: str
/// buttons__show_details: str
/// buttons__show_words: str
/// buttons__skip: str
/// buttons__try_again: str
/// buttons__turn_off: str
/// buttons__turn_on: str
/// cardano__addr_base: str
/// cardano__addr_enterprise: str
/// cardano__addr_legacy: str
/// cardano__addr_pointer: str
/// cardano__addr_reward: str
/// cardano__address_no_staking: str
/// cardano__amount_burned_decimals_unknown: str
/// cardano__amount_minted_decimals_unknown: str
/// cardano__amount_sent_decimals_unknown: str
/// cardano__anonymous_pool: str
/// cardano__asset_fingerprint: str
/// cardano__auxiliary_data_hash: str
/// cardano__block: str
/// cardano__catalyst: str
/// cardano__certificate: str
/// cardano__certificate_path: str
/// cardano__change_output: str
/// cardano__change_output_path: str
/// cardano__change_output_staking_path: str
/// cardano__check_all_items: str
/// cardano__choose_level_of_details: str
/// cardano__collateral_input_id: str
/// cardano__collateral_input_index: str
/// cardano__collateral_output_contains_tokens: str
/// cardano__collateral_return: str
/// cardano__confirm: str
/// cardano__confirm_signing_stake_pool: str
/// cardano__confirm_transaction: str
/// cardano__confirming_a_multisig_transaction: str
/// cardano__confirming_pool_registration: str
/// cardano__confirming_transction: str
/// cardano__cost: str
/// cardano__credential_mismatch: str
/// cardano__datum_hash: str
/// cardano__delegating_to: str
/// cardano__for_account_and_index_template: str
/// cardano__for_account_template: str
/// cardano__for_key_hash: str
/// cardano__for_script: str
/// cardano__inline_datum: str
/// cardano__input_id: str
/// cardano__input_index: str
/// cardano__intro_text_change: str
/// cardano__intro_text_owned_by_device: str
/// cardano__intro_text_registration_payment: str
/// cardano__key_hash: str
/// cardano__margin: str
/// cardano__multisig_path: str
/// cardano__nested_scripts_template: str
/// cardano__network: str
/// cardano__no_output_tx: str
/// cardano__nonce: str
/// cardano__other: str
/// cardano__path: str
/// cardano__pledge: str
/// cardano__pointer: str
/// cardano__policy_id: str
/// cardano__pool_metadata_hash: str
/// cardano__pool_metadata_url: str
/// cardano__pool_owner: str
/// cardano__pool_owner_path: str
/// cardano__pool_reward_account: str
/// cardano__reference_input_id: str
/// cardano__reference_input_index: str
/// cardano__reference_script: str
/// cardano__required_signer: str
/// cardano__reward: str
/// cardano__reward_address: str
/// cardano__reward_eligibility_warning: str
/// cardano__rewards_go_to: str
/// cardano__script: str
/// cardano__script_all: str
/// cardano__script_any: str
/// cardano__script_data_hash: str
/// cardano__script_hash: str
/// cardano__script_invalid_before: str
/// cardano__script_invalid_hereafter: str
/// cardano__script_key: str
/// cardano__script_n_of_k: str
/// cardano__script_reward: str
/// cardano__sending: str
/// cardano__show_simple: str
/// cardano__sign_tx_path_template: str
/// cardano__stake_delegation: str
/// cardano__stake_deregistration: str
/// cardano__stake_pool_registration: str
/// cardano__stake_pool_registration_pool_id: str
/// cardano__stake_registration: str
/// cardano__staking_key_for_account: str
/// cardano__to_pool: str
/// cardano__token_minting_path: str
/// cardano__total_collateral: str
/// cardano__transaction: str
/// cardano__transaction_contains_minting_or_burning: str
/// cardano__transaction_contains_script_address_no_datum: str
/// cardano__transaction_fee: str
/// cardano__transaction_id: str
/// cardano__transaction_no_collateral_input: str
/// cardano__transaction_no_script_data_hash: str
/// cardano__transaction_output_contains_tokens: str
/// cardano__ttl: str
/// cardano__unknown_collateral_amount: str
/// cardano__unusual_path: str
/// cardano__valid_since: str
/// cardano__verify_script: str
/// cardano__vote_key_registration: str
/// cardano__vote_public_key: str
/// cardano__voting_purpose: str
/// cardano__warning: str
/// cardano__weight: str
/// cardano__withdrawal_for_address_template: str
/// cardano__witness_path: str
/// cardano__x_of_y_signatures_template: str
/// coinjoin__access_account: str
/// coinjoin__do_not_disconnect: str
/// coinjoin__max_mining_fee: str
/// coinjoin__max_rounds: str
/// coinjoin__title: str
/// coinjoin__title_do_not_disconnect: str
/// coinjoin__title_progress: str
/// coinjoin__waiting_for_others: str
/// confirm_total__fee_rate: str
/// confirm_total__sending_from_account: str
/// confirm_total__title_fee: str
/// confirm_total__title_sending_from: str
/// debug__loading_seed: str
/// debug__loading_seed_not_recommended: str
/// device_name__change_template: str
/// device_name__title: str
/// entropy__send: str
/// entropy__title: str
/// entropy__title_confirm: str
/// eos__about_to_sign_template: str
/// eos__action_name: str
/// eos__arbitrary_data: str
/// eos__buy_ram: str
/// eos__bytes: str
/// eos__cancel_vote: str
/// eos__checksum: str
/// eos__code: str
/// eos__contract: str
/// eos__cpu: str
/// eos__creator: str
/// eos__delegate: str
/// eos__delete_auth: str
/// eos__from: str
/// eos__link_auth: str
/// eos__memo: str
/// eos__name: str
/// eos__net: str
/// eos__new_account: str
/// eos__owner: str
/// eos__parent: str
/// eos__payer: str
/// eos__permission: str
/// eos__proxy: str
/// eos__receiver: str
/// eos__refund: str
/// eos__requirement: str
/// eos__sell_ram: str
/// eos__sender: str
/// eos__sign_transaction: str
/// eos__threshold: str
/// eos__to: str
/// eos__transfer: str
/// eos__type: str
/// eos__undelegate: str
/// eos__unlink_auth: str
/// eos__update_auth: str
/// eos__vote_for_producers: str
/// eos__vote_for_proxy: str
/// eos__voter: str
/// ethereum__amount_sent: str
/// ethereum__contract: str
/// ethereum__data_size_template: str
/// ethereum__gas_limit: str
/// ethereum__gas_price: str
/// ethereum__max_gas_price: str
/// ethereum__name_and_version: str
/// ethereum__new_contract: str
/// ethereum__no_message_field: str
/// ethereum__priority_fee: str
/// ethereum__show_full_array: str
/// ethereum__show_full_domain: str
/// ethereum__show_full_message: str
/// ethereum__show_full_struct: str
/// ethereum__sign_eip712: str
/// ethereum__title_confirm_data: str
/// ethereum__title_confirm_domain: str
/// ethereum__title_confirm_message: str
/// ethereum__title_confirm_struct: str
/// ethereum__title_confirm_typed_data: str
/// ethereum__title_signing_address: str
/// ethereum__units_template: str
/// ethereum__unknown_token: str
/// ethereum__valid_signature: str
/// experimental_mode__enable: str
/// experimental_mode__only_for_dev: str
/// experimental_mode__title: str
/// fido__already_registered: str
/// fido__device_already_registered: str
/// fido__device_already_registered_with_template: str
/// fido__device_not_registered: str
/// fido__does_not_belong: str
/// fido__erase_credentials: str
/// fido__export_credentials: str
/// fido__not_registered: str
/// fido__not_registered_with_template: str
/// fido__please_enable_pin_protection: str
/// fido__title_authenticate: str
/// fido__title_import_credential: str
/// fido__title_list_credentials: str
/// fido__title_register: str
/// fido__title_remove_credential: str
/// fido__title_reset: str
/// fido__title_u2f_auth: str
/// fido__title_u2f_register: str
/// fido__title_verify_user: str
/// fido__unable_to_verify_user: str
/// fido__wanna_erase_credentials: str
/// firmware_update__title: str
/// firmware_update__title_fingerprint: str
/// homescreen__click_to_connect: str
/// homescreen__click_to_unlock: str
/// homescreen__title_backup_failed: str
/// homescreen__title_backup_needed: str
/// homescreen__title_coinjoin_authorized: str
/// homescreen__title_experimental_mode: str
/// homescreen__title_hold_to_lock: str
/// homescreen__title_no_usb_connection: str
/// homescreen__title_pin_not_set: str
/// homescreen__title_seedless: str
/// homescreen__title_set: str
/// inputs__back: str
/// inputs__cancel: str
/// inputs__delete: str
/// inputs__enter: str
/// inputs__return: str
/// inputs__show: str
/// inputs__space: str
/// joint__title: str
/// joint__to_the_total_amount: str
/// joint__you_are_contributing: str
/// lockscreen__tap_to_connect: str
/// lockscreen__tap_to_unlock: str
/// lockscreen__title_locked: str
/// lockscreen__title_not_connected: str
/// misc__decrypt_value: str
/// misc__encrypt_value: str
/// misc__title_suite_labeling: str
/// modify_amount__decrease_amount: str
/// modify_amount__increase_amount: str
/// modify_amount__new_amount: str
/// modify_amount__title: str
/// modify_fee__decrease_fee: str
/// modify_fee__fee_rate: str
/// modify_fee__increase_fee: str
/// modify_fee__new_transaction_fee: str
/// modify_fee__no_change: str
/// modify_fee__title: str
/// modify_fee__transaction_fee: str
/// monero__confirm_export: str
/// monero__confirm_ki_sync: str
/// monero__confirm_refresh: str
/// monero__confirm_unlock_time: str
/// monero__hashing_inputs: str
/// monero__payment_id: str
/// monero__postprocessing: str
/// monero__processing: str
/// monero__processing_inputs: str
/// monero__processing_outputs: str
/// monero__signing: str
/// monero__signing_inputs: str
/// monero__unlock_time_set_template: str
/// monero__wanna_export_tx_der: str
/// monero__wanna_export_tx_key: str
/// monero__wanna_export_watchkey: str
/// monero__wanna_start_refresh: str
/// monero__wanna_sync_key_images: str
/// nem__absolute: str
/// nem__activate: str
/// nem__add: str
/// nem__confirm_action: str
/// nem__confirm_address: str
/// nem__confirm_creation_fee: str
/// nem__confirm_mosaic: str
/// nem__confirm_multisig_fee: str
/// nem__confirm_namespace: str
/// nem__confirm_payload: str
/// nem__confirm_properties: str
/// nem__confirm_rental_fee: str
/// nem__confirm_transfer_of: str
/// nem__convert_account_to_multisig: str
/// nem__cosign_transaction_for: str
/// nem__cosignatory: str
/// nem__create_mosaic: str
/// nem__create_namespace: str
/// nem__deactivate: str
/// nem__decrease: str
/// nem__description: str
/// nem__divisibility_and_levy_cannot_be_shown: str
/// nem__encrypted: str
/// nem__final_confirm: str
/// nem__immutable: str
/// nem__increase: str
/// nem__initial_supply: str
/// nem__initiate_transaction_for: str
/// nem__levy_divisibility: str
/// nem__levy_fee: str
/// nem__levy_fee_of: str
/// nem__levy_mosaic: str
/// nem__levy_namespace: str
/// nem__levy_recipient: str
/// nem__levy_type: str
/// nem__modify_supply_for: str
/// nem__modify_the_number_of_cosignatories_by: str
/// nem__mutable: str
/// nem__of: str
/// nem__percentile: str
/// nem__raw_units_template: str
/// nem__remote_harvesting: str
/// nem__remove: str
/// nem__set_minimum_cosignatories_to: str
/// nem__sign_tx_fee_template: str
/// nem__supply_change: str
/// nem__supply_units_template: str
/// nem__transferable: str
/// nem__under_namespace: str
/// nem__unencrypted: str
/// nem__unknown_mosaic: str
/// passphrase__access_hidden_wallet: str
/// passphrase__always_on_device: str
/// passphrase__from_host_not_shown: str
/// passphrase__hidden_wallet: str
/// passphrase__hide: str
/// passphrase__next_screen_will_show_passphrase: str
/// passphrase__please_enter: str
/// passphrase__revoke_on_device: str
/// passphrase__title_confirm: str
/// passphrase__title_enter: str
/// passphrase__title_hide: str
/// passphrase__title_settings: str
/// passphrase__title_source: str
/// passphrase__turn_off: str
/// passphrase__turn_on: str
/// pin__change: str
/// pin__changed: str
/// pin__cursor_will_change: str
/// pin__diff_from_wipe_code: str
/// pin__disabled: str
/// pin__enabled: str
/// pin__enter: str
/// pin__enter_new: str
/// pin__entered_not_valid: str
/// pin__info: str
/// pin__invalid_pin: str
/// pin__last_attempt: str
/// pin__mismatch: str
/// pin__pin_mismatch: str
/// pin__please_check_again: str
/// pin__reenter_new: str
/// pin__reenter_to_confirm: str
/// pin__should_be_long: str
/// pin__title_check_pin: str
/// pin__title_settings: str
/// pin__title_wrong_pin: str
/// pin__tries_left: str
/// pin__turn_off: str
/// pin__turn_on: str
/// pin__wrong_pin: str
/// plurals__contains_x_keys: str
/// plurals__lock_after_x_hours: str
/// plurals__lock_after_x_milliseconds: str
/// plurals__lock_after_x_minutes: str
/// plurals__lock_after_x_seconds: str
/// plurals__sign_x_actions: str
/// plurals__transaction_of_x_operations: str
/// plurals__x_groups_needed: str
/// plurals__x_shares_needed: str
/// progress__authenticity_check: str
/// progress__done: str
/// progress__loading_transaction: str
/// progress__one_second_left: str
/// progress__please_wait: str
/// progress__processing: str
/// progress__refreshing: str
/// progress__signing_transaction: str
/// progress__syncing: str
/// progress__x_seconds_left_template: str
/// reboot_to_bootloader__restart: str
/// reboot_to_bootloader__title: str
/// reboot_to_bootloader__version_by_template: str
/// recovery__cancel_dry_run: str
/// recovery__check_dry_run: str
/// recovery__cursor_will_change: str
/// recovery__dry_run_bip39_valid_match: str
/// recovery__dry_run_bip39_valid_mismatch: str
/// recovery__dry_run_slip39_valid_match: str
/// recovery__dry_run_slip39_valid_mismatch: str
/// recovery__enter_any_share: str
/// recovery__enter_backup: str
/// recovery__enter_different_share: str
/// recovery__enter_share_from_diff_group: str
/// recovery__group_num_template: str
/// recovery__group_threshold_reached: str
/// recovery__invalid_seed_entered: str
/// recovery__invalid_share_entered: str
/// recovery__more_shares_needed: str
/// recovery__num_of_words: str
/// recovery__only_first_n_letters: str
/// recovery__progress_will_be_lost: str
/// recovery__select_num_of_words: str
/// recovery__share_already_entered: str
/// recovery__share_from_another_shamir: str
/// recovery__share_num_template: str
/// recovery__title: str
/// recovery__title_cancel_dry_run: str
/// recovery__title_cancel_recovery: str
/// recovery__title_dry_run: str
/// recovery__title_recover: str
/// recovery__title_remaining_shares: str
/// recovery__type_word_x_of_y_template: str
/// recovery__wallet_recovered: str
/// recovery__wanna_cancel_dry_run: str
/// recovery__wanna_cancel_recovery: str
/// recovery__word_count_template: str
/// recovery__word_x_of_y_template: str
/// recovery__x_more_items_starting_template_plural: str
/// recovery__x_more_shares_needed_template_plural: str
/// recovery__x_of_y_entered_template: str
/// recovery__you_have_entered: str
/// reset__advanced_group_threshold_info: str
/// reset__all_x_of_y_template: str
/// reset__any_x_of_y_template: str
/// reset__button_create: str
/// reset__button_recover: str
/// reset__by_continuing: str
/// reset__check_backup_title: str
/// reset__check_group_share_title_template: str
/// reset__check_seed_title: str
/// reset__check_share_title_template: str
/// reset__continue_with_next_share: str
/// reset__continue_with_share_template: str
/// reset__finished_verifying_group_template: str
/// reset__finished_verifying_seed: str
/// reset__finished_verifying_shares: str
/// reset__group_description: str
/// reset__group_info: str
/// reset__group_share_checked_successfully_template: str
/// reset__group_share_title_template: str
/// reset__more_info_at: str
/// reset__need_all_share_template: str
/// reset__need_any_share_template: str
/// reset__needed_to_form_a_group: str
/// reset__needed_to_recover_your_wallet: str
/// reset__never_make_digital_copy: str
/// reset__num_of_share_holders_template: str
/// reset__num_of_shares_advanced_info_template: str
/// reset__num_of_shares_basic_info: str
/// reset__num_shares_for_group_template: str
/// reset__number_of_shares_info: str
/// reset__one_share: str
/// reset__only_one_share_will_be_created: str
/// reset__recovery_seed_title: str
/// reset__recovery_share_title_template: str
/// reset__required_number_of_groups: str
/// reset__select_correct_word: str
/// reset__select_word_template: str
/// reset__select_word_x_of_y_template: str
/// reset__set_it_to_count_template: str
/// reset__share_checked_successfully_template: str
/// reset__share_words_title: str
/// reset__slip39_checklist_num_groups: str
/// reset__slip39_checklist_num_shares: str
/// reset__slip39_checklist_set_num_groups: str
/// reset__slip39_checklist_set_num_shares: str
/// reset__slip39_checklist_set_sizes: str
/// reset__slip39_checklist_set_sizes_longer: str
/// reset__slip39_checklist_set_threshold: str
/// reset__slip39_checklist_title: str
/// reset__slip39_checklist_write_down: str
/// reset__slip39_checklist_write_down_recovery: str
/// reset__the_threshold_sets_the_number_of_shares: str
/// reset__threshold_info: str
/// reset__title_backup_is_done: str
/// reset__title_create_wallet: str
/// reset__title_create_wallet_shamir: str
/// reset__title_group_threshold: str
/// reset__title_number_of_groups: str
/// reset__title_number_of_shares: str
/// reset__title_set_group_threshold: str
/// reset__title_set_number_of_groups: str
/// reset__title_set_number_of_shares: str
/// reset__title_set_threshold: str
/// reset__to_form_group_template: str
/// reset__tos_link: str
/// reset__total_number_of_shares_in_group_template: str
/// reset__use_your_backup: str
/// reset__write_down_words_template: str
/// reset__wrong_word_selected: str
/// reset__you_need_one_share: str
/// reset__your_backup_is_done: str
/// ripple__confirm_tag: str
/// ripple__destination_tag_template: str
/// rotation__change_template: str
/// rotation__east: str
/// rotation__north: str
/// rotation__south: str
/// rotation__title_change: str
/// rotation__west: str
/// safety_checks__approve_unsafe_always: str
/// safety_checks__approve_unsafe_temporary: str
/// safety_checks__enforce_strict: str
/// safety_checks__title: str
/// safety_checks__title_safety_override: str
/// sd_card__all_data_will_be_lost: str
/// sd_card__card_required: str
/// sd_card__disable: str
/// sd_card__disabled: str
/// sd_card__enable: str
/// sd_card__enabled: str
/// sd_card__error: str
/// sd_card__format_card: str
/// sd_card__insert_correct_card: str
/// sd_card__please_insert: str
/// sd_card__please_unplug_and_insert: str
/// sd_card__problem_accessing: str
/// sd_card__refresh: str
/// sd_card__refreshed: str
/// sd_card__restart: str
/// sd_card__title: str
/// sd_card__title_problem: str
/// sd_card__unknown_filesystem: str
/// sd_card__unplug_and_insert_correct: str
/// sd_card__use_different_card: str
/// sd_card__wanna_format: str
/// sd_card__wrong_sd_card: str
/// send__address_path: str
/// send__confirm_sending: str
/// send__from_multiple_accounts: str
/// send__including_fee: str
/// send__maximum_fee: str
/// send__receiving_to_multisig: str
/// send__title_confirm_sending: str
/// send__title_joint_transaction: str
/// send__title_receiving_to: str
/// send__title_sending: str
/// send__title_sending_amount: str
/// send__title_sending_to: str
/// send__to_the_total_amount: str
/// send__total_amount: str
/// send__transaction_id: str
/// send__you_are_contributing: str
/// share_words__words_in_order: str
/// share_words__wrote_down_all: str
/// sign_message__bytes_template: str
/// sign_message__confirm_address: str
/// sign_message__confirm_message: str
/// sign_message__message_size: str
/// sign_message__verify_address: str
/// solana__account_index: str
/// solana__associated_token_account: str
/// solana__confirm_multisig: str
/// solana__expected_fee: str
/// solana__instruction_accounts_template: str
/// solana__instruction_data: str
/// solana__instruction_is_multisig: str
/// solana__is_provided_via_lookup_table_template: str
/// solana__lookup_table_address: str
/// solana__multiple_signers: str
/// solana__token_address: str
/// solana__transaction_contains_unknown_instructions: str
/// solana__transaction_requires_x_signers_template: str
/// stellar__account_merge: str
/// stellar__account_thresholds: str
/// stellar__add_signer: str
/// stellar__add_trust: str
/// stellar__all_will_be_sent_to: str
/// stellar__allow_trust: str
/// stellar__asset: str
/// stellar__balance_id: str
/// stellar__bump_sequence: str
/// stellar__buying: str
/// stellar__claim_claimable_balance: str
/// stellar__clear_data: str
/// stellar__clear_flags: str
/// stellar__confirm_issuer: str
/// stellar__confirm_memo: str
/// stellar__confirm_network: str
/// stellar__confirm_operation: str
/// stellar__confirm_stellar: str
/// stellar__confirm_timebounds: str
/// stellar__create_account: str
/// stellar__debited_amount: str
/// stellar__delete: str
/// stellar__delete_passive_offer: str
/// stellar__delete_trust: str
/// stellar__destination: str
/// stellar__exchanges_require_memo: str
/// stellar__final_confirm: str
/// stellar__hash: str
/// stellar__high: str
/// stellar__home_domain: str
/// stellar__inflation: str
/// stellar__initial_balance: str
/// stellar__initialize_signing_with: str
/// stellar__issuer_template: str
/// stellar__key: str
/// stellar__limit: str
/// stellar__low: str
/// stellar__master_weight: str
/// stellar__medium: str
/// stellar__new_offer: str
/// stellar__new_passive_offer: str
/// stellar__no_memo_set: str
/// stellar__no_restriction: str
/// stellar__on_network_template: str
/// stellar__path_pay: str
/// stellar__path_pay_at_least: str
/// stellar__pay: str
/// stellar__pay_at_most: str
/// stellar__preauth_transaction: str
/// stellar__price_per_template: str
/// stellar__private_network: str
/// stellar__remove_signer: str
/// stellar__revoke_trust: str
/// stellar__selling: str
/// stellar__set_data: str
/// stellar__set_flags: str
/// stellar__set_sequence_to_template: str
/// stellar__sign_tx_count_template: str
/// stellar__sign_tx_fee_template: str
/// stellar__source_account: str
/// stellar__testnet_network: str
/// stellar__trusted_account: str
/// stellar__update: str
/// stellar__valid_from: str
/// stellar__valid_to: str
/// stellar__value_sha256: str
/// stellar__wanna_clean_value_key_template: str
/// stellar__your_account: str
/// tezos__baker_address: str
/// tezos__balance: str
/// tezos__ballot: str
/// tezos__confirm_delegation: str
/// tezos__confirm_origination: str
/// tezos__delegator: str
/// tezos__proposal: str
/// tezos__register_delegate: str
/// tezos__remove_delegation: str
/// tezos__submit_ballot: str
/// tezos__submit_proposal: str
/// tezos__submit_proposals: str
/// tutorial__middle_click: str
/// tutorial__press_and_hold: str
/// tutorial__ready_to_use: str
/// tutorial__scroll_down: str
/// tutorial__sure_you_want_skip: str
/// tutorial__title_hello: str
/// tutorial__title_screen_scroll: str
/// tutorial__title_skip: str
/// tutorial__title_tutorial_complete: str
/// tutorial__use_trezor: str
/// tutorial__welcome_press_right: str
/// u2f__get: str
/// u2f__set_template: str
/// u2f__title_get: str
/// u2f__title_set: str
/// wipe__info: str
/// wipe__title: str
/// wipe__want_to_wipe: str
/// wipe_code__change: str
/// wipe_code__changed: str
/// wipe_code__diff_from_pin: str
/// wipe_code__disabled: str
/// wipe_code__enabled: str
/// wipe_code__enter_new: str
/// wipe_code__info: str
/// wipe_code__invalid: str
/// wipe_code__mismatch: str
/// wipe_code__reenter: str
/// wipe_code__reenter_to_confirm: str
/// wipe_code__title_check: str
/// wipe_code__title_invalid: str
/// wipe_code__title_settings: str
/// wipe_code__turn_off: str
/// wipe_code__turn_on: str
/// wipe_code__wipe_code_mismatch: str
/// word_count__title: str
/// words__account: str
/// words__account_colon: str
/// words__address: str
/// words__amount: str
/// words__are_you_sure: str
/// words__array_of: str
/// words__blockhash: str
/// words__buying: str
/// words__confirm: str
/// words__confirm_fee: str
/// words__contains: str
/// words__continue_anyway: str
/// words__continue_with: str
/// words__error: str
/// words__fee: str
/// words__from: str
/// words__keep_it_safe: str
/// words__know_what_your_doing: str
/// words__my_trezor: str
/// words__no: str
/// words__outputs: str
/// words__please_check_again: str
/// words__please_try_again: str
/// words__really_wanna: str
/// words__recipient: str
/// words__sign: str
/// words__signer: str
/// words__title_check: str
/// words__title_group: str
/// words__title_information: str
/// words__title_remember: str
/// words__title_share: str
/// words__title_shares: str
/// words__title_success: str
/// words__title_summary: str
/// words__title_threshold: str
/// words__unknown: str
/// words__warning: str
/// words__writable: str
/// words__yes: str
Qstr::MP_QSTR_TR => TR_OBJ.as_obj(),
};

@ -0,0 +1,35 @@
//! generated from export.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
<%
import json
from pathlib import Path
THIS = Path(local.filename).resolve()
SRCDIR = THIS.parent
en_file = SRCDIR / "en.json"
en_data = json.loads(en_file.read_text())["translations"]
en_keys = en_data.keys()
%>\
use super::micropython::{language_name_obj, TR_OBJ};
use crate::micropython::{map::Map, module::Module, qstr::Qstr};
#[no_mangle]
#[rustfmt::skip]
pub static mp_module_trezortranslate: Module = obj_module! {
// TODO: add function to get all the translations keys in order
// - so that client can validate it is sending correct keys in correct order
/// def language_name() -> str:
/// """Get the name of the current language."""
Qstr::MP_QSTR_language_name => obj_fn_0!(language_name_obj).as_obj(),
/// class TR:
/// """Translation object with attributes."""
% for name in sorted(en_keys):
/// ${name}: str
% endfor
Qstr::MP_QSTR_TR => TR_OBJ.as_obj(),
};

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "060707000718c7b3cffcc0"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0607070007cde7b3c33780"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0607070007cdefb3cf3f80"
},
{
"char": "É",
"utf8": "C389",
"data": "060707000718cff0f30fc0"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0607070007cdeff0f30fc0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0307050107786db0"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0607070007cdecfbff7cc0"
},
{
"char": "Ó",
"utf8": "C393",
"data": "060707000718c7b3cf3780"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0607070007cdefb3cfecc0"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0607070007cde7b0783f80"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0607070007cdefcc30c300"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "060707000718ccf3cf3780"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "06070700077b3780cf3780"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "060707000718ccf378c300"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0607070007cdefc6318fc0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "060707000718c7837f37c0"
},
{
"char": "č",
"utf8": "C48D",
"data": "0607070007cde7b3c33780"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0b070d00070c618df3660cc1981f00"
},
{
"char": "é",
"utf8": "C3A9",
"data": "060707000718c7b3ff0780"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0607070007cde7b3ff0780"
},
{
"char": "í",
"utf8": "C3AD",
"data": "0307050107786db0"
},
{
"char": "ň",
"utf8": "C588",
"data": "0607070007cdefb3cf3cc0"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "060707000718c7b3cf3780"
},
{
"char": "ř",
"utf8": "C599",
"data": "0607070007cdecf7e30c00"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0607070007cde7b0783f80"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0a070b000700d83f998060180380"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "060707000718ccf3cf3780"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "06070700077b3780cf3780"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "060807000718ccf3cdf0de00"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0607070007cdefc6318fc0"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0607070007cc07b3cffcc0"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0607070007cc07b3cf3780"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0607070007cc0cf3cf3780"
},
{
"char": "ß",
"utf8": "C39F",
"data": "06070700077b3cf6cf3d80"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "0607070007cc07837f37c0"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0607070007cc07b3cf3780"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0607070007cc0cf3cf3780"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "060707000718c7b3cffcc0"
},
{
"char": "É",
"utf8": "C389",
"data": "060707000718cff0f30fc0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0307050107786db0"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "070707000777bb376fdbb300"
},
{
"char": "Ó",
"utf8": "C393",
"data": "060707000718c7b3cf3780"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "060707000718ccf3cf3780"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0607070007cc0cf3cf3780"
},
{
"char": "á",
"utf8": "C3A1",
"data": "060707000718c7837f37c0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "060707000718c7b3ff0780"
},
{
"char": "í",
"utf8": "C3AD",
"data": "0307050107786db0"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "070707000777bbe66cd9b300"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "060707000718c7b3cf3780"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "060707000718ccf3cf3780"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0607070007cc0cf3cf3780"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "0607070006300318c33780"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "060707000760c7b3cffcc0"
},
{
"char": "Â",
"utf8": "C382",
"data": "0707070007fd0de66cdfb300"
},
{
"char": "Æ",
"utf8": "C386",
"data": "0a070b00077ff30cc33cfc330cfc"
},
{
"char": "Ç",
"utf8": "C387",
"data": "06080700077b3c30cde19c00"
},
{
"char": "È",
"utf8": "C388",
"data": "060707000760cff0f30fc0"
},
{
"char": "É",
"utf8": "C389",
"data": "060707000718cff0f30fc0"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "06070700077b3ff0f30fc0"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0607070007cc0ff0f30fc0"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0507050007f4d8c63180"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "05070500079818c63180"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0707070007fd0de66cd99e00"
},
{
"char": "Ù",
"utf8": "C399",
"data": "060707000760ccf3cf3780"
},
{
"char": "Û",
"utf8": "C39B",
"data": "06070700077b3033cf3780"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0607070007cc0cf3cf3780"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0607070007cc0cf378c300"
},
{
"char": "Œ",
"utf8": "C592",
"data": "0a070b00077ff30cc33ccc3307fc"
},
{
"char": "à",
"utf8": "C3A0",
"data": "060707000760c7837f37c0"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0707070007fd0de067d99f00"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "0a050b00057f8337ff307f80"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "06080700077b3c3378c19c00"
},
{
"char": "è",
"utf8": "C3A8",
"data": "060707000760c7b3ff0780"
},
{
"char": "é",
"utf8": "C3A9",
"data": "060707000718c7b3ff0780"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0707070007fd0de66fd81e00"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0607070007cc07b3ff0780"
},
{
"char": "î",
"utf8": "C3AE",
"data": "0507050007f4d8c63180"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "05070500079818c63180"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0707070007fd0de66cd99e00"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "060707000760ccf3cf3780"
},
{
"char": "û",
"utf8": "C3BB",
"data": "06070700077b3033cf3780"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0607070007cc0cf3cf3780"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0608070007cc0cf3cdf0de00"
},
{
"char": "œ",
"utf8": "C593",
"data": "0a050b00057fb33cff307f80"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0507060007111d18fe20"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0507060007511d1845c0"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0507060007513d18c7c0"
},
{
"char": "É",
"utf8": "C389",
"data": "0507060007113f0e43e0"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0507060007513f0e43e0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "020704010762a8"
},
{
"char": "Ň",
"utf8": "C587",
"data": "050706000751239ace20"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0507060007111d18c5c0"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0507060007513d18fa20"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0507060007511d0707c0"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0507060007513e421080"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0507060007112318c5c0"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0507060007228918c5c0"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "05070600071123151080"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0507060007513e2223e0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0507060007111c17c5e0"
},
{
"char": "č",
"utf8": "C48D",
"data": "0507060007511d1845c0"
},
{
"char": "ď",
"utf8": "C48F",
"data": "09070b000708845e51088441e0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507060007111d1fc1c0"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0507060007511d1fc1c0"
},
{
"char": "í",
"utf8": "C3AD",
"data": "020704010762a8"
},
{
"char": "ň",
"utf8": "C588",
"data": "0507060007513d18c620"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0507060007111d18c5c0"
},
{
"char": "ř",
"utf8": "C599",
"data": "050706000751274c4200"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0507060007511d0707c0"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "08070a00070141f24040403000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0507060007112318c5c0"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0507060007228918c5c0"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0508060007112318bc2e00"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0507060007513e2223e0"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0507060007501d18fe20"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0507060007501d18c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507060007502318c5c0"
},
{
"char": "ß",
"utf8": "C39F",
"data": "0507060007746368c6c0"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "0507060007501c17c5e0"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0507060007501d18c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507060007502318c5c0"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0507060007111d18fe20"
},
{
"char": "É",
"utf8": "C389",
"data": "0507060007113f0e43e0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "020704010762a8"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "06070600076668b2aa6880"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0507060007111d18c5c0"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0507060007112318c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507060007502318c5c0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0507060007111c17c5e0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507060007111d1fc1c0"
},
{
"char": "í",
"utf8": "C3AD",
"data": "020704010762a8"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "0607060007666f228a2880"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0507060007111d18c5c0"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0507060007112318c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507060007502318c5c0"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "050706000620088845c0"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0507060007411d18fe20"
},
{
"char": "Â",
"utf8": "C382",
"data": "0507060007229d18fe20"
},
{
"char": "Æ",
"utf8": "C386",
"data": "09070a00077fc42211cf84423e"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0508060007746108b84c00"
},
{
"char": "È",
"utf8": "C388",
"data": "0507060007413f0e43e0"
},
{
"char": "É",
"utf8": "C389",
"data": "0507060007113f0e43e0"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "050706000722bf0e43e0"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0507060007503f0e43e0"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0307040007542490"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "0307040007a12490"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0507060007229d18c5c0"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0507060007412318c5c0"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0507060007228118c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507060007502318c5c0"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "05070600075023151080"
},
{
"char": "Œ",
"utf8": "C592",
"data": "09070a00077fc42211c88441fe"
},
{
"char": "à",
"utf8": "C3A0",
"data": "0507060007411c17c5e0"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0507060007229c17c5e0"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "09050a000577045ff10770"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0508060007746117104c00"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0507060007411d1fc1c0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507060007111d1fc1c0"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0507060007229d1fc1c0"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0507060007501d1fc1c0"
},
{
"char": "î",
"utf8": "C3AE",
"data": "0307040007542490"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "0307040007a12490"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0507060007229d18c5c0"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0507060007412318c5c0"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0507060007228118c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507060007502318c5c0"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0508060007502318bc2e00"
},
{
"char": "œ",
"utf8": "C593",
"data": "09050a0005774463f10770"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0507070007111d18fe20"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0507070007511d1845c0"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0507070007513d18c7c0"
},
{
"char": "É",
"utf8": "C389",
"data": "0507070007113f0e43e0"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0507070007513f0e43e0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0507070007113e4213e0"
},
{
"char": "Ň",
"utf8": "C587",
"data": "050707000751239ace20"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0507070007111d18c5c0"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0507070007513d18fa20"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0507070007511d0707c0"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0507070007513e421080"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0507070007112318c5c0"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0507070007228918c5c0"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "05070700071123151080"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0507070007513e2223e0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0507070007111c17c5e0"
},
{
"char": "č",
"utf8": "C48D",
"data": "0507070007511d1845c0"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0607070007249e88208e00"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507070007111d1fc1c0"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0507070007511d1fc1c0"
},
{
"char": "í",
"utf8": "C3AD",
"data": "050707000711384213e0"
},
{
"char": "ň",
"utf8": "C588",
"data": "0507070007513d18c620"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0507070007111d18c5c0"
},
{
"char": "ř",
"utf8": "C599",
"data": "050707000751274c4200"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0507070007511d0707c0"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0607070007061ea0820600"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0507070007112318c5c0"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0507070007228918c5c0"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0508070007112318bc2e00"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0507070007513e2223e0"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0507070007501d18fe20"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0507070007501d18c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507070007502318c5c0"
},
{
"char": "ß",
"utf8": "C39F",
"data": "0507070007746368c6c0"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "0507070007501c17c5e0"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0507070007501d18c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507070007502318c5c0"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0507070007111d18fe20"
},
{
"char": "É",
"utf8": "C389",
"data": "0507070007113f0e43e0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0507070007113e4213e0"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "06070700076668b2aa6880"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0507070007111d18c5c0"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0507070007112318c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507070007502318c5c0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0507070007111c17c5e0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507070007111d1fc1c0"
},
{
"char": "í",
"utf8": "C3AD",
"data": "050707000711384213e0"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "0607070007666f228a2880"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0507070007111d18c5c0"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0507070007112318c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507070007502318c5c0"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "050707000620088845c0"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0507070007411d18fe20"
},
{
"char": "Â",
"utf8": "C382",
"data": "0507070007229d18fe20"
},
{
"char": "Æ",
"utf8": "C386",
"data": "0607070007fc820ee083c0"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0508070007746108b84c00"
},
{
"char": "È",
"utf8": "C388",
"data": "0507070007413f0e43e0"
},
{
"char": "É",
"utf8": "C389",
"data": "0507070007113f0e43e0"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "050707000722bf0e43e0"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0507070007503f0e43e0"
},
{
"char": "Î",
"utf8": "C38E",
"data": "050707000722be4213e0"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "0507070007503e4213e0"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0507070007229d18c5c0"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0507070007412318c5c0"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0507070007228118c5c0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0507070007502318c5c0"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "05070700075023151080"
},
{
"char": "Œ",
"utf8": "C592",
"data": "0607070007fc820e208fc0"
},
{
"char": "à",
"utf8": "C3A0",
"data": "0507070007411c17c5e0"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0507070007229c17c5e0"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "0605070005d89fc8d8"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0508070007746117104c00"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0507070007411d1fc1c0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0507070007111d1fc1c0"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0507070007229d1fc1c0"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0507070007501d1fc1c0"
},
{
"char": "î",
"utf8": "C3AE",
"data": "050707000722b84213e0"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "050707000750384213e0"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0507070007229d18c5c0"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0507070007412318c5c0"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0507070007228118c5c0"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0507070007502318c5c0"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0508070007502318bc2e00"
},
{
"char": "œ",
"utf8": "C593",
"data": "0605070005d893c8d8"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0e120d00120000002efd1000000000cfe20000000003be3000000000000000000000000dff40000000003fffa0000000009ffff100000000efeff600000005ff6ffc0000000bff1aff2000001ffc05ff8000007ff600ffe00000dff100aff40003fffffffffb0009ffffffffff100fff66666bff705ffb000004ffd0cff5000000eff3"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0d120d0012000bfb05ff3000000afcfe300000000afe30000000000000000000028dffc6000004fffffffc0001fffb78dffa009ff80000eff10eff100009ff50ffd0000000002ffd0000000002ffd0000000001ffd0000000000eff000008ff509ff70000eff202fffa77dffb0005fffffffc1000029effc7000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0c120d01124ff31df9000004ffdf800000004ff8000000000000000000bffffeb50000bfffffffc100bff867dffc00bff3000bff60bff30002ffc0bff30000eff0bff30000dff1bff30000dff1bff30000fff0bff30003ffc0bff3000cff60bff757dffc00bfffffffc100bffffeb50000"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000009ff6000006ff70000009d90000000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0a120b011204ff40cfa0004ffdf9000003ff90000000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Í",
"utf8": "C38D",
"data": "061206011200dfe20aff302be4000000008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff600"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0c120e0112005ff31df8000005fedf800000005ff70000000000000000bff800001ffdbfff20001ffdbfffb0001ffdbffff5001ffdbffffe101ffdbff8ff901ffdbff3bff31ffdbff32ffd1ffdbff307ff8ffdbff300dffffdbff3004ffffdbff3000afffdbff30001effdbff300006ffd"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0d120e00120000001dfe200000000bff3000000002be40000000000000000000017dfec6000003effffffc1000effc78dffb008ffa0000dff40dff200005ffa0fff000001ffd2ffd000000ffe2ffd000000ffe0fff000002ffd0dff200006ffa08ffa0000dff501effc77dffc0003effffffc1000017dfec6000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0c120d011209fd14ff4000009fdff400000009ff400000000000000000bfffffec6000bffffffffb00bff8669fff60bff30006ffb0bff30002ffc0bff30004ffb0bff3003dff60bffffffffb00bfffffff9000bff868ffc000bff300cff500bff3003ffe00bff3000aff80bff30001fff2"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0c120c0012002ef60bfb000002efcfb00000002efb00000000000000000006cefea30001dfffffff6009ffd659fff20dff20008ff70cff6000133105fffc610000007fffffb30000029effff600000004bfff2277400009ff72ffd00007ff80cffc657fff501dfffffffa00006befeb500"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0c120c0012005ff31df9000005ffdf800000004ff800000000000000009fffffffffff9fffffffffff36669ffc666500005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa000000005ffa0000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0c120d0112000004ffb00000001efc000000006cd10000000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0c130d01130000bec100000008a09900000008a09a00000001bec10000000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0d120c00120000009ff6000000006ff70000000009d9000000000000000000bff700002fff13ffe00009ff800aff6001fff1002ffd008ff80000aff50efe000002ffc7ff70000009ffffe00000001ffff6000000008ffd0000000005ffa0000000005ffa0000000005ffa0000000005ffa0000000005ffa00000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0c120c0012004ff31df9000004ffdf800000004ff800000000000000004ffffffffff64ffffffffff51666666affc00000001eff20000000bff600000007ffb00000003ffe10000000dff400000009ff900000004ffd00000001eff30000000bffb55555534ffffffffff84ffffffffff8"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0b0f0b000f000007ff90000003ffa00000008db000000000000000004befd810007ffffffd000ffe329ff600000003ff90006ceffffa009ffebbffa02ffc003ffa04ff8003ffa03ffd34dffa00cfffffffb0008efc3efe00"
},
{
"char": "č",
"utf8": "C48D",
"data": "0a0f0a000f04ff40cfa0004ffdf9000003ff900000000000000019efe91002efffffe10bff95aff91ffc000efd4ff80001225ff70000004ff80000001ffc000bdb0bff959ff902efffffe10019efe910"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0e0f0d000f0000000aff25fb0000000aff26fa0000000aff2bf40000000aff28b0004cfe8aff200004ffffffff20000dffa58fff20002ffd000bff20004ff9000aff20005ff7000aff20004ff8000aff20001ffd000bff20000cffa58fff200003ffffffff2000003cfe97ff2000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0b0f0b000f000008ff80000004ff900000008da0000000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0b0f0b000f03ef60bfb00002efcfb0000002efb0000000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "060f05010f02ffd10dfe104be200000000bff200bff200bff200bff200bff200bff200bff200bff200bff200bff200bff200"
},
{
"char": "ň",
"utf8": "C588",
"data": "0a0f0b010f0cfa07fe2000cfcfe200000bfe20000000000000ffb5cfe900ffffffff80fffa57ffe0ffe000cff1ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0b0f0b000f000003ffc0000001efd10000005cd1000000000000000018dfea30001dffffff400affb58ffe01ffd0009ff64ff90004ff95ff70003ffa4ff90004ff91ffd0009ff60bffb58ffe001dffffff400018dfea3000"
},
{
"char": "ř",
"utf8": "C599",
"data": "080f07000f6fe22ef706feef60006ff600000000000efc5ef00efefff00efffdc00eff30000efe00000efe00000efe00000efe00000efe00000efe00000efe0000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0a0f0a000f04ff41df90004ffdf9000004ff80000000000000004befc70007ffffffc00ffd21aff51ffb0026630cffd9500001bffffe6000027bfff33992005ff83ffb108ff609ffffffd0005cffd710"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0911070011000000cf4000000df2000002fd005ff72c4005ff7000005ff70000efffff400efffff40016ff8100005ff7000005ff7000005ff7000005ff7000005ff7000004ffc520001efff600003cfe4000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0a0f0b010f00003ffc000001efd0000005cd10000000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0a100b0110000aec1000007b08a000007b08a000000bec20000000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0b130a000f00000bff40000008ff50000000ae7000000000000000cff3002ffd07ff8007ff701ffc00cff200cff11ffc0006ff65ff70001ffbaff20000bffefc000006ffff6000001ffff1000000bffb00000005ff600000009ff10000047ffb000000dfff2000000bfc40000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0a0f0a000f05ff31df80005fedf8000005ff700000000000002ffffffff52ffffffff404444bffb000003ffe100000dff5000009ff9000004ffd000001eff300000bffb444424ffffffff84ffffffff8"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0e120d001200026100460000000efa02ff60000009f600ce30000000000000000000000dff40000000003fffa0000000009ffff100000000efeff600000005ff6ffc0000000bff1aff2000001ffc05ff8000007ff600ffe00000dff100aff40003fffffffffb0009ffffffffff100fff66666bff705ffb000004ffd0cff5000000eff3"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0d120e00120001620036000000bfc00ff8000007f800bf400000000000000000017dfec6000003effffffc1000effc78dffb008ffa0000dff40dff200005ffa0fff000001ffd2ffd000000ffe2ffd000000ffe0fff000002ffd0dff200006ffa08ffa0000dff501effc77dffc0003effffffc1000017dfec6000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0c120d011200460005400001ff605ff20000ce302ed100000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "ß",
"utf8": "C39F",
"data": "0b0f0d010f007dfec40000bffffff6005ffd57ffe009ff400cff00aff200efe00bff205ff700bff20bff100bff20bff400bff205fff30bff2007fff3bff20005ffbbff20000efebff27648ffcbff2efffff5bff2befeb300"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "0b0f0b000f0055000630004ff408ff0001dd104fb0000000000000004befd810007ffffffd000ffe329ff600000003ff90006ceffffa009ffebbffa02ffc003ffa04ff8003ffa03ffd34dffa00cfffffffb0008efc3efe00"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0b0f0b000f0036000550000ff804ff4000bf401dd10000000000000018dfea30001dffffff400affb58ffe01ffd0009ff64ff90004ff95ff70003ffa4ff90004ff91ffd0009ff60bffb58ffe001dffffff400018dfea3000"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a0f0b010f03600055001ff704ff300ce402ed100000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0e120d00120000002efd1000000000cfe20000000003be3000000000000000000000000dff40000000003fffa0000000009ffff100000000efeff600000005ff6ffc0000000bff1aff2000001ffc05ff8000007ff600ffe00000dff100aff40003fffffffffb0009ffffffffff100fff66666bff705ffb000004ffd0cff5000000eff3"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000009ff6000006ff70000009d90000000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Í",
"utf8": "C38D",
"data": "061206011200dfe20aff302be4000000008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff6008ff600"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "0c120e01120005b800c800003ffffdf700007f42bfa000000000000000bff800001ffdbfff20001ffdbfffb0001ffdbffff5001ffdbffffe101ffdbff8ff901ffdbff3bff31ffdbff32ffd1ffdbff307ff8ffdbff300dffffdbff3004ffffdbff3000afffdbff30001effdbff300006ffd"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0d120e00120000001dfe200000000bff3000000002be40000000000000000000017dfec6000003effffffc1000effc78dffb008ffa0000dff40dff200005ffa0fff000001ffd2ffd000000ffe2ffd000000ffe0fff000002ffd0dff200006ffa08ffa0000dff501effc77dffc0003effffffc1000017dfec6000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0c120d0112000004ffb00000001efc000000006cd10000000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0c120d011200460005400001ff605ff20000ce302ed100000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0b0f0b000f000007ff90000003ffa00000008db000000000000000004befd810007ffffffd000ffe329ff600000003ff90006ceffffa009ffebbffa02ffc003ffa04ff8003ffa03ffd34dffa00cfffffffb0008efc3efe00"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0b0f0b000f000008ff80000004ff900000008da0000000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "060f05010f02ffd10dfe104be200000000bff200bff200bff200bff200bff200bff200bff200bff200bff200bff200bff200"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "0a0f0b010f019a406c200bfffdff100ec06ee5000000000000ffb5cfe900ffffffff80fffa57ffe0ffe000cff1ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2ffd000aff2"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0b0f0b000f000003ffc0000001efd10000005cd1000000000000000018dfea30001dffffff400affb58ffe01ffd0009ff64ff90004ff95ff70003ffa4ff90004ff91ffd0009ff60bffb58ffe001dffffff400018dfea3000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0a0f0b010f00003ffc000001efd0000005cd10000000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a0f0b010f03600055001ff704ff300ce402ed100000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "0a0f0a000b0000cf60000004ffc0000000ce600000000000000000ff70000003ff5000001dff100000cff8000009ffa000001ffd0000004ff80025524ff9008ff61fff66fff208ffffff90006cffc600"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0e120d00120006ff8000000000008ff3000000000009fd0000000000000000000000000dff40000000003fffa0000000009ffff100000000efeff600000005ff6ffc0000000bff1aff2000001ffc05ff8000007ff600ffe00000dff100aff40003fffffffffb0009ffffffffff100fff66666bff705ffb000004ffd0cff5000000eff3"
},
{
"char": "Â",
"utf8": "C382",
"data": "0e120d001200000afe4000000001cfcff600000008db04eb20000000000000000000000dff40000000003fffa0000000009ffff100000000efeff600000005ff6ffc0000000bff1aff2000001ffc05ff8000007ff600ffe00000dff100aff40003fffffffffb0009ffffffffff100fff66666bff705ffb000004ffd0cff5000000eff3"
},
{
"char": "Æ",
"utf8": "C386",
"data": "130e13000e00000009fffffffffa00000002ffffffffffa0000000affffd5555530000003ffaffd000000000000cff2ffd000000000005ff90efe00000000000dff10dffffffd000006ff700cffffffd00000effffffff5555400008fffffffff100000001ffe6666cff100000009ff70000aff64444412fff100009ffffffff3bff8000009ffffffff3"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0d130d000e00028dffc6000004fffffffc0001fffb78dffa009ff80000eff10eff100009ff50ffd0000000002ffd0000000002ffd0000000001ffd0000000000eff000008ff509ff70000eff202fffa77dffb0005fffffffc1000029effc7000000006fd10000000005efd00000000004ff1000000003dfd0000000004ea200000"
},
{
"char": "È",
"utf8": "C388",
"data": "0a120b011201dfe10000002efa00000003ff40000000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000009ff6000006ff70000009d90000000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "0a120b01120004ff9000007ffcfc1003be40bd700000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0a120b0112006400162007ff10bfd003ec007f900000000000bffffffffcbffffffffcbff8666664bff3000000bff3000000bff3000000bfffffffd0bfffffffd0bff7444430bff3000000bff3000000bff7555554bffffffffcbffffffffc"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0812070012008ff5000bfdef806cc12ec400000000008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "081207001216200360bfc00ff87f800bf500000000008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600008ff600"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0d120e0012000008ff500000000bfdef80000006cc12ec400000000000000000017dfec6000003effffffc1000effc78dffb008ffa0000dff40dff200005ffa0fff000001ffd2ffd000000ffe2ffd000000ffe0fff000002ffd0dff200006ffa08ffa0000dff501effc77dffc0003effffffc1000017dfec6000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0c120d0112009ff5000000000bfe1000000000cfa00000000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0c120d01120001cfd20000003efcfe4000009e807ea100000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0c120d011200460005400001ff605ff20000ce302ed100000000000000dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000eff0dff10000fff0aff60004ffd04fff968eff7008fffffffa00004befeb5000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0d120c00120006400162000007ff10bfd000003ec007f90000000000000000bff700002fff13ffe00009ff800aff6001fff1002ffd008ff80000aff50efe000002ffc7ff70000009ffffe00000001ffff6000000008ffd0000000005ffa0000000005ffa0000000005ffa0000000005ffa0000000005ffa00000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "130e13000e00028dffffffffffff4005fffffffffffffff403fff9558ffd66666610aff50003ffb00000000efe00003ffb00000000ffc00003ffb00000001ffc00003ffffffff501ffc00003ffffffff500ffc00003ffd44444100efe00003ffb00000000aff50003ffb000000002fff9547ffd5555551005fffffffffffffff500029dffffffffffff5"
},
{
"char": "à",
"utf8": "C3A0",
"data": "0b0f0b000f00bff200000000dfc000000001ef7000000000000000004befd810007ffffffd000ffe329ff600000003ff90006ceffffa009ffebbffa02ffc003ffa04ff8003ffa03ffd34dffa00cfffffffb0008efc3efe00"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0b0f0b000f0002dfb1000005ffcfd20001ae609d90000000000000004befd810007ffffffd000ffe329ff600000003ff90006ceffffa009ffebbffa02ffc003ffa04ff8003ffa03ffd34dffa00cfffffffb0008efc3efe00"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "110c11000c00000000000000000004aefea26dffc50007fffffffffffff600eff749fffc56eff00011000fff1007ff4006cefffffffffff50bfffddfffeeeeee53ffd100eff00000005ff8000eff50000103ffd229ffff746ca00cffffffcffffffe0008dfeb305cffd920"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0a100a000b0019efe91002efffffe10bff95aff91ffc000efd4ff80001225ff70000004ff80000001ffc000bdb0bff959ff902efffffe10019efe9100000bf900000009ff900000009fd0000006ff90000008e8000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0b0f0b000f00cff200000001dfb000000002ef60000000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0b0f0b000f000008ff80000004ff900000008da0000000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0b0f0b000f0003efb0000005ffcfd20002be50ad800000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0b0f0b000f0054000630005ff309ff0002ed105fb00000000000000007dfea20000cffffff3009ff957ffd00ffc0009ff23fffffffff44fffeeeeee43ffb00000000fff20007100affe65afb001cffffff800007dffb4000"
},
{
"char": "î",
"utf8": "C3AE",
"data": "080f06000f00afe4001cfcff608db04eb20000000000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff200"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "080f06000f26100450efa02ff6af600de30000000000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff20000bff200"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0b0f0b000f0001bfe2000002dfcff500009d906eb10000000000000018dfea30001dffffff400affb58ffe01ffd0009ff64ff90004ff95ff70003ffa4ff90004ff91ffd0009ff60bffb58ffe001dffffff400018dfea3000"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0a0f0b010f09ff50000000afe10000000bfa00000000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0a0f0b010f001cfd200003efcff40009d906ea100000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a0f0b010f03600055001ff704ff300ce402ed100000000000ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2ffd000bff2efe000bff2cff948fff25ffffffff206dfd78ff2"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0b130a000f0063002610008ff00cfb0005fb008f70000000000000cff3002ffd07ff8007ff701ffc00cff200cff11ffc0006ff65ff70001ffbaff20000bffefc000006ffff6000001ffff1000000bffb00000005ff600000009ff10000047ffb000000dfff2000000bfc40000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "120d12000c0000000000000000000007dfeb406dffb40000cffffffcffffff5008ffc57ffffc56ffe00eff1007fff1008ff31ffb0002fffffffff42ffa0001fffeeeeee41ffb0002fff00000000eff0007fff600000008ffc57fffff746a7000cffffffcffffffe00008dffb405cffd920000000000000000000"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0d120d00120000000df3000000000af50000000002d7000000000000000000000007f80000000000dfe0000000004fdf500000000af2fb00000001fb0af10000006f504f7000000df000ed000003fa0009f400009f40003fa0000fffffffff1005fc88888bf600cf2000002fc02fc0000000bf38f600000005f9"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0c120d0112002e805f40000003f8f7000000005f9000000000000000000007dffc600002dfc9aefb000cf60000bf605fa000002fd0af4000000ac0cf1000000000df0000000000df0000000000cf2000000000af40000009b05fb000001fd00df50000af6002efc8aefa000018dffc6000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0b120d011200bd01e9000000dbcb00000002ed10000000000000005ffffeb50005fc88aefb105f800008fb05f800000af45f8000003fa5f8000000fd5f8000000ee5f8000000ee5f8000000fd5f8000003fa5f800000af45f800008fb05fc88aefb105ffffeb5000"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000007fa0000003fc00000008d100000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0a120b011200ae10db00000ccbd0000001de100000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Í",
"utf8": "C38D",
"data": "051205011200cf508f701c900000003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa00"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0c120e01120009e10dc0000000bcad100000000de200000000000000005fd0000004f95ff8000004f95fff300004f95fcfd00004f95f89f80004f95f81ef3004f95f804fd004f95f800af804f95f8001ef24f95f80004fc4f95f80000afcf95f800001eff95f8000004ff95f8000000af9"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0c120e01120000009f8000000005fa000000000ab000000000000000000007dfec500001dfdaaefa000bf70000af804fc000000ef09f40000008f5bf20000005f7df00000004f9df00000004f9bf10000005f79f40000008f54fb000000ef00bf70000af8001dfdaaefb000007dfec6000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0b120c011200bd01e9000000dbcb00000002ed10000000000000005fffffeb3005fc889bff605f800003ff05f800000bf45f8000009f45f800000df25f80002bfa05fffffffa005fc888fd0005f80009f6005f80001fe105f800007f905f800000df25f8000005fb"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0c120c00120009e10db0000000bcad100000001de200000000000000000007dffc700000cfd99dfd1008f900008f900bf200000ff00af60000045003ff92000000003dffd8200000004aeff90000000004df90053000001ff01fd000000df10bf700003fe001dfd99bff400007cffd9200"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0c120c0012000bd01ea0000000dbcc000000001ed100000000000000008ffffffffff748888ff8888400000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe0000000000fe00000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0b120d0112000001ef30000000bf400000003d6000000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0b130d01130000beb000000079087000000790880000000beb100000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb3000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0c120c00120000007fa000000003fc0000000008c100000000000000009f80000009f81ff100001fe107f900009f6000df2002fd00005fa00af400000cf23fc0000003fbbf30000000affa000000002ff1000000000fe0000000000fe0000000000fe0000000000fe0000000000fe00000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0c120c0012000ad11db0000000cbbc000000001ee100000000000000000fffffffffe008888888cfb000000001ef200000000bf6000000007fa000000002fe100000000df4000000009f8000000004fd000000001ef200000000af7000000006fb000000001ffa888888812ffffffffff3"
},
{
"char": "á",
"utf8": "C3A1",
"data": "09100b011000000cf5000008f7000001c9000000000000000000000029efd8002ff97bfb08e30009f30000006f6029dffff63fe8548f6bf20006f6ee00006f6cf3002ef65ffaafef705cfe84fa"
},
{
"char": "č",
"utf8": "C48D",
"data": "0a100a0010007f20bd00000ad9e1000000cf3000000000000000000000000008dfe91000cfc8bfd107f80006f80df00000ca0fc00000001fb00000000fc00000000df000008607f80005f800cfb8afd00008dfe800"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0d0f0d000f00000000fd0ce00000000fd0ed00000000fd2f800000000fd3c1001aefb3fd00000dfc8bffd00008f90006fd0000df10000fd0000fd00000fd0001fc00000fd0000fd00000fd0000df10000fd00007f80006fd00000dfc8bffd000001aefc3dd0000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100b0010000001ef3000000bf40000002d6000000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0a100b0010003f707f300005f8f50000007f7000000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "í",
"utf8": "C3AD",
"data": "051005011001ef20cf403d50000000000007f5007f5007f5007f5007f5007f5007f5007f5007f5007f5007f500"
},
{
"char": "ň",
"utf8": "C588",
"data": "09100b011002f806f40004f8f6000006f8000000000000000000000af28efc40afdd9aff1afb0007f7af30002f9af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0b100b0010000000df400000009f600000001c8000000000000000000000000000007dfea20000bfc8afe3006f90003fd00cf10000af30fd000006f61fb000005f70fd000006f60df10000af306f90003fd000bfc79fe300007dfea200"
},
{
"char": "ř",
"utf8": "C599",
"data": "07100700100bd11ea00cbcc0001ed10000000000000000af4bf60afeec50afb0000af30000af20000af20000af20000af20000af20000af20000af2000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0a100a0010003f607f300005f8f50000008f700000000000000000000000002aefc60002ff98df9009f4000df10af300024104ff940000003bfffa10000004afd00750000af40ef2000af305fe98bfc0003befd700"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0810070010000006f4000008f300fd0ce000fd0b5000fd0000effffc0056fe640000fd000000fd000000fd000000fd000000fd000000fd000000ed000000bfa800002cfb00"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "09100b011000001df300000bf5000002d6000000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "09100b0110000beb100007908800007908800000beb100000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0a14090010000008f90000004fb00000009c0000000000000000000000009f50000df13fa0002fb00ef0007f5008f500cf0002fa01fa0000df06f500007f5bf000001fbfa000000bff40000006fe00000001f900000005f40000000dd0000019df5000002fe6000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0a100a001000ad11db00000cbbc0000001ee1000000000000000000000000ffffffff0088888bfc0000001ef2000000bf50000007fa0000003fe0000000df30000009f80000004fc0000000ef97777712ffffffff4"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0d120d001200000000000000006f603f90000005f503f80000000000000000000007f80000000000dfe0000000004fdf500000000af2fb00000001fb0af10000006f504f7000000df000ed000003fa0009f400009f40003fa0000fffffffff1005fc88888bf600cf2000002fc02fc0000000bf38f600000005f9"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0c120e0112000000000000001fb00de000001ea00dd0000000000000000007dfec500001dfdaaefa000bf70000af804fc000000ef09f40000008f5bf20000005f7df00000004f9df00000004f9bf10000005f79f40000008f54fb000000ef00bf70000af8001dfdaaefb000007dfec6000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b120d011200000000000007f504f800006f403f80000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "ß",
"utf8": "C39F",
"data": "0b0f0c010f01aefc500000dfa8df50005f9001fb0008f4000ed000af2002fa000af200bf2000af201fb0000af201fc0000af200af9000af2000bfb00af200009f90af200000df0af200000ee0af26d98df80af24cefd7000"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "09100b011000000000004f702fa004f701ea0000000000000000000029efd8002ff97bfb08e30009f30000006f6029dffff63fe8548f6bf20006f6ee00006f6cf3002ef65ffaafef705cfe84fa"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0b100b001000000000000005f602f900005f602e90000000000000000000000000007dfea20000bfc8afe3006f90003fd00cf10000af30fd000006f61fb000005f70fd000006f60df10000af306f90003fd000bfc79fe300007dfea200"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "09100b011000000000006f503f8006f503f80000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0d120d00120000000df3000000000af50000000002d7000000000000000000000007f80000000000dfe0000000004fdf500000000af2fb00000001fb0af10000006f504f7000000df000ed000003fa0009f400009f40003fa0000fffffffff1005fc88888bf600cf2000002fc02fc0000000bf38f600000005f9"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000007fa0000003fc00000008d100000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Í",
"utf8": "C38D",
"data": "051205011200cf508f701c900000003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa003fa00"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "0c120e0112000052005300000dffa7f500004e23bfa0000000000000005fd0000004f95ff8000004f95fff300004f95fcfd00004f95f89f80004f95f81ef3004f95f804fd004f95f800af804f95f8001ef24f95f80004fc4f95f80000afcf95f800001eff95f8000004ff95f8000000af9"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0c120e01120000009f8000000005fa000000000ab000000000000000000007dfec500001dfdaaefa000bf70000af804fc000000ef09f40000008f5bf20000005f7df00000004f9df00000004f9bf10000005f79f40000008f54fb000000ef00bf70000af8001dfdaaefb000007dfec6000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0b120d0112000001ef30000000bf400000003d6000000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b120d011200000000000007f504f800006f403f80000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "á",
"utf8": "C3A1",
"data": "09100b011000000cf5000008f7000001c9000000000000000000000029efd8002ff97bfb08e30009f30000006f6029dffff63fe8548f6bf20006f6ee00006f6cf3002ef65ffaafef705cfe84fa"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100b0010000001ef3000000bf40000002d6000000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "í",
"utf8": "C3AD",
"data": "051005011001ef20cf403d50000000000007f5007f5007f5007f5007f5007f5007f5007f5007f5007f5007f500"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "09100b011000350017005ffe7bd00b907ee40000000000000000000af28efc40afdd9aff1afb0007f7af30002f9af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0b100b0010000000df400000009f600000001c8000000000000000000000000000007dfea20000bfc8afe3006f90003fd00cf10000af30fd000006f61fb000005f70fd000006f60df10000af306f90003fd000bfc79fe300007dfea200"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "09100b011000001df300000bf5000002d6000000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "09100b011000000000006f503f8006f503f80000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "090f09000b0002e90000002fa0000000000000000000000001c80000004fa000000bf4000009f9000006fb000000ee1000003f90000004f80001952fd0008f70afd9bfe1008dfe9100"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0d120d00120002ef200000000003fc000000000005d4000000000000000000000007f80000000000dfe0000000004fdf500000000af2fb00000001fb0af10000006f504f7000000df000ed000003fa0009f400009f40003fa0000fffffffff1005fc88888bf600cf2000002fc02fc0000000bf38f600000005f9"
},
{
"char": "Â",
"utf8": "C382",
"data": "0d120d0012000007f90000000007f8f900000002c806d30000000000000000000007f80000000000dfe0000000004fdf500000000af2fb00000001fb0af10000006f504f7000000df000ed000003fa0009f400009f40003fa0000fffffffff1005fc88888bf600cf2000002fc02fc0000000bf38f600000005f9"
},
{
"char": "Æ",
"utf8": "C386",
"data": "140e14000e000000000dffffffffc0000000007fff7777775000000001fdcf000000000000000bf4bf100000000000004fa0af10000000000000ef20af20000000000008f8009fffffff0000002fe0008f977777000000cf50008f400000000006ffffffff50000000001efbbbbbdf60000000009f9000006f6000000003fe1000005fb77777720df60000004ffffffff5"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0c120d010e0007dffc600002dfc9aefb000cf60000bf605fa000002fd0af4000000ac0cf1000000000df0000000000df0000000000cf2000000000af40000009b05fb000001fd00df50000af6002efc8aefa000018dffc600000001f800000000016e90000000002d9000000004ea10000"
},
{
"char": "È",
"utf8": "C388",
"data": "0a120b0112009f900000000bf500000000ca000000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120b0112000007fa0000003fc00000008d100000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "0a120b01120001ee2000001ecbe200008d10c90000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0a120b0112000000000000ed00bf1000dc00ae1000000000005ffffffff95fc88888855f800000005f800000005f800000005f800000005fffffffb05fc88888505f800000005f800000005f800000005f800000005fc88888855ffffffffb"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0712060012005fb0005f9eb00ba03d50000000003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "071206001200000004f801fb3f701eb0000000003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00003fa00"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0c120e011200003fd100000003fadd1000000ac02d70000000000000000007dfec500001dfdaaefa000bf70000af804fc000000ef09f40000008f5bf20000005f7df00000004f9df00000004f9bf10000005f79f40000008f54fb000000ef00bf70000af8001dfdaaefb000007dfec6000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0b120d0112002fe1000000004fc0000000006d3000000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0b120d011200008f800000008f8f9000002d706d30000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b120d011200000000000007f504f800006f403f80000000000000af3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003faaf3000003fa9f4000004fa7f6000006f82fe20001ef207ffa9aff70004befeb300"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0c120c0012000000000000000ed00be100000dc00be1000000000000009f80000009f81ff100001fe107f900009f6000df2002fd00005fa00af400000cf23fc0000003fbbf30000000affa000000002ff1000000000fe0000000000fe0000000000fe0000000000fe0000000000fe00000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "110e13010e003aefffffffffff706fe978cfb88888842fd10007f700000009f400007f70000000df000007f70000000fd000007f70000000fd000007fffffff90fd000007fb8888850fd000007f70000000df000007f700000009f400007f700000002fd10007f7000000006fe978cfb8888885003aefffffffffff9"
},
{
"char": "à",
"utf8": "C3A0",
"data": "09100b011001df30000002fe10000004d5000000000000000000000029efd8002ff97bfb08e30009f30000006f6029dffff63fe8548f6bf20006f6ee00006f6cf3002ef65ffaafef705cfe84fa"
},
{
"char": "â",
"utf8": "C3A2",
"data": "09100b01100006fb000006f8eb0001c904d40000000000000000000029efd8002ff97bfb08e30009f30000006f6029dffff63fe8548f6bf20006f6ee00006f6cf3002ef65ffaafef705cfe84fa"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "110b11000b005befd603bffc40008fe98dfafd89ef500cd1000efc0001ee00000000bf40000af2007cffffffffffff309fd766cf766666611fe0000bf400000003fa0000bf800000001fc0003eff20001300bfc8aff7ff98afd0009efd9203befe9200"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0a0f0a000b0008dfe91000cfc8bfd107f80006f80df00000ca0fc00000001fb00000000fc00000000df000008607f80005f800cfb8afd00008dfe80000008e3000000039f200000006f2000000bd6000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0a100b0010002fe100000004fc000000006d3000000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100b0010000001ef3000000bf40000002d6000000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0a100b001000008f80000008f8f900002d706d30000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0a100b00100000000000007f504f80006f403f80000000000000000000000006dfe91000afb8bfd006f70007f70ce00000fb0ffffffffd1fd77777760fd00000000df200000007fb0000a300cfd88ef40007dfeb30"
},
{
"char": "î",
"utf8": "C3AE",
"data": "0710060010009f80009f8f803d607d200000000000000007f500007f500007f500007f500007f500007f500007f500007f500007f500007f500007f500"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "071006001000000007f404f77f404f700000000000000007f500007f500007f500007f500007f500007f500007f500007f500007f500007f500007f500"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0b100b001000007fa00000007f8fa000001c805d40000000000000000000000000007dfea20000bfc8afe3006f90003fd00cf10000af30fd000006f61fb000005f70fd000006f60df10000af306f90003fd000bfc79fe300007dfea200"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "09100b011002ee10000004fc00000006d3000000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "û",
"utf8": "C3BB",
"data": "09100b01100008f9000008f8f90002c706d30000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "09100b011000000000006f503f8006f503f80000000000000000000af20002faaf20002faaf20002faaf20002faaf20002faaf20002faaf20002fa9f30002fa7f70009fa1ffa9cffa03cffb3fa"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0a14090010000000000001ec00ce0001eb00ce00000000000000000000009f50000df13fa0002fb00ef0007f5008f500cf0002fa01fa0000df06f500007f5bf000001fbfa000000bff40000006fe00000001f900000005f40000000dd0000019df5000002fe6000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "120b12000b0007dfe91019efd70000bfc8afe3dfa8cf9006fa0004fff4000bf20cf10000cfb00005f60fd000008ffffffff70fc000007fc77777730fd000008fa00000000cf10000cfe000000006f90004fff700004000bfc79fe3efa79ef00007dfea1019efea30"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0c120c0012000000177200000000afa000000005fa000000000571000000001ff6000000006ffc00000000cfff10000001ffcf60000006fb7fb000000bf72ff000001ff20df500006fd009fa0000bfb448ff0001ffffffff4006ffbbbbefa00bfa00006fe00ff600002ff45ff100000df9"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0c130c00120007d705d90000009fbfb000000007d90000000026640000001bffffe30000cff98dff2006ff2000dfa00cf900006fe00ff6000014401ff4000000001ff4000000001ff4000000001ff4000000000ff6000026600bfa00007fe004ff4002ef8000affccffd100008ffffa100000002200000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0b120c011209d507d700000bfbf900000009d70000023332000000afffffa2000afebcfff400afb001bff20afb0000ef90afb00008fe0afb00005ff0afb00004ff1afb00004ff1afb00005ff0afb00009fd0afb0001ff80afb003dfe00affefffe200affffd71000"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120c0112000001772000000afa0000005fa00013336733326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0a120c011201bc20ac40002decf6000001bc400013333333326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0a120c0112000004760000002ff4000000cf400003347533303ffffffff32bbcffcbb20003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20002ffffffff23ffffffff3"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0a120c011203ca02cc10005fcee3000004cc20002320000232bff0000bfabff7000bfabffe000bfabfff600bfabfdfd00bfabfabf50cfabfa4fd0cfabfa0cf4cfabfa05fccfabfa00dfefabfa006fffabfa000effabfa0006ffabfa0000efa"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0c140c0013000000177200000000cf9000000007f90000000003300000000036620000001bffffb10000cffaaffc0006ff2003ff500cf90000afb00ff500006ff01ff400004ff11ff400004ff11ff400004ff11ff400004ff00ff600007ff00bfb0000bfa004ff5006ff4000affddff9000008fffe7000000002200000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0b120c011203ca02cc100005fcee30000004cc20000133333000008ffffffc3008ffbbbfff308fd0001dfc08fd00006ff08fd00005ff08fd0000bfc08fe777cff408ffffffd4008fe77dfb0008fd004ff3008fd000cfb008fd0004ff408fd0000cfc08fd00004ff4"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0c140c0013001bc309d5000002dfcf600000001bd50000000000000000000025640000002cffffe60000efe98cff6006ff2000afe009fc00003ee206ff3000000000eff9300000002cfffe700000004afffd1000000006ffb0044100005ff10ef800002ff309ff30009ff001dffdbeff700008efffd500000002210000"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0c120c0012002cb11bc3000003eedf400000002cc300001333333333318ffffffffff86bbbcffcbbb600002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff2000000002ff20000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0a130c01120000007730000009fb0000004fb0002320230232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0a150c011400002300000006ebc000000c40d3000009b7e10000006720002320000232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0c120c0012000000277100000000cf8000000007f800001330033003323ff500004ff40bfc0000bfc003ff3002ff4000cfa009fc00004ff21ff500000cf87fd0000004ffef50000000cffd000000005ff6000000002ff2000000002ff2000000002ff2000000002ff2000000002ff20000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0b120c0012000bc309d500001dfcf70000001bd5000033333333320fffffffffb0bbbbbbcff900000009fe10000003ff50000000dfa00000008fe10000003ff50000000cfb00000007ff10000002ff60000000cfc00000006ff20000000fffffffffe0ffffffffff"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0a100c010f000002771000000df70000009f700000003200000049bb820009ffffff504ff612bff03760002ff30004677ff407fffffff45ff6101ff4afa0001ff4afc0008ff44ffdbefff506effe5ef80002200000"
},
{
"char": "č",
"utf8": "C48D",
"data": "0a100c010f01bc20ad40002dfcf6000001bc400000000000000018bb930003ffffff601efc329ff27ff0000df7afa0000231bf90000000bf900000008fd00005843ff5002ef509ffcbffc0007ffff9000000220000"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0e110c00100000000000003300000007fe00ff00000007fe00ff00000007fe02fc00000007fe07f60018bb57fe09c001effffefe00000bff526ffe00001ff60008fe00004ff10007fe00005ff00007fe00005ff00007fe00002ff30007fe00000dfb001cfe000005ffeceffe0000006fffc7fe000000002200000000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100c010f000002771000000df70000009f700000003200000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0a100c010f03cb11bc20004fdee3000003cc200000000000000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "0a0f0c010f0000005750000005fe2000001ee200000013100009999950000fffffa0000666dfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000ffffffffc0ffffffffd"
},
{
"char": "ň",
"utf8": "C588",
"data": "0a0f0c010f03cb11cc20004fdee3000003cc2000000000000049507bb8007fccffffc07ffb338ff57fe0000df97fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0a100c010f000002771000000cf80000007f800000003300000028bb820005ffffff502ffb33bff29fd0000df9df800008fcef600007feef700007fdbfb0000bfb5ff4004ff50bffccffb0009ffff9000000220000"
},
{
"char": "ř",
"utf8": "C599",
"data": "090f0c020f6d804ca0008fbfc100006da0000000000000099118bb60ff7efff90ffffa9a50ffd100000ff5000000ff5000000ff5000000ff5000000ff5000000ff5000000ff5000000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0a100c010f03cb11cc20004fdee3000003cc200000000000000028bba40006ffffffb01ff8105ff63ff10007950efc62000003dffffa2000038cfff32530001dfa7fe1000bfa1dfe99cff301affffc400000221000"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0b130c011200000000131000000007f9000000007f8000000008f600022000de1005ff001d60005ff00000089bff999800effffffff00237ff333200005ff000000005ff000000005ff000000005ff000000005ff000000003ff500000000effcce300002dfffe40000002310000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0a100c010f000002771000000cf80000007f8000000033000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0a110c011000002300000008dca000000f10f000000b98d000000077100039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0c140c000f0000000773000000009fb000000004fb00000000023000002992000008950ef900004ff308ff0000afc001ff6001ff50009fc007fe00002ff30df700000bf94ff1000004ffaf90000000dfff200000006ffb000000000ff4000000006fd000000001ef60000001befd00000004ffc2000000003300000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0a0f0c010f00ad407d70001cfbf9000000ad7000000000000049999999958ffffffff9355555eff2000009ff4000006ff6000004ff8000003ffa000001efc000000cfe1000009fffeeeeecaffffffffe"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0c120c0012000640037100004ff10cf800001b9006c30000000330000000001ff6000000006ffc00000000cfff10000001ffcf60000006fb7fb000000bf72ff000001ff20df500006fd009fa0000bfb448ff0001ffffffff4006ffbbbbefa00bfa00006fe00ff600002ff45ff100000df9"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0c140c0013000740037000006ff00ef700001b8007c200000000000000000036620000001bffffb10000cffaaffc0006ff2003ff500cf90000afb00ff500006ff01ff400004ff11ff400004ff11ff400004ff11ff400004ff00ff600007ff00bfb0000bfa004ff5006ff4000affddff9000008fffe7000000002200000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0a130c0112006500271003ff20bf9000aa005c402320000232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "ß",
"utf8": "C39F",
"data": "0b110c011000003200000009fffe500009ffdeff2001ff801ff8005ff000df9006ff000ff5006ff007fd0006ff00df70006ff00df90006ff007ff5006ff000bff406ff0000bfe06ff00003ff26ff01004ff26ff0fcbffc06ff2efffc20000001310000"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "0a100c010f017300460008fd00ff4003b6009b1000000000000049bb820009ffffff504ff612bff03760002ff30004677ff407fffffff45ff6101ff4afa0001ff4afc0008ff44ffdbefff506effe5ef80002200000"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0a100c010f007300370006ff00ff6002b7008b2000000000000028bb820005ffffff502ffb33bff29fd0000df9df800008fcef600007feef700007fdbfb0000bfb5ff4004ff50bffccffb0009ffff9000000220000"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a100c010f007300370006ff00ff6002b7008b20000000000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0c120c0012000000177200000000afa000000005fa000000000571000000001ff6000000006ffc00000000cfff10000001ffcf60000006fb7fb000000bf72ff000001ff20df500006fd009fa0000bfb448ff0001ffffffff4006ffbbbbefa00bfa00006fe00ff600002ff45ff100000df9"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120c0112000001772000000afa0000005fa00013336733326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0a120c0112000004760000002ff4000000cf400003347533303ffffffff32bbcffcbb20003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20002ffffffff23ffffffff3"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "0a120c0112008d921d3005fdffff1004801793002320000232bff0000bfabff7000bfabffe000bfabfff600bfabfdfd00bfabfabf50cfabfa4fd0cfabfa0cf4cfabfa05fccfabfa00dfefabfa006fffabfa000effabfa0006ffabfa0000efa"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0c140c0013000000177200000000cf9000000007f90000000003300000000036620000001bffffb10000cffaaffc0006ff2003ff500cf90000afb00ff500006ff01ff400004ff11ff400004ff11ff400004ff11ff400004ff00ff600007ff00bfb0000bfa004ff5006ff4000affddff9000008fffe7000000002200000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0a130c01120000007730000009fb0000004fb0002320230232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0a130c0112006500271003ff20bf9000aa005c402320000232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0a100c010f000002771000000df70000009f700000003200000049bb820009ffffff504ff612bff03760002ff30004677ff407fffffff45ff6101ff4afa0001ff4afc0008ff44ffdbefff506effe5ef80002200000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100c010f000002771000000df70000009f700000003200000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "0a0f0c010f0000005750000005fe2000001ee200000013100009999950000fffffa0000666dfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000ffffffffc0ffffffffd"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "0a0f0c010f007d921d4005fdffff100480179300000000000049507bb8007fccffffc07ffb338ff57fe0000df97fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa7fd0000bfa"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0a100c010f000002771000000cf80000007f800000003300000028bb820005ffffff502ffb33bff29fd0000df9df800008fcef600007feef700007fdbfb0000bfb5ff4004ff50bffccffb0009ffff9000000220000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0a100c010f000002771000000cf80000007f8000000033000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a100c010f007300370006ff00ff6002b7008b20000000000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "0a0f0c010b00004920000000df900000006b3000000000000000004620000000cf60000004ff4000004ff9000002ffa000000afd0000000ff60000000ff5000de50cfd329ff204ffffff800029cda400"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0c120c00120006730000000005fe10000000006fa0000000000671000000001ff6000000006ffc00000000cfff10000001ffcf60000006fb7fb000000bf72ff000001ff20df500006fd009fa0000bfb448ff0001ffffffff4006ffbbbbefa00bfa00006fe00ff600002ff45ff100000df9"
},
{
"char": "Â",
"utf8": "C382",
"data": "0c120c001200001bc400000002decf5000000bc209c40000000330000000001ff6000000006ffc00000000cfff10000001ffcf60000006fb7fb000000bf72ff000001ff20df500006fd009fa0000bfb448ff0001ffffffff4006ffbbbbefa00bfa00006fe00ff600002ff45ff100000df9"
},
{
"char": "Æ",
"utf8": "C386",
"data": "0c0f0c000f00000233333100000dfffff500003fffdbb300008fff90000000efcf90000004fcaf90000009f7afb440000ef2affff0004fd0afd99000afb6cf900000ffffff900005feaaef90000bf900af90001ff400affee86ff000affff9"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0c140c000f000026640000001bffffe30000cff98dff2006ff2000dfa00cf900006fe00ff6000014401ff4000000001ff4000000001ff4000000001ff4000000000ff6000026600bfa00007fe004ff4002ef8000affccffd100008ffffa10000000ef40000000006ef2000000000cf300000000ffb0000000005300000"
},
{
"char": "È",
"utf8": "C388",
"data": "0a120c01120067400000005ff100000006fb000013336733326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "É",
"utf8": "C389",
"data": "0a120c0112000001772000000afa0000005fa00013336733326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "0a120c01120001bc4000002decf50000bc209c4013333333326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0a120c0112006500271004ff10cf8001b9006c3013333333326ffffffffc6ffbbbbbb86ff00000006ff00000006ff00000006ff44444306fffffffd06ffaaaaa806ff00000006ff00000006ff00000006ff00000006ffffffffb6ffffffffc"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0a120c01120005da0000007fbfc10005d803cb0003333333303ffffffff32bbcffcbb20003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20002ffffffff23ffffffff3"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "0a120c011202710065000bfa04ff1005c401ba0003333333303ffffffff32bbcffcbb20003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20000003ff20002ffffffff23ffffffff3"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0c140c001300001bc300000002eecf4000001cb10ac300000000000000000036620000001bffffb10000cffaaffc0006ff2003ff500cf90000afb00ff500006ff01ff400004ff11ff400004ff11ff400004ff11ff400004ff00ff600007ff00bfb0000bfa004ff5006ff4000affddff9000008fffe7000000002200000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0a130c01120067400000004ff200000005fc00002320230232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0a130c01120001ac4000001dfbf60000bc309d402320000232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0a130c0112006500271003ff20bf9000aa005c402320000232bf900009fbbf900009fbbf900009fbbfa00009fbbfa00009fbbfa0000afbbfa0000afbbfa0000afbbfa0000afbbfa0000afb9fc0000df94ff5005ff40bffcdffb0009ffff8000000220000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0c120c0012000740037000006ff00ef600002b8008b2001330000003323ff500004ff40bfc0000bfc003ff3002ff4000cfa009fc00004ff21ff500000cf87fd0000004ffef50000000cffd000000005ff6000000002ff2000000002ff2000000002ff2000000002ff2000000002ff20000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "0c100c000f00036653333100bffffffff808fe78ffaaa50ff303fe00003fe003fe00004fd003fe00004fd003ff44404fd003fffff04fd003ff88804fd003fe00004fd003fe00002ff003fe00000ef503fe000006ffccfffff9007ffffffffa000022100000"
},
{
"char": "à",
"utf8": "C3A0",
"data": "0a100c010f0177200000009fc000000009f7000000003300000049bb820009ffffff504ff612bff03760002ff30004677ff407fffffff45ff6101ff4afa0001ff4afc0008ff44ffdbefff506effe5ef80002200000"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0a100c010f0003cb2000004fdee30002ca01bc1000000000000049bb820009ffffff504ff612bff03760002ff30004677ff407fffffff45ff6101ff4afa0001ff4afc0008ff44ffdbefff506effe5ef80002200000"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "0c0c0c000b008bb62ac9100cffffffffe04ff46ff82df615401ff108f900035ff44afa05effffffffa3ffb6ff666647fe01ff000008fd01ff500104ffbcfffcbf208ffe58fffe3001200013200"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0a100c010b0018bb930003ffffff601efc329ff27ff0000df7afa0000231bf90000000bf900000008fd00005843ff5002ef509ffcbffc0007ffff9000000df500000006df30000000af5000000dfc0000000430000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0a100c010f0177200000008fc000000009f7000000003300000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a100c010f000002771000000df70000009f700000003200000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0a100c010f0003cc2000004fdde30002ca11bc2000000000000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0a100c010f017300460008fd00ff4003b6009b1000000000000007bb930003efffff700efc328ff36ff1000bf9bfc44449fdcffffffffdcfc77777769fd00000003ff80003b108ffebcff6006dfffd500000131000"
},
{
"char": "î",
"utf8": "C3AE",
"data": "0a0f0c010f00008d8000000afbfa00008d605d80000000000009999950000fffffa0000666dfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000ffffffffc0ffffffffd"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "0a0f0c010f004700073000ff607fe0008b202c70000000000009999950000fffffa0000666dfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000000bfa0000ffffffffc0ffffffffd"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0a100c010f0002cc2000003eddf40001cb11ac2000000000000028bb820005ffffff502ffb33bff29fd0000df9df800008fcef600007feef700007fdbfb0000bfb5ff4004ff50bffccffb0009ffff9000000220000"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0a100c010f0177300000007fd000000008f80000000033000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0a100c010f0002cc2000003eddf40001cb11ac20000000000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a100c010f007300370006ff00ff6002b7008b20000000000039800007956fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf96fe0000cf95ff0000cf93ff4003ff90dffccfef902cfff69f90002300000"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0c140c000f000650027100003ff20bfa00000aa005c4000000000000002992000008950ef900004ff308ff0000afc001ff6001ff50009fc007fe00002ff30df700000bf94ff1000004ffaf90000000dfff200000006ffb000000000ff4000000006fd000000001ef60000001befd00000004ffc2000000003300000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "0c0c0c000b007bb519c9100bffffefffd03ff47ffc3ef57fc00ff709f89fa00ef95bf99fa00efffffa9fa00ef966638fa00ef600005fe02ffb00000efcefffcbd003effc6effc0000220002200"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0d100d001000000004760000000002ff4000000000bf70000000000000000000003ffff100000008ffff60000000dffffb0000003ff8aff1000008ff35ff600000efe00ffc00003ff900bff10009ffffffff6000effffffffc003ffb6666cff109ff500007ff70eff000002ffc"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0c100c00100004730671000002efbfa00000004ffc000000000000000000029cfd9200005fffffff4002fffdbeffe10cff70008ff80ffb000007863ff7000000003ff7000000000ffb000008970cff60008ff802fffdadffe1005fffffff4000029dfd9200"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0b100c011000672177000004fecf70000006ffa000000000000000cffffd92000cfffffff600cffaadfff30cfe0006ffd0cfe0000bff1cfe00006ff4cfe00006ff4cfe0000bff1cfe0006ffd0cff9adfff30cfffffff600cffffd92000"
},
{
"char": "É",
"utf8": "C389",
"data": "09100a01100000277100000cf9000006fc000000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "09100a011005730671002ffbf900004ffc000000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Í",
"utf8": "C38D",
"data": "05100501100077307fd02fe2000000cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0b100d011000473067100002efbfa0000004ffc000000000000000cffc0006ff4cfff4006ff4cfffc006ff4cffff406ff4cffffc06ff4cfe7ff46ff4cfe0efc6ff4cfe06ffdff4cfe00dffff4cfe005ffff4cfe000dfff4cfe0004fff4"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0d100d001000000007720000000009fc0000000003fe10000000000000000000029cfc91000005ffffffe40002fffdbdfff100cff70008ffa00ffb00000dff03ff7000009ff23ff7000009ff20ffb00000dff00cff60008ffa002fffdadfff10005ffffffe40000029dfc91000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0b100c01100276047400000bfafd1000001dff2000000000000000cfffffd9000cfffffffc00cff889eff50cfe0004ff90cfe0001ffa0cfe0008ff80cffffffff20cffffffd300cffaffc0000cfe0affa000cfe00bff900cfe000cff90"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0b100b001000474067200001efafa0000003ffd000000000000000004befd910006fffffff200fff97cffc03ff9000cff01ffe630000009fffffc600005beffff900000015eff06ff50009ff22fff868ffe007fffffff50003bdfda300"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0a100a00100067117600005fddf5000008ff80000000000000affffffffaaffffffffa6aacffcaa70005ff50000005ff50000005ff50000005ff50000005ff50000005ff50000005ff50000005ff50000005ff5000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0b100c01100000037600000001ef60000000af8000000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0b110c0111000001000000005ef80000000ba7e00000005ff8000000000100000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec70000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0d100c001000000007720000000009fc0000000004fd1000000000000000001eff10002ffd007ff8000aff5000eff102ffc00006ff80aff400000eff3ffc0000006fffff30000000dfffb000000005fff3000000000efd0000000000efc0000000000efc0000000000efc00000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0a100b00100057306710002ffbf9000004ffc00000000000003ffffffffc3ffffffffc2aaaaafffa000009ffe100005fff300002fff600001dff900000bffc000008ffe100003fffc999985ffffffffd5ffffffffd"
},
{
"char": "á",
"utf8": "C3A1",
"data": "090d0a000d00000476000002ff400000cf700000000000006dfea2008fffffe10cca27ff7000000ff903beffffa1ffebbffa5ff505ffa2fffffffa03cfe9afa0"
},
{
"char": "č",
"utf8": "C48D",
"data": "0a0d0a000d0067117600005fddf5000008ff80000000000000002befc40004ffffff600eff87eff13ff60039935ff20000003ff60038830eff87eff104ffffff60003befc400"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0e0c0d000c0000000ff93ff10000000ff97fa00000000ff9ae40003bee7ff9000005fffffff900000eff87eff900003ff6003ff900005ff2000ff900003ff6003ff900000eff87eff9000005fffffff90000003bfe7bf90000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a0d0a000d000003760000001ef5000000af80000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0a0d0a000d0067117600005fddf5000008ff80000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "í",
"utf8": "C3AD",
"data": "050d05010d07fe12ff304740000000ff800ff800ff800ff800ff800ff800ff800ff800ff8000"
},
{
"char": "ň",
"utf8": "C588",
"data": "090d0a010d05730771003febf800005ffb000000000000ff7bfe800fffffffa0fffb9fff2ffc007ff4ff9003ff5ff8003ff5ff8003ff5ff8003ff5ff8003ff50"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0a0d0a000d000003770000000ef70000009f90000000000000002beeb40004ffffff700eff87eff23ff6003ff65ff2000ff83ff6003ff60eff87eff204ffffff70003beeb400"
},
{
"char": "ř",
"utf8": "C599",
"data": "080d07000d0bf78fb001dffd0000277200000000000ffadf900fffff900fff96300ffb00000ff800000ff800000ff800000ff800000ff80000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "090d09000d05730671002ffbf900004ffb00000000000003aefd6002ffffff806ff308bb05ffc8510009fffff6000146dff06dd107ff11effeffb002befd8000"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0a0d09000d0000004dd002ff608fa002ff60cf4002ff6000007fffff50007fffff500037ffa6200002ff60000002ff60000002ff60000002ffb5200000ffff5000005dff5000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "090d0a010d0000afc000004fe100000572000000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "090e0a010e000010000004ef900000ab6f000004ef9000000010000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff5"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0b110a000d000002ff50000000cf700000002760000000000000000efc0007ff409ff200bfe003ff700ff9000dfd04ff40008ff29fe00002ff8dfa00000dffff4000007ffff0000002fffa0000000cff50000056dff000000ffff9000000ffea100000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "080d09000d06fc3fe2009fff4000077400000000005ffffffe5ffffffe2666effa0009ffc0007ffd1005ffe2003fff95556fffffff6fffffff"
}
]

@ -0,0 +1,37 @@
[
{
"char": "Ä",
"utf8": "C384",
"data": "0d100d001000001100110000000df57fb0000000df57fb000000000000000000003ffff100000008ffff60000000dffffb0000003ff8aff1000008ff35ff600000efe00ffc00003ff900bff10009ffffffff6000effffffffc003ffb6666cff109ff500007ff70eff000002ffc"
},
{
"char": "Ö",
"utf8": "C396",
"data": "0d100d001000001101100000005fd0ff30000005fd0ff3000000000000000000029cfc91000005ffffffe40002fffdbdfff100cff70008ffa00ffb00000dff03ff7000009ff23ff7000009ff20ffb00000dff00cff60008ffa002fffdadfff10005ffffffe40000029dfc91000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b100c01100011001100000af84fe00000af84fe00000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "ß",
"utf8": "C39F",
"data": "090c0a010c03befc7003ffffffb0bffa7dff3efd006ff5ffb05dff2ffb1fff70ffb1fffb0ffb008ff6ffb002ffaffb05bff8ffb1ffff2ffb1feb30"
},
{
"char": "ä",
"utf8": "C3A4",
"data": "090d0a000d00110011000cf66fc000cf66fc0000000000006dfea2008fffffe10cca27ff7000000ff903beffffa1ffebbffa5ff505ffa2fffffffa03cfe9afa0"
},
{
"char": "ö",
"utf8": "C3B6",
"data": "0a0d0a000d001100110000bf74fe0000bf74fe000000000000002beeb40004ffffff700eff87eff23ff6003ff65ff2000ff83ff6003ff60eff87eff204ffffff70003beeb400"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "090d0a010d01110110009f93ff0009f93ff00000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
}
]

@ -0,0 +1,77 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0d100d001000000004760000000002ff4000000000bf70000000000000000000003ffff100000008ffff60000000dffffb0000003ff8aff1000008ff35ff600000efe00ffc00003ff900bff10009ffffffff6000effffffffc003ffb6666cff109ff500007ff70eff000002ffc"
},
{
"char": "É",
"utf8": "C389",
"data": "09100a01100000277100000cf9000006fc000000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Í",
"utf8": "C38D",
"data": "05100501100077307fd02fe2000000cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00cfe00"
},
{
"char": "Ñ",
"utf8": "C391",
"data": "0b100d011000068359100005ffffe0000059259200000000000000cffc0006ff4cfff4006ff4cfffc006ff4cffff406ff4cffffc06ff4cfe7ff46ff4cfe0efc6ff4cfe06ffdff4cfe00dffff4cfe005ffff4cfe000dfff4cfe0004fff4"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0d100d001000000007720000000009fc0000000003fe10000000000000000000029cfc91000005ffffffe40002fffdbdfff100cff70008ffa00ffb00000dff03ff7000009ff23ff7000009ff20ffb00000dff00cff60008ffa002fffdadfff10005ffffffe40000029dfc91000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0b100c01100000037600000001ef60000000af8000000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b100c01100011001100000af84fe00000af84fe00000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "á",
"utf8": "C3A1",
"data": "090d0a000d00000476000002ff400000cf700000000000006dfea2008fffffe10cca27ff7000000ff903beffffa1ffebbffa5ff505ffa2fffffffa03cfe9afa0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a0d0a000d000003760000001ef5000000af80000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "í",
"utf8": "C3AD",
"data": "050d05010d07fe12ff304740000000ff800ff800ff800ff800ff800ff800ff800ff800ff8000"
},
{
"char": "ñ",
"utf8": "C3B1",
"data": "090d0a010d00271590004ffded000af3bc200000000000ff7bfe800fffffffa0fffb9fff2ffc007ff4ff9003ff5ff8003ff5ff8003ff5ff8003ff5ff8003ff50"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0a0d0a000d000003770000000ef70000009f90000000000000002beeb40004ffffff700eff87eff23ff6003ff65ff2000ff83ff6003ff60eff87eff204ffffff70003beeb400"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "090d0a010d0000afc000004fe100000572000000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "090d0a010d01110110009f93ff0009f93ff00000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "¿",
"utf8": "C2BF",
"data": "090d0900090009ff1000009ff1000007cc1000000000000008ee000000cff00001cff90000dff900005ff9000007ff601cc84ffe8cff70cfffffd0008dfd9100"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0d100d0010000067400000000005ff100000000007fb00000000000000000000003ffff100000008ffff60000000dffffb0000003ff8aff1000008ff35ff600000efe00ffc00003ff900bff10009ffffffff6000effffffffc003ffb6666cff109ff500007ff70eff000002ffc"
},
{
"char": "Â",
"utf8": "C382",
"data": "0d100d0010000002771000000001dffc00000000cf68fa000000000000000000003ffff100000008ffff60000000dffffb0000003ff8aff1000008ff35ff600000efe00ffc00003ff900bff10009ffffffff6000effffffffc003ffb6666cff109ff500007ff70eff000002ffc"
},
{
"char": "Æ",
"utf8": "C386",
"data": "110c11000c000005ffffffffff800000cffffffffff800003ffbcff8777740000aff29ff1000000001ffb09ff1000000008ff509fffffff3000efe009fffffff3006ffffffff76666100dffffffff10000004ffc888dff8777730bff30009fffffff82ffd00009fffffff8"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0c100c000c00029cfd9200005ffffffe3002fffdbeffe00cff70008ff70ffc000008973ff7000000004ff7000000001ffa000006760dff40005ff905fffa7afff2008fffffff400005cfffc40000000bf10000000008fc0000000017ef000000002fd60000"
},
{
"char": "È",
"utf8": "C388",
"data": "09100a011004760000001ef50000003fe1000000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "É",
"utf8": "C389",
"data": "09100a01100000277100000cf9000006fc000000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "09100a011000077300000afff30007fb4fe10000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "09100a011000110110008fa2ff0008fa2ff00000000000cfffffff5cfffffff5cff777772cfe000000cfe000000cfffffff0cfffffff0cff666660cfe000000cff777772cfffffff5cfffffff5"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0710060010005760005fff603fe3df4000000000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe00"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "071006001001101104ff0df54ff0df5000000000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe0000cfe00"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0d100d0010000006750000000007fff500000004fd3ef3000000000000000000029cfc91000005ffffffe40002fffdbdfff100cff70008ffa00ffb00000dff03ff7000009ff23ff7000009ff20ffb00000dff00cff60008ffa002fffdadfff10005ffffffe40000029dfc91000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0b100c011000575000000003ff3000000005fd0000000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0b100c011000017720000000cffe1000009f96fc00000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0b100c01100011001100000af84fe00000af84fe00000000000000efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efc00009ff1efd00009ff1cfe0000bff0aff6003ffd04fffcbfff7009ffffffc00004beec7000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0d100c001000001101100000005fd0ff30000005fd0ff300000000000000001eff10002ffd007ff8000aff5000eff102ffc00006ff80aff400000eff3ffc0000006fffff30000000dfffb000000005fff3000000000efd0000000000efc0000000000efc0000000000efc00000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "120c12000c00029dfd79fffffff6005ffffffffffffff602fffa8cffff7777730bff50009fff0000000ffb00001fff0000003ff700000cfffffff14ff700000bfffffff11ffa00000eff6666600dff30007fff00000004fffa8bffff777773007ffffffffffffff60002adfd79fffffff6"
},
{
"char": "à",
"utf8": "C3A0",
"data": "090d0a000d006740000005fe10000008fb000000000000006dfea2008fffffe10cca27ff7000000ff903beffffa1ffebbffa5ff505ffa2fffffffa03cfe9afa0"
},
{
"char": "â",
"utf8": "C3A2",
"data": "090d0a000d000277200000dffd0000bf77fb0000000000006dfea2008fffffe10cca27ff7000000ff903beffffa1ffebbffa5ff505ffa2fffffffa03cfe9afa0"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "0f090f0009007dfd706dfc70008fffffefffffa00cc916fff817ff5003688fff555ef90affffffffffffc3ff933ffe3222225ff607fff715cc41ffffffdfffffb003cfeb307dfc8000"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0a0d0a0009002aefc40004ffffff500eff87eff13ff60039935ff20000004ff50027720efe66dff106ffffff70005dffd6000000de000000009fb00000017fe0000004fc5000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0a0d0a000d0067400000004ff200000006fc00000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0a0d0a000d000003760000001ef5000000af80000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0a0d0a000d0002772000000dffd00000bf77fb000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0a0d0a000d001100110000cf66fc0000cf66fc000000000000003beeb40004ffffff600efc21aff23ffa889ff65ffffffff73ff50000000efd229cc104ffffff60002beeb400"
},
{
"char": "î",
"utf8": "C3AE",
"data": "070d06000d03ffc002efbfa04740771000000000ff80000ff80000ff80000ff80000ff80000ff80000ff80000ff80000ff8000"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "070d06000d01101108fa1ff18fa1ff1000000000ff80000ff80000ff80000ff80000ff80000ff80000ff80000ff80000ff8000"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0a0d0a000d0001772000000cffe10000af96fc000000000000002beeb40004ffffff700eff87eff23ff6003ff65ff2000ff83ff6003ff60eff87eff204ffffff70003beeb400"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "090d0a010d07fe1000000afa0000000770000000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "û",
"utf8": "C3BB",
"data": "090d0a010d005ffa00003febf800057307710000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "090d0a010d01110110009f93ff0009f93ff00000000000ff8003ff5ff8003ff5ff8003ff5ff8003ff5ff9003ff5ffc006ff5cffb9fff55fffffff505dfd6ff50"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0b110a000d00011011000002ff1bf700002ff1bf700000000000000efc0007ff409ff200bfe003ff700ff9000dfd04ff40008ff29fe00002ff8dfa00000dffff4000007ffff0000002fffa0000000cff50000056dff000000ffff9000000ffea100000"
},
{
"char": "œ",
"utf8": "C593",
"data": "1009100009003beea119eeb40005fffffeefffff600efe78fffe31aff13ff5008ffc889ff55ff2005ffffffff63ff6009ff90000000eff79ffff419cc004fffffeefffff60003beea12aeeb500"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0f140e001400000000144000000000003fe200000000001ef40000000000058500000000000000000000000000efff60000000004ffffc000000000afffff100000000fff9ff700000005ffa2ffc0000000aff50dff2000001fff008ff8000006ffa003ffd00000bff5000eff30001fff9888dff80006ffffffffffe000cfffffffffff402ffe0000007ff907ff90000001ffe0dff30000000bff4"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0f130f001300006fe14ff2000000008fcff40000000000bff600000000000000000000000007cffd810000003dffffffe400003fffebbefff4000dff800008ffe007ff90000009ff60cff100000015530ffd000000000000ffb000000000000ffd000000000000cff1000000166407ff90000009ff500dff800008ffd0003fffebaefff400003dffffffe400000008cffd810000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0e140f0114000ef709fc00000004ff5ff300000000afff80000000001efd000000000000000000006fffffec7000006ffffffffd30006ffb9abffff3006ff400009ffd006ff4000009ff706ff4000001ffc06ff4000000dff06ff4000000bff06ff4000000dff06ff4000001ffc06ff4000009ff706ff400008ffd006ffb99befff3006ffffffffd30006ffffffc700000"
},
{
"char": "É",
"utf8": "C389",
"data": "0b140d011400000003500000001ef50000000bf800000002870000000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0b140d011400aa3037700002fe4ef5000006fff800000007870000000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0614060114000242008fc005fd100782000000006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff4006ff400"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0d140f01140008a402771000001ef4df700000003fffa0000000005880000000000000000006fff700000ffb6ffff10000ffb6ffff80000ffb6fffff1000ffb6ffcff8000ffb6ff4dff100ffb6ff45ff900ffb6ff40cff10ffb6ff404ff90ffb6ff400cff2ffb6ff4003ffcffb6ff4000bffffb6ff40003ffffb6ff40000bfffb6ff400003fffb"
},
{
"char": "Ó",
"utf8": "C393",
"data": "10141000140000000000000000000000005ff5000000000001ef7000000000000afa0000000000000000000000000007cffd8100000003dffffffe5000003fffebbefff60000dff800007ffe1007ff90000007ff900cff10000000efe00ffd00000000aff10ffb000000008ff30ffd00000000aff20cff10000000eff007ff90000006ffa000dff800006ffe10003fffebbefff6000003dffffffe5000000008cffd810000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0d140e0114007fe02ff4000000cf9bfa00000003fffe1000000008ff60000000000000000006fffffffc50006fffffffff9006ffb999bfff306ff400005ffa06ff400000efc06ff400000efd06ff400004ffa06ffa8889fff506fffffffffa006fffffffc60006ff46ffe200006ff407ffe10006ff4008ffd1006ff40008ffd106ff400009ffc0"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0d130d0013000afb08fd0000000cfbfe100000001eff3000000000000000000004bdfdb500000afffffffb0006fffa9bfff800cff20002ffe00efd000008dd10cff60000000005ffffc961000007fffffffa10000047adfffb0000000002dff32cc7000006ff50ffe20000aff308fffb89dffd000bfffffffe200004adfec80000"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0c140c0014002c910575000006fb5fe1000000bfff30000000188400000000000000009fffffffffff9fffffffffff5999bffd999900002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff8000000002ff80000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0d140f011400000000000000000001efa0000000009fc0000000004fe1000000000000000008ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff3000001ffa6ff4000003ff83ff9000008ff50eff60005fff106fffdacfff70008fffffffa000003adfda4000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0d150f0115000000300000000001efe2000000007d1c9000000006e5e8000000000afb1000000000000000008ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff3000001ffa6ff4000003ff83ff9000008ff50eff60005fff106fffdacfff70008fffffffa000003adfda40000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0f140e001400000000035000000000001ef500000000000bf8000000000002870000000000000000000000eff1000001ffe006ffa00000aff6000dff20002ffd00005ffb000bff500000cff403ffc0000003ffc0cff30000000affbffa000000002fffff20000000009fff900000000001fff100000000000dfd000000000000dfd000000000000dfd000000000000dfd000000000000dfd000000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0c140d0014000ba20476000003fd4ff40000008fff60000000078600000000000000002ffffffffffd2ffffffffffd1999999afffb00000007ffe10000003fff40000001eff80000000bffc00000007ffe20000003fff50000001eff90000000bffc00000007fff20000002fffd99999994fffffffffff4fffffffffff"
},
{
"char": "á",
"utf8": "C3A1",
"data": "0b100c001000000000000000000afe10000004ff30000000ef5000000000000000007cfda20000cffffff4007ff935efe005770006ff3004befffff406ffffffff40ffe2006ff41ff80009ff40ffe427fff408fffffeff4006cfe91ff4"
},
{
"char": "č",
"utf8": "C48D",
"data": "0c0f0c000f002ef51df6000004ffcf900000006ffb00000000000000000003adfc7000007ffffffd1003fff97bffa00cff3000bff10ffa000001102ff7000000000ffa000012200cff2000bff104fff97bffa0007ffffffd100003adfc7000"
},
{
"char": "ď",
"utf8": "C48F",
"data": "100f0f000f000000001ff80cf8000000001ff80ff3000000001ff84fd0000000001ff849500005bee92ff80000009fffffeff8000004ffe87cfff800000cff2000bff800000ff900003ff800002ff700001ff800000ff900003ff800000dff1000aff8000005ffe87cfff8000000afffffeff800000005bfea1df80000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0c100c00100000000000000000003ff600000000df9000000008fb00000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0c0f0c000f002ef51df6000004ffcf900000006ffb00000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "061005011000035000df700afa00187000000000aff000aff000aff000aff000aff000aff000aff000aff000aff000aff000aff000"
},
{
"char": "ň",
"utf8": "C588",
"data": "0b0f0d010f00df80bfa00001efbfc0000003ffe100000000000000afd4dfeb200affffffff30afff97cffc0aff5000cff0aff00007ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff30"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0c100d00100000000000000000002ff800000000cfb000000006fd00000000000000000003adfc8000007ffffffd2003fff97cffc00cff30009ff50ffa00001ff82ff700000efb0ffa00001ff80cff20009ff504fff97bffc0007ffffffd200003adfc8000"
},
{
"char": "ř",
"utf8": "C599",
"data": "0810080110afc05ff11ef6ef7006fffc0000bff30000000000afa9ffd0afffffd0afff9870aff30000aff00000aff00000aff00000aff00000aff00000aff00000aff00000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "0a0f0b000f01ef60df70003ffcfa000005ffc0000000000000005ceec60009ffffffb02ffc439ff55ff60007741fffc9620004efffffb0000369dff82771000efc2ffb315ffb08fffffff3005cefd920"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "0b100a00100000000188100000006fe000cfd009f8000cfd00df3000cfd0000007ffffff30007ffffff300048efe88100000cfd00000000cfd00000000cfd00000000cfd00000000cfd00000000cff541000009ffff3000001afff3000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0b100d011000000000000000002ff80000000cfb00000006fd000000000000000aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff39ff00007ff37ff5000bff33fff97cfff309fffffeff3006cfd74ff3"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0b110d0111000013000000004ffc0000000ba2f5000000ac6f40000002cf9000000000000000aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff39ff00007ff37ff5000bff33fff97cfff309fffffeff3006cfd74ff30"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0c140b0010000000000000000000bfd000000006fe200000001ff30000000000000000cfe00000cfe06ff40002ff901ffa0007ff300aff000dfe0004ff602ff80000efc08ff300008ff2dfd000002ffdff7000000cffff20000006fffc00000001fff700000000bff100000467ffc000000bffff5000000bffe7000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "0a100a001003c8007730009f98fd00000dffe200000288300000000000004ffffffff34ffffffff316666affe100001eff400000dff600000bff9000008ffb000005ffd000003fff8666625ffffffff55ffffffff5"
}
]

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save