From 850d50eb645b4a0a92ba673b1d0af88887f92178 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:42:26 -0600 Subject: fix(app): missing i18n keys --- .../app/src/components/dialog-connect-provider.tsx | 4 +- packages/app/src/components/dialog-select-mcp.tsx | 4 +- .../app/src/components/dialog-select-model.tsx | 4 +- packages/app/src/components/model-tooltip.tsx | 60 +++++++++++++++------- packages/app/src/components/prompt-input.tsx | 4 +- .../session/session-sortable-terminal-tab.tsx | 4 +- packages/app/src/components/settings-general.tsx | 43 +++++++++------- packages/app/src/components/titlebar.tsx | 6 +-- 8 files changed, 80 insertions(+), 49 deletions(-) (limited to 'packages/app/src/components') diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 63f3c5dbe..66c5bd0b8 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -33,7 +33,7 @@ export function DialogConnectProvider(props: { provider: string }) { globalSync.data.provider_auth[props.provider] ?? [ { type: "api", - label: "API key", + label: language.t("provider.connect.method.apiKey"), }, ], ) @@ -245,7 +245,7 @@ export function DialogConnectProvider(props: { provider: string }) {
{language.t("provider.connect.opencodeZen.visit.prefix")} - opencode.ai/zen + {language.t("provider.connect.opencodeZen.visit.link")} {language.t("provider.connect.opencodeZen.visit.suffix")}
diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index 25ef8df01..b91699561 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -77,7 +77,9 @@ export const DialogSelectMcp: Component = () => { {language.t("mcp.status.disabled")} - ... + + {language.t("common.loading.ellipsis")} + diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index a030e952b..4fd8af1b3 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -115,8 +115,8 @@ export const ModelSelectorPopover: Component<{ variant="ghost" iconSize="normal" class="size-6" - aria-label="Manage models" - title="Manage models" + aria-label={language.t("dialog.model.manage")} + title={language.t("dialog.model.manage")} onClick={handleManage} /> } diff --git a/packages/app/src/components/model-tooltip.tsx b/packages/app/src/components/model-tooltip.tsx index 14b4ba799..54550cf76 100644 --- a/packages/app/src/components/model-tooltip.tsx +++ b/packages/app/src/components/model-tooltip.tsx @@ -1,4 +1,5 @@ import { Show, type Component } from "solid-js" +import { useLanguage } from "@/context/language" type InputKey = "text" | "image" | "audio" | "video" | "pdf" type InputMap = Record @@ -22,23 +23,31 @@ type ModelInfo = { } } -function sourceName(model: ModelInfo) { - const value = `${model.id} ${model.name}`.toLowerCase() - - if (/claude|anthropic/.test(value)) return "Anthropic" - if (/gpt|o[1-4]|codex|openai/.test(value)) return "OpenAI" - if (/gemini|palm|bard|google/.test(value)) return "Google" - if (/grok|xai/.test(value)) return "xAI" - if (/llama|meta/.test(value)) return "Meta" +export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?: boolean }> = (props) => { + const language = useLanguage() + const sourceName = (model: ModelInfo) => { + const value = `${model.id} ${model.name}`.toLowerCase() - return model.provider.name -} + if (/claude|anthropic/.test(value)) return language.t("model.provider.anthropic") + if (/gpt|o[1-4]|codex|openai/.test(value)) return language.t("model.provider.openai") + if (/gemini|palm|bard|google/.test(value)) return language.t("model.provider.google") + if (/grok|xai/.test(value)) return language.t("model.provider.xai") + if (/llama|meta/.test(value)) return language.t("model.provider.meta") -export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?: boolean }> = (props) => { + return model.provider.name + } + const inputLabel = (value: string) => { + if (value === "text") return language.t("model.input.text") + if (value === "image") return language.t("model.input.image") + if (value === "audio") return language.t("model.input.audio") + if (value === "video") return language.t("model.input.video") + if (value === "pdf") return language.t("model.input.pdf") + return value + } const title = () => { const tags: Array = [] - if (props.latest) tags.push("Latest") - if (props.free) tags.push("Free") + if (props.latest) tags.push(language.t("model.tag.latest")) + if (props.free) tags.push(language.t("model.tag.free")) const suffix = tags.length ? ` (${tags.join(", ")})` : "" return `${sourceName(props.model)} ${props.model.name}${suffix}` } @@ -46,22 +55,35 @@ export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free? if (props.model.capabilities) { const input = props.model.capabilities.input const order: Array = ["text", "image", "audio", "video", "pdf"] - const entries = order.filter((key) => input[key]) + const entries = order.filter((key) => input[key]).map((key) => inputLabel(key)) return entries.length ? entries.join(", ") : undefined } - return props.model.modalities?.input?.join(", ") + const raw = props.model.modalities?.input + if (!raw) return + const entries = raw.map((value) => inputLabel(value)) + return entries.length ? entries.join(", ") : undefined } const reasoning = () => { - if (props.model.capabilities) return props.model.capabilities.reasoning ? "Allows reasoning" : "No reasoning" - return props.model.reasoning ? "Allows reasoning" : "No reasoning" + if (props.model.capabilities) + return props.model.capabilities.reasoning + ? language.t("model.tooltip.reasoning.allowed") + : language.t("model.tooltip.reasoning.none") + return props.model.reasoning + ? language.t("model.tooltip.reasoning.allowed") + : language.t("model.tooltip.reasoning.none") } - const context = () => `Context limit ${props.model.limit.context.toLocaleString()}` + const context = () => + language.t("model.tooltip.context", { limit: props.model.limit.context.toLocaleString() }) return (
{title()}
- {(value) =>
Allows: {value()}
} + {(value) => ( +
+ {language.t("model.tooltip.allows", { inputs: value() })} +
+ )}
{reasoning()}
{context()}
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 35a74f43e..d80abf0c3 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1696,7 +1696,9 @@ export const PromptInput: Component = (props) => {
{language.t("prompt.action.stop")} - ESC + + {language.t("common.key.esc")} +
diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 63efa54a8..03f07fa56 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -150,11 +150,11 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => > - Rename + {language.t("common.rename")} - Close + {language.t("common.close")} diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index c356b269b..69d180f9d 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -29,18 +29,19 @@ export const SettingsGeneral: Component = () => { ) const fontOptions = [ - { value: "ibm-plex-mono", label: "IBM Plex Mono" }, - { value: "cascadia-code", label: "Cascadia Code" }, - { value: "fira-code", label: "Fira Code" }, - { value: "hack", label: "Hack" }, - { value: "inconsolata", label: "Inconsolata" }, - { value: "intel-one-mono", label: "Intel One Mono" }, - { value: "jetbrains-mono", label: "JetBrains Mono" }, - { value: "meslo-lgs", label: "Meslo LGS" }, - { value: "roboto-mono", label: "Roboto Mono" }, - { value: "source-code-pro", label: "Source Code Pro" }, - { value: "ubuntu-mono", label: "Ubuntu Mono" }, - ] + { value: "ibm-plex-mono", label: "font.option.ibmPlexMono" }, + { value: "cascadia-code", label: "font.option.cascadiaCode" }, + { value: "fira-code", label: "font.option.firaCode" }, + { value: "hack", label: "font.option.hack" }, + { value: "inconsolata", label: "font.option.inconsolata" }, + { value: "intel-one-mono", label: "font.option.intelOneMono" }, + { value: "jetbrains-mono", label: "font.option.jetbrainsMono" }, + { value: "meslo-lgs", label: "font.option.mesloLgs" }, + { value: "roboto-mono", label: "font.option.robotoMono" }, + { value: "source-code-pro", label: "font.option.sourceCodePro" }, + { value: "ubuntu-mono", label: "font.option.ubuntuMono" }, + ] as const + const fontOptionsList = [...fontOptions] const soundOptions = [...SOUND_OPTIONS] @@ -137,17 +138,21 @@ export const SettingsGeneral: Component = () => { description={language.t("settings.general.row.font.description")} >
@@ -203,7 +208,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.agent())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) @@ -227,7 +232,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.permissions())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) @@ -251,7 +256,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.errors())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index a5103d90d..877fe8492 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -94,7 +94,7 @@ export function Titlebar() { variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} - aria-label="Toggle menu" + aria-label={language.t("sidebar.menu.toggle")} />
@@ -105,7 +105,7 @@ export function Titlebar() { variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} - aria-label="Toggle menu" + aria-label={language.t("sidebar.menu.toggle")} /> @@ -119,7 +119,7 @@ export function Titlebar() { variant="ghost" class="group/sidebar-toggle size-6 p-0" onClick={layout.sidebar.toggle} - aria-label="Toggle sidebar" + aria-label={language.t("command.sidebar.toggle")} aria-expanded={layout.sidebar.opened()} >
-- cgit v1.2.3