refactor: flatten Fluent selectors into one message per variant

This commit is contained in:
randogoth 2026-10-08 22:32:52 +03:00
parent 06952cd20e
commit c2525fd0f0
3 changed files with 48 additions and 48 deletions

View file

@ -33,34 +33,32 @@ mail-message-not-found = Message not found.
## Fetch — the status note after a fetch completes
##
## `$variant` picks the one combination of "N rejected" and "(cancelled)"
## that applies, so each case reads as one complete sentence rather than
## stitched-together fragments.
## Split from one selector into one message per combination of "N
## rejected" and "(cancelled)" that can apply; the caller in ops.rs
## picks the id to match, since a flat message can't branch on a
## variable itself.
fetch-result-note = { $variant ->
[rejected] { $total } fetched, { $stored } stored, { $rejected } rejected
[cancelled] { $total } fetched, { $stored } stored (cancelled)
[rejected-cancelled] { $total } fetched, { $stored } stored, { $rejected } rejected (cancelled)
*[plain] { $total } fetched, { $stored } stored
}
fetch-result-note-rejected = { $total } fetched, { $stored } stored, { $rejected } rejected
fetch-result-note-cancelled = { $total } fetched, { $stored } stored (cancelled)
fetch-result-note-rejected-cancelled = { $total } fetched, { $stored } stored, { $rejected } rejected (cancelled)
fetch-result-note-plain = { $total } fetched, { $stored } stored
## Send — the status note after a send completes
##
## `$variant` picks the one combination of trust-change clause and
## accept-token clause that applies, each spelled out as a full sentence.
## Any warning fumi itself reports is appended separately in code, since
## that text is fumi's own and not part of this catalogue.
## Split from one selector into one message per combination of
## trust-change clause and accept-token clause that can apply; the
## caller in ops.rs picks the id to match. Any warning fumi itself
## reports is appended separately in code, since that text is fumi's
## own and not part of this catalogue.
send-result-note = { $variant ->
[token] Sent to { $address } ({ $bytes } bytes), accept token attached
[unverified] Sent to { $address } ({ $bytes } bytes); new contact learned from an unpinned server (unverified)
[unverified-token] Sent to { $address } ({ $bytes } bytes), accept token attached; new contact learned from an unpinned server (unverified)
[tofu] Sent to { $address } ({ $bytes } bytes); new contact learned (trust on first use)
[tofu-token] Sent to { $address } ({ $bytes } bytes), accept token attached; new contact learned (trust on first use)
[rotated] Sent to { $address } ({ $bytes } bytes); contact rotated to a new key (chain verified)
[rotated-token] Sent to { $address } ({ $bytes } bytes), accept token attached; contact rotated to a new key (chain verified)
*[plain] Sent to { $address } ({ $bytes } bytes)
}
send-result-note-token = Sent to { $address } ({ $bytes } bytes), accept token attached
send-result-note-unverified = Sent to { $address } ({ $bytes } bytes); new contact learned from an unpinned server (unverified)
send-result-note-unverified-token = Sent to { $address } ({ $bytes } bytes), accept token attached; new contact learned from an unpinned server (unverified)
send-result-note-tofu = Sent to { $address } ({ $bytes } bytes); new contact learned (trust on first use)
send-result-note-tofu-token = Sent to { $address } ({ $bytes } bytes), accept token attached; new contact learned (trust on first use)
send-result-note-rotated = Sent to { $address } ({ $bytes } bytes); contact rotated to a new key (chain verified)
send-result-note-rotated-token = Sent to { $address } ({ $bytes } bytes), accept token attached; contact rotated to a new key (chain verified)
send-result-note-plain = Sent to { $address } ({ $bytes } bytes)
## Background-operation status notes
##
@ -143,15 +141,13 @@ contacts-import-button = Import
## Mail — the open-message meta line
##
## `$kept` picks the one variant that applies, each a full sentence,
## rather than an optional clause spliced onto a shared prefix.
## Split from one selector into one message per variant, each a full
## sentence; the caller in view.rs picks `-yes`/`-no` to match `$kept`.
mail-meta-to = to
mail-meta-from = from
mail-meta-line = { $kept ->
*[no] { $label } { $from } · { $time } UTC · id { $id }…
[yes] { $label } { $from } · { $time } UTC · id { $id }… · a server copy still exists
}
mail-meta-line-no = { $label } { $from } · { $time } UTC · id { $id }…
mail-meta-line-yes = { $label } { $from } · { $time } UTC · id { $id }… · a server copy still exists
mail-no-subject = (no subject)
mail-no-reply-address = no reply address: can't accept or block
contacts-empty-hint = no contacts
@ -173,8 +169,7 @@ contacts-pin-button-unfetched = Pin server
mail-empty-title = No message selected
mail-empty-description = Pick a message from the list above to read it.
# The two sentences shown under Fetch when the inbox is empty.
mail-empty-hint = Fetching removes mail from the server once it's stored here.
Turn on "Leave mail on server" in Settings to keep it there instead.
mail-empty-hint = Fetching removes mail from the server once it's stored here. Turn on "Leave mail on server" in Settings to keep it there instead.
detail-qr-tooltip = Show the address as a QR code
detail-copy-tooltip = Copy the address
@ -194,11 +189,10 @@ contact-state-blocked = blocked
contact-state-verified = verified
contact-state-tofu = trust on first use
# `$state` is one of the four words above, already resolved by the caller
# through `contact_state`; this message only adds the server's pin state.
contact-meta-line = { $state } · server { $pinned ->
[yes] pinned
*[no] not pinned
}
# through `contact_state`. Split from one selector into one message per
# pin state; the caller in view.rs picks `-yes`/`-no` to match `$pinned`.
contact-meta-line-yes = { $state } · server pinned
contact-meta-line-no = { $state } · server not pinned
## Detail pane — the monospace key/value block shared by contacts and the
## own identity view. Column widths are padded to these labels in code