fix(l10n): change words__ into buttons__ in code
What changed, and why it matters
This commit is a straightforward internal cleanup of translation key names. It changes labels like 'words__continue_anyway' to 'buttons__continue_anyway' in code that displays on-screen buttons and menu items. The actual user-facing text shown on the device is unchanged; only the internal identifier used to look up that text was renamed. There is no security-relevant change.
No security action needed. Treat as a normal localization/labeling refactor.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch updates TR (translation) namespace references from the ‘words__’ prefix to the ‘buttons__’ prefix across Rust UI flows and Python layout helpers. Examples include TR::words__continue_anyway → TR::buttons__continue_anyway and TR.words__confirm → TR.buttons__confirm. These keys map to the same localized strings; the rename aligns translation catalog organization with UI component type. No logic, behavior, or trust-boundary checks were modified.
Changed components
core/embed/rust/src/ui/layout_delizia/flow/show_danger.rscore/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rscore/embed/rust/src/ui/layout_eckhart/flow/confirm_fido.rscore/embed/rust/src/ui/layout_eckhart/flow/show_danger.rscore/src/apps/homescreen/device_menu.pycore/src/apps/solana/layout.pycore/src/trezor/ui/layouts/bolt/__init__.pycore/src/trezor/ui/layouts/caesar/__init__.pycore/src/trezor/ui/layouts/delizia/__init__.pycore/src/trezor/ui/layouts/eckhart/__init__.pytests/input_flows.pyInspect captured patch +21 / −21
### core/embed/rust/src/ui/layout_delizia/flow/show_danger.rs
@@ -48,10 +48,10 @@ pub fn new_show_danger(
value: TString<'static>,
verb_cancel: Option<TString<'static>>,
) -> Result<SwipeFlow, error::Error> {
- let confirm: TString = TR::words__continue_anyway.into();
+ let confirm: TString = TR::buttons__continue_anyway.into();
let done_title: TString = TR::words__operation_cancelled.into();
- let verb_cancel = verb_cancel.unwrap_or(TR::words__cancel_and_exit.into());
+ let verb_cancel = verb_cancel.unwrap_or(TR::buttons__cancel_and_exit.into());
// Message
let paragraphs = [
### core/embed/rust/src/ui/layout_eckhart/firmware/device_menu_screen.rs
@@ -729,7 +729,7 @@ impl DeviceMenuScreen {
TR::homescreen__title_pin_not_set.into(),
DeviceMenuMsg::SetOrChangePin,
)
- .with_subtext(Some((TR::words__set.into(), None)))
+ .with_subtext(Some((TR::buttons__set.into(), None)))
.light_warn();
items.add(item);
}
@@ -838,7 +838,7 @@ impl DeviceMenuScreen {
let mut menu = VerticalMenu::empty();
if device_screen.connected {
menu.item(Button::new_menu_item(
- TR::words__disconnect.into(),
+ TR::buttons__disconnect.into(),
theme::menu_item_title(),
));
}
@@ -847,7 +847,7 @@ impl DeviceMenuScreen {
theme::menu_item_title(),
));
menu.item(Button::new_menu_item(
- TR::words__forget.into(),
+ TR::buttons__forget.into(),
theme::menu_item_title_orange(),
));
*self.active_screen.deref_mut() = ActiveScreen::Device(
### core/embed/rust/src/ui/layout_eckhart/flow/confirm_fido.rs
@@ -137,7 +137,7 @@ pub fn new_confirm_fido(
ActionBar::new_cancel_confirm()
} else {
ActionBar::new_single(
- Button::with_text(TR::words__authenticate.into())
+ Button::with_text(TR::buttons__authenticate.into())
.styled(theme::button_confirm())
.with_gradient(Gradient::SignGreen),
)
### core/embed/rust/src/ui/layout_eckhart/flow/show_danger.rs
@@ -53,7 +53,7 @@ pub fn new_show_danger(
menu_title: Option<TString<'static>>,
verb_cancel: Option<TString<'static>>,
) -> Result<SwipeFlow, error::Error> {
- let verb_cancel = verb_cancel.unwrap_or(TR::words__cancel_and_exit.into());
+ let verb_cancel = verb_cancel.unwrap_or(TR::buttons__cancel_and_exit.into());
// Message
let paragraphs = [
@@ -83,7 +83,7 @@ pub fn new_show_danger(
VerticalMenu::<ShortMenuVec>::empty()
.with_item(Button::new_menu_item(verb_cancel, theme::menu_item_title()))
.with_item(Button::new_menu_item(
- TR::words__continue_anyway.into(),
+ TR::buttons__continue_anyway.into(),
theme::menu_item_title_orange(),
)),
)
### core/src/apps/homescreen/device_menu.py
@@ -205,7 +205,7 @@ async def handle_ReviewFailedBackup() -> None:
with trezorui_api.show_warning(
title=TR.homescreen__title_backup_failed,
- button=TR.words__wipe,
+ button=TR.buttons__wipe,
description=TR.wipe__start_again,
danger=True,
) as layout:
### core/src/apps/solana/layout.py
@@ -436,7 +436,7 @@ async def confirm_stake_withdrawer(withdrawer_account: bytes, chunkify: bool) ->
await show_danger(
title=TR.words__important,
content=TR.solana__stake_withdrawal_warning,
- verb_cancel=TR.words__cancel_and_exit,
+ verb_cancel=TR.buttons__cancel_and_exit,
br_name="confirm_stake_warning",
)
await confirm_address(
### core/src/trezor/ui/layouts/bolt/__init__.py
@@ -532,7 +532,7 @@ async def confirm_payment_request(
subtitle=TR.words__provider,
value=recipient_name,
description=None,
- verb=TR.words__confirm,
+ verb=TR.buttons__confirm,
verb_cancel=None,
chunkify=False,
info=True,
@@ -1068,13 +1068,13 @@ async def confirm_blob_prefix(
)
confirmed_len += len(prefix)
- button_text = TR.words__show_next if confirmed_len < total_len else None
+ button_text = TR.buttons__show_next if confirmed_len < total_len else None
show_more = await should_show_more(
title=TR.ethereum__title_input_data_bytes.format(confirmed_len, total_len),
items=[(utils.hexlify_if_bytes(part), True) for part in prefix_parts],
button_text=button_text, # will return True
- confirm=TR.words__confirm_all, # will return False
+ confirm=TR.buttons__confirm_all, # will return False
br_name=br_name,
br_code=br_code,
)
### core/src/trezor/ui/layouts/caesar/__init__.py
@@ -1118,7 +1118,7 @@ async def confirm_blob_prefix(
title=TR.ethereum__title_input_data_bytes.format(confirmed_len, total_len),
para=[(utils.hexlify_if_bytes(prefix), True)],
button_text=button_text, # will return True
- confirm=TR.words__confirm_all, # will return False
+ confirm=TR.buttons__confirm_all, # will return False
br_name=br_name,
br_code=br_code,
)
### core/src/trezor/ui/layouts/delizia/__init__.py
@@ -174,7 +174,7 @@ def confirm_path_warning(
"path_warning",
description,
value=path,
- verb_cancel=TR.words__cancel_and_exit,
+ verb_cancel=TR.buttons__cancel_and_exit,
br_code=ButtonRequestType.UnknownDerivationPath,
)
### core/src/trezor/ui/layouts/eckhart/__init__.py
@@ -138,7 +138,7 @@ def confirm_path_warning(
value=path,
title=TR.words__important,
menu_title=TR.words__receive,
- verb_cancel=TR.words__cancel_and_exit,
+ verb_cancel=TR.buttons__cancel_and_exit,
br_code=ButtonRequestType.UnknownDerivationPath,
)
@@ -157,7 +157,7 @@ def confirm_multisig_different_paths_warning() -> Awaitable[None]:
title=TR.words__important,
menu_title=TR.words__receive,
br_code=ButtonRequestType.Warning,
- verb_cancel=TR.words__cancel_and_exit,
+ verb_cancel=TR.buttons__cancel_and_exit,
)
@@ -371,7 +371,7 @@ async def show_warning(
button: str | None = None,
br_code: ButtonRequestType = ButtonRequestType.Warning,
) -> None:
- button = button or TR.words__continue_anyway # def_arg
+ button = button or TR.buttons__continue_anyway # def_arg
with trezorui_api.show_warning(
title=TR.words__important,
button=button,
@@ -1029,7 +1029,7 @@ async def confirm_blob_prefix(
prefix = data[: 9 * 9] # 9 rows x 18 hex digits
confirmed_len += len(prefix)
verb = (
- TR.words__show_next if confirmed_len < total_len else TR.buttons__continue
+ TR.buttons__show_next if confirmed_len < total_len else TR.buttons__continue
)
show_more = not await should_show_more(
### tests/input_flows.py
@@ -3229,7 +3229,7 @@ def input_flow_delizia(self) -> BRGeneratorType:
text = layout.footer().lower()
# hi priority warning
hi_prio = (
- TR.words__cancel_and_exit,
+ TR.buttons__cancel_and_exit,
TR.send__cancel_sign,
TR.send__cancel_transaction,
)
@@ -3264,7 +3264,7 @@ def input_flow_eckhart(self) -> BRGeneratorType:
text = layout.action_bar().lower()
# hi priority warning
hi_prio = (
- TR.words__cancel_and_exit,
+ TR.buttons__cancel_and_exit,
TR.send__cancel_sign,
TR.send__cancel_transaction,
)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.