From 9c571b5f9cfb071a616b91510587906626f1eefd Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 28 Sep 2026 09:30:30 +0900 Subject: [PATCH] test(i18n): cover language preference persistence --- scripts/validate.mjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/validate.mjs b/scripts/validate.mjs index 1fa4662..47337b9 100644 --- a/scripts/validate.mjs +++ b/scripts/validate.mjs @@ -72,10 +72,25 @@ assert.equal(localeContext.LifeI18n.language(), "zh", "cloud settings cannot ove localeContext.setLanguage("en"); assert.equal(localeContext.LifeI18n.language(), "en", "manual English choice overrides browser language"); assert.equal(localeContext.LifeI18n.t("app.today"), "TODAY"); +const reloadedManualContext = vm.createContext({ + navigator: { languages: ["en-US"] }, localStorage: makeStorage(), + LifeOSLocales: { en: assets.localeEn, "zh-CN": assets.localeZh }, +}); +reloadedManualContext.window = reloadedManualContext; +vm.runInContext(assets.i18nJs, reloadedManualContext); +assert.equal(reloadedManualContext.LifeI18n.language(), "en", "a reloaded page starts in automatic mode when no manual choice was saved"); localeContext.navigator.languages = ["zh-CN"]; localeContext.setLanguage("auto"); assert.equal(localeContext.LifeI18n.preference(), "auto"); assert.equal(localeContext.LifeI18n.language(), "zh", "auto mode ignores stale cloud preference and follows this device"); +localeContext.setLanguage("en"); +const persistedManualContext = vm.createContext({ + navigator: { languages: ["zh-CN"] }, localStorage, + LifeOSLocales: { en: assets.localeEn, "zh-CN": assets.localeZh }, +}); +persistedManualContext.window = persistedManualContext; +vm.runInContext(assets.i18nJs, persistedManualContext); +assert.equal(persistedManualContext.LifeI18n.language(), "en", "a manually selected language persists across reloads"); const migratedStorage = makeStorage({ lifeos_settings: JSON.stringify({ language: "zh" }) }); const migratedContext = vm.createContext({ navigator: { languages: ["en-US"] }, localStorage: migratedStorage,