From b326501fc3d432cd8d6faa2d510285a998a141c9 Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 13 Jun 2025 01:07:10 +0800 Subject: [PATCH] chore: unify i18n resolve in dev Signed-off-by: Innei --- apps/desktop/configs/vite.render.config.ts | 2 ++ apps/desktop/plugins/vite/locales-json.ts | 41 ++++++++++++++++++++++ apps/desktop/vite.config.ts | 1 + 3 files changed, 44 insertions(+) create mode 100644 apps/desktop/plugins/vite/locales-json.ts diff --git a/apps/desktop/configs/vite.render.config.ts b/apps/desktop/configs/vite.render.config.ts index a881d8a30..d4d169a1f 100644 --- a/apps/desktop/configs/vite.render.config.ts +++ b/apps/desktop/configs/vite.render.config.ts @@ -12,6 +12,7 @@ import { getGitHash } from "../../../scripts/lib" import { astPlugin } from "../plugins/vite/ast" import { circularImportRefreshPlugin } from "../plugins/vite/hmr" import { customI18nHmrPlugin } from "../plugins/vite/i18n-hmr" +import { localesJsonPlugin } from "../plugins/vite/locales-json" import i18nCompleteness from "../plugins/vite/utils/i18n-completeness" const pkgDir = resolve(dirname(fileURLToPath(import.meta.url)), "..") @@ -73,6 +74,7 @@ export const viteRenderBaseConfig = { }) }, }, + localesJsonPlugin(), react({ // jsxImportSource: "@welldone-software/why-did-you-render", // <----- }), diff --git a/apps/desktop/plugins/vite/locales-json.ts b/apps/desktop/plugins/vite/locales-json.ts new file mode 100644 index 000000000..d649f58e1 --- /dev/null +++ b/apps/desktop/plugins/vite/locales-json.ts @@ -0,0 +1,41 @@ +import path from "node:path" +import { fileURLToPath } from "node:url" + +import { set } from "es-toolkit/compat" +import type { Plugin } from "vite" + +const __dirname = fileURLToPath(new URL(".", import.meta.url)) +const localesDir = path.resolve(__dirname, "../../../../locales") + +export function localesJsonPlugin(): Plugin { + let isBuild = false + return { + name: "locales-json-transform", + enforce: "pre", + configResolved(config) { + isBuild = config.command === "build" + }, + async transform(code, id) { + if (isBuild) { + return null + } + if (!id.includes(localesDir) || !id.endsWith(".json")) { + return null + } + + const content = JSON.parse(code) + const obj = {} + + const keys = Object.keys(content as object) + for (const accessorKey of keys) { + set(obj, accessorKey, (content as any)[accessorKey]) + } + + console.info("[locales-json-transform] Transformed:", id) + return { + code: JSON.stringify(obj), + map: null, + } + }, + } +} diff --git a/apps/desktop/vite.config.ts b/apps/desktop/vite.config.ts index d33871480..d2cd9ce19 100644 --- a/apps/desktop/vite.config.ts +++ b/apps/desktop/vite.config.ts @@ -137,6 +137,7 @@ export default ({ mode }) => { }, plugins: [ ...((viteRenderBaseConfig.plugins ?? []) as any), + localesPlugin(), isWebBuild && VitePWA({