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

@ -509,11 +509,13 @@ pub fn fetch(
(false, false) => "plain",
};
let mut args = fluent_bundle::FluentArgs::new();
args.set("variant", variant);
args.set("total", fetched.total as i64);
args.set("stored", fetched.stored as i64);
args.set("rejected", fetched.rejected.len() as i64);
Ok(i18n::t_args("fetch-result-note", Some(&args)))
Ok(i18n::t_args(
&format!("fetch-result-note-{variant}"),
Some(&args),
))
}
/// Fields fumi itself attaches to every message (sec 5.7, 5.8); a
@ -634,10 +636,9 @@ pub fn send(
(None, false) => "plain".to_string(),
};
let mut args = fluent_bundle::FluentArgs::new();
args.set("variant", variant);
args.set("address", addr.short());
args.set("bytes", sent.bytes as i64);
let mut note = i18n::t_args("send-result-note", Some(&args));
let mut note = i18n::t_args(&format!("send-result-note-{variant}"), Some(&args));
if let Some(warning) = sent.warning {
// Fumi's own warning text, appended as a second, independent
// clause rather than folded into the catalogue — it isn't ours
@ -1112,12 +1113,11 @@ mod tests {
#[test]
fn interpolated_messages_carry_no_bidi_isolation_marks() {
let mut args = fluent_bundle::FluentArgs::new();
args.set("variant", "plain");
args.set("total", 5i64);
args.set("stored", 5i64);
args.set("rejected", 0i64);
assert_eq!(
i18n::t_args("fetch-result-note", Some(&args)),
i18n::t_args("fetch-result-note-plain", Some(&args)),
"5 fetched, 5 stored"
);
}

View file

@ -1810,11 +1810,13 @@ fn render(model: &Carrier, w: &mut CarrierWidgets, sender: &ComponentSender<Carr
// `contact_state` collapses to accepted/blocked once a token
// exists, which says nothing about where the key came from —
// so the server's pin state is spelled out beside it.
let mut meta_args = fluent_bundle::FluentArgs::new();
meta_args.set("state", contact_state(contact));
meta_args.set("pinned", if contact.pinned { "yes" } else { "no" });
let contact_meta_id = if contact.pinned {
"contact-meta-line-yes"
} else {
"contact-meta-line-no"
};
w.article_meta
.set_text(&i18n::t_args("contact-meta-line", Some(&meta_args)));
.set_text(&i18n::t1(contact_meta_id, "state", contact_state(contact)));
let mut body = detail_body(&contact.address, &contact.key, &contact.fingerprint);
if !contact.server.is_empty() {
body.push_str(&format!(
@ -1944,13 +1946,17 @@ fn render(model: &Carrier, w: &mut CarrierWidgets, sender: &ComponentSender<Carr
} else {
address
};
let mail_meta_id = if msg.kept {
"mail-meta-line-yes"
} else {
"mail-meta-line-no"
};
let mut meta_args = fluent_bundle::FluentArgs::new();
meta_args.set("label", label);
meta_args.set("from", from);
meta_args.set("time", escape(&ops::when(msg.time)));
meta_args.set("id", msg.id[..msg.id.len().min(8)].to_string());
meta_args.set("kept", if msg.kept { "yes" } else { "no" });
let meta = i18n::t_args("mail-meta-line", Some(&meta_args));
let meta = i18n::t_args(mail_meta_id, Some(&meta_args));
w.article_meta.set_markup(&meta);
let headers: Vec<String> = msg
.headers