summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-13 06:48:38 -0500
committerGitHub <[email protected]>2026-03-13 06:48:38 -0500
commit05cb3c87ca387be41aceb5ccad978c6848a56f70 (patch)
tree2b592d2aa90d0fdb7ea72aa392507e2277b92ba5 /packages/app/src/pages/session
parent270cb0b8b4265ac0965ac8b94a58a3bca86fa558 (diff)
downloadopencode-05cb3c87ca387be41aceb5ccad978c6848a56f70.tar.gz
opencode-05cb3c87ca387be41aceb5ccad978c6848a56f70.zip
chore(app): i18n sync (#17283)
Diffstat (limited to 'packages/app/src/pages/session')
-rw-r--r--packages/app/src/pages/session/composer/session-composer-region.tsx1
-rw-r--r--packages/app/src/pages/session/composer/session-question-dock.tsx2
-rw-r--r--packages/app/src/pages/session/composer/session-todo-dock.tsx28
-rw-r--r--packages/app/src/pages/session/terminal-label.ts6
4 files changed, 26 insertions, 11 deletions
diff --git a/packages/app/src/pages/session/composer/session-composer-region.tsx b/packages/app/src/pages/session/composer/session-composer-region.tsx
index 84f77ea4a..a5263cd74 100644
--- a/packages/app/src/pages/session/composer/session-composer-region.tsx
+++ b/packages/app/src/pages/session/composer/session-composer-region.tsx
@@ -196,7 +196,6 @@ export function SessionComposerRegion(props: {
<SessionTodoDock
sessionID={route.params.id}
todos={props.state.todos()}
- title={language.t("session.todo.title")}
collapseLabel={language.t("session.todo.collapse")}
expandLabel={language.t("session.todo.expand")}
dockProgress={value()}
diff --git a/packages/app/src/pages/session/composer/session-question-dock.tsx b/packages/app/src/pages/session/composer/session-question-dock.tsx
index b22a92eb0..b66c27579 100644
--- a/packages/app/src/pages/session/composer/session-question-dock.tsx
+++ b/packages/app/src/pages/session/composer/session-question-dock.tsx
@@ -38,7 +38,7 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest; onSubmit
const summary = createMemo(() => {
const n = Math.min(store.tab + 1, total())
- return `${n} of ${total()} questions`
+ return language.t("session.question.progress", { current: n, total: total() })
})
const last = createMemo(() => store.tab >= total() - 1)
diff --git a/packages/app/src/pages/session/composer/session-todo-dock.tsx b/packages/app/src/pages/session/composer/session-todo-dock.tsx
index 5500de97a..2cd660b39 100644
--- a/packages/app/src/pages/session/composer/session-todo-dock.tsx
+++ b/packages/app/src/pages/session/composer/session-todo-dock.tsx
@@ -9,6 +9,10 @@ import { TextStrikethrough } from "@opencode-ai/ui/text-strikethrough"
import { Index, createEffect, createMemo, on, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { composerEnabled, composerProbe } from "@/testing/session-composer"
+import { useLanguage } from "@/context/language"
+
+const doneToken = "\u0000done\u0000"
+const totalToken = "\u0000total\u0000"
function dot(status: Todo["status"]) {
if (status !== "in_progress") return undefined
@@ -38,11 +42,11 @@ function dot(status: Todo["status"]) {
export function SessionTodoDock(props: {
sessionID?: string
todos: Todo[]
- title: string
collapseLabel: string
expandLabel: string
dockProgress: number
}) {
+ const language = useLanguage()
const [store, setStore] = createStore({
collapsed: false,
height: 320,
@@ -52,7 +56,12 @@ export function SessionTodoDock(props: {
const total = createMemo(() => props.todos.length)
const done = createMemo(() => props.todos.filter((todo) => todo.status === "completed").length)
- const label = createMemo(() => `${done()} of ${total()} ${props.title.toLowerCase()} completed`)
+ const label = createMemo(() => language.t("session.todo.progress", { done: done(), total: total() }))
+ const progress = createMemo(() =>
+ language
+ .t("session.todo.progress", { done: doneToken, total: totalToken })
+ .split(/(\u0000done\u0000|\u0000total\u0000)/),
+ )
const active = createMemo(
() =>
@@ -137,10 +146,17 @@ export function SessionTodoDock(props: {
opacity: `${Math.max(0, Math.min(1, 1 - shut()))}`,
}}
>
- <AnimatedNumber value={done()} />
- <span class="mx-1">of</span>
- <AnimatedNumber value={total()} />
- <span>&nbsp;{props.title.toLowerCase()} completed</span>
+ <Index each={progress()}>
+ {(item) =>
+ item() === doneToken ? (
+ <AnimatedNumber value={done()} />
+ ) : item() === totalToken ? (
+ <AnimatedNumber value={total()} />
+ ) : (
+ <span>{item()}</span>
+ )
+ }
+ </Index>
</span>
<div
data-slot="session-todo-preview"
diff --git a/packages/app/src/pages/session/terminal-label.ts b/packages/app/src/pages/session/terminal-label.ts
index 6d336769b..8a34712e4 100644
--- a/packages/app/src/pages/session/terminal-label.ts
+++ b/packages/app/src/pages/session/terminal-label.ts
@@ -1,3 +1,5 @@
+import { isDefaultTitle as isDefaultTerminalTitle } from "@/context/terminal-title"
+
export const terminalTabLabel = (input: {
title?: string
titleNumber?: number
@@ -5,9 +7,7 @@ export const terminalTabLabel = (input: {
}) => {
const title = input.title ?? ""
const number = input.titleNumber ?? 0
- const match = title.match(/^Terminal (\d+)$/)
- const parsed = match ? Number(match[1]) : undefined
- const isDefaultTitle = Number.isFinite(number) && number > 0 && Number.isFinite(parsed) && parsed === number
+ const isDefaultTitle = Number.isFinite(number) && number > 0 && isDefaultTerminalTitle(title, number)
if (title && !isDefaultTitle) return title
if (number > 0) return input.t("terminal.title.numbered", { number })