chore(translations): strings for clear signing
What changed, and why it matters
This commit only adds two new user-facing text strings ('Confirm contract' and 'Intent') to the Trezor firmware's translation system. It does not change any code logic, security checks, or transaction handling. There is no indication this is a security fix or introduces a vulnerability.
No security action required. This is a routine localization/string addition change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit is a translation-only change adding two new string keys: ethereum__confirm_contract and words__intent. It updates generated Rust translation tables, Python mocks, English translation JSON, ordering metadata, and translation signature metadata. No functional code paths are modified. The strings are gated behind the universal_fw feature flag in the Rust generated code, consistent with existing translation entries.
Changed components
core/embed/rust/src/translations/generated/translated_string.rscore/mocks/trezortranslate_keys.pyicore/translations/en.jsoncore/translations/order.jsoncore/translations/signatures.jsoncore/embed/rust/librust_qstr.hInspect captured patch +82 / −4
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index 9c0f9a56..831f5616 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -1001,6 +1001,7 @@ static void _librust_qstrs(void) {
MP_QSTR_words__good_to_know;
MP_QSTR_words__important;
MP_QSTR_words__instructions;
+ MP_QSTR_words__intent;
MP_QSTR_words__keep_it_safe;
MP_QSTR_words__know_what_your_doing;
MP_QSTR_words__led;
@@ -1231,6 +1232,7 @@ static void _librust_qstrs(void) {
MP_QSTR_ethereum__approve_revoke_from;
MP_QSTR_ethereum__approve_to;
MP_QSTR_ethereum__approve_unlimited_template;
+ MP_QSTR_ethereum__confirm_contract;
MP_QSTR_ethereum__contract_address;
MP_QSTR_ethereum__data_size_template;
MP_QSTR_ethereum__eip_7702;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index 2163a36f..68dc2133 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1569,6 +1569,9 @@ pub enum TranslatedString {
words__resource = 1180, // "Resource"
words__votes = 1181, // "Votes"
words__voting = 1182, // "Voting"
+ #[cfg(feature = "universal_fw")]
+ ethereum__confirm_contract = 1183, // "Confirm contract"
+ words__intent = 1184, // "Intent"
}
impl TranslatedString {
@@ -2759,6 +2762,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -3947,6 +3952,8 @@ impl TranslatedString {
21428,
21433,
21439,
+ 21455,
+ 21461,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -5134,6 +5141,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -6322,6 +6331,8 @@ impl TranslatedString {
21428,
21433,
21439,
+ 21455,
+ 21461,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -7509,6 +7520,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -8697,6 +8710,8 @@ impl TranslatedString {
21428,
21433,
21439,
+ 21455,
+ 21461,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -9884,6 +9899,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -11072,6 +11089,8 @@ impl TranslatedString {
21428,
21433,
21439,
+ 21455,
+ 21461,
];
} else if #[cfg(feature = "layout_caesar")] {
@@ -12260,6 +12279,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -13448,6 +13469,8 @@ impl TranslatedString {
18656,
18661,
18667,
+ 18683,
+ 18689,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -14635,6 +14658,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -15823,6 +15848,8 @@ impl TranslatedString {
18656,
18661,
18667,
+ 18683,
+ 18689,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -17010,6 +17037,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -18198,6 +18227,8 @@ impl TranslatedString {
18656,
18661,
18667,
+ 18683,
+ 18689,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -19385,6 +19416,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -20573,6 +20606,8 @@ impl TranslatedString {
18656,
18661,
18667,
+ 18683,
+ 18689,
];
} else if #[cfg(feature = "layout_delizia")] {
@@ -21761,6 +21796,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -22949,6 +22986,8 @@ impl TranslatedString {
20512,
20517,
20523,
+ 20539,
+ 20545,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -24136,6 +24175,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -25324,6 +25365,8 @@ impl TranslatedString {
20512,
20517,
20523,
+ 20539,
+ 20545,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -26511,6 +26554,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -27699,6 +27744,8 @@ impl TranslatedString {
20512,
20517,
20523,
+ 20539,
+ 20545,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -28886,6 +28933,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -30074,6 +30123,8 @@ impl TranslatedString {
20512,
20517,
20523,
+ 20539,
+ 20545,
];
} else if #[cfg(feature = "layout_eckhart")] {
@@ -31262,6 +31313,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -32450,6 +32503,8 @@ impl TranslatedString {
21221,
21226,
21232,
+ 21248,
+ 21254,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -33637,6 +33692,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -34825,6 +34882,8 @@ impl TranslatedString {
21221,
21226,
21232,
+ 21248,
+ 21254,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -36012,6 +36071,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -37200,6 +37261,8 @@ impl TranslatedString {
21221,
21226,
21232,
+ 21248,
+ 21254,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -38387,6 +38450,8 @@ impl TranslatedString {
"Resource",
"Votes",
"Voting",
+ "Confirm contract",
+ "Intent",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -39575,6 +39640,8 @@ impl TranslatedString {
21221,
21226,
21232,
+ 21248,
+ 21254,
];
}
@@ -40092,6 +40159,8 @@ impl TranslatedString {
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__approve_unlimited_template, Self::ethereum__approve_unlimited_template),
#[cfg(feature = "universal_fw")]
+ (Qstr::MP_QSTR_ethereum__confirm_contract, Self::ethereum__confirm_contract),
+ #[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__contract_address, Self::ethereum__contract_address),
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__data_size_template, Self::ethereum__data_size_template),
@@ -41086,6 +41155,7 @@ impl TranslatedString {
(Qstr::MP_QSTR_words__good_to_know, Self::words__good_to_know),
(Qstr::MP_QSTR_words__important, Self::words__important),
(Qstr::MP_QSTR_words__instructions, Self::words__instructions),
+ (Qstr::MP_QSTR_words__intent, Self::words__intent),
(Qstr::MP_QSTR_words__keep_it_safe, Self::words__keep_it_safe),
(Qstr::MP_QSTR_words__know_what_your_doing, Self::words__know_what_your_doing),
(Qstr::MP_QSTR_words__led, Self::words__led),
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index 46c053cc..c776e6b0 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -336,6 +336,7 @@ class TR:
ethereum__approve_revoke_from: str = "Revoke from"
ethereum__approve_to: str = "Approve to"
ethereum__approve_unlimited_template: str = "Approving unlimited amount of {0}"
+ ethereum__confirm_contract: str = "Confirm contract"
ethereum__contract_address: str = "Provider contract address"
ethereum__data_size_template: str = "Size: {0} bytes"
ethereum__eip_7702: str = "Authorize the following contract as an EIP-7702 on your account"
@@ -1084,6 +1085,7 @@ class TR:
words__good_to_know: str = "Good to know"
words__important: str = "Important"
words__instructions: str = "Instructions"
+ words__intent: str = "Intent"
words__keep_it_safe: str = "Keep it safe!"
words__know_what_your_doing: str = "Continue only if you know what you are doing!"
words__led: str = "LED"
diff --git a/core/translations/en.json b/core/translations/en.json
index 34643f61..159b7e27 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -708,6 +708,7 @@
"ethereum__approve_revoke_from": "Revoke from",
"ethereum__approve_to": "Approve to",
"ethereum__approve_unlimited_template": "Approving unlimited amount of {0}",
+ "ethereum__confirm_contract": "Confirm contract",
"ethereum__contract_address": "Provider contract address",
"ethereum__data_size_template": "Size: {0} bytes",
"ethereum__eip_7702": {
@@ -2576,6 +2577,7 @@
"words__good_to_know": "Good to know",
"words__important": "Important",
"words__instructions": "Instructions",
+ "words__intent": "Intent",
"words__keep_it_safe": {
"Bolt": "",
"Caesar": "Keep it safe!",
diff --git a/core/translations/order.json b/core/translations/order.json
index 8ef9c12a..2dfbef97 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1181,5 +1181,7 @@
"1179": "words__show_next",
"1180": "words__resource",
"1181": "words__votes",
- "1182": "words__voting"
+ "1182": "words__voting",
+ "1183": "ethereum__confirm_contract",
+ "1184": "words__intent"
}
diff --git a/core/translations/signatures.json b/core/translations/signatures.json
index 5c1b5ece..1fc8099f 100644
--- a/core/translations/signatures.json
+++ b/core/translations/signatures.json
@@ -1,8 +1,8 @@
{
"current": {
- "merkle_root": "4aff5a6adc7ea05e6cd94250d8813a8b97289750fcb53b3f0a943b211dacc73e",
- "datetime": "2026-03-09T13:37:01.199295+00:00",
- "commit": "bcbe8c0a44438b889f25f92e6b93dd21db4750dd"
+ "merkle_root": "68ec0feb2146b9ed5a1e3f6e73423f40c61e15b08bd46c88acecbfced6c8a020",
+ "datetime": "2026-03-17T07:43:43.605983+00:00",
+ "commit": "2678c12208a836399a462c4a848a550c3db53f0f"
},
"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.