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
pull/3491/head
grdddj 9 months ago
parent c09f9e88e2
commit 7f1a5ac4c1

@ -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

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

@ -82,6 +82,70 @@ core device test:
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
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
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:
stage: test
<<: *gitlab_caching
@ -114,6 +178,72 @@ 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"
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"
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 asan test:
stage: test
<<: *gitlab_caching
@ -327,6 +457,68 @@ core click test:
expire_in: 1 week
when: always
core click test czech:
stage: test
<<: *gitlab_caching
needs:
- core unix frozen debug build
variables:
TREZOR_PROFILING: 1
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
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
# Click tests.
# See [docs/tests/click-tests](../tests/click-tests.md) for more info.
core click R test:
@ -358,6 +550,66 @@ core click R test:
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
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
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
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
reports:
junit: tests/junit.xml
expire_in: 1 week
when: always
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)
}
/**
* Response: Device asks for more data from transaction payload.
* @end
* @next TranslationDataAck
*/
message TranslationDataRequest {
required uint32 data_length = 1; // Number of bytes being requested (<= 1024)
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 (<= 1024 bytes)
}
/**
* 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"

@ -202,6 +202,7 @@ SOURCE_MOD += [
CPPDEFINES_MOD += [
'TREZOR_UI2',
'TRANSLATIONS',
]
if TREZOR_MODEL not in ('1', ):
@ -713,6 +714,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')

@ -217,6 +217,7 @@ elif TREZOR_MODEL in ('R', ):
CPPDEFINES_MOD += [
'TREZOR_UI2',
'TRANSLATIONS',
]
if TREZOR_MODEL not in ('1', ):
CPPDEFINES_MOD += [
@ -370,6 +371,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',
@ -791,6 +793,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:

@ -17,6 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <string.h>
#include "py/mphal.h"
@ -26,10 +27,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 +314,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 +480,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, 75, 48, 0, 8, 255, 64, 0, 11, 254, 0, 0, 79, 243, 0, 2, 255, 80, 0, 47, 246, 0, 2, 255, 96, 0, 31, 247, 0, 0, 207, 210, 0, 2, 223, 242, 0, 45, 255, 32, 12, 253, 32, 1, 255, 112, 0, 47, 246, 0, 2, 255, 96, 0, 47, 245, 0, 4, 255, 48, 0, 191, 224, 0, 143, 244, 0, 4, 179, 0, 0 };
/* ~ */ static const uint8_t Font_Roboto_Bold_20_glyph_126[] = { 11, 5, 13, 1, 8, 6, 239, 195, 0, 42, 149, 255, 255, 246, 9, 252, 207, 198, 207, 255, 255, 109, 227, 0, 143, 255, 160, 0, 0, 0, 20, 32, 0 };
const uint8_t Font_Roboto_Bold_20_glyph_nonprintable[] = { 10, 14, 10, 0, 14, 255, 130, 1, 58, 255, 244, 0, 0, 0, 127, 176, 1, 152, 0, 15, 128, 10, 255, 80, 12, 255, 255, 255, 64, 13, 255, 255, 250, 0, 63, 255, 255, 160, 1, 223, 255, 254, 0, 29, 255, 255, 248, 0, 191, 255, 255, 246, 1, 255, 255, 255, 255, 255, 255, 255, 255, 249, 20, 255, 255, 255, 242, 0, 207, 255, 255, 248, 4, 255, 255 };
/* ? */ const uint8_t Font_Roboto_Bold_20_glyph_nonprintable[] = { 10, 14, 10, 0, 14, 255, 130, 1, 58, 255, 244, 0, 0, 0, 127, 176, 1, 152, 0, 15, 128, 10, 255, 80, 12, 255, 255, 255, 64, 13, 255, 255, 250, 0, 63, 255, 255, 160, 1, 223, 255, 254, 0, 29, 255, 255, 248, 0, 191, 255, 255, 246, 1, 255, 255, 255, 255, 255, 255, 255, 255, 249, 20, 255, 255, 255, 242, 0, 207, 255, 255, 248, 4, 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, 137, 16, 0, 4, 237, 16, 0, 3, 249, 0, 0, 14, 224, 0, 0, 207, 0, 0, 12, 240, 0, 0, 207, 0, 0, 10, 242, 0, 0, 79, 177, 0, 0, 127, 241, 0, 29, 248, 0, 8, 245, 0, 0, 191, 16, 0, 12, 240, 0, 0, 207, 0, 0, 12, 240, 0, 0, 237, 0, 0, 95, 128, 0, 94, 209, 0, 8, 145, 0, 0 };
/* ~ */ static const uint8_t Font_Roboto_Regular_20_glyph_126[] = { 12, 4, 14, 1, 8, 4, 223, 214, 0, 2, 179, 63, 218, 239, 178, 26, 241, 159, 16, 9, 255, 255, 112, 35, 0, 0, 55, 131, 0 };
const uint8_t Font_Roboto_Regular_20_glyph_nonprintable[] = { 9, 14, 9, 0, 14, 255, 147, 1, 93, 255, 96, 21, 64, 30, 224, 47, 255, 128, 125, 122, 255, 252, 5, 255, 255, 255, 160, 143, 255, 255, 225, 14, 255, 255, 226, 10, 255, 255, 243, 10, 255, 255, 251, 6, 255, 255, 255, 128, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 10, 255, 255, 255, 144, 175, 255 };
/* ? */ const uint8_t Font_Roboto_Regular_20_glyph_nonprintable[] = { 9, 14, 9, 0, 14, 255, 147, 1, 93, 255, 96, 21, 64, 30, 224, 47, 255, 128, 125, 122, 255, 252, 5, 255, 255, 255, 160, 143, 255, 255, 225, 14, 255, 255, 226, 10, 255, 255, 243, 10, 255, 255, 251, 6, 255, 255, 255, 128, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 10, 255, 255, 255, 144, 175, 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, 87, 16, 0, 9, 254, 16, 0, 7, 250, 0, 0, 31, 240, 0, 0, 255, 32, 0, 15, 243, 0, 0, 255, 48, 0, 14, 244, 0, 0, 143, 193, 0, 0, 159, 251, 0, 9, 255, 160, 8, 252, 16, 0, 239, 64, 0, 15, 243, 0, 0, 255, 48, 0, 15, 242, 0, 2, 255, 0, 0, 159, 144, 0, 175, 209, 0, 4, 96, 0, 0 };
/* ~ */ static const uint8_t Font_RobotoMono_Medium_20_glyph_126[] = { 12, 5, 12, 0, 8, 4, 222, 196, 0, 2, 97, 47, 255, 255, 128, 9, 243, 143, 96, 94, 254, 223, 224, 89, 0, 2, 191, 254, 48, 0, 0, 0, 1, 32, 0 };
const uint8_t Font_RobotoMono_Medium_20_glyph_nonprintable[] = { 10, 16, 12, 1, 15, 255, 252, 153, 191, 255, 254, 48, 0, 1, 175, 242, 0, 102, 32, 13, 192, 11, 255, 224, 8, 234, 175, 255, 242, 7, 255, 255, 255, 208, 10, 255, 255, 255, 48, 47, 255, 255, 244, 1, 223, 255, 255, 80, 29, 255, 255, 255, 0, 191, 255, 255, 255, 34, 239, 255, 255, 255, 255, 255, 255, 255, 255, 153, 255, 255, 255, 250, 0, 175, 255, 255, 252, 0, 223, 255, 255, 255, 255, 255, 255 };
/* ? */ const uint8_t Font_RobotoMono_Medium_20_glyph_nonprintable[] = { 10, 16, 12, 1, 15, 255, 252, 153, 191, 255, 254, 48, 0, 1, 175, 242, 0, 102, 32, 13, 192, 11, 255, 224, 8, 234, 175, 255, 242, 7, 255, 255, 255, 208, 10, 255, 255, 255, 48, 47, 255, 255, 244, 1, 223, 255, 255, 80, 29, 255, 255, 255, 0, 191, 255, 255, 255, 34, 239, 255, 255, 255, 255, 255, 255, 255, 255, 153, 255, 255, 255, 250, 0, 175, 255, 255, 252, 0, 223, 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, 20, 48, 0, 6, 255, 209, 0, 111, 255, 160, 0, 30, 253, 0, 0, 191, 208, 0, 11, 253, 0, 0, 191, 224, 0, 8, 255, 192, 0, 8, 255, 0, 2, 223, 240, 0, 159, 247, 0, 11, 254, 0, 0, 191, 208, 0, 11, 253, 0, 21, 255, 192, 6, 255, 248, 0, 111, 233, 0, 0 };
/* ~ */ static const uint8_t Font_TTHoves_Bold_17_glyph_126[] = { 10, 4, 10, 0, 7, 0, 38, 32, 0, 0, 8, 255, 249, 111, 248, 47, 255, 255, 255, 244, 95, 243, 75, 254, 112 };
const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 130, 2, 110, 255, 48, 0, 0, 30, 160, 2, 114, 0, 138, 85, 223, 192, 6, 255, 255, 245, 0, 159, 255, 210, 0, 111, 255, 245, 0, 175, 255, 255, 32, 79, 255, 255, 254, 238, 255, 255, 255, 51, 111, 255, 255, 240, 3, 255, 255, 255, 0, 63, 255 };
/* ? */ const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 130, 2, 110, 255, 48, 0, 0, 30, 160, 2, 114, 0, 138, 85, 223, 192, 6, 255, 255, 245, 0, 159, 255, 210, 0, 111, 255, 245, 0, 175, 255, 255, 32, 79, 255, 255, 254, 238, 255, 255, 255, 51, 111, 255, 255, 240, 3, 255, 255, 255, 0, 63, 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, 22, 82, 0, 4, 255, 248, 0, 79, 255, 242, 0, 8, 255, 64, 0, 79, 245, 0, 4, 255, 80, 0, 79, 245, 0, 4, 255, 80, 0, 47, 250, 16, 0, 175, 252, 0, 0, 159, 192, 0, 223, 250, 0, 63, 248, 0, 4, 255, 80, 0, 79, 245, 0, 4, 255, 80, 0, 95, 245, 1, 108, 255, 64, 79, 255, 224, 4, 255, 195, 0 };
/* ~ */ static const uint8_t Font_TTHoves_DemiBold_21_glyph_126[] = { 12, 5, 12, 0, 8, 0, 125, 233, 16, 9, 148, 7, 255, 255, 211, 95, 246, 14, 255, 239, 255, 255, 242, 31, 248, 4, 239, 255, 144, 4, 82, 0, 23, 132, 0 };
const uint8_t Font_TTHoves_DemiBold_21_glyph_nonprintable[] = { 11, 15, 11, 0, 15, 255, 213, 32, 38, 239, 255, 160, 0, 0, 0, 207, 225, 0, 70, 32, 1, 251, 0, 95, 255, 48, 12, 217, 157, 255, 247, 0, 175, 255, 255, 254, 16, 13, 255, 255, 249, 0, 5, 255, 255, 249, 0, 8, 255, 255, 255, 32, 11, 255, 255, 255, 240, 4, 255, 255, 255, 255, 85, 159, 255, 255, 255, 255, 255, 255, 255, 255, 254, 17, 95, 255, 255, 255, 224, 4, 255, 255, 255, 254, 0, 79, 255, 255 };
/* ? */ const uint8_t Font_TTHoves_DemiBold_21_glyph_nonprintable[] = { 11, 15, 11, 0, 15, 255, 213, 32, 38, 239, 255, 160, 0, 0, 0, 207, 225, 0, 70, 32, 1, 251, 0, 95, 255, 48, 12, 217, 157, 255, 247, 0, 175, 255, 255, 254, 16, 13, 255, 255, 249, 0, 5, 255, 255, 249, 0, 8, 255, 255, 255, 32, 11, 255, 255, 255, 240, 4, 255, 255, 255, 255, 85, 159, 255, 255, 255, 255, 255, 255, 255, 255, 254, 17, 95, 255, 255, 255, 224, 4, 255, 255, 255, 254, 0, 79, 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, 21, 48, 0, 79, 248, 0, 0, 175, 0, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 111, 48, 0, 29, 212, 0, 3, 231, 0, 63, 145, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 127, 16, 0, 127, 16, 22, 222, 0, 79, 212, 0 };
/* ~ */ static const uint8_t Font_TTHoves_Regular_21_glyph_126[] = { 11, 4, 12, 0, 8, 0, 22, 81, 0, 3, 80, 79, 255, 227, 0, 220, 12, 211, 61, 249, 191, 112, 232, 0, 9, 238, 128 };
const uint8_t Font_TTHoves_Regular_21_glyph_nonprintable[] = { 10, 15, 11, 0, 15, 255, 196, 17, 58, 255, 249, 0, 69, 16, 111, 224, 46, 255, 244, 11, 160, 175, 255, 254, 6, 254, 255, 255, 255, 4, 255, 255, 255, 252, 6, 255, 255, 255, 226, 12, 255, 255, 250, 16, 191, 255, 255, 160, 61, 255, 255, 255, 64, 239, 255, 255, 255, 49, 255, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 255, 255, 255, 255, 16, 255, 255 };
/* ? */ const uint8_t Font_TTHoves_Regular_21_glyph_nonprintable[] = { 10, 15, 11, 0, 15, 255, 196, 17, 58, 255, 249, 0, 69, 16, 111, 224, 46, 255, 244, 11, 160, 175, 255, 254, 6, 254, 255, 255, 255, 4, 255, 255, 255, 252, 6, 255, 255, 255, 226, 12, 255, 255, 250, 16, 191, 255, 255, 160, 61, 255, 255, 255, 64, 239, 255, 255, 255, 49, 255, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 255, 255, 255, 255, 16, 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,

@ -104,9 +104,9 @@
/* { */ static const uint8_t Font_Unifont_Regular_16_glyph_123[] = { 4, 13, 7, 1, 11, 52, 66, 36, 132, 34, 68, 48 };
/* | */ static const uint8_t Font_Unifont_Regular_16_glyph_124[] = { 1, 14, 7, 3, 12, 255, 252 };
/* } */ 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
/* ~ */ static const uint8_t Font_Unifont_Regular_16_glyph_126[] = { 7, 3, 7, 0, 11, 99, 38, 48 };
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,

@ -18,19 +18,27 @@
*/
#include "fonts.h"
#include <stdbool.h>
#include <stdio.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;
}
@ -38,13 +46,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;
@ -130,31 +138,46 @@ 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);
bool is_printable = c_2bytes != 0x7F;
if (!c_2bytes) return 0;
#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);
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;
@ -180,6 +203,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,16 @@ const flash_area_t BOARDLOADER_AREA = {
},
};
const flash_area_t TRANSLATIONS_AREA = {
.num_subareas = 1,
.subarea[0] =
{
// TODO: can we use the 4th sector?
.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,6 @@
typedef struct {
const uint8_t* ptr;
uint32_t len;
} PointerData;
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("address_details__account").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"));
}
}

@ -8,6 +8,7 @@ use crate::{
event::USBEvent,
geometry::{Alignment2D, Insets, Offset, Point, Rect},
layout::util::get_user_custom_image,
translations::tr,
},
};
@ -82,7 +83,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);
@ -192,9 +197,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)),
@ -264,7 +269,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,
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,26 +26,32 @@ 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};
@ -59,10 +65,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.

@ -19,7 +19,7 @@ use crate::{
use super::super::theme;
const BOTTOM_DESCRIPTION_MARGIN: i16 = 10;
const LOADER_Y_OFFSET_TITLE: i16 = -10;
const LOADER_Y_OFFSET_TITLE: i16 = 0;
const LOADER_Y_OFFSET_NO_TITLE: i16 = -20;
pub struct Progress<T>

@ -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("confirm_total__account").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").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("address_details__account").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").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,957 @@
{
"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.4"
},
"translations": {
"addr_mismatch": {
"contact_support": "Prosím, obraťte se na podporu Trezor na",
"key_mismatch": "Nesouhlasí klíč?",
"mismatch": "Nesouhlasí adresa?",
"support_url": "trezor.io/support",
"title": "NESOUHLASÍ ADRESA?",
"title_key_mismatch": "NESOUHLASÍ KLÍČ?",
"wrong_derication_path": "Špatná derivační cesta pro zvolený účet.",
"xpub_mismatch": "Nesouhlasí XPUB?"
},
"address": {
"address": "Adresa:",
"public_key": "Veřejný klíč",
"title_cosigner": "SPOLUPODEPSÁNÍ",
"title_receive_address": "ADRESA PRO PŘIJETÍ",
"title_yours": "VAŠE"
},
"address_details": {
"account": "Účet:",
"derivation_path": "Cesta odvození:",
"title_receive_address": "PŘIJMOUT ADRESU",
"title_receiving_to": "PŘIJÍMÁNÍ DO"
},
"authenticate": {
"confirm_template": "Povolit připojený počítač potvrdit váš {} je pravý?",
"header": "Ověřené zařízení"
},
"auto_lock": {
"change_template": "Automaticky zamknout Trezor po {} nečinnosti?",
"title": "AUTO-ZÁMKOVÁNÍ"
},
"backup": {
"can_back_up_anytime": "Svůj Trezor můžete zálohovat jednou, kdykoli.",
"it_should_be_backed_up": "Měli byste nyní zálohovat svou novou peněženku.",
"it_should_be_backed_up_now": "Proveďte zálohu!",
"new_wallet_created": "Nová peněženka vytvořena.",
"new_wallet_successfully_created": "Nová peněženka úspěšně vytvořena.",
"recover_anytime": "Kdykoli můžete použít zálohu k obnovení peněženky.",
"title_backup_wallet": "ZÁLOHOVAT PENĚŽENKU",
"title_skip": "PŘESKOČIT ZÁLOHU",
"want_to_skip": "Jste si jisti, že chcete přeskočit zálohu?"
},
"binance": {
"buy": "Koupit",
"confirm_cancel": "Potvrdit zrušení",
"confirm_input": "Potvrdit vstup",
"confirm_order": "Potvrdit objednávku",
"confirm_output": "Potvrdit výstup",
"order_id": "ID objednávky:",
"pair": "Pár:",
"price": "Cena:",
"quantity": "Množství:",
"sell": "Prodat",
"sender_address": "Adresa odesílatele:",
"side": "Strana:",
"unknown": "Neznámý"
},
"bitcoin": {
"commitment_data": "Data závazku:",
"confirm_locktime": "Potvrdit locktime",
"create_proof_of_ownership": "Chcete vytvořit důkaz vlastnictví?",
"high_mining_fee_template": "Poplatek za těžbu\n{}\nje neočekávaně vysoký.",
"locktime_no_effect": "Locktime je nastaven, ale nebude mít žádný účinek.",
"locktime_set_to": "Locktime nastaven:",
"locktime_set_to_blockheight": "Locktime nastaven na výšku bloku:",
"lot_of_change_outputs": "Mnoho výstupů změn.",
"multiple_accounts": "Více účtů",
"new_fee_rate": "Nová sazba poplatku:",
"simple_send_of": "Jednoduché odeslání",
"ticket_amount": "Částka lístku:",
"title_confirm_details": "POTVRDIT DETAILY",
"title_finalize_transaction": "DOKONČIT TRANSAKCI",
"title_high_mining_fee": "VYSOKÝ POPLATEK ZA TĚŽBU",
"title_meld_transaction": "SPOJIT TRANSAKCE",
"title_modify_amount": "UPRAVIT ČÁSTKU",
"title_payjoin": "PAYJOIN",
"title_proof_of_ownership": "DŮKAZ VLASTNICTVÍ",
"title_purchase_ticket": "KOUPIT LÍSTEK",
"title_update_transaction": "AKTUALIZOVAT TRANSAKCI",
"unknown_path": "Neznámá cesta",
"unknown_transaction": "Neznámá transakce",
"unusually_high_fee": "Neobvykle vysoký poplatek.",
"unverified_external_inputs": "Transakce obsahuje neověřené vnější vstupy.",
"valid_signature": "Podpis je platný.",
"voting_rights": "Právo hlasovat pro:"
},
"buttons": {
"abort": "ZRUŠIT",
"access": "PŘÍSTUP",
"again": "ZNOVU",
"allow": "DOVOLIT",
"back_up": "ZÁLOHOVAT",
"cancel": "ZRUŠIT",
"change": "ZMĚNIT",
"check": "ZKONTROLOVAT",
"check_again": "ZKONTROLOVAT ZNOVU",
"close": "ZAVŘÍT",
"confirm": "POTVRDIT",
"continue": "POKRAČOVAT",
"details": "DETAILY",
"enable": "POVOLIT",
"enter": "ZADAT",
"enter_share": "ZADAT PODÍL",
"export": "EXPORTOVAT",
"format": "FORMÁTOVAT",
"go_back": "VRÁTIT",
"hold_to_confirm": "PODRŽTE",
"info": "INFORMACE",
"install": "NAINSTALUJTE",
"more_info": "VÍCE INFORMACÍ",
"ok_i_understand": "OK, CHÁPU",
"purchase": "KOUPI",
"quit": "UKONČIT",
"restart": "RESTARTOVAT",
"retry": "ZNOVU",
"select": "VYBRAT",
"set": "NASTAVIT",
"show_all": "UKÁZAT VŠE",
"show_words": "UKÁZAT SLOVA",
"skip": "PŘESKOČIT",
"try_again": "ZKUSIT ZNOVU",
"turn_off": "VYPNOUT",
"turn_on": "ZAPNOUT"
},
"cardano": {
"addr_base": "Základ",
"addr_enterprise": "Podnik",
"addr_legacy": "Dědictví",
"addr_pointer": "Ukazatel",
"addr_reward": "Odměna",
"address_no_staking": "adresa - žádné odměny za stávkování.",
"amount": "Částka:",
"amount_burned_decimals_unknown": "Spálená částka:",
"amount_minted_decimals_unknown": "Vytvořená částka:",
"amount_sent_decimals_unknown": "Odeslána částka (desetinná čára neznámá):",
"anonymous_pool": "Pool nemá metadata (anonymní pool)",
"asset_fingerprint": "Otisk aktiv:",
"auxiliary_data_hash": "Hash pomocných dat:",
"block": "Blok",
"catalyst": "Katalyzátor",
"certificate": "Certifikát",
"certificate_path": "Cesta certifikátu",
"change_output": "Změnit výstup",
"change_output_path": "Cesta změny výstupu",
"change_output_staking_path": "Cesta stávkování změny výstupu",
"check_all_items": "Pečlivě zkontrolujte všechny položky.",
"choose_level_of_details": "Vyberte úroveň detailů:",
"collateral_input_id": "ID vstupu zajištění:",
"collateral_input_index": "Index vstupu zajištění:",
"collateral_output_contains_tokens": "Výstup zajištění obsahuje tokeny.",
"collateral_return": "Návrat zajištění",
"confirm": "Potvrdit:",
"confirm_signing_stake_pool": "Potvrdit podepsání registrace stávkového poolu jako vlastníka.",
"confirm_transaction": "Potvrdit transakci",
"confirming_a_multisig_transaction": "Potvrzování multisig transakce.",
"confirming_pool_registration": "Potvrzení registrace stávkového poolu.",
"confirming_transction": "Potvrzení transakce.",
"cost": "Náklady",
"credential_mismatch": "Pověření neodpovídá platebnímu pověření.",
"datum_hash": "Datum hash:",
"delegating_to": "Delegace na:",
"for_account_and_index_template": "pro účet {} a index {}:",
"for_account_template": "pro účet {}:",
"for_key_hash": "pro hash klíče:",
"for_script": "pro skript:",
"inline_datum": "Vložená data",
"input_id": "ID vstupu:",
"input_index": "Index vstupu:",
"intro_text_address": "Adresa",
"intro_text_change": "Následující adresa je adresa změny. Její",
"intro_text_owned_by_device": "Následující adresa patří tomuto zařízení. Její",
"intro_text_registration_payment": "Adresa platby za registraci hlasovacího klíče patří tomuto zařízení. Její",
"key_hash": "hash klíče",
"margin": "Marže",
"multisig_path": "cesta multi-podpisu",
"nested_scripts_template": "Obsahuje {} vnořené skripty.",
"network": "Síť:",
"no_output_tx": "Transakce nemá výstupy, síť nelze ověřit.",
"nonce": "Nonce:",
"other": "jiné",
"path": "cesta",
"pledge": "Záruka",
"pointer": "ukazatel",
"policy_id": "ID politiky:",
"pool_metadata_hash": "Hash metadat poolu:",
"pool_metadata_url": "URL metadat poolu:",
"pool_owner": "Vlastník poolu:",
"pool_owner_path": "Cesta stávkování vlastníka poolu",
"pool_reward_account": "Účet odměn poolu:",
"reference_input_id": "ID referenčního vstupu:",
"reference_input_index": "Index referenčního vstupu:",
"reference_script": "Referenční skript",
"required_signer": "Požadovaný podepsaný",
"reward": "odměna",
"reward_address": "Adresa je odměna.",
"reward_eligibility_warning": "Varování: Adresa není platná adresa pro platby, není způsobilá pro odměny.",
"rewards_go_to": "Odměny jdou na:",
"script": "skript",
"script_all": "Vše",
"script_any": "Jakýkoliv",
"script_data_hash": "Hash dat skriptu:",
"script_hash": "Skript hash:",
"script_invalid_before": "Neplatné před",
"script_invalid_hereafter": "Neplatné odteď",
"script_key": "Klíč",
"script_n_of_k": "N z K",
"script_reward": "odměna skriptu",
"sending": "Odesílání",
"show_simple": "Zobrazit jednoduše",
"sign_tx_path_template": "Podepsat transakci pomocí {}:",
"stake_delegation": "Delegace stávky",
"stake_deregistration": "Zrušení registrace stávkového klíče",
"stake_pool_registration": "Registrace stávkového poolu",
"stake_pool_registration_pool_id": "Registrace stávkového poolu\nID poolu:",
"stake_registration": "Registrace stávkového klíče",
"staking_key_for_account": "Stávkový klíč pro účet",
"to_pool": "do poolu:",
"token_minting_path": "cesta ražby tokenů",
"total_collateral": "Celkové zajištění",
"transaction": "Transakce",
"transaction_contains_minting_or_burning": "Transakce obsahuje ražbu nebo spálení tokenů.",
"transaction_contains_script_address_no_datum": "Následující výstup transakce obsahuje skriptovou adresu, ale neobsahuje data.",
"transaction_fee": "Poplatek za transakci:",
"transaction_id": "ID transakce:",
"transaction_no_collateral_input": "Transakce neobsahuje vstupy zajištění. Skript Plutus nebude moci běžet.",
"transaction_no_script_data_hash": "Transakce neobsahuje hash dat skriptu. Skript Plutus nebude moci běžet.",
"transaction_output_contains_tokens": "Následující výstup transakce obsahuje tokeny.",
"ttl": "TTL:",
"unknown": "Neznámý",
"unknown_collateral_amount": "Neznámá částka zajištění.",
"unusual_path": "Neobvyklá cesta.",
"valid_since": "Platné od:",
"verify_script": "Ověřit skript",
"vote_key_registration": "Registrace hlasovacího klíče (CIP-36)",
"vote_public_key": "Veřejný klíč hlasování:",
"voting_purpose": "Účel hlasování:",
"warning": "Varování",
"weight": "Váha:",
"withdrawal_for_address_template": "Potvrdit výběr pro adresu {}:",
"witness_path": "Cesta svědka",
"x_of_y_signatures_template": "Vyžaduje {} z {} podpisů."
},
"coinjoin": {
"access_account": "Přístup k vašemu coinjoin účtu?",
"do_not_disconnect": "Neodpojujte svůj Trezor!",
"max_mining_fee": "Maximální poplatek za těžbu:",
"max_rounds": "Maximální počet kol:",
"title": "AUTORIZOVAT COINJOIN",
"title_do_not_disconnect": "NEODPOJUJTE SVŮJ TREZOR!",
"title_progress": "COINJOIN V PRŮBĚHU",
"waiting_for_others": "Čekání na ostatní"
},
"confirm_total": {
"account": "Účet:",
"fee_rate": "Sazba poplatku:",
"sending_from_account": "Odesílání z účtu:",
"title_fee": "INFORMACE O POPLATKU",
"title_sending_from": "ODESLÁNÍ OD"
},
"debug": {
"loading_seed": "Načítání seedu",
"loading_seed_not_recommended": "Načítání soukromého seedu není doporučeno."
},
"device_name": {
"change_template": "Změnit název zařízení na {}?",
"title": "NÁZEV ZAŘÍZENÍ"
},
"entropy": {
"send": "Opravdu chcete odeslat entropii?",
"title": "VNITŘNÍ ENTROPIE",
"title_confirm": "POTVRDIT ENTROPII"
},
"eos": {
"about_to_sign_template": "Chystáte se podepsat {}.",
"account": "Účet:",
"action_name": "Název akce:",
"amount": "Částka:",
"arbitrary_data": "Libovolná data",
"buy_ram": "Koupit RAM",
"bytes": "Byty:",
"cancel_vote": "Zrušit hlasování",
"checksum": "Kontrolní součet:",
"code": "Kód:",
"contract": "Smlouva:",
"cpu": "CPU:",
"creator": "Tvůrce:",
"delegate": "Delegovat",
"delete_auth": "Smazat ověření",
"from": "Od:",
"link_auth": "Propojit ověření",
"memo": "Poznámka",
"name": "Jméno:",
"net": "NET:",
"new_account": "Nový účet",
"no": "Ne",
"owner": "Vlastník:",
"parent": "Rodič:",
"payer": "Plátce:",
"permission": "Oprávnění:",
"proxy": "Proxy:",
"receiver": "Příjemce:",
"refund": "Vrátit peníze",
"requirement": "Požadavek:",
"sell_ram": "Prodat RAM",
"sender": "Odesílatel:",
"sign_transaction": "Podepsat transakci",
"threshold": "Práh:",
"to": "Do:",
"transfer": "Převod:",
"type": "Typ:",
"undelegate": "Zrušit delegaci",
"unlink_auth": "Odpojit ověření",
"update_auth": "Aktualizovat ověření",
"vote_for_producers": "Hlasovat pro producenty",
"vote_for_proxy": "Hlasovat pro proxy",
"voter": "Volitel:",
"yes": "Ano"
},
"ethereum": {
"amount_sent": "Odeslaná částka:",
"confirm_fee": "Potvrdit poplatek",
"contract": "Smlouva:",
"data_size_template": "Velikost: {} bajtů",
"gas_limit": "Limit plynu:",
"gas_price": "Cena plynu:",
"max_gas_price": "Maximální cena plynu:",
"name_and_version": "Jméno a verze",
"new_contract": "nová smlouva?",
"no_message_field": "Žádné pole zprávy",
"priority_fee": "Prioritní poplatek:",
"show_full_array": "Zobrazit celé pole",
"show_full_domain": "Zobrazit celou doménu",
"show_full_message": "Zobrazit celou zprávu",
"show_full_struct": "Zobrazit celou strukturu",
"sign_eip712": "Opravdu podepsat data podle EIP-712?",
"title_confirm_data": "POTVRDIT DATA",
"title_confirm_domain": "POTVRDIT DOMÉNU",
"title_confirm_message": "POTVRDIT ZPRÁVU",
"title_confirm_struct": "POTVRDIT STRUKTURU",
"title_confirm_typed_data": "POTVRDIT ZAPSANÁ DATA",
"title_signing_address": "ADRESA PRO PODEPSÁNÍ",
"units_template": "{} jednotek",
"unknown_token": "Neznámý token",
"valid_signature": "Podpis je platný."
},
"experimental_mode": {
"enable": "Povolit experimentální funkce?",
"only_for_dev": "Pouze pro vývoj a beta testování!",
"title": "EXPERIMENTÁLNÍ REŽIM"
},
"fido": {
"already_registered": "Již zaregistrováno",
"device_already_registered": "Toto zařízení je již zaregistrováno s touto aplikací.",
"device_already_registered_with_template": "Toto zařízení je již zaregistrováno s {}.",
"device_not_registered": "Toto zařízení není zaregistrováno s touto aplikací.",
"does_not_belong": "Kredence nepatří tomuto autentikátoru.",
"erase_credentials": "Opravdu chcete smazat všechny pověření?",
"export_credentials": "Exportovat informace z tohoto autentikátoru?",
"not_registered": "Není zaregistrováno",
"not_registered_with_template": "Toto zařízení není zaregistrováno s\n{}.",
"please_enable_pin_protection": "Prosím, povolte ochranu PIN.",
"title_authenticate": "FIDO2 AUTENTIZACE",
"title_import_credential": "IMPORTOVAT KREDENCE",
"title_list_credentials": "UKAŽ KREDENCE",
"title_register": "FIDO2 REGISTRACE",
"title_remove_credential": "ODSTRANIT KREDENCE",
"title_reset": "RESET FIDO2",
"title_u2f_auth": "U2F AUTENTIZACE",
"title_u2f_register": "U2F REGISTRACE",
"title_verify_user": "FIDO2 OVĚŘIT UŽIVATELE",
"unable_to_verify_user": "Nelze ověřit uživatele.",
"wanna_erase_credentials": "Opravdu chcete smazat všechny přihlašovací údaje?"
},
"firmware_update": {
"title": "AKTUALIZOVAT FIRMWARE",
"title_fingerprint": "FW OTISKY PRSTŮ"
},
"homescreen": {
"click_to_connect": "Klikněte pro připojení",
"click_to_unlock": "Klikněte pro odemčení",
"title_backup_failed": "ZÁLOHA SELHALA",
"title_backup_needed": "ZÁLOHA POTŘEBNÁ",
"title_coinjoin_authorized": "COINJOIN AUTORIZOVÁNO",
"title_experimental_mode": "EXPERIMENTÁLNÍ REŽIM",
"title_hold_to_lock": "DRŽET PRO ZAMKNUTÍ",
"title_no_usb_connection": "ŽÁDNÉ USB PŘIPOJENÍ",
"title_pin_not_set": "PIN NEBYL NASTAVEN",
"title_seedless": "BEZ SEMÍNKA",
"title_set": "ZMĚNIT ÚVODNÍ OBRAZOVKU?"
},
"inputs": {
"back": "ZPĚT",
"cancel": "ZRUŠIT",
"delete": "SMAZAT",
"enter": "ZADAT",
"return": "VRÁTIT",
"show": "UKÁZAT",
"space": "MEZERNÍK"
},
"joint": {
"title": "SPOLEČNÁ TRANSAKCE",
"to_the_total_amount": "Celkové částce:",
"you_are_contributing": "Přispíváte:"
},
"lockscreen": {
"tap_to_connect": "Klepněte pro připojení",
"tap_to_unlock": "Klepněte pro odemčení",
"title_locked": "ZAMKNUTO",
"title_not_connected": "NEPŘIPOJENO"
},
"misc": {
"decrypt_value": "Dešifrovat hodnotu",
"encrypt_value": "Zašifrovat hodnotu",
"title_suite_labeling": "OZNAČENÍ SUITE"
},
"modify_amount": {
"address": "Adresa:",
"decrease_amount": "Snížit částku o:",
"increase_amount": "Zvýšit částku o:",
"new_amount": "Nová částka:",
"title": "UPRAVIT ČÁSTKU"
},
"modify_fee": {
"decrease_fee": "Snížit poplatek o:",
"fee_rate": "Sazba poplatku:",
"increase_fee": "Zvýšit poplatek o:",
"new_transaction_fee": "Nový transakční poplatek:",
"no_change": "Váš poplatek se nezměnil.",
"title": "UPRAVIT POPLATEK",
"transaction_fee": "Transakční poplatek:"
},
"monero": {
"confirm_export": "Potvrdit export",
"confirm_fee": "Potvrdit poplatek",
"confirm_ki_sync": "Potvrdit synchronizaci klíčových obrázků",
"confirm_refresh": "Potvrdit obnovení",
"confirm_unlock_time": "Potvrdit čas odemknutí",
"hashing_inputs": "Hašování vstupů",
"payment_id": "ID platby",
"postprocessing": "Dokončování zpracování...",
"processing": "Zpracovávání...",
"processing_inputs": "Zpracování vstupů",
"processing_outputs": "Zpracování výstupů",
"signing": "Podepisování...",
"signing_inputs": "Podepisování vstupů",
"unlock_time_set_template": "Čas odemknutí této transakce je nastaven na {}",
"wanna_export_tx_der": "Opravdu chcete exportovat tx_der pro tx_proof?",
"wanna_export_tx_key": "Opravdu chcete exportovat tx_key?",
"wanna_export_watchkey": "Opravdu chcete exportovat pouze sledovací pověření?",
"wanna_start_refresh": "Opravdu chcete spustit obnovení?",
"wanna_sync_key_images": "Opravdu chcete synchronizovat klíčové obrázky?"
},
"nem": {
"absolute": "absolutní",
"activate": "Aktivovat",
"add": "Přidat",
"confirm_action": "Potvrdit akci",
"confirm_address": "Potvrdit adresu",
"confirm_creation_fee": "Potvrdit poplatek za vytvoření",
"confirm_fee": "Potvrdit poplatek",
"confirm_mosaic": "Potvrdit mozaiku",
"confirm_multisig_fee": "Potvrdit vícepodepisový poplatek",
"confirm_namespace": "Potvrdit jmenný prostor",
"confirm_payload": "Potvrdit náklad",
"confirm_properties": "Potvrdit vlastnosti",
"confirm_rental_fee": "Potvrdit nájemné",
"confirm_transfer_of": "Potvrdit převod",
"convert_account_to_multisig": "Převést účet na vícepodepisový účet?",
"cosign_transaction_for": "Spolupodepsat transakci pro",
"cosignatory": " spolupodepisovatel",
"create_mosaic": "Vytvořit mozaiku",
"create_namespace": "Vytvořit jmenný prostor",
"deactivate": "Deaktivovat",
"decrease": "Snížit",
"description": "Popis:",
"divisibility_and_levy_cannot_be_shown": "Dělitelnost a zpoplatnění nelze zobrazit pro neznámé mozaiky",
"encrypted": "Zašifrované:",
"final_confirm": "Konečné potvrzení",
"immutable": "neměnitelný",
"increase": "Zvýšit",
"initial_supply": "Počáteční zásoba:",
"initiate_transaction_for": "Zahájit transakci pro",
"levy_divisibility": "Dělitelnost zpoplatnění:",
"levy_fee": "Poplatek za zpoplatnění:",
"levy_fee_of": "Poplatek ze zpoplatnění:",
"levy_mosaic": "Mozaika zpoplatnění:",
"levy_namespace": "Jmenný prostor zpoplatnění:",
"levy_recipient": "Příjemce zpoplatnění:",
"levy_type": "Typ zpoplatnění:",
"modify_supply_for": "Upravit zásobu pro",
"modify_the_number_of_cosignatories_by": "Upravit počet spolupodepisovatelů o ",
"mutable": "měnitelný",
"no": "Ne",
"of": "z",
"percentile": "percentil",
"raw_units_template": "{} surové jednotky",
"remote_harvesting": " vzdálená sklizeň?",
"remove": "Odebrat",
"set_minimum_cosignatories_to": "Nastavit minimální počet spolupodepisovatelů na ",
"sign_tx_fee_template": "Podepsat tuto transakci\na zaplatit {}\nza síťový poplatek?",
"supply_change": "Změna zásob",
"supply_units_template": "{} zásoby po {} celých jednotkách?",
"transferable": "Přenosné?",
"under_namespace": "pod jmenným prostorem",
"unencrypted": "Nezašifrované:",
"unknown_mosaic": "Neznámá mozaika!",
"yes": "Ano"
},
"passphrase": {
"access_hidden_wallet": "Přistoupit ke skryté peněžence?",
"always_on_device": "Opravdu chcete heslo vždy zadávat na zařízení?",
"from_host_not_shown": "Heslo poskytnuté hostitelem bude použita, ale nebude zobrazeno kvůli nastavení zařízení.",
"hidden_wallet": "Skrytá peněženka",
"hide": "Skrýt heslo pocházející z hostitele?",
"next_screen_will_show_passphrase": "Další obrazovka zobrazí heslo.",
"please_enter": "Prosím, zadejte své heslo.",
"revoke_on_device": "Chcete zrušit nastavení hesla na zařízení?",
"title_confirm": "POTVRDIT HESLO",
"title_enter": "ZADAT HESLO",
"title_hide": "SKRÝT HESLO",
"title_settings": "NASTAVENÍ HESLA",
"title_source": "ZDROJ HESLA",
"turn_off": "Vypnout ochranu heslem?",
"turn_on": "Zapnout ochranu heslem?"
},
"pin": {
"change": "Změnit PIN?",
"changed": "PIN změněn",
"cursor_will_change": "Pozice kurzoru se bude mezi zadáními měnit pro zvýšení bezpečnosti.",
"diff_from_wipe_code": "PIN nesmí být stejný jako kód pro vymazání.",
"disabled": "Ochrana PIN vypnuta.",
"enabled": "Ochrana PIN zapnuta.",
"enter": "Zadat PIN",
"enter_new": "Zadejte nový PIN",
"entered_not_valid": "Zadaný PIN není platný.",
"info": "PIN bude vyžadován pro přístup k tomuto zařízení.",
"invalid_pin": "Neplatný PIN",
"last_attempt": "Poslední pokus",
"mismatch": "Zadané PINy nesouhlasí!",
"pin_mismatch": "NESHODA PIN",
"please_check_again": "Zkontrolujte prosím znovu.",
"reenter_new": "Znovu PIN",
"reenter_to_confirm": "Pro potvrzení znovu zadejte PIN.",
"should_be_long": "PIN by měl být 4-50 číslic dlouhý.",
"title_check_pin": "ZKONTROLOVAT PIN",
"title_settings": "NASTAVENÍ PINU",
"title_wrong_pin": "ŠPATNÝ ŠPENDLÍK",
"tries_left": "zbývající pokusy",
"turn_off": "Opravdu chcete vypnout ochranu PIN?",
"turn_on": "Zapnout ochranu PIN?",
"wrong_pin": "Špatný PIN"
},
"plurals": {
"contains_x_keys": "klíč|klíče|klíčů",
"lock_after_x_hours": "hodině|hodinách|hodinách",
"lock_after_x_milliseconds": "milisekundě|milisekundách|milisekundách",
"lock_after_x_minutes": "minutě|minutách|minutách",
"lock_after_x_seconds": "sekundě|sekundách|sekundách",
"sign_x_actions": "akci|akce|akcí",
"transaction_of_x_operations": "operace|operací|operací",
"x_groups_needed": "skupina|skupiny|skupin",
"x_shares_needed": "podíl|podíly|podílů"
},
"progress": {
"authenticity_check": "Kontrola autentičnosti ...",
"done": "Hotovo",
"loading_transaction": "Načítání transakce...",
"one_second_left": "Zbývá 1 sekunda",
"please_wait": "PROSÍM ČEKEJTE",
"processing": "PROCESOVÁNÍ",
"refreshing": "Obnovování...",
"signing_transaction": "Podpis transakce...",
"syncing": "Synchronizace...",
"x_seconds_left_template": "Zbývá {} sekund"
},
"reboot_to_bootloader": {
"restart": "Chcete restartovat Trezor v režimu bootloader?",
"title": "PŘEJÍT DO REŽIMU BOOTLOADER",
"version_by_template": "Verze firmwaru {}\nod {}"
},
"recovery": {
"cancel_dry_run": "Zrušit kontrolu zálohy",
"check_dry_run": "Zkontrolovat zálohu?",
"cursor_will_change": "Pozice kurzoru se změní mezi položkami pro zvýšenou bezpečnost.",
"dry_run_bip39_valid_match": "Zadané záchranné semínko je platné a odpovídá tomu v zařízení.",
"dry_run_bip39_valid_mismatch": "Zadané záchranné semínko je platné, ale neodpovídá tomu v zařízení.",
"dry_run_slip39_valid_match": "Zadané záchranné podíly jsou platné a odpovídají tomu, co je aktuálně v zařízení.",
"dry_run_slip39_valid_mismatch": "Zadané záchranné podíly jsou platné, ale neodpovídají tomu, co je aktuálně v zařízení.",
"enter_any_share": "Zadejte libovolný podíl",
"enter_backup": "Zadejte svou zálohu",
"enter_different_share": "Zadejte prosím odlišný podíl.",
"enter_share_from_diff_group": "Zadejte podíl z odlišné skupiny.",
"group_num_template": "Skupina {}",
"group_threshold_reached": "Práh skupiny dosažen.",
"invalid_seed_entered": "Zadáno neplatné záchranné semínko.",
"invalid_share_entered": "Zadán neplatný záchranný podíl.",
"more_shares_needed": "Potřebuje se více podílů",
"num_of_words": "Vyberte počet slov ve vaší záloze.",
"only_first_n_letters": "Budete muset vybrat pouze první 2-4 písmena každého slova.",
"progress_will_be_lost": "Veškerý pokrok bude ztracen.",
"select_num_of_words": "Vyberte počet slov ve vaší záloze.",
"share_already_entered": "Podíl již byl zadán",
"share_from_another_shamir": "Zadali jste podíl z jiného Shamir Backupu.",
"share_num_template": "Podíl {}",
"title": "OBNOVIT PENĚŽENKU",
"title_cancel_dry_run": "ZRUŠIT KONTROLU ZÁLOHY",
"title_cancel_recovery": "ZRUŠIT OBNOVENÍ",
"title_dry_run": "KONTROLA ZÁLOHY",
"title_recover": "OBNOVIT PENĚŽENKU",
"title_remaining_shares": "ZBÝVAJÍCÍ PODÍLY",
"type_word_x_of_y_template": "Napište slovo {} z {}",
"wallet_recovered": "Peněženka úspěšně obnovena",
"wanna_cancel_dry_run": "Jste si jisti, že chcete zrušit kontrolu zálohy?",
"wanna_cancel_recovery": "Jste si jisti, že chcete zrušit proces obnovení?",
"word_count_template": "({} slov)",
"word_x_of_y_template": "SLOVO {} Z {}",
"x_more_items_starting_template_plural": "Ještě {count} {plural} začínající",
"x_more_shares_needed_template_plural": "Potřebujete ještě {count} {plural}.",
"x_of_y_entered_template": "{} z {} podílů úspěšně zadáno.",
"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.",
"all_x_of_y_template": "všechny {} z {} podílů",
"any_x_of_y_template": "libovolný {} z {} podílů",
"button_create": "VYTVOŘIT PENĚŽENKU",
"button_recover": "OBNOVIT PENĚŽENKU",
"by_continuing": "Pokračováním souhlasíte s podmínkami společnosti Trezor.",
"check_backup_title": "ZKONTROLOVAT ZÁLOHU",
"check_group_share_title_template": "KONTROLA G{} - PODÍL {}",
"check_seed_title": "ZKONTROLOVAT SEED",
"check_share_title_template": "KONTROLA PODÍL #{}",
"continue_with_next_share": "Pokračujte s dalším podílem.",
"continue_with_share_template": "Pokračujte s podílem #{}.",
"finished_verifying_group_template": "Dokončili jste ověření svých záchranných podílů pro skupinu {}.",
"finished_verifying_seed": "Dokončili jste ověření svého záchranného semínka.",
"finished_verifying_shares": "Dokončili jste ověření svých záchranných podílů.",
"group_description": "Skupina se skládá z obnovovacích podílů.",
"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.",
"group_share_checked_successfully_template": "Skupina {} - Podíl {} úspěšně zkontrolován.",
"group_share_title_template": "SKUPINA {} - PODÍL {}",
"more_info_at": "Více informací na",
"need_all_share_template": "K obnovení budete potřebovat všechny {} podíly.",
"need_any_share_template": "K obnovení budete potřebovat libovolný {} z podílů.",
"needed_to_form_a_group": "potřebné k vytvoření skupiny. ",
"needed_to_recover_your_wallet": "potřebné k obnovení vaší peněženky. ",
"never_make_digital_copy": "Nikdy nedělejte digitální kopii své zálohy nebo ji neukládejte online!",
"num_of_share_holders_template": "{} lidí nebo míst bude držet jeden podíl.",
"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 {}.",
"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.",
"num_shares_for_group_template": "Požadovaný počet podílů pro vytvoření skupiny {}.",
"number_of_shares_info": "= celkový počet unikátních seznamů slov použitých pro zálohu peněženky.",
"one_share": "1 podíl",
"only_one_share_will_be_created": "Bude vytvořen pouze jeden podíl.",
"recovery_seed_title": "OBNOVIT SEED",
"recovery_share_title_template": "OBNOVIT PODÍL #{}",
"required_number_of_groups": "Požadovaný počet skupin pro obnovení.",
"select_correct_word": "Vyberte správné slovo pro každou pozici.",
"select_word_template": "VYBRAT {} SLOVO",
"select_word_x_of_y_template": "Vyberte slovo {} z {}:",
"set_it_to_count_template": "Nastavte na {} a budete potřebovat ",
"share_checked_successfully_template": "Záchranný podíl #{} úspěšně zkontrolován.",
"share_words_title": "STANDARDNÍ ZÁLOHA",
"slip39_checklist_num_groups": "Počet skupin",
"slip39_checklist_num_shares": "Počet podílů",
"slip39_checklist_set_num_groups": "Nastavit počet skupin",
"slip39_checklist_set_num_shares": "Nastavit počet akcií",
"slip39_checklist_set_sizes": "Nastavit velikosti a prahy",
"slip39_checklist_set_sizes_longer": "Nastavit velikosti a prahové hodnoty pro každou skupinu",
"slip39_checklist_set_threshold": "Nastavit práh",
"slip39_checklist_title": "KONTROLNÍ SEZNAM ZÁLOHY",
"slip39_checklist_write_down": "Zapsat a ověřit podíly",
"slip39_checklist_write_down_recovery": "Zapište si a zkontrolujte všechny obnovovací akcie",
"the_threshold_sets_the_number_of_shares": "Prah určuje počet podílů ",
"threshold_info": "= minimální počet unikátních seznamů slov použitých pro obnovení.",
"title_backup_is_done": "ZÁLOHA JE HOTOVÁ",
"title_create_wallet": "VYTVOŘIT PENĚŽENKU",
"title_create_wallet_shamir": "VYTVOŘIT PENĚŽENKU (SHAMIR)",
"title_group_threshold": "PRÁH SKUPINY",
"title_number_of_groups": "POČET SKUPIN",
"title_number_of_shares": "POČET PODÍLŮ",
"title_set_group_threshold": "NASTAVIT PRAHOVÝ POČET SKUPIN",
"title_set_number_of_groups": "NASTAVIT POČET SKUPIN",
"title_set_number_of_shares": "NASTAVIT POČET PODÍLŮ",
"title_set_threshold": "NASTAVIT PRAH",
"to_form_group_template": "pro vytvoření skupiny {}.",
"tos_link": "trezor.io/tos",
"total_number_of_shares_in_group_template": "Nastavte celkový počet podílů ve skupině {}.",
"use_your_backup": "Použijte zálohu, pokud potřebujete obnovit svou peněženku.",
"write_down_words_template": "Zapište všechna {} slova v pořadí.",
"wrong_word_selected": "Vybráno nesprávné slovo!",
"you_need_one_share": "K obnovení potřebujete 1 podíl.",
"your_backup_is_done": "Vaše záloha je hotova."
},
"ripple": {
"confirm_tag": "Potvrdit značku",
"destination_tag_template": "Cílová značka: {}"
},
"rotation": {
"change_template": "Chcete změnit rotaci zařízení na {}?",
"east": "východ",
"north": "sever",
"south": "jih",
"title_change": "ZMĚNIT ROTACI",
"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é.",
"approve_unsafe_temporary": "Trezor vám dočasně umožní schválit některé akce, které by mohly být nebezpečné.",
"enforce_strict": "Opravdu chcete vynutit přísné kontroly bezpečnosti (doporučeno)?",
"title": "KONTROLY BEZPEČNOSTI",
"title_safety_override": "PŘEPÍNÁNÍ BEZPEČNOSTI"
},
"sd_card": {
"all_data_will_be_lost": "Všechna data na SD kartě budou ztracena.",
"card_required": "Vyžadována SD karta.",
"disable": "Opravdu chcete odebrat ochranu SD karty ze svého zařízení?",
"disabled": "Úspěšně jste zakázali ochranu SD karty.",
"enable": "Opravdu chcete zajistit své zařízení ochranou SD karty?",
"enabled": "Úspěšně jste povolili ochranu SD karty.",
"error": "Chyba SD karty",
"format_card": "Naformátovat SD kartu",
"insert_correct_card": "Vložte do zařízení správnou SD kartu.",
"please_insert": "Vložte prosím vaši SD kartu.",
"please_unplug_and_insert": "Odpojte prosím zařízení a vložte vaši SD kartu.",
"problem_accessing": "Došlo k problému při přístupu k SD kartě.",
"refresh": "Opravdu chcete nahradit aktuální tajemství SD karty nově vygenerovaným?",
"refreshed": "Úspěšně jste obnovili ochranu SD karty.",
"restart": "Chcete restartovat Trezor v režimu bootloader?",
"title": "OCHRANA SD KARTY",
"title_problem": "PROBLÉM SE SD KARTOU",
"unknown_filesystem": "Neznámý souborový systém",
"unplug_and_insert_correct": "Odpojte zařízení a vložte správnou SD kartu.",
"use_different_card": "Použijte jinou kartu nebo naformátujte SD kartu na souborový systém FAT32",
"wanna_format": "Opravdu chcete naformátovat SD kartu?",
"wrong_sd_card": "Špatná SD karta"
},
"send": {
"address_path": "Adresová cesta",
"amount": "Částka:",
"confirm_sending": "Potvrdit_odeslání",
"from_multiple_accounts": "Odesílání z více účtů.",
"including_fee": "Včetně poplatku:",
"maximum_fee": "Maximální poplatek:",
"receiving_to_multisig": "Přijímání na multisig adresu.",
"title_amount": "ČÁSTKA",
"title_confirm_sending": "POTVRDIT ODESLÁNÍ",
"title_joint_transaction": "SPOLEČNÁ TRANSAKCE",
"title_receiving_to": "PŘIJÍMÁNÍ NA",
"title_recipient": "PŘÍJEMCE",
"title_sending": "ODESÍLÁNÍ",
"title_sending_amount": "ČÁSTKA K ODESLÁNÍ",
"title_sending_to": "ODESLÁNÍ NA",
"to_the_total_amount": "Celková částka:",
"total_amount": "Celková částka:",
"transaction_id": "ID transakce:",
"you_are_contributing": "Přispíváte:"
},
"share_words": {
"words_in_order": " slova v pořadí.",
"wrote_down_all": "Napsal jsem všechny "
},
"sign_message": {
"bytes_template": "{} Bajty",
"confirm_address": "POTVRDIT ADRESU",
"confirm_message": "POTVRDIT ZPRÁVU",
"message_size": "Velikost zprávy:",
"verify_address": "Ověřte adresu"
},
"stellar": {
"account": "Účet",
"account_merge": "Sloučení účtů",
"account_thresholds": "Práhové hodnoty účtu",
"add_signer": "Přidat podepisovatele",
"add_trust": "Přidat důvěru",
"all_will_be_sent_to": "Vše XLM bude odesláno na:",
"allow_trust": "Povolit důvěru",
"asset": "Aktiva",
"bump_sequence": "Zvýšit sekvenci",
"buying": "Kupování:",
"clear_data": "Vymazat data",
"clear_flags": "Vymazat příznaky",
"confirm_issuer": "Potvrdit vydavatele",
"confirm_memo": "Potvrdit poznámku",
"confirm_network": "Potvrdit síť",
"confirm_operation": "Potvrdit operaci",
"confirm_stellar": "Potvrdit Stellar",
"confirm_timebounds": "Potvrdit časová omezení",
"create_account": "Vytvořit účet",
"debited_amount": "Odepsaná částka",
"delete": "Smazat",
"delete_passive_offer": "Smazat pasivní nabídku",
"delete_trust": "Smazat důvěru",
"destination": "Cíl:",
"exchanges_require_memo": "Důležité: Mnoho směnáren vyžaduje poznámku při vkladu",
"final_confirm": "Konečné potvrzení",
"hash": "Haš:",
"high": "Vysoký:",
"home_domain": "Domovská doména",
"inflation": "Inflace",
"initial_balance": "Počáteční zůstatek",
"initialize_signing_with": "Inicializovat podepisování s",
"issuer_template": "{} vydavatel:",
"key": "Klíč:",
"limit": "Limit:",
"low": "Nízký:",
"master_weight": "Hlavní váha:",
"medium": "Střední:",
"new_offer": "Nová nabídka",
"new_passive_offer": "Nová pasivní nabídka",
"no_memo_set": "Žádná poznámka nenastavena!",
"no_restriction": "[bez omezení]",
"on_network_template": "Transakce je na {}",
"path_pay": "Platba cestou",
"path_pay_at_least": "Platba cestou alespoň",
"pay": "Platit:",
"pay_at_most": "Zaplatit nejvýše:",
"preauth_transaction": "Předautentizovaná transakce:",
"price_per_template": "Cena za {}:",
"private_network": "soukromá síť",
"remove_signer": "Odebrat podepisovatele",
"revoke_trust": "Zrušit důvěru",
"selling": "Prodej:",
"set_data": "Nastavit data",
"set_flags": "Nastavit příznaky",
"set_sequence_to_template": "Nastavit sekvenci na {}?",
"sign_tx_count_template": "Podepsat tuto transakci složenou z {}",
"sign_tx_fee_template": "a zaplatit {} za poplatek?",
"source_account": "Zdrojový účet:",
"testnet_network": "testovací síť",
"trusted_account": "Důvěryhodný účet",
"update": "Aktualizovat",
"valid_from": "Platné od (UTC)",
"valid_to": "Platné do (UTC)",
"value_sha256": "Hodnota (SHA-256):",
"wanna_clean_value_key_template": "Chcete vymazat klíč hodnoty {}?",
"your_account": "váš účet"
},
"tezos": {
"address": "Adresa:",
"amount": "Částka:",
"baker_address": "Adresa pekaře:",
"balance": "Zůstatek:",
"ballot": "Hlasovací lístek:",
"confirm_delegation": "Potvrdit delegaci",
"confirm_origination": "Potvrdit vznik",
"delegator": "Delegátor:",
"fee": "Poplatek:",
"proposal": "Návrh",
"register_delegate": "Registrovat delegáta",
"remove_delegation": "Odstranit delegaci",
"submit_ballot": "Odeslat hlasovací lístek",
"submit_proposal": "Předložit návrh",
"submit_proposals": "Předložit návrhy"
},
"tutorial": {
"middle_click": "Stiskněte současně vlevo a vpravo pro potvrzení.",
"press_and_hold": "Stiskněte a podržte pravé tlačítko pro schválení důležitých operací.",
"ready_to_use": "Jste připraveni používat Trezor.",
"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.",
"sure_you_want_skip": "Jste si jisti, že chcete tutoriál přeskočit?",
"title_hello": "AHOJ",
"title_screen_scroll": "POSUN OBRAZOVKY",
"title_skip": "PŘESKOČIT TUTORIÁL",
"title_tutorial_complete": "TUTORIÁL DOKONČEN",
"use_trezor": "Trezor má levé a pravé tlačítko.\n\rPokračujte vpravo.",
"welcome_press_right": "Vítejte v Trezoru. Stiskněte vpravo pro pokračování."
},
"u2f": {
"get": "Zvýšit a získat U2F čítač?",
"set_template": "Nastavit U2F čítač na {}?",
"title_get": "ZÍSKAT U2F ČÍTAČ",
"title_set": "NASTAVIT U2F ČÍTAČ"
},
"wipe": {
"info": "Všechna data budou smazána.",
"title": "VYMAZAT ZAŘÍZENÍ",
"want_to_wipe": "Opravdu chcete vymazat zařízení?\n"
},
"wipe_code": {
"change": "Změnit kód pro vymazání?",
"changed": "Kód pro vymazání změněn",
"diff_from_pin": "Kód pro vymazání musí být odlišný od vašeho PINu.\nZkuste to prosím znovu.",
"disabled": "Kód pro vymazání zakázán.",
"enabled": "Kód pro vymazání povolen.",
"enter_new": "Zadejte nový kód pro vymazání",
"info": "Kód vymaže všechna data z tohoto zařízení.",
"invalid": "Neplatný kód pro vymazání",
"mismatch": "Zadané kódy pro vymazání nesouhlasí!",
"reenter": "Znovu zadejte kód pro vymazání",
"reenter_to_confirm": "Pro potvrzení znovu zadejte kód pro vymazání.",
"title_check": "ZKONTROLOVAT KÓD PRO VYMAZÁNÍ",
"title_invalid": "NEPLATNÝ KÓD PRO VYMAZÁNÍ",
"title_settings": "NASTAVENÍ VÝMAZU",
"turn_off": "Vypnout ochranu kódem pro vymazání?",
"turn_on": "Zapnout ochranu kódem pro vymazání?",
"wipe_code_mismatch": "NESHODA KÓDU PRO VYMAZÁNÍ"
},
"word_count": {
"title": "POČET SLOV"
},
"words": {
"are_you_sure": "Jste si jisti?",
"array_of": "Pole o",
"buying": "Koupit",
"confirm": "Potvrdit",
"contains": "Obsahuje",
"continue_anyway": "Přesto pokračovat?",
"continue_with": "Pokračovat s",
"error": "Chyba",
"from": "od",
"keep_it_safe": "Uchovávejte v bezpečí!",
"know_what_your_doing": "Pokračujte pouze, pokud víte, co děláte!",
"my_trezor": "Můj Trezor",
"outputs": "výstupy",
"please_check_again": "Zkontrolujte to prosím znovu",
"please_try_again": "Zkuste to prosím znovu",
"really_wanna": "Opravdu chcete",
"sign": "Podepsat",
"title_check": "KONTROLA",
"title_group": "SKUPINA",
"title_information": "INFORMACE",
"title_remember": "PAMATOVAT",
"title_share": "PODÍL",
"title_shares": "PODÍLY",
"title_success": "ÚSPĚCH",
"title_summary": "SHRNUTÍ",
"title_threshold": "PRÁH",
"unknown": "Neznámý",
"warning": "Varování"
}
}
}

@ -0,0 +1,841 @@
//! generated from cs.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
// NOTE: not used as a code, only for
// documentation purposes
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
addr_mismatch__contact_support: "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_derication_path: "Špatná derivační cesta pro zvolený účet.",
addr_mismatch__xpub_mismatch: "Nesouhlasí XPUB?",
address__address: "Adresa:",
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__account: "Účet:",
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:",
binance__unknown: "Neznámý",
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_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_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: "Částka:",
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_address: "Adresa",
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: "Neznámý",
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__account: "Účet:",
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__account: "Účet:",
eos__action_name: "Název akce:",
eos__amount: "Částka:",
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__no: "Ne",
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:",
eos__yes: "Ano",
ethereum__amount_sent: "Odeslaná částka:",
ethereum__confirm_fee: "Potvrdit poplatek",
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__address: "Adresa:",
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_fee: "Potvrdit poplatek",
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_fee: "Potvrdit poplatek",
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__no: "Ne",
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!",
nem__yes: "Ano",
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__amount: "Částka:",
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_amount: "ČÁSTKA",
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_recipient: "PŘÍJEMCE",
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",
stellar__account: "Účet",
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__bump_sequence: "Zvýšit sekvenci",
stellar__buying: "Kupování:",
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__address: "Adresa:",
tezos__amount: "Částka:",
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__fee: "Poplatek:",
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__are_you_sure: "Jste si jisti?",
words__array_of: "Pole o",
words__buying: "Koupit",
words__confirm: "Potvrdit",
words__contains: "Obsahuje",
words__continue_anyway: "Přesto pokračovat?",
words__continue_with: "Pokračovat s",
words__error: "Chyba",
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__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__sign: "Podepsat",
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í",
};

@ -0,0 +1,33 @@
//! generated from cs.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
// NOTE: not used as a code, only for
// documentation purposes
<%
import json
from pathlib import Path
THIS = Path(local.filename).resolve()
SRCDIR = THIS.parent
file = SRCDIR / "cs.json"
data = json.loads(file.read_text())["translations"]
items_to_write: list[tuple[str, str]] = []
for section_name, section in data.items():
for k, v in section.items():
name = f"{section_name}__{k}"
items_to_write.append((name, v))
items_to_write.sort(key=lambda x: x[0])
%>\
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
% for k, v in items_to_write:
${k}: ${utf8_str(v)},
% endfor
};

@ -0,0 +1,939 @@
{
"header": {
"language": "en",
"version": "2.6.4"
},
"translations": {
"addr_mismatch": {
"contact_support": "Please contact Trezor support at",
"key_mismatch": "Key mismatch?",
"mismatch": "Address mismatch?",
"support_url": "trezor.io/support",
"title": "ADDRESS MISMATCH?",
"title_key_mismatch": "KEY MISMATCH?",
"wrong_derication_path": "Wrong derivation path for selected account.",
"xpub_mismatch": "XPUB mismatch?"
},
"address": {
"address": "Address:",
"public_key": "Public key",
"title_cosigner": "COSIGNER",
"title_receive_address": "RECEIVE ADDRESS",
"title_yours": "YOURS"
},
"address_details": {
"account": "Account:",
"derivation_path": "Derivation path:",
"title_receive_address": "RECEIVE ADDRESS",
"title_receiving_to": "RECEIVING TO"
},
"authenticate": {
"confirm_template": "Allow connected computer to confirm your {} is genuine?",
"header": "Authenticate device"
},
"auto_lock": {
"change_template": "Auto-lock your Trezor after {} of inactivity?",
"title": "AUTO-LOCK DELAY"
},
"backup": {
"can_back_up_anytime": "You can back up your Trezor once, at any time.",
"it_should_be_backed_up": "You should back up your new wallet right now.",
"it_should_be_backed_up_now": "It should be backed up now!",
"new_wallet_created": "New wallet created.",
"new_wallet_successfully_created": "New wallet created successfully.",
"recover_anytime": "You can use your backup to recover your wallet at any time.",
"title_backup_wallet": "BACK UP WALLET",
"title_skip": "SKIP BACKUP",
"want_to_skip": "Are you sure you want to skip the backup?"
},
"binance": {
"buy": "Buy",
"confirm_cancel": "Confirm cancel",
"confirm_input": "Confirm input",
"confirm_order": "Confirm order",
"confirm_output": "Confirm output",
"order_id": "Order ID:",
"pair": "Pair:",
"price": "Price:",
"quantity": "Quantity:",
"sell": "Sell",
"sender_address": "Sender address:",
"side": "Side:",
"unknown": "Unknown"
},
"bitcoin": {
"commitment_data": "Commitment data:",
"confirm_locktime": "Confirm locktime",
"create_proof_of_ownership": "Do you want to create a proof of ownership?",
"high_mining_fee_template": "The mining fee of\n{}\nis unexpectedly high.",
"locktime_no_effect": "Locktime is set but will have no effect.",
"locktime_set_to": "Locktime set to:",
"locktime_set_to_blockheight": "Locktime set to blockheight:",
"lot_of_change_outputs": "A lot of change-outputs.",
"multiple_accounts": "Multiple accounts",
"new_fee_rate": "New fee rate:",
"simple_send_of": "Simple send of",
"ticket_amount": "Ticket amount:",
"title_confirm_details": "CONFIRM DETAILS",
"title_finalize_transaction": "FINALIZE TRANSACTION",
"title_high_mining_fee": "HIGH MINING FEE",
"title_meld_transaction": "MELD TRANSACTIONS",
"title_modify_amount": "MODIFY AMOUNT",
"title_payjoin": "PAYJOIN",
"title_proof_of_ownership": "PROOF OF OWNERSHIP",
"title_purchase_ticket": "PURCHASE TICKET",
"title_update_transaction": "UPDATE TRANSACTION",
"unknown_path": "Unknown path",
"unknown_transaction": "Unknown transaction",
"unusually_high_fee": "Unusually high fee.",
"unverified_external_inputs": "The transaction contains unverified external inputs.",
"valid_signature": "The signature is valid.",
"voting_rights": "Voting rights to:"
},
"buttons": {
"abort": "ABORT",
"access": "ACCESS",
"again": "AGAIN",
"allow": "ALLOW",
"back_up": "BACK UP",
"cancel": "CANCEL",
"change": "CHANGE",
"check": "CHECK",
"check_again": "CHECK AGAIN",
"close": "CLOSE",
"confirm": "CONFIRM",
"continue": "CONTINUE",
"details": "DETAILS",
"enable": "ENABLE",
"enter": "ENTER",
"enter_share": "ENTER SHARE",
"export": "EXPORT",
"format": "FORMAT",
"go_back": "GO BACK",
"hold_to_confirm": "HOLD TO CONFIRM",
"info": "INFO",
"install": "INSTALL",
"more_info": "MORE INFO",
"ok_i_understand": "OK, I UNDERSTAND",
"purchase": "PURCHASE",
"quit": "QUIT",
"restart": "RESTART",
"retry": "RETRY",
"select": "SELECT",
"set": "SET",
"show_all": "SHOW ALL",
"show_words": "SHOW WORDS",
"skip": "SKIP",
"try_again": "TRY AGAIN",
"turn_off": "TURN OFF",
"turn_on": "TURN ON"
},
"cardano": {
"addr_base": "Base",
"addr_enterprise": "Enterprise",
"addr_legacy": "Legacy",
"addr_pointer": "Pointer",
"addr_reward": "Reward",
"address_no_staking": "address - no staking rewards.",
"amount": "Amount:",
"amount_burned_decimals_unknown": "Amount burned (decimals unknown):",
"amount_minted_decimals_unknown": "Amount minted (decimals unknown):",
"amount_sent_decimals_unknown": "Amount sent (decimals unknown):",
"anonymous_pool": "Pool has no metadata (anonymous pool)",
"asset_fingerprint": "Asset fingerprint:",
"auxiliary_data_hash": "Auxiliary data hash:",
"block": "Block",
"catalyst": "Catalyst",
"certificate": "Certificate",
"certificate_path": "Certificate path",
"change_output": "Change output",
"change_output_path": "Change output path",
"change_output_staking_path": "Change output staking path",
"check_all_items": "Check all items carefully.",
"choose_level_of_details": "Choose level of details:",
"collateral_input_id": "Collateral input ID:",
"collateral_input_index": "Collateral input index:",
"collateral_output_contains_tokens": "The collateral return output contains tokens.",
"collateral_return": "Collateral return",
"confirm": "Confirm:",
"confirm_signing_stake_pool": "Confirm signing the stake pool registration as an owner.",
"confirm_transaction": "Confirm transaction",
"confirming_a_multisig_transaction": "Confirming a multisig transaction.",
"confirming_pool_registration": "Confirming pool registration as owner.",
"confirming_transction": "Confirming a transaction.",
"cost": "Cost",
"credential_mismatch": "Credential doesn't match payment credential.",
"datum_hash": "Datum hash:",
"delegating_to": "Delegating to:",
"for_account_and_index_template": "for account {} and index {}:",
"for_account_template": "for account {}:",
"for_key_hash": "for key hash:",
"for_script": "for script:",
"inline_datum": "Inline datum",
"input_id": "Input ID:",
"input_index": "Input index:",
"intro_text_address": "Address",
"intro_text_change": "The following address is a change address. Its",
"intro_text_owned_by_device": "The following address is owned by this device. Its",
"intro_text_registration_payment": "The vote key registration payment address is owned by this device. Its",
"key_hash": "key hash",
"margin": "Margin",
"multisig_path": "multi-sig path",
"nested_scripts_template": "Contains {} nested scripts.",
"network": "Network:",
"no_output_tx": "Transaction has no outputs, network cannot be verified.",
"nonce": "Nonce:",
"other": "other",
"path": "path",
"pledge": "Pledge",
"pointer": "pointer",
"policy_id": "Policy ID:",
"pool_metadata_hash": "Pool metadata hash:",
"pool_metadata_url": "Pool metadata url:",
"pool_owner": "Pool owner:",
"pool_owner_path": "Pool owner staking path",
"pool_reward_account": "Pool reward account:",
"reference_input_id": "Reference input ID:",
"reference_input_index": "Reference input index:",
"reference_script": "Reference script",
"required_signer": "Required signer",
"reward": "reward",
"reward_address": "Address is a reward address.",
"reward_eligibility_warning": "Warning: The address is not a payment address, it is not eligible for rewards.",
"rewards_go_to": "Rewards go to:",
"script": "script",
"script_all": "All",
"script_any": "Any",
"script_data_hash": "Script data hash:",
"script_hash": "Script hash:",
"script_invalid_before": "Invalid before",
"script_invalid_hereafter": "Invalid hereafter",
"script_key": "Key",
"script_n_of_k": "N of K",
"script_reward": "script reward",
"sending": "Sending",
"show_simple": "Show Simple",
"sign_tx_path_template": "Sign transaction with {}:",
"stake_delegation": "Stake delegation",
"stake_deregistration": "Stake key deregistration",
"stake_pool_registration": "Stakepool registration",
"stake_pool_registration_pool_id": "Stake pool registration\nPool ID:",
"stake_registration": "Stake key registration",
"staking_key_for_account": "Staking key for account",
"to_pool": "to pool:",
"token_minting_path": "token minting path",
"total_collateral": "Total collateral:",
"transaction": "Transaction",
"transaction_contains_minting_or_burning": "The transaction contains minting or burning of tokens.",
"transaction_contains_script_address_no_datum": "The following transaction output contains a script address, but does not contain a datum.",
"transaction_fee": "Transaction fee:",
"transaction_id": "Transaction ID:",
"transaction_no_collateral_input": "The transaction contains no collateral inputs. Plutus script will not be able to run.",
"transaction_no_script_data_hash": "The transaction contains no script data hash. Plutus script will not be able to run.",
"transaction_output_contains_tokens": "The following transaction output contains tokens.",
"ttl": "TTL:",
"unknown": "Unknown",
"unknown_collateral_amount": "Unknown collateral amount.",
"unusual_path": "Path is unusual.",
"valid_since": "Valid since:",
"verify_script": "Verify script",
"vote_key_registration": "Vote key registration (CIP-36)",
"vote_public_key": "Vote public key:",
"voting_purpose": "Voting purpose:",
"warning": "Warning",
"weight": "Weight:",
"withdrawal_for_address_template": "Confirm withdrawal for {} address:",
"witness_path": "Witness path",
"x_of_y_signatures_template": "Requires {} out of {} signatures."
},
"coinjoin": {
"access_account": "Access your coinjoin account?",
"do_not_disconnect": "Do not disconnect your Trezor!",
"max_mining_fee": "Max mining fee",
"max_rounds": "Max rounds",
"title": "AUTHORIZE COINJOIN",
"title_do_not_disconnect": "DO NOT DISCONNECT YOUR TREZOR!",
"title_progress": "COINJOIN IN PROGRESS",
"waiting_for_others": "Waiting for others"
},
"confirm_total": {
"account": "Account:",
"fee_rate": "Fee rate:",
"sending_from_account": "Sending from account:",
"title_fee": "FEE INFORMATION",
"title_sending_from": "SENDING FROM"
},
"debug": {
"loading_seed": "Loading seed",
"loading_seed_not_recommended": "Loading private seed is not recommended."
},
"device_name": {
"change_template": "Change device name to {}?",
"title": "DEVICE NAME"
},
"entropy": {
"send": "Do you really want to send entropy?",
"title": "INTERNAL ENTROPY",
"title_confirm": "CONFIRM ENTROPY"
},
"eos": {
"about_to_sign_template": "You are about to sign {}.",
"account": "Account:",
"action_name": "Action Name:",
"amount": "Amount:",
"arbitrary_data": "Arbitrary data",
"buy_ram": "Buy RAM",
"bytes": "Bytes:",
"cancel_vote": "Cancel vote",
"checksum": "Checksum:",
"code": "Code:",
"contract": "Contract:",
"cpu": "CPU:",
"creator": "Creator:",
"delegate": "Delegate",
"delete_auth": "Delete Auth",
"from": "From:",
"link_auth": "Link Auth",
"memo": "Memo",
"name": "Name:",
"net": "NET:",
"new_account": "New account",
"no": "No",
"owner": "Owner:",
"parent": "Parent:",
"payer": "Payer:",
"permission": "Permission:",
"proxy": "Proxy:",
"receiver": "Receiver:",
"refund": "Refund",
"requirement": "Requirement:",
"sell_ram": "Sell RAM",
"sender": "Sender:",
"sign_transaction": "Sign transaction",
"threshold": "Threshold:",
"to": "To:",
"transfer": "Transfer:",
"type": "Type:",
"undelegate": "Undelegate",
"unlink_auth": "Unlink Auth",
"update_auth": "Update Auth",
"vote_for_producers": "Vote for producers",
"vote_for_proxy": "Vote for proxy",
"voter": "Voter:",
"yes": "Yes"
},
"ethereum": {
"amount_sent": "Amount sent:",
"confirm_fee": "Confirm fee",
"contract": "Contract:",
"data_size_template": "Size: {} bytes",
"gas_limit": "Gas limit:",
"gas_price": "Gas price:",
"max_gas_price": "Max gas price:",
"name_and_version": "Name and version",
"new_contract": "new contract?",
"no_message_field": "No message field",
"priority_fee": "Priority fee:",
"show_full_array": "Show full array",
"show_full_domain": "Show full domain",
"show_full_message": "Show full message",
"show_full_struct": "Show full struct",
"sign_eip712": "Really sign EIP-712 typed data?",
"title_confirm_data": "CONFIRM DATA",
"title_confirm_domain": "CONFIRM DOMAIN",
"title_confirm_message": "CONFIRM MESSAGE",
"title_confirm_struct": "CONFIRM STRUCT",
"title_confirm_typed_data": "CONFIRM TYPED DATA",
"title_signing_address": "SIGNING ADDRESS",
"units_template": "{} units",
"unknown_token": "Unknown token",
"valid_signature": "The signature is valid."
},
"experimental_mode": {
"enable": "Enable experimental features?",
"only_for_dev": "Only for development and beta testing!",
"title": "EXPERIMENTAL MODE"
},
"fido": {
"already_registered": "Already registered",
"device_already_registered": "This device is already registered with this application.",
"device_already_registered_with_template": "This device is already registered with {}.",
"device_not_registered": "This device is not registered with this application.",
"does_not_belong": "The credential you are trying to import does\nnot belong to this authenticator.",
"erase_credentials": "erase all credentials?",
"export_credentials": "Export information about the credentials stored on this device?",
"not_registered": "Not registered",
"not_registered_with_template": "This device is not registered with\n{}.",
"please_enable_pin_protection": "Please enable PIN protection.",
"title_authenticate": "FIDO2 AUTHENTICATE",
"title_import_credential": "IMPORT CREDENTIAL",
"title_list_credentials": "LIST CREDENTIALS",
"title_register": "FIDO2 REGISTER",
"title_remove_credential": "REMOVE CREDENTIAL",
"title_reset": "FIDO2 RESET",
"title_u2f_auth": "U2F AUTHENTICATE",
"title_u2f_register": "U2F REGISTER",
"title_verify_user": "FIDO2 VERIFY USER",
"unable_to_verify_user": "Unable to verify user.",
"wanna_erase_credentials": "Do you really want to erase all credentials?"
},
"firmware_update": {
"title": "UPDATE FIRMWARE",
"title_fingerprint": "FW FINGERPRINT"
},
"homescreen": {
"click_to_connect": "Click to Connect",
"click_to_unlock": "Click to Unlock",
"title_backup_failed": "BACKUP FAILED",
"title_backup_needed": "BACKUP NEEDED",
"title_coinjoin_authorized": "COINJOIN AUTHORIZED",
"title_experimental_mode": "EXPERIMENTAL MODE",
"title_hold_to_lock": "HOLD TO LOCK",
"title_no_usb_connection": "NO USB CONNECTION",
"title_pin_not_set": "PIN NOT SET",
"title_seedless": "SEEDLESS",
"title_set": "CHANGE HOMESCREEN?"
},
"inputs": {
"back": "BACK",
"cancel": "CANCEL",
"delete": "DELETE",
"enter": "ENTER",
"return": "RETURN",
"show": "SHOW",
"space": "SPACE"
},
"joint": {
"title": "JOINT TRANSACTION",
"to_the_total_amount": "To the total amount:",
"you_are_contributing": "You are contributing:"
},
"lockscreen": {
"tap_to_connect": "Tap to connect",
"tap_to_unlock": "Tap to unlock",
"title_locked": "LOCKED",
"title_not_connected": "NOT CONNECTED"
},
"misc": {
"decrypt_value": "Decrypt value",
"encrypt_value": "Encrypt value",
"title_suite_labeling": "SUITE LABELING"
},
"modify_amount": {
"address": "Address:",
"decrease_amount": "Decrease amount by:",
"increase_amount": "Increase amount by:",
"new_amount": "New amount:",
"title": "MODIFY AMOUNT"
},
"modify_fee": {
"decrease_fee": "Decrease fee by:",
"fee_rate": "Fee rate:",
"increase_fee": "Increase fee by:",
"new_transaction_fee": "New transaction fee:",
"no_change": "Your fee did not change.",
"title": "MODIFY FEE",
"transaction_fee": "Transaction fee:"
},
"monero": {
"confirm_export": "Confirm export",
"confirm_fee": "Confirm fee",
"confirm_ki_sync": "Confirm ki sync",
"confirm_refresh": "Confirm refresh",
"confirm_unlock_time": "Confirm unlock time",
"hashing_inputs": "Hashing inputs",
"payment_id": "Payment ID",
"postprocessing": "Postprocessing...",
"processing": "Processing...",
"processing_inputs": "Processing inputs",
"processing_outputs": "Processing outputs",
"signing": "Signing...",
"signing_inputs": "Signing inputs",
"unlock_time_set_template": "Unlock time for this transaction is set to {}",
"wanna_export_tx_der": "Do you really want to export tx_der\nfor tx_proof?",
"wanna_export_tx_key": "Do you really want to export tx_key?",
"wanna_export_watchkey": "Do you really want to export watch-only credentials?",
"wanna_start_refresh": "Do you really want to\nstart refresh?",
"wanna_sync_key_images": "Do you really want to\nsync key images?"
},
"nem": {
"absolute": "absolute",
"activate": "Activate",
"add": "Add",
"confirm_action": "Confirm action",
"confirm_address": "Confirm address",
"confirm_creation_fee": "Confirm creation fee",
"confirm_fee": "Confirm fee",
"confirm_mosaic": "Confirm mosaic",
"confirm_multisig_fee": "Confirm multisig fee",
"confirm_namespace": "Confirm namespace",
"confirm_payload": "Confirm payload",
"confirm_properties": "Confirm properties",
"confirm_rental_fee": "Confirm rental fee",
"confirm_transfer_of": "Confirm transfer of",
"convert_account_to_multisig": "Convert account to multisig account?",
"cosign_transaction_for": "Cosign transaction for",
"cosignatory": " cosignatory",
"create_mosaic": "Create mosaic",
"create_namespace": "Create namespace",
"deactivate": "Deactivate",
"decrease": "Decrease",
"description": "Description:",
"divisibility_and_levy_cannot_be_shown": "Divisibility and levy cannot be shown for unknown mosaics",
"encrypted": "Encrypted:",
"final_confirm": "Final confirm",
"immutable": "immutable",
"increase": "Increase",
"initial_supply": "Initial supply:",
"initiate_transaction_for": "Initiate transaction for",
"levy_divisibility": "Levy divisibility:",
"levy_fee": "Levy fee:",
"levy_fee_of": "Confirm mosaic levy fee of",
"levy_mosaic": "Levy mosaic:",
"levy_namespace": "Levy namespace:",
"levy_recipient": "Levy recipient:",
"levy_type": "Levy type:",
"modify_supply_for": "Modify supply for",
"modify_the_number_of_cosignatories_by": "Modify the number of cosignatories by ",
"mutable": "mutable",
"no": "No",
"of": "of",
"percentile": "percentile",
"raw_units_template": "{} raw units",
"remote_harvesting": " remote harvesting?",
"remove": "Remove",
"set_minimum_cosignatories_to": "Set minimum cosignatories to ",
"sign_tx_fee_template": "Sign this transaction\nand pay {}\nfor network fee?",
"supply_change": "Supply change",
"supply_units_template": "{} supply by {} whole units?",
"transferable": "Transferable?",
"under_namespace": "under namespace",
"unencrypted": "Unencrypted:",
"unknown_mosaic": "Unknown mosaic!",
"yes": "Yes"
},
"passphrase": {
"access_hidden_wallet": "Access hidden wallet?",
"always_on_device": "Do you really want to enter passphrase always on the device?",
"from_host_not_shown": "Passphrase provided by host will be used but will not be displayed due to the device settings.",
"hidden_wallet": "Hidden wallet",
"hide": "Hide passphrase coming from host?",
"next_screen_will_show_passphrase": "Next screen will show the passphrase.",
"please_enter": "Please enter your passphrase.",
"revoke_on_device": "Do you want to revoke the passphrase on device setting?",
"title_confirm": "CONFIRM PASSPHRASE",
"title_enter": "ENTER PASSPHRASE",
"title_hide": "HIDE PASSPHRASE",
"title_settings": "PASSPHRASE SETTINGS",
"title_source": "PASSPHRASE SOURCE",
"turn_off": "Turn off passphrase protection?",
"turn_on": "Turn on passphrase protection?"
},
"pin": {
"change": "Change PIN?",
"changed": "PIN changed.",
"cursor_will_change": "Position of the cursor will change between entries for enhanced security.",
"diff_from_wipe_code": "The new PIN must be different from your wipe code.",
"disabled": "PIN protection\nturned off.",
"enabled": "PIN protection\nturned on.",
"enter": "Enter PIN",
"enter_new": "Enter new PIN",
"entered_not_valid": "The PIN you have entered is not valid.",
"info": "PIN will be required to access this device.",
"invalid_pin": "Invalid PIN",
"last_attempt": "Last attempt",
"mismatch": "Entered PINs do not match!",
"pin_mismatch": "PIN mismatch",
"please_check_again": "Please check again.",
"reenter_new": "Re-enter new PIN",
"reenter_to_confirm": "Please re-enter PIN to confirm.",
"should_be_long": "PIN should be 4-50 digits long.",
"title_check_pin": "CHECK PIN",
"title_settings": "PIN SETTINGS",
"title_wrong_pin": "WRONG PIN",
"tries_left": "tries left",
"turn_off": "Are you sure you want to turn off PIN protection?",
"turn_on": "Turn on PIN protection?",
"wrong_pin": "Wrong PIN"
},
"plurals": {
"contains_x_keys": "key|keys",
"lock_after_x_hours": "hour|hours",
"lock_after_x_milliseconds": "millisecond|milliseconds",
"lock_after_x_minutes": "minute|minutes",
"lock_after_x_seconds": "second|seconds",
"sign_x_actions": "action|actions",
"transaction_of_x_operations": "operation|operations",
"x_groups_needed": "group|groups",
"x_shares_needed": "share|shares"
},
"progress": {
"authenticity_check": "Checking authenticity...",
"done": "Done",
"loading_transaction": "Loading transaction...",
"one_second_left": "1 second left",
"please_wait": "PLEASE WAIT",
"processing": "PROCESSING",
"refreshing": "Refreshing...",
"signing_transaction": "Signing transaction...",
"syncing": "Syncing...",
"x_seconds_left_template": "{} seconds left"
},
"reboot_to_bootloader": {
"restart": "Trezor will restart in bootloader mode.",
"title": "GO TO BOOTLOADER",
"version_by_template": "Firmware version {}\nby {}"
},
"recovery": {
"cancel_dry_run": "Cancel backup check",
"check_dry_run": "Check your backup?",
"cursor_will_change": "Position of the cursor will change between entries for enhanced security.",
"dry_run_bip39_valid_match": "The entered recovery seed is valid and matches the one in the device.",
"dry_run_bip39_valid_mismatch": "The entered recovery seed is valid but does not match the one in the device.",
"dry_run_slip39_valid_match": "The entered recovery shares are valid and match what is currently in the device.",
"dry_run_slip39_valid_mismatch": "The entered recovery shares are valid but do not match what is currently in the device.",
"enter_any_share": "Enter any share",
"enter_backup": "Enter your backup.",
"enter_different_share": "Please enter a different share.",
"enter_share_from_diff_group": "Enter share from a different group.",
"group_num_template": "Group {}",
"group_threshold_reached": "Group threshold reached.",
"invalid_seed_entered": "Invalid recovery seed entered.",
"invalid_share_entered": "Invalid recovery share entered.",
"more_shares_needed": "More shares needed",
"num_of_words": "Select the number of words in your backup.",
"only_first_n_letters": "You'll only have to select the first 2-4 letters of each word.",
"progress_will_be_lost": "All progress will be lost.",
"select_num_of_words": "Select the number of words in your backup.",
"share_already_entered": "Share already entered",
"share_from_another_shamir": "You have entered a share from another Shamir Backup.",
"share_num_template": "Share {}",
"title": "RECOVER WALLET",
"title_cancel_dry_run": "CANCEL BACKUP CHECK",
"title_cancel_recovery": "CANCEL RECOVERY",
"title_dry_run": "BACKUP CHECK",
"title_recover": "RECOVER WALLET",
"title_remaining_shares": "REMAINING SHARES",
"type_word_x_of_y_template": "Type word {} of {}",
"wallet_recovered": "Wallet recovered successfully",
"wanna_cancel_dry_run": "Are you sure you want to cancel the backup check?",
"wanna_cancel_recovery": "Are you sure you want to cancel the recovery process?",
"word_count_template": "({} words)",
"word_x_of_y_template": "WORD {} OF {}",
"x_more_items_starting_template_plural": "{count} more {plural} starting",
"x_more_shares_needed_template_plural": "{count} more {plural} needed.",
"x_of_y_entered_template": "{} of {} shares entered successfully.",
"you_have_entered": "You have entered"
},
"reset": {
"advanced_group_threshold_info": "The group threshold specifies the number of groups required to recover your wallet.",
"all_x_of_y_template": "all {} of {} shares",
"any_x_of_y_template": "any {} of {} shares",
"button_create": "CREATE WALLET",
"button_recover": "RECOVER WALLET",
"by_continuing": "By continuing you agree to Trezor Company's terms and conditions.",
"check_backup_title": "CHECK BACKUP",
"check_group_share_title_template": "CHECK G{} - SHARE {}",
"check_seed_title": "CHECK SEED",
"check_share_title_template": "CHECK SHARE #{}",
"continue_with_next_share": "Continue with the next share.",
"continue_with_share_template": "Continue with share #{}.",
"finished_verifying_group_template": "You have finished verifying your recovery shares for group {}.",
"finished_verifying_seed": "You have finished verifying your recovery seed.",
"finished_verifying_shares": "You have finished verifying your recovery shares.",
"group_description": "A group is made up of recovery shares.",
"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.",
"group_share_checked_successfully_template": "Group {} - Share {} checked successfully.",
"group_share_title_template": "GROUP {} - SHARE {}",
"more_info_at": "More info at",
"need_all_share_template": "For recovery you need all {} of the shares.",
"need_any_share_template": "For recovery you need any {} of the shares.",
"needed_to_form_a_group": "needed to form a group. ",
"needed_to_recover_your_wallet": "needed to recover your wallet. ",
"never_make_digital_copy": "Never make a digital copy of your backup or upload it online!",
"num_of_share_holders_template": "{} people or locations will each hold one share.",
"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 {}.",
"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.",
"num_shares_for_group_template": "The required number of shares to form Group {}.",
"number_of_shares_info": "= total number of unique word lists used for wallet backup.",
"one_share": "1 share",
"only_one_share_will_be_created": "Only one share will be created.",
"recovery_seed_title": "RECOVERY SEED",
"recovery_share_title_template": "RECOVERY SHARE #{}",
"required_number_of_groups": "The required number of groups for recovery.",
"select_correct_word": "Select the correct word for each position.",
"select_word_template": "SELECT {} WORD",
"select_word_x_of_y_template": "Select word {} of {}:",
"set_it_to_count_template": "Set it to {} and you will need ",
"share_checked_successfully_template": "Recovery share #{} checked successfully.",
"share_words_title": "STANDARD BACKUP",
"slip39_checklist_num_groups": "Number of groups",
"slip39_checklist_num_shares": "Number of shares",
"slip39_checklist_set_num_groups": "Set number of groups",
"slip39_checklist_set_num_shares": "Set number of shares",
"slip39_checklist_set_sizes": "Set sizes and thresholds",
"slip39_checklist_set_sizes_longer": "Set size and threshold for each group",
"slip39_checklist_set_threshold": "Set threshold",
"slip39_checklist_title": "BACKUP CHECKLIST",
"slip39_checklist_write_down": "Write down and check all shares",
"slip39_checklist_write_down_recovery": "Write down and check all recovery shares",
"the_threshold_sets_the_number_of_shares": "The threshold sets the number of shares ",
"threshold_info": "= minimum number of unique word lists used for recovery.",
"title_backup_is_done": "BACKUP IS DONE",
"title_create_wallet": "CREATE WALLET",
"title_create_wallet_shamir": "CREATE WALLET (SHAMIR)",
"title_group_threshold": "GROUP THRESHOLD",
"title_number_of_groups": "NUMBER OF GROUPS",
"title_number_of_shares": "NUMBER OF SHARES",
"title_set_group_threshold": "SET GROUP THRESHOLD",
"title_set_number_of_groups": "SET NUMBER OF GROUPS",
"title_set_number_of_shares": "SET NUMBER OF SHARES",
"title_set_threshold": "SET THRESHOLD",
"to_form_group_template": "to form Group {}.",
"tos_link": "trezor.io/tos",
"total_number_of_shares_in_group_template": "Set the total number of shares in Group {}.",
"use_your_backup": "Use your backup when you need to recover your wallet.",
"write_down_words_template": "Write down all {} words in order.",
"wrong_word_selected": "Wrong word selected!",
"you_need_one_share": "For recovery you need 1 share.",
"your_backup_is_done": "Your backup is done."
},
"ripple": {
"confirm_tag": "Confirm tag",
"destination_tag_template": "Destination tag:\n{}"
},
"rotation": {
"change_template": "Do you want to change device rotation to {}?",
"east": "east",
"north": "north",
"south": "south",
"title_change": "CHANGE ROTATION",
"west": "west"
},
"safety_checks": {
"approve_unsafe_always": "Trezor will allow you to approve some actions which might be unsafe.",
"approve_unsafe_temporary": "Trezor will temporarily allow you to approve some actions which might be unsafe.",
"enforce_strict": "Do you really want to enforce strict safety checks (recommended)?",
"title": "SAFETY CHECKS",
"title_safety_override": "SAFETY OVERRIDE"
},
"sd_card": {
"all_data_will_be_lost": "All data on the SD card will be lost.",
"card_required": "SD card required.",
"disable": "Do you really want to remove SD card protection from your device?",
"disabled": "You have successfully disabled SD protection.",
"enable": "Do you really want to secure your device with SD card protection?",
"enabled": "You have successfully enabled SD protection.",
"error": "SD card error",
"format_card": "Format SD card",
"insert_correct_card": "Please insert the correct SD card for this device.",
"please_insert": "Please insert your SD card.",
"please_unplug_and_insert": "Please unplug the device and insert your SD card.",
"problem_accessing": "There was a problem accessing the SD card.",
"refresh": "Do you really want to replace the current SD card secret with a newly generated one?",
"refreshed": "You have successfully refreshed SD protection.",
"restart": "Do you want to restart Trezor in bootloader mode?",
"title": "SD CARD PROTECTION",
"title_problem": "SD CARD PROBLEM",
"unknown_filesystem": "Unknown filesystem.",
"unplug_and_insert_correct": "Please unplug the device and insert the correct SD card.",
"use_different_card": "Use a different card or format the SD card to the FAT32 filesystem.",
"wanna_format": "Do you really want to format the SD card?",
"wrong_sd_card": "Wrong SD card."
},
"send": {
"address_path": "address path",
"amount": "Amount:",
"confirm_sending": "SENDING AMOUNT",
"from_multiple_accounts": "Sending from multiple accounts.",
"including_fee": "Including fee:",
"maximum_fee": "Maximum fee:",
"receiving_to_multisig": "Receiving to a multisig address.",
"title_amount": "AMOUNT",
"title_confirm_sending": "CONFIRM SENDING",
"title_joint_transaction": "JOINT TRANSACTION",
"title_receiving_to": "RECEIVING TO",
"title_recipient": "RECIPIENT",
"title_sending": "SENDING",
"title_sending_amount": "SENDING AMOUNT",
"title_sending_to": "SENDING TO",
"to_the_total_amount": "To the total amount:",
"total_amount": "Total amount:",
"transaction_id": "Transaction ID:",
"you_are_contributing": "You are contributing:"
},
"share_words": {
"words_in_order": " words in order.",
"wrote_down_all": "I wrote down all "
},
"sign_message": {
"bytes_template": "{} Bytes",
"confirm_address": "SIGNING ADDRESS",
"confirm_message": "CONFIRM MESSAGE",
"message_size": "Message size:",
"verify_address": "VERIFY ADDRESS"
},
"stellar": {
"account": "Account",
"account_merge": "Account Merge",
"account_thresholds": "Account Thresholds",
"add_signer": "Add Signer",
"add_trust": "Add trust",
"all_will_be_sent_to": "All XLM will be sent to:",
"allow_trust": "Allow trust",
"asset": "Asset",
"bump_sequence": "Bump Sequence",
"buying": "Buying:",
"clear_data": "Clear data",
"clear_flags": "Clear flags",
"confirm_issuer": "Confirm Issuer",
"confirm_memo": "Confirm memo",
"confirm_network": "Confirm network",
"confirm_operation": "Confirm operation",
"confirm_stellar": "Confirm Stellar",
"confirm_timebounds": "Confirm timebounds",
"create_account": "Create Account",
"debited_amount": "Debited amount",
"delete": "Delete",
"delete_passive_offer": "Delete Passive Offer",
"delete_trust": "Delete trust",
"destination": "Destination:",
"exchanges_require_memo": "Important: Many exchanges require a memo when depositing",
"final_confirm": "Final confirm",
"hash": "Hash:",
"high": "High:",
"home_domain": "Home Domain",
"inflation": "Inflation",
"initial_balance": "Initial Balance",
"initialize_signing_with": "Initialize signing with",
"issuer_template": "{} issuer:",
"key": "Key:",
"limit": "Limit:",
"low": "Low:",
"master_weight": "Master Weight:",
"medium": "Medium:",
"new_offer": "New Offer",
"new_passive_offer": "New Passive Offer",
"no_memo_set": "No memo set!",
"no_restriction": "[no restriction]",
"on_network_template": "Transaction is on {}",
"path_pay": "Path Pay",
"path_pay_at_least": "Path Pay at least",
"pay": "Pay:",
"pay_at_most": "Pay at most:",
"preauth_transaction": "Pre-auth transaction:",
"price_per_template": "Price per {}:",
"private_network": "private network",
"remove_signer": "Remove Signer",
"revoke_trust": "Revoke trust",
"selling": "Selling:",
"set_data": "Set data",
"set_flags": "Set flags",
"set_sequence_to_template": "Set sequence to {}?",
"sign_tx_count_template": "Sign this transaction made up of {}",
"sign_tx_fee_template": " and pay {}\nfor fee?",
"source_account": "Source account:",
"testnet_network": "testnet network",
"trusted_account": "Trusted Account",
"update": "Update",
"valid_from": "Valid from (UTC)",
"valid_to": "Valid to (UTC)",
"value_sha256": "Value (SHA-256):",
"wanna_clean_value_key_template": "Do you want to clear value key {}?",
"your_account": " your account"
},
"tezos": {
"address": "Address:",
"amount": "Amount:",
"baker_address": "Baker address:",
"balance": "Balance:",
"ballot": "Ballot:",
"confirm_delegation": "Confirm delegation",
"confirm_origination": "Confirm origination",
"delegator": "Delegator:",
"fee": "Fee:",
"proposal": "Proposal",
"register_delegate": "Register delegate",
"remove_delegation": "Remove delegation",
"submit_ballot": "Submit ballot",
"submit_proposal": "Submit proposal",
"submit_proposals": "Submit proposals"
},
"tutorial": {
"middle_click": "Press both left and right at the same\ntime to confirm.",
"press_and_hold": "Press and hold the right button to\napprove important operations.",
"ready_to_use": "You're ready to\nuse Trezor.",
"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.",
"sure_you_want_skip": "Are you sure you\nwant to skip the tutorial?",
"title_hello": "HELLO",
"title_screen_scroll": "SCREEN SCROLL",
"title_skip": "SKIP TUTORIAL",
"title_tutorial_complete": "TUTORIAL COMPLETE",
"use_trezor": "Use Trezor by\nclicking the left and right buttons.\n\rContinue right.",
"welcome_press_right": "Welcome to Trezor. Press right to continue."
},
"u2f": {
"get": "Increase and retrieve the U2F counter?",
"set_template": "Set the U2F counter to {}?",
"title_get": "GET U2F COUNTER",
"title_set": "SET U2F COUNTER"
},
"wipe": {
"info": "All data will be erased.",
"title": "WIPE DEVICE",
"want_to_wipe": "Do you really want to wipe the device?\n"
},
"wipe_code": {
"change": "Change wipe code?",
"changed": "Wipe code changed.",
"diff_from_pin": "The wipe code must be different from your PIN.",
"disabled": "Wipe code disabled.",
"enabled": "Wipe code enabled.",
"enter_new": "Enter new wipe code",
"info": "Wipe code can be used to erase all data from this device.",
"invalid": "Invalid wipe code",
"mismatch": "Entered wipe codes do not match!",
"reenter": "Re-enter wipe code",
"reenter_to_confirm": "Please re-enter wipe code to confirm.",
"title_check": "CHECK WIPE CODE",
"title_invalid": "INVALID WIPE CODE",
"title_settings": "WIPE CODE SETTINGS",
"turn_off": "Turn off wipe code protection?",
"turn_on": "Turn on wipe code protection?",
"wipe_code_mismatch": "Wipe code mismatch"
},
"word_count": {
"title": "NUMBER OF WORDS"
},
"words": {
"are_you_sure": "Are you sure?",
"array_of": "Array of",
"buying": "Buying",
"confirm": "Confirm",
"contains": "Contains",
"continue_anyway": "Continue anyway?",
"continue_with": "Continue with",
"error": "Error",
"from": "from",
"keep_it_safe": "Keep it safe!",
"know_what_your_doing": "Continue only if you know what you are doing!",
"my_trezor": "My Trezor",
"outputs": "outputs",
"please_check_again": "Please check again",
"please_try_again": "Please try again",
"really_wanna": "Do you really want to",
"sign": "Sign",
"title_check": "CHECK",
"title_group": "GROUP",
"title_information": "INFORMATION",
"title_remember": "REMEMBER",
"title_share": "SHARE",
"title_shares": "SHARES",
"title_success": "SUCCESS",
"title_summary": "SUMMARY",
"title_threshold": "THRESHOLD",
"unknown": "Unknown",
"warning": "Warning"
}
}
}

@ -0,0 +1,838 @@
//! 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: "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_derication_path: "Wrong derivation path for selected account.",
addr_mismatch__xpub_mismatch: "XPUB mismatch?",
address__address: "Address:",
address__public_key: "Public key",
address__title_cosigner: "COSIGNER",
address__title_receive_address: "RECEIVE ADDRESS",
address__title_yours: "YOURS",
address_details__account: "Account:",
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:",
binance__unknown: "Unknown",
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_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_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: "Amount:",
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_address: "Address",
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: "Unknown",
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__account: "Account:",
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__account: "Account:",
eos__action_name: "Action Name:",
eos__amount: "Amount:",
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__no: "No",
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:",
eos__yes: "Yes",
ethereum__amount_sent: "Amount sent:",
ethereum__confirm_fee: "Confirm fee",
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__address: "Address:",
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_fee: "Confirm fee",
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_fee: "Confirm 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__no: "No",
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!",
nem__yes: "Yes",
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__amount: "Amount:",
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_amount: "AMOUNT",
send__title_confirm_sending: "CONFIRM SENDING",
send__title_joint_transaction: "JOINT TRANSACTION",
send__title_receiving_to: "RECEIVING TO",
send__title_recipient: "RECIPIENT",
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",
stellar__account: "Account",
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__bump_sequence: "Bump Sequence",
stellar__buying: "Buying:",
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__address: "Address:",
tezos__amount: "Amount:",
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__fee: "Fee:",
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__are_you_sure: "Are you sure?",
words__array_of: "Array of",
words__buying: "Buying",
words__confirm: "Confirm",
words__contains: "Contains",
words__continue_anyway: "Continue anyway?",
words__continue_with: "Continue with",
words__error: "Error",
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__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__sign: "Sign",
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",
};

@ -0,0 +1,30 @@
//! 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 section_name, section in data.items():
for k, v in section.items():
name = f"{section_name}__{k}"
items_to_write.append((name, v))
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,850 @@
//! 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: 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_derication_path: str
/// addr_mismatch__xpub_mismatch: str
/// address__address: str
/// address__public_key: str
/// address__title_cosigner: str
/// address__title_receive_address: str
/// address__title_yours: str
/// address_details__account: 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
/// binance__unknown: 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_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_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: 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_address: 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: 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__account: 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__account: str
/// eos__action_name: str
/// eos__amount: 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__no: 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
/// eos__yes: str
/// ethereum__amount_sent: str
/// ethereum__confirm_fee: 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__address: 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_fee: 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_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__no: 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
/// nem__yes: 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__amount: 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_amount: str
/// send__title_confirm_sending: str
/// send__title_joint_transaction: str
/// send__title_receiving_to: str
/// send__title_recipient: 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
/// stellar__account: 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__bump_sequence: str
/// stellar__buying: 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__address: str
/// tezos__amount: str
/// tezos__baker_address: str
/// tezos__balance: str
/// tezos__ballot: str
/// tezos__confirm_delegation: str
/// tezos__confirm_origination: str
/// tezos__delegator: str
/// tezos__fee: 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__are_you_sure: str
/// words__array_of: str
/// words__buying: str
/// words__confirm: str
/// words__contains: str
/// words__continue_anyway: str
/// words__continue_with: str
/// words__error: str
/// words__from: str
/// words__keep_it_safe: str
/// words__know_what_your_doing: str
/// words__my_trezor: str
/// words__outputs: str
/// words__please_check_again: str
/// words__please_try_again: str
/// words__really_wanna: str
/// words__sign: 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
Qstr::MP_QSTR_TR => TR_OBJ.as_obj(),
};

@ -0,0 +1,43 @@
//! 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"]
def get_all_json_keys(data: dict) -> set[str]:
keys: set[str] = set()
for section_name, section in data.items():
for k, v in section.items():
keys.add(f"{section_name}__{k}")
return keys
en_keys = get_all_json_keys(en_data)
%>\
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,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,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,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,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,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,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,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"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0f140e00140000254000000000000cff1000000000000cfb000000000000088100000000000000000000000000efff60000000004ffffc000000000afffff100000000fff9ff700000005ffa2ffc0000000aff50dff2000001fff008ff8000006ffa003ffd00000bff5000eff30001fff9888dff80006ffffffffffe000cfffffffffff402ffe0000007ff907ff90000001ffe0dff30000000bff4"
},
{
"char": "Â",
"utf8": "C382",
"data": "0f140e0014000004eb500000000001efff3000000000bfc5fe2000000028810685000000000000000000000000efff60000000004ffffc000000000afffff100000000fff9ff700000005ffa2ffc0000000aff50dff2000001fff008ff8000006ffa003ffd00000bff5000eff30001fff9888dff80006ffffffffffe000cfffffffffff402ffe0000007ff907ff90000001ffe0dff30000000bff4"
},
{
"char": "Æ",
"utf8": "C386",
"data": "140f15000f0000005ffffffffffffc000000cffffffffffffc000003ffd9ffd8888886000009ff51ffa000000000001ffe01ffa000000000007ff801ffa00000000000eff101fffffffff50005ffa001fffffffff5000cff3001ffd8888883002fffbbbbffa0000000009fffffffffa000000001fffaaaabffa000000007ff900001ffd88888860eff200001fffffffffc5ffb000001fffffffffc"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0f140f000f000007cefd810000003dffffffe400003ffffbbefff3000dff900008ffd006ffa000000aff50cff100000016640ffd000000000000ffb000000000000efc000000000000cff0000000022108ff60000007ff701fff400003fff1007fffa659fff700008ffffffff90000004bffffe60000000003fb2000000000006fd30000000000002fe00000000000bffb00000000000696000000"
},
{
"char": "È",
"utf8": "C388",
"data": "0b140d011400145000000008ff5000000008fe1000000006840000000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "É",
"utf8": "C389",
"data": "0b140d011400000003500000001ef50000000bf800000002870000000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "0b140d01140001db70000000bfff7000007fe4ef50000883038700000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0b140d01140000000110000afc0cfa0000afc0cfa0000465023200000000000006fffffffff66fffffffff66ffa88888836ff400000006ff400000006ff400000006ffa88888806fffffffff06fffffffff06ff400000006ff400000006ff400000006ffa88888836fffffffff66fffffffff6"
},
{
"char": "Î",
"utf8": "C38E",
"data": "0814070014009da20004fffd101ef8afb04870088300000000006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "0814070014000000203ff35ff13ff35ff11661133000000000006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400006ff400"
},
{
"char": "Ô",
"utf8": "C394",
"data": "10131000130000007ffa000000000005fedf70000000003ff32ef500000000000000000000000007cffd8100000003dffffffe5000003fffebbefff60000dff800007ffe1007ff90000007ff900cff10000000efe00ffd00000000aff10ffb000000008ff30ffd00000000aff20cff10000000eff007ff90000006ffa000dff800006ffe10003fffebbefff6000003dffffffe5000000008cffd810000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0d140f01140000000000000000afe00000000000cf900000000001ef40000000000000000008ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff3000001ffa6ff4000003ff83ff9000008ff50eff60005fff106fffdacfff70008fffffffa000003adfda4000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0d140f011400000efe1000000008fffa00000003ff5ff4000000cf907fd00000000000000008ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff3000001ffa6ff4000003ff83ff9000008ff50eff60005fff106fffdacfff70008fffffffa000003adfda4000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0d130f01130009fc0bfb0000009fc0bfb000000465046400000000000000008ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff2000001ffa8ff3000001ffa6ff4000003ff83ff9000008ff50eff60005fff106fffdacfff70008fffffffa000003adfda40000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0f140e00140000000001100000000afc0cfa00000000afc0cfa00000000465023200000000000000000000eff1000001ffe006ffa00000aff6000dff20002ffd00005ffb000bff500000cff403ffc0000003ffc0cff30000000affbffa000000002fffff20000000009fff900000000001fff100000000000dfd000000000000dfd000000000000dfd000000000000dfd000000000000dfd000000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "160f17000f000008dfeb50fffffffffd0003dffffffcfffffffffd003fffc89dffffd888888700dff60000afffa000000006ff9000000effa00000000cff10000007ffa00000000ffd00000003ffd88888830ffb00000001fffffffff60ffc00000002fffffffff60dff00000005ffa000000008ff6000000cffa000000001eff400008fffa0000000005fffb78dffffd88888860005effffffbfffffffffd000019dfec50fffffffffd"
},
{
"char": "à",
"utf8": "C3A0",
"data": "0b100c001000000000000005ff4000000008fe000000000bf90000000000000000007cfda20000cffffff4007ff935efe005770006ff3004befffff406ffffffff40ffe2006ff41ff80009ff40ffe427fff408fffffeff4006cfe91ff4"
},
{
"char": "â",
"utf8": "C3A2",
"data": "0b0f0c000f0000cff5000000afcff300007fd06fe10000000000000007cfda20000cffffff4007ff935efe005770006ff3004befffff406ffffffff40ffe2006ff41ff80009ff40ffe427fff408fffffeff4006cfe91ff40"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "130b13000b0008dfd9103beeb400000dfffffe7ffffff90007ff946efff9339ff6005760005ffa0000dfd00029cddeffeddddfff105ffffffffffffffff10efe3004ff8000000001ff90008ffd000055400ffd426ffffc45cff6008ffffff99ffffffa00006cfeb5005beeb50000"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0c100c000b0003adfc7000007ffffffd1003fff97bffa00cff3000bff10ffa000001102ff7000000000ff9000000000dfe00008ee206ffc426ffd000cfffffff300008ffffc30000000df2000000001ff70000000000cf300000006fff1000000039720000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0c100c0010000000000000002ef90000000003ff30000000006fd000000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0c100c00100000000000000000003ff600000000df9000000008fb00000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0c0f0c000f00006ffb00000003ffcf9000002ef51ef7000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0c0f0c000f000ff71ff500000ff71ff5000006630662000000000000000003adfc7000008ffffffd1004ffc548ffb00dfe00008ff30ffeccccdff71ffffffffff70ff9000000000bfe1000355003ffd549ffc0006ffffffd200003adfc8000"
},
{
"char": "î",
"utf8": "C3AE",
"data": "081006001000cc900008fffb003ff5cf80685018810000000000aff00000aff00000aff00000aff00000aff00000aff00000aff00000aff00000aff00000aff00000aff000"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "071006001000000126ff08fd6ff08fd2660133000000000aff0000aff0000aff0000aff0000aff0000aff0000aff0000aff0000aff0000aff0000aff00"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0c0f0d000f00004ffd00000002ffcfb000001ef70df8000000000000000003adfc8000007ffffffd2003fff97cffc00cff30009ff50ffa00001ff82ff700000efb0ffa00001ff80cff20009ff504fff97bffc0007ffffffd200003adfc8000"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0b100d01100000000000000cfc000000001ef7000000003ff2000000000000000aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff39ff00007ff37ff5000bff33fff97cfff309fffffeff3006cfd74ff3"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0b100d01100003ffc0000000cfff6000007fe6fe10001ff50cfa0000000000000aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff39ff00007ff37ff5000bff33fff97cfff309fffffeff3006cfd74ff3"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0b0f0d010f00df80ff60000df80ff6000056306620000000000000aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff3aff00006ff39ff00007ff37ff5000bff33fff97cfff309fffffeff3006cfd74ff30"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0c130b000f007fe09fc000007fe09fc000003660465000000000000000cfe00000cfe06ff40002ff901ffa0007ff300aff000dfe0004ff602ff80000efc08ff300008ff2dfd000002ffdff7000000cffff20000006fffc00000001fff700000000bff100000467ffc000000bffff5000000bffe7000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "140b14000b0004beeb4004beeb5000008ffffff89ffffffa0005ffe87dffffb54aff600dfe1000dffc0000dfe00ff900006ffdaaaadff11ff800005ffffffffff20ffb00008ff9000000000bff3001fffe0000764003fff88effffc55bff70007ffffff9affffffb000003aefc5005beeb6000"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "0e130e001300000004f800000000000db000000000009d10000000000000000000000009ff40000000000fefa0000000005f5bf000000000bf05f500000001f900fb00000007f3009f1000000dd0003f7000003f70000dd000009f100007f30000ee88888af90005ffffffffff000bf00000005f501fa00000000fb07f400000000af1de0000000005f7"
},
{
"char": "Č",
"utf8": "C48C",
"data": "0e130f01130001ea01eb000000003f7bd00000000006ff2000000000000000000000007cfec81000003dfebacff50002ff500003df500cf20000001ee06f7000000006e5bf100000000000de000000000000ec000000000000de000000000000bf1000000000006f7000000007f50cf20000001ee003fe500003df40003dfea9cff50000007cfec81000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "0d130f01130009e109e20000000cc6f4000000001ef70000000000000000005fffffeb500005fb999cffb1005f5000008fd005f50000006f805f50000000cf15f500000006f65f500000003f85f500000001f95f500000003f85f500000006f65f50000000cf15f50000006f805f5000008fd005fb889befb1005fffffeb500000"
},
{
"char": "É",
"utf8": "C389",
"data": "0b130c0113000000af200000005f500000001e80000000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "0b130c0113007f306f400000ae5f70000000cfa0000000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "Í",
"utf8": "C38D",
"data": "0513050113009f403f700da00000005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5005f5000"
},
{
"char": "Ň",
"utf8": "C587",
"data": "0d130f01130006f405f400000009e4f7000000000cfa0000000000000000005ffc0000007f35fff4000007f35f7fc000007f35f57f400007f35f50ec00007f35f507f40007f35f500ed0007f35f5007f5007f35f5000ed007f35f50006f507f35f50000ed07f35f500006f57f35f500000dd7f35f5000006fff35f5000000dff30"
},
{
"char": "Ó",
"utf8": "C393",
"data": "0f1310011300000001ec000000000000ae1000000000005f300000000000000000000000007cffd810000003dfebadfe400002ff500004ef5000cf20000001ee006f7000000005f80bf1000000000ed0de0000000000bf0ec00000000009f1de0000000000bf0bf1000000000ed06f7000000005f800cf20000001ee0003fe500003ef500003dfeaadfe400000007cffd8100000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "0c130d0113002f802f80000005f5db000000008fd100000000000000005ffffffea2005fb9999aff305f5000002fc05f50000009f15f50000007f35f50000009f15f5000002fc05fb8888aff305ffffffeb2005f51df3000005f501df300005f5001df30005f50001df3005f500001de305f5000002ee2"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "0c130d00130007f306f4000000ae5f700000000cfa00000000000000000004befc9200009feb9cff6005fa00002df309f1000003f80bf00000007507f70000000000dfc85200000008dfffe91000000036bfe10000000005f90750000000ec0dd0000000fb07f9000009f600afeb9aefb00004adfdb500"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "0c130c0013000ae10ae1000000dc6f400000002ef600000000000000007ffffffffffd49999df9999700000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af0000000000af00000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "0d130e01130000000de10000000008f30000000002f50000000000000000008f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af07f30000000ce04f60000000eb01fd0000006f7006fa10005fd00009feb9dfd3000004adfc800000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "0d140e011400001ce60000000008a3f000000000992f0000000002df70000000000000000008f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af07f30000000ce04f60000000eb01fd0000006f7006fa10005fd00009feb9dfd3000004adfc80000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "0d130c00130000000dd10000000008f20000000003f5000000000000000000bf10000000bf12fa0000004f8009f300000de0001ec00006f500006f5000ec000000dd008f30000004f72fa00000000bfcf1000000002ff80000000000bf00000000000af00000000000af00000000000af00000000000af00000000000af0000000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "0c130c0013000dc00cc0000002e9ae100000004ff300000000000000002ffffffffff3199999999ff1000000008f6000000003fb000000000de1000000009f5000000004fa000000001ee100000000bf4000000006f9000000002fd000000000cf3000000007f7000000002ff9888888824ffffffffff5"
},
{
"char": "á",
"utf8": "C3A1",
"data": "090f0b010f000008f4000003f7000000db000000000000008dfd8000cfb8bfc06f50007f53600000f80035777fa1cffffffaaf61000faea00002fadc0000bfa6fd89defa05cfe91ca0"
},
{
"char": "č",
"utf8": "C48D",
"data": "0b0f0b000f001ea01db000003f7bd10000006ff2000000000000000005beeb300009fd99ef5005f90000bf10cd000002930f9000000002f7000000000f9000000000dd000002a305f90000bf0009fd88df500005beeb3000"
},
{
"char": "ď",
"utf8": "C48F",
"data": "0f0f0d000f000000000db08f2000000000db0bc0000000000db0e60000000000db00000005bfe80db0000008fd9afaeb000003fa0003efb00000be000007fb00000f9000001fb00001f7000000eb00000f8000000fb00000dd000004fb000006f80002dfb000000bfc89fbeb00000006cfc80bb00000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0b0f0c000f0000004f800000001eb00000000ad0000000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "ě",
"utf8": "C49B",
"data": "0b0f0c000f002f901e9000004f6cc00000007fe1000000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "051005011000ce207f402f60000000000008f0008f0008f0008f0008f0008f0008f0008f0008f0008f0008f000"
},
{
"char": "ň",
"utf8": "C588",
"data": "0a0f0c010f00ae10ae10000dc6f4000002ef600000000000008e19dfc4008fee99ef608fd1000cf18f400004f48f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f7"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "0b0f0c000f0000003f900000000dc000000008e1000000000000000005beda200009fd99ef5005f90001cf10cd000002f80f9000000db2f7000000bd0f9000000db0dd000002f805f90001cf1009fd89ef500005beea2000"
},
{
"char": "ř",
"utf8": "C599",
"data": "07100701107f306f40ae5f7000cfa00000000000000008e5dfe08ffa7708f600008f100008f000008f000008f000008f000008f000008f000008f00000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "090f0a000f01ea01ea0003f7cd000006fe200000000000007dfda200afb89ef21f90001fa1f90000330cfa6300001afffe80000025af81410000dd3f80000dc0afb88df6006cfeb400"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "090f08000f0000004f600cc008f000cc00ba000cc000007fffff20037ee7710000cc0000000cc0000000cc0000000cc0000000cc0000000cc0000000cc0000000bf77100003cff2000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "0a100c0110000002fb0000000cd10000006f2000000000000000000000008f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f75f300004f72fc0001df707fd89eef7005cfd91f7"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "0a110c011100000000000004ee4000000d66c000000c67c0000004ee300000000000008f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f75f300004f72fc0001df707fd89eef7005cfd91f7"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "0b140a0010000000bf200000006f400000001f7000000000000000000000000009f100000af03f600000fa00dc00005f4008f2000ae0002f8000f90000ce004f400006f40ae000000f90f8000000af5f30000004ffd00000000ef8000000009f200000000cc000000479f6000000affa000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "091009001005f505f50008f4f800000bfb0000000000000000000005fffffff6277777ef4000005f9000001fd000000cf2000008f6000003fb000001ee100000af4000005fd7777737fffffff7"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "0e130e00130001dd0000000000002f80000000000005f300000000000000000000000009ff40000000000fefa0000000005f5bf000000000bf05f500000001f900fb00000007f3009f1000000dd0003f7000003f70000dd000009f100007f30000ee88888af90005ffffffffff000bf00000005f501fa00000000fb07f400000000af1de0000000005f7"
},
{
"char": "Â",
"utf8": "C382",
"data": "0e130e0013000006fe20000000004f7cd000000001ea01ea000000000000000000000009ff40000000000fefa0000000005f5bf000000000bf05f500000001f900fb00000007f3009f1000000dd0003f7000003f70000dd000009f100007f30000ee88888af90005ffffffffff000bf00000005f501fa00000000fb07f400000000af1de0000000005f7"
},
{
"char": "Æ",
"utf8": "C386",
"data": "140f14000f0000001ffffffffffff40000007faafc99999992000000dd02f700000000000004f602f70000000000000bf002f70000000000002f8002f70000000000009f2002fc888888700000fb0002ffffffffd00007f40002f700000000000df9888af700000000004ffffffff70000000000be000002f70000000002f8000002f70000000009f2000002fc888888820fc0000002fffffffff4"
},
{
"char": "Ç",
"utf8": "C387",
"data": "0e130f010f00007cfec81000003dfebacff50002ff500003df500cf20000001ee06f7000000006e5bf100000000000de000000000000ec000000000000ce0000000000009f1000000000006f7000000007f50df20000001ee004fe500003df50003efea9cff60000017cffc81000000000e50000000000008e4000000000001c900000000006fb200000"
},
{
"char": "È",
"utf8": "C388",
"data": "0b130c0113005f70000000008f2000000000bc00000000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "É",
"utf8": "C389",
"data": "0b130c0113000000af200000005f500000001e80000000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "0b130c01130000cfa0000000ae5f7000007f306f400000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "0b130c0113004c508c100005f70af10000000000000000000000005fffffffff15fb999999915f5000000005f5000000005f5000000005f5000000005fb888888605ffffffffb05f5000000005f5000000005f5000000005f5000000005f5000000005fb888888815fffffffff10"
},
{
"char": "Î",
"utf8": "C38E",
"data": "071306001300bfb0008f5f805f504f50000000005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f5000"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "07130600132c706c23f808f300000000000000005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f500005f5000"
},
{
"char": "Ô",
"utf8": "C394",
"data": "0f13100113000003ff500000000001eb8f2000000000cd00bd1000000000000000000000007cffd810000003dfebadfe400002ff500004ef5000cf20000001ee006f7000000005f80bf1000000000ed0de0000000000bf0ec00000000009f1de0000000000bf0bf1000000000ed06f7000000005f800cf20000001ee0003fe500003ef500003dfeaadfe400000007cffd8100000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "0d130e01130008f400000000000be100000000000da00000000000000000008f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af07f30000000ce04f60000000eb01fd0000006f7006fa10005fd00009feb9dfd3000004adfc800000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "0d130e011300001ef7000000000cc6f400000009e209e200000000000000008f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af07f30000000ce04f60000000eb01fd0000006f7006fa10005fd00009feb9dfd3000004adfc800000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "0d130e01130006c30ac00000007f40cf0000000000000000000000000000008f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af08f20000000af07f30000000ce04f60000000eb01fd0000006f7006fa10005fd00009feb9dfd3000004adfc800000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "0d130c00130006c20ab00000008f30de000000000000000000000000000000bf10000000bf12fa0000004f8009f300000de0001ec00006f500006f5000ec000000dd008f30000004f72fa00000000bfcf1000000002ff80000000000bf00000000000af00000000000af00000000000af00000000000af00000000000af0000000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "150f17010f00029dfea408ffffffffe005ffc9bef98fa999999805fc200009fef200000000ed0000000aff200000007f500000002ff20000000cf000000000cf20000000ed000000000afa8888884ec0000000008ffffffff8de000000000bf20000000af100000000df200000005f700000004ff200000000cf1000000cff2000000003fe30001cfcf20000000004efdacff78fa888888800019dfea308ffffffffe0"
},
{
"char": "à",
"utf8": "C3A0",
"data": "090f0b010f03fa00000006f400000009e1000000000000008dfd8000cfb8bfc06f50007f53600000f80035777fa1cffffffaaf61000faea00002fadc0000bfa6fd89defa05cfe91ca0"
},
{
"char": "â",
"utf8": "C3A2",
"data": "090f0b010f000afc000007f5e90004f604f60000000000008dfd8000cfb8bfc06f50007f53600000f80035777fa1cffffffaaf61000faea00002fadc0000bfa6fd89defa05cfe91ca0"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "110b13010b018dfd8003beeb3000dfa8afa3fd99df607f40005ff90000af21300000fe000001f70057888fd777777fa1dffeeefffffffffbaf50000fc00000000ea00003ff10000131cd0000cffb0000df15fc89ef46fd99ef6005cfda2003beec4000"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "0b0f0b000b0005beeb300009fd99ef5005f90000bf10dd000002930f9000000002f7000000000f9000000000dd000002b305f90000bf100afd99ef500006cffb30000001f40000000018e3000000001d700000007fb10000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "0b0f0c000f001ec0000000003f70000000006f20000000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "0b0f0c000f0000004f800000001eb00000000ad0000000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "0b0f0c000f00007fe10000004f6cc000002e902e900000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "0b0f0c000f000ca03c600000fd04f70000000000000000000000000004beda200008fd99ef4004f90001de00cd000004f60f8000000f81fffffffffa0fb777777740db0000000006f60000cf100afc89ef600005beeb4000"
},
{
"char": "î",
"utf8": "C3AE",
"data": "071006001001df8000bd6f508f208f300000000000000008f000008f000008f000008f000008f000008f000008f000008f000008f000008f000008f000"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "060f06000f8f30de6c30ab000000000000008f00008f00008f00008f00008f00008f00008f00008f00008f00008f00008f00"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "0b0f0c000f00005ff20000003f8bd100001eb01db00000000000000005beda200009fd99ef5005f90001cf10cd000002f80f9000000db2f7000000bd0f9000000db0dd000002f805f90001cf1009fd89ef500005beea2000"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "0a100c011000cf100000001eb000000003f60000000000000000000000008f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f75f300004f72fc0001df707fd89eef7005cfd91f7"
},
{
"char": "û",
"utf8": "C3BB",
"data": "0a100c01100004ff3000002e9ae10000dc00cc00000000000000000000008f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f75f300004f72fc0001df707fd89eef7005cfd91f7"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "0a0f0c010f00bf01fb00009c00c800000000000000000000008f000001f78f000001f78f000001f78f000001f78f000001f78f000001f78f000001f75f300004f72fc0001df707fd89eef7005cfd91f7"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "0b130a000f006f60bf100004c508c00000000000000000000000009f100000af03f600000fa00dc00005f4008f2000ae0002f8000f90000ce004f400006f40ae000000f90f8000000af5f30000004ffd00000000ef8000000009f200000000cc000000479f6000000affa0000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "130b14000b0006bfe91004beea200009fc8bfd16fd99ef4004f90004fcfa0001de00ce000009ff100004f50f9000004fb000000f81f7000002fffffffffa0f8000003fd777777740dc000007fe0000000006f70002fef80000cf100bfc8afd16fc89ef600006cfe91004cfeb4000"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "000008000000"
},
{
"char": "Č",
"utf8": "C48C",
"data": "000008000000"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "000008000000"
},
{
"char": "É",
"utf8": "C389",
"data": "000008000000"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "000008000000"
},
{
"char": "Í",
"utf8": "C38D",
"data": "000008000000"
},
{
"char": "Ň",
"utf8": "C587",
"data": "000008000000"
},
{
"char": "Ó",
"utf8": "C393",
"data": "000008000000"
},
{
"char": "Ř",
"utf8": "C598",
"data": "000008000000"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "000008000000"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "000008000000"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "000008000000"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "000008000000"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "000008000000"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "000008000000"
},
{
"char": "á",
"utf8": "C3A1",
"data": "000008000000"
},
{
"char": "č",
"utf8": "C48D",
"data": "000008000000"
},
{
"char": "ď",
"utf8": "C48F",
"data": "000008000000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "000008000000"
},
{
"char": "ě",
"utf8": "C49B",
"data": "000008000000"
},
{
"char": "í",
"utf8": "C3AD",
"data": "000008000000"
},
{
"char": "ň",
"utf8": "C588",
"data": "000008000000"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "000008000000"
},
{
"char": "ř",
"utf8": "C599",
"data": "000008000000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "000008000000"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "000008000000"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "000008000000"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "000008000000"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "000008000000"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "000008000000"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "000008000000"
},
{
"char": "Â",
"utf8": "C382",
"data": "000008000000"
},
{
"char": "Æ",
"utf8": "C386",
"data": "000008000000"
},
{
"char": "Ç",
"utf8": "C387",
"data": "000008000000"
},
{
"char": "È",
"utf8": "C388",
"data": "000008000000"
},
{
"char": "É",
"utf8": "C389",
"data": "000008000000"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "000008000000"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "000008000000"
},
{
"char": "Î",
"utf8": "C38E",
"data": "000008000000"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "000008000000"
},
{
"char": "Ô",
"utf8": "C394",
"data": "000008000000"
},
{
"char": "Ù",
"utf8": "C399",
"data": "000008000000"
},
{
"char": "Û",
"utf8": "C39B",
"data": "000008000000"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "000008000000"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "000008000000"
},
{
"char": "Œ",
"utf8": "C592",
"data": "000008000000"
},
{
"char": "à",
"utf8": "C3A0",
"data": "000008000000"
},
{
"char": "â",
"utf8": "C3A2",
"data": "000008000000"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "000008000000"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "000008000000"
},
{
"char": "è",
"utf8": "C3A8",
"data": "000008000000"
},
{
"char": "é",
"utf8": "C3A9",
"data": "000008000000"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "000008000000"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "000008000000"
},
{
"char": "î",
"utf8": "C3AE",
"data": "000008000000"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "000008000000"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "000008000000"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "000008000000"
},
{
"char": "û",
"utf8": "C3BB",
"data": "000008000000"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "000008000000"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "000008000000"
},
{
"char": "œ",
"utf8": "C593",
"data": "000008000000"
}
]

@ -0,0 +1,152 @@
[
{
"char": "Á",
"utf8": "C381",
"data": "060e07000e1980003124a187f8618610"
},
{
"char": "Č",
"utf8": "C48C",
"data": "060e07000e48c0007a186082082185e0"
},
{
"char": "Ď",
"utf8": "C48E",
"data": "060e07000e918000f228618618618bc0"
},
{
"char": "É",
"utf8": "C389",
"data": "060e07000e198000fe0820fa082083f0"
},
{
"char": "Ě",
"utf8": "C49A",
"data": "060e07000e48c000fe0820fa082083f0"
},
{
"char": "Í",
"utf8": "C38D",
"data": "050e07010e36000f90842108427c"
},
{
"char": "Ň",
"utf8": "C587",
"data": "060e07000e48c000871c69a659638e10"
},
{
"char": "Ó",
"utf8": "C393",
"data": "060e07000e1980007a186186186185e0"
},
{
"char": "Ř",
"utf8": "C598",
"data": "060e07000e48c000fa1861fa48a28610"
},
{
"char": "Š",
"utf8": "C5A0",
"data": "060e07000e48c0007a186060606185e0"
},
{
"char": "Ť",
"utf8": "C5A4",
"data": "070e07000e4860000fe20408102040810200"
},
{
"char": "Ú",
"utf8": "C39A",
"data": "060e07000e19800086186186186185e0"
},
{
"char": "Ů",
"utf8": "C5AE",
"data": "060e07000e31230086186186186185e0"
},
{
"char": "Ý",
"utf8": "C39D",
"data": "070e07000e18c00008305122282040810200"
},
{
"char": "Ž",
"utf8": "C5BD",
"data": "060e07000e48c000fc104210842083f0"
},
{
"char": "á",
"utf8": "C3A1",
"data": "060c07000c1980007a105f8618dd00"
},
{
"char": "č",
"utf8": "C48D",
"data": "060c07000c48c0007a182082085e00"
},
{
"char": "ď",
"utf8": "C48F",
"data": "060e07000e48c0010417638618618dd0"
},
{
"char": "é",
"utf8": "C3A9",
"data": "060c07000c1980007a187f82085e00"
},
{
"char": "ě",
"utf8": "C49B",
"data": "060c07000c48c0007a187f82085e00"
},
{
"char": "í",
"utf8": "C3AD",
"data": "050c07010c36000610842109f0"
},
{
"char": "ň",
"utf8": "C588",
"data": "060c07000c48c000bb186186186100"
},
{
"char": "ó",
"utf8": "C3B3",
"data": "060c07000c1980007a186186185e00"
},
{
"char": "ř",
"utf8": "C599",
"data": "060c07000c48c000bb186082082000"
},
{
"char": "š",
"utf8": "C5A1",
"data": "060c07000c48c0007a181818185e00"
},
{
"char": "ť",
"utf8": "C5A5",
"data": "050e07000e498002109f2108420c"
},
{
"char": "ú",
"utf8": "C3BA",
"data": "060c07000c1980008618618618dd00"
},
{
"char": "ů",
"utf8": "C5AF",
"data": "060c07000c3123008618618618dd00"
},
{
"char": "ý",
"utf8": "C3BD",
"data": "060e07000c19800086186185334105e0"
},
{
"char": "ž",
"utf8": "C5BE",
"data": "060c07000c48c000fc108421083f00"
}
]

@ -0,0 +1,162 @@
[
{
"char": "À",
"utf8": "C380",
"data": "060e07000e6060003124a187f8618610"
},
{
"char": "Â",
"utf8": "C382",
"data": "060e07000e3120003124a187f8618610"
},
{
"char": "Æ",
"utf8": "C386",
"data": "070a07000a3ea2448ff22448913c"
},
{
"char": "Ç",
"utf8": "C387",
"data": "060c07000a7a186082082185e11800"
},
{
"char": "È",
"utf8": "C388",
"data": "060e07000e606000fe0820fa082083f0"
},
{
"char": "É",
"utf8": "C389",
"data": "060e07000e198000fe0820fa082083f0"
},
{
"char": "Ê",
"utf8": "C38A",
"data": "060e07000e312000fe0820fa082083f0"
},
{
"char": "Ë",
"utf8": "C38B",
"data": "060e07000e492000fe0820fa082083f0"
},
{
"char": "Î",
"utf8": "C38E",
"data": "050e07010e64800f90842108427c"
},
{
"char": "Ï",
"utf8": "C38F",
"data": "050e07010e94800f90842108427c"
},
{
"char": "Ô",
"utf8": "C394",
"data": "060e07000e3120007a186186186185e0"
},
{
"char": "Ù",
"utf8": "C399",
"data": "060e07000e60600086186186186185e0"
},
{
"char": "Û",
"utf8": "C39B",
"data": "060e07000e31200086186186186185e0"
},
{
"char": "Ü",
"utf8": "C39C",
"data": "060e07000e49200086186186186185e0"
},
{
"char": "Ÿ",
"utf8": "C5B8",
"data": "070e07000e48900008305122282040810200"
},
{
"char": "Œ",
"utf8": "C592",
"data": "070a07000a6f224489d2244890dc"
},
{
"char": "à",
"utf8": "C3A0",
"data": "060c07000c6060007a105f8618dd00"
},
{
"char": "â",
"utf8": "C3A2",
"data": "060c07000c3120007a105f8618dd00"
},
{
"char": "æ",
"utf8": "C3A6",
"data": "07080700087d244bf91224be00"
},
{
"char": "ç",
"utf8": "C3A7",
"data": "060a0700087a182082085e1180"
},
{
"char": "è",
"utf8": "C3A8",
"data": "060c07000c6060007a187f82085e00"
},
{
"char": "é",
"utf8": "C3A9",
"data": "060c07000c1980007a187f82085e00"
},
{
"char": "ê",
"utf8": "C3AA",
"data": "060c07000c3120007a187f82085e00"
},
{
"char": "ë",
"utf8": "C3AB",
"data": "060c07000c4920007a187f82085e00"
},
{
"char": "î",
"utf8": "C3AE",
"data": "050c07010c64800610842109f0"
},
{
"char": "ï",
"utf8": "C3AF",
"data": "050c07010c94800610842109f0"
},
{
"char": "ô",
"utf8": "C3B4",
"data": "060c07000c3120007a186186185e00"
},
{
"char": "ù",
"utf8": "C3B9",
"data": "060c07000c6060008618618618dd00"
},
{
"char": "û",
"utf8": "C3BB",
"data": "060c07000c3120008618618618dd00"
},
{
"char": "ü",
"utf8": "C3BC",
"data": "060c07000c4920008618618618dd00"
},
{
"char": "ÿ",
"utf8": "C3BF",
"data": "060e07000c49200086186185334105e0"
},
{
"char": "œ",
"utf8": "C593",
"data": "07080700086d264cf91224b600"
}
]

@ -0,0 +1,957 @@
{
"font": {
"Safe 3": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_fr.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_fr.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_fr.json",
"4_FONT_BIG": "font_unifont_regular_16_fr.json",
"5_FONT_DEMIBOLD": "font_unifont_bold_16_fr.json"
},
"T": {
"1_FONT_NORMAL": "font_tthoves_regular_21_fr.json",
"2_FONT_BOLD": "font_tthoves_bold_17_fr.json",
"3_FONT_MONO": "font_robotomono_medium_20_fr.json",
"4_FONT_BIG": null,
"5_FONT_DEMIBOLD": "font_tthoves_demibold_21_fr.json"
}
},
"header": {
"change_language_prompt": "Changer de langue en francais?",
"change_language_title": "CHANGER LA LANGUE",
"language": "fr",
"version": "2.6.4"
},
"translations": {
"addr_mismatch": {
"contact_support": "Veuillez contacter le support Trezor à",
"key_mismatch": "Déliachance clé?",
"mismatch": "ADRESSER L'AFFICATION?",
"support_url": "trezor.io/support",
"title": "ADRESSER L'AFFICATION?",
"title_key_mismatch": "DÉLIACHANCE CLÉ?",
"wrong_derication_path": "Mauvais chemin de dérivation pour le compte sélectionné.",
"xpub_mismatch": "Xpub inadéquat?"
},
"address": {
"address": "Adresse:",
"public_key": "Confirmer la clé publique",
"title_cosigner": "COSIGNATAIRE",
"title_receive_address": "RECEVOIR L'ADRESSE",
"title_yours": "LE VÔTRE"
},
"address_details": {
"account": "Compte:",
"derivation_path": "Chemin de dérivation:",
"title_receive_address": "RECEVOIR L'ADRESSE",
"title_receiving_to": "RECEVOIR"
},
"authenticate": {
"confirm_template": "Autoriser l'ordinateur connecté pour confirmer que votre {} est authentique?",
"header": "Authentifier l'appareil"
},
"auto_lock": {
"change_template": "Verrouiller automatiquement votre trezor après {} d'inactivité?",
"title": "RETARD DE VERROUILLAGE AUTOMATIQUE"
},
"backup": {
"can_back_up_anytime": "Vous pouvez sauvegarder votre Trezor une fois, à tout moment.",
"it_should_be_backed_up": "Vous devriez sauvegarder votre nouveau portefeuille.",
"it_should_be_backed_up_now": "Il devrait être sauvegardé maintenant!",
"new_wallet_created": "Nouveau portefeuille créé.",
"new_wallet_successfully_created": "Un nouveau portefeuille a créé avec succès.",
"recover_anytime": "Vous pouvez utiliser votre sauvegarde pour récupérer votre portefeuille à tout moment.",
"title_backup_wallet": "PORTEFEUILLE DE SAUVEGARDE",
"title_skip": "SAUTER LA SAUVEGARDE",
"want_to_skip": "Êtes-vous sûr de vouloir sauter la sauvegarde?"
},
"binance": {
"buy": "Acheter",
"confirm_cancel": "Confirmer l'annulation",
"confirm_input": "Confirmer l'entrée",
"confirm_order": "Confirmer la commande",
"confirm_output": "Confirmer la sortie",
"order_id": "Numéro de commande:",
"pair": "Paire:",
"price": "Prix:",
"quantity": "Quantité:",
"sell": "Vendre",
"sender_address": "Adresse de l'expéditeur:",
"side": "Côté:",
"unknown": "Inconnu"
},
"bitcoin": {
"commitment_data": "Données d'engagement:",
"confirm_locktime": "Confirmer le verrouillage",
"create_proof_of_ownership": "Voulez-vous créer une preuve de propriété?",
"high_mining_fee_template": "Les frais d'extraction de\n{}\nest de façon inattendue.",
"locktime_no_effect": "Locktime est réglé mais n'aura aucun effet.",
"locktime_set_to": "Locktime réglé sur:",
"locktime_set_to_blockheight": "Locktime réglé sur BlockHeight:",
"lot_of_change_outputs": "Beaucoup de sorties de changement.",
"multiple_accounts": "Plusieurs comptes",
"new_fee_rate": "Nouveau taux de frais:",
"simple_send_of": "Envoi simple de",
"ticket_amount": "Montant de la billette:",
"title_confirm_details": "CONFIRMER LES DÉTAILS",
"title_finalize_transaction": "FINALISER LA TRANSACTION",
"title_high_mining_fee": "FRAIS D'EXTRACTION ÉLEVÉS",
"title_meld_transaction": "TRANSACTION FUSION",
"title_modify_amount": "MODIFIER LE MONTANT",
"title_payjoin": "VERSER DES RENDEZ-VOUS",
"title_proof_of_ownership": "PREUVE DE PROPRIÉTÉ",
"title_purchase_ticket": "BILLET D'ACHAT",
"title_update_transaction": "METTRE À JOUR LA TRANSACTION",
"unknown_path": "Chemin inconnu",
"unknown_transaction": "Transaction inconnue",
"unusually_high_fee": "Frais inhabituellement élevés.",
"unverified_external_inputs": "La transaction contient des entrées externes non vérifiées.",
"valid_signature": "La signature est valide.",
"voting_rights": "Droits de vote sur:"
},
"buttons": {
"abort": "AVORTER",
"access": "ACCÉDER",
"again": "ENCORE",
"allow": "PERMETTRE",
"back_up": "SAUVEGARDE",
"cancel": "ANNULER",
"change": "CHANGEMENT",
"check": "VÉRIFIER",
"check_again": "REVÉRIFIER",
"close": "FERMER",
"confirm": "CONFIRMER",
"continue": "CONTINUER",
"details": "DÉTAILS",
"enable": "ACTIVER",
"enter": "ENTRER",
"enter_share": "ENTRER LA PART",
"export": "EXPORTER",
"format": "FORMAT",
"go_back": "RETOURNER",
"hold_to_confirm": "TENIR POUR CONFIRMER",
"info": "INFO",
"install": "INSTALLER",
"more_info": "PLUS D'INFORMATIONS",
"ok_i_understand": "OK, JE COMPRENDS",
"purchase": "ACHAT",
"quit": "QUITTER",
"restart": "REDÉMARRAGE",
"retry": "RECOMMENCEZ",
"select": "SÉLECTIONNER",
"set": "ENSEMBLE",
"show_all": "AFFICHER TOUT",
"show_words": "MONTRER DES MOTS",
"skip": "SAUTER",
"try_again": "ESSAYER À NOUVEAU",
"turn_off": "ÉTEINDRE",
"turn_on": "ALLUMER"
},
"cardano": {
"addr_base": "Base",
"addr_enterprise": "Entreprise",
"addr_legacy": "Héritage",
"addr_pointer": "Aiguille",
"addr_reward": "Récompense",
"address_no_staking": "Adresse - Pas de récompenses de jalonnement.",
"amount": "Montant:",
"amount_burned_decimals_unknown": "Montant brûlé:",
"amount_minted_decimals_unknown": "Montant frappé:",
"amount_sent_decimals_unknown": "Montant envoyé (décimales inconnues):",
"anonymous_pool": "La piscine n'a pas de métadonnées (piscine anonyme)",
"asset_fingerprint": "Empreinte digitale de l'actif:",
"auxiliary_data_hash": "Hachage des données auxiliaires:",
"block": "Bloc",
"catalyst": "Catalyseur",
"certificate": "Certificat",
"certificate_path": "Chemin de certificat",
"change_output": "Modifier la sortie",
"change_output_path": "Modifier le chemin de sortie",
"change_output_staking_path": "Modifier le chemin de la sortie de sortie",
"check_all_items": "Vérifiez soigneusement tous les articles.",
"choose_level_of_details": "Choisissez le niveau de détails:",
"collateral_input_id": "ID d'entrée collatérale:",
"collateral_input_index": "Index d'entrée collatérale:",
"collateral_output_contains_tokens": "La sortie de retour collatérale contient des jetons.",
"collateral_return": "Retour collatéral",
"confirm": "Confirmer:",
"confirm_signing_stake_pool": "Confirmez la signature de l'enregistrement du pool de pommes en tant que propriétaire.",
"confirm_transaction": "Confirmer la transaction",
"confirming_a_multisig_transaction": "Confirmant une transaction multisig.",
"confirming_pool_registration": "Confirmer l'inscription au pool en tant que propriétaire.",
"confirming_transction": "Confirmant une transaction.",
"cost": "Coût",
"credential_mismatch": "Les informations d'identification ne correspondent pas aux informations d'identification de paiement.",
"datum_hash": "Hash de Datum:",
"delegating_to": "Déléguer à:",
"for_account_and_index_template": "pour le compte {} et index {}:",
"for_account_template": "pour le compte {}:",
"for_key_hash": "pour le hachage clé:",
"for_script": "pour script:",
"inline_datum": "Date en ligne",
"input_id": "ID d'entrée:",
"input_index": "Index d'entrée:",
"intro_text_address": "Adresse",
"intro_text_change": "L'adresse suivante est une adresse de changement.C'est",
"intro_text_owned_by_device": "L'adresse suivante appartient à cet appareil.C'est",
"intro_text_registration_payment": "L'adresse de paiement de l'enregistrement des clés de vote appartient à cet appareil.C'est",
"key_hash": "hachage clé",
"margin": "Marge",
"multisig_path": "chemin multi-sige",
"nested_scripts_template": "Contient des scripts imbriqués {}.",
"network": "Réseau:",
"no_output_tx": "La transaction n'a pas de sorties, le réseau ne peut pas être vérifié.",
"nonce": "Nonce:",
"other": "autre",
"path": "chemin",
"pledge": "Gage",
"pointer": "aiguille",
"policy_id": "ID de politique:",
"pool_metadata_hash": "Hash de métadonnées de la piscine:",
"pool_metadata_url": "URL des métadonnées de la piscine:",
"pool_owner": "Propriétaire de la piscine:",
"pool_owner_path": "Path de jalonnement du propriétaire de la piscine",
"pool_reward_account": "Compte de récompense de piscine:",
"reference_input_id": "ID d'entrée de référence:",
"reference_input_index": "Index d'entrée de référence:",
"reference_script": "Script de référence",
"required_signer": "Signataire requis",
"reward": "récompense",
"reward_address": "L'adresse est une adresse de récompense.",
"reward_eligibility_warning": "AVERTISSEMENT: L'adresse n'est pas une adresse de paiement, elle n'est pas éligible pour les récompenses.",
"rewards_go_to": "Les récompenses vont à:",
"script": "scénario",
"script_all": "Tout",
"script_any": "N'importe lequel",
"script_data_hash": "Hash de données de script:",
"script_hash": "Hash de script:",
"script_invalid_before": "Invalide avant",
"script_invalid_hereafter": "Invalide ci-après",
"script_key": "Clé",
"script_n_of_k": "N de k",
"script_reward": "récompense de script",
"sending": "Envoi en cours",
"show_simple": "Montrer simple",
"sign_tx_path_template": "Signer la transaction avec {}:",
"stake_delegation": "Délégation",
"stake_deregistration": "Déréglage des clés",
"stake_pool_registration": "Enregistrement de StagePool",
"stake_pool_registration_pool_id": "Enregistrement du pool de pommes\nID de piscine:",
"stake_registration": "Enregistrement clé des parties",
"staking_key_for_account": "Clé de jalonnement pour le compte",
"to_pool": "À la piscine:",
"token_minting_path": "Path de ponte de jeton",
"total_collateral": "Total collatéral:",
"transaction": "Transaction",
"transaction_contains_minting_or_burning": "La transaction contient la frappe ou la combustion de jetons.",
"transaction_contains_script_address_no_datum": "La sortie de transaction suivante contient une adresse de script, mais ne contient pas de référence.",
"transaction_fee": "Frais de transaction:",
"transaction_id": "Identifiant de transaction:",
"transaction_no_collateral_input": "La transaction ne contient aucune entrée collatérale.Le script Plutus ne pourra pas s'exécuter.",
"transaction_no_script_data_hash": "La transaction ne contient aucun hachage de données de script.Le script Plutus ne pourra pas s'exécuter.",
"transaction_output_contains_tokens": "La sortie de transaction suivante contient des jetons.",
"ttl": "TTL:",
"unknown": "Inconnu",
"unknown_collateral_amount": "Montant collatéral inconnu.",
"unusual_path": "Le chemin est inhabituel.",
"valid_since": "Valable depuis:",
"verify_script": "Vérifier le script",
"vote_key_registration": "Voter l'inscription clé (CIP-36)",
"vote_public_key": "Votez la clé publique:",
"voting_purpose": "Objectif de vote:",
"warning": "Avertissement",
"weight": "Poids:",
"withdrawal_for_address_template": "Confirmer le retrait de l'adresse {}:",
"witness_path": "Chemin du témoin",
"x_of_y_signatures_template": "Nécessite {} des signatures {}."
},
"coinjoin": {
"access_account": "Accéder à votre compte Coinjoin?",
"do_not_disconnect": "Ne déconnectez pas votre Trezor!",
"max_mining_fee": "Frais d'extraction maximale:",
"max_rounds": "Rounds max:",
"title": "AUTORISER COINJOIN",
"title_do_not_disconnect": "NE DÉCONNECTEZ PAS VOTRE TREZOR!",
"title_progress": "COINJOIN EN COURS",
"waiting_for_others": "Attendre les autres"
},
"confirm_total": {
"account": "Compte:",
"fee_rate": "Taux de frais:",
"sending_from_account": "Envoi à partir du compte:",
"title_fee": "INFORMATIONS SUR LES FRAIS",
"title_sending_from": "ENVOI DE"
},
"debug": {
"loading_seed": "Chargement des semences",
"loading_seed_not_recommended": "Le chargement des semences privées n'est pas recommandé."
},
"device_name": {
"change_template": "Changer le nom du périphérique en {}?",
"title": "NOM DE L'APPAREIL"
},
"entropy": {
"send": "Voulez-vous vraiment envoyer l'entropie?",
"title": "ENTROPIE INTERNE",
"title_confirm": "CONFIRMER L'ENTROPIE"
},
"eos": {
"about_to_sign_template": "Vous êtes sur le point de signer {}.",
"account": "Compte:",
"action_name": "Nom d'action:",
"amount": "Montant:",
"arbitrary_data": "Données arbitraires",
"buy_ram": "Acheter Ram",
"bytes": "Octets:",
"cancel_vote": "Annuler le vote",
"checksum": "Vérification:",
"code": "Code:",
"contract": "Contracter:",
"cpu": "CPU:",
"creator": "Créateur",
"delegate": "Déléguer",
"delete_auth": "Supprimer",
"from": "Depuis:",
"link_auth": "Auth lien",
"memo": "Note",
"name": "Nom:",
"net": "FILET:",
"new_account": "Nouveau compte",
"no": "Non",
"owner": "Propriétaire:",
"parent": "Parent:",
"payer": "Payeur:",
"permission": "Autorisation:",
"proxy": "Procuration:",
"receiver": "Destinataire:",
"refund": "Remboursement",
"requirement": "Exigence:",
"sell_ram": "Vendre Ram",
"sender": "Expéditeur:",
"sign_transaction": "Signer une transaction",
"threshold": "Seuil:",
"to": "À:",
"transfer": "Transfert:",
"type": "Taper:",
"undelegate": "Indépendant",
"unlink_auth": "AUTH AUCHANT",
"update_auth": "Mettre à jour l'authe",
"vote_for_producers": "Voter pour les producteurs",
"vote_for_proxy": "Votez pour procuration",
"voter": "Électeur:",
"yes": "Oui"
},
"ethereum": {
"amount_sent": "Montant envoyé:",
"confirm_fee": "Confirmer les frais",
"contract": "Contracter:",
"data_size_template": "Taille: {} octets",
"gas_limit": "Limite de gaz:",
"gas_price": "Prix du gaz:",
"max_gas_price": "Prix de gaz maximum:",
"name_and_version": "Nom et version",
"new_contract": "nouveau contrat?",
"no_message_field": "Aucun champ de message",
"priority_fee": "Frais de priorité:",
"show_full_array": "Afficher le tableau complet",
"show_full_domain": "Afficher le domaine complet",
"show_full_message": "Afficher le message complet",
"show_full_struct": "Montrer une structure complète",
"sign_eip712": "Signer vraiment les données typées EIP-712?",
"title_confirm_data": "CONFIRMER LES DONNÉES",
"title_confirm_domain": "CONFIRMER LE DOMAINE",
"title_confirm_message": "CONFIRMER LE MESSAGE",
"title_confirm_struct": "CONFIRMER LA STRUCTURE",
"title_confirm_typed_data": "CONFIRMER LES DONNÉES TYPÉES",
"title_signing_address": "ADRESSE DE SIGNATURE",
"units_template": "{} unités",
"unknown_token": "Token inconnu",
"valid_signature": "La signature est valide."
},
"experimental_mode": {
"enable": "Activer les fonctionnalités expérimentales?",
"only_for_dev": "Seulement pour le développement et les tests bêta!",
"title": "MODE EXPÉRIMENTAL"
},
"fido": {
"already_registered": "Déjà enregistré",
"device_already_registered": "Cet appareil est déjà enregistré avec cette application.",
"device_already_registered_with_template": "Cet appareil est déjà enregistré avec {}.",
"device_not_registered": "Cet appareil n'est pas enregistré avec cette application.",
"does_not_belong": "Les informations d'identification que vous essayez d'importer\npas appartenir à cet authentificateur.",
"erase_credentials": "Effacer toutes les informations d'identification?",
"export_credentials": "Exporter des informations sur les informations d'identification stockées sur cet appareil?",
"not_registered": "Non enregistré",
"not_registered_with_template": "Cet appareil n'est pas enregistré avec\n{}.",
"please_enable_pin_protection": "Veuillez activer la protection des broches.",
"title_authenticate": "FIDO2 AUTHENTIFIE",
"title_import_credential": "IMPORTER DES DIPLÔMES",
"title_list_credentials": "RÉPERTORIER LES RÉFÉRENCES",
"title_register": "REGISTRE FIDO2",
"title_remove_credential": "SUPPRIMER LES INFORMATIONS D'IDENTIFICATION",
"title_reset": "RÉINITIALISATION DE FIDO2",
"title_u2f_auth": "U2F AUTHENTIFIE",
"title_u2f_register": "REGISTRE U2F",
"title_verify_user": "FIDO2 VÉRIFIEZ L'UTILISATEUR",
"unable_to_verify_user": "Impossible de vérifier l'utilisateur.",
"wanna_erase_credentials": "Voulez-vous vraiment effacer toutes les informations d'identification?"
},
"firmware_update": {
"title": "MISE À JOUR DU FIRMWARE",
"title_fingerprint": "EMPREINTE DIGITALE FW"
},
"homescreen": {
"click_to_connect": "Cliquez pour se connecter",
"click_to_unlock": "Cliquez pour déverrouiller",
"title_backup_failed": "LA SAUVEGARDE A ÉCHOUÉ",
"title_backup_needed": "SAUVEGARDE NÉCESSAIRE",
"title_coinjoin_authorized": "COINJOIN AUTORISÉ",
"title_experimental_mode": "MODE EXPÉRIMENTAL",
"title_hold_to_lock": "TENIR À VERROUILLER",
"title_no_usb_connection": "AUCUNE CONNEXION USB",
"title_pin_not_set": "ÉPINGLE NON RÉGLÉE",
"title_seedless": "SANS PÉPINS",
"title_set": "FAIRE UN ÉCRAN D'ACCUEIL"
},
"inputs": {
"back": "DOS",
"cancel": "ANNULER",
"delete": "SUPPRIMER",
"enter": "ENTRER",
"return": "RETOUR",
"show": "MONTRER",
"space": "ESPACE"
},
"joint": {
"title": "TRANSACTION CONJOINTE",
"to_the_total_amount": "Au montant total:",
"you_are_contributing": "Vous contribuez:"
},
"lockscreen": {
"tap_to_connect": "Appuyez pour se connecter",
"tap_to_unlock": "Appuyez pour déverrouiller",
"title_locked": "FERMÉ À CLÉ",
"title_not_connected": "PAS CONNECTÉ"
},
"misc": {
"decrypt_value": "Decrypt la valeur",
"encrypt_value": "Valeur de crypte",
"title_suite_labeling": "ÉTIQUETAGE DE LA SUITE"
},
"modify_amount": {
"address": "Adresse:",
"decrease_amount": "Diminue le montant de:",
"increase_amount": "Augmenter le montant de:",
"new_amount": "Nouveau montant:",
"title": "MODIFIER LE MONTANT"
},
"modify_fee": {
"decrease_fee": "Diminuer les frais de:",
"fee_rate": "Taux de frais:",
"increase_fee": "Augmenter les frais de:",
"new_transaction_fee": "Nouveaux frais de transaction:",
"no_change": "Vos frais n'ont pas changé.",
"title": "MODIFIER LES FRAIS",
"transaction_fee": "Frais de transaction:"
},
"monero": {
"confirm_export": "Confirmer l'exportation",
"confirm_fee": "Confirmer les frais",
"confirm_ki_sync": "Confirmer Ki Sync",
"confirm_refresh": "Confirmer Rafraîchissement",
"confirm_unlock_time": "Confirmer le temps de déverrouillage",
"hashing_inputs": "Entrées de hachage",
"payment_id": "ID de paiement",
"postprocessing": "Post-traitement ...",
"processing": "Traitement...",
"processing_inputs": "Traitement des entrées",
"processing_outputs": "Traitement des sorties",
"signing": "Signer ...",
"signing_inputs": "Signature des entrées",
"unlock_time_set_template": "Déverrouiller le temps pour cette transaction est défini sur {}",
"wanna_export_tx_der": "Voulez-vous vraiment exporter tx_der\npour TX_proof?",
"wanna_export_tx_key": "Voulez-vous vraiment exporter TX_KEY?",
"wanna_export_watchkey": "Voulez-vous vraiment exporter des informations d'identification de montre uniquement?",
"wanna_start_refresh": "Voulez-vous vraiment\ncommencer à actualiser?",
"wanna_sync_key_images": "Voulez-vous vraiment\nsynchroniser les images clés?"
},
"nem": {
"absolute": "Absolue",
"activate": "Activer",
"add": "Ajouter",
"confirm_action": "Confirmer l'action",
"confirm_address": "confirmer l'adresse",
"confirm_creation_fee": "Confirmer les frais de création",
"confirm_fee": "Confirmer les frais",
"confirm_mosaic": "Confirmer la mosaïque",
"confirm_multisig_fee": "Confirmer les frais multisig",
"confirm_namespace": "Confirmer l'espace de noms",
"confirm_payload": "Confirmer la charge utile",
"confirm_properties": "Confirmer les propriétés",
"confirm_rental_fee": "Confirmer les frais de location",
"confirm_transfer_of": "Confirmer le transfert de",
"convert_account_to_multisig": "Convertir le compte en compte multisig?",
"cosign_transaction_for": "Transaction cosignale pour",
"cosignatory": "cosignataire",
"create_mosaic": "Créer de la mosaïque",
"create_namespace": "Créer un espace de noms",
"deactivate": "Désactiver",
"decrease": "Diminuer",
"description": "Description:",
"divisibility_and_levy_cannot_be_shown": "La divisibilité et le prélèvement ne peuvent pas être montrés pour des mosaïques inconnues",
"encrypted": "Crypté:",
"final_confirm": "Confirmation finale",
"immutable": "immuable",
"increase": "Augmenter",
"initial_supply": "Alimentation initiale:",
"initiate_transaction_for": "Initier la transaction pour",
"levy_divisibility": "Divisibilité de prélèvement:",
"levy_fee": "Frais de prélèvement:",
"levy_fee_of": "Confirmer les frais de prélèvement en mosaïque de",
"levy_mosaic": "Mosaïque de prélèvement:",
"levy_namespace": "Espace de noms de prélèvement:",
"levy_recipient": "Récipiendaire de prélèvement:",
"levy_type": "Type de prélèvement:",
"modify_supply_for": "Modifier l'offre pour",
"modify_the_number_of_cosignatories_by": "Modifier le nombre de cosignatoires par",
"mutable": "mutable",
"no": "Non",
"of": "de",
"percentile": "centile",
"raw_units_template": "{} unités brutes",
"remote_harvesting": "Récolte à distance?",
"remove": "Retirer",
"set_minimum_cosignatories_to": "Définir des cosignataires minimums sur",
"sign_tx_fee_template": "Signer cette transaction\net payer {}\nPour les frais de réseau?",
"supply_change": "Changement de matériel",
"supply_units_template": "{} fourniture par {} unités entières?",
"transferable": "Transférable?",
"under_namespace": "sous l'espace de noms",
"unencrypted": "Non crypté:",
"unknown_mosaic": "Mosaïque inconnue!",
"yes": "Oui"
},
"passphrase": {
"access_hidden_wallet": "Accès à un portefeuille caché?",
"always_on_device": "Voulez-vous vraiment entrer en phrase secrète toujours sur l'appareil?",
"from_host_not_shown": "La phrase de passe fournie par l'hôte sera utilisée mais ne sera pas affichée en raison des paramètres de l'appareil.",
"hidden_wallet": "Portefeuille caché",
"hide": "Masquer la phrase de passe provenant de l'hôte?",
"next_screen_will_show_passphrase": "Le prochain écran affichera la phrase secrète.",
"please_enter": "Veuillez saisir votre phrase secrète.",
"revoke_on_device": "Voulez-vous révoquer la phrase secrète sur le réglage de l'appareil?",
"title_confirm": "CONFIRMER LA PHRASE PASSANTE",
"title_enter": "ENTREZ EN PHRASE DE PASSE",
"title_hide": "MASQUER LA PHRASE SECRÈTE",
"title_settings": "PARAMÈTRES DE PHRASE DE PASSE",
"title_source": "SOURCE EN PHRASE DE PASSE",
"turn_off": "Désactiver la protection de la phrase secrète?",
"turn_on": "Activer la protection des phrases de passe?"
},
"pin": {
"change": "Changer la broche?",
"changed": "Pin a changé.",
"cursor_will_change": "La position du curseur changera entre les entrées pour une sécurité améliorée.",
"diff_from_wipe_code": "PIN doit être différente wipe.",
"disabled": "Protection contre les broches\néteindre.",
"enabled": "Protection contre les broches\nallumé.",
"enter": "Entrer la broche",
"enter_new": "Entrez la nouvelle épingle",
"entered_not_valid": "La broche n'est pas valide.",
"info": "La broche sera nécessaire pour accéder à cet appareil.",
"invalid_pin": "La broche n'est pas valide.",
"last_attempt": "Dernière tentative",
"mismatch": "Les épingles entrées ne pas!",
"pin_mismatch": "Non-concordance",
"please_check_again": "Veuillez vérifier à nouveau.",
"reenter_new": "Rentrez à la nouvelle épingle",
"reenter_to_confirm": "Veuillez réintégrer la broche pour confirmer.",
"should_be_long": "La broche doit avoir 4 à 50 chiffres de long.",
"title_check_pin": "ÉPINGLE",
"title_settings": "PARAMÈTRES DE BROCHE",
"title_wrong_pin": "MAUVAISE ÉPINGLE",
"tries_left": "essaie à gauche",
"turn_off": "Êtes-vous sûr de vouloir désactiver la protection des broches?",
"turn_on": "Activer la protection des broches?",
"wrong_pin": "Mauvaise épingle"
},
"plurals": {
"contains_x_keys": "clé|clés",
"lock_after_x_hours": "heure|heures",
"lock_after_x_milliseconds": "milliseconde|millisecondes",
"lock_after_x_minutes": "minute|minutes",
"lock_after_x_seconds": "seconde|secondes",
"sign_x_actions": "action|actiones",
"transaction_of_x_operations": "opération|opérations",
"x_groups_needed": "groupe|groupes",
"x_shares_needed": "partage|partages"
},
"progress": {
"authenticity_check": "Vérification de l'authenticité ...",
"done": "Fait",
"loading_transaction": "Transaction de chargement ...",
"one_second_left": "1 seconde à gauche",
"please_wait": "S'IL VOUS PLAÎT, ATTENDEZ",
"processing": "TRAITEMENT",
"refreshing": "RAFRAÎCHISSANTE",
"signing_transaction": "Transaction de signature ...",
"syncing": "Synchronisation ...",
"x_seconds_left_template": "{} secondes à gauche"
},
"reboot_to_bootloader": {
"restart": "Voulez-vous redémarrer Trezor en mode chargeur de démarrage?",
"title": "ALLER AU CHARGEUR DE DÉMARRAGE",
"version_by_template": "Version du firmware {}\npar {}"
},
"recovery": {
"cancel_dry_run": "Annuler le chèque de sauvegarde",
"check_dry_run": "Vérifiez votre sauvegarde?",
"cursor_will_change": "La position du curseur changera entre les entrées pour une sécurité améliorée.",
"dry_run_bip39_valid_match": "Récupération entrée est valide et correspond à celle de l'appareil.",
"dry_run_bip39_valid_mismatch": "Récupération entrée est valide mais ne correspond pas à celle de l'appareil.",
"dry_run_slip39_valid_match": "Récupération entrées sont valides et correspondent qui est actuellement.",
"dry_run_slip39_valid_mismatch": "Récupération entrées sont valides mais ne correspondent qui est actuellement.",
"enter_any_share": "Entrez n'importe quelle part",
"enter_backup": "Entrez votre sauvegarde.",
"enter_different_share": "Veuillez saisir une part différente.",
"enter_share_from_diff_group": "Entrez Share à partir d'un groupe différent.",
"group_num_template": "Groupe {}",
"group_threshold_reached": "Le seuil de groupe atteint.",
"invalid_seed_entered": "Les graines de récupération non valides sont entrées.",
"invalid_share_entered": "Part de récupération non valide entré.",
"more_shares_needed": "Plus d'actions nécessaires",
"num_of_words": "Sélectionnez le nombre de mots dans votre sauvegarde.",
"only_first_n_letters": "Vous n'aurez qu'à sélectionner les 2-4 premières lettres de chaque mot.",
"progress_will_be_lost": "Tous les progrès seront perdus.",
"select_num_of_words": "Sélectionnez le nombre de mots dans votre sauvegarde.",
"share_already_entered": "Partager déjà entré.",
"share_from_another_shamir": "Vous êtes entré dans une part d'une autre sauvegarde Shamir.",
"share_num_template": "Partager {}",
"title": "RÉCUPÉRER LE PORTEFEUILLE",
"title_cancel_dry_run": "ANNULER LE CHÈQUE DE SAUVEGARDE",
"title_cancel_recovery": "ANNULER LA RÉCUPÉRATION",
"title_dry_run": "CHÈQUE DE SAUVEGARDE",
"title_recover": "RÉCUPÉRER LE PORTEFEUILLE",
"title_remaining_shares": "ACTIONS RESTANTES",
"type_word_x_of_y_template": "Type Word {} de {}",
"wallet_recovered": "Le portefeuille a récupéré avec succès",
"wanna_cancel_dry_run": "Êtes-vous sûr que vous souhaitez annuler le chèque de sauvegarde?",
"wanna_cancel_recovery": "Êtes-vous sûr de souhaiter annuler le processus de récupération?",
"word_count_template": "({} mots)",
"word_x_of_y_template": "MOT DE {}",
"x_more_items_starting_template_plural": "{count} plus {plural} startes",
"x_more_shares_needed_template_plural": "{count} plus {plural} nécessaires.",
"x_of_y_entered_template": "{} des actions {} entrées avec succès.",
"you_have_entered": "Vous êtes entré"
},
"reset": {
"advanced_group_threshold_info": "Le seuil de groupe spécifie le nombre de groupes nécessaires pour récupérer votre portefeuille.",
"all_x_of_y_template": "Tous {} de {} partages",
"any_x_of_y_template": "Toute {} de {} partage",
"button_create": "CRÉER UN PORTEFEUILLE",
"button_recover": "RÉCUPÉRER LE PORTEFEUILLE",
"by_continuing": "En vous poursuivant, vous acceptez les termes et conditions de Trezor Company.",
"check_backup_title": "VÉRIFIEZ LA SAUVEGARDE",
"check_group_share_title_template": "VÉRIFIER G {} - PART {}",
"check_seed_title": "VÉRIFIER LES GRAINES",
"check_share_title_template": "VÉRIFIER LE PARTAGE # {}",
"continue_with_next_share": "Continuez avec la prochaine part.",
"continue_with_share_template": "Continuez avec Share # {}.",
"finished_verifying_group_template": "Vous avez terminé la vérification de vos parts de récupération pour le groupe {}.",
"finished_verifying_seed": "Vous avez fini de vérifier vos graines de récupération.",
"finished_verifying_shares": "Vous avez fini de vérifier vos parts de récupération.",
"group_description": "Un groupe est composé de partages de recouvrement.",
"group_info": "Chaque groupe a un nombre défini d'actions et son propre seuil.Dans les prochaines étapes, vous définissez le nombre d'actions et les seuils.",
"group_share_checked_successfully_template": "Groupe {} - partager {} vérifié avec succès.",
"group_share_title_template": "GROUPE {} - PARTAGER {}",
"more_info_at": "Plus d'informations à",
"need_all_share_template": "Pour la récupération, vous avez besoin de tout {} des actions.",
"need_any_share_template": "Pour la récupération, vous avez besoin de {} des actions.",
"needed_to_form_a_group": "nécessaire pour former un groupe.",
"needed_to_recover_your_wallet": "nécessaire pour récupérer votre portefeuille.",
"never_make_digital_copy": "Ne faites jamais une copie numérique de votre sauvegarde ou téléchargez-la en ligne!",
"num_of_share_holders_template": "{} Les personnes ou les emplacements tiendront chacun une part.",
"num_of_shares_advanced_info_template": "Chaque part de récupération est une séquence de 20 mots.Ensuite, vous choisirez le nombre de seuils d'actions nécessaires pour former le groupe {}.",
"num_of_shares_basic_info": "Chaque part de récupération est une séquence de 20 mots.Ensuite, vous choisissez le nombre d'actions dont vous avez besoin pour récupérer votre portefeuille.",
"num_shares_for_group_template": "Le nombre requis d'actions pour former le groupe {}.",
"number_of_shares_info": "= Nombre total de listes de mots uniques utilisées pour le sauvegarde.",
"one_share": "1 partage",
"only_one_share_will_be_created": "Une seule part sera créée.",
"recovery_seed_title": "GRAINES DE RÉCUPÉRATION",
"recovery_share_title_template": "PARTAGE DE RÉCUPÉRATION # {}",
"required_number_of_groups": "Le nombre requis de groupes pour la récupération.",
"select_correct_word": "Sélectionnez le mot correct pour chaque position.",
"select_word_template": "SÉLECTIONNER {} MOT",
"select_word_x_of_y_template": "Word {} de {}:",
"set_it_to_count_template": "Définissez-le sur {} et vous aurez besoin",
"share_checked_successfully_template": "Partage de récupération # {} vérifié avec succès.",
"share_words_title": "SAUVEGARDE STANDARD",
"slip39_checklist_num_groups": "Nombre de groupes",
"slip39_checklist_num_shares": "Nombre de partages",
"slip39_checklist_set_num_groups": "Définir le nombre de groupes",
"slip39_checklist_set_num_shares": "Définir le nombre d'actions",
"slip39_checklist_set_sizes": "Régler les tailles et les seuils",
"slip39_checklist_set_sizes_longer": "Définir les tailles et les seuils pour chaque groupe",
"slip39_checklist_set_threshold": "Définir le seuil",
"slip39_checklist_title": "LISTE DE CONTRÔLE DE SAUVEGARDE",
"slip39_checklist_write_down": "Notez et vérifiez toutes les partages",
"slip39_checklist_write_down_recovery": "Notez et vérifiez toutes les parts de récupération",
"the_threshold_sets_the_number_of_shares": "Le seuil définit le nombre d'actions",
"threshold_info": "= Nombre minimum de listes de mots uniques utilisées pour la récupération.",
"title_backup_is_done": "LA SAUVEGARDE EST TERMINÉE",
"title_create_wallet": "CRÉER UN PORTEFEUILLE",
"title_create_wallet_shamir": "CRÉER UN PORTEFEUILLE (SHAMIR)",
"title_group_threshold": "SEUIL DE GROUPE",
"title_number_of_groups": "NOMBRE DE GROUPES",
"title_number_of_shares": "NOMBRE DE PARTAGES",
"title_set_group_threshold": "DÉFINIR LE SEUIL DE GROUPE",
"title_set_number_of_groups": "DÉFINIR LE NOMBRE DE GROUPES",
"title_set_number_of_shares": "DÉFINIR LE NOMBRE D'ACTIONS",
"title_set_threshold": "DÉFINIR LE SEUIL",
"to_form_group_template": "pour former le groupe {}.",
"tos_link": "trezor.io/tos",
"total_number_of_shares_in_group_template": "Définissez le nombre total d'actions dans le groupe {}.",
"use_your_backup": "Utilisez votre sauvegarde lorsque vous devez récupérer votre portefeuille.",
"write_down_words_template": "Notez tous les mots {} dans l'ordre.",
"wrong_word_selected": "Mauvais mot sélectionné!",
"you_need_one_share": "Pour la récupération, vous avez besoin de 1 part.",
"your_backup_is_done": "Votre sauvegarde est terminée."
},
"ripple": {
"confirm_tag": "Confirmer la balise",
"destination_tag_template": "Tag de destination:\n{}"
},
"rotation": {
"change_template": "Voulez-vous modifier la rotation des périphériques en {}?",
"east": "est",
"north": "nord",
"south": "sud",
"title_change": "CHANGER LA ROTATION",
"west": "Ouest"
},
"safety_checks": {
"approve_unsafe_always": "Trezor vous permettra d'approuver certaines actions qui pourraient être dangereuses.",
"approve_unsafe_temporary": "Trezor vous permettra temporairement d'approuver certaines actions qui pourraient être dangereuses.",
"enforce_strict": "Voulez-vous vraiment appliquer des contrôles de sécurité stricts (recommandés)?",
"title": "CONTRÔLES DE SÉCURITÉ",
"title_safety_override": "REMPLIR DE LA SÉCURITÉ"
},
"sd_card": {
"all_data_will_be_lost": "Toutes les données sur la carte SD seront perdues.",
"card_required": "Carte SD requise.",
"disable": "Voulez-vous vraiment supprimer la protection des cartes SD de votre appareil?",
"disabled": "Vous avez une protection SD handicapée avec succès.",
"enable": "Voulez-vous vraiment sécuriser votre appareil avec une protection de carte SD?",
"enabled": "Vous avez réussi à activer la protection SD.",
"error": "Erreur de carte SD",
"format_card": "Carte SD de format",
"insert_correct_card": "Veuillez insérer la carte SD correcte pour cet appareil.",
"please_insert": "Veuillez insérer votre carte SD.",
"please_unplug_and_insert": "Veuillez débrancher l'appareil et insérer votre carte SD.",
"problem_accessing": "Il y avait un problème à accéder à la carte SD.",
"refresh": "Voulez-vous vraiment remplacer le secret de la carte SD actuel par un secret nouvellement généré?",
"refreshed": "Vous avez réussi à rafraîchir la protection SD.",
"restart": "Voulez-vous redémarrer Trezor en mode chargeur de démarrage?",
"title": "PROTECTION DES CARTES SD",
"title_problem": "PROBLÈME DE CARTE SD",
"unknown_filesystem": "Système de fichiers inconnu",
"unplug_and_insert_correct": "Veuillez débrancher l'appareil et insérer la carte SD correcte.",
"use_different_card": "Utilisez une carte différente ou formate la carte SD au système de fichiers FAT32",
"wanna_format": "Voulez-vous vraiment formater la carte SD?",
"wrong_sd_card": "Mauvaise carte SD"
},
"send": {
"address_path": "chemin d'adresse",
"amount": "Montant:",
"confirm_sending": "Confirm_sending",
"from_multiple_accounts": "Envoi à partir de plusieurs comptes.",
"including_fee": "Y compris les frais:",
"maximum_fee": "Frais maximaux:",
"receiving_to_multisig": "Recevoir une adresse multisig.",
"title_amount": "MONTANT",
"title_confirm_sending": "CONFIRMER L'ENVOI",
"title_joint_transaction": "TRANSACTION CONJOINTE",
"title_receiving_to": "RECEVOIR",
"title_recipient": "DESTINATAIRE",
"title_sending": "ENVOI EN COURS",
"title_sending_amount": "MONTANT",
"title_sending_to": "ENVOI À",
"to_the_total_amount": "Au montant total:",
"total_amount": "Montant total:",
"transaction_id": "Identifiant de transaction:",
"you_are_contributing": "Vous contribuez:"
},
"share_words": {
"words_in_order": "mots dans l'ordre.",
"wrote_down_all": "J'ai écrit tout"
},
"sign_message": {
"bytes_template": "{} Octets",
"confirm_address": "Adresse de signature",
"confirm_message": "Confirmer le message",
"message_size": "Taille du message:",
"verify_address": "Vérifier l'adresse"
},
"stellar": {
"account": "Compte",
"account_merge": "Fusion du compte",
"account_thresholds": "Seuils de compte",
"add_signer": "Ajouter le signataire",
"add_trust": "Ajouter la confiance",
"all_will_be_sent_to": "Tous les xlm seront envoyés à:",
"allow_trust": "Autoriser la confiance",
"asset": "Actif",
"bump_sequence": "Séquence de bosse",
"buying": "Achat:",
"clear_data": "Effacer les données",
"clear_flags": "Drapeaux clairs",
"confirm_issuer": "Confirmer l'émetteur",
"confirm_memo": "Confirmer la note",
"confirm_network": "Confirmer le réseau",
"confirm_operation": "Confirmation de l'opération",
"confirm_stellar": "Confirmer stellaire",
"confirm_timebounds": "Confirmer les temps",
"create_account": "Créer un compte",
"debited_amount": "Montant débité",
"delete": "Supprimer",
"delete_passive_offer": "Supprimer l'offre passive",
"delete_trust": "Supprimer la confiance",
"destination": "Destination:",
"exchanges_require_memo": "IMPORTANT: De nombreux échanges nécessitent un mémo lors du dépôt",
"final_confirm": "Confirmation finale",
"hash": "Hacher:",
"high": "Haut:",
"home_domain": "Domaine de la maison",
"inflation": "Inflation",
"initial_balance": "Balance initiale",
"initialize_signing_with": "Initialiser la signature avec",
"issuer_template": "{} émetteur:",
"key": "Clé:",
"limit": "Limite:",
"low": "Faible:",
"master_weight": "Poids maître:",
"medium": "Moyen:",
"new_offer": "Nouvelle offre",
"new_passive_offer": "Nouvelle offre passive",
"no_memo_set": "Pas de mémo!",
"no_restriction": "[pas de réstriction]",
"on_network_template": "La transaction est sur {}",
"path_pay": "PATH PAY",
"path_pay_at_least": "Le chemin payant le moins",
"pay": "Payer:",
"pay_at_most": "Payer tout au plus:",
"preauth_transaction": "Transaction pré-UTH:",
"price_per_template": "Prix par {}:",
"private_network": "Réseau privé",
"remove_signer": "Supprimer le signataire",
"revoke_trust": "Révoquer la confiance",
"selling": "Vente:",
"set_data": "Définir les données",
"set_flags": "Définir les drapeaux",
"set_sequence_to_template": "Définir la séquence sur {}?",
"sign_tx_count_template": "Signer cette transaction composée de {}",
"sign_tx_fee_template": "et payer {}\npour les frais?",
"source_account": "Compte source:",
"testnet_network": "réseau Testnet",
"trusted_account": "Compte de confiance",
"update": "Mise à jour",
"valid_from": "Valide de (UTC)",
"valid_to": "Valable à (UTC)",
"value_sha256": "Valeur (SHA-256):",
"wanna_clean_value_key_template": "Voulez-vous effacer la clé de valeur {}?",
"your_account": "Votre compte"
},
"tezos": {
"address": "Adresse:",
"amount": "Montant:",
"baker_address": "Adresse boulanger:",
"balance": "Équilibre:",
"ballot": "Bulletin de vote:",
"confirm_delegation": "Confirmer la délégation",
"confirm_origination": "Confirmer l'origine",
"delegator": "Délégant:",
"fee": "Frais:",
"proposal": "Proposition",
"register_delegate": "Enregistrer le délégué",
"remove_delegation": "Supprimer la délégation",
"submit_ballot": "Soumettre un bulletin de vote",
"submit_proposal": "Soumettre la proposition",
"submit_proposals": "Soumettre des propositions"
},
"tutorial": {
"middle_click": "Appuyez à gauche et à droite à la même chose. Il est temps de confirmer.",
"press_and_hold": "Appuyez et maintenez le bouton droit pour approuver des opérations.",
"ready_to_use": "Tu es prêt à. Utilisez Trezor.",
"scroll_down": "Appuyez à droite pour faire défiler vers le bas pour lire tout le contenu lorsque le texte ne tient pas. Appuyez à gauche pour faire défiler vers le haut.",
"sure_you_want_skip": "Est-tu sûr que tu. Vous voulez sauter le tutoriel?",
"title_hello": "BONJOUR",
"title_screen_scroll": "PARCHEMIN D'ÉCRAN",
"title_skip": "PASSER LE TUTORIEL",
"title_tutorial_complete": "TUTORIEL COMPLET",
"use_trezor": "Utiliser Trezor par. Cliquez sur les boutons gauche et droit. Continuer tout droit.",
"welcome_press_right": "Bienvenue à Trezor. Appuyez sur le droit de continuer."
},
"u2f": {
"get": "Augmenter et récupérer le compteur U2F?",
"set_template": "Définissez le compteur U2F sur {}?",
"title_get": "OBTENEZ UN COMPTEUR U2F",
"title_set": "DÉFINIR LE COMPTEUR U2F"
},
"wipe": {
"info": "Toutes les données seront effacées.",
"title": "EFFACER L'APPAREIL",
"want_to_wipe": "Voulez-vous vraiment essuyer l'appareil?"
},
"wipe_code": {
"change": "Changer de code d'essuyage?",
"changed": "Effacer le code modifié.",
"diff_from_pin": "Le code d'essuyage doit être différent de votre broche.\nVeuillez réessayer.",
"disabled": "Essuyez le code désactivé.",
"enabled": "Effacer le code activé.",
"enter_new": "Entrez le nouveau code d'essuyage",
"info": "Le code peut pour effacer toutes les données.",
"invalid": "Code d'essuyage non valide",
"mismatch": "Les codes d'essuyage entrés ne correspondent pas!",
"reenter": "Rentrer le code d'essuyage",
"reenter_to_confirm": "Veuillez réintégrer le code d'essuyage pour confirmer.",
"title_check": "VÉRIFIER LE CODE D'ESSUYAGE",
"title_invalid": "CODE D'ESSUYAGE NON VALIDE",
"title_settings": "EFFACER DU CODE",
"turn_off": "Désactiver la protection du code d'essuyage?",
"turn_on": "Activer la protection du code d'essuyage?",
"wipe_code_mismatch": "Effacer le décalage du code"
},
"word_count": {
"title": "NOMBRE DE MOTS"
},
"words": {
"are_you_sure": "Es-tu sûr?",
"array_of": "Tableau de",
"buying": "Achat",
"confirm": "Confirmer",
"contains": "contient",
"continue_anyway": "Continuer de toute façon?",
"continue_with": "Continue avec",
"error": "Erreur",
"from": "depuis",
"keep_it_safe": "Garde-le en sécurité!",
"know_what_your_doing": "Continuez uniquement si vous savez ce que vous faites!",
"my_trezor": "Mon Trezor",
"outputs": "les sorties",
"please_check_again": "Veuillez vérifier à nouveau",
"please_try_again": "Veuillez réessayer",
"really_wanna": "Voulez-vous vraiment",
"sign": "Signe",
"title_check": "VÉRIFIER",
"title_group": "GROUPE",
"title_information": "INFORMATION",
"title_remember": "SOUVIENS-TOI",
"title_share": "PARTAGER",
"title_shares": "ACTIONS",
"title_success": "SUCCÈS",
"title_summary": "RÉSUMÉ",
"title_threshold": "SEUIL",
"unknown": "Inconnu",
"warning": "Avertissement"
}
}
}

@ -0,0 +1,841 @@
//! generated from fr.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
// NOTE: not used as a code, only for
// documentation purposes
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
addr_mismatch__contact_support: "Veuillez contacter le support Trezor à",
addr_mismatch__key_mismatch: "Déliachance clé?",
addr_mismatch__mismatch: "ADRESSER L'AFFICATION?",
addr_mismatch__support_url: "trezor.io/support",
addr_mismatch__title: "ADRESSER L'AFFICATION?",
addr_mismatch__title_key_mismatch: "DÉLIACHANCE CLÉ?",
addr_mismatch__wrong_derication_path: "Mauvais chemin de dérivation pour le compte sélectionné.",
addr_mismatch__xpub_mismatch: "Xpub inadéquat?",
address__address: "Adresse:",
address__public_key: "Confirmer la clé publique",
address__title_cosigner: "COSIGNATAIRE",
address__title_receive_address: "RECEVOIR L'ADRESSE",
address__title_yours: "LE VÔTRE",
address_details__account: "Compte:",
address_details__derivation_path: "Chemin de dérivation:",
address_details__title_receive_address: "RECEVOIR L'ADRESSE",
address_details__title_receiving_to: "RECEVOIR",
authenticate__confirm_template: "Autoriser l'ordinateur connecté pour confirmer que votre {} est authentique?",
authenticate__header: "Authentifier l'appareil",
auto_lock__change_template: "Verrouiller automatiquement votre trezor après {} d'inactivité?",
auto_lock__title: "RETARD DE VERROUILLAGE AUTOMATIQUE",
backup__can_back_up_anytime: "Vous pouvez sauvegarder votre Trezor une fois, à tout moment.",
backup__it_should_be_backed_up: "Vous devriez sauvegarder votre nouveau portefeuille.",
backup__it_should_be_backed_up_now: "Il devrait être sauvegardé maintenant!",
backup__new_wallet_created: "Nouveau portefeuille créé.",
backup__new_wallet_successfully_created: "Un nouveau portefeuille a créé avec succès.",
backup__recover_anytime: "Vous pouvez utiliser votre sauvegarde pour récupérer votre portefeuille à tout moment.",
backup__title_backup_wallet: "PORTEFEUILLE DE SAUVEGARDE",
backup__title_skip: "SAUTER LA SAUVEGARDE",
backup__want_to_skip: "Êtes-vous sûr de vouloir sauter la sauvegarde?",
binance__buy: "Acheter",
binance__confirm_cancel: "Confirmer l'annulation",
binance__confirm_input: "Confirmer l'entrée",
binance__confirm_order: "Confirmer la commande",
binance__confirm_output: "Confirmer la sortie",
binance__order_id: "Numéro de commande:",
binance__pair: "Paire:",
binance__price: "Prix:",
binance__quantity: "Quantité:",
binance__sell: "Vendre",
binance__sender_address: "Adresse de l'expéditeur:",
binance__side: "Côté:",
binance__unknown: "Inconnu",
bitcoin__commitment_data: "Données d'engagement:",
bitcoin__confirm_locktime: "Confirmer le verrouillage",
bitcoin__create_proof_of_ownership: "Voulez-vous créer une preuve de propriété?",
bitcoin__high_mining_fee_template: "Les frais d'extraction de\n{}\nest de façon inattendue.",
bitcoin__locktime_no_effect: "Locktime est réglé mais n'aura aucun effet.",
bitcoin__locktime_set_to: "Locktime réglé sur:",
bitcoin__locktime_set_to_blockheight: "Locktime réglé sur BlockHeight:",
bitcoin__lot_of_change_outputs: "Beaucoup de sorties de changement.",
bitcoin__multiple_accounts: "Plusieurs comptes",
bitcoin__new_fee_rate: "Nouveau taux de frais:",
bitcoin__simple_send_of: "Envoi simple de",
bitcoin__ticket_amount: "Montant de la billette:",
bitcoin__title_confirm_details: "CONFIRMER LES DÉTAILS",
bitcoin__title_finalize_transaction: "FINALISER LA TRANSACTION",
bitcoin__title_high_mining_fee: "FRAIS D'EXTRACTION ÉLEVÉS",
bitcoin__title_meld_transaction: "TRANSACTION FUSION",
bitcoin__title_modify_amount: "MODIFIER LE MONTANT",
bitcoin__title_payjoin: "VERSER DES RENDEZ-VOUS",
bitcoin__title_proof_of_ownership: "PREUVE DE PROPRIÉTÉ",
bitcoin__title_purchase_ticket: "BILLET D'ACHAT",
bitcoin__title_update_transaction: "METTRE À JOUR LA TRANSACTION",
bitcoin__unknown_path: "Chemin inconnu",
bitcoin__unknown_transaction: "Transaction inconnue",
bitcoin__unusually_high_fee: "Frais inhabituellement élevés.",
bitcoin__unverified_external_inputs: "La transaction contient des entrées externes non vérifiées.",
bitcoin__valid_signature: "La signature est valide.",
bitcoin__voting_rights: "Droits de vote sur:",
buttons__abort: "AVORTER",
buttons__access: "ACCÉDER",
buttons__again: "ENCORE",
buttons__allow: "PERMETTRE",
buttons__back_up: "SAUVEGARDE",
buttons__cancel: "ANNULER",
buttons__change: "CHANGEMENT",
buttons__check: "VÉRIFIER",
buttons__check_again: "REVÉRIFIER",
buttons__close: "FERMER",
buttons__confirm: "CONFIRMER",
buttons__continue: "CONTINUER",
buttons__details: "DÉTAILS",
buttons__enable: "ACTIVER",
buttons__enter: "ENTRER",
buttons__enter_share: "ENTRER LA PART",
buttons__export: "EXPORTER",
buttons__format: "FORMAT",
buttons__go_back: "RETOURNER",
buttons__hold_to_confirm: "TENIR POUR CONFIRMER",
buttons__info: "INFO",
buttons__install: "INSTALLER",
buttons__more_info: "PLUS D'INFORMATIONS",
buttons__ok_i_understand: "OK, JE COMPRENDS",
buttons__purchase: "ACHAT",
buttons__quit: "QUITTER",
buttons__restart: "REDÉMARRAGE",
buttons__retry: "RECOMMENCEZ",
buttons__select: "SÉLECTIONNER",
buttons__set: "ENSEMBLE",
buttons__show_all: "AFFICHER TOUT",
buttons__show_words: "MONTRER DES MOTS",
buttons__skip: "SAUTER",
buttons__try_again: "ESSAYER À NOUVEAU",
buttons__turn_off: "ÉTEINDRE",
buttons__turn_on: "ALLUMER",
cardano__addr_base: "Base",
cardano__addr_enterprise: "Entreprise",
cardano__addr_legacy: "Héritage",
cardano__addr_pointer: "Aiguille",
cardano__addr_reward: "Récompense",
cardano__address_no_staking: "Adresse - Pas de récompenses de jalonnement.",
cardano__amount: "Montant:",
cardano__amount_burned_decimals_unknown: "Montant brûlé:",
cardano__amount_minted_decimals_unknown: "Montant frappé:",
cardano__amount_sent_decimals_unknown: "Montant envoyé (décimales inconnues):",
cardano__anonymous_pool: "La piscine n'a pas de métadonnées (piscine anonyme)",
cardano__asset_fingerprint: "Empreinte digitale de l'actif:",
cardano__auxiliary_data_hash: "Hachage des données auxiliaires:",
cardano__block: "Bloc",
cardano__catalyst: "Catalyseur",
cardano__certificate: "Certificat",
cardano__certificate_path: "Chemin de certificat",
cardano__change_output: "Modifier la sortie",
cardano__change_output_path: "Modifier le chemin de sortie",
cardano__change_output_staking_path: "Modifier le chemin de la sortie de sortie",
cardano__check_all_items: "Vérifiez soigneusement tous les articles.",
cardano__choose_level_of_details: "Choisissez le niveau de détails:",
cardano__collateral_input_id: "ID d'entrée collatérale:",
cardano__collateral_input_index: "Index d'entrée collatérale:",
cardano__collateral_output_contains_tokens: "La sortie de retour collatérale contient des jetons.",
cardano__collateral_return: "Retour collatéral",
cardano__confirm: "Confirmer:",
cardano__confirm_signing_stake_pool: "Confirmez la signature de l'enregistrement du pool de pommes en tant que propriétaire.",
cardano__confirm_transaction: "Confirmer la transaction",
cardano__confirming_a_multisig_transaction: "Confirmant une transaction multisig.",
cardano__confirming_pool_registration: "Confirmer l'inscription au pool en tant que propriétaire.",
cardano__confirming_transction: "Confirmant une transaction.",
cardano__cost: "Coût",
cardano__credential_mismatch: "Les informations d'identification ne correspondent pas aux informations d'identification de paiement.",
cardano__datum_hash: "Hash de Datum:",
cardano__delegating_to: "Déléguer à:",
cardano__for_account_and_index_template: "pour le compte {} et index {}:",
cardano__for_account_template: "pour le compte {}:",
cardano__for_key_hash: "pour le hachage clé:",
cardano__for_script: "pour script:",
cardano__inline_datum: "Date en ligne",
cardano__input_id: "ID d'entrée:",
cardano__input_index: "Index d'entrée:",
cardano__intro_text_address: "Adresse",
cardano__intro_text_change: "L'adresse suivante est une adresse de changement.C'est",
cardano__intro_text_owned_by_device: "L'adresse suivante appartient à cet appareil.C'est",
cardano__intro_text_registration_payment: "L'adresse de paiement de l'enregistrement des clés de vote appartient à cet appareil.C'est",
cardano__key_hash: "hachage clé",
cardano__margin: "Marge",
cardano__multisig_path: "chemin multi-sige",
cardano__nested_scripts_template: "Contient des scripts imbriqués {}.",
cardano__network: "Réseau:",
cardano__no_output_tx: "La transaction n'a pas de sorties, le réseau ne peut pas être vérifié.",
cardano__nonce: "Nonce:",
cardano__other: "autre",
cardano__path: "chemin",
cardano__pledge: "Gage",
cardano__pointer: "aiguille",
cardano__policy_id: "ID de politique:",
cardano__pool_metadata_hash: "Hash de métadonnées de la piscine:",
cardano__pool_metadata_url: "URL des métadonnées de la piscine:",
cardano__pool_owner: "Propriétaire de la piscine:",
cardano__pool_owner_path: "Path de jalonnement du propriétaire de la piscine",
cardano__pool_reward_account: "Compte de récompense de piscine:",
cardano__reference_input_id: "ID d'entrée de référence:",
cardano__reference_input_index: "Index d'entrée de référence:",
cardano__reference_script: "Script de référence",
cardano__required_signer: "Signataire requis",
cardano__reward: "récompense",
cardano__reward_address: "L'adresse est une adresse de récompense.",
cardano__reward_eligibility_warning: "AVERTISSEMENT: L'adresse n'est pas une adresse de paiement, elle n'est pas éligible pour les récompenses.",
cardano__rewards_go_to: "Les récompenses vont à:",
cardano__script: "scénario",
cardano__script_all: "Tout",
cardano__script_any: "N'importe lequel",
cardano__script_data_hash: "Hash de données de script:",
cardano__script_hash: "Hash de script:",
cardano__script_invalid_before: "Invalide avant",
cardano__script_invalid_hereafter: "Invalide ci-après",
cardano__script_key: "Clé",
cardano__script_n_of_k: "N de k",
cardano__script_reward: "récompense de script",
cardano__sending: "Envoi en cours",
cardano__show_simple: "Montrer simple",
cardano__sign_tx_path_template: "Signer la transaction avec {}:",
cardano__stake_delegation: "Délégation",
cardano__stake_deregistration: "Déréglage des clés",
cardano__stake_pool_registration: "Enregistrement de StagePool",
cardano__stake_pool_registration_pool_id: "Enregistrement du pool de pommes\nID de piscine:",
cardano__stake_registration: "Enregistrement clé des parties",
cardano__staking_key_for_account: "Clé de jalonnement pour le compte",
cardano__to_pool: "À la piscine:",
cardano__token_minting_path: "Path de ponte de jeton",
cardano__total_collateral: "Total collatéral:",
cardano__transaction: "Transaction",
cardano__transaction_contains_minting_or_burning: "La transaction contient la frappe ou la combustion de jetons.",
cardano__transaction_contains_script_address_no_datum: "La sortie de transaction suivante contient une adresse de script, mais ne contient pas de référence.",
cardano__transaction_fee: "Frais de transaction:",
cardano__transaction_id: "Identifiant de transaction:",
cardano__transaction_no_collateral_input: "La transaction ne contient aucune entrée collatérale.Le script Plutus ne pourra pas s'exécuter.",
cardano__transaction_no_script_data_hash: "La transaction ne contient aucun hachage de données de script.Le script Plutus ne pourra pas s'exécuter.",
cardano__transaction_output_contains_tokens: "La sortie de transaction suivante contient des jetons.",
cardano__ttl: "TTL:",
cardano__unknown: "Inconnu",
cardano__unknown_collateral_amount: "Montant collatéral inconnu.",
cardano__unusual_path: "Le chemin est inhabituel.",
cardano__valid_since: "Valable depuis:",
cardano__verify_script: "Vérifier le script",
cardano__vote_key_registration: "Voter l'inscription clé (CIP-36)",
cardano__vote_public_key: "Votez la clé publique:",
cardano__voting_purpose: "Objectif de vote:",
cardano__warning: "Avertissement",
cardano__weight: "Poids:",
cardano__withdrawal_for_address_template: "Confirmer le retrait de l'adresse {}:",
cardano__witness_path: "Chemin du témoin",
cardano__x_of_y_signatures_template: "Nécessite {} des signatures {}.",
coinjoin__access_account: "Accéder à votre compte Coinjoin?",
coinjoin__do_not_disconnect: "Ne déconnectez pas votre Trezor!",
coinjoin__max_mining_fee: "Frais d'extraction maximale:",
coinjoin__max_rounds: "Rounds max:",
coinjoin__title: "AUTORISER COINJOIN",
coinjoin__title_do_not_disconnect: "NE DÉCONNECTEZ PAS VOTRE TREZOR!",
coinjoin__title_progress: "COINJOIN EN COURS",
coinjoin__waiting_for_others: "Attendre les autres",
confirm_total__account: "Compte:",
confirm_total__fee_rate: "Taux de frais:",
confirm_total__sending_from_account: "Envoi à partir du compte:",
confirm_total__title_fee: "INFORMATIONS SUR LES FRAIS",
confirm_total__title_sending_from: "ENVOI DE",
debug__loading_seed: "Chargement des semences",
debug__loading_seed_not_recommended: "Le chargement des semences privées n'est pas recommandé.",
device_name__change_template: "Changer le nom du périphérique en {}?",
device_name__title: "NOM DE L'APPAREIL",
entropy__send: "Voulez-vous vraiment envoyer l'entropie?",
entropy__title: "ENTROPIE INTERNE",
entropy__title_confirm: "CONFIRMER L'ENTROPIE",
eos__about_to_sign_template: "Vous êtes sur le point de signer {}.",
eos__account: "Compte:",
eos__action_name: "Nom d'action:",
eos__amount: "Montant:",
eos__arbitrary_data: "Données arbitraires",
eos__buy_ram: "Acheter Ram",
eos__bytes: "Octets:",
eos__cancel_vote: "Annuler le vote",
eos__checksum: "Vérification:",
eos__code: "Code:",
eos__contract: "Contracter:",
eos__cpu: "CPU:",
eos__creator: "Créateur",
eos__delegate: "Déléguer",
eos__delete_auth: "Supprimer",
eos__from: "Depuis:",
eos__link_auth: "Auth lien",
eos__memo: "Note",
eos__name: "Nom:",
eos__net: "FILET:",
eos__new_account: "Nouveau compte",
eos__no: "Non",
eos__owner: "Propriétaire:",
eos__parent: "Parent:",
eos__payer: "Payeur:",
eos__permission: "Autorisation:",
eos__proxy: "Procuration:",
eos__receiver: "Destinataire:",
eos__refund: "Remboursement",
eos__requirement: "Exigence:",
eos__sell_ram: "Vendre Ram",
eos__sender: "Expéditeur:",
eos__sign_transaction: "Signer une transaction",
eos__threshold: "Seuil:",
eos__to: "À:",
eos__transfer: "Transfert:",
eos__type: "Taper:",
eos__undelegate: "Indépendant",
eos__unlink_auth: "AUTH AUCHANT",
eos__update_auth: "Mettre à jour l'authe",
eos__vote_for_producers: "Voter pour les producteurs",
eos__vote_for_proxy: "Votez pour procuration",
eos__voter: "Électeur:",
eos__yes: "Oui",
ethereum__amount_sent: "Montant envoyé:",
ethereum__confirm_fee: "Confirmer les frais",
ethereum__contract: "Contracter:",
ethereum__data_size_template: "Taille: {} octets",
ethereum__gas_limit: "Limite de gaz:",
ethereum__gas_price: "Prix du gaz:",
ethereum__max_gas_price: "Prix de gaz maximum:",
ethereum__name_and_version: "Nom et version",
ethereum__new_contract: "nouveau contrat?",
ethereum__no_message_field: "Aucun champ de message",
ethereum__priority_fee: "Frais de priorité:",
ethereum__show_full_array: "Afficher le tableau complet",
ethereum__show_full_domain: "Afficher le domaine complet",
ethereum__show_full_message: "Afficher le message complet",
ethereum__show_full_struct: "Montrer une structure complète",
ethereum__sign_eip712: "Signer vraiment les données typées EIP-712?",
ethereum__title_confirm_data: "CONFIRMER LES DONNÉES",
ethereum__title_confirm_domain: "CONFIRMER LE DOMAINE",
ethereum__title_confirm_message: "CONFIRMER LE MESSAGE",
ethereum__title_confirm_struct: "CONFIRMER LA STRUCTURE",
ethereum__title_confirm_typed_data: "CONFIRMER LES DONNÉES TYPÉES",
ethereum__title_signing_address: "ADRESSE DE SIGNATURE",
ethereum__units_template: "{} unités",
ethereum__unknown_token: "Token inconnu",
ethereum__valid_signature: "La signature est valide.",
experimental_mode__enable: "Activer les fonctionnalités expérimentales?",
experimental_mode__only_for_dev: "Seulement pour le développement et les tests bêta!",
experimental_mode__title: "MODE EXPÉRIMENTAL",
fido__already_registered: "Déjà enregistré",
fido__device_already_registered: "Cet appareil est déjà enregistré avec cette application.",
fido__device_already_registered_with_template: "Cet appareil est déjà enregistré avec {}.",
fido__device_not_registered: "Cet appareil n'est pas enregistré avec cette application.",
fido__does_not_belong: "Les informations d'identification que vous essayez d'importer\npas appartenir à cet authentificateur.",
fido__erase_credentials: "Effacer toutes les informations d'identification?",
fido__export_credentials: "Exporter des informations sur les informations d'identification stockées sur cet appareil?",
fido__not_registered: "Non enregistré",
fido__not_registered_with_template: "Cet appareil n'est pas enregistré avec\n{}.",
fido__please_enable_pin_protection: "Veuillez activer la protection des broches.",
fido__title_authenticate: "FIDO2 AUTHENTIFIE",
fido__title_import_credential: "IMPORTER DES DIPLÔMES",
fido__title_list_credentials: "RÉPERTORIER LES RÉFÉRENCES",
fido__title_register: "REGISTRE FIDO2",
fido__title_remove_credential: "SUPPRIMER LES INFORMATIONS D'IDENTIFICATION",
fido__title_reset: "RÉINITIALISATION DE FIDO2",
fido__title_u2f_auth: "U2F AUTHENTIFIE",
fido__title_u2f_register: "REGISTRE U2F",
fido__title_verify_user: "FIDO2 VÉRIFIEZ L'UTILISATEUR",
fido__unable_to_verify_user: "Impossible de vérifier l'utilisateur.",
fido__wanna_erase_credentials: "Voulez-vous vraiment effacer toutes les informations d'identification?",
firmware_update__title: "MISE À JOUR DU FIRMWARE",
firmware_update__title_fingerprint: "EMPREINTE DIGITALE FW",
homescreen__click_to_connect: "Cliquez pour se connecter",
homescreen__click_to_unlock: "Cliquez pour déverrouiller",
homescreen__title_backup_failed: "LA SAUVEGARDE A ÉCHOUÉ",
homescreen__title_backup_needed: "SAUVEGARDE NÉCESSAIRE",
homescreen__title_coinjoin_authorized: "COINJOIN AUTORISÉ",
homescreen__title_experimental_mode: "MODE EXPÉRIMENTAL",
homescreen__title_hold_to_lock: "TENIR À VERROUILLER",
homescreen__title_no_usb_connection: "AUCUNE CONNEXION USB",
homescreen__title_pin_not_set: "ÉPINGLE NON RÉGLÉE",
homescreen__title_seedless: "SANS PÉPINS",
homescreen__title_set: "FAIRE UN ÉCRAN D'ACCUEIL",
inputs__back: "DOS",
inputs__cancel: "ANNULER",
inputs__delete: "SUPPRIMER",
inputs__enter: "ENTRER",
inputs__return: "RETOUR",
inputs__show: "MONTRER",
inputs__space: "ESPACE",
joint__title: "TRANSACTION CONJOINTE",
joint__to_the_total_amount: "Au montant total:",
joint__you_are_contributing: "Vous contribuez:",
lockscreen__tap_to_connect: "Appuyez pour se connecter",
lockscreen__tap_to_unlock: "Appuyez pour déverrouiller",
lockscreen__title_locked: "FERMÉ À CLÉ",
lockscreen__title_not_connected: "PAS CONNECTÉ",
misc__decrypt_value: "Decrypt la valeur",
misc__encrypt_value: "Valeur de crypte",
misc__title_suite_labeling: "ÉTIQUETAGE DE LA SUITE",
modify_amount__address: "Adresse:",
modify_amount__decrease_amount: "Diminue le montant de:",
modify_amount__increase_amount: "Augmenter le montant de:",
modify_amount__new_amount: "Nouveau montant:",
modify_amount__title: "MODIFIER LE MONTANT",
modify_fee__decrease_fee: "Diminuer les frais de:",
modify_fee__fee_rate: "Taux de frais:",
modify_fee__increase_fee: "Augmenter les frais de:",
modify_fee__new_transaction_fee: "Nouveaux frais de transaction:",
modify_fee__no_change: "Vos frais n'ont pas changé.",
modify_fee__title: "MODIFIER LES FRAIS",
modify_fee__transaction_fee: "Frais de transaction:",
monero__confirm_export: "Confirmer l'exportation",
monero__confirm_fee: "Confirmer les frais",
monero__confirm_ki_sync: "Confirmer Ki Sync",
monero__confirm_refresh: "Confirmer Rafraîchissement",
monero__confirm_unlock_time: "Confirmer le temps de déverrouillage",
monero__hashing_inputs: "Entrées de hachage",
monero__payment_id: "ID de paiement",
monero__postprocessing: "Post-traitement ...",
monero__processing: "Traitement...",
monero__processing_inputs: "Traitement des entrées",
monero__processing_outputs: "Traitement des sorties",
monero__signing: "Signer ...",
monero__signing_inputs: "Signature des entrées",
monero__unlock_time_set_template: "Déverrouiller le temps pour cette transaction est défini sur {}",
monero__wanna_export_tx_der: "Voulez-vous vraiment exporter tx_der\npour TX_proof?",
monero__wanna_export_tx_key: "Voulez-vous vraiment exporter TX_KEY?",
monero__wanna_export_watchkey: "Voulez-vous vraiment exporter des informations d'identification de montre uniquement?",
monero__wanna_start_refresh: "Voulez-vous vraiment\ncommencer à actualiser?",
monero__wanna_sync_key_images: "Voulez-vous vraiment\nsynchroniser les images clés?",
nem__absolute: "Absolue",
nem__activate: "Activer",
nem__add: "Ajouter",
nem__confirm_action: "Confirmer l'action",
nem__confirm_address: "confirmer l'adresse",
nem__confirm_creation_fee: "Confirmer les frais de création",
nem__confirm_fee: "Confirmer les frais",
nem__confirm_mosaic: "Confirmer la mosaïque",
nem__confirm_multisig_fee: "Confirmer les frais multisig",
nem__confirm_namespace: "Confirmer l'espace de noms",
nem__confirm_payload: "Confirmer la charge utile",
nem__confirm_properties: "Confirmer les propriétés",
nem__confirm_rental_fee: "Confirmer les frais de location",
nem__confirm_transfer_of: "Confirmer le transfert de",
nem__convert_account_to_multisig: "Convertir le compte en compte multisig?",
nem__cosign_transaction_for: "Transaction cosignale pour",
nem__cosignatory: "cosignataire",
nem__create_mosaic: "Créer de la mosaïque",
nem__create_namespace: "Créer un espace de noms",
nem__deactivate: "Désactiver",
nem__decrease: "Diminuer",
nem__description: "Description:",
nem__divisibility_and_levy_cannot_be_shown: "La divisibilité et le prélèvement ne peuvent pas être montrés pour des mosaïques inconnues",
nem__encrypted: "Crypté:",
nem__final_confirm: "Confirmation finale",
nem__immutable: "immuable",
nem__increase: "Augmenter",
nem__initial_supply: "Alimentation initiale:",
nem__initiate_transaction_for: "Initier la transaction pour",
nem__levy_divisibility: "Divisibilité de prélèvement:",
nem__levy_fee: "Frais de prélèvement:",
nem__levy_fee_of: "Confirmer les frais de prélèvement en mosaïque de",
nem__levy_mosaic: "Mosaïque de prélèvement:",
nem__levy_namespace: "Espace de noms de prélèvement:",
nem__levy_recipient: "Récipiendaire de prélèvement:",
nem__levy_type: "Type de prélèvement:",
nem__modify_supply_for: "Modifier l'offre pour",
nem__modify_the_number_of_cosignatories_by: "Modifier le nombre de cosignatoires par",
nem__mutable: "mutable",
nem__no: "Non",
nem__of: "de",
nem__percentile: "centile",
nem__raw_units_template: "{} unités brutes",
nem__remote_harvesting: "Récolte à distance?",
nem__remove: "Retirer",
nem__set_minimum_cosignatories_to: "Définir des cosignataires minimums sur",
nem__sign_tx_fee_template: "Signer cette transaction\net payer {}\nPour les frais de réseau?",
nem__supply_change: "Changement de matériel",
nem__supply_units_template: "{} fourniture par {} unités entières?",
nem__transferable: "Transférable?",
nem__under_namespace: "sous l'espace de noms",
nem__unencrypted: "Non crypté:",
nem__unknown_mosaic: "Mosaïque inconnue!",
nem__yes: "Oui",
passphrase__access_hidden_wallet: "Accès à un portefeuille caché?",
passphrase__always_on_device: "Voulez-vous vraiment entrer en phrase secrète toujours sur l'appareil?",
passphrase__from_host_not_shown: "La phrase de passe fournie par l'hôte sera utilisée mais ne sera pas affichée en raison des paramètres de l'appareil.",
passphrase__hidden_wallet: "Portefeuille caché",
passphrase__hide: "Masquer la phrase de passe provenant de l'hôte?",
passphrase__next_screen_will_show_passphrase: "Le prochain écran affichera la phrase secrète.",
passphrase__please_enter: "Veuillez saisir votre phrase secrète.",
passphrase__revoke_on_device: "Voulez-vous révoquer la phrase secrète sur le réglage de l'appareil?",
passphrase__title_confirm: "CONFIRMER LA PHRASE PASSANTE",
passphrase__title_enter: "ENTREZ EN PHRASE DE PASSE",
passphrase__title_hide: "MASQUER LA PHRASE SECRÈTE",
passphrase__title_settings: "PARAMÈTRES DE PHRASE DE PASSE",
passphrase__title_source: "SOURCE EN PHRASE DE PASSE",
passphrase__turn_off: "Désactiver la protection de la phrase secrète?",
passphrase__turn_on: "Activer la protection des phrases de passe?",
pin__change: "Changer la broche?",
pin__changed: "Pin a changé.",
pin__cursor_will_change: "La position du curseur changera entre les entrées pour une sécurité améliorée.",
pin__diff_from_wipe_code: "PIN doit être différente wipe.",
pin__disabled: "Protection contre les broches\néteindre.",
pin__enabled: "Protection contre les broches\nallumé.",
pin__enter: "Entrer la broche",
pin__enter_new: "Entrez la nouvelle épingle",
pin__entered_not_valid: "La broche n'est pas valide.",
pin__info: "La broche sera nécessaire pour accéder à cet appareil.",
pin__invalid_pin: "La broche n'est pas valide.",
pin__last_attempt: "Dernière tentative",
pin__mismatch: "Les épingles entrées ne pas!",
pin__pin_mismatch: "Non-concordance",
pin__please_check_again: "Veuillez vérifier à nouveau.",
pin__reenter_new: "Rentrez à la nouvelle épingle",
pin__reenter_to_confirm: "Veuillez réintégrer la broche pour confirmer.",
pin__should_be_long: "La broche doit avoir 4 à 50 chiffres de long.",
pin__title_check_pin: "ÉPINGLE",
pin__title_settings: "PARAMÈTRES DE BROCHE",
pin__title_wrong_pin: "MAUVAISE ÉPINGLE",
pin__tries_left: "essaie à gauche",
pin__turn_off: "Êtes-vous sûr de vouloir désactiver la protection des broches?",
pin__turn_on: "Activer la protection des broches?",
pin__wrong_pin: "Mauvaise épingle",
plurals__contains_x_keys: "clé|clés",
plurals__lock_after_x_hours: "heure|heures",
plurals__lock_after_x_milliseconds: "milliseconde|millisecondes",
plurals__lock_after_x_minutes: "minute|minutes",
plurals__lock_after_x_seconds: "seconde|secondes",
plurals__sign_x_actions: "action|actiones",
plurals__transaction_of_x_operations: "opération|opérations",
plurals__x_groups_needed: "groupe|groupes",
plurals__x_shares_needed: "partage|partages",
progress__authenticity_check: "Vérification de l'authenticité ...",
progress__done: "Fait",
progress__loading_transaction: "Transaction de chargement ...",
progress__one_second_left: "1 seconde à gauche",
progress__please_wait: "S'IL VOUS PLAÎT, ATTENDEZ",
progress__processing: "TRAITEMENT",
progress__refreshing: "RAFRAÎCHISSANTE",
progress__signing_transaction: "Transaction de signature ...",
progress__syncing: "Synchronisation ...",
progress__x_seconds_left_template: "{} secondes à gauche",
reboot_to_bootloader__restart: "Voulez-vous redémarrer Trezor en mode chargeur de démarrage?",
reboot_to_bootloader__title: "ALLER AU CHARGEUR DE DÉMARRAGE",
reboot_to_bootloader__version_by_template: "Version du firmware {}\npar {}",
recovery__cancel_dry_run: "Annuler le chèque de sauvegarde",
recovery__check_dry_run: "Vérifiez votre sauvegarde?",
recovery__cursor_will_change: "La position du curseur changera entre les entrées pour une sécurité améliorée.",
recovery__dry_run_bip39_valid_match: "Récupération entrée est valide et correspond à celle de l'appareil.",
recovery__dry_run_bip39_valid_mismatch: "Récupération entrée est valide mais ne correspond pas à celle de l'appareil.",
recovery__dry_run_slip39_valid_match: "Récupération entrées sont valides et correspondent qui est actuellement.",
recovery__dry_run_slip39_valid_mismatch: "Récupération entrées sont valides mais ne correspondent qui est actuellement.",
recovery__enter_any_share: "Entrez n'importe quelle part",
recovery__enter_backup: "Entrez votre sauvegarde.",
recovery__enter_different_share: "Veuillez saisir une part différente.",
recovery__enter_share_from_diff_group: "Entrez Share à partir d'un groupe différent.",
recovery__group_num_template: "Groupe {}",
recovery__group_threshold_reached: "Le seuil de groupe atteint.",
recovery__invalid_seed_entered: "Les graines de récupération non valides sont entrées.",
recovery__invalid_share_entered: "Part de récupération non valide entré.",
recovery__more_shares_needed: "Plus d'actions nécessaires",
recovery__num_of_words: "Sélectionnez le nombre de mots dans votre sauvegarde.",
recovery__only_first_n_letters: "Vous n'aurez qu'à sélectionner les 2-4 premières lettres de chaque mot.",
recovery__progress_will_be_lost: "Tous les progrès seront perdus.",
recovery__select_num_of_words: "Sélectionnez le nombre de mots dans votre sauvegarde.",
recovery__share_already_entered: "Partager déjà entré.",
recovery__share_from_another_shamir: "Vous êtes entré dans une part d'une autre sauvegarde Shamir.",
recovery__share_num_template: "Partager {}",
recovery__title: "RÉCUPÉRER LE PORTEFEUILLE",
recovery__title_cancel_dry_run: "ANNULER LE CHÈQUE DE SAUVEGARDE",
recovery__title_cancel_recovery: "ANNULER LA RÉCUPÉRATION",
recovery__title_dry_run: "CHÈQUE DE SAUVEGARDE",
recovery__title_recover: "RÉCUPÉRER LE PORTEFEUILLE",
recovery__title_remaining_shares: "ACTIONS RESTANTES",
recovery__type_word_x_of_y_template: "Type Word {} de {}",
recovery__wallet_recovered: "Le portefeuille a récupéré avec succès",
recovery__wanna_cancel_dry_run: "Êtes-vous sûr que vous souhaitez annuler le chèque de sauvegarde?",
recovery__wanna_cancel_recovery: "Êtes-vous sûr de souhaiter annuler le processus de récupération?",
recovery__word_count_template: "({} mots)",
recovery__word_x_of_y_template: "MOT DE {}",
recovery__x_more_items_starting_template_plural: "{count} plus {plural} startes",
recovery__x_more_shares_needed_template_plural: "{count} plus {plural} nécessaires.",
recovery__x_of_y_entered_template: "{} des actions {} entrées avec succès.",
recovery__you_have_entered: "Vous êtes entré",
reset__advanced_group_threshold_info: "Le seuil de groupe spécifie le nombre de groupes nécessaires pour récupérer votre portefeuille.",
reset__all_x_of_y_template: "Tous {} de {} partages",
reset__any_x_of_y_template: "Toute {} de {} partage",
reset__button_create: "CRÉER UN PORTEFEUILLE",
reset__button_recover: "RÉCUPÉRER LE PORTEFEUILLE",
reset__by_continuing: "En vous poursuivant, vous acceptez les termes et conditions de Trezor Company.",
reset__check_backup_title: "VÉRIFIEZ LA SAUVEGARDE",
reset__check_group_share_title_template: "VÉRIFIER G {} - PART {}",
reset__check_seed_title: "VÉRIFIER LES GRAINES",
reset__check_share_title_template: "VÉRIFIER LE PARTAGE # {}",
reset__continue_with_next_share: "Continuez avec la prochaine part.",
reset__continue_with_share_template: "Continuez avec Share # {}.",
reset__finished_verifying_group_template: "Vous avez terminé la vérification de vos parts de récupération pour le groupe {}.",
reset__finished_verifying_seed: "Vous avez fini de vérifier vos graines de récupération.",
reset__finished_verifying_shares: "Vous avez fini de vérifier vos parts de récupération.",
reset__group_description: "Un groupe est composé de partages de recouvrement.",
reset__group_info: "Chaque groupe a un nombre défini d'actions et son propre seuil.Dans les prochaines étapes, vous définissez le nombre d'actions et les seuils.",
reset__group_share_checked_successfully_template: "Groupe {} - partager {} vérifié avec succès.",
reset__group_share_title_template: "GROUPE {} - PARTAGER {}",
reset__more_info_at: "Plus d'informations à",
reset__need_all_share_template: "Pour la récupération, vous avez besoin de tout {} des actions.",
reset__need_any_share_template: "Pour la récupération, vous avez besoin de {} des actions.",
reset__needed_to_form_a_group: "nécessaire pour former un groupe.",
reset__needed_to_recover_your_wallet: "nécessaire pour récupérer votre portefeuille.",
reset__never_make_digital_copy: "Ne faites jamais une copie numérique de votre sauvegarde ou téléchargez-la en ligne!",
reset__num_of_share_holders_template: "{} Les personnes ou les emplacements tiendront chacun une part.",
reset__num_of_shares_advanced_info_template: "Chaque part de récupération est une séquence de 20 mots.Ensuite, vous choisirez le nombre de seuils d'actions nécessaires pour former le groupe {}.",
reset__num_of_shares_basic_info: "Chaque part de récupération est une séquence de 20 mots.Ensuite, vous choisissez le nombre d'actions dont vous avez besoin pour récupérer votre portefeuille.",
reset__num_shares_for_group_template: "Le nombre requis d'actions pour former le groupe {}.",
reset__number_of_shares_info: "= Nombre total de listes de mots uniques utilisées pour le sauvegarde.",
reset__one_share: "1 partage",
reset__only_one_share_will_be_created: "Une seule part sera créée.",
reset__recovery_seed_title: "GRAINES DE RÉCUPÉRATION",
reset__recovery_share_title_template: "PARTAGE DE RÉCUPÉRATION # {}",
reset__required_number_of_groups: "Le nombre requis de groupes pour la récupération.",
reset__select_correct_word: "Sélectionnez le mot correct pour chaque position.",
reset__select_word_template: "SÉLECTIONNER {} MOT",
reset__select_word_x_of_y_template: "Word {} de {}:",
reset__set_it_to_count_template: "Définissez-le sur {} et vous aurez besoin",
reset__share_checked_successfully_template: "Partage de récupération # {} vérifié avec succès.",
reset__share_words_title: "SAUVEGARDE STANDARD",
reset__slip39_checklist_num_groups: "Nombre de groupes",
reset__slip39_checklist_num_shares: "Nombre de partages",
reset__slip39_checklist_set_num_groups: "Définir le nombre de groupes",
reset__slip39_checklist_set_num_shares: "Définir le nombre d'actions",
reset__slip39_checklist_set_sizes: "Régler les tailles et les seuils",
reset__slip39_checklist_set_sizes_longer: "Définir les tailles et les seuils pour chaque groupe",
reset__slip39_checklist_set_threshold: "Définir le seuil",
reset__slip39_checklist_title: "LISTE DE CONTRÔLE DE SAUVEGARDE",
reset__slip39_checklist_write_down: "Notez et vérifiez toutes les partages",
reset__slip39_checklist_write_down_recovery: "Notez et vérifiez toutes les parts de récupération",
reset__the_threshold_sets_the_number_of_shares: "Le seuil définit le nombre d'actions",
reset__threshold_info: "= Nombre minimum de listes de mots uniques utilisées pour la récupération.",
reset__title_backup_is_done: "LA SAUVEGARDE EST TERMINÉE",
reset__title_create_wallet: "CRÉER UN PORTEFEUILLE",
reset__title_create_wallet_shamir: "CRÉER UN PORTEFEUILLE (SHAMIR)",
reset__title_group_threshold: "SEUIL DE GROUPE",
reset__title_number_of_groups: "NOMBRE DE GROUPES",
reset__title_number_of_shares: "NOMBRE DE PARTAGES",
reset__title_set_group_threshold: "DÉFINIR LE SEUIL DE GROUPE",
reset__title_set_number_of_groups: "DÉFINIR LE NOMBRE DE GROUPES",
reset__title_set_number_of_shares: "DÉFINIR LE NOMBRE D'ACTIONS",
reset__title_set_threshold: "DÉFINIR LE SEUIL",
reset__to_form_group_template: "pour former le groupe {}.",
reset__tos_link: "trezor.io/tos",
reset__total_number_of_shares_in_group_template: "Définissez le nombre total d'actions dans le groupe {}.",
reset__use_your_backup: "Utilisez votre sauvegarde lorsque vous devez récupérer votre portefeuille.",
reset__write_down_words_template: "Notez tous les mots {} dans l'ordre.",
reset__wrong_word_selected: "Mauvais mot sélectionné!",
reset__you_need_one_share: "Pour la récupération, vous avez besoin de 1 part.",
reset__your_backup_is_done: "Votre sauvegarde est terminée.",
ripple__confirm_tag: "Confirmer la balise",
ripple__destination_tag_template: "Tag de destination:\n{}",
rotation__change_template: "Voulez-vous modifier la rotation des périphériques en {}?",
rotation__east: "est",
rotation__north: "nord",
rotation__south: "sud",
rotation__title_change: "CHANGER LA ROTATION",
rotation__west: "Ouest",
safety_checks__approve_unsafe_always: "Trezor vous permettra d'approuver certaines actions qui pourraient être dangereuses.",
safety_checks__approve_unsafe_temporary: "Trezor vous permettra temporairement d'approuver certaines actions qui pourraient être dangereuses.",
safety_checks__enforce_strict: "Voulez-vous vraiment appliquer des contrôles de sécurité stricts (recommandés)?",
safety_checks__title: "CONTRÔLES DE SÉCURITÉ",
safety_checks__title_safety_override: "REMPLIR DE LA SÉCURITÉ",
sd_card__all_data_will_be_lost: "Toutes les données sur la carte SD seront perdues.",
sd_card__card_required: "Carte SD requise.",
sd_card__disable: "Voulez-vous vraiment supprimer la protection des cartes SD de votre appareil?",
sd_card__disabled: "Vous avez une protection SD handicapée avec succès.",
sd_card__enable: "Voulez-vous vraiment sécuriser votre appareil avec une protection de carte SD?",
sd_card__enabled: "Vous avez réussi à activer la protection SD.",
sd_card__error: "Erreur de carte SD",
sd_card__format_card: "Carte SD de format",
sd_card__insert_correct_card: "Veuillez insérer la carte SD correcte pour cet appareil.",
sd_card__please_insert: "Veuillez insérer votre carte SD.",
sd_card__please_unplug_and_insert: "Veuillez débrancher l'appareil et insérer votre carte SD.",
sd_card__problem_accessing: "Il y avait un problème à accéder à la carte SD.",
sd_card__refresh: "Voulez-vous vraiment remplacer le secret de la carte SD actuel par un secret nouvellement généré?",
sd_card__refreshed: "Vous avez réussi à rafraîchir la protection SD.",
sd_card__restart: "Voulez-vous redémarrer Trezor en mode chargeur de démarrage?",
sd_card__title: "PROTECTION DES CARTES SD",
sd_card__title_problem: "PROBLÈME DE CARTE SD",
sd_card__unknown_filesystem: "Système de fichiers inconnu",
sd_card__unplug_and_insert_correct: "Veuillez débrancher l'appareil et insérer la carte SD correcte.",
sd_card__use_different_card: "Utilisez une carte différente ou formate la carte SD au système de fichiers FAT32",
sd_card__wanna_format: "Voulez-vous vraiment formater la carte SD?",
sd_card__wrong_sd_card: "Mauvaise carte SD",
send__address_path: "chemin d'adresse",
send__amount: "Montant:",
send__confirm_sending: "Confirm_sending",
send__from_multiple_accounts: "Envoi à partir de plusieurs comptes.",
send__including_fee: "Y compris les frais:",
send__maximum_fee: "Frais maximaux:",
send__receiving_to_multisig: "Recevoir une adresse multisig.",
send__title_amount: "MONTANT",
send__title_confirm_sending: "CONFIRMER L'ENVOI",
send__title_joint_transaction: "TRANSACTION CONJOINTE",
send__title_receiving_to: "RECEVOIR",
send__title_recipient: "DESTINATAIRE",
send__title_sending: "ENVOI EN COURS",
send__title_sending_amount: "MONTANT",
send__title_sending_to: "ENVOI À",
send__to_the_total_amount: "Au montant total:",
send__total_amount: "Montant total:",
send__transaction_id: "Identifiant de transaction:",
send__you_are_contributing: "Vous contribuez:",
share_words__words_in_order: "mots dans l'ordre.",
share_words__wrote_down_all: "J'ai écrit tout",
sign_message__bytes_template: "{} Octets",
sign_message__confirm_address: "Adresse de signature",
sign_message__confirm_message: "Confirmer le message",
sign_message__message_size: "Taille du message:",
sign_message__verify_address: "Vérifier l'adresse",
stellar__account: "Compte",
stellar__account_merge: "Fusion du compte",
stellar__account_thresholds: "Seuils de compte",
stellar__add_signer: "Ajouter le signataire",
stellar__add_trust: "Ajouter la confiance",
stellar__all_will_be_sent_to: "Tous les xlm seront envoyés à:",
stellar__allow_trust: "Autoriser la confiance",
stellar__asset: "Actif",
stellar__bump_sequence: "Séquence de bosse",
stellar__buying: "Achat:",
stellar__clear_data: "Effacer les données",
stellar__clear_flags: "Drapeaux clairs",
stellar__confirm_issuer: "Confirmer l'émetteur",
stellar__confirm_memo: "Confirmer la note",
stellar__confirm_network: "Confirmer le réseau",
stellar__confirm_operation: "Confirmation de l'opération",
stellar__confirm_stellar: "Confirmer stellaire",
stellar__confirm_timebounds: "Confirmer les temps",
stellar__create_account: "Créer un compte",
stellar__debited_amount: "Montant débité",
stellar__delete: "Supprimer",
stellar__delete_passive_offer: "Supprimer l'offre passive",
stellar__delete_trust: "Supprimer la confiance",
stellar__destination: "Destination:",
stellar__exchanges_require_memo: "IMPORTANT: De nombreux échanges nécessitent un mémo lors du dépôt",
stellar__final_confirm: "Confirmation finale",
stellar__hash: "Hacher:",
stellar__high: "Haut:",
stellar__home_domain: "Domaine de la maison",
stellar__inflation: "Inflation",
stellar__initial_balance: "Balance initiale",
stellar__initialize_signing_with: "Initialiser la signature avec",
stellar__issuer_template: "{} émetteur:",
stellar__key: "Clé:",
stellar__limit: "Limite:",
stellar__low: "Faible:",
stellar__master_weight: "Poids maître:",
stellar__medium: "Moyen:",
stellar__new_offer: "Nouvelle offre",
stellar__new_passive_offer: "Nouvelle offre passive",
stellar__no_memo_set: "Pas de mémo!",
stellar__no_restriction: "[pas de réstriction]",
stellar__on_network_template: "La transaction est sur {}",
stellar__path_pay: "PATH PAY",
stellar__path_pay_at_least: "Le chemin payant le moins",
stellar__pay: "Payer:",
stellar__pay_at_most: "Payer tout au plus:",
stellar__preauth_transaction: "Transaction pré-UTH:",
stellar__price_per_template: "Prix par {}:",
stellar__private_network: "Réseau privé",
stellar__remove_signer: "Supprimer le signataire",
stellar__revoke_trust: "Révoquer la confiance",
stellar__selling: "Vente:",
stellar__set_data: "Définir les données",
stellar__set_flags: "Définir les drapeaux",
stellar__set_sequence_to_template: "Définir la séquence sur {}?",
stellar__sign_tx_count_template: "Signer cette transaction composée de {}",
stellar__sign_tx_fee_template: "et payer {}\npour les frais?",
stellar__source_account: "Compte source:",
stellar__testnet_network: "réseau Testnet",
stellar__trusted_account: "Compte de confiance",
stellar__update: "Mise à jour",
stellar__valid_from: "Valide de (UTC)",
stellar__valid_to: "Valable à (UTC)",
stellar__value_sha256: "Valeur (SHA-256):",
stellar__wanna_clean_value_key_template: "Voulez-vous effacer la clé de valeur {}?",
stellar__your_account: "Votre compte",
tezos__address: "Adresse:",
tezos__amount: "Montant:",
tezos__baker_address: "Adresse boulanger:",
tezos__balance: "Équilibre:",
tezos__ballot: "Bulletin de vote:",
tezos__confirm_delegation: "Confirmer la délégation",
tezos__confirm_origination: "Confirmer l'origine",
tezos__delegator: "Délégant:",
tezos__fee: "Frais:",
tezos__proposal: "Proposition",
tezos__register_delegate: "Enregistrer le délégué",
tezos__remove_delegation: "Supprimer la délégation",
tezos__submit_ballot: "Soumettre un bulletin de vote",
tezos__submit_proposal: "Soumettre la proposition",
tezos__submit_proposals: "Soumettre des propositions",
tutorial__middle_click: "Appuyez à gauche et à droite à la même chose. Il est temps de confirmer.",
tutorial__press_and_hold: "Appuyez et maintenez le bouton droit pour approuver des opérations.",
tutorial__ready_to_use: "Tu es prêt à. Utilisez Trezor.",
tutorial__scroll_down: "Appuyez à droite pour faire défiler vers le bas pour lire tout le contenu lorsque le texte ne tient pas. Appuyez à gauche pour faire défiler vers le haut.",
tutorial__sure_you_want_skip: "Est-tu sûr que tu. Vous voulez sauter le tutoriel?",
tutorial__title_hello: "BONJOUR",
tutorial__title_screen_scroll: "PARCHEMIN D'ÉCRAN",
tutorial__title_skip: "PASSER LE TUTORIEL",
tutorial__title_tutorial_complete: "TUTORIEL COMPLET",
tutorial__use_trezor: "Utiliser Trezor par. Cliquez sur les boutons gauche et droit. Continuer tout droit.",
tutorial__welcome_press_right: "Bienvenue à Trezor. Appuyez sur le droit de continuer.",
u2f__get: "Augmenter et récupérer le compteur U2F?",
u2f__set_template: "Définissez le compteur U2F sur {}?",
u2f__title_get: "OBTENEZ UN COMPTEUR U2F",
u2f__title_set: "DÉFINIR LE COMPTEUR U2F",
wipe__info: "Toutes les données seront effacées.",
wipe__title: "EFFACER L'APPAREIL",
wipe__want_to_wipe: "Voulez-vous vraiment essuyer l'appareil?",
wipe_code__change: "Changer de code d'essuyage?",
wipe_code__changed: "Effacer le code modifié.",
wipe_code__diff_from_pin: "Le code d'essuyage doit être différent de votre broche.\nVeuillez réessayer.",
wipe_code__disabled: "Essuyez le code désactivé.",
wipe_code__enabled: "Effacer le code activé.",
wipe_code__enter_new: "Entrez le nouveau code d'essuyage",
wipe_code__info: "Le code peut pour effacer toutes les données.",
wipe_code__invalid: "Code d'essuyage non valide",
wipe_code__mismatch: "Les codes d'essuyage entrés ne correspondent pas!",
wipe_code__reenter: "Rentrer le code d'essuyage",
wipe_code__reenter_to_confirm: "Veuillez réintégrer le code d'essuyage pour confirmer.",
wipe_code__title_check: "VÉRIFIER LE CODE D'ESSUYAGE",
wipe_code__title_invalid: "CODE D'ESSUYAGE NON VALIDE",
wipe_code__title_settings: "EFFACER DU CODE",
wipe_code__turn_off: "Désactiver la protection du code d'essuyage?",
wipe_code__turn_on: "Activer la protection du code d'essuyage?",
wipe_code__wipe_code_mismatch: "Effacer le décalage du code",
word_count__title: "NOMBRE DE MOTS",
words__are_you_sure: "Es-tu sûr?",
words__array_of: "Tableau de",
words__buying: "Achat",
words__confirm: "Confirmer",
words__contains: "contient",
words__continue_anyway: "Continuer de toute façon?",
words__continue_with: "Continue avec",
words__error: "Erreur",
words__from: "depuis",
words__keep_it_safe: "Garde-le en sécurité!",
words__know_what_your_doing: "Continuez uniquement si vous savez ce que vous faites!",
words__my_trezor: "Mon Trezor",
words__outputs: "les sorties",
words__please_check_again: "Veuillez vérifier à nouveau",
words__please_try_again: "Veuillez réessayer",
words__really_wanna: "Voulez-vous vraiment",
words__sign: "Signe",
words__title_check: "VÉRIFIER",
words__title_group: "GROUPE",
words__title_information: "INFORMATION",
words__title_remember: "SOUVIENS-TOI",
words__title_share: "PARTAGER",
words__title_shares: "ACTIONS",
words__title_success: "SUCCÈS",
words__title_summary: "RÉSUMÉ",
words__title_threshold: "SEUIL",
words__unknown: "Inconnu",
words__warning: "Avertissement",
};

@ -0,0 +1,33 @@
//! generated from fr.rs.mako
//! (by running `make templates` in `core`)
//! do not edit manually!
// NOTE: not used as a code, only for
// documentation purposes
<%
import json
from pathlib import Path
THIS = Path(local.filename).resolve()
SRCDIR = THIS.parent
file = SRCDIR / "fr.json"
data = json.loads(file.read_text())["translations"]
items_to_write: list[tuple[str, str]] = []
for section_name, section in data.items():
for k, v in section.items():
name = f"{section_name}__{k}"
items_to_write.append((name, v))
items_to_write.sort(key=lambda x: x[0])
%>\
use super::general::TranslationsGeneral;
#[rustfmt::skip]
pub const TRANSLATIONS: TranslationsGeneral = TranslationsGeneral {
% for k, v in items_to_write:
${k}: ${utf8_str(v)},
% endfor
};

File diff suppressed because it is too large Load Diff

@ -0,0 +1,62 @@
//! generated from cs.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
order_file = SRCDIR / "order.json"
order_index_name = json.loads(order_file.read_text())
order_name_index = {v: int(k) for k, v in order_index_name.items()}
en_file = SRCDIR / "en.json"
en_data = json.loads(en_file.read_text())["translations"]
def get_all_json_keys(data: dict) -> set[str]:
keys: set[str] = set()
for section_name, section in data.items():
for k, v in section.items():
keys.add(f"{section_name}__{k}")
return keys
en_keys = get_all_json_keys(en_data)
keys_index_mapping: dict[str, int] = {}
for key in en_keys:
if key not in order_name_index:
raise ValueError(f"key {key} not found in order.json")
keys_index_mapping[key] = order_name_index[key]
index_sorted_keys = sorted(keys_index_mapping.items(), key=lambda x: x[1])
%>\
#[rustfmt::skip]
#[allow(non_snake_case)]
pub struct TranslationsGeneral {
% for name, _ in index_sorted_keys:
pub ${name}: &'static str,
% endfor
}
#[rustfmt::skip]
impl TranslationsGeneral {
pub fn get_text(&self, key: &str) -> Option<<&'static str> {
self.get_info(key).map(|(text, _)| text)
}
pub fn get_position(&self, key: &str) -> Option<usize> {
self.get_info(key).map(|(_, pos)| pos)
}
fn get_info(&self, key: &str) -> Option<(&'static str, usize)> {
match key {
% for name, index in index_sorted_keys:
${utf8_str(name)} => Some((self.${name}, ${index})),
% endfor
_ => None,
}
}
}

@ -0,0 +1,75 @@
use crate::{
error::Error,
micropython::{
ffi,
obj::{Obj, ObjBase},
qstr::Qstr,
typ::Type,
util,
},
};
use super::{get_language_name, tr};
extern "C" fn translate_attr_fn(_self_in: Obj, attr: ffi::qstr, dest: *mut Obj) {
let block = || {
let arg = unsafe { dest.read() };
if !arg.is_null() {
// Null destination would mean a `setattr`.
return Err(Error::TypeError);
}
let attr = Qstr::from_u16(attr as u16);
unsafe { dest.write(TR_OBJ.getattr(attr)?) };
Ok(())
};
unsafe { util::try_or_raise(block) }
}
#[repr(C)]
pub struct TrObj {
base: ObjBase,
}
static TR_TYPE: Type = obj_type! {
name: Qstr::MP_QSTR_TR,
attr_fn: translate_attr_fn,
};
// SAFETY: We are in a single-threaded environment.
unsafe impl Sync for TrObj {}
impl TrObj {
fn obj_type() -> &'static Type {
&TR_TYPE
}
fn getattr(&self, attr: Qstr) -> Result<Obj, Error> {
tr(attr.as_str()).try_into()
}
/// Convert TrObj to a MicroPython object
pub const fn as_obj(&'static self) -> Obj {
// SAFETY:
// - We are an object struct with a base and a type.
// - 'static lifetime holds us in place.
// - There's nothing to mutate.
unsafe { Obj::from_ptr(self as *const _ as *mut _) }
}
}
/// Translations object callable from micropython.
pub static TR_OBJ: TrObj = TrObj {
base: TR_TYPE.as_base(),
};
/// Language name getter callable from micropython.
pub extern "C" fn language_name_obj() -> Obj {
let block = || {
if let Some(lang) = get_language_name() {
lang.try_into()
} else {
Ok(Obj::const_none())
}
};
unsafe { util::try_or_raise(block) }
}

@ -0,0 +1,413 @@
mod en;
#[cfg(feature = "micropython")]
mod export;
mod general;
#[cfg(feature = "micropython")]
mod micropython;
use en::EN_TRANSLATIONS;
use crate::trezorhal::translations::{get_pointer_with_offset, get_translations_blob, PointerData};
use core::str;
const TERMINATE_BYTE: u8 = 0xFF;
const ALIGNMENT_BYTE: u8 = 0x00;
const HEADER_LEN: usize = 256;
/// Translation function for Rust.
pub fn tr(key: &str) -> &'static str {
translate(key).unwrap_or_default()
}
// TODO: somehow make it a singleton object, so it is loaded just once
// TODO: split it into header.rs, translations.rs and font.rs?
// TODO: --- put the {en,cs,fr}.* files to `languages` dir?
// TODO: not generate fr/cs.rs files not to confuse, rather do .txt?
// TODO: add some tests?
struct TranslationsHeader {
/// Human readable language identifier (e.g. "cs" of "fr")
pub language: &'static str,
/// Version in format {major}.{minor}.{patch}
pub version: &'static str,
/// Overall length of the data blob (excluding the header)
pub data_length: u16,
/// Length of the translation data
pub translations_length: u16,
/// Number of translation items
pub translations_num: u16,
/// Hash of the data blob (excluding the header)
pub data_hash: [u8; 32],
/// Title to show user before changing the language
pub change_language_title: &'static str,
/// Text to show user before changing the language
pub change_language_prompt: &'static str,
}
impl TranslationsHeader {
const MAGIC: [u8; 4] = [84, 82, 84, 82]; // b"TRTR"
const VERSION_LEN: usize = 16;
const LANG_LEN: usize = 32;
const DATA_HASH_LEN: usize = 32;
const CHANGE_LANG_TITLE_LEN: usize = 20;
const CHANGE_LANG_PROMPT_LEN: usize = 40;
const SIGNATURE_LEN: usize = 65;
pub fn from_flash() -> Result<Self, &'static str> {
let header_data = &get_translations_blob()[..HEADER_LEN];
Self::from_bytes(header_data)
}
pub fn from_bytes(data: &'static [u8]) -> Result<Self, &'static str> {
if data.len() != HEADER_LEN {
return Err("Invalid header length");
}
let (magic, rest) = data.split_at(4);
if magic != Self::MAGIC {
return Err("Invalid header magic");
}
let (version, rest) = rest.split_at(Self::VERSION_LEN);
let version = core::str::from_utf8(version)
.or(Err("Invalid version string"))?
.trim_end_matches(0 as char);
let (language, rest) = rest.split_at(Self::LANG_LEN);
let language = core::str::from_utf8(language)
.or(Err("Invalid language string"))?
.trim_end_matches(0 as char);
let (data_length_bytes, rest) = rest.split_at(2);
let data_length = u16::from_le_bytes(
data_length_bytes
.try_into()
.or(Err("Invalid data length bytes"))?,
);
let (translations_length_bytes, rest) = rest.split_at(2);
let translations_length = u16::from_le_bytes(
translations_length_bytes
.try_into()
.or(Err("Invalid translations length bytes"))?,
);
let (translations_num_bytes, rest) = rest.split_at(2);
let translations_num = u16::from_le_bytes(
translations_num_bytes
.try_into()
.or(Err("Invalid translations num bytes"))?,
);
let (data_hash, rest) = rest.split_at(Self::DATA_HASH_LEN);
let data_hash: [u8; 32] = data_hash.try_into().or(Err("Invalid data hash length"))?;
let (change_language_title, rest) = rest.split_at(Self::CHANGE_LANG_TITLE_LEN);
let change_language_title = core::str::from_utf8(change_language_title)
.or(Err("Invalid change_language_title string"))?
.trim_end_matches(0 as char);
let (change_language_prompt, rest) = rest.split_at(Self::CHANGE_LANG_PROMPT_LEN);
let change_language_prompt = core::str::from_utf8(change_language_prompt)
.or(Err("Invalid change_language_prompt string"))?
.trim_end_matches(0 as char);
let non_sig_len = rest.len() as i32 - Self::SIGNATURE_LEN as i32;
if non_sig_len < 0 {
return Err("Not enough space for signature");
}
let (non_sig_rest, _sig) = rest.split_at(non_sig_len as usize);
// Rest must be empty bytes
for byte in non_sig_rest {
if *byte != 0 {
return Err("Invalid header data");
}
}
// Signature was already checked in micropython
Ok(Self {
language,
version,
data_length,
translations_length,
translations_num,
data_hash,
change_language_title,
change_language_prompt,
})
}
/// Starting offset for the font data.
pub fn font_start_offset(&self) -> u16 {
HEADER_LEN as u16 + self.translations_length
}
/// Offset for the last byte of the blob.
pub fn blob_end_offset(&self) -> u16 {
HEADER_LEN as u16 + self.data_length
}
/// Get the part of the blob dedicated to the translations.
pub fn get_all_translations_data(&self) -> &'static [u8] {
let start = HEADER_LEN;
let end = start + self.translations_length as usize;
&get_translations_blob()[start..end]
}
/// Get the offset table for the translations data.
pub fn get_translations_table(&self) -> OffsetTableData {
// Each entry has 2 bytes of offset
// Connection to a specific translation is carried by the index in the table
const ENTRY_SIZE: usize = 2;
let table_len = self.translations_num as usize * ENTRY_SIZE;
let start = HEADER_LEN;
let end = start + table_len;
let table_data = &get_translations_blob()[start..end];
OffsetTableData {
offset_table_data: table_data,
overall_len: self.translations_length,
}
}
/// Get the part of the blob dedicated to the fonts.
pub fn get_all_font_data(&self) -> &'static [u8] {
let start = self.font_start_offset() as usize;
let end = self.blob_end_offset() as usize;
&get_translations_blob()[start..end]
}
pub fn get_font_table(&self) -> OffsetTableData {
let all_font_data = self.get_all_font_data();
let data_size = all_font_data.len() as u16;
let (font_amount_bytes, data) = all_font_data.split_at(2);
let font_amount = u16::from_le_bytes(unwrap!(font_amount_bytes.try_into()));
// Each entry has 2 bytes of font-ID and 2 bytes of offset
const FONT_ENTRY_SIZE: usize = 4;
let pairs_len = font_amount as usize * FONT_ENTRY_SIZE;
let pairs_data = &data[..pairs_len];
OffsetTableData {
offset_table_data: pairs_data,
overall_len: data_size,
}
}
pub fn get_font_data_offset(&self, font_offset: u16, len: u16) -> &'static [u8] {
let start = font_offset as usize;
let end = start + len as usize;
&self.get_all_font_data()[start..end]
}
}
pub struct OffsetTableData {
/// Offset table raw data
pub offset_table_data: &'static [u8],
/// Overall length of the data (used for getting the length of the last
/// element in the table)
pub overall_len: u16,
}
/// Get the language name.
fn get_language_name() -> Option<&'static str> {
TranslationsHeader::from_flash()
.ok()
.map(|header| header.language)
}
/// Try to find the translation in flash (for a non-english language).
/// If not found, fallback to english.
fn translate(key: &str) -> Option<&'static str> {
let mut translation: Option<&'static str> = None;
if are_there_translations() {
if let Some(index) = EN_TRANSLATIONS.get_position(key) {
translation = get_translation_by_index(index);
}
}
if translation.is_none() {
translation = EN_TRANSLATIONS.get_text(key);
}
translation
}
/// Quickly checks whether there are some valid translations data
fn are_there_translations() -> bool {
get_translations_blob()[0] != TERMINATE_BYTE
}
/// Returns the translation at the given index.
fn get_translation_by_index(index: usize) -> Option<&'static str> {
let header = unwrap!(TranslationsHeader::from_flash());
let translations_table = header.get_translations_table();
let offsets = read_u16_list(translations_table.offset_table_data);
// The index is out of bounds.
// May happen when new firmware is using older translations and the string
// is not defined yet.
// Fallback to english.
if index > offsets.len() {
return None;
}
// Identifying where the string starts.
let start_offset = offsets[index];
// In case the string is last, we may need to strip the alignment bytes
let mut strip_alignment_bytes = false;
// Getting the data length - difference between the current offset and the next
// one.
let len = if index == offsets.len() - 1 {
// The last element in the table
strip_alignment_bytes = true;
translations_table.overall_len - start_offset
} else {
offsets[index + 1] - start_offset
};
// The string is not defined in the blob.
// May happen when old firmware is using newer translations and the string
// was deleted in the newer version.
// Fallback to english.
if len == 0 {
return None;
}
let start = start_offset as usize;
let mut end = start + len as usize;
let translations_data = header.get_all_translations_data();
if strip_alignment_bytes {
// Strip possible alignment bytes at the end
while translations_data[end - 1] == ALIGNMENT_BYTE {
end -= 1;
}
}
let data = &translations_data[start..end];
str::from_utf8(data).ok()
}
/// Given blob data returns a list of (u16, u16) values.
fn read_u16_pairs_list(bytes: &'static [u8]) -> &'static [(u16, u16)] {
let (prefix, data, suffix) = unsafe { bytes.align_to::<(u16, u16)>() };
if !prefix.is_empty() || !suffix.is_empty() {
return &[];
}
data
}
/// Given blob data returns a list of u16 values.
fn read_u16_list(bytes: &'static [u8]) -> &'static [u16] {
let (prefix, data, suffix) = unsafe { bytes.align_to::<u16>() };
if !prefix.is_empty() || !suffix.is_empty() {
return &[];
}
data
}
pub struct OffsetLen {
pub offset: u16,
pub len: u16,
}
/// Information about specific font - where it starts and how long it is
fn get_font_offset_from_id(font_id: u16) -> Option<OffsetLen> {
let font_table = unwrap!(TranslationsHeader::from_flash()).get_font_table();
match_first_u16_pair(
font_id,
font_table.offset_table_data,
font_table.overall_len,
)
}
/// Returns the offset and length of the u16 pair whose first element matches
/// `code_id`.
fn match_first_u16_pair(
code_id: u16,
pairs_data: &'static [u8],
overall_len: u16,
) -> Option<OffsetLen> {
// To get the length of the font, need to read the offset of the next font
let mut font_offset: Option<u16> = None;
let mut next_offset: Option<u16> = None;
for &(code, offset) in read_u16_pairs_list(pairs_data) {
if code == code_id {
font_offset = Some(offset);
} else if font_offset.is_some() {
next_offset = Some(offset);
break;
}
}
if let Some(offset) = font_offset {
// When our font was last, there is no next offset - use the data size
let next = next_offset.unwrap_or(overall_len);
let len = next - offset;
return Some(OffsetLen { offset, len });
}
None
}
// Get information about a given glyph with a given font-offset
fn get_glyph_data(char_code: u16, font_offset: u16, font_len: u16) -> Option<OffsetLen> {
let font_data =
unwrap!(TranslationsHeader::from_flash()).get_font_data_offset(font_offset, font_len);
let data_size = font_data.len() as u16;
let (glyph_amount_bytes, data) = font_data.split_at(2);
let glyph_amount = u16::from_le_bytes(unwrap!(glyph_amount_bytes.try_into()));
// Each entry has 2 bytes of glyph-code and 2 bytes of offset
const GLYPH_ENTRY_SIZE: usize = 4;
let pairs_len = glyph_amount as usize * GLYPH_ENTRY_SIZE;
let pairs_data = &data[..pairs_len];
match_first_u16_pair(char_code, pairs_data, data_size)
}
/// Get information about the glyph in the given font.
/// First finding out the offset of the font within the translations data.
/// Then finding out the offset of the glyph within the font.
/// Returning the absolute offset of the glyph within the translations data -
/// together with its length.
fn get_glyph_font_data(char_code: u16, font_id: u16) -> Option<OffsetLen> {
if !are_there_translations() {
return None;
}
if let Some(font_offset) = get_font_offset_from_id(font_id) {
if let Some(glyph_data) = get_glyph_data(char_code, font_offset.offset, font_offset.len) {
let font_start_offset = unwrap!(TranslationsHeader::from_flash()).font_start_offset();
let final_offset = font_start_offset + font_offset.offset + glyph_data.offset;
return Some(OffsetLen {
offset: final_offset,
len: glyph_data.len,
});
}
}
None
}
#[no_mangle]
pub extern "C" fn get_utf8_glyph(char_code: cty::uint16_t, font: cty::c_int) -> PointerData {
// C will send a negative number
let font_abs = font.unsigned_abs() as u16;
if let Some(glyph_data) = get_glyph_font_data(char_code, font_abs) {
return get_pointer_with_offset(glyph_data.offset, glyph_data.len);
}
PointerData {
ptr: core::ptr::null(),
len: 0,
}
}

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

Loading…
Cancel
Save