summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-20 10:43:43 -0600
committerAdam <[email protected]>2026-01-20 17:58:06 -0600
commit0f2e8ea2b49fcab8c539449b51c40eea8215c2d3 (patch)
treeabdad87b9bb3e608d74c6ab478bf76a50b0f6cce /packages/app/src/components
parentbe493e8be045f25f38e619b79730f437839752a8 (diff)
downloadopencode-0f2e8ea2b49fcab8c539449b51c40eea8215c2d3.tar.gz
opencode-0f2e8ea2b49fcab8c539449b51c40eea8215c2d3.zip
wip(app): i18n
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/dialog-fork.tsx5
-rw-r--r--packages/app/src/components/dialog-select-model.tsx2
-rw-r--r--packages/app/src/components/session-lsp-indicator.tsx8
-rw-r--r--packages/app/src/components/session/session-sortable-tab.tsx4
-rw-r--r--packages/app/src/components/titlebar.tsx4
5 files changed, 16 insertions, 7 deletions
diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx
index c4c52fc4d..17782f5ab 100644
--- a/packages/app/src/components/dialog-fork.tsx
+++ b/packages/app/src/components/dialog-fork.tsx
@@ -61,7 +61,10 @@ export const DialogFork: Component = () => {
if (!sessionID) return
const parts = sync.data.part[item.id] ?? []
- const restored = extractPromptFromParts(parts, { directory: sdk.directory })
+ const restored = extractPromptFromParts(parts, {
+ directory: sdk.directory,
+ attachmentName: language.t("common.attachment"),
+ })
dialog.close()
diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx
index ba42ffdd6..cdb299c79 100644
--- a/packages/app/src/components/dialog-select-model.tsx
+++ b/packages/app/src/components/dialog-select-model.tsx
@@ -38,8 +38,6 @@ const ModelList: Component<{
sortBy={(a, b) => a.name.localeCompare(b.name)}
groupBy={(x) => x.provider.name}
sortGroupsBy={(a, b) => {
- if (a.category === "Recent" && b.category !== "Recent") return -1
- if (b.category === "Recent" && a.category !== "Recent") return 1
const aProvider = a.items[0].provider.id
const bProvider = b.items[0].provider.id
if (popularProviders.includes(aProvider) && !popularProviders.includes(bProvider)) return -1
diff --git a/packages/app/src/components/session-lsp-indicator.tsx b/packages/app/src/components/session-lsp-indicator.tsx
index ac3a39997..dab92920e 100644
--- a/packages/app/src/components/session-lsp-indicator.tsx
+++ b/packages/app/src/components/session-lsp-indicator.tsx
@@ -1,9 +1,11 @@
import { createMemo, Show } from "solid-js"
import { useSync } from "@/context/sync"
+import { useLanguage } from "@/context/language"
import { Tooltip } from "@opencode-ai/ui/tooltip"
export function SessionLspIndicator() {
const sync = useSync()
+ const language = useLanguage()
const lspStats = createMemo(() => {
const lsp = sync.data.lsp ?? []
@@ -15,7 +17,7 @@ export function SessionLspIndicator() {
const tooltipContent = createMemo(() => {
const lsp = sync.data.lsp ?? []
- if (lsp.length === 0) return "No LSP servers"
+ if (lsp.length === 0) return language.t("lsp.tooltip.none")
return lsp.map((s) => s.name).join(", ")
})
@@ -30,7 +32,9 @@ export function SessionLspIndicator() {
"bg-icon-success-base": !lspStats().hasError && lspStats().connected > 0,
}}
/>
- <span class="text-12-regular text-text-weak">{lspStats().connected} LSP</span>
+ <span class="text-12-regular text-text-weak">
+ {language.t("lsp.label.connected", { count: lspStats().connected })}
+ </span>
</div>
</Tooltip>
</Show>
diff --git a/packages/app/src/components/session/session-sortable-tab.tsx b/packages/app/src/components/session/session-sortable-tab.tsx
index 595ff9d6f..a4a434b05 100644
--- a/packages/app/src/components/session/session-sortable-tab.tsx
+++ b/packages/app/src/components/session/session-sortable-tab.tsx
@@ -7,6 +7,7 @@ import { Tooltip } from "@opencode-ai/ui/tooltip"
import { Tabs } from "@opencode-ai/ui/tabs"
import { getFilename } from "@opencode-ai/util/path"
import { useFile } from "@/context/file"
+import { useLanguage } from "@/context/language"
export function FileVisual(props: { path: string; active?: boolean }): JSX.Element {
return (
@@ -25,6 +26,7 @@ export function FileVisual(props: { path: string; active?: boolean }): JSX.Eleme
export function SortableTab(props: { tab: string; onTabClose: (tab: string) => void }): JSX.Element {
const file = useFile()
+ const language = useLanguage()
const sortable = createSortable(props.tab)
const path = createMemo(() => file.pathFromTab(props.tab))
return (
@@ -34,7 +36,7 @@ export function SortableTab(props: { tab: string; onTabClose: (tab: string) => v
<Tabs.Trigger
value={props.tab}
closeButton={
- <Tooltip value="Close tab" placement="bottom">
+ <Tooltip value={language.t("common.closeTab")} placement="bottom">
<IconButton icon="close" variant="ghost" onClick={() => props.onTabClose(props.tab)} />
</Tooltip>
}
diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx
index 272f85144..bbfdf895d 100644
--- a/packages/app/src/components/titlebar.tsx
+++ b/packages/app/src/components/titlebar.tsx
@@ -6,11 +6,13 @@ import { useTheme } from "@opencode-ai/ui/theme"
import { useLayout } from "@/context/layout"
import { usePlatform } from "@/context/platform"
import { useCommand } from "@/context/command"
+import { useLanguage } from "@/context/language"
export function Titlebar() {
const layout = useLayout()
const platform = usePlatform()
const command = useCommand()
+ const language = useLanguage()
const theme = useTheme()
const mac = createMemo(() => platform.platform === "desktop" && platform.os === "macos")
@@ -93,7 +95,7 @@ export function Titlebar() {
<TooltipKeybind
class={web() ? "hidden xl:flex shrink-0 ml-14" : "hidden xl:flex shrink-0"}
placement="bottom"
- title="Toggle sidebar"
+ title={language.t("command.sidebar.toggle")}
keybind={command.keybind("sidebar.toggle")}
>
<IconButton