diff options
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/app.tsx | 28 | ||||
| -rw-r--r-- | packages/app/src/context/language.tsx | 8 |
2 files changed, 23 insertions, 13 deletions
diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 0ceebcce3..c59cbe898 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -6,6 +6,7 @@ import { Font } from "@opencode-ai/ui/font" import { MarkedProvider } from "@opencode-ai/ui/context/marked" import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" import { CodeComponentProvider } from "@opencode-ai/ui/context/code" +import { I18nProvider } from "@opencode-ai/ui/context" import { Diff } from "@opencode-ai/ui/diff" import { Code } from "@opencode-ai/ui/code" import { ThemeProvider } from "@opencode-ai/ui/theme" @@ -21,7 +22,7 @@ import { FileProvider } from "@/context/file" import { NotificationProvider } from "@/context/notification" import { DialogProvider } from "@opencode-ai/ui/context/dialog" import { CommandProvider } from "@/context/command" -import { LanguageProvider } from "@/context/language" +import { LanguageProvider, useLanguage } from "@/context/language" import { Logo } from "@opencode-ai/ui/logo" import Layout from "@/pages/layout" import DirectoryLayout from "@/pages/directory-layout" @@ -33,6 +34,11 @@ const Home = lazy(() => import("@/pages/home")) const Session = lazy(() => import("@/pages/session")) const Loading = () => <div class="size-full" /> +function UiI18nBridge(props: ParentProps) { + const language = useLanguage() + return <I18nProvider value={{ locale: language.locale, t: language.t }}>{props.children}</I18nProvider> +} + declare global { interface Window { __OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string } @@ -45,15 +51,17 @@ export function AppBaseProviders(props: ParentProps) { <Font /> <ThemeProvider> <LanguageProvider> - <ErrorBoundary fallback={(error) => <ErrorPage error={error} />}> - <DialogProvider> - <MarkedProvider> - <DiffComponentProvider component={Diff}> - <CodeComponentProvider component={Code}>{props.children}</CodeComponentProvider> - </DiffComponentProvider> - </MarkedProvider> - </DialogProvider> - </ErrorBoundary> + <UiI18nBridge> + <ErrorBoundary fallback={(error) => <ErrorPage error={error} />}> + <DialogProvider> + <MarkedProvider> + <DiffComponentProvider component={Diff}> + <CodeComponentProvider component={Code}>{props.children}</CodeComponentProvider> + </DiffComponentProvider> + </MarkedProvider> + </DialogProvider> + </ErrorBoundary> + </UiI18nBridge> </LanguageProvider> </ThemeProvider> </MetaProvider> diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 3178cb6b6..b04b4dfc4 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -5,10 +5,12 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" +import { dict as uiEn } from "@opencode-ai/ui/i18n/en" +import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" export type Locale = "en" | "zh" -type RawDictionary = typeof en +type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> const LOCALES: readonly Locale[] = ["en", "zh"] @@ -43,10 +45,10 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont setStore("locale", current) }) - const base = i18n.flatten(en) + const base = i18n.flatten({ ...en, ...uiEn }) const dict = createMemo<Dictionary>(() => { if (locale() === "en") return base - return { ...base, ...i18n.flatten(zh) } + return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } }) const t = i18n.translator(dict, i18n.resolveTemplate) |
