Merge main: the list subject stays notranslate and gains its translated fallback

Both sides of the conflict belong. The span holds a subject, which is the
sender's words and not ours to machine-translate; the text shown when
there is no subject is ours, and should follow the interface language.
This commit is contained in:
2026-08-31 14:44:30 -07:00
7 changed files with 117 additions and 13 deletions
+7 -2
View File
@@ -18,7 +18,7 @@ import { MailView } from "@/views/mail/MailView";
import { ComposerDock } from "@/views/compose/ComposerDock";
import { setUnreadBadge } from "@/lib/notify";
import { useSettings, syncedPart } from "@/store/settings";
import { armSettingsSync, loadRemoteSettings, queueSettingsPush, settingsSyncAvailable } from "@/lib/settingsSync";
import { armSettingsSync, loadRemoteSettings, queueSettingsPush, settingsAlreadyLoadedFor, settingsSyncAvailable } from "@/lib/settingsSync";
import { listenForVerification, renewWebPush } from "@/lib/webpushEnable";
import { useLanguageVersion, whenLanguageReady } from "@/lib/i18n";
@@ -84,8 +84,13 @@ function AuthedApp() {
// Settings that live with the account rather than the browser. The cached
// ones have already painted, so this only has to correct them (issue #54).
//
// Once per account, not once per mount: this subtree is keyed on the
// language version, so picking a language throws it away and builds it
// again. Re-reading the settings file there would apply a copy written
// before the change and undo it.
useEffect(() => {
if (!accountId) return;
if (settingsAlreadyLoadedFor(accountId)) return;
let cancelled = false;
void (async () => {
const remote = await loadRemoteSettings();