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,