From d31528636dd4be1c3168413138546fe0bdb63a19 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Fri, 28 Mar 2025 07:50:05 -0400 Subject: [PATCH] migrate paraglide to v2 --- .vscode/extensions.json | 15 +- apps/desktop/.prettierignore | 2 +- apps/desktop/package.json | 24 +- apps/desktop/project.inlang/project_id | 2 +- apps/desktop/project.inlang/settings.json | 13 +- apps/desktop/src/app.html | 16 +- apps/desktop/src/hooks.server.ts | 19 +- apps/desktop/src/hooks.ts | 8 +- apps/desktop/src/lib/cmds/builtin.ts | 33 +- apps/desktop/src/lib/cmds/ext.ts | 5 +- .../standalone/general-settings.svelte | 14 +- .../standalone/settings/AddDevExtForm.svelte | 3 +- .../install-npm-package-name-form.svelte | 3 +- .../settings/install-tarball-url-form.svelte | 3 +- apps/desktop/src/lib/i18n.ts | 17 - apps/desktop/src/lib/utils/deeplink.ts | 7 +- apps/desktop/src/lib/utils/helper.ts | 8 +- apps/desktop/src/lib/utils/key.ts | 3 +- apps/desktop/src/lib/utils/route.ts | 4 +- apps/desktop/src/routes/+layout.svelte | 32 +- apps/desktop/src/routes/+layout.ts | 10 - apps/desktop/src/routes/app/+layout.svelte | 7 +- apps/desktop/src/routes/app/+layout.ts | 4 +- apps/desktop/src/routes/app/+page.svelte | 5 +- .../src/routes/app/auth/confirm/+page.svelte | 8 +- .../store/[identifier]/+error.svelte | 5 +- .../extension/store/[identifier]/+page.svelte | 7 +- .../app/extension/ui-iframe/+page.svelte | 4 +- .../routes/app/extension/ui-iframe/+page.ts | 6 +- .../app/extension/ui-worker/+page.svelte | 3 +- .../routes/app/extension/ui-worker/+page.ts | 5 +- .../routes/app/help/onboarding/+page.svelte | 5 +- .../src/routes/app/settings/sidebar.svelte | 15 +- .../routes/app/troubleshooters/sidebar.svelte | 7 +- apps/desktop/vite.config.js | 13 +- deno.lock | 822 +++++++---- package.json | 4 +- .../permissions/autogenerated/reference.md | 2 - pnpm-lock.yaml | 1235 +++++++++++++---- 39 files changed, 1645 insertions(+), 753 deletions(-) delete mode 100644 apps/desktop/src/lib/i18n.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 89b5b48..9cdd3d1 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,9 +1,10 @@ { - "recommendations": [ - "svelte.svelte-vscode", - "tauri-apps.tauri-vscode", - "rust-lang.rust-analyzer", - "denoland.vscode-deno", - "tamasfe.even-better-toml" - ] + "recommendations": [ + "svelte.svelte-vscode", + "tauri-apps.tauri-vscode", + "rust-lang.rust-analyzer", + "denoland.vscode-deno", + "tamasfe.even-better-toml", + "inlang.vs-code-extension" + ] } diff --git a/apps/desktop/.prettierignore b/apps/desktop/.prettierignore index b094ded..dfbb7a0 100644 --- a/apps/desktop/.prettierignore +++ b/apps/desktop/.prettierignore @@ -1,2 +1,2 @@ src-tauri -src/lib/paraglide/** \ No newline at end of file +src/lib/paraglide/** diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 04eafea..036e824 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -11,12 +11,13 @@ "lint": "prettier --check . && eslint .", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "tauri": "tauri" + "tauri": "tauri", + "machine-translate": "inlang machine translate --project project.inlang" }, "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.2", - "@inlang/paraglide-sveltekit": "0.16.0", + "@inlang/paraglide-sveltekit": "0.16.1", "@kksh/extension": "workspace:*", "@kksh/svelte5": "^0.1.15", "@kksh/ui": "workspace:*", @@ -30,28 +31,28 @@ "@tauri-apps/plugin-stronghold": "^2.2.0", "@tauri-store/svelte": "^2.1.1", "dompurify": "^3.2.4", - "eslint": "^9.21.0", + "eslint": "^9.23.0", "fuse.js": "^7.1.0", "gsap": "^3.12.7", "kkrpc": "^0.2.2", "lz-string": "^1.5.0", "pretty-bytes": "^6.1.1", "semver": "^7.7.1", - "svelte-inspect-value": "^0.3.0", + "svelte-inspect-value": "^0.5.0", "svelte-sonner": "^0.3.28", - "sveltekit-superforms": "^2.23.1", + "sveltekit-superforms": "^2.24.0", "tauri-plugin-clipboard-api": "^2.1.11", "tauri-plugin-shellx-api": "^2.0.16", - "tauri-plugin-svelte": "1.2.1", + "tauri-plugin-svelte": "1.2.2", "tauri-plugin-user-input-api": "workspace:*", "uuid": "^11.1.0" }, "devDependencies": { "@eslint/js": "^9.21.0", - "@inlang/paraglide-js": "1.11.8", + "@inlang/paraglide-js": "2.0.6", "@kksh/types": "workspace:*", "@sveltejs/adapter-static": "^3.0.8", - "@sveltejs/kit": "^2.17.3", + "@sveltejs/kit": "^2.20.2", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/container-queries": "^0.1.1", @@ -76,8 +77,9 @@ "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "tslib": "^2.8.1", - "typescript": "^5.6.3", - "typescript-eslint": "^8.25.0", - "vite": "^6.2.0" + "typescript": "^5.8.2", + "typescript-eslint": "^8.28.0", + "vite": "^6.2.3", + "@inlang/cli": "^3.0.8" } } diff --git a/apps/desktop/project.inlang/project_id b/apps/desktop/project.inlang/project_id index fe891a1..2de8371 100644 --- a/apps/desktop/project.inlang/project_id +++ b/apps/desktop/project.inlang/project_id @@ -1 +1 @@ -9800f324a732adb2ed22a4b600a0025820caaba8c4d886b0949b04616bba4726 \ No newline at end of file +YXlr9bPxPwU80SiXPp \ No newline at end of file diff --git a/apps/desktop/project.inlang/settings.json b/apps/desktop/project.inlang/settings.json index 75df584..8b58b92 100644 --- a/apps/desktop/project.inlang/settings.json +++ b/apps/desktop/project.inlang/settings.json @@ -1,15 +1,12 @@ { "$schema": "https://inlang.com/schema/project-settings", - "sourceLanguageTag": "en", - "languageTags": ["en", "zh", "ru", "pt", "vi", "de"], + "baseLocale": "en", + "locales": ["en", "de", "zh", "pt", "ru", "vi"], "modules": [ - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@latest/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js" + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js" ], "plugin.inlang.messageFormat": { - "pathPattern": "./messages/{languageTag}.json" + "pathPattern": "./messages/{locale}.json" } } diff --git a/apps/desktop/src/app.html b/apps/desktop/src/app.html index dd0dff8..99c53da 100644 --- a/apps/desktop/src/app.html +++ b/apps/desktop/src/app.html @@ -1,13 +1,21 @@ - - + + + + + + Kunkun Desktop App - %sveltekit.head% - + %sveltekit.head% +
%sveltekit.body%
+ + + diff --git a/apps/desktop/src/hooks.server.ts b/apps/desktop/src/hooks.server.ts index 27abba0..5c93ad5 100644 --- a/apps/desktop/src/hooks.server.ts +++ b/apps/desktop/src/hooks.server.ts @@ -1,6 +1,15 @@ -// file initialized by the Paraglide-SvelteKit CLI - Feel free to edit it -import { sequence } from "@sveltejs/kit/hooks" -import { i18n } from "$lib/i18n" +import type { Handle } from "@sveltejs/kit" +import { paraglideMiddleware } from "$lib/paraglide/server" -// add your own hooks as part of the sequence here -export const handle = sequence(i18n.handle()) +// creating a handle to use the paraglide middleware +const paraglideHandle: Handle = ({ event, resolve }) => + paraglideMiddleware(event.request, ({ request: localizedRequest, locale }) => { + event.request = localizedRequest + return resolve(event, { + transformPageChunk: ({ html }) => { + return html.replace("%lang%", locale) + } + }) + }) + +export const handle: Handle = paraglideHandle diff --git a/apps/desktop/src/hooks.ts b/apps/desktop/src/hooks.ts index dac0351..77af86f 100644 --- a/apps/desktop/src/hooks.ts +++ b/apps/desktop/src/hooks.ts @@ -1,4 +1,6 @@ -// file initialized by the Paraglide-SvelteKit CLI - Feel free to edit it -import { i18n } from "$lib/i18n" +import type { Reroute } from "@sveltejs/kit" +import { deLocalizeUrl } from "$lib/paraglide/runtime" -export const reroute = i18n.reroute() +export const reroute: Reroute = (request) => { + return deLocalizeUrl(request.url).pathname +} diff --git a/apps/desktop/src/lib/cmds/builtin.ts b/apps/desktop/src/lib/cmds/builtin.ts index 57015db..5d23cf0 100644 --- a/apps/desktop/src/lib/cmds/builtin.ts +++ b/apps/desktop/src/lib/cmds/builtin.ts @@ -1,4 +1,3 @@ -import { i18n } from "@/i18n" import { appConfig, appState, auth, extensions } from "@/stores" import { checkUpdateAndInstall } from "@/utils/updater" import { setTransparentTitlebar } from "@kksh/api/commands" @@ -28,7 +27,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "Go to Extension Store", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/extension/store")) + goto("/app/extension/store") } }, { @@ -39,7 +38,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, description: "", function: async () => { - goto(i18n.resolveRoute("/app/auth")) + goto("/app/auth") } }, { @@ -101,7 +100,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, description: "", function: async () => { - goto(i18n.resolveRoute("/app/extension/file-transfer")) + goto("/app/extension/file-transfer") appState.clearSearchTerm() } }, @@ -115,7 +114,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/settings/add-dev-extension")) + goto("/app/settings/add-dev-extension") } }, { @@ -140,7 +139,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ function: async () => { // const appStateStore = useAppStateStore() appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/settings/set-dev-ext-path")) + goto("/app/settings/set-dev-ext-path") } }, { @@ -170,7 +169,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/help/deno-install")) + goto("/app/help/deno-install") }, keywords: ["help", "deno", "install"] }, @@ -183,7 +182,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/help/ffmpeg-install")) + goto("/app/help/ffmpeg-install") }, keywords: ["help", "ffmpeg", "install"] }, @@ -196,7 +195,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/help/brew-install")) + goto("/app/help/brew-install") }, keywords: ["help", "brew", "install", "homebrew"] }, @@ -209,7 +208,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/help/onboarding")) + goto("/app/help/onboarding") }, flags: { dev: true, @@ -225,7 +224,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/extension/permission-inspector")) + goto("/app/extension/permission-inspector") }, keywords: ["extension"] }, @@ -238,7 +237,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/troubleshooters/extension-loading")) + goto("/app/troubleshooters/extension-loading") }, keywords: ["extension", "troubleshooter"] }, @@ -251,7 +250,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "Create a Quicklink", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/extension/create-quick-link")) + goto("/app/extension/create-quick-link") } }, { @@ -285,7 +284,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, description: "Open Settings", function: async () => { - goto(i18n.resolveRoute("/app/settings")) + goto("/app/settings") appState.clearSearchTerm() } }, @@ -345,7 +344,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, description: "Dance", function: async () => { - goto(i18n.resolveRoute("/app/dance")) + goto("/app/dance") } }, { @@ -386,7 +385,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ description: "Clipboard History", function: async () => { appState.clearSearchTerm() - goto(i18n.resolveRoute("/app/extension/clipboard")) + goto("/app/extension/clipboard") } }, { @@ -423,7 +422,7 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, description: "MDNS Debugger", function: async () => { - goto(i18n.resolveRoute("/app/troubleshooters/mdns-debugger")) + goto("/app/troubleshooters/mdns-debugger") }, flags: { developer: true diff --git a/apps/desktop/src/lib/cmds/ext.ts b/apps/desktop/src/lib/cmds/ext.ts index ff2c17c..dc5e745 100644 --- a/apps/desktop/src/lib/cmds/ext.ts +++ b/apps/desktop/src/lib/cmds/ext.ts @@ -1,4 +1,3 @@ -import { i18n } from "@/i18n" import { appState } from "@/stores" import { winExtMap } from "@/stores/winExtMap" import { helperAPI } from "@/utils/helper" @@ -73,7 +72,7 @@ export async function onTemplateUiCmdSelect( } else { return winExtMap .registerExtensionWithWindow({ windowLabel: "main", extPath: ext.extPath }) - .then(() => goto(i18n.resolveRoute(url))) + .then(() => goto(url)) } } @@ -202,7 +201,7 @@ export async function onCustomUiCmdSelect( url2 = `/app/extension/ui-iframe?url=${encodeURIComponent(newUrl)}&extPath=${encodeURIComponent(ext.extPath)}` setIframeExtParams(ext.extPath, newUrl) } - goto(i18n.resolveRoute(url2)) + goto(url2) } appState.clearSearchTerm() } diff --git a/apps/desktop/src/lib/components/standalone/general-settings.svelte b/apps/desktop/src/lib/components/standalone/general-settings.svelte index d28968c..dd2aed7 100644 --- a/apps/desktop/src/lib/components/standalone/general-settings.svelte +++ b/apps/desktop/src/lib/components/standalone/general-settings.svelte @@ -1,14 +1,8 @@ - - - - - {#if $appState.fullScreenLoading} - - {/if} - {@render children()} - - +
+ {#each locales as locale} + {locale} + {/each} +
+ + + + + + {#if $appState.fullScreenLoading} + + {/if} + {@render children()} + + diff --git a/apps/desktop/src/routes/+layout.ts b/apps/desktop/src/routes/+layout.ts index cc6d9dd..8d7e6d2 100644 --- a/apps/desktop/src/routes/+layout.ts +++ b/apps/desktop/src/routes/+layout.ts @@ -1,15 +1,5 @@ -import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow" -import { browser } from "$app/environment" - // Tauri doesn't have a Node.js server to do proper SSR // so we will use adapter-static to prerender the app (SSG) // See: https://v2.tauri.app/start/frontend/sveltekit/ for more info export const prerender = true export const ssr = false - -export const load = () => { - if (browser) { - const win = getCurrentWebviewWindow() - return { win } - } -} diff --git a/apps/desktop/src/routes/app/+layout.svelte b/apps/desktop/src/routes/app/+layout.svelte index 51457ea..7d576fc 100644 --- a/apps/desktop/src/routes/app/+layout.svelte +++ b/apps/desktop/src/routes/app/+layout.svelte @@ -1,7 +1,6 @@ @@ -56,8 +53,7 @@ variant="outline" size="icon" onclick={() => { - console.log("go Home") - goto(i18n.resolveRoute("/app/")) + goto("/app/") }} > diff --git a/apps/desktop/src/routes/app/extension/store/[identifier]/+error.svelte b/apps/desktop/src/routes/app/extension/store/[identifier]/+error.svelte index 2b2e4f5..47a29d7 100644 --- a/apps/desktop/src/routes/app/extension/store/[identifier]/+error.svelte +++ b/apps/desktop/src/routes/app/extension/store/[identifier]/+error.svelte @@ -1,12 +1,11 @@ @@ -18,7 +17,7 @@ title="Fail to Load Extension" class="w-fit max-w-screen-sm border-2 border-red-500" message={$page.error?.message ?? "Unknown Error"} - onGoBack={() => goto(i18n.resolveRoute("/app/"))} + onGoBack={() => goto("/app/")} rawJsonError={JSON.stringify($page, null, 2)} /> diff --git a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte index 1f64241..50f57e1 100644 --- a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte +++ b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte @@ -1,8 +1,7 @@ diff --git a/apps/desktop/src/routes/app/settings/sidebar.svelte b/apps/desktop/src/routes/app/settings/sidebar.svelte index 91be864..1cfa4f2 100644 --- a/apps/desktop/src/routes/app/settings/sidebar.svelte +++ b/apps/desktop/src/routes/app/settings/sidebar.svelte @@ -1,5 +1,4 @@