import { Router } from "@solidjs/router" import { FileRoutes } from "@solidjs/start/router" import { Font } from "@opencode-ai/ui/font" import { MetaProvider } from "@solidjs/meta" import { MarkedProvider } from "@opencode-ai/ui/context/marked" import { DialogProvider } from "@opencode-ai/ui/context/dialog" import { I18nProvider, type UiI18nParams } from "@opencode-ai/ui/context" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { createEffect, createMemo, Suspense, type ParentProps } from "solid-js" import { getRequestEvent } from "solid-js/web" import "./app.css" import { Favicon } from "@opencode-ai/ui/favicon" function resolveTemplate(text: string, params?: UiI18nParams) { if (!params) return text return text.replace(/{{\s*([^}]+?)\s*}}/g, (_, rawKey) => { const key = String(rawKey) const value = params[key] return value === undefined ? "" : String(value) }) } function detectLocaleFromHeader(header: string | null | undefined) { if (!header) return for (const item of header.split(",")) { const value = item.trim().split(";")[0]?.toLowerCase() if (!value) continue if (value.startsWith("zh")) return "zh" as const if (value.startsWith("en")) return "en" as const } } function detectLocale() { const event = getRequestEvent() const header = event?.request.headers.get("accept-language") const headerLocale = detectLocaleFromHeader(header) if (headerLocale) return headerLocale if (typeof document === "object") { const value = document.documentElement.lang?.toLowerCase() ?? "" if (value.startsWith("zh")) return "zh" as const if (value.startsWith("en")) return "en" as const } if (typeof navigator === "object") { const languages = navigator.languages?.length ? navigator.languages : [navigator.language] for (const language of languages) { if (!language) continue if (language.toLowerCase().startsWith("zh")) return "zh" as const } } return "en" as const } function UiI18nBridge(props: ParentProps) { const locale = createMemo(() => detectLocale()) const t = (key: keyof typeof uiEn, params?: UiI18nParams) => { const value = locale() === "zh" ? (uiZh[key] ?? uiEn[key]) : uiEn[key] const text = value ?? String(key) return resolveTemplate(text, params) } createEffect(() => { if (typeof document !== "object") return document.documentElement.lang = locale() }) return {props.children} } export default function App() { return ( ( {props.children} )} > ) }