summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app
diff options
context:
space:
mode:
Diffstat (limited to 'packages/console/app')
-rw-r--r--packages/console/app/src/lib/language.ts39
-rw-r--r--packages/console/app/src/routes/docs/[...path].ts6
-rw-r--r--packages/console/app/src/routes/docs/index.ts6
-rw-r--r--packages/console/app/src/routes/s/[id].ts6
4 files changed, 50 insertions, 7 deletions
diff --git a/packages/console/app/src/lib/language.ts b/packages/console/app/src/lib/language.ts
index 54321d234..5e80179e4 100644
--- a/packages/console/app/src/lib/language.ts
+++ b/packages/console/app/src/lib/language.ts
@@ -108,6 +108,26 @@ const DOCS_SEGMENT = new Set([
"zh-tw",
])
+const DOCS_LOCALE = {
+ ar: "ar",
+ da: "da",
+ de: "de",
+ en: "en",
+ es: "es",
+ fr: "fr",
+ it: "it",
+ ja: "ja",
+ ko: "ko",
+ nb: "no",
+ "pt-br": "br",
+ root: "en",
+ ru: "ru",
+ th: "th",
+ tr: "tr",
+ "zh-cn": "zh",
+ "zh-tw": "zht",
+} as const satisfies Record<string, Locale>
+
function suffix(pathname: string) {
const index = pathname.search(/[?#]/)
if (index === -1) {
@@ -130,7 +150,12 @@ export function docs(locale: Locale, pathname: string) {
return `${next.path}${next.suffix}`
}
- if (value === "root") return `${next.path}${next.suffix}`
+ if (value === "root") {
+ if (next.path === "/docs/en") return `/docs${next.suffix}`
+ if (next.path === "/docs/en/") return `/docs/${next.suffix}`
+ if (next.path.startsWith("/docs/en/")) return `/docs/${next.path.slice("/docs/en/".length)}${next.suffix}`
+ return `${next.path}${next.suffix}`
+ }
if (next.path === "/docs") return `/docs/${value}${next.suffix}`
if (next.path === "/docs/") return `/docs/${value}/${next.suffix}`
@@ -154,6 +179,15 @@ export function fromPathname(pathname: string) {
return parseLocale(fix(pathname).split("/")[1])
}
+export function fromDocsPathname(pathname: string) {
+ const next = fix(pathname)
+ const value = next.split("/")[2]?.toLowerCase()
+ if (!value) return null
+ if (!next.startsWith("/docs/")) return null
+ if (!(value in DOCS_LOCALE)) return null
+ return DOCS_LOCALE[value as keyof typeof DOCS_LOCALE]
+}
+
export function strip(pathname: string) {
const locale = fromPathname(pathname)
if (!locale) return fix(pathname)
@@ -272,6 +306,9 @@ export function localeFromRequest(request: Request) {
const fromPath = fromPathname(new URL(request.url).pathname)
if (fromPath) return fromPath
+ const fromDocsPath = fromDocsPathname(new URL(request.url).pathname)
+ if (fromDocsPath) return fromDocsPath
+
return (
localeFromCookieHeader(request.headers.get("cookie")) ??
detectFromAcceptLanguage(request.headers.get("accept-language"))
diff --git a/packages/console/app/src/routes/docs/[...path].ts b/packages/console/app/src/routes/docs/[...path].ts
index bbe07f1f0..164bd2872 100644
--- a/packages/console/app/src/routes/docs/[...path].ts
+++ b/packages/console/app/src/routes/docs/[...path].ts
@@ -1,6 +1,6 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
-import { docs, localeFromRequest, tag } from "~/lib/language"
+import { cookie, docs, localeFromRequest, tag } from "~/lib/language"
async function handler(evt: APIEvent) {
const req = evt.request.clone()
@@ -17,7 +17,9 @@ async function handler(evt: APIEvent) {
headers,
body: req.body,
})
- return response
+ const next = new Response(response.body, response)
+ next.headers.append("set-cookie", cookie(locale))
+ return next
}
export const GET = handler
diff --git a/packages/console/app/src/routes/docs/index.ts b/packages/console/app/src/routes/docs/index.ts
index bbe07f1f0..164bd2872 100644
--- a/packages/console/app/src/routes/docs/index.ts
+++ b/packages/console/app/src/routes/docs/index.ts
@@ -1,6 +1,6 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
-import { docs, localeFromRequest, tag } from "~/lib/language"
+import { cookie, docs, localeFromRequest, tag } from "~/lib/language"
async function handler(evt: APIEvent) {
const req = evt.request.clone()
@@ -17,7 +17,9 @@ async function handler(evt: APIEvent) {
headers,
body: req.body,
})
- return response
+ const next = new Response(response.body, response)
+ next.headers.append("set-cookie", cookie(locale))
+ return next
}
export const GET = handler
diff --git a/packages/console/app/src/routes/s/[id].ts b/packages/console/app/src/routes/s/[id].ts
index 60f8d8ba8..374fd79ad 100644
--- a/packages/console/app/src/routes/s/[id].ts
+++ b/packages/console/app/src/routes/s/[id].ts
@@ -1,6 +1,6 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
-import { docs, localeFromRequest, tag } from "~/lib/language"
+import { cookie, docs, localeFromRequest, tag } from "~/lib/language"
async function handler(evt: APIEvent) {
const req = evt.request.clone()
@@ -17,7 +17,9 @@ async function handler(evt: APIEvent) {
headers,
body: req.body,
})
- return response
+ const next = new Response(response.body, response)
+ next.headers.append("set-cookie", cookie(locale))
+ return next
}
export const GET = handler