What changed, and why it matters
This commit only adds new user-visible text labels for two backup types ('N4W1 backup' and 'Wordlist backup') to the Trezor firmware's translation system. It does not change any security logic, cryptographic code, or user-flow behavior. The strings are empty on most device layouts and only populated for the 'Eckhart' layout. The translation signature metadata was also updated as part of the normal build process.
No security action required. Treat as routine localization maintenance.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff is a pure localization/data change: it registers two new translation keys (backup__type_n4w1, backup__type_wordlist), adds them to the generated Rust TranslatedString enum, updates per-layout string tables and checksum arrays, refreshes the English translation JSON, and bumps the signed translations merkle_root/commit/datetime. No executable security code is modified, no parsing/formatting logic is introduced, and no new attack surface is created.
Changed components
core/embed/rust/librust_qstr.hcore/embed/rust/src/translations/generated/translated_string.rscore/mocks/trezortranslate_keys.pyicore/translations/en.jsoncore/translations/order.jsoncore/translations/signatures.jsonInspect captured patch +90 / −4
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index 55b00619..126e6e34 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -153,6 +153,8 @@ static void _librust_qstrs(void) {
MP_QSTR_backup__title_backup_wallet;
MP_QSTR_backup__title_create_wallet_backup;
MP_QSTR_backup__title_skip;
+ MP_QSTR_backup__type_n4w1;
+ MP_QSTR_backup__type_wordlist;
MP_QSTR_backup__want_to_skip;
MP_QSTR_backup_check_allowed;
MP_QSTR_backup_failed;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index f0c846d7..3f19dbe2 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1599,6 +1599,8 @@ pub enum TranslatedString {
cardano__credential_intro_template = 1207, // "{0} credential is a {1}"
#[cfg(feature = "universal_fw")]
cardano__key_path = 1208, // "Key path"
+ backup__type_n4w1 = 1209, // {"Bolt": "", "Caesar": "", "Delizia": "", "Eckhart": "N4W1 backup"}
+ backup__type_wordlist = 1210, // {"Bolt": "", "Caesar": "", "Delizia": "", "Eckhart": "Wordlist backup"}
}
impl TranslatedString {
@@ -2815,6 +2817,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -4029,6 +4033,8 @@ impl TranslatedString {
20178,
20201,
20209,
+ 20209,
+ 20209,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -5242,6 +5248,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -6456,6 +6464,8 @@ impl TranslatedString {
20178,
20201,
20209,
+ 20209,
+ 20209,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -7669,6 +7679,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -8883,6 +8895,8 @@ impl TranslatedString {
20178,
20201,
20209,
+ 20209,
+ 20209,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -10096,6 +10110,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -11310,6 +11326,8 @@ impl TranslatedString {
20178,
20201,
20209,
+ 20209,
+ 20209,
];
} else if #[cfg(feature = "layout_caesar")] {
@@ -12524,6 +12542,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -13738,6 +13758,8 @@ impl TranslatedString {
18203,
18226,
18234,
+ 18234,
+ 18234,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -14951,6 +14973,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -16165,6 +16189,8 @@ impl TranslatedString {
18203,
18226,
18234,
+ 18234,
+ 18234,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -17378,6 +17404,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -18592,6 +18620,8 @@ impl TranslatedString {
18203,
18226,
18234,
+ 18234,
+ 18234,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -19805,6 +19835,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -21019,6 +21051,8 @@ impl TranslatedString {
18203,
18226,
18234,
+ 18234,
+ 18234,
];
} else if #[cfg(feature = "layout_delizia")] {
@@ -22233,6 +22267,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -23447,6 +23483,8 @@ impl TranslatedString {
19480,
19503,
19511,
+ 19511,
+ 19511,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -24660,6 +24698,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -25874,6 +25914,8 @@ impl TranslatedString {
19480,
19503,
19511,
+ 19511,
+ 19511,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -27087,6 +27129,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -28301,6 +28345,8 @@ impl TranslatedString {
19480,
19503,
19511,
+ 19511,
+ 19511,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -29514,6 +29560,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "",
+ "",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -30728,6 +30776,8 @@ impl TranslatedString {
19480,
19503,
19511,
+ 19511,
+ 19511,
];
} else if #[cfg(feature = "layout_eckhart")] {
@@ -31942,6 +31992,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "N4W1 backup",
+ "Wordlist backup",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -33156,6 +33208,8 @@ impl TranslatedString {
20479,
20502,
20510,
+ 20521,
+ 20536,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -34369,6 +34423,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "N4W1 backup",
+ "Wordlist backup",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -35583,6 +35639,8 @@ impl TranslatedString {
20479,
20502,
20510,
+ 20521,
+ 20536,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -36796,6 +36854,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "N4W1 backup",
+ "Wordlist backup",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -38010,6 +38070,8 @@ impl TranslatedString {
20479,
20502,
20510,
+ 20521,
+ 20536,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -39223,6 +39285,8 @@ impl TranslatedString {
"Your address",
"{0} credential is a {1}",
"Key path",
+ "N4W1 backup",
+ "Wordlist backup",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -40437,6 +40501,8 @@ impl TranslatedString {
20479,
20502,
20510,
+ 20521,
+ 20536,
];
}
@@ -40492,6 +40558,8 @@ impl TranslatedString {
(Qstr::MP_QSTR_backup__title_backup_wallet, Self::backup__title_backup_wallet),
(Qstr::MP_QSTR_backup__title_create_wallet_backup, Self::backup__title_create_wallet_backup),
(Qstr::MP_QSTR_backup__title_skip, Self::backup__title_skip),
+ (Qstr::MP_QSTR_backup__type_n4w1, Self::backup__type_n4w1),
+ (Qstr::MP_QSTR_backup__type_wordlist, Self::backup__type_wordlist),
(Qstr::MP_QSTR_backup__want_to_skip, Self::backup__want_to_skip),
(Qstr::MP_QSTR_bitcoin__commitment_data, Self::bitcoin__commitment_data),
(Qstr::MP_QSTR_bitcoin__confirm_locktime, Self::bitcoin__confirm_locktime),
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index f4fbdecf..4f9afe80 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -48,6 +48,8 @@ class TR:
backup__title_backup_wallet: str = "Back up wallet"
backup__title_create_wallet_backup: str = "Create wallet backup"
backup__title_skip: str = "Skip backup"
+ backup__type_n4w1: str = "N4W1 backup"
+ backup__type_wordlist: str = "Wordlist backup"
backup__want_to_skip: str = "Are you sure you want to skip the backup?"
bitcoin__commitment_data: str = "Commitment data"
bitcoin__confirm_locktime: str = "Confirm Locktime"
diff --git a/core/translations/en.json b/core/translations/en.json
index 8d06599f..988c89e9 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -110,6 +110,18 @@
},
"backup__title_create_wallet_backup": "Create wallet backup",
"backup__title_skip": "Skip backup",
+ "backup__type_n4w1": {
+ "Bolt": "",
+ "Caesar": "",
+ "Delizia": "",
+ "Eckhart": "N4W1 backup"
+ },
+ "backup__type_wordlist": {
+ "Bolt": "",
+ "Caesar": "",
+ "Delizia": "",
+ "Eckhart": "Wordlist backup"
+ },
"backup__want_to_skip": {
"Bolt": "Are you sure you want to skip the backup?",
"Caesar": "Are you sure you want to skip the backup?",
diff --git a/core/translations/order.json b/core/translations/order.json
index 2042ce40..42aeb3f8 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1207,5 +1207,7 @@
"1205": "ethereum__withdraw_intro",
"1206": "ethereum__your_address",
"1207": "cardano__credential_intro_template",
- "1208": "cardano__key_path"
+ "1208": "cardano__key_path",
+ "1209": "backup__type_n4w1",
+ "1210": "backup__type_wordlist"
}
diff --git a/core/translations/signatures.json b/core/translations/signatures.json
index bd273d43..c513a7c3 100644
--- a/core/translations/signatures.json
+++ b/core/translations/signatures.json
@@ -1,8 +1,8 @@
{
"current": {
- "merkle_root": "9151bf77ea33c3b3e3b0caa96e0ddbdf7010cd33660eb115a74e91b3a1379e28",
- "datetime": "2026-04-08T09:17:15.267064+00:00",
- "commit": "59c326a41be65a429ad6fa348f89f77a35e25955"
+ "merkle_root": "1939f1371a203c46be954ab664d6e000621acaffbf59c56ee53c2e5c687f1d3c",
+ "datetime": "2026-04-16T11:12:30.754295+00:00",
+ "commit": "bcbe3d482e45936a68a5aa2333eb953dd443c29d"
},
"history": [
{
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.