refactor(core): upper titles and buttons for TT/TR

New models might not have titles or button labels in
all uppercase as TT and TR do so the translation strings
must be written in normal case.
Instead we uppercases the strings during generation.
In the future, we might want to get rid of separated
translated_string.rs and instead modify the font data.

[no changelog]

refactor(core): upper titles and buttons for TT/TR

WIP

New models might not have titles or button labels in
all uppercase as TT and TR do so the translation strings
must be written in normal case.
Instead we uppercases the strings during generation.
In the future, we might want to get rid of separated
translated_string.rs and instead modify the font data.

[no changelog]
obrusvit/3600-unicode-font-uppercasing-issues-by-generating
obrusvit 1 month ago
parent c7832c39ab
commit 9ec8bc6524

@ -30,8 +30,8 @@ static void _librust_qstrs(void) {
MP_QSTR_addr_mismatch__wrong_derivation_path; MP_QSTR_addr_mismatch__wrong_derivation_path;
MP_QSTR_addr_mismatch__xpub_mismatch; MP_QSTR_addr_mismatch__xpub_mismatch;
MP_QSTR_address; MP_QSTR_address;
MP_QSTR_address__public_key;
MP_QSTR_address__title_cosigner; MP_QSTR_address__title_cosigner;
MP_QSTR_address__title_public_key;
MP_QSTR_address__title_receive_address; MP_QSTR_address__title_receive_address;
MP_QSTR_address__title_yours; MP_QSTR_address__title_yours;
MP_QSTR_address_details__derivation_path; MP_QSTR_address_details__derivation_path;
@ -328,10 +328,10 @@ static void _librust_qstrs(void) {
MP_QSTR_progress__loading_transaction; MP_QSTR_progress__loading_transaction;
MP_QSTR_progress__locking_device; MP_QSTR_progress__locking_device;
MP_QSTR_progress__one_second_left; MP_QSTR_progress__one_second_left;
MP_QSTR_progress__please_wait;
MP_QSTR_progress__refreshing; MP_QSTR_progress__refreshing;
MP_QSTR_progress__signing_transaction; MP_QSTR_progress__signing_transaction;
MP_QSTR_progress__syncing; MP_QSTR_progress__syncing;
MP_QSTR_progress__title_please_wait;
MP_QSTR_progress__x_seconds_left_template; MP_QSTR_progress__x_seconds_left_template;
MP_QSTR_progress_event; MP_QSTR_progress_event;
MP_QSTR_prompt; MP_QSTR_prompt;
@ -374,7 +374,7 @@ static void _librust_qstrs(void) {
MP_QSTR_recovery__wanna_cancel_dry_run; MP_QSTR_recovery__wanna_cancel_dry_run;
MP_QSTR_recovery__wanna_cancel_recovery; MP_QSTR_recovery__wanna_cancel_recovery;
MP_QSTR_recovery__word_count_template; MP_QSTR_recovery__word_count_template;
MP_QSTR_recovery__word_x_of_y_template; MP_QSTR_recovery__word_x_of_y_title_template;
MP_QSTR_recovery__x_more_items_starting_template_plural; MP_QSTR_recovery__x_more_items_starting_template_plural;
MP_QSTR_recovery__x_more_shares_needed_template_plural; MP_QSTR_recovery__x_more_shares_needed_template_plural;
MP_QSTR_recovery__x_of_y_entered_template; MP_QSTR_recovery__x_of_y_entered_template;
@ -421,7 +421,7 @@ static void _librust_qstrs(void) {
MP_QSTR_reset__recovery_share_title_template; MP_QSTR_reset__recovery_share_title_template;
MP_QSTR_reset__required_number_of_groups; MP_QSTR_reset__required_number_of_groups;
MP_QSTR_reset__select_correct_word; MP_QSTR_reset__select_correct_word;
MP_QSTR_reset__select_word_template; MP_QSTR_reset__select_word_title_template;
MP_QSTR_reset__select_word_x_of_y_template; MP_QSTR_reset__select_word_x_of_y_template;
MP_QSTR_reset__set_it_to_count_template; MP_QSTR_reset__set_it_to_count_template;
MP_QSTR_reset__share_checked_successfully_template; MP_QSTR_reset__share_checked_successfully_template;
@ -531,16 +531,16 @@ static void _librust_qstrs(void) {
MP_QSTR_show_warning; MP_QSTR_show_warning;
MP_QSTR_sign; MP_QSTR_sign;
MP_QSTR_sign_message__bytes_template; MP_QSTR_sign_message__bytes_template;
MP_QSTR_sign_message__confirm_address;
MP_QSTR_sign_message__confirm_message;
MP_QSTR_sign_message__message_size; MP_QSTR_sign_message__message_size;
MP_QSTR_sign_message__verify_address; MP_QSTR_sign_message__title_confirm_address;
MP_QSTR_sign_message__title_confirm_message;
MP_QSTR_sign_message__title_verify_address;
MP_QSTR_skip_first_paint; MP_QSTR_skip_first_paint;
MP_QSTR_spending_amount; MP_QSTR_spending_amount;
MP_QSTR_storage_msg__processing; MP_QSTR_storage_msg__title_processing;
MP_QSTR_storage_msg__starting; MP_QSTR_storage_msg__title_starting;
MP_QSTR_storage_msg__verifying_pin; MP_QSTR_storage_msg__title_verifying_pin;
MP_QSTR_storage_msg__wrong_pin; MP_QSTR_storage_msg__title_wrong_pin;
MP_QSTR_subprompt; MP_QSTR_subprompt;
MP_QSTR_subtitle; MP_QSTR_subtitle;
MP_QSTR_text_mono; MP_QSTR_text_mono;
@ -623,12 +623,12 @@ static void _librust_qstrs(void) {
MP_QSTR_words__please_check_again; MP_QSTR_words__please_check_again;
MP_QSTR_words__please_try_again; MP_QSTR_words__please_try_again;
MP_QSTR_words__really_wanna; MP_QSTR_words__really_wanna;
MP_QSTR_words__recipient;
MP_QSTR_words__sign; MP_QSTR_words__sign;
MP_QSTR_words__signer; MP_QSTR_words__signer;
MP_QSTR_words__title_check; MP_QSTR_words__title_check;
MP_QSTR_words__title_group; MP_QSTR_words__title_group;
MP_QSTR_words__title_information; MP_QSTR_words__title_information;
MP_QSTR_words__title_recipient;
MP_QSTR_words__title_remember; MP_QSTR_words__title_remember;
MP_QSTR_words__title_share; MP_QSTR_words__title_share;
MP_QSTR_words__title_shares; MP_QSTR_words__title_shares;
@ -819,13 +819,13 @@ static void _librust_qstrs(void) {
MP_QSTR_ethereum__show_full_message; MP_QSTR_ethereum__show_full_message;
MP_QSTR_ethereum__show_full_struct; MP_QSTR_ethereum__show_full_struct;
MP_QSTR_ethereum__sign_eip712; MP_QSTR_ethereum__sign_eip712;
MP_QSTR_ethereum__staking_claim;
MP_QSTR_ethereum__staking_claim_address;
MP_QSTR_ethereum__staking_claim_intro; MP_QSTR_ethereum__staking_claim_intro;
MP_QSTR_ethereum__staking_stake;
MP_QSTR_ethereum__staking_stake_address;
MP_QSTR_ethereum__staking_stake_intro; MP_QSTR_ethereum__staking_stake_intro;
MP_QSTR_ethereum__staking_unstake; MP_QSTR_ethereum__staking_title_claim;
MP_QSTR_ethereum__staking_title_claim_address;
MP_QSTR_ethereum__staking_title_stake;
MP_QSTR_ethereum__staking_title_stake_address;
MP_QSTR_ethereum__staking_title_unstake;
MP_QSTR_ethereum__staking_unstake_intro; MP_QSTR_ethereum__staking_unstake_intro;
MP_QSTR_ethereum__title_confirm_data; MP_QSTR_ethereum__title_confirm_data;
MP_QSTR_ethereum__title_confirm_domain; MP_QSTR_ethereum__title_confirm_domain;

@ -0,0 +1 @@
cargo doc --features ui,model_mercury,micropython,translations,dma2d,ui_debug,touch --no-default-features --open

@ -1 +1,9 @@
pub mod translated_string; #[cfg(feature = "model_mercury")]
mod translated_string;
#[cfg(feature = "model_mercury")]
pub use translated_string::TranslatedString;
#[cfg(any(feature = "model_tr", feature = "model_tt"))]
mod translated_string_upper;
#[cfg(any(feature = "model_tr", feature = "model_tt"))]
pub use translated_string_upper::TranslatedString;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,75 @@
//! generated from ${THIS_FILE.name}
//! (by running `make templates` in `core`)
//! do not edit manually!
#![cfg_attr(rustfmt, rustfmt_skip)]
<%
import json
from trezorlib._internal.translations import uppercase_titles_and_buttons
ALTCOIN_PREFIXES = (
"binance",
"cardano",
"eos",
"ethereum",
"fido",
"monero",
"nem",
"ripple",
"solana",
"stellar",
"tezos",
"u2f",
)
TR_DIR = ROOT / "core" / "translations"
order_file = TR_DIR / "order.json"
order_index_name = json.loads(order_file.read_text())
order = {int(k): v for k, v in order_index_name.items()}
en_file = TR_DIR / "en.json"
en_data = json.loads(en_file.read_text())["translations"]
%>\
#[cfg(feature = "micropython")]
use crate::micropython::qstr::Qstr;
#[derive(Debug, Copy, Clone, FromPrimitive, PartialEq, Eq)]
#[repr(u16)]
#[allow(non_camel_case_types)]
pub enum TranslatedString {
% for idx, name in order.items():
%if any(name.startswith(prefix + "__") for prefix in ALTCOIN_PREFIXES):
#[cfg(feature = "universal_fw")]
%endif
${name} = ${idx}, // ${json.dumps(en_data.get(name, '""'))}
% endfor
}
impl TranslatedString {
pub fn untranslated(self) -> &'static str {
match self {
% for name in order.values():
%if any(name.startswith(prefix + "__") for prefix in ALTCOIN_PREFIXES):
#[cfg(feature = "universal_fw")]
%endif
Self::${name} => ${uppercase_titles_and_buttons(json.dumps(en_data.get(name, '""')), name, "T2T1")},
% endfor
}
}
#[cfg(feature = "micropython")]
pub fn from_qstr(qstr: Qstr) -> Option<Self> {
match qstr {
% for name in order.values():
%if any(name.startswith(prefix + "__") for prefix in ALTCOIN_PREFIXES):
#[cfg(feature = "universal_fw")]
%endif
Qstr::MP_QSTR_${name} => Some(Self::${name}),
% endfor
_ => None,
}
}
}

@ -1,7 +1,7 @@
use crate::strutil::TString; use crate::strutil::TString;
use super::blob::Translations; use super::blob::Translations;
pub use super::generated::translated_string::TranslatedString; pub use super::generated::TranslatedString;
impl TranslatedString { impl TranslatedString {
pub(super) fn translate<'a>(self, source: Option<&'a Translations>) -> &'a str { pub(super) fn translate<'a>(self, source: Option<&'a Translations>) -> &'a str {

@ -122,7 +122,7 @@ impl Glyph {
} }
/// Font constants. Keep in sync with FONT_ definitions in /// Font constants. Keep in sync with FONT_ definitions in
/// `extmod/modtrezorui/fonts/fonts.h`. /// `embed/lib/fonts/fonts.h`.
#[derive(Copy, Clone, PartialEq, Eq, FromPrimitive)] #[derive(Copy, Clone, PartialEq, Eq, FromPrimitive)]
#[repr(u8)] #[repr(u8)]
pub enum Font { pub enum Font {

@ -8,25 +8,25 @@ class TR:
addr_mismatch__support_url: str = "trezor.io/support" addr_mismatch__support_url: str = "trezor.io/support"
addr_mismatch__wrong_derivation_path: str = "Wrong derivation path for selected account." addr_mismatch__wrong_derivation_path: str = "Wrong derivation path for selected account."
addr_mismatch__xpub_mismatch: str = "XPUB mismatch?" addr_mismatch__xpub_mismatch: str = "XPUB mismatch?"
address__public_key: str = "Public key" address__title_cosigner: str = "Cosigner"
address__title_cosigner: str = "COSIGNER" address__title_public_key: str = "Public key"
address__title_receive_address: str = "RECEIVE ADDRESS" address__title_receive_address: str = "Receive address"
address__title_yours: str = "YOURS" address__title_yours: str = "Yours"
address_details__derivation_path: str = "Derivation path:" address_details__derivation_path: str = "Derivation path:"
address_details__title_receive_address: str = "RECEIVE ADDRESS" address_details__title_receive_address: str = "Receive address"
address_details__title_receiving_to: str = "RECEIVING TO" address_details__title_receiving_to: str = "Receiving to"
authenticate__confirm_template: str = "Allow connected computer to confirm your {0} is genuine?" authenticate__confirm_template: str = "Allow connected computer to confirm your {0} is genuine?"
authenticate__header: str = "Authenticate device" authenticate__header: str = "Authenticate device"
auto_lock__change_template: str = "Auto-lock your Trezor after {0} of inactivity?" auto_lock__change_template: str = "Auto-lock your Trezor after {0} of inactivity?"
auto_lock__title: str = "AUTO-LOCK DELAY" auto_lock__title: str = "Auto-lock delay"
backup__can_back_up_anytime: str = "You can back up your Trezor once, at any time." backup__can_back_up_anytime: str = "You can back up your Trezor once, at any time."
backup__it_should_be_backed_up: str = "You should back up your new wallet right now." backup__it_should_be_backed_up: str = "You should back up your new wallet right now."
backup__it_should_be_backed_up_now: str = "It should be backed up now!" backup__it_should_be_backed_up_now: str = "It should be backed up now!"
backup__new_wallet_created: str = "New wallet created.\n" backup__new_wallet_created: str = "New wallet created.\n"
backup__new_wallet_successfully_created: str = "New wallet created successfully." backup__new_wallet_successfully_created: str = "New wallet created successfully."
backup__recover_anytime: str = "You can use your backup to recover your wallet at any time." backup__recover_anytime: str = "You can use your backup to recover your wallet at any time."
backup__title_backup_wallet: str = "BACK UP WALLET" backup__title_backup_wallet: str = "Back up wallet"
backup__title_skip: str = "SKIP BACKUP" backup__title_skip: str = "Skip backup"
backup__want_to_skip: str = "Are you sure you want to skip the backup?" backup__want_to_skip: str = "Are you sure you want to skip the backup?"
binance__buy: str = "Buy" binance__buy: str = "Buy"
binance__confirm_cancel: str = "Confirm cancel" binance__confirm_cancel: str = "Confirm cancel"
@ -52,59 +52,59 @@ class TR:
bitcoin__new_fee_rate: str = "New fee rate:" bitcoin__new_fee_rate: str = "New fee rate:"
bitcoin__simple_send_of: str = "Simple send of" bitcoin__simple_send_of: str = "Simple send of"
bitcoin__ticket_amount: str = "Ticket amount:" bitcoin__ticket_amount: str = "Ticket amount:"
bitcoin__title_confirm_details: str = "CONFIRM DETAILS" bitcoin__title_confirm_details: str = "Confirm details"
bitcoin__title_finalize_transaction: str = "FINALIZE TRANSACTION" bitcoin__title_finalize_transaction: str = "Finalize transaction"
bitcoin__title_high_mining_fee: str = "HIGH MINING FEE" bitcoin__title_high_mining_fee: str = "High mining fee"
bitcoin__title_meld_transaction: str = "MELD TRANSACTIONS" bitcoin__title_meld_transaction: str = "Meld transactions"
bitcoin__title_modify_amount: str = "MODIFY AMOUNT" bitcoin__title_modify_amount: str = "Modify amount"
bitcoin__title_payjoin: str = "PAYJOIN" bitcoin__title_payjoin: str = "Payjoin"
bitcoin__title_proof_of_ownership: str = "PROOF OF OWNERSHIP" bitcoin__title_proof_of_ownership: str = "Proof of ownership"
bitcoin__title_purchase_ticket: str = "PURCHASE TICKET" bitcoin__title_purchase_ticket: str = "Purchase ticket"
bitcoin__title_update_transaction: str = "UPDATE TRANSACTION" bitcoin__title_update_transaction: str = "Update transaction"
bitcoin__unknown_path: str = "Unknown path" bitcoin__unknown_path: str = "Unknown path"
bitcoin__unknown_transaction: str = "Unknown transaction" bitcoin__unknown_transaction: str = "Unknown transaction"
bitcoin__unusually_high_fee: str = "Unusually high fee." bitcoin__unusually_high_fee: str = "Unusually high fee."
bitcoin__unverified_external_inputs: str = "The transaction contains unverified external inputs." bitcoin__unverified_external_inputs: str = "The transaction contains unverified external inputs."
bitcoin__valid_signature: str = "The signature is valid." bitcoin__valid_signature: str = "The signature is valid."
bitcoin__voting_rights: str = "Voting rights to:" bitcoin__voting_rights: str = "Voting rights to:"
buttons__abort: str = "ABORT" buttons__abort: str = "Abort"
buttons__access: str = "ACCESS" buttons__access: str = "Access"
buttons__again: str = "AGAIN" buttons__again: str = "Again"
buttons__allow: str = "ALLOW" buttons__allow: str = "Allow"
buttons__back: str = "BACK" buttons__back: str = "Back"
buttons__back_up: str = "BACK UP" buttons__back_up: str = "Back up"
buttons__cancel: str = "CANCEL" buttons__cancel: str = "Cancel"
buttons__change: str = "CHANGE" buttons__change: str = "Change"
buttons__check: str = "CHECK" buttons__check: str = "Check"
buttons__check_again: str = "CHECK AGAIN" buttons__check_again: str = "Check again"
buttons__close: str = "CLOSE" buttons__close: str = "Close"
buttons__confirm: str = "CONFIRM" buttons__confirm: str = "Confirm"
buttons__continue: str = "CONTINUE" buttons__continue: str = "Continue"
buttons__details: str = "DETAILS" buttons__details: str = "Details"
buttons__enable: str = "ENABLE" buttons__enable: str = "Enable"
buttons__enter: str = "ENTER" buttons__enter: str = "Enter"
buttons__enter_share: str = "ENTER SHARE" buttons__enter_share: str = "Enter share"
buttons__export: str = "EXPORT" buttons__export: str = "Export"
buttons__format: str = "FORMAT" buttons__format: str = "Format"
buttons__go_back: str = "GO BACK" buttons__go_back: str = "Go back"
buttons__hold_to_confirm: str = "HOLD TO CONFIRM" buttons__hold_to_confirm: str = "Hold to confirm"
buttons__info: str = "INFO" buttons__info: str = "Info"
buttons__install: str = "INSTALL" buttons__install: str = "Install"
buttons__more_info: str = "MORE INFO" buttons__more_info: str = "More info"
buttons__ok_i_understand: str = "OK, I UNDERSTAND" buttons__ok_i_understand: str = "Ok, i understand"
buttons__purchase: str = "PURCHASE" buttons__purchase: str = "Purchase"
buttons__quit: str = "QUIT" buttons__quit: str = "Quit"
buttons__restart: str = "RESTART" buttons__restart: str = "Restart"
buttons__retry: str = "RETRY" buttons__retry: str = "Retry"
buttons__select: str = "SELECT" buttons__select: str = "Select"
buttons__set: str = "SET" buttons__set: str = "Set"
buttons__show_all: str = "SHOW ALL" buttons__show_all: str = "Show all"
buttons__show_details: str = "SHOW DETAILS" buttons__show_details: str = "Show details"
buttons__show_words: str = "SHOW WORDS" buttons__show_words: str = "Show words"
buttons__skip: str = "SKIP" buttons__skip: str = "Skip"
buttons__try_again: str = "TRY AGAIN" buttons__try_again: str = "Try again"
buttons__turn_off: str = "TURN OFF" buttons__turn_off: str = "Turn off"
buttons__turn_on: str = "TURN ON" buttons__turn_on: str = "Turn on"
cardano__addr_base: str = "Base" cardano__addr_base: str = "Base"
cardano__addr_enterprise: str = "Enterprise" cardano__addr_enterprise: str = "Enterprise"
cardano__addr_legacy: str = "Legacy" cardano__addr_legacy: str = "Legacy"
@ -218,21 +218,21 @@ class TR:
coinjoin__do_not_disconnect: str = "Do not disconnect your Trezor!" coinjoin__do_not_disconnect: str = "Do not disconnect your Trezor!"
coinjoin__max_mining_fee: str = "Max mining fee" coinjoin__max_mining_fee: str = "Max mining fee"
coinjoin__max_rounds: str = "Max rounds" coinjoin__max_rounds: str = "Max rounds"
coinjoin__title: str = "AUTHORIZE COINJOIN" coinjoin__title: str = "Authorize coinjoin"
coinjoin__title_do_not_disconnect: str = "DO NOT DISCONNECT YOUR TREZOR!" coinjoin__title_do_not_disconnect: str = "Do not disconnect your trezor!"
coinjoin__title_progress: str = "COINJOIN IN PROGRESS" coinjoin__title_progress: str = "Coinjoin in progress"
coinjoin__waiting_for_others: str = "Waiting for others" coinjoin__waiting_for_others: str = "Waiting for others"
confirm_total__fee_rate: str = "Fee rate:" confirm_total__fee_rate: str = "Fee rate:"
confirm_total__sending_from_account: str = "Sending from account:" confirm_total__sending_from_account: str = "Sending from account:"
confirm_total__title_fee: str = "FEE INFORMATION" confirm_total__title_fee: str = "Fee information"
confirm_total__title_sending_from: str = "SENDING FROM" confirm_total__title_sending_from: str = "Sending from"
debug__loading_seed: str = "Loading seed" debug__loading_seed: str = "Loading seed"
debug__loading_seed_not_recommended: str = "Loading private seed is not recommended." debug__loading_seed_not_recommended: str = "Loading private seed is not recommended."
device_name__change_template: str = "Change device name to {0}?" device_name__change_template: str = "Change device name to {0}?"
device_name__title: str = "DEVICE NAME" device_name__title: str = "Device name"
entropy__send: str = "Do you really want to send entropy?" entropy__send: str = "Do you really want to send entropy?"
entropy__title: str = "INTERNAL ENTROPY" entropy__title: str = "Internal entropy"
entropy__title_confirm: str = "CONFIRM ENTROPY" entropy__title_confirm: str = "Confirm entropy"
eos__about_to_sign_template: str = "You are about to sign {0}." eos__about_to_sign_template: str = "You are about to sign {0}."
eos__action_name: str = "Action Name:" eos__action_name: str = "Action Name:"
eos__arbitrary_data: str = "Arbitrary data" eos__arbitrary_data: str = "Arbitrary data"
@ -288,26 +288,26 @@ class TR:
ethereum__show_full_message: str = "Show full message" ethereum__show_full_message: str = "Show full message"
ethereum__show_full_struct: str = "Show full struct" ethereum__show_full_struct: str = "Show full struct"
ethereum__sign_eip712: str = "Really sign EIP-712 typed data?" ethereum__sign_eip712: str = "Really sign EIP-712 typed data?"
ethereum__staking_claim: str = "CLAIM"
ethereum__staking_claim_address: str = "CLAIM ADDRESS"
ethereum__staking_claim_intro: str = "Claim ETH from Everstake?" ethereum__staking_claim_intro: str = "Claim ETH from Everstake?"
ethereum__staking_stake: str = "STAKE"
ethereum__staking_stake_address: str = "STAKE ADDRESS"
ethereum__staking_stake_intro: str = "Stake ETH on Everstake?" ethereum__staking_stake_intro: str = "Stake ETH on Everstake?"
ethereum__staking_unstake: str = "UNSTAKE" ethereum__staking_title_claim: str = "Claim"
ethereum__staking_title_claim_address: str = "Claim address"
ethereum__staking_title_stake: str = "Stake"
ethereum__staking_title_stake_address: str = "Stake address"
ethereum__staking_title_unstake: str = "Unstake"
ethereum__staking_unstake_intro: str = "Unstake ETH from Everstake?" ethereum__staking_unstake_intro: str = "Unstake ETH from Everstake?"
ethereum__title_confirm_data: str = "CONFIRM DATA" ethereum__title_confirm_data: str = "Confirm data"
ethereum__title_confirm_domain: str = "CONFIRM DOMAIN" ethereum__title_confirm_domain: str = "Confirm domain"
ethereum__title_confirm_message: str = "CONFIRM MESSAGE" ethereum__title_confirm_message: str = "Confirm message"
ethereum__title_confirm_struct: str = "CONFIRM STRUCT" ethereum__title_confirm_struct: str = "Confirm struct"
ethereum__title_confirm_typed_data: str = "CONFIRM TYPED DATA" ethereum__title_confirm_typed_data: str = "Confirm typed data"
ethereum__title_signing_address: str = "SIGNING ADDRESS" ethereum__title_signing_address: str = "Signing address"
ethereum__units_template: str = "{0} units" ethereum__units_template: str = "{0} units"
ethereum__unknown_token: str = "Unknown token" ethereum__unknown_token: str = "Unknown token"
ethereum__valid_signature: str = "The signature is valid." ethereum__valid_signature: str = "The signature is valid."
experimental_mode__enable: str = "Enable experimental features?" experimental_mode__enable: str = "Enable experimental features?"
experimental_mode__only_for_dev: str = "Only for development and beta testing!" experimental_mode__only_for_dev: str = "Only for development and beta testing!"
experimental_mode__title: str = "EXPERIMENTAL MODE" experimental_mode__title: str = "Experimental mode"
fido__already_registered: str = "Already registered" fido__already_registered: str = "Already registered"
fido__device_already_registered: str = "This device is already registered with this application." fido__device_already_registered: str = "This device is already registered with this application."
fido__device_already_registered_with_template: str = "This device is already registered with {0}." fido__device_already_registered_with_template: str = "This device is already registered with {0}."
@ -318,61 +318,61 @@ class TR:
fido__not_registered: str = "Not registered" fido__not_registered: str = "Not registered"
fido__not_registered_with_template: str = "This device is not registered with\n{0}." fido__not_registered_with_template: str = "This device is not registered with\n{0}."
fido__please_enable_pin_protection: str = "Please enable PIN protection." fido__please_enable_pin_protection: str = "Please enable PIN protection."
fido__title_authenticate: str = "FIDO2 AUTHENTICATE" fido__title_authenticate: str = "Fido2 authenticate"
fido__title_import_credential: str = "IMPORT CREDENTIAL" fido__title_import_credential: str = "Import credential"
fido__title_list_credentials: str = "LIST CREDENTIALS" fido__title_list_credentials: str = "List credentials"
fido__title_register: str = "FIDO2 REGISTER" fido__title_register: str = "Fido2 register"
fido__title_remove_credential: str = "REMOVE CREDENTIAL" fido__title_remove_credential: str = "Remove credential"
fido__title_reset: str = "FIDO2 RESET" fido__title_reset: str = "FIDO2 reset"
fido__title_u2f_auth: str = "U2F AUTHENTICATE" fido__title_u2f_auth: str = "U2F authenticate"
fido__title_u2f_register: str = "U2F REGISTER" fido__title_u2f_register: str = "U2F register"
fido__title_verify_user: str = "FIDO2 VERIFY USER" fido__title_verify_user: str = "FIDO2 verify user"
fido__unable_to_verify_user: str = "Unable to verify user." fido__unable_to_verify_user: str = "Unable to verify user."
fido__wanna_erase_credentials: str = "Do you really want to erase all credentials?" fido__wanna_erase_credentials: str = "Do you really want to erase all credentials?"
firmware_update__title: str = "UPDATE FIRMWARE" firmware_update__title: str = "Update firmware"
firmware_update__title_fingerprint: str = "FW FINGERPRINT" firmware_update__title_fingerprint: str = "FW fingerprint"
homescreen__click_to_connect: str = "Click to Connect" homescreen__click_to_connect: str = "Click to Connect"
homescreen__click_to_unlock: str = "Click to Unlock" homescreen__click_to_unlock: str = "Click to Unlock"
homescreen__title_backup_failed: str = "BACKUP FAILED" homescreen__title_backup_failed: str = "Backup failed"
homescreen__title_backup_needed: str = "BACKUP NEEDED" homescreen__title_backup_needed: str = "Backup needed"
homescreen__title_coinjoin_authorized: str = "COINJOIN AUTHORIZED" homescreen__title_coinjoin_authorized: str = "Coinjoin authorized"
homescreen__title_experimental_mode: str = "EXPERIMENTAL MODE" homescreen__title_experimental_mode: str = "Experimental mode"
homescreen__title_no_usb_connection: str = "NO USB CONNECTION" homescreen__title_no_usb_connection: str = "No USB connection"
homescreen__title_pin_not_set: str = "PIN NOT SET" homescreen__title_pin_not_set: str = "PIN not set"
homescreen__title_seedless: str = "SEEDLESS" homescreen__title_seedless: str = "Seedless"
homescreen__title_set: str = "CHANGE HOMESCREEN?" homescreen__title_set: str = "Change homescreen?"
inputs__back: str = "BACK" inputs__back: str = "Back"
inputs__cancel: str = "CANCEL" inputs__cancel: str = "Cancel"
inputs__delete: str = "DELETE" inputs__delete: str = "Delete"
inputs__enter: str = "ENTER" inputs__enter: str = "Enter"
inputs__previous: str = "PREVIOUS" inputs__previous: str = "Previous"
inputs__return: str = "RETURN" inputs__return: str = "Return"
inputs__show: str = "SHOW" inputs__show: str = "Show"
inputs__space: str = "SPACE" inputs__space: str = "Space"
joint__title: str = "JOINT TRANSACTION" joint__title: str = "Joint transaction"
joint__to_the_total_amount: str = "To the total amount:" joint__to_the_total_amount: str = "To the total amount:"
joint__you_are_contributing: str = "You are contributing:" joint__you_are_contributing: str = "You are contributing:"
language__change_to_template: str = "Change language to {0}?" language__change_to_template: str = "Change language to {0}?"
language__changed: str = "Language changed successfully" language__changed: str = "Language changed successfully"
language__progress: str = "Changing language" language__progress: str = "Changing language"
language__title: str = "LANGUAGE SETTINGS" language__title: str = "Language settings"
lockscreen__tap_to_connect: str = "Tap to connect" lockscreen__tap_to_connect: str = "Tap to connect"
lockscreen__tap_to_unlock: str = "Tap to unlock" lockscreen__tap_to_unlock: str = "Tap to unlock"
lockscreen__title_locked: str = "LOCKED" lockscreen__title_locked: str = "Locked"
lockscreen__title_not_connected: str = "NOT CONNECTED" lockscreen__title_not_connected: str = "Not connected"
misc__decrypt_value: str = "Decrypt value" misc__decrypt_value: str = "Decrypt value"
misc__encrypt_value: str = "Encrypt value" misc__encrypt_value: str = "Encrypt value"
misc__title_suite_labeling: str = "SUITE LABELING" misc__title_suite_labeling: str = "Suite labeling"
modify_amount__decrease_amount: str = "Decrease amount by:" modify_amount__decrease_amount: str = "Decrease amount by:"
modify_amount__increase_amount: str = "Increase amount by:" modify_amount__increase_amount: str = "Increase amount by:"
modify_amount__new_amount: str = "New amount:" modify_amount__new_amount: str = "New amount:"
modify_amount__title: str = "MODIFY AMOUNT" modify_amount__title: str = "Modify amount"
modify_fee__decrease_fee: str = "Decrease fee by:" modify_fee__decrease_fee: str = "Decrease fee by:"
modify_fee__fee_rate: str = "Fee rate:" modify_fee__fee_rate: str = "Fee rate:"
modify_fee__increase_fee: str = "Increase fee by:" modify_fee__increase_fee: str = "Increase fee by:"
modify_fee__new_transaction_fee: str = "New transaction fee:" modify_fee__new_transaction_fee: str = "New transaction fee:"
modify_fee__no_change: str = "Fee did not change.\n" modify_fee__no_change: str = "Fee did not change.\n"
modify_fee__title: str = "MODIFY FEE" modify_fee__title: str = "Modify fee"
modify_fee__transaction_fee: str = "Transaction fee:" modify_fee__transaction_fee: str = "Transaction fee:"
monero__confirm_export: str = "Confirm export" monero__confirm_export: str = "Confirm export"
monero__confirm_ki_sync: str = "Confirm ki sync" monero__confirm_ki_sync: str = "Confirm ki sync"
@ -451,11 +451,11 @@ class TR:
passphrase__next_screen_will_show_passphrase: str = "Next screen will show the passphrase." passphrase__next_screen_will_show_passphrase: str = "Next screen will show the passphrase."
passphrase__please_enter: str = "Please enter your passphrase." passphrase__please_enter: str = "Please enter your passphrase."
passphrase__revoke_on_device: str = "Do you want to revoke the passphrase on device setting?" passphrase__revoke_on_device: str = "Do you want to revoke the passphrase on device setting?"
passphrase__title_confirm: str = "CONFIRM PASSPHRASE" passphrase__title_confirm: str = "Confirm passphrase"
passphrase__title_enter: str = "ENTER PASSPHRASE" passphrase__title_enter: str = "Enter passphrase"
passphrase__title_hide: str = "HIDE PASSPHRASE" passphrase__title_hide: str = "Hide passphrase"
passphrase__title_settings: str = "PASSPHRASE SETTINGS" passphrase__title_settings: str = "Passphrase settings"
passphrase__title_source: str = "PASSPHRASE SOURCE" passphrase__title_source: str = "Passphrase source"
passphrase__turn_off: str = "Turn off passphrase protection?" passphrase__turn_off: str = "Turn off passphrase protection?"
passphrase__turn_on: str = "Turn on passphrase protection?" passphrase__turn_on: str = "Turn on passphrase protection?"
pin__change: str = "Change PIN?" pin__change: str = "Change PIN?"
@ -476,9 +476,9 @@ class TR:
pin__reenter_new: str = "Re-enter new PIN" pin__reenter_new: str = "Re-enter new PIN"
pin__reenter_to_confirm: str = "Please re-enter PIN to confirm." pin__reenter_to_confirm: str = "Please re-enter PIN to confirm."
pin__should_be_long: str = "PIN should be 4-50 digits long." pin__should_be_long: str = "PIN should be 4-50 digits long."
pin__title_check_pin: str = "CHECK PIN" pin__title_check_pin: str = "Check PIN"
pin__title_settings: str = "PIN SETTINGS" pin__title_settings: str = "PIN settings"
pin__title_wrong_pin: str = "WRONG PIN" pin__title_wrong_pin: str = "Wrong PIN"
pin__tries_left: str = "tries left" pin__tries_left: str = "tries left"
pin__turn_off: str = "Are you sure you want to turn off PIN protection?" pin__turn_off: str = "Are you sure you want to turn off PIN protection?"
pin__turn_on: str = "Turn on PIN protection?" pin__turn_on: str = "Turn on PIN protection?"
@ -497,14 +497,14 @@ class TR:
progress__loading_transaction: str = "Loading transaction..." progress__loading_transaction: str = "Loading transaction..."
progress__locking_device: str = "Locking the device..." progress__locking_device: str = "Locking the device..."
progress__one_second_left: str = "1 second left" progress__one_second_left: str = "1 second left"
progress__please_wait: str = "PLEASE WAIT"
progress__refreshing: str = "Refreshing..." progress__refreshing: str = "Refreshing..."
progress__signing_transaction: str = "Signing transaction..." progress__signing_transaction: str = "Signing transaction..."
progress__syncing: str = "Syncing..." progress__syncing: str = "Syncing..."
progress__title_please_wait: str = "Please wait"
progress__x_seconds_left_template: str = "{0} seconds left" progress__x_seconds_left_template: str = "{0} seconds left"
reboot_to_bootloader__just_a_moment: str = "Just a moment..." reboot_to_bootloader__just_a_moment: str = "Just a moment..."
reboot_to_bootloader__restart: str = "Trezor will restart in bootloader mode." reboot_to_bootloader__restart: str = "Trezor will restart in bootloader mode."
reboot_to_bootloader__title: str = "GO TO BOOTLOADER" reboot_to_bootloader__title: str = "Go to bootloader"
reboot_to_bootloader__version_by_template: str = "Firmware version {0}\nby {1}" reboot_to_bootloader__version_by_template: str = "Firmware version {0}\nby {1}"
recovery__cancel_dry_run: str = "Cancel backup check" recovery__cancel_dry_run: str = "Cancel backup check"
recovery__check_dry_run: str = "Check your backup?" recovery__check_dry_run: str = "Check your backup?"
@ -529,18 +529,18 @@ class TR:
recovery__share_already_entered: str = "Share already entered" recovery__share_already_entered: str = "Share already entered"
recovery__share_from_another_shamir: str = "You have entered a share from another Shamir Backup." recovery__share_from_another_shamir: str = "You have entered a share from another Shamir Backup."
recovery__share_num_template: str = "Share {0}" recovery__share_num_template: str = "Share {0}"
recovery__title: str = "RECOVER WALLET" recovery__title: str = "Recover wallet"
recovery__title_cancel_dry_run: str = "CANCEL BACKUP CHECK" recovery__title_cancel_dry_run: str = "Cancel backup check"
recovery__title_cancel_recovery: str = "CANCEL RECOVERY" recovery__title_cancel_recovery: str = "Cancel recovery"
recovery__title_dry_run: str = "BACKUP CHECK" recovery__title_dry_run: str = "Backup check"
recovery__title_recover: str = "RECOVER WALLET" recovery__title_recover: str = "Recover wallet"
recovery__title_remaining_shares: str = "REMAINING SHARES" recovery__title_remaining_shares: str = "Remaining shares"
recovery__type_word_x_of_y_template: str = "Type word {0} of {1}" recovery__type_word_x_of_y_template: str = "Type word {0} of {1}"
recovery__wallet_recovered: str = "Wallet recovered successfully" recovery__wallet_recovered: str = "Wallet recovered successfully"
recovery__wanna_cancel_dry_run: str = "Are you sure you want to cancel the backup check?" recovery__wanna_cancel_dry_run: str = "Are you sure you want to cancel the backup check?"
recovery__wanna_cancel_recovery: str = "Are you sure you want to cancel the recovery process?" recovery__wanna_cancel_recovery: str = "Are you sure you want to cancel the recovery process?"
recovery__word_count_template: str = "({0} words)" recovery__word_count_template: str = "({0} words)"
recovery__word_x_of_y_template: str = "WORD {0} OF {1}" recovery__word_x_of_y_title_template: str = "Word {0} of {1}"
recovery__x_more_items_starting_template_plural: str = "{count} more {plural} starting" recovery__x_more_items_starting_template_plural: str = "{count} more {plural} starting"
recovery__x_more_shares_needed_template_plural: str = "{count} more {plural} needed." recovery__x_more_shares_needed_template_plural: str = "{count} more {plural} needed."
recovery__x_of_y_entered_template: str = "{0} of {1} shares entered successfully." recovery__x_of_y_entered_template: str = "{0} of {1} shares entered successfully."
@ -548,13 +548,13 @@ class TR:
reset__advanced_group_threshold_info: str = "The group threshold specifies the number of groups required to recover your wallet." reset__advanced_group_threshold_info: str = "The group threshold specifies the number of groups required to recover your wallet."
reset__all_x_of_y_template: str = "all {0} of {1} shares" reset__all_x_of_y_template: str = "all {0} of {1} shares"
reset__any_x_of_y_template: str = "any {0} of {1} shares" reset__any_x_of_y_template: str = "any {0} of {1} shares"
reset__button_create: str = "CREATE WALLET" reset__button_create: str = "Create wallet"
reset__button_recover: str = "RECOVER WALLET" reset__button_recover: str = "Recover wallet"
reset__by_continuing: str = "By continuing you agree to Trezor Company's terms and conditions." reset__by_continuing: str = "By continuing you agree to Trezor Company's terms and conditions."
reset__check_backup_title: str = "CHECK BACKUP" reset__check_backup_title: str = "Check backup"
reset__check_group_share_title_template: str = "CHECK G{0} - SHARE {1}" reset__check_group_share_title_template: str = "Check g{0} - share {1}"
reset__check_seed_title: str = "CHECK SEED" reset__check_seed_title: str = "Check seed"
reset__check_share_title_template: str = "CHECK SHARE #{0}" reset__check_share_title_template: str = "Check share #{0}"
reset__continue_with_next_share: str = "Continue with the next share." reset__continue_with_next_share: str = "Continue with the next share."
reset__continue_with_share_template: str = "Continue with share #{0}." reset__continue_with_share_template: str = "Continue with share #{0}."
reset__finished_verifying_group_template: str = "You have finished verifying your recovery shares for group {0}." reset__finished_verifying_group_template: str = "You have finished verifying your recovery shares for group {0}."
@ -563,7 +563,7 @@ class TR:
reset__group_description: str = "A group is made up of recovery shares." reset__group_description: str = "A group is made up of recovery shares."
reset__group_info: str = "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_info: str = "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: str = "Group {0} - Share {1} checked successfully." reset__group_share_checked_successfully_template: str = "Group {0} - Share {1} checked successfully."
reset__group_share_title_template: str = "GROUP {0} - SHARE {1}" reset__group_share_title_template: str = "Group {0} - share {1}"
reset__more_info_at: str = "More info at" reset__more_info_at: str = "More info at"
reset__need_all_share_template: str = "For recovery you need all {0} of the shares." reset__need_all_share_template: str = "For recovery you need all {0} of the shares."
reset__need_any_share_template: str = "For recovery you need any {0} of the shares." reset__need_any_share_template: str = "For recovery you need any {0} of the shares."
@ -577,15 +577,15 @@ class TR:
reset__number_of_shares_info: str = "= total number of unique word lists used for wallet backup." reset__number_of_shares_info: str = "= total number of unique word lists used for wallet backup."
reset__one_share: str = "1 share" reset__one_share: str = "1 share"
reset__only_one_share_will_be_created: str = "Only one share will be created." reset__only_one_share_will_be_created: str = "Only one share will be created."
reset__recovery_seed_title: str = "RECOVERY SEED" reset__recovery_seed_title: str = "Recovery seed"
reset__recovery_share_title_template: str = "RECOVERY SHARE #{0}" reset__recovery_share_title_template: str = "Recovery share #{0}"
reset__required_number_of_groups: str = "The required number of groups for recovery." reset__required_number_of_groups: str = "The required number of groups for recovery."
reset__select_correct_word: str = "Select the correct word for each position." reset__select_correct_word: str = "Select the correct word for each position."
reset__select_word_template: str = "SELECT {0} WORD" reset__select_word_title_template: str = "Select {0} word"
reset__select_word_x_of_y_template: str = "Select word {0} of {1}:" reset__select_word_x_of_y_template: str = "Select word {0} of {1}:"
reset__set_it_to_count_template: str = "Set it to {0} and you will need " reset__set_it_to_count_template: str = "Set it to {0} and you will need "
reset__share_checked_successfully_template: str = "Recovery share #{0} checked successfully." reset__share_checked_successfully_template: str = "Recovery share #{0} checked successfully."
reset__share_words_title: str = "STANDARD BACKUP" reset__share_words_title: str = "Standard backup"
reset__slip39_checklist_num_groups: str = "Number of groups" reset__slip39_checklist_num_groups: str = "Number of groups"
reset__slip39_checklist_num_shares: str = "Number of shares" reset__slip39_checklist_num_shares: str = "Number of shares"
reset__slip39_checklist_set_num_groups: str = "Set number of groups" reset__slip39_checklist_set_num_groups: str = "Set number of groups"
@ -593,21 +593,21 @@ class TR:
reset__slip39_checklist_set_sizes: str = "Set sizes and thresholds" reset__slip39_checklist_set_sizes: str = "Set sizes and thresholds"
reset__slip39_checklist_set_sizes_longer: str = "Set size and threshold for each group" reset__slip39_checklist_set_sizes_longer: str = "Set size and threshold for each group"
reset__slip39_checklist_set_threshold: str = "Set threshold" reset__slip39_checklist_set_threshold: str = "Set threshold"
reset__slip39_checklist_title: str = "BACKUP CHECKLIST" reset__slip39_checklist_title: str = "Backup checklist"
reset__slip39_checklist_write_down: str = "Write down and check all shares" reset__slip39_checklist_write_down: str = "Write down and check all shares"
reset__slip39_checklist_write_down_recovery: str = "Write down and check all recovery shares" reset__slip39_checklist_write_down_recovery: str = "Write down and check all recovery shares"
reset__the_threshold_sets_the_number_of_shares: str = "The threshold sets the number of shares " reset__the_threshold_sets_the_number_of_shares: str = "The threshold sets the number of shares "
reset__threshold_info: str = "= minimum number of unique word lists used for recovery." reset__threshold_info: str = "= minimum number of unique word lists used for recovery."
reset__title_backup_is_done: str = "BACKUP IS DONE" reset__title_backup_is_done: str = "Backup is done"
reset__title_create_wallet: str = "CREATE WALLET" reset__title_create_wallet: str = "Create wallet"
reset__title_create_wallet_shamir: str = "CREATE WALLET (SHAMIR)" reset__title_create_wallet_shamir: str = "Create wallet (shamir)"
reset__title_group_threshold: str = "GROUP THRESHOLD" reset__title_group_threshold: str = "Group threshold"
reset__title_number_of_groups: str = "NUMBER OF GROUPS" reset__title_number_of_groups: str = "Number of groups"
reset__title_number_of_shares: str = "NUMBER OF SHARES" reset__title_number_of_shares: str = "Number of shares"
reset__title_set_group_threshold: str = "SET GROUP THRESHOLD" reset__title_set_group_threshold: str = "Set group threshold"
reset__title_set_number_of_groups: str = "SET NUMBER OF GROUPS" reset__title_set_number_of_groups: str = "Set number of groups"
reset__title_set_number_of_shares: str = "SET NUMBER OF SHARES" reset__title_set_number_of_shares: str = "Set number of shares"
reset__title_set_threshold: str = "SET THRESHOLD" reset__title_set_threshold: str = "Set threshold"
reset__to_form_group_template: str = "to form Group {0}." reset__to_form_group_template: str = "to form Group {0}."
reset__tos_link: str = "trezor.io/tos" reset__tos_link: str = "trezor.io/tos"
reset__total_number_of_shares_in_group_template: str = "Set the total number of shares in Group {0}." reset__total_number_of_shares_in_group_template: str = "Set the total number of shares in Group {0}."
@ -622,13 +622,13 @@ class TR:
rotation__east: str = "east" rotation__east: str = "east"
rotation__north: str = "north" rotation__north: str = "north"
rotation__south: str = "south" rotation__south: str = "south"
rotation__title_change: str = "CHANGE ROTATION" rotation__title_change: str = "Change rotation"
rotation__west: str = "west" rotation__west: str = "west"
safety_checks__approve_unsafe_always: str = "Trezor will allow you to approve some actions which might be unsafe." safety_checks__approve_unsafe_always: str = "Trezor will allow you to approve some actions which might be unsafe."
safety_checks__approve_unsafe_temporary: str = "Trezor will temporarily allow you to approve some actions which might be unsafe." safety_checks__approve_unsafe_temporary: str = "Trezor will temporarily allow you to approve some actions which might be unsafe."
safety_checks__enforce_strict: str = "Do you really want to enforce strict safety checks (recommended)?" safety_checks__enforce_strict: str = "Do you really want to enforce strict safety checks (recommended)?"
safety_checks__title: str = "SAFETY CHECKS" safety_checks__title: str = "Safety checks"
safety_checks__title_safety_override: str = "SAFETY OVERRIDE" safety_checks__title_safety_override: str = "Safety override"
sd_card__all_data_will_be_lost: str = "All data on the SD card will be lost." sd_card__all_data_will_be_lost: str = "All data on the SD card will be lost."
sd_card__card_required: str = "SD card required." sd_card__card_required: str = "SD card required."
sd_card__disable: str = "Do you really want to remove SD card protection from your device?" sd_card__disable: str = "Do you really want to remove SD card protection from your device?"
@ -644,25 +644,25 @@ class TR:
sd_card__refresh: str = "Do you really want to replace the current SD card secret with a newly generated one?" sd_card__refresh: str = "Do you really want to replace the current SD card secret with a newly generated one?"
sd_card__refreshed: str = "You have successfully refreshed SD protection." sd_card__refreshed: str = "You have successfully refreshed SD protection."
sd_card__restart: str = "Do you want to restart Trezor in bootloader mode?" sd_card__restart: str = "Do you want to restart Trezor in bootloader mode?"
sd_card__title: str = "SD CARD PROTECTION" sd_card__title: str = "SD card protection"
sd_card__title_problem: str = "SD CARD PROBLEM" sd_card__title_problem: str = "SD card problem"
sd_card__unknown_filesystem: str = "Unknown filesystem." sd_card__unknown_filesystem: str = "Unknown filesystem."
sd_card__unplug_and_insert_correct: str = "Please unplug the device and insert the correct SD card." sd_card__unplug_and_insert_correct: str = "Please unplug the device and insert the correct SD card."
sd_card__use_different_card: str = "Use a different card or format the SD card to the FAT32 filesystem." sd_card__use_different_card: str = "Use a different card or format the SD card to the FAT32 filesystem."
sd_card__wanna_format: str = "Do you really want to format the SD card?" sd_card__wanna_format: str = "Do you really want to format the SD card?"
sd_card__wrong_sd_card: str = "Wrong SD card." sd_card__wrong_sd_card: str = "Wrong SD card."
send__address_path: str = "address path" send__address_path: str = "address path"
send__confirm_sending: str = "SENDING AMOUNT" send__confirm_sending: str = "Sending amount"
send__from_multiple_accounts: str = "Sending from multiple accounts." send__from_multiple_accounts: str = "Sending from multiple accounts."
send__including_fee: str = "Including fee:" send__including_fee: str = "Including fee:"
send__maximum_fee: str = "Maximum fee:" send__maximum_fee: str = "Maximum fee:"
send__receiving_to_multisig: str = "Receiving to a multisig address." send__receiving_to_multisig: str = "Receiving to a multisig address."
send__title_confirm_sending: str = "CONFIRM SENDING" send__title_confirm_sending: str = "Confirm sending"
send__title_joint_transaction: str = "JOINT TRANSACTION" send__title_joint_transaction: str = "Joint transaction"
send__title_receiving_to: str = "RECEIVING TO" send__title_receiving_to: str = "Receiving to"
send__title_sending: str = "SENDING" send__title_sending: str = "Sending"
send__title_sending_amount: str = "SENDING AMOUNT" send__title_sending_amount: str = "Sending amount"
send__title_sending_to: str = "SENDING TO" send__title_sending_to: str = "Sending to"
send__to_the_total_amount: str = "To the total amount:" send__to_the_total_amount: str = "To the total amount:"
send__total_amount: str = "Total amount:" send__total_amount: str = "Total amount:"
send__transaction_id: str = "Transaction ID:" send__transaction_id: str = "Transaction ID:"
@ -670,10 +670,10 @@ class TR:
share_words__words_in_order: str = " words in order." share_words__words_in_order: str = " words in order."
share_words__wrote_down_all: str = "I wrote down all " share_words__wrote_down_all: str = "I wrote down all "
sign_message__bytes_template: str = "{0} Bytes" sign_message__bytes_template: str = "{0} Bytes"
sign_message__confirm_address: str = "SIGNING ADDRESS"
sign_message__confirm_message: str = "CONFIRM MESSAGE"
sign_message__message_size: str = "Message size:" sign_message__message_size: str = "Message size:"
sign_message__verify_address: str = "VERIFY ADDRESS" sign_message__title_confirm_address: str = "Signing address"
sign_message__title_confirm_message: str = "Confirm message"
sign_message__title_verify_address: str = "Verify address"
solana__account_index: str = "Account index" solana__account_index: str = "Account index"
solana__associated_token_account: str = "Associated token account" solana__associated_token_account: str = "Associated token account"
solana__confirm_multisig: str = "Confirm multisig" solana__confirm_multisig: str = "Confirm multisig"
@ -755,10 +755,10 @@ class TR:
stellar__value_sha256: str = "Value (SHA-256):" stellar__value_sha256: str = "Value (SHA-256):"
stellar__wanna_clean_value_key_template: str = "Do you want to clear value key {0}?" stellar__wanna_clean_value_key_template: str = "Do you want to clear value key {0}?"
stellar__your_account: str = " your account" stellar__your_account: str = " your account"
storage_msg__processing: str = "PROCESSING" storage_msg__title_processing: str = "Processing"
storage_msg__starting: str = "STARTING UP" storage_msg__title_starting: str = "Starting up"
storage_msg__verifying_pin: str = "VERIFYING PIN" storage_msg__title_verifying_pin: str = "Verifying pin"
storage_msg__wrong_pin: str = "WRONG PIN" storage_msg__title_wrong_pin: str = "Wrong pin"
tezos__baker_address: str = "Baker address:" tezos__baker_address: str = "Baker address:"
tezos__balance: str = "Balance:" tezos__balance: str = "Balance:"
tezos__ballot: str = "Ballot:" tezos__ballot: str = "Ballot:"
@ -784,10 +784,10 @@ class TR:
tutorial__welcome_press_right: str = "Welcome to Trezor. Press right to continue." tutorial__welcome_press_right: str = "Welcome to Trezor. Press right to continue."
u2f__get: str = "Increase and retrieve the U2F counter?" u2f__get: str = "Increase and retrieve the U2F counter?"
u2f__set_template: str = "Set the U2F counter to {0}?" u2f__set_template: str = "Set the U2F counter to {0}?"
u2f__title_get: str = "GET U2F COUNTER" u2f__title_get: str = "Get U2F counter"
u2f__title_set: str = "SET U2F COUNTER" u2f__title_set: str = "Set U2F counter"
wipe__info: str = "All data will be erased." wipe__info: str = "All data will be erased."
wipe__title: str = "WIPE DEVICE" wipe__title: str = "Wipe device"
wipe__want_to_wipe: str = "Do you really want to wipe the device?\n" wipe__want_to_wipe: str = "Do you really want to wipe the device?\n"
wipe_code__change: str = "Change wipe code?" wipe_code__change: str = "Change wipe code?"
wipe_code__changed: str = "Wipe code changed." wipe_code__changed: str = "Wipe code changed."
@ -800,13 +800,13 @@ class TR:
wipe_code__mismatch: str = "The wipe codes you entered do not match." wipe_code__mismatch: str = "The wipe codes you entered do not match."
wipe_code__reenter: str = "Re-enter wipe code" wipe_code__reenter: str = "Re-enter wipe code"
wipe_code__reenter_to_confirm: str = "Please re-enter wipe code to confirm." wipe_code__reenter_to_confirm: str = "Please re-enter wipe code to confirm."
wipe_code__title_check: str = "CHECK WIPE CODE" wipe_code__title_check: str = "Check wipe code"
wipe_code__title_invalid: str = "INVALID WIPE CODE" wipe_code__title_invalid: str = "Invalid wipe code"
wipe_code__title_settings: str = "WIPE CODE SETTINGS" wipe_code__title_settings: str = "Wipe code settings"
wipe_code__turn_off: str = "Turn off wipe code protection?" wipe_code__turn_off: str = "Turn off wipe code protection?"
wipe_code__turn_on: str = "Turn on wipe code protection?" wipe_code__turn_on: str = "Turn on wipe code protection?"
wipe_code__wipe_code_mismatch: str = "Wipe code mismatch" wipe_code__wipe_code_mismatch: str = "Wipe code mismatch"
word_count__title: str = "NUMBER OF WORDS" word_count__title: str = "Number of words"
words__account: str = "Account" words__account: str = "Account"
words__account_colon: str = "Account:" words__account_colon: str = "Account:"
words__address: str = "Address" words__address: str = "Address"
@ -831,18 +831,18 @@ class TR:
words__please_check_again: str = "Please check again" words__please_check_again: str = "Please check again"
words__please_try_again: str = "Please try again" words__please_try_again: str = "Please try again"
words__really_wanna: str = "Do you really want to" words__really_wanna: str = "Do you really want to"
words__recipient: str = "Recipient"
words__sign: str = "Sign" words__sign: str = "Sign"
words__signer: str = "Signer" words__signer: str = "Signer"
words__title_check: str = "CHECK" words__title_check: str = "Check"
words__title_group: str = "GROUP" words__title_group: str = "Group"
words__title_information: str = "INFORMATION" words__title_information: str = "Information"
words__title_remember: str = "REMEMBER" words__title_recipient: str = "Recipient"
words__title_share: str = "SHARE" words__title_remember: str = "Remember"
words__title_shares: str = "SHARES" words__title_share: str = "Share"
words__title_success: str = "SUCCESS" words__title_shares: str = "Shares"
words__title_summary: str = "SUMMARY" words__title_success: str = "Success"
words__title_threshold: str = "THRESHOLD" words__title_summary: str = "Summary"
words__title_threshold: str = "Threshold"
words__unknown: str = "Unknown" words__unknown: str = "Unknown"
words__warning: str = "Warning" words__warning: str = "Warning"
words__writable: str = "Writable" words__writable: str = "Writable"

@ -304,7 +304,7 @@ async def handle_UnlockPath(msg: UnlockPath) -> protobuf.MessageType:
else: else:
await confirm_action( await confirm_action(
"confirm_coinjoin_access", "confirm_coinjoin_access",
title="Coinjoin", title="COINJOIN",
description=TR.coinjoin__access_account, description=TR.coinjoin__access_account,
verb=TR.buttons__access, verb=TR.buttons__access,
) )

@ -40,7 +40,7 @@ async def get_public_key(
from apps.common.paths import address_n_to_str from apps.common.paths import address_n_to_str
path = address_n_to_str(address_n) path = address_n_to_str(address_n)
await show_pubkey(key.xpub, TR.address__public_key, path=path) await show_pubkey(key.xpub, TR.address__title_public_key, path=path)
return key return key

@ -58,13 +58,13 @@ async def require_confirm_stake(
addr_str = address_from_bytes(addr_bytes, network) addr_str = address_from_bytes(addr_bytes, network)
total_amount = format_ethereum_amount(value, None, network) total_amount = format_ethereum_amount(value, None, network)
await confirm_ethereum_staking_tx( await confirm_ethereum_staking_tx(
TR.ethereum__staking_stake, # title TR.ethereum__staking_title_stake, # title
TR.ethereum__staking_stake_intro, # intro_question TR.ethereum__staking_stake_intro, # intro_question
TR.ethereum__staking_stake, # verb TR.ethereum__staking_title_stake, # verb
total_amount, # total_amount total_amount, # total_amount
maximum_fee, # maximum_fee maximum_fee, # maximum_fee
addr_str, # address addr_str, # address
TR.ethereum__staking_stake_address, # address_title TR.ethereum__staking_title_stake_address, # address_title
fee_info_items, # info_items fee_info_items, # info_items
chunkify=chunkify, chunkify=chunkify,
) )
@ -83,13 +83,13 @@ async def require_confirm_unstake(
total_amount = format_ethereum_amount(value, None, network) total_amount = format_ethereum_amount(value, None, network)
await confirm_ethereum_staking_tx( await confirm_ethereum_staking_tx(
TR.ethereum__staking_unstake, # title TR.ethereum__staking_title_unstake, # title
TR.ethereum__staking_unstake_intro, # intro_question TR.ethereum__staking_unstake_intro, # intro_question
TR.ethereum__staking_unstake, # verb TR.ethereum__staking_title_unstake, # verb
total_amount, # total_amount total_amount, # total_amount
maximum_fee, # maximum_fee maximum_fee, # maximum_fee
addr_str, # address addr_str, # address
TR.ethereum__staking_stake_address, # address_title TR.ethereum__staking_title_stake_address, # address_title
fee_info_items, # info_items fee_info_items, # info_items
chunkify=chunkify, chunkify=chunkify,
) )
@ -105,13 +105,13 @@ async def require_confirm_claim(
addr_str = address_from_bytes(addr_bytes, network) addr_str = address_from_bytes(addr_bytes, network)
await confirm_ethereum_staking_tx( await confirm_ethereum_staking_tx(
TR.ethereum__staking_claim, # title TR.ethereum__staking_title_claim, # title
TR.ethereum__staking_claim_intro, # intro_question TR.ethereum__staking_claim_intro, # intro_question
TR.ethereum__staking_claim, # verb TR.ethereum__staking_title_claim, # verb
"", # total_amount "", # total_amount
maximum_fee, # maximum_fee maximum_fee, # maximum_fee
addr_str, # address addr_str, # address
TR.ethereum__staking_claim_address, # address_title TR.ethereum__staking_title_claim_address, # address_title
fee_info_items, # info_items fee_info_items, # info_items
chunkify=chunkify, chunkify=chunkify,
) )

@ -266,7 +266,7 @@ async def confirm_system_transfer(
blockhash: bytes, blockhash: bytes,
) -> None: ) -> None:
await confirm_value( await confirm_value(
title=TR.words__recipient, title=TR.words__title_recipient,
value=base58.encode(transfer_instruction.recipient_account[0]), value=base58.encode(transfer_instruction.recipient_account[0]),
description="", description="",
br_type="confirm_recipient", br_type="confirm_recipient",
@ -295,7 +295,7 @@ async def confirm_token_transfer(
blockhash: bytes, blockhash: bytes,
): ):
await confirm_value( await confirm_value(
title=TR.words__recipient, title=TR.words__title_recipient,
value=base58.encode(destination_account), value=base58.encode(destination_account),
description="", description="",
br_type="confirm_recipient", br_type="confirm_recipient",

@ -18,13 +18,13 @@ def _storage_message_to_str(message: config.StorageMessage | None) -> str | None
if message == config.StorageMessage.NO_MSG: if message == config.StorageMessage.NO_MSG:
return "" return ""
if message == config.StorageMessage.VERIFYING_PIN_MSG: if message == config.StorageMessage.VERIFYING_PIN_MSG:
return TR.storage_msg__verifying_pin return TR.storage_msg__title_verifying_pin
if message == config.StorageMessage.PROCESSING_MSG: if message == config.StorageMessage.PROCESSING_MSG:
return TR.storage_msg__processing return TR.storage_msg__title_processing
if message == config.StorageMessage.STARTING_MSG: if message == config.StorageMessage.STARTING_MSG:
return TR.storage_msg__starting return TR.storage_msg__title_starting
if message == config.StorageMessage.WRONG_PIN_MSG: if message == config.StorageMessage.WRONG_PIN_MSG:
return TR.storage_msg__wrong_pin return TR.storage_msg__title_wrong_pin
raise RuntimeError # unknown message raise RuntimeError # unknown message
@ -56,14 +56,13 @@ def progress(
indeterminate: bool = False, indeterminate: bool = False,
) -> ProgressLayout: ) -> ProgressLayout:
if description is None: if description is None:
description = TR.progress__please_wait # def_arg description = TR.progress__title_please_wait # def_arg
if title is not None: # elif not utils.MODEL_IS_T2B1:
title = title.upper() # TODO: keep this?
elif not utils.MODEL_IS_T2B1: # # on TT, uppercase the description which ends up on top of the screen
# on TT, uppercase the description which ends up on top of the screen # # when no title is set
# when no title is set # description = description.upper()
description = description.upper()
return RustProgress( return RustProgress(
layout=trezorui2.show_progress( layout=trezorui2.show_progress(

@ -403,7 +403,7 @@ def confirm_reset_device(
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_reset_device( trezorui2.confirm_reset_device(
title=title.upper(), title=title,
button=button, button=button,
) )
), ),
@ -563,7 +563,7 @@ def show_pubkey(
mismatch_title: str | None = None, mismatch_title: str | None = None,
br_type: str = "show_pubkey", br_type: str = "show_pubkey",
) -> Awaitable[None]: ) -> Awaitable[None]:
title = title or TR.address__public_key # def_arg title = title or TR.address__title_public_key # def_arg
mismatch_title = mismatch_title or TR.addr_mismatch__key_mismatch # def_arg mismatch_title = mismatch_title or TR.addr_mismatch__key_mismatch # def_arg
return show_address( return show_address(
address=pubkey, address=pubkey,
@ -691,8 +691,8 @@ async def confirm_output(
output_index: int | None = None, output_index: int | None = None,
chunkify: bool = False, chunkify: bool = False,
) -> None: ) -> None:
title = title or TR.send__confirm_sending # def_arg title = title or TR.send__title_sending_amount # def_arg
address_title = TR.words__recipient address_title = TR.words__title_recipient
if output_index is not None: if output_index is not None:
address_title += f" #{output_index + 1}" address_title += f" #{output_index + 1}"
amount_title = TR.words__amount amount_title = TR.words__amount
@ -748,7 +748,7 @@ async def should_show_payment_request_details(
memos_str = "\n".join(memos) memos_str = "\n".join(memos)
await _placeholder_confirm( await _placeholder_confirm(
"confirm_payment_request", "confirm_payment_request",
TR.send__title_confirm_sending, TR.send__title_sending_amount,
description=f"{amount} to\n{recipient_name}\n{memos_str}", description=f"{amount} to\n{recipient_name}\n{memos_str}",
br_code=ButtonRequestType.ConfirmOutput, br_code=ButtonRequestType.ConfirmOutput,
) )
@ -1107,7 +1107,7 @@ if not utils.BITCOIN_ONLY:
) )
# confirmation # confirmation
if verb == TR.ethereum__staking_claim: if verb == TR.ethereum__staking_title_claim:
amount_title = verb amount_title = verb
amount_value = "" amount_value = ""
else: else:
@ -1183,7 +1183,7 @@ if not utils.BITCOIN_ONLY:
# Allowing going back and forth between recipient and summary/details # Allowing going back and forth between recipient and summary/details
await confirm_blob( await confirm_blob(
br_type, br_type,
TR.words__recipient, TR.words__title_recipient,
recipient, recipient,
verb=TR.buttons__continue, verb=TR.buttons__continue,
chunkify=chunkify, chunkify=chunkify,
@ -1365,7 +1365,7 @@ async def confirm_signverify(
while True: while True:
await confirm_blob( await confirm_blob(
br_type, br_type,
TR.sign_message__confirm_address, TR.sign_message__title_confirm_address,
address, address,
verb=TR.buttons__continue, verb=TR.buttons__continue,
br_code=BR_TYPE_OTHER, br_code=BR_TYPE_OTHER,
@ -1374,7 +1374,7 @@ async def confirm_signverify(
try: try:
await confirm_blob( await confirm_blob(
br_type, br_type,
TR.sign_message__confirm_message, TR.sign_message__title_confirm_message,
message, message,
verb_cancel="^", verb_cancel="^",
br_code=BR_TYPE_OTHER, br_code=BR_TYPE_OTHER,

@ -23,7 +23,7 @@ async def request_word(
) -> str: ) -> str:
from trezor.wire.context import wait from trezor.wire.context import wait
prompt = TR.recovery__word_x_of_y_template.format(word_index + 1, word_count) prompt = TR.recovery__word_x_of_y_title_template.format(word_index + 1, word_count)
can_go_back = word_index > 0 can_go_back = word_index > 0

@ -93,7 +93,7 @@ async def select_word(
RustLayout( RustLayout(
trezorui2.select_word( trezorui2.select_word(
title="", title="",
description=TR.reset__select_word_template.format(word_ordinal), description=TR.reset__select_word_title_template.format(word_ordinal),
words=(words[0].lower(), words[1].lower(), words[2].lower()), words=(words[0].lower(), words[1].lower(), words[2].lower()),
) )
) )

@ -256,11 +256,6 @@ def confirm_action(
exc: ExceptionType = ActionCancelled, exc: ExceptionType = ActionCancelled,
br_code: ButtonRequestType = BR_TYPE_OTHER, br_code: ButtonRequestType = BR_TYPE_OTHER,
) -> Awaitable[None]: ) -> Awaitable[None]:
if verb is not None:
verb = verb.upper()
if verb_cancel is not None:
verb_cancel = verb_cancel.upper()
if description is not None and description_param is not None: if description is not None and description_param is not None:
description = description.format(description_param) description = description.format(description_param)
@ -268,7 +263,7 @@ def confirm_action(
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_action( trezorui2.confirm_action(
title=title.upper(), title=title,
action=action, action=action,
description=description, description=description,
verb=verb, verb=verb,
@ -292,8 +287,6 @@ def confirm_single(
description_param: str | None = None, description_param: str | None = None,
verb: str | None = None, verb: str | None = None,
) -> Awaitable[None]: ) -> Awaitable[None]:
if verb is not None:
verb = verb.upper()
description_param = description_param or "" description_param = description_param or ""
# Placeholders are coming from translations in form of {0} # Placeholders are coming from translations in form of {0}
@ -306,7 +299,7 @@ def confirm_single(
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_emphasized( trezorui2.confirm_emphasized(
title=title.upper(), title=title,
items=(begin, (True, description_param), end), items=(begin, (True, description_param), end),
verb=verb, verb=verb,
) )
@ -327,7 +320,7 @@ def confirm_reset_device(title: str, recovery: bool = False) -> Awaitable[None]:
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_reset_device( trezorui2.confirm_reset_device(
title=title.upper(), title=title,
button=button, button=button,
) )
), ),
@ -362,7 +355,7 @@ async def prompt_backup() -> bool:
result = await interact( result = await interact(
RustLayout( RustLayout(
trezorui2.confirm_action( trezorui2.confirm_action(
title=TR.words__warning.upper(), title=TR.words__warning,
action=TR.backup__want_to_skip, action=TR.backup__want_to_skip,
description=TR.backup__can_back_up_anytime, description=TR.backup__can_back_up_anytime,
verb=TR.buttons__back_up, verb=TR.buttons__back_up,
@ -511,11 +504,11 @@ def show_pubkey(
mismatch_title: str | None = None, mismatch_title: str | None = None,
br_type: str = "show_pubkey", br_type: str = "show_pubkey",
) -> Awaitable[None]: ) -> Awaitable[None]:
title = title or TR.address__public_key # def_arg title = title or TR.address__title_public_key # def_arg
mismatch_title = mismatch_title or TR.addr_mismatch__key_mismatch # def_arg mismatch_title = mismatch_title or TR.addr_mismatch__key_mismatch # def_arg
return show_address( return show_address(
address=pubkey, address=pubkey,
title=title.upper(), title=title,
account=account, account=account,
path=path, path=path,
br_type=br_type, br_type=br_type,
@ -538,7 +531,7 @@ async def show_error_and_raise(
trezorui2.show_error( trezorui2.show_error(
title=subheader or "", title=subheader or "",
description=content, description=content,
button=button.upper(), button=button,
allow_cancel=False, allow_cancel=False,
) )
), ),
@ -562,7 +555,7 @@ def show_warning(
trezorui2.show_warning( trezorui2.show_warning(
title=content, title=content,
description=subheader or "", description=subheader or "",
button=button.upper(), button=button,
) )
), ),
br_type, br_type,
@ -584,7 +577,7 @@ def show_success(
trezorui2.show_success( trezorui2.show_success(
title=content, title=content,
description=subheader or "", description=subheader or "",
button=button.upper(), button=button,
allow_cancel=False, allow_cancel=False,
) )
), ),
@ -612,16 +605,16 @@ async def confirm_output(
recipient_title = title recipient_title = title
elif output_index is not None: elif output_index is not None:
amount_title = f"{TR.words__amount} #{output_index + 1}" amount_title = f"{TR.words__amount} #{output_index + 1}"
recipient_title = f"{TR.words__recipient} #{output_index + 1}" recipient_title = f"{TR.words__title_recipient} #{output_index + 1}"
else: else:
amount_title = TR.send__confirm_sending amount_title = TR.send__title_sending_amount
recipient_title = TR.send__title_sending_to recipient_title = TR.send__title_sending_to
while True: while True:
result = await interact( result = await interact(
RustLayout( RustLayout(
trezorui2.confirm_value( trezorui2.confirm_value(
title=recipient_title.upper(), title=recipient_title,
subtitle=address_label, subtitle=address_label,
description=None, description=None,
value=address, value=address,
@ -640,7 +633,7 @@ async def confirm_output(
result = await interact( result = await interact(
RustLayout( RustLayout(
trezorui2.confirm_value( trezorui2.confirm_value(
title=amount_title.upper(), title=amount_title,
subtitle=None, subtitle=None,
description=None, description=None,
value=amount, value=amount,
@ -709,10 +702,10 @@ async def should_show_more(
result = await interact( result = await interact(
RustLayout( RustLayout(
trezorui2.confirm_with_info( trezorui2.confirm_with_info(
title=title.upper(), title=title,
items=para, items=para,
button=confirm.upper(), button=confirm,
info_button=button_text.upper(), info_button=button_text,
) )
), ),
br_type, br_type,
@ -780,7 +773,7 @@ def confirm_blob(
chunkify: bool = False, chunkify: bool = False,
) -> Awaitable[None]: ) -> Awaitable[None]:
verb = verb or TR.buttons__confirm # def_arg verb = verb or TR.buttons__confirm # def_arg
title = title.upper() title = title
layout = RustLayout( layout = RustLayout(
trezorui2.confirm_blob( trezorui2.confirm_blob(
title=title, title=title,
@ -881,7 +874,7 @@ def confirm_value(
raise ValueError("Either verb or hold=True must be set") raise ValueError("Either verb or hold=True must be set")
if verb: if verb:
verb = verb.upper() verb = verb
info_items = info_items or [] info_items = info_items or []
info_layout = RustLayout( info_layout = RustLayout(
@ -896,7 +889,7 @@ def confirm_value(
with_info( with_info(
RustLayout( RustLayout(
trezorui2.confirm_value( trezorui2.confirm_value(
title=title.upper(), title=title,
subtitle=subtitle, subtitle=subtitle,
description=description, description=description,
value=value, value=value,
@ -927,7 +920,7 @@ def confirm_properties(
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_properties( trezorui2.confirm_properties(
title=title.upper(), title=title,
items=items, items=items,
hold=hold, hold=hold,
) )
@ -984,7 +977,7 @@ def confirm_summary(
total_layout = RustLayout( total_layout = RustLayout(
trezorui2.confirm_total( trezorui2.confirm_total(
title=title.upper(), title=title,
items=items, items=items,
info_button=bool(info_items), info_button=bool(info_items),
) )
@ -992,7 +985,7 @@ def confirm_summary(
info_items = info_items or [] info_items = info_items or []
info_layout = RustLayout( info_layout = RustLayout(
trezorui2.show_info_with_cancel( trezorui2.show_info_with_cancel(
title=info_title.upper() if info_title else TR.words__title_information, title=info_title if info_title else TR.words__title_information,
items=info_items, items=info_items,
) )
) )
@ -1034,7 +1027,7 @@ if not utils.BITCOIN_ONLY:
# Allowing going back and forth between recipient and summary/details # Allowing going back and forth between recipient and summary/details
await confirm_blob( await confirm_blob(
br_type, br_type,
TR.words__recipient.upper(), TR.words__title_recipient,
recipient, recipient,
verb=TR.buttons__continue, verb=TR.buttons__continue,
chunkify=chunkify, chunkify=chunkify,
@ -1077,7 +1070,7 @@ if not utils.BITCOIN_ONLY:
) )
# confirmation # confirmation
if verb == TR.ethereum__staking_claim: if verb == TR.ethereum__staking_title_claim:
items = ((TR.send__maximum_fee, maximum_fee),) items = ((TR.send__maximum_fee, maximum_fee),)
else: else:
items = ( items = (
@ -1144,11 +1137,11 @@ def confirm_metadata(
verb = verb or TR.buttons__continue # def_arg verb = verb or TR.buttons__continue # def_arg
return confirm_action( return confirm_action(
br_type, br_type,
title=title.upper(), title=title,
action="", action="",
description=content, description=content,
description_param=param, description_param=param,
verb=verb.upper(), verb=verb,
hold=hold, hold=hold,
br_code=br_code, br_code=br_code,
) )
@ -1157,7 +1150,7 @@ def confirm_metadata(
def confirm_replacement(title: str, txid: str) -> Awaitable[None]: def confirm_replacement(title: str, txid: str) -> Awaitable[None]:
return confirm_blob( return confirm_blob(
"confirm_replacement", "confirm_replacement",
title.upper(), title,
txid, txid,
TR.send__transaction_id, TR.send__transaction_id,
TR.buttons__continue, TR.buttons__continue,
@ -1244,7 +1237,7 @@ def confirm_modify_fee(
) -> Awaitable[None]: ) -> Awaitable[None]:
fee_layout = RustLayout( fee_layout = RustLayout(
trezorui2.confirm_modify_fee( trezorui2.confirm_modify_fee(
title=title.upper(), title=title,
sign=sign, sign=sign,
user_fee_change=user_fee_change, user_fee_change=user_fee_change,
total_fee_new=total_fee_new, total_fee_new=total_fee_new,
@ -1302,10 +1295,10 @@ async def confirm_signverify(
chunkify: bool = False, chunkify: bool = False,
) -> None: ) -> None:
if verify: if verify:
address_title = TR.sign_message__verify_address address_title = TR.sign_message__title_verify_address
br_type = "verify_message" br_type = "verify_message"
else: else:
address_title = TR.sign_message__confirm_address address_title = TR.sign_message__title_confirm_address
br_type = "sign_message" br_type = "sign_message"
address_layout = RustLayout( address_layout = RustLayout(
@ -1341,7 +1334,7 @@ async def confirm_signverify(
message_layout = RustLayout( message_layout = RustLayout(
trezorui2.confirm_blob( trezorui2.confirm_blob(
title=TR.sign_message__confirm_message, title=TR.sign_message__title_confirm_message,
description=None, description=None,
data=message, data=message,
extra=None, extra=None,
@ -1499,7 +1492,7 @@ def confirm_set_new_pin(
interact( interact(
RustLayout( RustLayout(
trezorui2.confirm_emphasized( trezorui2.confirm_emphasized(
title=title.upper(), title=title,
items=( items=(
(True, description + "\n\n"), (True, description + "\n\n"),
information, information,

@ -56,7 +56,7 @@ async def confirm_fido(
"""Webauthn confirmation for one or more credentials.""" """Webauthn confirmation for one or more credentials."""
confirm = _RustFidoLayout( confirm = _RustFidoLayout(
trezorui2.confirm_fido( trezorui2.confirm_fido(
title=header.upper(), title=header,
app_name=app_name, app_name=app_name,
icon_name=icon_name, icon_name=icon_name,
accounts=accounts, accounts=accounts,

@ -132,7 +132,7 @@ async def continue_recovery(
trezorui2.confirm_recovery( trezorui2.confirm_recovery(
title=text, title=text,
description=description, description=description,
button=button_label.upper(), button=button_label,
info_button=info_func is not None, info_button=info_func is not None,
dry_run=dry_run, dry_run=dry_run,
) )
@ -161,7 +161,7 @@ async def show_recovery_warning(
trezorui2.show_warning( trezorui2.show_warning(
title=content, title=content,
description=subheader or "", description=subheader or "",
button=button.upper(), button=button,
allow_cancel=False, allow_cancel=False,
) )
), ),

@ -158,7 +158,7 @@ async def _prompt_number(
) -> int: ) -> int:
num_input = RustLayout( num_input = RustLayout(
trezorui2.request_number( trezorui2.request_number(
title=title.upper(), title=title,
description=description, description=description,
count=count, count=count,
min_count=min_count, min_count=min_count,
@ -359,7 +359,7 @@ async def show_reset_warning(
trezorui2.show_warning( trezorui2.show_warning(
title=subheader or "", title=subheader or "",
description=content, description=content,
button=button.upper(), button=button,
allow_cancel=False, allow_cancel=False,
) )
), ),

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# script used to generate /embed/extmod/modtrezorui/font_*_*.c # script used to generate /embed/lib/fonts/font_*_*.c
from __future__ import annotations from __future__ import annotations

@ -5,7 +5,7 @@
"addr_mismatch__support_url": "text,1", "addr_mismatch__support_url": "text,1",
"addr_mismatch__wrong_derivation_path": "text,2", "addr_mismatch__wrong_derivation_path": "text,2",
"addr_mismatch__xpub_mismatch": "text,1", "addr_mismatch__xpub_mismatch": "text,1",
"address__public_key": "text,1", "address__title_public_key": "text,1",
"address__title_cosigner": "title,1", "address__title_cosigner": "title,1",
"address__title_receive_address": "title,1", "address__title_receive_address": "title,1",
"address__title_yours": "title,1", "address__title_yours": "title,1",
@ -487,7 +487,7 @@
"progress__loading_transaction": "text,1", "progress__loading_transaction": "text,1",
"progress__locking_device": "text,1", "progress__locking_device": "text,1",
"progress__one_second_left": "text,1", "progress__one_second_left": "text,1",
"progress__please_wait": "text,1", "progress__title_please_wait": "text,1",
"progress__processing": "text,1", "progress__processing": "text,1",
"progress__refreshing": "text,1", "progress__refreshing": "text,1",
"progress__signing_transaction": "text,1", "progress__signing_transaction": "text,1",
@ -531,7 +531,7 @@
"recovery__wanna_cancel_dry_run": "text,3", "recovery__wanna_cancel_dry_run": "text,3",
"recovery__wanna_cancel_recovery": "text,3", "recovery__wanna_cancel_recovery": "text,3",
"recovery__word_count_template": "text,1", "recovery__word_count_template": "text,1",
"recovery__word_x_of_y_template": "text,1", "recovery__word_x_of_y_title_template": "text,1",
"recovery__x_more_items_starting_template_plural": "text,2", "recovery__x_more_items_starting_template_plural": "text,2",
"recovery__x_more_shares_needed_template_plural": "text,2", "recovery__x_more_shares_needed_template_plural": "text,2",
"recovery__x_of_y_entered_template": "text,2", "recovery__x_of_y_entered_template": "text,2",
@ -572,7 +572,7 @@
"reset__recovery_share_title_template": "title,1", "reset__recovery_share_title_template": "title,1",
"reset__required_number_of_groups": "text,3", "reset__required_number_of_groups": "text,3",
"reset__select_correct_word": "text,3", "reset__select_correct_word": "text,3",
"reset__select_word_template": "text,1", "reset__select_word_title_template": "text,1",
"reset__select_word_x_of_y_template": "text,1", "reset__select_word_x_of_y_template": "text,1",
"reset__set_it_to_count_template": "text,2", "reset__set_it_to_count_template": "text,2",
"reset__share_checked_successfully_template": "text,2", "reset__share_checked_successfully_template": "text,2",
@ -661,10 +661,10 @@
"share_words__words_in_order": "text,2", "share_words__words_in_order": "text,2",
"share_words__wrote_down_all": "text,2", "share_words__wrote_down_all": "text,2",
"sign_message__bytes_template": "text,1", "sign_message__bytes_template": "text,1",
"sign_message__confirm_address": "title,1", "sign_message__title_confirm_address": "title,1",
"sign_message__confirm_message": "title,1", "sign_message__title_confirm_message": "title,1",
"sign_message__message_size": "text,1", "sign_message__message_size": "text,1",
"sign_message__verify_address": "text,1", "sign_message__title_verify_address": "text,1",
"solana__account_index": "text,1", "solana__account_index": "text,1",
"solana__associated_token_account": "text,2", "solana__associated_token_account": "text,2",
"solana__confirm_multisig": "text,1", "solana__confirm_multisig": "text,1",

@ -33,7 +33,7 @@
"addr_mismatch__support_url": "trezor.io/support", "addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__wrong_derivation_path": "Chybná derivační cesta pro vybraný účet.", "addr_mismatch__wrong_derivation_path": "Chybná derivační cesta pro vybraný účet.",
"addr_mismatch__xpub_mismatch": "Neshoduje se XPUB?", "addr_mismatch__xpub_mismatch": "Neshoduje se XPUB?",
"address__public_key": "Veřejný klíč", "address__title_public_key": "Veřejný klíč",
"address__title_cosigner": "DALŠÍ PODEPISUJÍCÍ", "address__title_cosigner": "DALŠÍ PODEPISUJÍCÍ",
"address__title_receive_address": "PŘIJÍMACÍ ADRESA", "address__title_receive_address": "PŘIJÍMACÍ ADRESA",
"address__title_yours": "VAŠE", "address__title_yours": "VAŠE",
@ -322,13 +322,13 @@
"ethereum__units_template": "Jednotky: {0}", "ethereum__units_template": "Jednotky: {0}",
"ethereum__unknown_token": "Neznámý token", "ethereum__unknown_token": "Neznámý token",
"ethereum__valid_signature": "Podpis je platný.", "ethereum__valid_signature": "Podpis je platný.",
"ethereum__staking_stake": "STAKE", "ethereum__staking_title_stake": "STAKE",
"ethereum__staking_stake_address": "STAKE ADRESA", "ethereum__staking_title_stake_address": "STAKE ADRESA",
"ethereum__staking_stake_intro": "Stakovat ETH na Everstake?", "ethereum__staking_stake_intro": "Stakovat ETH na Everstake?",
"ethereum__staking_unstake": "ZRUŠIT STAKOVÁNÍ", "ethereum__staking_title_unstake": "ZRUŠIT STAKOVÁNÍ",
"ethereum__staking_unstake_intro": "Zrušit stakování ETH z Everstake?", "ethereum__staking_unstake_intro": "Zrušit stakování ETH z Everstake?",
"ethereum__staking_claim": "NÁROKOVAT", "ethereum__staking_title_claim": "NÁROKOVAT",
"ethereum__staking_claim_address": "NÁROKOVAT ADRESU", "ethereum__staking_title_claim_address": "NÁROKOVAT ADRESU",
"ethereum__staking_claim_intro": "Nárokovat ETH z Everstake?", "ethereum__staking_claim_intro": "Nárokovat ETH z Everstake?",
"experimental_mode__enable": "Povolit experimentální funkce?", "experimental_mode__enable": "Povolit experimentální funkce?",
"experimental_mode__only_for_dev": "Pouze pro vývoj a beta testování!", "experimental_mode__only_for_dev": "Pouze pro vývoj a beta testování!",
@ -522,7 +522,7 @@
"progress__loading_transaction": "Načítání transakce...", "progress__loading_transaction": "Načítání transakce...",
"progress__locking_device": "Zamykání zařízení...", "progress__locking_device": "Zamykání zařízení...",
"progress__one_second_left": "Zbývá 1 s", "progress__one_second_left": "Zbývá 1 s",
"progress__please_wait": "POČKEJTE", "progress__title_please_wait": "POČKEJTE",
"progress__refreshing": "Obnovování...", "progress__refreshing": "Obnovování...",
"progress__signing_transaction": "Podpis transakce...", "progress__signing_transaction": "Podpis transakce...",
"progress__syncing": "Synchronizace...", "progress__syncing": "Synchronizace...",
@ -565,7 +565,7 @@
"recovery__wanna_cancel_dry_run": "Opravdu chcete zrušit kontrolu zálohy?", "recovery__wanna_cancel_dry_run": "Opravdu chcete zrušit kontrolu zálohy?",
"recovery__wanna_cancel_recovery": "Opravdu chcete proces obnovy zrušit?", "recovery__wanna_cancel_recovery": "Opravdu chcete proces obnovy zrušit?",
"recovery__word_count_template": "(slova: {0})", "recovery__word_count_template": "(slova: {0})",
"recovery__word_x_of_y_template": "SLOVO {0} Z {1}", "recovery__word_x_of_y_title_template": "SLOVO {0} Z {1}",
"recovery__x_more_items_starting_template_plural": "Zahajuje se dalších {count} {plural}", "recovery__x_more_items_starting_template_plural": "Zahajuje se dalších {count} {plural}",
"recovery__x_more_shares_needed_template_plural": "Je potřeba dalších {count} {plural}.", "recovery__x_more_shares_needed_template_plural": "Je potřeba dalších {count} {plural}.",
"recovery__x_of_y_entered_template": "Zadáno {0} částí z {1}.", "recovery__x_of_y_entered_template": "Zadáno {0} částí z {1}.",
@ -606,7 +606,7 @@
"reset__recovery_share_title_template": "ČÁST ZÁLOHY Č. {0}", "reset__recovery_share_title_template": "ČÁST ZÁLOHY Č. {0}",
"reset__required_number_of_groups": "Požadovaný počet skupin pro obnovení.", "reset__required_number_of_groups": "Požadovaný počet skupin pro obnovení.",
"reset__select_correct_word": "Pro každou pozici vyberte správné slovo.", "reset__select_correct_word": "Pro každou pozici vyberte správné slovo.",
"reset__select_word_template": "VYBRAT SLOVO {0}", "reset__select_word_title_template": "VYBRAT SLOVO {0}",
"reset__select_word_x_of_y_template": "Vyb. slovo {0} z {1}:", "reset__select_word_x_of_y_template": "Vyb. slovo {0} z {1}:",
"reset__set_it_to_count_template": "Nastavte {0} a budete potřebovat ", "reset__set_it_to_count_template": "Nastavte {0} a budete potřebovat ",
"reset__share_checked_successfully_template": "Proběhla kontrola {0}. části zálohy.", "reset__share_checked_successfully_template": "Proběhla kontrola {0}. části zálohy.",
@ -695,10 +695,10 @@
"share_words__words_in_order": " slova v pořadí.", "share_words__words_in_order": " slova v pořadí.",
"share_words__wrote_down_all": "Zapsal/a jsem si všechna ", "share_words__wrote_down_all": "Zapsal/a jsem si všechna ",
"sign_message__bytes_template": "{0} bajtů", "sign_message__bytes_template": "{0} bajtů",
"sign_message__confirm_address": "PODEPISOVÁNÍ ADRESY", "sign_message__title_confirm_address": "PODEPISOVÁNÍ ADRESY",
"sign_message__confirm_message": "POTVRDIT ZPRÁVU", "sign_message__title_confirm_message": "POTVRDIT ZPRÁVU",
"sign_message__message_size": "Velikost zprávy:", "sign_message__message_size": "Velikost zprávy:",
"sign_message__verify_address": "OVĚŘIT ADRESU", "sign_message__title_verify_address": "OVĚŘIT ADRESU",
"solana__account_index": "Index účtu", "solana__account_index": "Index účtu",
"solana__associated_token_account": "Přidružený tokenový účet", "solana__associated_token_account": "Přidružený tokenový účet",
"solana__confirm_multisig": "Potvrďte multisig", "solana__confirm_multisig": "Potvrďte multisig",
@ -780,10 +780,10 @@
"stellar__value_sha256": "Hodnota (SHA-256):", "stellar__value_sha256": "Hodnota (SHA-256):",
"stellar__wanna_clean_value_key_template": "Chcete vymazat klíč hodnoty {0}?", "stellar__wanna_clean_value_key_template": "Chcete vymazat klíč hodnoty {0}?",
"stellar__your_account": " váš účet", "stellar__your_account": " váš účet",
"storage_msg__verifying_pin": "OVĚŘOVÁNÍ PINU", "storage_msg__title_verifying_pin": "OVĚŘOVÁNÍ PINU",
"storage_msg__processing": "ZPRACOVÁVÁNÍ", "storage_msg__title_processing": "ZPRACOVÁVÁNÍ",
"storage_msg__starting": "SPOUŠTĚNÍ", "storage_msg__title_starting": "SPOUŠTĚNÍ",
"storage_msg__wrong_pin": "ŠPATNÝ PIN", "storage_msg__title_wrong_pin": "ŠPATNÝ PIN",
"tezos__baker_address": "Adresa bakera:", "tezos__baker_address": "Adresa bakera:",
"tezos__balance": "Zůstatek:", "tezos__balance": "Zůstatek:",
"tezos__ballot": "Hlasování:", "tezos__ballot": "Hlasování:",
@ -856,7 +856,7 @@
"words__please_check_again": "Zkontrolujte to znovu", "words__please_check_again": "Zkontrolujte to znovu",
"words__please_try_again": "Zkuste to znovu", "words__please_try_again": "Zkuste to znovu",
"words__really_wanna": "Opravdu chcete", "words__really_wanna": "Opravdu chcete",
"words__recipient": "Příjemce", "words__title_recipient": "Příjemce",
"words__sign": "Podepsat", "words__sign": "Podepsat",
"words__signer": "Podepisující osoba", "words__signer": "Podepisující osoba",
"words__title_check": "ZKONTROLOVAT", "words__title_check": "ZKONTROLOVAT",

@ -33,7 +33,7 @@
"addr_mismatch__support_url": "trezor.io/support", "addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__wrong_derivation_path": "Ableitungspfad für gewähltes Konto falsch.", "addr_mismatch__wrong_derivation_path": "Ableitungspfad für gewähltes Konto falsch.",
"addr_mismatch__xpub_mismatch": "XPUB passt nicht?", "addr_mismatch__xpub_mismatch": "XPUB passt nicht?",
"address__public_key": "Public Key", "address__title_public_key": "Public Key",
"address__title_cosigner": "MITUNTERZEICH.", "address__title_cosigner": "MITUNTERZEICH.",
"address__title_receive_address": "EMPFÄNG-ADRESSE", "address__title_receive_address": "EMPFÄNG-ADRESSE",
"address__title_yours": "DEINER", "address__title_yours": "DEINER",
@ -322,13 +322,13 @@
"ethereum__units_template": "{0} Einheiten", "ethereum__units_template": "{0} Einheiten",
"ethereum__unknown_token": "Ungültiger Token", "ethereum__unknown_token": "Ungültiger Token",
"ethereum__valid_signature": "Die Signatur ist gültig.", "ethereum__valid_signature": "Die Signatur ist gültig.",
"ethereum__staking_stake": "STAKE", "ethereum__staking_title_stake": "STAKE",
"ethereum__staking_stake_address": "STAKING ADRESSE", "ethereum__staking_title_stake_address": "STAKING ADRESSE",
"ethereum__staking_stake_intro": "ETH auf Everstake staken?", "ethereum__staking_stake_intro": "ETH auf Everstake staken?",
"ethereum__staking_unstake": "ENTSTAKEN", "ethereum__staking_title_unstake": "ENTSTAKEN",
"ethereum__staking_unstake_intro": "ETH von Everstake entstaken?", "ethereum__staking_unstake_intro": "ETH von Everstake entstaken?",
"ethereum__staking_claim": "EINLÖSEN", "ethereum__staking_title_claim": "EINLÖSEN",
"ethereum__staking_claim_address": "ADRESSE ZUM EINLÖSEN", "ethereum__staking_title_claim_address": "ADRESSE ZUM EINLÖSEN",
"ethereum__staking_claim_intro": "ETH von Everstake einlösen?", "ethereum__staking_claim_intro": "ETH von Everstake einlösen?",
"experimental_mode__enable": "Experimentelle Funktionen aktivieren?", "experimental_mode__enable": "Experimentelle Funktionen aktivieren?",
"experimental_mode__only_for_dev": "Nur für Entwicklung und Beta-Tests.", "experimental_mode__only_for_dev": "Nur für Entwicklung und Beta-Tests.",
@ -522,7 +522,7 @@
"progress__loading_transaction": "Transakt. lädt...", "progress__loading_transaction": "Transakt. lädt...",
"progress__locking_device": "Das Gerät sperren...", "progress__locking_device": "Das Gerät sperren...",
"progress__one_second_left": "1 Sekunde verbleibend", "progress__one_second_left": "1 Sekunde verbleibend",
"progress__please_wait": "BITTE WARTEN", "progress__title_please_wait": "BITTE WARTEN",
"progress__refreshing": "Wird aktualisiert...", "progress__refreshing": "Wird aktualisiert...",
"progress__signing_transaction": "Transakt. wird signiert", "progress__signing_transaction": "Transakt. wird signiert",
"progress__syncing": "Wird synchronisiert...", "progress__syncing": "Wird synchronisiert...",
@ -565,7 +565,7 @@
"recovery__wanna_cancel_dry_run": "Möchtest du die Backup-Überprüfung wirklich abbrechen?", "recovery__wanna_cancel_dry_run": "Möchtest du die Backup-Überprüfung wirklich abbrechen?",
"recovery__wanna_cancel_recovery": "Möchtest du die Wiederherstellung wirklich abbrechen?", "recovery__wanna_cancel_recovery": "Möchtest du die Wiederherstellung wirklich abbrechen?",
"recovery__word_count_template": "({0} Wörter)", "recovery__word_count_template": "({0} Wörter)",
"recovery__word_x_of_y_template": "WORT {0} VON {1}", "recovery__word_x_of_y_title_template": "WORT {0} VON {1}",
"recovery__x_more_items_starting_template_plural": "{count} mehr {plural} gestartet", "recovery__x_more_items_starting_template_plural": "{count} mehr {plural} gestartet",
"recovery__x_more_shares_needed_template_plural": "{count} mehr {plural} erforderlich.", "recovery__x_more_shares_needed_template_plural": "{count} mehr {plural} erforderlich.",
"recovery__x_of_y_entered_template": "{0} von {1} Shares erfolgreich eingegeben.", "recovery__x_of_y_entered_template": "{0} von {1} Shares erfolgreich eingegeben.",
@ -606,7 +606,7 @@
"reset__recovery_share_title_template": "RECOVERY SHARE #{0}", "reset__recovery_share_title_template": "RECOVERY SHARE #{0}",
"reset__required_number_of_groups": "Zur Wiederherstellung erforderliche Anzahl von Gruppen.", "reset__required_number_of_groups": "Zur Wiederherstellung erforderliche Anzahl von Gruppen.",
"reset__select_correct_word": "Wähle für jede Position das richtige Wort.", "reset__select_correct_word": "Wähle für jede Position das richtige Wort.",
"reset__select_word_template": "{0} WORT AUSWÄHLEN", "reset__select_word_title_template": "{0} WORT AUSWÄHLEN",
"reset__select_word_x_of_y_template": "Wort {0} von {1}:", "reset__select_word_x_of_y_template": "Wort {0} von {1}:",
"reset__set_it_to_count_template": "Bei {0} benötigst du ", "reset__set_it_to_count_template": "Bei {0} benötigst du ",
"reset__share_checked_successfully_template": "Recovery Share #{0} erfolgreich geprüft.", "reset__share_checked_successfully_template": "Recovery Share #{0} erfolgreich geprüft.",
@ -695,10 +695,10 @@
"share_words__words_in_order": " Wörter der Reihe nach notiert.", "share_words__words_in_order": " Wörter der Reihe nach notiert.",
"share_words__wrote_down_all": "Ich habe alle ", "share_words__wrote_down_all": "Ich habe alle ",
"sign_message__bytes_template": "{0} Bytes", "sign_message__bytes_template": "{0} Bytes",
"sign_message__confirm_address": "SIGNIERADRESSE", "sign_message__title_confirm_address": "SIGNIERADRESSE",
"sign_message__confirm_message": "NACHR. BESTÄTIGEN", "sign_message__title_confirm_message": "NACHR. BESTÄTIGEN",
"sign_message__message_size": "Größe der Nachricht:", "sign_message__message_size": "Größe der Nachricht:",
"sign_message__verify_address": "ADRESSE VERIFIZIEREN", "sign_message__title_verify_address": "ADRESSE VERIFIZIEREN",
"solana__account_index": "Konto-Index", "solana__account_index": "Konto-Index",
"solana__associated_token_account": "Zugehöriges Token-Konto", "solana__associated_token_account": "Zugehöriges Token-Konto",
"solana__confirm_multisig": "Multisig bestätigen", "solana__confirm_multisig": "Multisig bestätigen",
@ -780,10 +780,10 @@
"stellar__value_sha256": "Wert (SHA-256):", "stellar__value_sha256": "Wert (SHA-256):",
"stellar__wanna_clean_value_key_template": "Möchtest du den Wert-Key {0} löschen?", "stellar__wanna_clean_value_key_template": "Möchtest du den Wert-Key {0} löschen?",
"stellar__your_account": " dein Konto", "stellar__your_account": " dein Konto",
"storage_msg__verifying_pin": "PIN ÜBERPRÜFEN", "storage_msg__title_verifying_pin": "PIN ÜBERPRÜFEN",
"storage_msg__processing": "VERARBEITUNG", "storage_msg__title_processing": "VERARBEITUNG",
"storage_msg__starting": "STARTVORGANG", "storage_msg__title_starting": "STARTVORGANG",
"storage_msg__wrong_pin": "FALSCHER PIN", "storage_msg__title_wrong_pin": "FALSCHER PIN",
"tezos__baker_address": "Baker-Adresse:", "tezos__baker_address": "Baker-Adresse:",
"tezos__balance": "Guthaben:", "tezos__balance": "Guthaben:",
"tezos__ballot": "Abstimmung:", "tezos__ballot": "Abstimmung:",
@ -856,7 +856,7 @@
"words__please_check_again": "Noch einmal prüfen", "words__please_check_again": "Noch einmal prüfen",
"words__please_try_again": "Noch einmal versuchen", "words__please_try_again": "Noch einmal versuchen",
"words__really_wanna": "Möchtest du wirklich", "words__really_wanna": "Möchtest du wirklich",
"words__recipient": "Empfänger", "words__title_recipient": "Empfänger",
"words__sign": "Signieren", "words__sign": "Signieren",
"words__signer": "Unterzeichner", "words__signer": "Unterzeichner",
"words__title_check": "PRÜFEN", "words__title_check": "PRÜFEN",

@ -10,25 +10,25 @@
"addr_mismatch__support_url": "trezor.io/support", "addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__wrong_derivation_path": "Wrong derivation path for selected account.", "addr_mismatch__wrong_derivation_path": "Wrong derivation path for selected account.",
"addr_mismatch__xpub_mismatch": "XPUB mismatch?", "addr_mismatch__xpub_mismatch": "XPUB mismatch?",
"address__public_key": "Public key", "address__title_public_key": "Public key",
"address__title_cosigner": "COSIGNER", "address__title_cosigner": "Cosigner",
"address__title_receive_address": "RECEIVE ADDRESS", "address__title_receive_address": "Receive address",
"address__title_yours": "YOURS", "address__title_yours": "Yours",
"address_details__derivation_path": "Derivation path:", "address_details__derivation_path": "Derivation path:",
"address_details__title_receive_address": "RECEIVE ADDRESS", "address_details__title_receive_address": "Receive address",
"address_details__title_receiving_to": "RECEIVING TO", "address_details__title_receiving_to": "Receiving to",
"authenticate__confirm_template": "Allow connected computer to confirm your {0} is genuine?", "authenticate__confirm_template": "Allow connected computer to confirm your {0} is genuine?",
"authenticate__header": "Authenticate device", "authenticate__header": "Authenticate device",
"auto_lock__change_template": "Auto-lock your Trezor after {0} of inactivity?", "auto_lock__change_template": "Auto-lock your Trezor after {0} of inactivity?",
"auto_lock__title": "AUTO-LOCK DELAY", "auto_lock__title": "Auto-lock delay",
"backup__can_back_up_anytime": "You can back up your Trezor once, at any time.", "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": "You should back up your new wallet right now.",
"backup__it_should_be_backed_up_now": "It should be backed up now!", "backup__it_should_be_backed_up_now": "It should be backed up now!",
"backup__new_wallet_created": "New wallet created.\n", "backup__new_wallet_created": "New wallet created.\n",
"backup__new_wallet_successfully_created": "New wallet created successfully.", "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__recover_anytime": "You can use your backup to recover your wallet at any time.",
"backup__title_backup_wallet": "BACK UP WALLET", "backup__title_backup_wallet": "Back up wallet",
"backup__title_skip": "SKIP BACKUP", "backup__title_skip": "Skip backup",
"backup__want_to_skip": "Are you sure you want to skip the backup?", "backup__want_to_skip": "Are you sure you want to skip the backup?",
"binance__buy": "Buy", "binance__buy": "Buy",
"binance__confirm_cancel": "Confirm cancel", "binance__confirm_cancel": "Confirm cancel",
@ -54,59 +54,59 @@
"bitcoin__new_fee_rate": "New fee rate:", "bitcoin__new_fee_rate": "New fee rate:",
"bitcoin__simple_send_of": "Simple send of", "bitcoin__simple_send_of": "Simple send of",
"bitcoin__ticket_amount": "Ticket amount:", "bitcoin__ticket_amount": "Ticket amount:",
"bitcoin__title_confirm_details": "CONFIRM DETAILS", "bitcoin__title_confirm_details": "Confirm details",
"bitcoin__title_finalize_transaction": "FINALIZE TRANSACTION", "bitcoin__title_finalize_transaction": "Finalize transaction",
"bitcoin__title_high_mining_fee": "HIGH MINING FEE", "bitcoin__title_high_mining_fee": "High mining fee",
"bitcoin__title_meld_transaction": "MELD TRANSACTIONS", "bitcoin__title_meld_transaction": "Meld transactions",
"bitcoin__title_modify_amount": "MODIFY AMOUNT", "bitcoin__title_modify_amount": "Modify amount",
"bitcoin__title_payjoin": "PAYJOIN", "bitcoin__title_payjoin": "Payjoin",
"bitcoin__title_proof_of_ownership": "PROOF OF OWNERSHIP", "bitcoin__title_proof_of_ownership": "Proof of ownership",
"bitcoin__title_purchase_ticket": "PURCHASE TICKET", "bitcoin__title_purchase_ticket": "Purchase ticket",
"bitcoin__title_update_transaction": "UPDATE TRANSACTION", "bitcoin__title_update_transaction": "Update transaction",
"bitcoin__unknown_path": "Unknown path", "bitcoin__unknown_path": "Unknown path",
"bitcoin__unknown_transaction": "Unknown transaction", "bitcoin__unknown_transaction": "Unknown transaction",
"bitcoin__unusually_high_fee": "Unusually high fee.", "bitcoin__unusually_high_fee": "Unusually high fee.",
"bitcoin__unverified_external_inputs": "The transaction contains unverified external inputs.", "bitcoin__unverified_external_inputs": "The transaction contains unverified external inputs.",
"bitcoin__valid_signature": "The signature is valid.", "bitcoin__valid_signature": "The signature is valid.",
"bitcoin__voting_rights": "Voting rights to:", "bitcoin__voting_rights": "Voting rights to:",
"buttons__abort": "ABORT", "buttons__abort": "Abort",
"buttons__access": "ACCESS", "buttons__access": "Access",
"buttons__again": "AGAIN", "buttons__again": "Again",
"buttons__allow": "ALLOW", "buttons__allow": "Allow",
"buttons__back": "BACK", "buttons__back": "Back",
"buttons__back_up": "BACK UP", "buttons__back_up": "Back up",
"buttons__cancel": "CANCEL", "buttons__cancel": "Cancel",
"buttons__change": "CHANGE", "buttons__change": "Change",
"buttons__check": "CHECK", "buttons__check": "Check",
"buttons__check_again": "CHECK AGAIN", "buttons__check_again": "Check again",
"buttons__close": "CLOSE", "buttons__close": "Close",
"buttons__confirm": "CONFIRM", "buttons__confirm": "Confirm",
"buttons__continue": "CONTINUE", "buttons__continue": "Continue",
"buttons__details": "DETAILS", "buttons__details": "Details",
"buttons__enable": "ENABLE", "buttons__enable": "Enable",
"buttons__enter": "ENTER", "buttons__enter": "Enter",
"buttons__enter_share": "ENTER SHARE", "buttons__enter_share": "Enter share",
"buttons__export": "EXPORT", "buttons__export": "Export",
"buttons__format": "FORMAT", "buttons__format": "Format",
"buttons__go_back": "GO BACK", "buttons__go_back": "Go back",
"buttons__hold_to_confirm": "HOLD TO CONFIRM", "buttons__hold_to_confirm": "Hold to confirm",
"buttons__info": "INFO", "buttons__info": "Info",
"buttons__install": "INSTALL", "buttons__install": "Install",
"buttons__more_info": "MORE INFO", "buttons__more_info": "More info",
"buttons__ok_i_understand": "OK, I UNDERSTAND", "buttons__ok_i_understand": "Ok, i understand",
"buttons__purchase": "PURCHASE", "buttons__purchase": "Purchase",
"buttons__quit": "QUIT", "buttons__quit": "Quit",
"buttons__restart": "RESTART", "buttons__restart": "Restart",
"buttons__retry": "RETRY", "buttons__retry": "Retry",
"buttons__select": "SELECT", "buttons__select": "Select",
"buttons__set": "SET", "buttons__set": "Set",
"buttons__show_all": "SHOW ALL", "buttons__show_all": "Show all",
"buttons__show_details": "SHOW DETAILS", "buttons__show_details": "Show details",
"buttons__show_words": "SHOW WORDS", "buttons__show_words": "Show words",
"buttons__skip": "SKIP", "buttons__skip": "Skip",
"buttons__try_again": "TRY AGAIN", "buttons__try_again": "Try again",
"buttons__turn_off": "TURN OFF", "buttons__turn_off": "Turn off",
"buttons__turn_on": "TURN ON", "buttons__turn_on": "Turn on",
"cardano__addr_base": "Base", "cardano__addr_base": "Base",
"cardano__addr_enterprise": "Enterprise", "cardano__addr_enterprise": "Enterprise",
"cardano__addr_legacy": "Legacy", "cardano__addr_legacy": "Legacy",
@ -220,21 +220,21 @@
"coinjoin__do_not_disconnect": "Do not disconnect your Trezor!", "coinjoin__do_not_disconnect": "Do not disconnect your Trezor!",
"coinjoin__max_mining_fee": "Max mining fee", "coinjoin__max_mining_fee": "Max mining fee",
"coinjoin__max_rounds": "Max rounds", "coinjoin__max_rounds": "Max rounds",
"coinjoin__title": "AUTHORIZE COINJOIN", "coinjoin__title": "Authorize coinjoin",
"coinjoin__title_do_not_disconnect": "DO NOT DISCONNECT YOUR TREZOR!", "coinjoin__title_do_not_disconnect": "Do not disconnect your trezor!",
"coinjoin__title_progress": "COINJOIN IN PROGRESS", "coinjoin__title_progress": "Coinjoin in progress",
"coinjoin__waiting_for_others": "Waiting for others", "coinjoin__waiting_for_others": "Waiting for others",
"confirm_total__fee_rate": "Fee rate:", "confirm_total__fee_rate": "Fee rate:",
"confirm_total__sending_from_account": "Sending from account:", "confirm_total__sending_from_account": "Sending from account:",
"confirm_total__title_fee": "FEE INFORMATION", "confirm_total__title_fee": "Fee information",
"confirm_total__title_sending_from": "SENDING FROM", "confirm_total__title_sending_from": "Sending from",
"debug__loading_seed": "Loading seed", "debug__loading_seed": "Loading seed",
"debug__loading_seed_not_recommended": "Loading private seed is not recommended.", "debug__loading_seed_not_recommended": "Loading private seed is not recommended.",
"device_name__change_template": "Change device name to {0}?", "device_name__change_template": "Change device name to {0}?",
"device_name__title": "DEVICE NAME", "device_name__title": "Device name",
"entropy__send": "Do you really want to send entropy?", "entropy__send": "Do you really want to send entropy?",
"entropy__title": "INTERNAL ENTROPY", "entropy__title": "Internal entropy",
"entropy__title_confirm": "CONFIRM ENTROPY", "entropy__title_confirm": "Confirm entropy",
"eos__about_to_sign_template": "You are about to sign {0}.", "eos__about_to_sign_template": "You are about to sign {0}.",
"eos__action_name": "Action Name:", "eos__action_name": "Action Name:",
"eos__arbitrary_data": "Arbitrary data", "eos__arbitrary_data": "Arbitrary data",
@ -290,26 +290,26 @@
"ethereum__show_full_message": "Show full message", "ethereum__show_full_message": "Show full message",
"ethereum__show_full_struct": "Show full struct", "ethereum__show_full_struct": "Show full struct",
"ethereum__sign_eip712": "Really sign EIP-712 typed data?", "ethereum__sign_eip712": "Really sign EIP-712 typed data?",
"ethereum__title_confirm_data": "CONFIRM DATA", "ethereum__title_confirm_data": "Confirm data",
"ethereum__title_confirm_domain": "CONFIRM DOMAIN", "ethereum__title_confirm_domain": "Confirm domain",
"ethereum__title_confirm_message": "CONFIRM MESSAGE", "ethereum__title_confirm_message": "Confirm message",
"ethereum__title_confirm_struct": "CONFIRM STRUCT", "ethereum__title_confirm_struct": "Confirm struct",
"ethereum__title_confirm_typed_data": "CONFIRM TYPED DATA", "ethereum__title_confirm_typed_data": "Confirm typed data",
"ethereum__title_signing_address": "SIGNING ADDRESS", "ethereum__title_signing_address": "Signing address",
"ethereum__units_template": "{0} units", "ethereum__units_template": "{0} units",
"ethereum__unknown_token": "Unknown token", "ethereum__unknown_token": "Unknown token",
"ethereum__valid_signature": "The signature is valid.", "ethereum__valid_signature": "The signature is valid.",
"ethereum__staking_stake": "STAKE", "ethereum__staking_title_stake": "Stake",
"ethereum__staking_stake_address": "STAKE ADDRESS", "ethereum__staking_title_stake_address": "Stake address",
"ethereum__staking_stake_intro": "Stake ETH on Everstake?", "ethereum__staking_stake_intro": "Stake ETH on Everstake?",
"ethereum__staking_unstake": "UNSTAKE", "ethereum__staking_title_unstake": "Unstake",
"ethereum__staking_unstake_intro": "Unstake ETH from Everstake?", "ethereum__staking_unstake_intro": "Unstake ETH from Everstake?",
"ethereum__staking_claim": "CLAIM", "ethereum__staking_title_claim": "Claim",
"ethereum__staking_claim_address": "CLAIM ADDRESS", "ethereum__staking_title_claim_address": "Claim address",
"ethereum__staking_claim_intro": "Claim ETH from Everstake?", "ethereum__staking_claim_intro": "Claim ETH from Everstake?",
"experimental_mode__enable": "Enable experimental features?", "experimental_mode__enable": "Enable experimental features?",
"experimental_mode__only_for_dev": "Only for development and beta testing!", "experimental_mode__only_for_dev": "Only for development and beta testing!",
"experimental_mode__title": "EXPERIMENTAL MODE", "experimental_mode__title": "Experimental mode",
"fido__already_registered": "Already registered", "fido__already_registered": "Already registered",
"fido__device_already_registered": "This device is already registered with this application.", "fido__device_already_registered": "This device is already registered with this application.",
"fido__device_already_registered_with_template": "This device is already registered with {0}.", "fido__device_already_registered_with_template": "This device is already registered with {0}.",
@ -320,61 +320,61 @@
"fido__not_registered": "Not registered", "fido__not_registered": "Not registered",
"fido__not_registered_with_template": "This device is not registered with\n{0}.", "fido__not_registered_with_template": "This device is not registered with\n{0}.",
"fido__please_enable_pin_protection": "Please enable PIN protection.", "fido__please_enable_pin_protection": "Please enable PIN protection.",
"fido__title_authenticate": "FIDO2 AUTHENTICATE", "fido__title_authenticate": "Fido2 authenticate",
"fido__title_import_credential": "IMPORT CREDENTIAL", "fido__title_import_credential": "Import credential",
"fido__title_list_credentials": "LIST CREDENTIALS", "fido__title_list_credentials": "List credentials",
"fido__title_register": "FIDO2 REGISTER", "fido__title_register": "Fido2 register",
"fido__title_remove_credential": "REMOVE CREDENTIAL", "fido__title_remove_credential": "Remove credential",
"fido__title_reset": "FIDO2 RESET", "fido__title_reset": "FIDO2 reset",
"fido__title_u2f_auth": "U2F AUTHENTICATE", "fido__title_u2f_auth": "U2F authenticate",
"fido__title_u2f_register": "U2F REGISTER", "fido__title_u2f_register": "U2F register",
"fido__title_verify_user": "FIDO2 VERIFY USER", "fido__title_verify_user": "FIDO2 verify user",
"fido__unable_to_verify_user": "Unable to verify user.", "fido__unable_to_verify_user": "Unable to verify user.",
"fido__wanna_erase_credentials": "Do you really want to erase all credentials?", "fido__wanna_erase_credentials": "Do you really want to erase all credentials?",
"firmware_update__title": "UPDATE FIRMWARE", "firmware_update__title": "Update firmware",
"firmware_update__title_fingerprint": "FW FINGERPRINT", "firmware_update__title_fingerprint": "FW fingerprint",
"homescreen__click_to_connect": "Click to Connect", "homescreen__click_to_connect": "Click to Connect",
"homescreen__click_to_unlock": "Click to Unlock", "homescreen__click_to_unlock": "Click to Unlock",
"homescreen__title_backup_failed": "BACKUP FAILED", "homescreen__title_backup_failed": "Backup failed",
"homescreen__title_backup_needed": "BACKUP NEEDED", "homescreen__title_backup_needed": "Backup needed",
"homescreen__title_coinjoin_authorized": "COINJOIN AUTHORIZED", "homescreen__title_coinjoin_authorized": "Coinjoin authorized",
"homescreen__title_experimental_mode": "EXPERIMENTAL MODE", "homescreen__title_experimental_mode": "Experimental mode",
"homescreen__title_no_usb_connection": "NO USB CONNECTION", "homescreen__title_no_usb_connection": "No USB connection",
"homescreen__title_pin_not_set": "PIN NOT SET", "homescreen__title_pin_not_set": "PIN not set",
"homescreen__title_seedless": "SEEDLESS", "homescreen__title_seedless": "Seedless",
"homescreen__title_set": "CHANGE HOMESCREEN?", "homescreen__title_set": "Change homescreen?",
"inputs__back": "BACK", "inputs__back": "Back",
"inputs__cancel": "CANCEL", "inputs__cancel": "Cancel",
"inputs__delete": "DELETE", "inputs__delete": "Delete",
"inputs__enter": "ENTER", "inputs__enter": "Enter",
"inputs__return": "RETURN", "inputs__return": "Return",
"inputs__previous": "PREVIOUS", "inputs__previous": "Previous",
"inputs__show": "SHOW", "inputs__show": "Show",
"inputs__space": "SPACE", "inputs__space": "Space",
"joint__title": "JOINT TRANSACTION", "joint__title": "Joint transaction",
"joint__to_the_total_amount": "To the total amount:", "joint__to_the_total_amount": "To the total amount:",
"joint__you_are_contributing": "You are contributing:", "joint__you_are_contributing": "You are contributing:",
"language__change_to_template": "Change language to {0}?", "language__change_to_template": "Change language to {0}?",
"language__changed": "Language changed successfully", "language__changed": "Language changed successfully",
"language__progress": "Changing language", "language__progress": "Changing language",
"language__title": "LANGUAGE SETTINGS", "language__title": "Language settings",
"lockscreen__tap_to_connect": "Tap to connect", "lockscreen__tap_to_connect": "Tap to connect",
"lockscreen__tap_to_unlock": "Tap to unlock", "lockscreen__tap_to_unlock": "Tap to unlock",
"lockscreen__title_locked": "LOCKED", "lockscreen__title_locked": "Locked",
"lockscreen__title_not_connected": "NOT CONNECTED", "lockscreen__title_not_connected": "Not connected",
"misc__decrypt_value": "Decrypt value", "misc__decrypt_value": "Decrypt value",
"misc__encrypt_value": "Encrypt value", "misc__encrypt_value": "Encrypt value",
"misc__title_suite_labeling": "SUITE LABELING", "misc__title_suite_labeling": "Suite labeling",
"modify_amount__decrease_amount": "Decrease amount by:", "modify_amount__decrease_amount": "Decrease amount by:",
"modify_amount__increase_amount": "Increase amount by:", "modify_amount__increase_amount": "Increase amount by:",
"modify_amount__new_amount": "New amount:", "modify_amount__new_amount": "New amount:",
"modify_amount__title": "MODIFY AMOUNT", "modify_amount__title": "Modify amount",
"modify_fee__decrease_fee": "Decrease fee by:", "modify_fee__decrease_fee": "Decrease fee by:",
"modify_fee__fee_rate": "Fee rate:", "modify_fee__fee_rate": "Fee rate:",
"modify_fee__increase_fee": "Increase fee by:", "modify_fee__increase_fee": "Increase fee by:",
"modify_fee__new_transaction_fee": "New transaction fee:", "modify_fee__new_transaction_fee": "New transaction fee:",
"modify_fee__no_change": "Fee did not change.\n", "modify_fee__no_change": "Fee did not change.\n",
"modify_fee__title": "MODIFY FEE", "modify_fee__title": "Modify fee",
"modify_fee__transaction_fee": "Transaction fee:", "modify_fee__transaction_fee": "Transaction fee:",
"monero__confirm_export": "Confirm export", "monero__confirm_export": "Confirm export",
"monero__confirm_ki_sync": "Confirm ki sync", "monero__confirm_ki_sync": "Confirm ki sync",
@ -453,11 +453,11 @@
"passphrase__next_screen_will_show_passphrase": "Next screen will show the passphrase.", "passphrase__next_screen_will_show_passphrase": "Next screen will show the passphrase.",
"passphrase__please_enter": "Please enter your passphrase.", "passphrase__please_enter": "Please enter your passphrase.",
"passphrase__revoke_on_device": "Do you want to revoke the passphrase on device setting?", "passphrase__revoke_on_device": "Do you want to revoke the passphrase on device setting?",
"passphrase__title_confirm": "CONFIRM PASSPHRASE", "passphrase__title_confirm": "Confirm passphrase",
"passphrase__title_enter": "ENTER PASSPHRASE", "passphrase__title_enter": "Enter passphrase",
"passphrase__title_hide": "HIDE PASSPHRASE", "passphrase__title_hide": "Hide passphrase",
"passphrase__title_settings": "PASSPHRASE SETTINGS", "passphrase__title_settings": "Passphrase settings",
"passphrase__title_source": "PASSPHRASE SOURCE", "passphrase__title_source": "Passphrase source",
"passphrase__turn_off": "Turn off passphrase protection?", "passphrase__turn_off": "Turn off passphrase protection?",
"passphrase__turn_on": "Turn on passphrase protection?", "passphrase__turn_on": "Turn on passphrase protection?",
"pin__change": "Change PIN?", "pin__change": "Change PIN?",
@ -478,9 +478,9 @@
"pin__reenter_new": "Re-enter new PIN", "pin__reenter_new": "Re-enter new PIN",
"pin__reenter_to_confirm": "Please re-enter PIN to confirm.", "pin__reenter_to_confirm": "Please re-enter PIN to confirm.",
"pin__should_be_long": "PIN should be 4-50 digits long.", "pin__should_be_long": "PIN should be 4-50 digits long.",
"pin__title_check_pin": "CHECK PIN", "pin__title_check_pin": "Check PIN",
"pin__title_settings": "PIN SETTINGS", "pin__title_settings": "PIN settings",
"pin__title_wrong_pin": "WRONG PIN", "pin__title_wrong_pin": "Wrong PIN",
"pin__tries_left": "tries left", "pin__tries_left": "tries left",
"pin__turn_off": "Are you sure you want to turn off PIN protection?", "pin__turn_off": "Are you sure you want to turn off PIN protection?",
"pin__turn_on": "Turn on PIN protection?", "pin__turn_on": "Turn on PIN protection?",
@ -499,13 +499,13 @@
"progress__loading_transaction": "Loading transaction...", "progress__loading_transaction": "Loading transaction...",
"progress__locking_device": "Locking the device...", "progress__locking_device": "Locking the device...",
"progress__one_second_left": "1 second left", "progress__one_second_left": "1 second left",
"progress__please_wait": "PLEASE WAIT", "progress__title_please_wait": "Please wait",
"progress__refreshing": "Refreshing...", "progress__refreshing": "Refreshing...",
"progress__signing_transaction": "Signing transaction...", "progress__signing_transaction": "Signing transaction...",
"progress__syncing": "Syncing...", "progress__syncing": "Syncing...",
"progress__x_seconds_left_template": "{0} seconds left", "progress__x_seconds_left_template": "{0} seconds left",
"reboot_to_bootloader__restart": "Trezor will restart in bootloader mode.", "reboot_to_bootloader__restart": "Trezor will restart in bootloader mode.",
"reboot_to_bootloader__title": "GO TO BOOTLOADER", "reboot_to_bootloader__title": "Go to bootloader",
"reboot_to_bootloader__version_by_template": "Firmware version {0}\nby {1}", "reboot_to_bootloader__version_by_template": "Firmware version {0}\nby {1}",
"reboot_to_bootloader__just_a_moment": "Just a moment...", "reboot_to_bootloader__just_a_moment": "Just a moment...",
"recovery__cancel_dry_run": "Cancel backup check", "recovery__cancel_dry_run": "Cancel backup check",
@ -531,18 +531,18 @@
"recovery__share_already_entered": "Share already entered", "recovery__share_already_entered": "Share already entered",
"recovery__share_from_another_shamir": "You have entered a share from another Shamir Backup.", "recovery__share_from_another_shamir": "You have entered a share from another Shamir Backup.",
"recovery__share_num_template": "Share {0}", "recovery__share_num_template": "Share {0}",
"recovery__title": "RECOVER WALLET", "recovery__title": "Recover wallet",
"recovery__title_cancel_dry_run": "CANCEL BACKUP CHECK", "recovery__title_cancel_dry_run": "Cancel backup check",
"recovery__title_cancel_recovery": "CANCEL RECOVERY", "recovery__title_cancel_recovery": "Cancel recovery",
"recovery__title_dry_run": "BACKUP CHECK", "recovery__title_dry_run": "Backup check",
"recovery__title_recover": "RECOVER WALLET", "recovery__title_recover": "Recover wallet",
"recovery__title_remaining_shares": "REMAINING SHARES", "recovery__title_remaining_shares": "Remaining shares",
"recovery__type_word_x_of_y_template": "Type word {0} of {1}", "recovery__type_word_x_of_y_template": "Type word {0} of {1}",
"recovery__wallet_recovered": "Wallet recovered successfully", "recovery__wallet_recovered": "Wallet recovered successfully",
"recovery__wanna_cancel_dry_run": "Are you sure you want to cancel the backup check?", "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__wanna_cancel_recovery": "Are you sure you want to cancel the recovery process?",
"recovery__word_count_template": "({0} words)", "recovery__word_count_template": "({0} words)",
"recovery__word_x_of_y_template": "WORD {0} OF {1}", "recovery__word_x_of_y_title_template": "Word {0} of {1}",
"recovery__x_more_items_starting_template_plural": "{count} more {plural} starting", "recovery__x_more_items_starting_template_plural": "{count} more {plural} starting",
"recovery__x_more_shares_needed_template_plural": "{count} more {plural} needed.", "recovery__x_more_shares_needed_template_plural": "{count} more {plural} needed.",
"recovery__x_of_y_entered_template": "{0} of {1} shares entered successfully.", "recovery__x_of_y_entered_template": "{0} of {1} shares entered successfully.",
@ -550,13 +550,13 @@
"reset__advanced_group_threshold_info": "The group threshold specifies the number of groups required to recover your wallet.", "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 {0} of {1} shares", "reset__all_x_of_y_template": "all {0} of {1} shares",
"reset__any_x_of_y_template": "any {0} of {1} shares", "reset__any_x_of_y_template": "any {0} of {1} shares",
"reset__button_create": "CREATE WALLET", "reset__button_create": "Create wallet",
"reset__button_recover": "RECOVER WALLET", "reset__button_recover": "Recover wallet",
"reset__by_continuing": "By continuing you agree to Trezor Company's terms and conditions.", "reset__by_continuing": "By continuing you agree to Trezor Company's terms and conditions.",
"reset__check_backup_title": "CHECK BACKUP", "reset__check_backup_title": "Check backup",
"reset__check_group_share_title_template": "CHECK G{0} - SHARE {1}", "reset__check_group_share_title_template": "Check g{0} - share {1}",
"reset__check_seed_title": "CHECK SEED", "reset__check_seed_title": "Check seed",
"reset__check_share_title_template": "CHECK SHARE #{0}", "reset__check_share_title_template": "Check share #{0}",
"reset__continue_with_next_share": "Continue with the next share.", "reset__continue_with_next_share": "Continue with the next share.",
"reset__continue_with_share_template": "Continue with share #{0}.", "reset__continue_with_share_template": "Continue with share #{0}.",
"reset__finished_verifying_group_template": "You have finished verifying your recovery shares for group {0}.", "reset__finished_verifying_group_template": "You have finished verifying your recovery shares for group {0}.",
@ -565,7 +565,7 @@
"reset__group_description": "A group is made up of 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_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 {0} - Share {1} checked successfully.", "reset__group_share_checked_successfully_template": "Group {0} - Share {1} checked successfully.",
"reset__group_share_title_template": "GROUP {0} - SHARE {1}", "reset__group_share_title_template": "Group {0} - share {1}",
"reset__more_info_at": "More info at", "reset__more_info_at": "More info at",
"reset__need_all_share_template": "For recovery you need all {0} of the shares.", "reset__need_all_share_template": "For recovery you need all {0} of the shares.",
"reset__need_any_share_template": "For recovery you need any {0} of the shares.", "reset__need_any_share_template": "For recovery you need any {0} of the shares.",
@ -579,15 +579,15 @@
"reset__number_of_shares_info": "= total number of unique word lists used for wallet backup.", "reset__number_of_shares_info": "= total number of unique word lists used for wallet backup.",
"reset__one_share": "1 share", "reset__one_share": "1 share",
"reset__only_one_share_will_be_created": "Only one share will be created.", "reset__only_one_share_will_be_created": "Only one share will be created.",
"reset__recovery_seed_title": "RECOVERY SEED", "reset__recovery_seed_title": "Recovery seed",
"reset__recovery_share_title_template": "RECOVERY SHARE #{0}", "reset__recovery_share_title_template": "Recovery share #{0}",
"reset__required_number_of_groups": "The required number of groups for recovery.", "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_correct_word": "Select the correct word for each position.",
"reset__select_word_template": "SELECT {0} WORD", "reset__select_word_title_template": "Select {0} word",
"reset__select_word_x_of_y_template": "Select word {0} of {1}:", "reset__select_word_x_of_y_template": "Select word {0} of {1}:",
"reset__set_it_to_count_template": "Set it to {0} and you will need ", "reset__set_it_to_count_template": "Set it to {0} and you will need ",
"reset__share_checked_successfully_template": "Recovery share #{0} checked successfully.", "reset__share_checked_successfully_template": "Recovery share #{0} checked successfully.",
"reset__share_words_title": "STANDARD BACKUP", "reset__share_words_title": "Standard backup",
"reset__slip39_checklist_num_groups": "Number of groups", "reset__slip39_checklist_num_groups": "Number of groups",
"reset__slip39_checklist_num_shares": "Number of shares", "reset__slip39_checklist_num_shares": "Number of shares",
"reset__slip39_checklist_set_num_groups": "Set number of groups", "reset__slip39_checklist_set_num_groups": "Set number of groups",
@ -595,21 +595,21 @@
"reset__slip39_checklist_set_sizes": "Set sizes and thresholds", "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_sizes_longer": "Set size and threshold for each group",
"reset__slip39_checklist_set_threshold": "Set threshold", "reset__slip39_checklist_set_threshold": "Set threshold",
"reset__slip39_checklist_title": "BACKUP CHECKLIST", "reset__slip39_checklist_title": "Backup checklist",
"reset__slip39_checklist_write_down": "Write down and check all shares", "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__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__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__threshold_info": "= minimum number of unique word lists used for recovery.",
"reset__title_backup_is_done": "BACKUP IS DONE", "reset__title_backup_is_done": "Backup is done",
"reset__title_create_wallet": "CREATE WALLET", "reset__title_create_wallet": "Create wallet",
"reset__title_create_wallet_shamir": "CREATE WALLET (SHAMIR)", "reset__title_create_wallet_shamir": "Create wallet (shamir)",
"reset__title_group_threshold": "GROUP THRESHOLD", "reset__title_group_threshold": "Group threshold",
"reset__title_number_of_groups": "NUMBER OF GROUPS", "reset__title_number_of_groups": "Number of groups",
"reset__title_number_of_shares": "NUMBER OF SHARES", "reset__title_number_of_shares": "Number of shares",
"reset__title_set_group_threshold": "SET GROUP THRESHOLD", "reset__title_set_group_threshold": "Set group threshold",
"reset__title_set_number_of_groups": "SET NUMBER OF GROUPS", "reset__title_set_number_of_groups": "Set number of groups",
"reset__title_set_number_of_shares": "SET NUMBER OF SHARES", "reset__title_set_number_of_shares": "Set number of shares",
"reset__title_set_threshold": "SET THRESHOLD", "reset__title_set_threshold": "Set threshold",
"reset__to_form_group_template": "to form Group {0}.", "reset__to_form_group_template": "to form Group {0}.",
"reset__tos_link": "trezor.io/tos", "reset__tos_link": "trezor.io/tos",
"reset__total_number_of_shares_in_group_template": "Set the total number of shares in Group {0}.", "reset__total_number_of_shares_in_group_template": "Set the total number of shares in Group {0}.",
@ -624,13 +624,13 @@
"rotation__east": "east", "rotation__east": "east",
"rotation__north": "north", "rotation__north": "north",
"rotation__south": "south", "rotation__south": "south",
"rotation__title_change": "CHANGE ROTATION", "rotation__title_change": "Change rotation",
"rotation__west": "west", "rotation__west": "west",
"safety_checks__approve_unsafe_always": "Trezor will allow you to approve some actions which might be unsafe.", "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__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__enforce_strict": "Do you really want to enforce strict safety checks (recommended)?",
"safety_checks__title": "SAFETY CHECKS", "safety_checks__title": "Safety checks",
"safety_checks__title_safety_override": "SAFETY OVERRIDE", "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__all_data_will_be_lost": "All data on the SD card will be lost.",
"sd_card__card_required": "SD card required.", "sd_card__card_required": "SD card required.",
"sd_card__disable": "Do you really want to remove SD card protection from your device?", "sd_card__disable": "Do you really want to remove SD card protection from your device?",
@ -646,25 +646,25 @@
"sd_card__refresh": "Do you really want to replace the current SD card secret with a newly generated one?", "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__refreshed": "You have successfully refreshed SD protection.",
"sd_card__restart": "Do you want to restart Trezor in bootloader mode?", "sd_card__restart": "Do you want to restart Trezor in bootloader mode?",
"sd_card__title": "SD CARD PROTECTION", "sd_card__title": "SD card protection",
"sd_card__title_problem": "SD CARD PROBLEM", "sd_card__title_problem": "SD card problem",
"sd_card__unknown_filesystem": "Unknown filesystem.", "sd_card__unknown_filesystem": "Unknown filesystem.",
"sd_card__unplug_and_insert_correct": "Please unplug the device and insert the correct SD card.", "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__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__wanna_format": "Do you really want to format the SD card?",
"sd_card__wrong_sd_card": "Wrong SD card.", "sd_card__wrong_sd_card": "Wrong SD card.",
"send__address_path": "address path", "send__address_path": "address path",
"send__confirm_sending": "SENDING AMOUNT", "send__confirm_sending": "Sending amount",
"send__from_multiple_accounts": "Sending from multiple accounts.", "send__from_multiple_accounts": "Sending from multiple accounts.",
"send__including_fee": "Including fee:", "send__including_fee": "Including fee:",
"send__maximum_fee": "Maximum fee:", "send__maximum_fee": "Maximum fee:",
"send__receiving_to_multisig": "Receiving to a multisig address.", "send__receiving_to_multisig": "Receiving to a multisig address.",
"send__title_confirm_sending": "CONFIRM SENDING", "send__title_confirm_sending": "Confirm sending",
"send__title_joint_transaction": "JOINT TRANSACTION", "send__title_joint_transaction": "Joint transaction",
"send__title_receiving_to": "RECEIVING TO", "send__title_receiving_to": "Receiving to",
"send__title_sending": "SENDING", "send__title_sending": "Sending",
"send__title_sending_amount": "SENDING AMOUNT", "send__title_sending_amount": "Sending amount",
"send__title_sending_to": "SENDING TO", "send__title_sending_to": "Sending to",
"send__to_the_total_amount": "To the total amount:", "send__to_the_total_amount": "To the total amount:",
"send__total_amount": "Total amount:", "send__total_amount": "Total amount:",
"send__transaction_id": "Transaction ID:", "send__transaction_id": "Transaction ID:",
@ -672,14 +672,14 @@
"share_words__words_in_order": " words in order.", "share_words__words_in_order": " words in order.",
"share_words__wrote_down_all": "I wrote down all ", "share_words__wrote_down_all": "I wrote down all ",
"sign_message__bytes_template": "{0} Bytes", "sign_message__bytes_template": "{0} Bytes",
"sign_message__confirm_address": "SIGNING ADDRESS", "sign_message__title_confirm_address": "Signing address",
"sign_message__confirm_message": "CONFIRM MESSAGE", "sign_message__title_confirm_message": "Confirm message",
"sign_message__message_size": "Message size:", "sign_message__message_size": "Message size:",
"sign_message__verify_address": "VERIFY ADDRESS", "sign_message__title_verify_address": "Verify address",
"storage_msg__verifying_pin": "VERIFYING PIN", "storage_msg__title_verifying_pin": "Verifying pin",
"storage_msg__processing": "PROCESSING", "storage_msg__title_processing": "Processing",
"storage_msg__starting": "STARTING UP", "storage_msg__title_starting": "Starting up",
"storage_msg__wrong_pin": "WRONG PIN", "storage_msg__title_wrong_pin": "Wrong pin",
"solana__account_index": "Account index", "solana__account_index": "Account index",
"solana__associated_token_account": "Associated token account", "solana__associated_token_account": "Associated token account",
"solana__confirm_multisig": "Confirm multisig", "solana__confirm_multisig": "Confirm multisig",
@ -786,10 +786,10 @@
"tutorial__welcome_press_right": "Welcome to Trezor. Press right to continue.", "tutorial__welcome_press_right": "Welcome to Trezor. Press right to continue.",
"u2f__get": "Increase and retrieve the U2F counter?", "u2f__get": "Increase and retrieve the U2F counter?",
"u2f__set_template": "Set the U2F counter to {0}?", "u2f__set_template": "Set the U2F counter to {0}?",
"u2f__title_get": "GET U2F COUNTER", "u2f__title_get": "Get U2F counter",
"u2f__title_set": "SET U2F COUNTER", "u2f__title_set": "Set U2F counter",
"wipe__info": "All data will be erased.", "wipe__info": "All data will be erased.",
"wipe__title": "WIPE DEVICE", "wipe__title": "Wipe device",
"wipe__want_to_wipe": "Do you really want to wipe the device?\n", "wipe__want_to_wipe": "Do you really want to wipe the device?\n",
"wipe_code__change": "Change wipe code?", "wipe_code__change": "Change wipe code?",
"wipe_code__changed": "Wipe code changed.", "wipe_code__changed": "Wipe code changed.",
@ -802,13 +802,13 @@
"wipe_code__mismatch": "The wipe codes you entered do not match.", "wipe_code__mismatch": "The wipe codes you entered do not match.",
"wipe_code__reenter": "Re-enter wipe code", "wipe_code__reenter": "Re-enter wipe code",
"wipe_code__reenter_to_confirm": "Please re-enter wipe code to confirm.", "wipe_code__reenter_to_confirm": "Please re-enter wipe code to confirm.",
"wipe_code__title_check": "CHECK WIPE CODE", "wipe_code__title_check": "Check wipe code",
"wipe_code__title_invalid": "INVALID WIPE CODE", "wipe_code__title_invalid": "Invalid wipe code",
"wipe_code__title_settings": "WIPE CODE SETTINGS", "wipe_code__title_settings": "Wipe code settings",
"wipe_code__turn_off": "Turn off wipe code protection?", "wipe_code__turn_off": "Turn off wipe code protection?",
"wipe_code__turn_on": "Turn on wipe code protection?", "wipe_code__turn_on": "Turn on wipe code protection?",
"wipe_code__wipe_code_mismatch": "Wipe code mismatch", "wipe_code__wipe_code_mismatch": "Wipe code mismatch",
"word_count__title": "NUMBER OF WORDS", "word_count__title": "Number of words",
"words__account": "Account", "words__account": "Account",
"words__account_colon": "Account:", "words__account_colon": "Account:",
"words__address": "Address", "words__address": "Address",
@ -833,18 +833,18 @@
"words__please_check_again": "Please check again", "words__please_check_again": "Please check again",
"words__please_try_again": "Please try again", "words__please_try_again": "Please try again",
"words__really_wanna": "Do you really want to", "words__really_wanna": "Do you really want to",
"words__recipient": "Recipient", "words__title_recipient": "Recipient",
"words__sign": "Sign", "words__sign": "Sign",
"words__signer": "Signer", "words__signer": "Signer",
"words__title_check": "CHECK", "words__title_check": "Check",
"words__title_group": "GROUP", "words__title_group": "Group",
"words__title_information": "INFORMATION", "words__title_information": "Information",
"words__title_remember": "REMEMBER", "words__title_remember": "Remember",
"words__title_share": "SHARE", "words__title_share": "Share",
"words__title_shares": "SHARES", "words__title_shares": "Shares",
"words__title_success": "SUCCESS", "words__title_success": "Success",
"words__title_summary": "SUMMARY", "words__title_summary": "Summary",
"words__title_threshold": "THRESHOLD", "words__title_threshold": "Threshold",
"words__unknown": "Unknown", "words__unknown": "Unknown",
"words__warning": "Warning", "words__warning": "Warning",
"words__writable": "Writable", "words__writable": "Writable",

@ -33,7 +33,7 @@
"addr_mismatch__support_url": "trezor.io/support", "addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__wrong_derivation_path": "Cuenta seleccionada: Derivación incorrecta", "addr_mismatch__wrong_derivation_path": "Cuenta seleccionada: Derivación incorrecta",
"addr_mismatch__xpub_mismatch": "¿La XPUB no coincide?", "addr_mismatch__xpub_mismatch": "¿La XPUB no coincide?",
"address__public_key": "Clave pública", "address__title_public_key": "Clave pública",
"address__title_cosigner": "COFIRMANTE", "address__title_cosigner": "COFIRMANTE",
"address__title_receive_address": "DIRECCIÓN DESTINO", "address__title_receive_address": "DIRECCIÓN DESTINO",
"address__title_yours": "TUYO", "address__title_yours": "TUYO",
@ -322,13 +322,13 @@
"ethereum__units_template": "{0} unidades", "ethereum__units_template": "{0} unidades",
"ethereum__unknown_token": "Token desconocido", "ethereum__unknown_token": "Token desconocido",
"ethereum__valid_signature": "La firma es válida.", "ethereum__valid_signature": "La firma es válida.",
"ethereum__staking_stake": "HACER STAKE", "ethereum__staking_title_stake": "HACER STAKE",
"ethereum__staking_stake_address": "DIRECCIÓN DE STAKE", "ethereum__staking_title_stake_address": "DIRECCIÓN DE STAKE",
"ethereum__staking_stake_intro": "¿Hacer stake de ETH en Everstake?", "ethereum__staking_stake_intro": "¿Hacer stake de ETH en Everstake?",
"ethereum__staking_unstake": "RETIRAR STAKE", "ethereum__staking_title_unstake": "RETIRAR STAKE",
"ethereum__staking_unstake_intro": "¿Retirar ETH de Everstake?", "ethereum__staking_unstake_intro": "¿Retirar ETH de Everstake?",
"ethereum__staking_claim": "RECLAMAR", "ethereum__staking_title_claim": "RECLAMAR",
"ethereum__staking_claim_address": "DIR. DE RECLAMO", "ethereum__staking_title_claim_address": "DIR. DE RECLAMO",
"ethereum__staking_claim_intro": "¿Reclamar ETH de Everstake?", "ethereum__staking_claim_intro": "¿Reclamar ETH de Everstake?",
"experimental_mode__enable": "¿Activar funciones experimentales?", "experimental_mode__enable": "¿Activar funciones experimentales?",
"experimental_mode__only_for_dev": "Solo para desarrollo y pruebas beta.", "experimental_mode__only_for_dev": "Solo para desarrollo y pruebas beta.",
@ -522,7 +522,7 @@
"progress__loading_transaction": "Cargando transacc...", "progress__loading_transaction": "Cargando transacc...",
"progress__locking_device": "Bloq. el dispositivo...", "progress__locking_device": "Bloq. el dispositivo...",
"progress__one_second_left": "Queda 1 segundo", "progress__one_second_left": "Queda 1 segundo",
"progress__please_wait": "ESPERA", "progress__title_please_wait": "ESPERA",
"progress__refreshing": "Actualizando...", "progress__refreshing": "Actualizando...",
"progress__signing_transaction": "Firmando transacción...", "progress__signing_transaction": "Firmando transacción...",
"progress__syncing": "Sincronizando...", "progress__syncing": "Sincronizando...",
@ -565,7 +565,7 @@
"recovery__wanna_cancel_dry_run": "¿Quieres anular la revisión de la copia de seguridad?", "recovery__wanna_cancel_dry_run": "¿Quieres anular la revisión de la copia de seguridad?",
"recovery__wanna_cancel_recovery": "¿Quieres anular el proceso de recuperación?", "recovery__wanna_cancel_recovery": "¿Quieres anular el proceso de recuperación?",
"recovery__word_count_template": "({0} palabras)", "recovery__word_count_template": "({0} palabras)",
"recovery__word_x_of_y_template": "PALABRA {0} DE {1}", "recovery__word_x_of_y_title_template": "PALABRA {0} DE {1}",
"recovery__x_more_items_starting_template_plural": "Se están iniciando {count} {plural} más", "recovery__x_more_items_starting_template_plural": "Se están iniciando {count} {plural} más",
"recovery__x_more_shares_needed_template_plural": "Se necesitan {count} {plural} más.", "recovery__x_more_shares_needed_template_plural": "Se necesitan {count} {plural} más.",
"recovery__x_of_y_entered_template": "Rec. comp. introducidos: {0} de {1}.", "recovery__x_of_y_entered_template": "Rec. comp. introducidos: {0} de {1}.",
@ -606,7 +606,7 @@
"reset__recovery_share_title_template": "REC. RECUP. nro.{0}", "reset__recovery_share_title_template": "REC. RECUP. nro.{0}",
"reset__required_number_of_groups": "El nro.de grupos necesario para la recuperación.", "reset__required_number_of_groups": "El nro.de grupos necesario para la recuperación.",
"reset__select_correct_word": "Selecciona la palabra correcta para cada posición.", "reset__select_correct_word": "Selecciona la palabra correcta para cada posición.",
"reset__select_word_template": "USAR {0} PALABRA", "reset__select_word_title_template": "USAR {0} PALABRA",
"reset__select_word_x_of_y_template": "Palabra {0} de {1}:", "reset__select_word_x_of_y_template": "Palabra {0} de {1}:",
"reset__set_it_to_count_template": "Ajústalo en {0} y necesitarás ", "reset__set_it_to_count_template": "Ajústalo en {0} y necesitarás ",
"reset__share_checked_successfully_template": "Verificado: Rec de recuperación nro.{0}.", "reset__share_checked_successfully_template": "Verificado: Rec de recuperación nro.{0}.",
@ -695,10 +695,10 @@
"share_words__words_in_order": " palabras en orden.", "share_words__words_in_order": " palabras en orden.",
"share_words__wrote_down_all": "Escribí las ", "share_words__wrote_down_all": "Escribí las ",
"sign_message__bytes_template": "{0} bytes", "sign_message__bytes_template": "{0} bytes",
"sign_message__confirm_address": "DIRECCIÓN FIRMA", "sign_message__title_confirm_address": "DIRECCIÓN FIRMA",
"sign_message__confirm_message": "VALIDAR MENSAJE", "sign_message__title_confirm_message": "VALIDAR MENSAJE",
"sign_message__message_size": "Tamaño del mensaje:", "sign_message__message_size": "Tamaño del mensaje:",
"sign_message__verify_address": "VERIFICAR DIRECCIÓN", "sign_message__title_verify_address": "VERIFICAR DIRECCIÓN",
"solana__account_index": "Índice de la cuenta", "solana__account_index": "Índice de la cuenta",
"solana__associated_token_account": "Cuenta de token asociada", "solana__associated_token_account": "Cuenta de token asociada",
"solana__confirm_multisig": "Confirmar multifirma", "solana__confirm_multisig": "Confirmar multifirma",
@ -780,10 +780,10 @@
"stellar__value_sha256": "Valor (SHA-256):", "stellar__value_sha256": "Valor (SHA-256):",
"stellar__wanna_clean_value_key_template": "¿Quieres borrar la clave de valor {0}?", "stellar__wanna_clean_value_key_template": "¿Quieres borrar la clave de valor {0}?",
"stellar__your_account": " tu cuenta", "stellar__your_account": " tu cuenta",
"storage_msg__verifying_pin": "VERIFICANDO PIN", "storage_msg__title_verifying_pin": "VERIFICANDO PIN",
"storage_msg__processing": "PROCESANDO", "storage_msg__title_processing": "PROCESANDO",
"storage_msg__starting": "INICIANDO", "storage_msg__title_starting": "INICIANDO",
"storage_msg__wrong_pin": "PIN INCORRECTO", "storage_msg__title_wrong_pin": "PIN INCORRECTO",
"tezos__baker_address": "Dirección de panadero:", "tezos__baker_address": "Dirección de panadero:",
"tezos__balance": "Saldo:", "tezos__balance": "Saldo:",
"tezos__ballot": "Papeleta:", "tezos__ballot": "Papeleta:",
@ -856,7 +856,7 @@
"words__please_check_again": "Vuelve a comprobarlo", "words__please_check_again": "Vuelve a comprobarlo",
"words__please_try_again": "Inténtalo de nuevo", "words__please_try_again": "Inténtalo de nuevo",
"words__really_wanna": "¿Seguro que quieres", "words__really_wanna": "¿Seguro que quieres",
"words__recipient": "Destinatario", "words__title_recipient": "Destinatario",
"words__sign": "Firmar", "words__sign": "Firmar",
"words__signer": "Firmante", "words__signer": "Firmante",
"words__title_check": "REVISAR", "words__title_check": "REVISAR",

@ -33,7 +33,7 @@
"addr_mismatch__support_url": "trezor.io/support", "addr_mismatch__support_url": "trezor.io/support",
"addr_mismatch__wrong_derivation_path": "Chemin dériv. incorrect du compte sélectionné.", "addr_mismatch__wrong_derivation_path": "Chemin dériv. incorrect du compte sélectionné.",
"addr_mismatch__xpub_mismatch": "Err. clé publ. (XPUB) ?", "addr_mismatch__xpub_mismatch": "Err. clé publ. (XPUB) ?",
"address__public_key": "Clé publique", "address__title_public_key": "Clé publique",
"address__title_cosigner": "COSIGNATAIRE", "address__title_cosigner": "COSIGNATAIRE",
"address__title_receive_address": "ADR. DE RÉCEP.", "address__title_receive_address": "ADR. DE RÉCEP.",
"address__title_yours": "LA VÔTRE", "address__title_yours": "LA VÔTRE",
@ -322,13 +322,13 @@
"ethereum__units_template": "{0} unités", "ethereum__units_template": "{0} unités",
"ethereum__unknown_token": "Jeton inconnu", "ethereum__unknown_token": "Jeton inconnu",
"ethereum__valid_signature": "Signature valide.", "ethereum__valid_signature": "Signature valide.",
"ethereum__staking_stake": "STAKE", "ethereum__staking_title_stake": "STAKE",
"ethereum__staking_stake_address": "ADRESSE DE STAKING", "ethereum__staking_title_stake_address": "ADRESSE DE STAKING",
"ethereum__staking_stake_intro": "Staker de l'ETH sur Everstake?", "ethereum__staking_stake_intro": "Staker de l'ETH sur Everstake?",
"ethereum__staking_unstake": "UNSTAKE", "ethereum__staking_title_unstake": "UNSTAKE",
"ethereum__staking_unstake_intro": "Terminer le Staking de l'ETH sur Everstake?", "ethereum__staking_unstake_intro": "Terminer le Staking de l'ETH sur Everstake?",
"ethereum__staking_claim": "RETIRER", "ethereum__staking_title_claim": "RETIRER",
"ethereum__staking_claim_address": "ADRESSE DE RETRAIT", "ethereum__staking_title_claim_address": "ADRESSE DE RETRAIT",
"ethereum__staking_claim_intro": "Retirer l'ETH d'Everstake?", "ethereum__staking_claim_intro": "Retirer l'ETH d'Everstake?",
"experimental_mode__enable": "Activer les fonct. expérimentales ?", "experimental_mode__enable": "Activer les fonct. expérimentales ?",
"experimental_mode__only_for_dev": "Uniquement pour le dév. et les tests bêta !", "experimental_mode__only_for_dev": "Uniquement pour le dév. et les tests bêta !",
@ -522,7 +522,7 @@
"progress__loading_transaction": "Charg. de la trans...", "progress__loading_transaction": "Charg. de la trans...",
"progress__locking_device": "Verrouill. l'appareil...", "progress__locking_device": "Verrouill. l'appareil...",
"progress__one_second_left": "1 seconde restante", "progress__one_second_left": "1 seconde restante",
"progress__please_wait": "PATIENTEZ", "progress__title_please_wait": "PATIENTEZ",
"progress__refreshing": "Actualisation en cours", "progress__refreshing": "Actualisation en cours",
"progress__signing_transaction": "Signature en cours...", "progress__signing_transaction": "Signature en cours...",
"progress__syncing": "Synch. en cours", "progress__syncing": "Synch. en cours",
@ -565,7 +565,7 @@
"recovery__wanna_cancel_dry_run": "Voulez-vous vraiment annuler la vér. de la sauv. ?", "recovery__wanna_cancel_dry_run": "Voulez-vous vraiment annuler la vér. de la sauv. ?",
"recovery__wanna_cancel_recovery": "Voulez-vous vraiment annuler le processus de récup. ?", "recovery__wanna_cancel_recovery": "Voulez-vous vraiment annuler le processus de récup. ?",
"recovery__word_count_template": "({0} mots)", "recovery__word_count_template": "({0} mots)",
"recovery__word_x_of_y_template": "MOT {0} SUR {1}", "recovery__word_x_of_y_title_template": "MOT {0} SUR {1}",
"recovery__x_more_items_starting_template_plural": "{count} plus {plural} ont commencé", "recovery__x_more_items_starting_template_plural": "{count} plus {plural} ont commencé",
"recovery__x_more_shares_needed_template_plural": "{count} plus {plural} sont nécessaires.", "recovery__x_more_shares_needed_template_plural": "{count} plus {plural} sont nécessaires.",
"recovery__x_of_y_entered_template": "{0} fragm. sur {1} saisis avec succès.", "recovery__x_of_y_entered_template": "{0} fragm. sur {1} saisis avec succès.",
@ -606,7 +606,7 @@
"reset__recovery_share_title_template": "FRAGM. DE RÉCUP. #{0}", "reset__recovery_share_title_template": "FRAGM. DE RÉCUP. #{0}",
"reset__required_number_of_groups": "Le nbre de groupes requis pour la récup.", "reset__required_number_of_groups": "Le nbre de groupes requis pour la récup.",
"reset__select_correct_word": "Sélect. le mot correct par emplacement.", "reset__select_correct_word": "Sélect. le mot correct par emplacement.",
"reset__select_word_template": "SÉLECTIONNER {0} MOT", "reset__select_word_tile_template": "SÉLECTIONNER {0} MOT",
"reset__select_word_x_of_y_template": "Mot {0} sur {1}:", "reset__select_word_x_of_y_template": "Mot {0} sur {1}:",
"reset__set_it_to_count_template": "Définissez-le sur {0} et vous aurez besoin ", "reset__set_it_to_count_template": "Définissez-le sur {0} et vous aurez besoin ",
"reset__share_checked_successfully_template": "Le fragm. de récup. #{0} a été vérifié.", "reset__share_checked_successfully_template": "Le fragm. de récup. #{0} a été vérifié.",
@ -695,10 +695,10 @@
"share_words__words_in_order": " mots dans l'ordre.", "share_words__words_in_order": " mots dans l'ordre.",
"share_words__wrote_down_all": "J'ai noté tous les ", "share_words__wrote_down_all": "J'ai noté tous les ",
"sign_message__bytes_template": "{0} octets", "sign_message__bytes_template": "{0} octets",
"sign_message__confirm_address": "ADR. DE SIGNATURE", "sign_message__title_confirm_address": "ADR. DE SIGNATURE",
"sign_message__confirm_message": "CONF. MESSAGE", "sign_message__title_confirm_message": "CONF. MESSAGE",
"sign_message__message_size": "Taille du message :", "sign_message__message_size": "Taille du message :",
"sign_message__verify_address": "VÉRIFIER L'ADR.", "sign_message__title_verify_address": "VÉRIFIER L'ADR.",
"solana__account_index": "Index du compte", "solana__account_index": "Index du compte",
"solana__associated_token_account": "Compte de jetons associé", "solana__associated_token_account": "Compte de jetons associé",
"solana__confirm_multisig": "Conf. multisignatures", "solana__confirm_multisig": "Conf. multisignatures",
@ -781,10 +781,10 @@
"stellar__wanna_clean_value_key_template": "Voulez-vous effacer la clé de valeur {0} ?", "stellar__wanna_clean_value_key_template": "Voulez-vous effacer la clé de valeur {0} ?",
"stellar__your_account": " votre compte", "stellar__your_account": " votre compte",
"tezos__baker_address": "Adr. du baker :", "tezos__baker_address": "Adr. du baker :",
"storage_msg__verifying_pin": "VÉRIFICATION DU PIN", "storage_msg__title_verifying_pin": "VÉRIFICATION DU PIN",
"storage_msg__processing": "TRAITEMENT", "storage_msg__title_processing": "TRAITEMENT",
"storage_msg__starting": "DÉMARRAGE", "storage_msg__title_starting": "DÉMARRAGE",
"storage_msg__wrong_pin": "PIN INCORRECT", "storage_msg__title_wrong_pin": "PIN INCORRECT",
"tezos__balance": "Solde :", "tezos__balance": "Solde :",
"tezos__ballot": "Bulletin de vote :", "tezos__ballot": "Bulletin de vote :",
"tezos__confirm_delegation": "Conf. délégation", "tezos__confirm_delegation": "Conf. délégation",
@ -856,7 +856,7 @@
"words__please_check_again": "Revérifiez", "words__please_check_again": "Revérifiez",
"words__please_try_again": "Réessayez", "words__please_try_again": "Réessayez",
"words__really_wanna": "Voulez-vous vraiment", "words__really_wanna": "Voulez-vous vraiment",
"words__recipient": "Destinataire", "words__title_recipient": "Destinataire",
"words__sign": "Signer", "words__sign": "Signer",
"words__signer": "Signataire", "words__signer": "Signataire",
"words__title_check": "VÉRIFIER", "words__title_check": "VÉRIFIER",

@ -5,7 +5,7 @@
"3": "addr_mismatch__support_url", "3": "addr_mismatch__support_url",
"4": "addr_mismatch__wrong_derivation_path", "4": "addr_mismatch__wrong_derivation_path",
"5": "addr_mismatch__xpub_mismatch", "5": "addr_mismatch__xpub_mismatch",
"6": "address__public_key", "6": "address__title_public_key",
"7": "address__title_cosigner", "7": "address__title_cosigner",
"8": "address__title_receive_address", "8": "address__title_receive_address",
"9": "address__title_yours", "9": "address__title_yours",
@ -485,8 +485,8 @@
"483": "progress__loading_transaction", "483": "progress__loading_transaction",
"484": "progress__locking_device", "484": "progress__locking_device",
"485": "progress__one_second_left", "485": "progress__one_second_left",
"486": "progress__please_wait", "486": "progress__title_please_wait",
"487": "storage_msg__processing", "487": "storage_msg__title_processing",
"488": "progress__refreshing", "488": "progress__refreshing",
"489": "progress__signing_transaction", "489": "progress__signing_transaction",
"490": "progress__syncing", "490": "progress__syncing",
@ -528,7 +528,7 @@
"526": "recovery__wanna_cancel_dry_run", "526": "recovery__wanna_cancel_dry_run",
"527": "recovery__wanna_cancel_recovery", "527": "recovery__wanna_cancel_recovery",
"528": "recovery__word_count_template", "528": "recovery__word_count_template",
"529": "recovery__word_x_of_y_template", "529": "recovery__word_x_of_y_title_template",
"530": "recovery__x_more_items_starting_template_plural", "530": "recovery__x_more_items_starting_template_plural",
"531": "recovery__x_more_shares_needed_template_plural", "531": "recovery__x_more_shares_needed_template_plural",
"532": "recovery__x_of_y_entered_template", "532": "recovery__x_of_y_entered_template",
@ -569,7 +569,7 @@
"567": "reset__recovery_share_title_template", "567": "reset__recovery_share_title_template",
"568": "reset__required_number_of_groups", "568": "reset__required_number_of_groups",
"569": "reset__select_correct_word", "569": "reset__select_correct_word",
"570": "reset__select_word_template", "570": "reset__select_word_title_template",
"571": "reset__select_word_x_of_y_template", "571": "reset__select_word_x_of_y_template",
"572": "reset__set_it_to_count_template", "572": "reset__set_it_to_count_template",
"573": "reset__share_checked_successfully_template", "573": "reset__share_checked_successfully_template",
@ -658,10 +658,10 @@
"656": "share_words__words_in_order", "656": "share_words__words_in_order",
"657": "share_words__wrote_down_all", "657": "share_words__wrote_down_all",
"658": "sign_message__bytes_template", "658": "sign_message__bytes_template",
"659": "sign_message__confirm_address", "659": "sign_message__title_confirm_address",
"660": "sign_message__confirm_message", "660": "sign_message__title_confirm_message",
"661": "sign_message__message_size", "661": "sign_message__message_size",
"662": "sign_message__verify_address", "662": "sign_message__title_verify_address",
"663": "solana__account_index", "663": "solana__account_index",
"664": "solana__associated_token_account", "664": "solana__associated_token_account",
"665": "solana__confirm_multisig", "665": "solana__confirm_multisig",
@ -815,7 +815,7 @@
"813": "words__please_check_again", "813": "words__please_check_again",
"814": "words__please_try_again", "814": "words__please_try_again",
"815": "words__really_wanna", "815": "words__really_wanna",
"816": "words__recipient", "816": "words__title_recipient",
"817": "words__sign", "817": "words__sign",
"818": "words__signer", "818": "words__signer",
"819": "words__title_check", "819": "words__title_check",
@ -833,15 +833,15 @@
"831": "words__yes", "831": "words__yes",
"832": "reboot_to_bootloader__just_a_moment", "832": "reboot_to_bootloader__just_a_moment",
"833": "inputs__previous", "833": "inputs__previous",
"834": "ethereum__staking_claim", "834": "ethereum__staking_title_claim",
"835": "ethereum__staking_claim_address", "835": "ethereum__staking_title_claim_address",
"836": "ethereum__staking_claim_intro", "836": "ethereum__staking_claim_intro",
"837": "ethereum__staking_stake", "837": "ethereum__staking_title_stake",
"838": "ethereum__staking_stake_address", "838": "ethereum__staking_title_stake_address",
"839": "ethereum__staking_stake_intro", "839": "ethereum__staking_stake_intro",
"840": "ethereum__staking_unstake", "840": "ethereum__staking_title_unstake",
"841": "ethereum__staking_unstake_intro", "841": "ethereum__staking_unstake_intro",
"842": "storage_msg__starting", "842": "storage_msg__title_starting",
"843": "storage_msg__verifying_pin", "843": "storage_msg__title_verifying_pin",
"844": "storage_msg__wrong_pin" "844": "storage_msg__title_wrong_pin"
} }

@ -1,8 +1,8 @@
{ {
"current": { "current": {
"merkle_root": "83f62541670df59f347bfdf577f36c1ef504f769fd8a498c0f76aa78f9021cda", "merkle_root": "4622d85e1e3c9b634b4d4f900a2ab06e2aa5e0f62fc9d4e5ed4a83917cc460d3",
"datetime": "2024-03-30T11:28:31.004037", "datetime": "2024-04-14T12:45:50.699461",
"commit": "1c36c0927c33fd05b4eff4b3a020940e33074b54" "commit": "73a2f276878a95b6f736281a52e93699843e9f9a"
}, },
"history": [ "history": [
{ {

@ -293,6 +293,61 @@ class TranslationsBlob(Struct):
# ==================== # ====================
def uppercase_titles_and_buttons(s: str, key: str, model_internal_name: str) -> str:
# strings used in titles and button labels are uppercased for model T and model R
MODELS_WITH_UPPER_TITLES_AND_BUTTONS = ("T2T1", "T2B1")
# KEY_SUBSTR_UPPER_MODELS_T_AND_R = ("_title", "_button", "buttons__", "inputs__")
KEY_SUBSTR_UPPER_MODELS_T_AND_R = (
"_title",
"_button",
"buttons__",
"inputs__",
# FIXME: below are strings which should contain '_title' or `_button`. This is just to test if it's sufficient
"stellar__confirm_issuer",
"stellar__confirm_stellar",
"stellar__confirm_issuer",
"stellar__revoke_trust",
"stellar__confirm_memo",
"nem__final_confirm",
"bitcoin__confirm_locktime",
"binance__confirm_cancel",
"binance__confirm_input",
"binance__confirm_order",
"binance__confirm_output",
"cardano__verify_script",
"cardano__sending", # should include many cardano__...
# "progress__loading_transaction",
# "progress__signing_transaction",
"language__progress",
# FIXME: words might be used in multiple places, consider creating more versions, e.g. "words__title_amount", etc.
"words__amount",
"words__confirm",
"words__sign",
"words__warning",
"debug__loading_seed",
"passphrase__hidden_wallet",
"sd_card__error",
"sd_card__format_card",
"misc__decrypt_value",
"misc__encrypt_value",
"misc__title_suite_labeling",
)
KEY_SKIP = (
"debug__loading_seed_not_recommended",
)
should_upper: bool = (
model_internal_name in MODELS_WITH_UPPER_TITLES_AND_BUTTONS
and any(sub in key for sub in KEY_SUBSTR_UPPER_MODELS_T_AND_R)
and key not in KEY_SKIP
)
if should_upper:
return s.upper()
else:
return s
def order_from_json(json_order: dict[str, str]) -> Order: def order_from_json(json_order: dict[str, str]) -> Order:
return {int(k): v for k, v in json_order.items()} return {int(k): v for k, v in json_order.items()}
@ -306,10 +361,14 @@ def blob_from_defs(
) -> TranslationsBlob: ) -> TranslationsBlob:
json_header: JsonHeader = lang_data["header"] json_header: JsonHeader = lang_data["header"]
# order translations -- python dicts keep insertion order # order translations -- dicts keep insertion order as of Python 3.7
translations_ordered: list[str] = [ translations_ordered: list[str] = [] * len(order)
lang_data["translations"].get(key, "") for _, key in sorted(order.items()) for _, key in sorted(order.items()):
] translation: str = lang_data["translations"].get(key, "")
translation = uppercase_titles_and_buttons(
translation, key, model.internal_name
)
translations_ordered.append(translation)
translations = TranslatedStrings.from_items(translations_ordered) translations = TranslatedStrings.from_items(translations_ordered)

@ -310,7 +310,7 @@ class EthereumFlow:
go_back_from_summary: bool = False, go_back_from_summary: bool = False,
) -> BRGeneratorType: ) -> BRGeneratorType:
yield yield
TR.assert_equals(self.debug.wait_layout().title(), "words__recipient") TR.assert_equals(self.debug.wait_layout().title(), "words__title_recipient")
if self.client.model in (models.T2T1, models.T3T1): if self.client.model in (models.T2T1, models.T3T1):
if cancel: if cancel:
@ -374,9 +374,9 @@ class EthereumFlow:
TR.assert_equals_multiple( TR.assert_equals_multiple(
self.debug.wait_layout().title(), self.debug.wait_layout().title(),
[ [
"ethereum__staking_stake", "ethereum__staking_title_stake",
"ethereum__staking_unstake", "ethereum__staking_title_unstake",
"ethereum__staking_claim", "ethereum__staking_title_claim",
], ],
) )
TR.assert_equals_multiple( TR.assert_equals_multiple(
@ -394,8 +394,8 @@ class EthereumFlow:
TR.assert_equals_multiple( TR.assert_equals_multiple(
self.debug.wait_layout().title(), self.debug.wait_layout().title(),
[ [
"ethereum__staking_stake_address", "ethereum__staking_title_stake_address",
"ethereum__staking_claim_address", "ethereum__staking_title_claim_address",
], ],
) )
self.debug.press_no(wait=True) self.debug.press_no(wait=True)
@ -421,8 +421,8 @@ class EthereumFlow:
TR.assert_equals_multiple( TR.assert_equals_multiple(
self.debug.wait_layout().title(), self.debug.wait_layout().title(),
[ [
"ethereum__staking_stake_address", "ethereum__staking_title_stake_address",
"ethereum__staking_claim_address", "ethereum__staking_title_claim_address",
], ],
) )
self.debug.press_left(wait=True) self.debug.press_left(wait=True)

Loading…
Cancel
Save