fix(i18n): restore locale switching and release metadata
This commit is contained in:
1 parent
a95d3652ca
commit
223ad634d7
7 files changed
+38
-18
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import vm from "node:vm";
|
||||
const worker = await import(new URL("../dist/server/index.js", import.meta.url));
|
||||
assert.equal(typeof worker.default?.fetch, "function");
|
||||
const assets = await import(new URL("../dist/server/assets.js", import.meta.url));
|
||||
@@ -33,7 +34,26 @@ for (const script of [assets.tasksJs, assets.calendarJs]) {
|
||||
assert.doesNotMatch(script, /createTreeWalker|NodeFilter\.SHOW_TEXT/);
|
||||
}
|
||||
const source = await readFile(new URL("../public/index.html", import.meta.url), "utf8");
|
||||
for (const [, inlineScript] of source.matchAll(/<script>([\s\S]*?)<\/script>/g)) new vm.Script(inlineScript);
|
||||
assert.doesNotMatch(source, /localizeDynamicText|createTreeWalker|NodeFilter\.SHOW_TEXT|const ZH=/);
|
||||
assert.match(source, /id==='system'\)window\.systemApp\(c\)/);
|
||||
assert.match(source, /id==='today'\)window\.today\(c\)/);
|
||||
assert.match(assets.i18nRenderersJs, /window\.setLanguage = value/);
|
||||
assert.match(assets.i18nRenderersJs, /window\.renderAll\(\)/);
|
||||
assert.doesNotMatch(source, /Version 0\.1|Schema v1/);
|
||||
const langSource = source.match(/function browserLanguage\(\).*?function i18n\(key/)[0].replace(/function i18n\(key[\s\S]*$/, "");
|
||||
let preferences = { language: "auto", languageMode: "auto" };
|
||||
const languageContext = vm.createContext({ navigator: { languages: ["zh-CN"], language: "zh-CN" }, settings: () => preferences });
|
||||
vm.runInContext(langSource, languageContext);
|
||||
assert.equal(languageContext.lang(), "zh", "auto mode follows Chinese browser language");
|
||||
languageContext.navigator.languages = ["en-US"];
|
||||
assert.equal(languageContext.lang(), "en", "auto mode follows English browser language");
|
||||
preferences = { language: "zh", languageMode: "manual" };
|
||||
assert.equal(languageContext.lang(), "zh", "manual Chinese choice overrides browser language");
|
||||
preferences = { language: "en", languageMode: "manual" };
|
||||
assert.equal(languageContext.lang(), "en", "manual English choice overrides browser language");
|
||||
preferences = { language: "zh" };
|
||||
assert.equal(languageContext.lang(), "zh", "legacy manual preference survives settings migration");
|
||||
const zhLogin = await worker.default.fetch(new Request("https://life-os.test/", { headers: { "accept-language": "zh-CN,zh;q=0.9" } }), {});
|
||||
assert.match(await zhLogin.text(), /登录 ChatGPT/);
|
||||
const enLogin = await worker.default.fetch(new Request("https://life-os.test/", { headers: { "accept-language": "en-US,en;q=0.9" } }), {});
|
||||
|
||||
Reference in new issue
Block a user