From 4976f94ec035548747c586ee945135a5f06cc05e Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 5 Nov 2022 18:07:05 +0800 Subject: [PATCH] core&ui: i18n: fix serialize --- packages/hydrooj/src/interface.ts | 4 ++-- packages/hydrooj/src/lib/i18n.ts | 7 +++++-- packages/ui-default/index.ts | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index dff13fd1..a5c2ce21 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -449,7 +449,7 @@ export interface DiscussionTailReplyDoc { content: string; ip: string; edited?: boolean; - editor?:number; + editor?: number; } export interface BlogDoc { @@ -736,7 +736,7 @@ export interface HydroGlobal { error: typeof import('./error'); Logger: typeof import('./logger').Logger; logger: typeof import('./logger').logger; - locales: Record>; + locales: Record | Record>>; } declare global { diff --git a/packages/hydrooj/src/lib/i18n.ts b/packages/hydrooj/src/lib/i18n.ts index 40f90f3a..6cbab216 100644 --- a/packages/hydrooj/src/lib/i18n.ts +++ b/packages/hydrooj/src/lib/i18n.ts @@ -62,8 +62,11 @@ global.Hydro.locales = new Proxy(translations, { get(self, lang: string) { if (!self[lang]) return {}; return new Proxy(self[lang], { - get(s, key: string) { - return app.i18n.get(key, lang); + get(s, key) { + if (typeof key === 'string') return app.i18n.get(key, lang); + const result = {}; + for (let i = s.length - 1; i; i--) Object.assign(result, s[i]); + return result; }, }); }, diff --git a/packages/ui-default/index.ts b/packages/ui-default/index.ts index b94badf8..ed0749a8 100644 --- a/packages/ui-default/index.ts +++ b/packages/ui-default/index.ts @@ -152,7 +152,7 @@ class UiConstantsHandler extends ResourceHandler { class LanguageHandler extends ResourceHandler { async all({ lang }) { if (!global.Hydro.locales[lang]) lang = SystemModel.get('server.language'); - this.response.body = `window.LOCALES=${JSON.stringify(global.Hydro.locales[lang])};`; + this.response.body = `window.LOCALES=${JSON.stringify(global.Hydro.locales[lang][Symbol.for('iterate')])};`; this.response.type = 'application/javascript'; } }