diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx
index b4496ba7de1f..bc0c8d2788d1 100644
--- a/packages/app/src/app.tsx
+++ b/packages/app/src/app.tsx
@@ -65,6 +65,7 @@ import { ErrorPage } from "./pages/error"
import { useCheckServerHealth } from "./utils/server-health"
import { legacySessionHref, legacySessionServer, requireServerKey, sessionHref } from "./utils/session-route"
import { createSessionLineage } from "@/pages/session/session-lineage"
+import { translateDesktopMenu } from "@/desktop-menu"
import { SessionPage, SessionRouteErrorBoundary, TargetSessionRouteContent } from "@/pages/session"
import { NewHome, LegacyHome } from "@/pages/home"
@@ -236,6 +237,18 @@ function UiI18nBridge(props: ParentProps) {
return {props.children}
}
+function DesktopMenuSync() {
+ const language = useLanguage()
+ const platform = usePlatform()
+
+ createEffect(() => {
+ if (!platform.setDesktopMenuLabels) return
+ void platform.setDesktopMenuLabels(translateDesktopMenu(language.t))
+ })
+
+ return null
+}
+
declare global {
interface Window {
__OPENCODE__?: {
@@ -370,6 +383,7 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) {
}}
>
+
{
diff --git a/packages/app/src/components/windows-app-menu.tsx b/packages/app/src/components/windows-app-menu.tsx
index 017ac4cf8dea..8bf2afac303a 100644
--- a/packages/app/src/components/windows-app-menu.tsx
+++ b/packages/app/src/components/windows-app-menu.tsx
@@ -6,14 +6,25 @@ import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2"
import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon"
import { useCommand } from "@/context/command"
-import { DESKTOP_MENU, desktopMenuVisible, type DesktopMenuAction, type DesktopMenuEntry } from "@/desktop-menu"
+import {
+ DESKTOP_MENU,
+ DESKTOP_MENU_ARIA_LABEL,
+ desktopMenuVisible,
+ type DesktopMenuAction,
+ type DesktopMenuEntry,
+ type DesktopMenuLabelKey,
+} from "@/desktop-menu"
import { usePlatform } from "@/context/platform"
+import { useLanguage } from "@/context/language"
export function WindowsAppMenu(props: {
command: ReturnType
platform: ReturnType
variant?: "legacy" | "v2"
}) {
+ const language = useLanguage()
+ const label = (item: { label?: string; labelKey?: DesktopMenuLabelKey }) =>
+ item.labelKey ? language.t(item.labelKey) : item.label
let lastFocused: HTMLElement | undefined
const rememberFocus = () => {
@@ -58,7 +69,7 @@ export function WindowsAppMenu(props: {
variant="ghost-muted"
size="large"
icon={}
- aria-label="OpenCode menu"
+ aria-label={language.t(DESKTOP_MENU_ARIA_LABEL)}
onPointerDown={rememberFocus}
onKeyDown={rememberFocus}
/>
@@ -69,7 +80,7 @@ export function WindowsAppMenu(props: {
icon="menu"
variant="ghost"
class="titlebar-icon rounded-md shrink-0"
- aria-label="OpenCode menu"
+ aria-label={language.t(DESKTOP_MENU_ARIA_LABEL)}
onPointerDown={rememberFocus}
onKeyDown={rememberFocus}
/>
@@ -79,7 +90,7 @@ export function WindowsAppMenu(props: {
{DESKTOP_MENU.filter((menu) => desktopMenuVisible(menu, "windows")).map((menu) => (
-
+
{menu.items
?.filter((entry) => desktopMenuVisible(entry, "windows"))
.map((entry) =>
@@ -87,7 +98,7 @@ export function WindowsAppMenu(props: {
) : (
runEntry(entry)}
diff --git a/packages/app/src/context/platform.tsx b/packages/app/src/context/platform.tsx
index cf343bfa7e91..26a1eb4f1e8d 100644
--- a/packages/app/src/context/platform.tsx
+++ b/packages/app/src/context/platform.tsx
@@ -1,7 +1,7 @@
import { createSimpleContext } from "@opencode-ai/ui/context"
import type { AsyncStorage, SyncStorage } from "@solid-primitives/storage"
import type { Accessor } from "solid-js"
-import type { DesktopMenuAction } from "../desktop-menu"
+import type { DesktopMenuAction, DesktopMenuLabels } from "../desktop-menu"
import { ServerConnection } from "./server"
import type { WslServersPlatform } from "../wsl/types"
import type { UpdaterPlatform } from "../updater"
@@ -106,6 +106,9 @@ type PlatformBase = {
/** Run a desktop-only menu action from the app chrome */
runDesktopMenuAction?(action: DesktopMenuAction): Promise | void
+ /** Update translated labels in the native desktop application menu */
+ setDesktopMenuLabels?(labels: DesktopMenuLabels): Promise | void
+
/** Check if an editor app exists (desktop only) */
checkAppExists?(appName: string): Promise
diff --git a/packages/app/src/desktop-menu.ts b/packages/app/src/desktop-menu.ts
index d3902cd2b245..636c4d89b9e9 100644
--- a/packages/app/src/desktop-menu.ts
+++ b/packages/app/src/desktop-menu.ts
@@ -1,5 +1,12 @@
+import type { dict as en } from "./i18n/en"
+
export type DesktopMenuPlatform = "macos" | "windows"
+export type DesktopMenuLabelKey = Extract
+export type DesktopMenuLabels = Partial>
+
+export const DESKTOP_MENU_ARIA_LABEL = "desktop.appMenu.ariaLabel" satisfies DesktopMenuLabelKey
+
export type DesktopMenuAction =
| "app.checkForUpdates"
| "app.relaunch"
@@ -28,6 +35,8 @@ export type DesktopMenuRole =
| "cut"
| "hide"
| "hideOthers"
+ | "front"
+ | "minimize"
| "paste"
| "quit"
| "redo"
@@ -38,13 +47,21 @@ export type DesktopMenuRole =
| "togglefullscreen"
| "undo"
| "unhide"
+ | "window"
| "windowMenu"
+ | "zoom"
| "zoomIn"
| "zoomOut"
-export type DesktopMenuItem = {
+type DesktopMenuText =
+ | { label: string; labelKey: DesktopMenuLabelKey; translatable?: undefined }
+ | { label: string; labelKey?: undefined; translatable: false }
+
+export type DesktopMenuItem = (
+ | DesktopMenuText
+ | { label?: undefined; labelKey?: undefined; translatable?: undefined }
+) & {
type: "item"
- label?: string
command?: string
action?: DesktopMenuAction
role?: DesktopMenuRole
@@ -61,9 +78,8 @@ export type DesktopMenuSeparator = {
export type DesktopMenuEntry = DesktopMenuItem | DesktopMenuSeparator
-export type DesktopMenu = {
+export type DesktopMenu = DesktopMenuText & {
id: string
- label: string
role?: DesktopMenuRole
items?: DesktopMenuEntry[]
platforms?: DesktopMenuPlatform[]
@@ -73,36 +89,58 @@ export const DESKTOP_MENU: DesktopMenu[] = [
{
id: "app",
label: "OpenCode",
+ translatable: false,
platforms: ["macos"],
items: [
- { type: "item", role: "about" },
- { type: "item", label: "Check for Updates...", action: "app.checkForUpdates", enabled: "updater" },
- { type: "item", label: "Settings", command: "settings.open", accelerator: { macos: "Cmd+," } },
- { type: "item", label: "Reload Webview", action: "view.reload" },
- { type: "item", label: "Restart", action: "app.relaunch" },
- { type: "item", label: "Export Logs...", command: "logs.export" },
+ { type: "item", label: "About OpenCode", labelKey: "desktop.appMenu.about", role: "about" },
+ {
+ type: "item",
+ label: "Check for Updates...",
+ labelKey: "desktop.appMenu.checkForUpdates",
+ action: "app.checkForUpdates",
+ enabled: "updater",
+ },
+ {
+ type: "item",
+ label: "Settings",
+ labelKey: "desktop.appMenu.settings",
+ command: "settings.open",
+ accelerator: { macos: "Cmd+," },
+ },
+ { type: "item", label: "Reload Webview", labelKey: "desktop.appMenu.reloadWebview", action: "view.reload" },
+ { type: "item", label: "Restart", labelKey: "desktop.appMenu.restart", action: "app.relaunch" },
+ { type: "item", label: "Export Logs...", labelKey: "desktop.appMenu.exportLogs", command: "logs.export" },
{ type: "separator" },
- { type: "item", role: "hide" },
- { type: "item", role: "hideOthers" },
- { type: "item", role: "unhide" },
+ { type: "item", label: "Hide OpenCode", labelKey: "desktop.appMenu.hide", role: "hide" },
+ { type: "item", label: "Hide Others", labelKey: "desktop.appMenu.hideOthers", role: "hideOthers" },
+ { type: "item", label: "Show All", labelKey: "desktop.appMenu.showAll", role: "unhide" },
{ type: "separator" },
- { type: "item", role: "quit" },
+ { type: "item", label: "Quit OpenCode", labelKey: "desktop.appMenu.quit", role: "quit" },
],
},
{
id: "file",
label: "File",
+ labelKey: "desktop.appMenu.file",
items: [
{
type: "item",
label: "New Session",
+ labelKey: "desktop.appMenu.newSession",
command: "session.new",
accelerator: { macos: "Shift+Cmd+S" },
},
- { type: "item", label: "Open Project...", command: "project.open", accelerator: { macos: "Cmd+O" } },
+ {
+ type: "item",
+ label: "Open Project...",
+ labelKey: "desktop.appMenu.openProject",
+ command: "project.open",
+ accelerator: { macos: "Cmd+O" },
+ },
{
type: "item",
label: "Settings",
+ labelKey: "desktop.appMenu.settings",
command: "settings.open",
accelerator: { windows: "Ctrl+," },
platforms: ["windows"],
@@ -110,27 +148,71 @@ export const DESKTOP_MENU: DesktopMenu[] = [
{
type: "item",
label: "New Window",
+ labelKey: "desktop.appMenu.newWindow",
action: "window.new",
accelerator: { macos: "Cmd+Shift+N", windows: "Ctrl+Shift+N" },
},
{ type: "separator" },
- { type: "item", label: "Close Window", action: "window.close", role: "close" },
+ {
+ type: "item",
+ label: "Close Window",
+ labelKey: "desktop.appMenu.closeWindow",
+ action: "window.close",
+ role: "close",
+ },
],
},
{
id: "edit",
label: "Edit",
+ labelKey: "desktop.appMenu.edit",
items: [
- { type: "item", label: "Undo", action: "edit.undo", role: "undo", accelerator: { windows: "Ctrl+Z" } },
- { type: "item", label: "Redo", action: "edit.redo", role: "redo", accelerator: { windows: "Ctrl+Y" } },
+ {
+ type: "item",
+ label: "Undo",
+ labelKey: "desktop.appMenu.undo",
+ action: "edit.undo",
+ role: "undo",
+ accelerator: { windows: "Ctrl+Z" },
+ },
+ {
+ type: "item",
+ label: "Redo",
+ labelKey: "desktop.appMenu.redo",
+ action: "edit.redo",
+ role: "redo",
+ accelerator: { windows: "Ctrl+Y" },
+ },
{ type: "separator" },
- { type: "item", label: "Cut", action: "edit.cut", role: "cut", accelerator: { windows: "Ctrl+X" } },
- { type: "item", label: "Copy", action: "edit.copy", role: "copy", accelerator: { windows: "Ctrl+C" } },
- { type: "item", label: "Paste", action: "edit.paste", role: "paste", accelerator: { windows: "Ctrl+V" } },
- { type: "item", label: "Delete", action: "edit.delete" },
+ {
+ type: "item",
+ label: "Cut",
+ labelKey: "desktop.appMenu.cut",
+ action: "edit.cut",
+ role: "cut",
+ accelerator: { windows: "Ctrl+X" },
+ },
+ {
+ type: "item",
+ label: "Copy",
+ labelKey: "desktop.appMenu.copy",
+ action: "edit.copy",
+ role: "copy",
+ accelerator: { windows: "Ctrl+C" },
+ },
+ {
+ type: "item",
+ label: "Paste",
+ labelKey: "desktop.appMenu.paste",
+ action: "edit.paste",
+ role: "paste",
+ accelerator: { windows: "Ctrl+V" },
+ },
+ { type: "item", label: "Delete", labelKey: "desktop.appMenu.delete", action: "edit.delete" },
{
type: "item",
label: "Select All",
+ labelKey: "desktop.appMenu.selectAll",
action: "edit.selectAll",
role: "selectAll",
accelerator: { windows: "Ctrl+A" },
@@ -140,46 +222,112 @@ export const DESKTOP_MENU: DesktopMenu[] = [
{
id: "view",
label: "View",
+ labelKey: "desktop.appMenu.view",
items: [
- { type: "item", label: "Toggle Sidebar", command: "sidebar.toggle" },
- { type: "item", label: "Toggle Terminal", command: "terminal.toggle", accelerator: { macos: "Ctrl+`" } },
- { type: "item", label: "Toggle File Tree", command: "fileTree.toggle" },
+ { type: "item", label: "Toggle Sidebar", labelKey: "desktop.appMenu.toggleSidebar", command: "sidebar.toggle" },
+ {
+ type: "item",
+ label: "Toggle Terminal",
+ labelKey: "desktop.appMenu.toggleTerminal",
+ command: "terminal.toggle",
+ accelerator: { macos: "Ctrl+`" },
+ },
+ {
+ type: "item",
+ label: "Toggle File Tree",
+ labelKey: "desktop.appMenu.toggleFileTree",
+ command: "fileTree.toggle",
+ },
{ type: "separator" },
- { type: "item", label: "Reload", action: "view.reload", role: "reload" },
- { type: "item", label: "Toggle Developer Tools", action: "view.toggleDevTools", role: "toggleDevTools" },
+ { type: "item", label: "Reload", labelKey: "desktop.appMenu.reload", action: "view.reload", role: "reload" },
+ {
+ type: "item",
+ label: "Toggle Developer Tools",
+ labelKey: "desktop.appMenu.toggleDeveloperTools",
+ action: "view.toggleDevTools",
+ role: "toggleDevTools",
+ },
{ type: "separator" },
{
type: "item",
label: "Actual Size",
+ labelKey: "desktop.appMenu.actualSize",
action: "view.resetZoom",
role: "resetZoom",
accelerator: { windows: "Ctrl+0" },
},
- { type: "item", label: "Zoom In", action: "view.zoomIn", role: "zoomIn", accelerator: { windows: "Ctrl++" } },
- { type: "item", label: "Zoom Out", action: "view.zoomOut", role: "zoomOut", accelerator: { windows: "Ctrl+-" } },
+ {
+ type: "item",
+ label: "Zoom In",
+ labelKey: "desktop.appMenu.zoomIn",
+ action: "view.zoomIn",
+ role: "zoomIn",
+ accelerator: { windows: "Ctrl++" },
+ },
+ {
+ type: "item",
+ label: "Zoom Out",
+ labelKey: "desktop.appMenu.zoomOut",
+ action: "view.zoomOut",
+ role: "zoomOut",
+ accelerator: { windows: "Ctrl+-" },
+ },
{ type: "separator" },
- { type: "item", label: "Toggle Full Screen", action: "view.toggleFullscreen", role: "togglefullscreen" },
+ {
+ type: "item",
+ label: "Toggle Full Screen",
+ labelKey: "desktop.appMenu.toggleFullScreen",
+ action: "view.toggleFullscreen",
+ role: "togglefullscreen",
+ },
],
},
{
id: "go",
label: "Go",
+ labelKey: "desktop.appMenu.go",
items: [
- { type: "item", label: "Back", command: "common.goBack", accelerator: { macos: "Cmd+[" } },
- { type: "item", label: "Forward", command: "common.goForward", accelerator: { macos: "Cmd+]" } },
+ {
+ type: "item",
+ label: "Back",
+ labelKey: "desktop.appMenu.back",
+ command: "common.goBack",
+ accelerator: { macos: "Cmd+[" },
+ },
+ {
+ type: "item",
+ label: "Forward",
+ labelKey: "desktop.appMenu.forward",
+ command: "common.goForward",
+ accelerator: { macos: "Cmd+]" },
+ },
{ type: "separator" },
- { type: "item", label: "Previous Session", command: "session.previous", accelerator: { macos: "Option+Up" } },
- { type: "item", label: "Next Session", command: "session.next", accelerator: { macos: "Option+Down" } },
+ {
+ type: "item",
+ label: "Previous Session",
+ labelKey: "desktop.appMenu.previousSession",
+ command: "session.previous",
+ accelerator: { macos: "Option+Up" },
+ },
+ {
+ type: "item",
+ label: "Next Session",
+ labelKey: "desktop.appMenu.nextSession",
+ command: "session.next",
+ accelerator: { macos: "Option+Down" },
+ },
{ type: "separator" },
{
type: "item",
label: "Previous Project",
+ labelKey: "desktop.appMenu.previousProject",
command: "project.previous",
accelerator: { macos: "Cmd+Option+Up" },
},
{
type: "item",
label: "Next Project",
+ labelKey: "desktop.appMenu.nextProject",
command: "project.next",
accelerator: { macos: "Cmd+Option+Down" },
},
@@ -188,36 +336,103 @@ export const DESKTOP_MENU: DesktopMenu[] = [
{
id: "window",
label: "Window",
- role: "windowMenu",
+ labelKey: "desktop.appMenu.window",
items: [
- { type: "item", label: "Minimize", action: "window.minimize" },
- { type: "item", label: "Maximize", action: "window.toggleMaximize" },
+ {
+ type: "item",
+ label: "Minimize",
+ labelKey: "desktop.appMenu.minimize",
+ action: "window.minimize",
+ role: "minimize",
+ },
+ {
+ type: "item",
+ label: "Zoom",
+ labelKey: "desktop.appMenu.zoomWindow",
+ role: "zoom",
+ platforms: ["macos"],
+ },
+ {
+ type: "item",
+ label: "Maximize",
+ labelKey: "desktop.appMenu.maximize",
+ action: "window.toggleMaximize",
+ platforms: ["windows"],
+ },
{ type: "separator" },
- { type: "item", label: "Close Window", action: "window.close" },
+ {
+ type: "item",
+ label: "Close Window",
+ labelKey: "desktop.appMenu.closeWindow",
+ action: "window.close",
+ platforms: ["windows"],
+ },
+ {
+ type: "item",
+ label: "Bring All to Front",
+ labelKey: "desktop.appMenu.bringAllToFront",
+ role: "front",
+ platforms: ["macos"],
+ },
+ { type: "separator", platforms: ["macos"] },
+ { type: "item", role: "window", platforms: ["macos"] },
],
},
{
id: "help",
label: "Help",
+ labelKey: "desktop.appMenu.help",
items: [
- { type: "item", label: "OpenCode Documentation", href: "https://opencode.ai/docs" },
- { type: "item", label: "Support Forum", href: "https://discord.com/invite/opencode" },
- { type: "item", label: "Export Logs...", command: "logs.export" },
+ {
+ type: "item",
+ label: "OpenCode Documentation",
+ labelKey: "desktop.appMenu.documentation",
+ href: "https://opencode.ai/docs",
+ },
+ {
+ type: "item",
+ label: "Support Forum",
+ labelKey: "desktop.appMenu.supportForum",
+ href: "https://discord.com/invite/opencode",
+ },
+ { type: "item", label: "Export Logs...", labelKey: "desktop.appMenu.exportLogs", command: "logs.export" },
{ type: "separator" },
{
type: "item",
label: "Share Feedback",
+ labelKey: "desktop.appMenu.shareFeedback",
href: "https://github.com/anomalyco/opencode/issues/new?template=feature_request.yml",
},
{
type: "item",
label: "Report a Bug",
+ labelKey: "desktop.appMenu.reportBug",
href: "https://github.com/anomalyco/opencode/issues/new?template=bug_report.yml",
},
],
},
]
+export const DESKTOP_MENU_LABEL_KEYS: DesktopMenuLabelKey[] = [
+ ...new Set([
+ DESKTOP_MENU_ARIA_LABEL,
+ ...DESKTOP_MENU.flatMap((menu) => [
+ ...(menu.labelKey ? [menu.labelKey] : []),
+ ...(menu.items?.flatMap((entry) => (entry.type === "item" && entry.labelKey ? [entry.labelKey] : [])) ?? []),
+ ]),
+ ]),
+]
+
+export function translateDesktopMenu(translate: (key: DesktopMenuLabelKey) => string): DesktopMenuLabels {
+ return Object.fromEntries(DESKTOP_MENU_LABEL_KEYS.map((key) => [key, translate(key)]))
+}
+
+export function desktopMenuLabel(item: { label?: string; labelKey?: DesktopMenuLabelKey }, labels: DesktopMenuLabels) {
+ if (!item.labelKey) return item.label
+ const translated = labels[item.labelKey]
+ return typeof translated === "string" && translated.trim() ? translated : item.label
+}
+
export function desktopMenuVisible(item: { platforms?: DesktopMenuPlatform[] }, platform: DesktopMenuPlatform) {
return !item.platforms || item.platforms.includes(platform)
}
diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts
index 320738a6b027..a7401b408a15 100644
--- a/packages/app/src/i18n/ar.ts
+++ b/packages/app/src/i18n/ar.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "نظام",
"theme.scheme.light": "فاتح",
"theme.scheme.dark": "داكن",
+ "desktop.appMenu.ariaLabel": "قائمة OpenCode",
+ "desktop.appMenu.file": "ملف",
+ "desktop.appMenu.edit": "تحرير",
+ "desktop.appMenu.view": "عرض",
+ "desktop.appMenu.go": "انتقال",
+ "desktop.appMenu.window": "نافذة",
+ "desktop.appMenu.help": "مساعدة",
+ "desktop.appMenu.about": "حول OpenCode",
+ "desktop.appMenu.checkForUpdates": "التحقق من وجود تحديثات...",
+ "desktop.appMenu.settings": "الإعدادات",
+ "desktop.appMenu.reloadWebview": "إعادة تحميل عرض الويب",
+ "desktop.appMenu.restart": "إعادة التشغيل",
+ "desktop.appMenu.exportLogs": "تصدير السجلات...",
+ "desktop.appMenu.hide": "إخفاء OpenCode",
+ "desktop.appMenu.hideOthers": "إخفاء الآخرين",
+ "desktop.appMenu.showAll": "إظهار الكل",
+ "desktop.appMenu.quit": "إنهاء OpenCode",
+ "desktop.appMenu.newSession": "جلسة جديدة",
+ "desktop.appMenu.openProject": "فتح مشروع...",
+ "desktop.appMenu.newWindow": "نافذة جديدة",
+ "desktop.appMenu.closeWindow": "إغلاق النافذة",
+ "desktop.appMenu.undo": "تراجع",
+ "desktop.appMenu.redo": "إعادة",
+ "desktop.appMenu.cut": "قص",
+ "desktop.appMenu.copy": "نسخ",
+ "desktop.appMenu.paste": "لصق",
+ "desktop.appMenu.delete": "حذف",
+ "desktop.appMenu.selectAll": "تحديد الكل",
+ "desktop.appMenu.toggleSidebar": "تبديل الشريط الجانبي",
+ "desktop.appMenu.toggleTerminal": "تبديل المحطة الطرفية",
+ "desktop.appMenu.toggleFileTree": "تبديل شجرة الملفات",
+ "desktop.appMenu.reload": "إعادة التحميل",
+ "desktop.appMenu.toggleDeveloperTools": "تبديل أدوات المطور",
+ "desktop.appMenu.actualSize": "الحجم الفعلي",
+ "desktop.appMenu.zoomIn": "تكبير",
+ "desktop.appMenu.zoomOut": "تصغير",
+ "desktop.appMenu.toggleFullScreen": "تبديل وضع ملء الشاشة",
+ "desktop.appMenu.back": "رجوع",
+ "desktop.appMenu.forward": "تقدم",
+ "desktop.appMenu.previousSession": "الجلسة السابقة",
+ "desktop.appMenu.nextSession": "الجلسة التالية",
+ "desktop.appMenu.previousProject": "المشروع السابق",
+ "desktop.appMenu.nextProject": "المشروع التالي",
+ "desktop.appMenu.minimize": "تصغير",
+ "desktop.appMenu.zoomWindow": "تكبير",
+ "desktop.appMenu.maximize": "تكبير",
+ "desktop.appMenu.bringAllToFront": "إحضار الكل إلى المقدمة",
+ "desktop.appMenu.documentation": "وثائق OpenCode",
+ "desktop.appMenu.supportForum": "منتدى الدعم",
+ "desktop.appMenu.shareFeedback": "مشاركة الملاحظات",
+ "desktop.appMenu.reportBug": "الإبلاغ عن خطأ",
"command.sidebar.toggle": "تبديل الشريط الجانبي",
"command.project.open": "فتح مشروع",
"command.project.previous": "المشروع السابق",
diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts
index 9d6765ec94ef..faf69fa9c071 100644
--- a/packages/app/src/i18n/br.ts
+++ b/packages/app/src/i18n/br.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "Sistema",
"theme.scheme.light": "Claro",
"theme.scheme.dark": "Escuro",
+ "desktop.appMenu.ariaLabel": "Menu do OpenCode",
+ "desktop.appMenu.file": "Arquivo",
+ "desktop.appMenu.edit": "Editar",
+ "desktop.appMenu.view": "Visualizar",
+ "desktop.appMenu.go": "Ir",
+ "desktop.appMenu.window": "Janela",
+ "desktop.appMenu.help": "Ajuda",
+ "desktop.appMenu.about": "Sobre o OpenCode",
+ "desktop.appMenu.checkForUpdates": "Verificar atualizações...",
+ "desktop.appMenu.settings": "Configurações",
+ "desktop.appMenu.reloadWebview": "Recarregar visualização web",
+ "desktop.appMenu.restart": "Reiniciar",
+ "desktop.appMenu.exportLogs": "Exportar logs...",
+ "desktop.appMenu.hide": "Ocultar OpenCode",
+ "desktop.appMenu.hideOthers": "Ocultar outros",
+ "desktop.appMenu.showAll": "Mostrar tudo",
+ "desktop.appMenu.quit": "Sair do OpenCode",
+ "desktop.appMenu.newSession": "Nova sessão",
+ "desktop.appMenu.openProject": "Abrir projeto...",
+ "desktop.appMenu.newWindow": "Nova janela",
+ "desktop.appMenu.closeWindow": "Fechar janela",
+ "desktop.appMenu.undo": "Desfazer",
+ "desktop.appMenu.redo": "Refazer",
+ "desktop.appMenu.cut": "Recortar",
+ "desktop.appMenu.copy": "Copiar",
+ "desktop.appMenu.paste": "Colar",
+ "desktop.appMenu.delete": "Excluir",
+ "desktop.appMenu.selectAll": "Selecionar tudo",
+ "desktop.appMenu.toggleSidebar": "Alternar barra lateral",
+ "desktop.appMenu.toggleTerminal": "Alternar terminal",
+ "desktop.appMenu.toggleFileTree": "Alternar árvore de arquivos",
+ "desktop.appMenu.reload": "Recarregar",
+ "desktop.appMenu.toggleDeveloperTools": "Alternar ferramentas do desenvolvedor",
+ "desktop.appMenu.actualSize": "Tamanho real",
+ "desktop.appMenu.zoomIn": "Ampliar",
+ "desktop.appMenu.zoomOut": "Reduzir",
+ "desktop.appMenu.toggleFullScreen": "Alternar tela cheia",
+ "desktop.appMenu.back": "Voltar",
+ "desktop.appMenu.forward": "Avançar",
+ "desktop.appMenu.previousSession": "Sessão anterior",
+ "desktop.appMenu.nextSession": "Próxima sessão",
+ "desktop.appMenu.previousProject": "Projeto anterior",
+ "desktop.appMenu.nextProject": "Próximo projeto",
+ "desktop.appMenu.minimize": "Minimizar",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Maximizar",
+ "desktop.appMenu.bringAllToFront": "Trazer Tudo para Frente",
+ "desktop.appMenu.documentation": "Documentação do OpenCode",
+ "desktop.appMenu.supportForum": "Fórum de suporte",
+ "desktop.appMenu.shareFeedback": "Compartilhar feedback",
+ "desktop.appMenu.reportBug": "Relatar um bug",
"command.sidebar.toggle": "Alternar barra lateral",
"command.project.open": "Abrir projeto",
"command.project.previous": "Projeto anterior",
diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts
index 915313c3e2b5..dd43c7cbc1be 100644
--- a/packages/app/src/i18n/bs.ts
+++ b/packages/app/src/i18n/bs.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Svijetlo",
"theme.scheme.dark": "Tamno",
+ "desktop.appMenu.ariaLabel": "OpenCode meni",
+ "desktop.appMenu.file": "Datoteka",
+ "desktop.appMenu.edit": "Uredi",
+ "desktop.appMenu.view": "Prikaz",
+ "desktop.appMenu.go": "Idi",
+ "desktop.appMenu.window": "Prozor",
+ "desktop.appMenu.help": "Pomoć",
+ "desktop.appMenu.about": "O aplikaciji OpenCode",
+ "desktop.appMenu.checkForUpdates": "Provjeri ažuriranja...",
+ "desktop.appMenu.settings": "Postavke",
+ "desktop.appMenu.reloadWebview": "Ponovo učitaj web-prikaz",
+ "desktop.appMenu.restart": "Ponovo pokreni",
+ "desktop.appMenu.exportLogs": "Izvezi logove...",
+ "desktop.appMenu.hide": "Sakrij OpenCode",
+ "desktop.appMenu.hideOthers": "Sakrij ostale",
+ "desktop.appMenu.showAll": "Prikaži sve",
+ "desktop.appMenu.quit": "Zatvori OpenCode",
+ "desktop.appMenu.newSession": "Nova sesija",
+ "desktop.appMenu.openProject": "Otvori projekat...",
+ "desktop.appMenu.newWindow": "Novi prozor",
+ "desktop.appMenu.closeWindow": "Zatvori prozor",
+ "desktop.appMenu.undo": "Poništi",
+ "desktop.appMenu.redo": "Vrati",
+ "desktop.appMenu.cut": "Izreži",
+ "desktop.appMenu.copy": "Kopiraj",
+ "desktop.appMenu.paste": "Zalijepi",
+ "desktop.appMenu.delete": "Izbriši",
+ "desktop.appMenu.selectAll": "Odaberi sve",
+ "desktop.appMenu.toggleSidebar": "Prikaži/sakrij bočnu traku",
+ "desktop.appMenu.toggleTerminal": "Prikaži/sakrij terminal",
+ "desktop.appMenu.toggleFileTree": "Prikaži/sakrij stablo datoteka",
+ "desktop.appMenu.reload": "Ponovo učitaj",
+ "desktop.appMenu.toggleDeveloperTools": "Prikaži/sakrij razvojne alate",
+ "desktop.appMenu.actualSize": "Stvarna veličina",
+ "desktop.appMenu.zoomIn": "Uvećaj",
+ "desktop.appMenu.zoomOut": "Umanji",
+ "desktop.appMenu.toggleFullScreen": "Prikaži/sakrij cijeli ekran",
+ "desktop.appMenu.back": "Nazad",
+ "desktop.appMenu.forward": "Naprijed",
+ "desktop.appMenu.previousSession": "Prethodna sesija",
+ "desktop.appMenu.nextSession": "Sljedeća sesija",
+ "desktop.appMenu.previousProject": "Prethodni projekat",
+ "desktop.appMenu.nextProject": "Sljedeći projekat",
+ "desktop.appMenu.minimize": "Minimiziraj",
+ "desktop.appMenu.zoomWindow": "Uvećaj",
+ "desktop.appMenu.maximize": "Maksimiziraj",
+ "desktop.appMenu.bringAllToFront": "Dovedi sve naprijed",
+ "desktop.appMenu.documentation": "Dokumentacija za OpenCode",
+ "desktop.appMenu.supportForum": "Forum za podršku",
+ "desktop.appMenu.shareFeedback": "Podijeli povratne informacije",
+ "desktop.appMenu.reportBug": "Prijavi grešku",
+
"command.sidebar.toggle": "Prikaži/sakrij bočnu traku",
"command.project.open": "Otvori projekat",
"command.project.previous": "Prethodni projekat",
diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts
index 22fcdf39ceb0..16513db93215 100644
--- a/packages/app/src/i18n/da.ts
+++ b/packages/app/src/i18n/da.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Lys",
"theme.scheme.dark": "Mørk",
+ "desktop.appMenu.ariaLabel": "OpenCode-menu",
+ "desktop.appMenu.file": "Fil",
+ "desktop.appMenu.edit": "Rediger",
+ "desktop.appMenu.view": "Vis",
+ "desktop.appMenu.go": "Gå",
+ "desktop.appMenu.window": "Vindue",
+ "desktop.appMenu.help": "Hjælp",
+ "desktop.appMenu.about": "Om OpenCode",
+ "desktop.appMenu.checkForUpdates": "Søg efter opdateringer...",
+ "desktop.appMenu.settings": "Indstillinger",
+ "desktop.appMenu.reloadWebview": "Genindlæs webvisning",
+ "desktop.appMenu.restart": "Genstart",
+ "desktop.appMenu.exportLogs": "Eksportér logfiler...",
+ "desktop.appMenu.hide": "Skjul OpenCode",
+ "desktop.appMenu.hideOthers": "Skjul andre",
+ "desktop.appMenu.showAll": "Vis alle",
+ "desktop.appMenu.quit": "Afslut OpenCode",
+ "desktop.appMenu.newSession": "Ny session",
+ "desktop.appMenu.openProject": "Åbn projekt...",
+ "desktop.appMenu.newWindow": "Nyt vindue",
+ "desktop.appMenu.closeWindow": "Luk vindue",
+ "desktop.appMenu.undo": "Fortryd",
+ "desktop.appMenu.redo": "Gentag",
+ "desktop.appMenu.cut": "Klip",
+ "desktop.appMenu.copy": "Kopiér",
+ "desktop.appMenu.paste": "Sæt ind",
+ "desktop.appMenu.delete": "Slet",
+ "desktop.appMenu.selectAll": "Vælg alle",
+ "desktop.appMenu.toggleSidebar": "Vis/skjul sidebjælke",
+ "desktop.appMenu.toggleTerminal": "Vis/skjul terminal",
+ "desktop.appMenu.toggleFileTree": "Vis/skjul filtræ",
+ "desktop.appMenu.reload": "Genindlæs",
+ "desktop.appMenu.toggleDeveloperTools": "Vis/skjul udviklerværktøjer",
+ "desktop.appMenu.actualSize": "Faktisk størrelse",
+ "desktop.appMenu.zoomIn": "Zoom ind",
+ "desktop.appMenu.zoomOut": "Zoom ud",
+ "desktop.appMenu.toggleFullScreen": "Slå fuld skærm til/fra",
+ "desktop.appMenu.back": "Tilbage",
+ "desktop.appMenu.forward": "Frem",
+ "desktop.appMenu.previousSession": "Forrige session",
+ "desktop.appMenu.nextSession": "Næste session",
+ "desktop.appMenu.previousProject": "Forrige projekt",
+ "desktop.appMenu.nextProject": "Næste projekt",
+ "desktop.appMenu.minimize": "Minimer",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Maksimer",
+ "desktop.appMenu.bringAllToFront": "Anbring alle forrest",
+ "desktop.appMenu.documentation": "OpenCode-dokumentation",
+ "desktop.appMenu.supportForum": "Supportforum",
+ "desktop.appMenu.shareFeedback": "Giv feedback",
+ "desktop.appMenu.reportBug": "Rapportér en fejl",
+
"command.sidebar.toggle": "Skift sidebjælke",
"command.project.open": "Åbn projekt",
"command.project.previous": "Forrige projekt",
diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts
index bc2ac9be381d..5e51c92de1d2 100644
--- a/packages/app/src/i18n/de.ts
+++ b/packages/app/src/i18n/de.ts
@@ -23,6 +23,57 @@ export const dict = {
"theme.scheme.system": "System",
"theme.scheme.light": "Hell",
"theme.scheme.dark": "Dunkel",
+ "desktop.appMenu.ariaLabel": "OpenCode-Menü",
+ "desktop.appMenu.file": "Datei",
+ "desktop.appMenu.edit": "Bearbeiten",
+ "desktop.appMenu.view": "Ansicht",
+ "desktop.appMenu.go": "Gehe zu",
+ "desktop.appMenu.window": "Fenster",
+ "desktop.appMenu.help": "Hilfe",
+ "desktop.appMenu.about": "Über OpenCode",
+ "desktop.appMenu.checkForUpdates": "Nach Updates suchen...",
+ "desktop.appMenu.settings": "Einstellungen",
+ "desktop.appMenu.reloadWebview": "Webview neu laden",
+ "desktop.appMenu.restart": "Neu starten",
+ "desktop.appMenu.exportLogs": "Protokolle exportieren...",
+ "desktop.appMenu.hide": "OpenCode ausblenden",
+ "desktop.appMenu.hideOthers": "Andere ausblenden",
+ "desktop.appMenu.showAll": "Alle einblenden",
+ "desktop.appMenu.quit": "OpenCode beenden",
+ "desktop.appMenu.newSession": "Neue Sitzung",
+ "desktop.appMenu.openProject": "Projekt öffnen...",
+ "desktop.appMenu.newWindow": "Neues Fenster",
+ "desktop.appMenu.closeWindow": "Fenster schließen",
+ "desktop.appMenu.undo": "Rückgängig",
+ "desktop.appMenu.redo": "Wiederholen",
+ "desktop.appMenu.cut": "Ausschneiden",
+ "desktop.appMenu.copy": "Kopieren",
+ "desktop.appMenu.paste": "Einfügen",
+ "desktop.appMenu.delete": "Löschen",
+ "desktop.appMenu.selectAll": "Alles auswählen",
+ "desktop.appMenu.toggleSidebar": "Seitenleiste ein-/ausblenden",
+ "desktop.appMenu.toggleTerminal": "Terminal ein-/ausblenden",
+ "desktop.appMenu.toggleFileTree": "Dateibaum ein-/ausblenden",
+ "desktop.appMenu.reload": "Neu laden",
+ "desktop.appMenu.toggleDeveloperTools": "Entwicklerwerkzeuge ein-/ausblenden",
+ "desktop.appMenu.actualSize": "Tatsächliche Größe",
+ "desktop.appMenu.zoomIn": "Vergrößern",
+ "desktop.appMenu.zoomOut": "Verkleinern",
+ "desktop.appMenu.toggleFullScreen": "Vollbild ein-/ausschalten",
+ "desktop.appMenu.back": "Zurück",
+ "desktop.appMenu.forward": "Vorwärts",
+ "desktop.appMenu.previousSession": "Vorherige Sitzung",
+ "desktop.appMenu.nextSession": "Nächste Sitzung",
+ "desktop.appMenu.previousProject": "Vorheriges Projekt",
+ "desktop.appMenu.nextProject": "Nächstes Projekt",
+ "desktop.appMenu.minimize": "Minimieren",
+ "desktop.appMenu.zoomWindow": "Zoomen",
+ "desktop.appMenu.maximize": "Maximieren",
+ "desktop.appMenu.bringAllToFront": "Alle nach vorne",
+ "desktop.appMenu.documentation": "OpenCode-Dokumentation",
+ "desktop.appMenu.supportForum": "Supportforum",
+ "desktop.appMenu.shareFeedback": "Feedback geben",
+ "desktop.appMenu.reportBug": "Fehler melden",
"command.sidebar.toggle": "Seitenleiste umschalten",
"command.project.open": "Projekt öffnen",
"command.project.previous": "Vorheriges Projekt",
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index f03147f151d1..625e8756bf79 100644
--- a/packages/app/src/i18n/en.ts
+++ b/packages/app/src/i18n/en.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Light",
"theme.scheme.dark": "Dark",
+ "desktop.appMenu.ariaLabel": "OpenCode menu",
+ "desktop.appMenu.file": "File",
+ "desktop.appMenu.edit": "Edit",
+ "desktop.appMenu.view": "View",
+ "desktop.appMenu.go": "Go",
+ "desktop.appMenu.window": "Window",
+ "desktop.appMenu.help": "Help",
+ "desktop.appMenu.about": "About OpenCode",
+ "desktop.appMenu.checkForUpdates": "Check for Updates...",
+ "desktop.appMenu.settings": "Settings",
+ "desktop.appMenu.reloadWebview": "Reload Webview",
+ "desktop.appMenu.restart": "Restart",
+ "desktop.appMenu.exportLogs": "Export Logs...",
+ "desktop.appMenu.hide": "Hide OpenCode",
+ "desktop.appMenu.hideOthers": "Hide Others",
+ "desktop.appMenu.showAll": "Show All",
+ "desktop.appMenu.quit": "Quit OpenCode",
+ "desktop.appMenu.newSession": "New Session",
+ "desktop.appMenu.openProject": "Open Project...",
+ "desktop.appMenu.newWindow": "New Window",
+ "desktop.appMenu.closeWindow": "Close Window",
+ "desktop.appMenu.undo": "Undo",
+ "desktop.appMenu.redo": "Redo",
+ "desktop.appMenu.cut": "Cut",
+ "desktop.appMenu.copy": "Copy",
+ "desktop.appMenu.paste": "Paste",
+ "desktop.appMenu.delete": "Delete",
+ "desktop.appMenu.selectAll": "Select All",
+ "desktop.appMenu.toggleSidebar": "Toggle Sidebar",
+ "desktop.appMenu.toggleTerminal": "Toggle Terminal",
+ "desktop.appMenu.toggleFileTree": "Toggle File Tree",
+ "desktop.appMenu.reload": "Reload",
+ "desktop.appMenu.toggleDeveloperTools": "Toggle Developer Tools",
+ "desktop.appMenu.actualSize": "Actual Size",
+ "desktop.appMenu.zoomIn": "Zoom In",
+ "desktop.appMenu.zoomOut": "Zoom Out",
+ "desktop.appMenu.toggleFullScreen": "Toggle Full Screen",
+ "desktop.appMenu.back": "Back",
+ "desktop.appMenu.forward": "Forward",
+ "desktop.appMenu.previousSession": "Previous Session",
+ "desktop.appMenu.nextSession": "Next Session",
+ "desktop.appMenu.previousProject": "Previous Project",
+ "desktop.appMenu.nextProject": "Next Project",
+ "desktop.appMenu.minimize": "Minimize",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Maximize",
+ "desktop.appMenu.bringAllToFront": "Bring All to Front",
+ "desktop.appMenu.documentation": "OpenCode Documentation",
+ "desktop.appMenu.supportForum": "Support Forum",
+ "desktop.appMenu.shareFeedback": "Share Feedback",
+ "desktop.appMenu.reportBug": "Report a Bug",
+
"command.sidebar.toggle": "Toggle sidebar",
"command.project.open": "Open project",
"command.project.previous": "Previous project",
diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts
index 00dca6704b25..01be2c2c90a6 100644
--- a/packages/app/src/i18n/es.ts
+++ b/packages/app/src/i18n/es.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Claro",
"theme.scheme.dark": "Oscuro",
+ "desktop.appMenu.ariaLabel": "Menú de OpenCode",
+ "desktop.appMenu.file": "Archivo",
+ "desktop.appMenu.edit": "Editar",
+ "desktop.appMenu.view": "Ver",
+ "desktop.appMenu.go": "Ir",
+ "desktop.appMenu.window": "Ventana",
+ "desktop.appMenu.help": "Ayuda",
+ "desktop.appMenu.about": "Acerca de OpenCode",
+ "desktop.appMenu.checkForUpdates": "Buscar actualizaciones...",
+ "desktop.appMenu.settings": "Ajustes",
+ "desktop.appMenu.reloadWebview": "Recargar vista web",
+ "desktop.appMenu.restart": "Reiniciar",
+ "desktop.appMenu.exportLogs": "Exportar registros...",
+ "desktop.appMenu.hide": "Ocultar OpenCode",
+ "desktop.appMenu.hideOthers": "Ocultar las demás",
+ "desktop.appMenu.showAll": "Mostrar todo",
+ "desktop.appMenu.quit": "Salir de OpenCode",
+ "desktop.appMenu.newSession": "Nueva sesión",
+ "desktop.appMenu.openProject": "Abrir proyecto...",
+ "desktop.appMenu.newWindow": "Nueva ventana",
+ "desktop.appMenu.closeWindow": "Cerrar ventana",
+ "desktop.appMenu.undo": "Deshacer",
+ "desktop.appMenu.redo": "Rehacer",
+ "desktop.appMenu.cut": "Cortar",
+ "desktop.appMenu.copy": "Copiar",
+ "desktop.appMenu.paste": "Pegar",
+ "desktop.appMenu.delete": "Eliminar",
+ "desktop.appMenu.selectAll": "Seleccionar todo",
+ "desktop.appMenu.toggleSidebar": "Mostrar/ocultar barra lateral",
+ "desktop.appMenu.toggleTerminal": "Mostrar/ocultar terminal",
+ "desktop.appMenu.toggleFileTree": "Mostrar/ocultar árbol de archivos",
+ "desktop.appMenu.reload": "Recargar",
+ "desktop.appMenu.toggleDeveloperTools": "Mostrar/ocultar herramientas para desarrolladores",
+ "desktop.appMenu.actualSize": "Tamaño real",
+ "desktop.appMenu.zoomIn": "Acercar",
+ "desktop.appMenu.zoomOut": "Alejar",
+ "desktop.appMenu.toggleFullScreen": "Alternar pantalla completa",
+ "desktop.appMenu.back": "Atrás",
+ "desktop.appMenu.forward": "Adelante",
+ "desktop.appMenu.previousSession": "Sesión anterior",
+ "desktop.appMenu.nextSession": "Siguiente sesión",
+ "desktop.appMenu.previousProject": "Proyecto anterior",
+ "desktop.appMenu.nextProject": "Siguiente proyecto",
+ "desktop.appMenu.minimize": "Minimizar",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Maximizar",
+ "desktop.appMenu.bringAllToFront": "Traer todo al frente",
+ "desktop.appMenu.documentation": "Documentación de OpenCode",
+ "desktop.appMenu.supportForum": "Foro de soporte",
+ "desktop.appMenu.shareFeedback": "Compartir comentarios",
+ "desktop.appMenu.reportBug": "Informar de un error",
+
"command.sidebar.toggle": "Alternar barra lateral",
"command.project.open": "Abrir proyecto",
"command.project.previous": "Proyecto anterior",
diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts
index d1487ff61ef3..a5bc37d6d416 100644
--- a/packages/app/src/i18n/fr.ts
+++ b/packages/app/src/i18n/fr.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "Système",
"theme.scheme.light": "Clair",
"theme.scheme.dark": "Sombre",
+ "desktop.appMenu.ariaLabel": "Menu OpenCode",
+ "desktop.appMenu.file": "Fichier",
+ "desktop.appMenu.edit": "Édition",
+ "desktop.appMenu.view": "Affichage",
+ "desktop.appMenu.go": "Aller",
+ "desktop.appMenu.window": "Fenêtre",
+ "desktop.appMenu.help": "Aide",
+ "desktop.appMenu.about": "À propos d'OpenCode",
+ "desktop.appMenu.checkForUpdates": "Rechercher les mises à jour...",
+ "desktop.appMenu.settings": "Paramètres",
+ "desktop.appMenu.reloadWebview": "Recharger la vue web",
+ "desktop.appMenu.restart": "Redémarrer",
+ "desktop.appMenu.exportLogs": "Exporter les journaux...",
+ "desktop.appMenu.hide": "Masquer OpenCode",
+ "desktop.appMenu.hideOthers": "Masquer les autres",
+ "desktop.appMenu.showAll": "Tout afficher",
+ "desktop.appMenu.quit": "Quitter OpenCode",
+ "desktop.appMenu.newSession": "Nouvelle session",
+ "desktop.appMenu.openProject": "Ouvrir un projet...",
+ "desktop.appMenu.newWindow": "Nouvelle fenêtre",
+ "desktop.appMenu.closeWindow": "Fermer la fenêtre",
+ "desktop.appMenu.undo": "Annuler",
+ "desktop.appMenu.redo": "Rétablir",
+ "desktop.appMenu.cut": "Couper",
+ "desktop.appMenu.copy": "Copier",
+ "desktop.appMenu.paste": "Coller",
+ "desktop.appMenu.delete": "Supprimer",
+ "desktop.appMenu.selectAll": "Tout sélectionner",
+ "desktop.appMenu.toggleSidebar": "Afficher ou masquer la barre latérale",
+ "desktop.appMenu.toggleTerminal": "Afficher ou masquer le terminal",
+ "desktop.appMenu.toggleFileTree": "Afficher ou masquer l'arborescence des fichiers",
+ "desktop.appMenu.reload": "Recharger",
+ "desktop.appMenu.toggleDeveloperTools": "Afficher ou masquer les outils de développement",
+ "desktop.appMenu.actualSize": "Taille réelle",
+ "desktop.appMenu.zoomIn": "Zoom avant",
+ "desktop.appMenu.zoomOut": "Zoom arrière",
+ "desktop.appMenu.toggleFullScreen": "Activer ou désactiver le plein écran",
+ "desktop.appMenu.back": "Retour",
+ "desktop.appMenu.forward": "Suivant",
+ "desktop.appMenu.previousSession": "Session précédente",
+ "desktop.appMenu.nextSession": "Session suivante",
+ "desktop.appMenu.previousProject": "Projet précédent",
+ "desktop.appMenu.nextProject": "Projet suivant",
+ "desktop.appMenu.minimize": "Réduire",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Agrandir",
+ "desktop.appMenu.bringAllToFront": "Tout ramener au premier plan",
+ "desktop.appMenu.documentation": "Documentation OpenCode",
+ "desktop.appMenu.supportForum": "Forum d'assistance",
+ "desktop.appMenu.shareFeedback": "Donner votre avis",
+ "desktop.appMenu.reportBug": "Signaler un bug",
"command.sidebar.toggle": "Basculer la barre latérale",
"command.project.open": "Ouvrir un projet",
"command.project.previous": "Projet précédent",
diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts
index 6a3b1ebcb02e..19e56b4c3c4f 100644
--- a/packages/app/src/i18n/ja.ts
+++ b/packages/app/src/i18n/ja.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "システム",
"theme.scheme.light": "ライト",
"theme.scheme.dark": "ダーク",
+ "desktop.appMenu.ariaLabel": "OpenCodeメニュー",
+ "desktop.appMenu.file": "ファイル",
+ "desktop.appMenu.edit": "編集",
+ "desktop.appMenu.view": "表示",
+ "desktop.appMenu.go": "移動",
+ "desktop.appMenu.window": "ウィンドウ",
+ "desktop.appMenu.help": "ヘルプ",
+ "desktop.appMenu.about": "OpenCodeについて",
+ "desktop.appMenu.checkForUpdates": "アップデートを確認...",
+ "desktop.appMenu.settings": "設定",
+ "desktop.appMenu.reloadWebview": "Webビューを再読み込み",
+ "desktop.appMenu.restart": "再起動",
+ "desktop.appMenu.exportLogs": "ログをエクスポート...",
+ "desktop.appMenu.hide": "OpenCodeを隠す",
+ "desktop.appMenu.hideOthers": "ほかを隠す",
+ "desktop.appMenu.showAll": "すべてを表示",
+ "desktop.appMenu.quit": "OpenCodeを終了",
+ "desktop.appMenu.newSession": "新しいセッション",
+ "desktop.appMenu.openProject": "プロジェクトを開く...",
+ "desktop.appMenu.newWindow": "新しいウィンドウ",
+ "desktop.appMenu.closeWindow": "ウィンドウを閉じる",
+ "desktop.appMenu.undo": "元に戻す",
+ "desktop.appMenu.redo": "やり直す",
+ "desktop.appMenu.cut": "切り取り",
+ "desktop.appMenu.copy": "コピー",
+ "desktop.appMenu.paste": "ペースト",
+ "desktop.appMenu.delete": "削除",
+ "desktop.appMenu.selectAll": "すべてを選択",
+ "desktop.appMenu.toggleSidebar": "サイドバーの表示を切り替え",
+ "desktop.appMenu.toggleTerminal": "ターミナルの表示を切り替え",
+ "desktop.appMenu.toggleFileTree": "ファイルツリーの表示を切り替え",
+ "desktop.appMenu.reload": "再読み込み",
+ "desktop.appMenu.toggleDeveloperTools": "開発者ツールの表示を切り替え",
+ "desktop.appMenu.actualSize": "実際のサイズ",
+ "desktop.appMenu.zoomIn": "拡大",
+ "desktop.appMenu.zoomOut": "縮小",
+ "desktop.appMenu.toggleFullScreen": "フルスクリーン表示を切り替え",
+ "desktop.appMenu.back": "戻る",
+ "desktop.appMenu.forward": "進む",
+ "desktop.appMenu.previousSession": "前のセッション",
+ "desktop.appMenu.nextSession": "次のセッション",
+ "desktop.appMenu.previousProject": "前のプロジェクト",
+ "desktop.appMenu.nextProject": "次のプロジェクト",
+ "desktop.appMenu.minimize": "最小化",
+ "desktop.appMenu.zoomWindow": "ズーム",
+ "desktop.appMenu.maximize": "最大化",
+ "desktop.appMenu.bringAllToFront": "すべてを手前に移動",
+ "desktop.appMenu.documentation": "OpenCodeドキュメント",
+ "desktop.appMenu.supportForum": "サポートフォーラム",
+ "desktop.appMenu.shareFeedback": "フィードバックを送信",
+ "desktop.appMenu.reportBug": "バグを報告",
"command.sidebar.toggle": "サイドバーの切り替え",
"command.project.open": "プロジェクトを開く",
"command.project.previous": "前のプロジェクト",
diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts
index 3c262ce3b93a..66a09cee6c63 100644
--- a/packages/app/src/i18n/ko.ts
+++ b/packages/app/src/i18n/ko.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "시스템",
"theme.scheme.light": "라이트",
"theme.scheme.dark": "다크",
+ "desktop.appMenu.ariaLabel": "OpenCode 메뉴",
+ "desktop.appMenu.file": "파일",
+ "desktop.appMenu.edit": "편집",
+ "desktop.appMenu.view": "보기",
+ "desktop.appMenu.go": "이동",
+ "desktop.appMenu.window": "창",
+ "desktop.appMenu.help": "도움말",
+ "desktop.appMenu.about": "OpenCode 정보",
+ "desktop.appMenu.checkForUpdates": "업데이트 확인...",
+ "desktop.appMenu.settings": "설정",
+ "desktop.appMenu.reloadWebview": "웹뷰 새로고침",
+ "desktop.appMenu.restart": "다시 시작",
+ "desktop.appMenu.exportLogs": "로그 내보내기...",
+ "desktop.appMenu.hide": "OpenCode 가리기",
+ "desktop.appMenu.hideOthers": "기타 가리기",
+ "desktop.appMenu.showAll": "모두 보기",
+ "desktop.appMenu.quit": "OpenCode 종료",
+ "desktop.appMenu.newSession": "새 세션",
+ "desktop.appMenu.openProject": "프로젝트 열기...",
+ "desktop.appMenu.newWindow": "새 창",
+ "desktop.appMenu.closeWindow": "창 닫기",
+ "desktop.appMenu.undo": "실행 취소",
+ "desktop.appMenu.redo": "다시 실행",
+ "desktop.appMenu.cut": "잘라내기",
+ "desktop.appMenu.copy": "복사",
+ "desktop.appMenu.paste": "붙여넣기",
+ "desktop.appMenu.delete": "삭제",
+ "desktop.appMenu.selectAll": "모두 선택",
+ "desktop.appMenu.toggleSidebar": "사이드바 표시 전환",
+ "desktop.appMenu.toggleTerminal": "터미널 표시 전환",
+ "desktop.appMenu.toggleFileTree": "파일 트리 표시 전환",
+ "desktop.appMenu.reload": "새로고침",
+ "desktop.appMenu.toggleDeveloperTools": "개발자 도구 표시 전환",
+ "desktop.appMenu.actualSize": "실제 크기",
+ "desktop.appMenu.zoomIn": "확대",
+ "desktop.appMenu.zoomOut": "축소",
+ "desktop.appMenu.toggleFullScreen": "전체 화면 전환",
+ "desktop.appMenu.back": "뒤로",
+ "desktop.appMenu.forward": "앞으로",
+ "desktop.appMenu.previousSession": "이전 세션",
+ "desktop.appMenu.nextSession": "다음 세션",
+ "desktop.appMenu.previousProject": "이전 프로젝트",
+ "desktop.appMenu.nextProject": "다음 프로젝트",
+ "desktop.appMenu.minimize": "최소화",
+ "desktop.appMenu.zoomWindow": "확대/축소",
+ "desktop.appMenu.maximize": "최대화",
+ "desktop.appMenu.bringAllToFront": "모두 앞으로 가져오기",
+ "desktop.appMenu.documentation": "OpenCode 문서",
+ "desktop.appMenu.supportForum": "지원 포럼",
+ "desktop.appMenu.shareFeedback": "피드백 보내기",
+ "desktop.appMenu.reportBug": "버그 신고",
"command.sidebar.toggle": "사이드바 토글",
"command.project.open": "프로젝트 열기",
"command.provider.connect": "공급자 연결",
diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts
index a4e8efb79d27..9fa9602d0d7e 100644
--- a/packages/app/src/i18n/no.ts
+++ b/packages/app/src/i18n/no.ts
@@ -24,6 +24,58 @@ export const dict = {
"theme.scheme.light": "Lys",
"theme.scheme.dark": "Mørk",
+ "desktop.appMenu.ariaLabel": "OpenCode-meny",
+ "desktop.appMenu.file": "Fil",
+ "desktop.appMenu.edit": "Rediger",
+ "desktop.appMenu.view": "Vis",
+ "desktop.appMenu.go": "Gå",
+ "desktop.appMenu.window": "Vindu",
+ "desktop.appMenu.help": "Hjelp",
+ "desktop.appMenu.about": "Om OpenCode",
+ "desktop.appMenu.checkForUpdates": "Se etter oppdateringer...",
+ "desktop.appMenu.settings": "Innstillinger",
+ "desktop.appMenu.reloadWebview": "Last inn nettvisning på nytt",
+ "desktop.appMenu.restart": "Start på nytt",
+ "desktop.appMenu.exportLogs": "Eksporter logger...",
+ "desktop.appMenu.hide": "Skjul OpenCode",
+ "desktop.appMenu.hideOthers": "Skjul andre",
+ "desktop.appMenu.showAll": "Vis alle",
+ "desktop.appMenu.quit": "Avslutt OpenCode",
+ "desktop.appMenu.newSession": "Ny sesjon",
+ "desktop.appMenu.openProject": "Åpne prosjekt...",
+ "desktop.appMenu.newWindow": "Nytt vindu",
+ "desktop.appMenu.closeWindow": "Lukk vindu",
+ "desktop.appMenu.undo": "Angre",
+ "desktop.appMenu.redo": "Gjør om",
+ "desktop.appMenu.cut": "Klipp ut",
+ "desktop.appMenu.copy": "Kopier",
+ "desktop.appMenu.paste": "Lim inn",
+ "desktop.appMenu.delete": "Slett",
+ "desktop.appMenu.selectAll": "Merk alt",
+ "desktop.appMenu.toggleSidebar": "Vis/skjul sidepanel",
+ "desktop.appMenu.toggleTerminal": "Vis/skjul terminal",
+ "desktop.appMenu.toggleFileTree": "Vis/skjul filtre",
+ "desktop.appMenu.reload": "Last inn på nytt",
+ "desktop.appMenu.toggleDeveloperTools": "Vis/skjul utviklerverktøy",
+ "desktop.appMenu.actualSize": "Faktisk størrelse",
+ "desktop.appMenu.zoomIn": "Zoom inn",
+ "desktop.appMenu.zoomOut": "Zoom ut",
+ "desktop.appMenu.toggleFullScreen": "Slå fullskjermmodus av/på",
+ "desktop.appMenu.back": "Tilbake",
+ "desktop.appMenu.forward": "Frem",
+ "desktop.appMenu.previousSession": "Forrige sesjon",
+ "desktop.appMenu.nextSession": "Neste sesjon",
+ "desktop.appMenu.previousProject": "Forrige prosjekt",
+ "desktop.appMenu.nextProject": "Neste prosjekt",
+ "desktop.appMenu.minimize": "Minimer",
+ "desktop.appMenu.zoomWindow": "Zoom",
+ "desktop.appMenu.maximize": "Maksimer",
+ "desktop.appMenu.bringAllToFront": "Flytt alle fremst",
+ "desktop.appMenu.documentation": "OpenCode-dokumentasjon",
+ "desktop.appMenu.supportForum": "Forum for brukerstøtte",
+ "desktop.appMenu.shareFeedback": "Send tilbakemelding",
+ "desktop.appMenu.reportBug": "Rapporter en feil",
+
"command.sidebar.toggle": "Veksle sidepanel",
"command.project.open": "Åpne prosjekt",
"command.provider.connect": "Koble til leverandør",
diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts
index f2e32ffeb879..99e0fadce468 100644
--- a/packages/app/src/i18n/pl.ts
+++ b/packages/app/src/i18n/pl.ts
@@ -19,6 +19,57 @@ export const dict = {
"theme.scheme.system": "Systemowy",
"theme.scheme.light": "Jasny",
"theme.scheme.dark": "Ciemny",
+ "desktop.appMenu.ariaLabel": "Menu OpenCode",
+ "desktop.appMenu.file": "Plik",
+ "desktop.appMenu.edit": "Edycja",
+ "desktop.appMenu.view": "Widok",
+ "desktop.appMenu.go": "Przejdź",
+ "desktop.appMenu.window": "Okno",
+ "desktop.appMenu.help": "Pomoc",
+ "desktop.appMenu.about": "O OpenCode",
+ "desktop.appMenu.checkForUpdates": "Sprawdź aktualizacje...",
+ "desktop.appMenu.settings": "Ustawienia",
+ "desktop.appMenu.reloadWebview": "Odśwież widok internetowy",
+ "desktop.appMenu.restart": "Uruchom ponownie",
+ "desktop.appMenu.exportLogs": "Eksportuj dzienniki...",
+ "desktop.appMenu.hide": "Ukryj OpenCode",
+ "desktop.appMenu.hideOthers": "Ukryj pozostałe",
+ "desktop.appMenu.showAll": "Pokaż wszystkie",
+ "desktop.appMenu.quit": "Zakończ OpenCode",
+ "desktop.appMenu.newSession": "Nowa sesja",
+ "desktop.appMenu.openProject": "Otwórz projekt...",
+ "desktop.appMenu.newWindow": "Nowe okno",
+ "desktop.appMenu.closeWindow": "Zamknij okno",
+ "desktop.appMenu.undo": "Cofnij",
+ "desktop.appMenu.redo": "Ponów",
+ "desktop.appMenu.cut": "Wytnij",
+ "desktop.appMenu.copy": "Kopiuj",
+ "desktop.appMenu.paste": "Wklej",
+ "desktop.appMenu.delete": "Usuń",
+ "desktop.appMenu.selectAll": "Zaznacz wszystko",
+ "desktop.appMenu.toggleSidebar": "Przełącz pasek boczny",
+ "desktop.appMenu.toggleTerminal": "Przełącz terminal",
+ "desktop.appMenu.toggleFileTree": "Przełącz drzewo plików",
+ "desktop.appMenu.reload": "Odśwież",
+ "desktop.appMenu.toggleDeveloperTools": "Przełącz narzędzia deweloperskie",
+ "desktop.appMenu.actualSize": "Rozmiar rzeczywisty",
+ "desktop.appMenu.zoomIn": "Powiększ",
+ "desktop.appMenu.zoomOut": "Pomniejsz",
+ "desktop.appMenu.toggleFullScreen": "Przełącz tryb pełnoekranowy",
+ "desktop.appMenu.back": "Wstecz",
+ "desktop.appMenu.forward": "Dalej",
+ "desktop.appMenu.previousSession": "Poprzednia sesja",
+ "desktop.appMenu.nextSession": "Następna sesja",
+ "desktop.appMenu.previousProject": "Poprzedni projekt",
+ "desktop.appMenu.nextProject": "Następny projekt",
+ "desktop.appMenu.minimize": "Minimalizuj",
+ "desktop.appMenu.zoomWindow": "Powiększ",
+ "desktop.appMenu.maximize": "Maksymalizuj",
+ "desktop.appMenu.bringAllToFront": "Przenieś wszystko na wierzch",
+ "desktop.appMenu.documentation": "Dokumentacja OpenCode",
+ "desktop.appMenu.supportForum": "Forum pomocy",
+ "desktop.appMenu.shareFeedback": "Prześlij opinię",
+ "desktop.appMenu.reportBug": "Zgłoś błąd",
"command.sidebar.toggle": "Przełącz pasek boczny",
"command.project.open": "Otwórz projekt",
"command.project.previous": "Poprzedni projekt",
diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts
index fa6fb04d04e1..08893164c95e 100644
--- a/packages/app/src/i18n/ru.ts
+++ b/packages/app/src/i18n/ru.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Светлая",
"theme.scheme.dark": "Тёмная",
+ "desktop.appMenu.ariaLabel": "Меню OpenCode",
+ "desktop.appMenu.file": "Файл",
+ "desktop.appMenu.edit": "Правка",
+ "desktop.appMenu.view": "Вид",
+ "desktop.appMenu.go": "Переход",
+ "desktop.appMenu.window": "Окно",
+ "desktop.appMenu.help": "Справка",
+ "desktop.appMenu.about": "О программе OpenCode",
+ "desktop.appMenu.checkForUpdates": "Проверить наличие обновлений...",
+ "desktop.appMenu.settings": "Настройки",
+ "desktop.appMenu.reloadWebview": "Перезагрузить веб-представление",
+ "desktop.appMenu.restart": "Перезапустить",
+ "desktop.appMenu.exportLogs": "Экспортировать журналы...",
+ "desktop.appMenu.hide": "Скрыть OpenCode",
+ "desktop.appMenu.hideOthers": "Скрыть остальные",
+ "desktop.appMenu.showAll": "Показать все",
+ "desktop.appMenu.quit": "Выйти из OpenCode",
+ "desktop.appMenu.newSession": "Новая сессия",
+ "desktop.appMenu.openProject": "Открыть проект...",
+ "desktop.appMenu.newWindow": "Новое окно",
+ "desktop.appMenu.closeWindow": "Закрыть окно",
+ "desktop.appMenu.undo": "Отменить",
+ "desktop.appMenu.redo": "Повторить",
+ "desktop.appMenu.cut": "Вырезать",
+ "desktop.appMenu.copy": "Копировать",
+ "desktop.appMenu.paste": "Вставить",
+ "desktop.appMenu.delete": "Удалить",
+ "desktop.appMenu.selectAll": "Выделить всё",
+ "desktop.appMenu.toggleSidebar": "Переключить боковую панель",
+ "desktop.appMenu.toggleTerminal": "Переключить терминал",
+ "desktop.appMenu.toggleFileTree": "Переключить дерево файлов",
+ "desktop.appMenu.reload": "Перезагрузить",
+ "desktop.appMenu.toggleDeveloperTools": "Переключить инструменты разработчика",
+ "desktop.appMenu.actualSize": "Фактический размер",
+ "desktop.appMenu.zoomIn": "Увеличить",
+ "desktop.appMenu.zoomOut": "Уменьшить",
+ "desktop.appMenu.toggleFullScreen": "Переключить полноэкранный режим",
+ "desktop.appMenu.back": "Назад",
+ "desktop.appMenu.forward": "Вперёд",
+ "desktop.appMenu.previousSession": "Предыдущая сессия",
+ "desktop.appMenu.nextSession": "Следующая сессия",
+ "desktop.appMenu.previousProject": "Предыдущий проект",
+ "desktop.appMenu.nextProject": "Следующий проект",
+ "desktop.appMenu.minimize": "Свернуть",
+ "desktop.appMenu.zoomWindow": "Масштаб",
+ "desktop.appMenu.maximize": "Развернуть",
+ "desktop.appMenu.bringAllToFront": "Все окна на передний план",
+ "desktop.appMenu.documentation": "Документация OpenCode",
+ "desktop.appMenu.supportForum": "Форум поддержки",
+ "desktop.appMenu.shareFeedback": "Отправить отзыв",
+ "desktop.appMenu.reportBug": "Сообщить об ошибке",
+
"command.sidebar.toggle": "Переключить боковую панель",
"command.project.open": "Открыть проект",
"command.project.previous": "Предыдущий проект",
diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts
index 0ae67ee34eb1..cd6b0b6293b2 100644
--- a/packages/app/src/i18n/th.ts
+++ b/packages/app/src/i18n/th.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "สว่าง",
"theme.scheme.dark": "มืด",
+ "desktop.appMenu.ariaLabel": "เมนู OpenCode",
+ "desktop.appMenu.file": "ไฟล์",
+ "desktop.appMenu.edit": "แก้ไข",
+ "desktop.appMenu.view": "มุมมอง",
+ "desktop.appMenu.go": "ไป",
+ "desktop.appMenu.window": "หน้าต่าง",
+ "desktop.appMenu.help": "วิธีใช้",
+ "desktop.appMenu.about": "เกี่ยวกับ OpenCode",
+ "desktop.appMenu.checkForUpdates": "ตรวจหาการอัปเดต...",
+ "desktop.appMenu.settings": "การตั้งค่า",
+ "desktop.appMenu.reloadWebview": "โหลดเว็บวิวใหม่",
+ "desktop.appMenu.restart": "เริ่มใหม่",
+ "desktop.appMenu.exportLogs": "ส่งออกบันทึก...",
+ "desktop.appMenu.hide": "ซ่อน OpenCode",
+ "desktop.appMenu.hideOthers": "ซ่อนแอปอื่น",
+ "desktop.appMenu.showAll": "แสดงทั้งหมด",
+ "desktop.appMenu.quit": "ออกจาก OpenCode",
+ "desktop.appMenu.newSession": "เซสชันใหม่",
+ "desktop.appMenu.openProject": "เปิดโปรเจกต์...",
+ "desktop.appMenu.newWindow": "หน้าต่างใหม่",
+ "desktop.appMenu.closeWindow": "ปิดหน้าต่าง",
+ "desktop.appMenu.undo": "เลิกทำ",
+ "desktop.appMenu.redo": "ทำซ้ำ",
+ "desktop.appMenu.cut": "ตัด",
+ "desktop.appMenu.copy": "คัดลอก",
+ "desktop.appMenu.paste": "วาง",
+ "desktop.appMenu.delete": "ลบ",
+ "desktop.appMenu.selectAll": "เลือกทั้งหมด",
+ "desktop.appMenu.toggleSidebar": "สลับแถบข้าง",
+ "desktop.appMenu.toggleTerminal": "สลับเทอร์มินัล",
+ "desktop.appMenu.toggleFileTree": "สลับต้นไม้ไฟล์",
+ "desktop.appMenu.reload": "โหลดใหม่",
+ "desktop.appMenu.toggleDeveloperTools": "สลับเครื่องมือสำหรับนักพัฒนา",
+ "desktop.appMenu.actualSize": "ขนาดจริง",
+ "desktop.appMenu.zoomIn": "ขยาย",
+ "desktop.appMenu.zoomOut": "ย่อ",
+ "desktop.appMenu.toggleFullScreen": "สลับโหมดเต็มหน้าจอ",
+ "desktop.appMenu.back": "ย้อนกลับ",
+ "desktop.appMenu.forward": "ไปข้างหน้า",
+ "desktop.appMenu.previousSession": "เซสชันก่อนหน้า",
+ "desktop.appMenu.nextSession": "เซสชันถัดไป",
+ "desktop.appMenu.previousProject": "โปรเจกต์ก่อนหน้า",
+ "desktop.appMenu.nextProject": "โปรเจกต์ถัดไป",
+ "desktop.appMenu.minimize": "ย่อหน้าต่าง",
+ "desktop.appMenu.zoomWindow": "ซูม",
+ "desktop.appMenu.maximize": "ขยายหน้าต่าง",
+ "desktop.appMenu.bringAllToFront": "นำทั้งหมดมาไว้ด้านหน้า",
+ "desktop.appMenu.documentation": "เอกสาร OpenCode",
+ "desktop.appMenu.supportForum": "ฟอรัมสนับสนุน",
+ "desktop.appMenu.shareFeedback": "ส่งความคิดเห็น",
+ "desktop.appMenu.reportBug": "รายงานข้อบกพร่อง",
+
"command.sidebar.toggle": "สลับแถบข้าง",
"command.project.open": "เปิดโปรเจกต์",
"command.project.previous": "โปรเจกต์ก่อนหน้า",
diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts
index d401519af9c9..373aaab708fd 100644
--- a/packages/app/src/i18n/tr.ts
+++ b/packages/app/src/i18n/tr.ts
@@ -25,6 +25,58 @@ export const dict = {
"theme.scheme.light": "Açık",
"theme.scheme.dark": "Koyu",
+ "desktop.appMenu.ariaLabel": "OpenCode menüsü",
+ "desktop.appMenu.file": "Dosya",
+ "desktop.appMenu.edit": "Düzenle",
+ "desktop.appMenu.view": "Görünüm",
+ "desktop.appMenu.go": "Git",
+ "desktop.appMenu.window": "Pencere",
+ "desktop.appMenu.help": "Yardım",
+ "desktop.appMenu.about": "OpenCode hakkında",
+ "desktop.appMenu.checkForUpdates": "Güncellemeleri denetle...",
+ "desktop.appMenu.settings": "Ayarlar",
+ "desktop.appMenu.reloadWebview": "Web görünümünü yeniden yükle",
+ "desktop.appMenu.restart": "Yeniden başlat",
+ "desktop.appMenu.exportLogs": "Günlükleri dışa aktar...",
+ "desktop.appMenu.hide": "OpenCode'u gizle",
+ "desktop.appMenu.hideOthers": "Diğerlerini gizle",
+ "desktop.appMenu.showAll": "Tümünü göster",
+ "desktop.appMenu.quit": "OpenCode'dan çık",
+ "desktop.appMenu.newSession": "Yeni oturum",
+ "desktop.appMenu.openProject": "Proje aç...",
+ "desktop.appMenu.newWindow": "Yeni pencere",
+ "desktop.appMenu.closeWindow": "Pencereyi kapat",
+ "desktop.appMenu.undo": "Geri al",
+ "desktop.appMenu.redo": "Yinele",
+ "desktop.appMenu.cut": "Kes",
+ "desktop.appMenu.copy": "Kopyala",
+ "desktop.appMenu.paste": "Yapıştır",
+ "desktop.appMenu.delete": "Sil",
+ "desktop.appMenu.selectAll": "Tümünü seç",
+ "desktop.appMenu.toggleSidebar": "Kenar çubuğunu aç/kapat",
+ "desktop.appMenu.toggleTerminal": "Terminali aç/kapat",
+ "desktop.appMenu.toggleFileTree": "Dosya ağacını aç/kapat",
+ "desktop.appMenu.reload": "Yeniden yükle",
+ "desktop.appMenu.toggleDeveloperTools": "Geliştirici araçlarını aç/kapat",
+ "desktop.appMenu.actualSize": "Gerçek boyut",
+ "desktop.appMenu.zoomIn": "Yakınlaştır",
+ "desktop.appMenu.zoomOut": "Uzaklaştır",
+ "desktop.appMenu.toggleFullScreen": "Tam ekranı aç/kapat",
+ "desktop.appMenu.back": "Geri",
+ "desktop.appMenu.forward": "İleri",
+ "desktop.appMenu.previousSession": "Önceki oturum",
+ "desktop.appMenu.nextSession": "Sonraki oturum",
+ "desktop.appMenu.previousProject": "Önceki proje",
+ "desktop.appMenu.nextProject": "Sonraki proje",
+ "desktop.appMenu.minimize": "Küçült",
+ "desktop.appMenu.zoomWindow": "Büyüt",
+ "desktop.appMenu.maximize": "Büyüt",
+ "desktop.appMenu.bringAllToFront": "Tümünü Öne Getir",
+ "desktop.appMenu.documentation": "OpenCode belgeleri",
+ "desktop.appMenu.supportForum": "Destek forumu",
+ "desktop.appMenu.shareFeedback": "Geri bildirim paylaş",
+ "desktop.appMenu.reportBug": "Hata bildir",
+
"command.sidebar.toggle": "Kenar çubuğunu aç/kapat",
"command.project.open": "Proje aç",
"command.project.previous": "Önceki proje",
diff --git a/packages/app/src/i18n/uk.ts b/packages/app/src/i18n/uk.ts
index c949f41de2dc..0423acc0d1bd 100644
--- a/packages/app/src/i18n/uk.ts
+++ b/packages/app/src/i18n/uk.ts
@@ -21,6 +21,58 @@ export const dict = {
"theme.scheme.light": "Світла",
"theme.scheme.dark": "Темна",
+ "desktop.appMenu.ariaLabel": "Меню OpenCode",
+ "desktop.appMenu.file": "Файл",
+ "desktop.appMenu.edit": "Редагування",
+ "desktop.appMenu.view": "Вигляд",
+ "desktop.appMenu.go": "Перехід",
+ "desktop.appMenu.window": "Вікно",
+ "desktop.appMenu.help": "Довідка",
+ "desktop.appMenu.about": "Про OpenCode",
+ "desktop.appMenu.checkForUpdates": "Перевірити наявність оновлень...",
+ "desktop.appMenu.settings": "Налаштування",
+ "desktop.appMenu.reloadWebview": "Перезавантажити вебперегляд",
+ "desktop.appMenu.restart": "Перезапустити",
+ "desktop.appMenu.exportLogs": "Експортувати журнали...",
+ "desktop.appMenu.hide": "Приховати OpenCode",
+ "desktop.appMenu.hideOthers": "Приховати інші",
+ "desktop.appMenu.showAll": "Показати все",
+ "desktop.appMenu.quit": "Вийти з OpenCode",
+ "desktop.appMenu.newSession": "Нова сесія",
+ "desktop.appMenu.openProject": "Відкрити проєкт...",
+ "desktop.appMenu.newWindow": "Нове вікно",
+ "desktop.appMenu.closeWindow": "Закрити вікно",
+ "desktop.appMenu.undo": "Скасувати",
+ "desktop.appMenu.redo": "Повторити",
+ "desktop.appMenu.cut": "Вирізати",
+ "desktop.appMenu.copy": "Копіювати",
+ "desktop.appMenu.paste": "Вставити",
+ "desktop.appMenu.delete": "Видалити",
+ "desktop.appMenu.selectAll": "Вибрати все",
+ "desktop.appMenu.toggleSidebar": "Перемкнути бічну панель",
+ "desktop.appMenu.toggleTerminal": "Перемкнути термінал",
+ "desktop.appMenu.toggleFileTree": "Перемкнути дерево файлів",
+ "desktop.appMenu.reload": "Перезавантажити",
+ "desktop.appMenu.toggleDeveloperTools": "Перемкнути інструменти розробника",
+ "desktop.appMenu.actualSize": "Фактичний розмір",
+ "desktop.appMenu.zoomIn": "Збільшити масштаб",
+ "desktop.appMenu.zoomOut": "Зменшити масштаб",
+ "desktop.appMenu.toggleFullScreen": "Перемкнути повноекранний режим",
+ "desktop.appMenu.back": "Назад",
+ "desktop.appMenu.forward": "Вперед",
+ "desktop.appMenu.previousSession": "Попередня сесія",
+ "desktop.appMenu.nextSession": "Наступна сесія",
+ "desktop.appMenu.previousProject": "Попередній проєкт",
+ "desktop.appMenu.nextProject": "Наступний проєкт",
+ "desktop.appMenu.minimize": "Згорнути",
+ "desktop.appMenu.zoomWindow": "Масштаб",
+ "desktop.appMenu.maximize": "Розгорнути",
+ "desktop.appMenu.bringAllToFront": "Усі вікна на передній план",
+ "desktop.appMenu.documentation": "Документація OpenCode",
+ "desktop.appMenu.supportForum": "Форум підтримки",
+ "desktop.appMenu.shareFeedback": "Надіслати відгук",
+ "desktop.appMenu.reportBug": "Повідомити про помилку",
+
"command.sidebar.toggle": "Перемкнути бічну панель",
"command.project.open": "Відкрити проєкт",
"command.project.previous": "Попередній проєкт",
diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts
index 82d73ac3a6a6..f3b4d4b80e3c 100644
--- a/packages/app/src/i18n/zh.ts
+++ b/packages/app/src/i18n/zh.ts
@@ -25,6 +25,58 @@ export const dict = {
"theme.scheme.light": "浅色",
"theme.scheme.dark": "深色",
+ "desktop.appMenu.ariaLabel": "OpenCode 菜单",
+ "desktop.appMenu.file": "文件",
+ "desktop.appMenu.edit": "编辑",
+ "desktop.appMenu.view": "视图",
+ "desktop.appMenu.go": "前往",
+ "desktop.appMenu.window": "窗口",
+ "desktop.appMenu.help": "帮助",
+ "desktop.appMenu.about": "关于 OpenCode",
+ "desktop.appMenu.checkForUpdates": "检查更新...",
+ "desktop.appMenu.settings": "设置",
+ "desktop.appMenu.reloadWebview": "重新加载 Webview",
+ "desktop.appMenu.restart": "重启",
+ "desktop.appMenu.exportLogs": "导出日志...",
+ "desktop.appMenu.hide": "隐藏 OpenCode",
+ "desktop.appMenu.hideOthers": "隐藏其他",
+ "desktop.appMenu.showAll": "全部显示",
+ "desktop.appMenu.quit": "退出 OpenCode",
+ "desktop.appMenu.newSession": "新建会话",
+ "desktop.appMenu.openProject": "打开项目...",
+ "desktop.appMenu.newWindow": "新建窗口",
+ "desktop.appMenu.closeWindow": "关闭窗口",
+ "desktop.appMenu.undo": "撤销",
+ "desktop.appMenu.redo": "重做",
+ "desktop.appMenu.cut": "剪切",
+ "desktop.appMenu.copy": "复制",
+ "desktop.appMenu.paste": "粘贴",
+ "desktop.appMenu.delete": "删除",
+ "desktop.appMenu.selectAll": "全选",
+ "desktop.appMenu.toggleSidebar": "切换侧边栏",
+ "desktop.appMenu.toggleTerminal": "切换终端",
+ "desktop.appMenu.toggleFileTree": "切换文件树",
+ "desktop.appMenu.reload": "重新加载",
+ "desktop.appMenu.toggleDeveloperTools": "切换开发者工具",
+ "desktop.appMenu.actualSize": "实际大小",
+ "desktop.appMenu.zoomIn": "放大",
+ "desktop.appMenu.zoomOut": "缩小",
+ "desktop.appMenu.toggleFullScreen": "切换全屏",
+ "desktop.appMenu.back": "后退",
+ "desktop.appMenu.forward": "前进",
+ "desktop.appMenu.previousSession": "上一个会话",
+ "desktop.appMenu.nextSession": "下一个会话",
+ "desktop.appMenu.previousProject": "上一个项目",
+ "desktop.appMenu.nextProject": "下一个项目",
+ "desktop.appMenu.minimize": "最小化",
+ "desktop.appMenu.zoomWindow": "缩放",
+ "desktop.appMenu.maximize": "最大化",
+ "desktop.appMenu.bringAllToFront": "将全部移到最前面",
+ "desktop.appMenu.documentation": "OpenCode 文档",
+ "desktop.appMenu.supportForum": "支持论坛",
+ "desktop.appMenu.shareFeedback": "提供反馈",
+ "desktop.appMenu.reportBug": "报告错误",
+
"command.sidebar.toggle": "切换侧边栏",
"command.project.open": "打开项目",
diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts
index fbe80d95eeff..571e3c023f0b 100644
--- a/packages/app/src/i18n/zht.ts
+++ b/packages/app/src/i18n/zht.ts
@@ -25,6 +25,58 @@ export const dict = {
"theme.scheme.light": "淺色",
"theme.scheme.dark": "深色",
+ "desktop.appMenu.ariaLabel": "OpenCode 選單",
+ "desktop.appMenu.file": "檔案",
+ "desktop.appMenu.edit": "編輯",
+ "desktop.appMenu.view": "檢視",
+ "desktop.appMenu.go": "前往",
+ "desktop.appMenu.window": "視窗",
+ "desktop.appMenu.help": "說明",
+ "desktop.appMenu.about": "關於 OpenCode",
+ "desktop.appMenu.checkForUpdates": "檢查更新...",
+ "desktop.appMenu.settings": "設定",
+ "desktop.appMenu.reloadWebview": "重新載入 Webview",
+ "desktop.appMenu.restart": "重新啟動",
+ "desktop.appMenu.exportLogs": "匯出日誌...",
+ "desktop.appMenu.hide": "隱藏 OpenCode",
+ "desktop.appMenu.hideOthers": "隱藏其他項目",
+ "desktop.appMenu.showAll": "全部顯示",
+ "desktop.appMenu.quit": "結束 OpenCode",
+ "desktop.appMenu.newSession": "新增工作階段",
+ "desktop.appMenu.openProject": "開啟專案...",
+ "desktop.appMenu.newWindow": "新增視窗",
+ "desktop.appMenu.closeWindow": "關閉視窗",
+ "desktop.appMenu.undo": "復原",
+ "desktop.appMenu.redo": "重做",
+ "desktop.appMenu.cut": "剪下",
+ "desktop.appMenu.copy": "複製",
+ "desktop.appMenu.paste": "貼上",
+ "desktop.appMenu.delete": "刪除",
+ "desktop.appMenu.selectAll": "全選",
+ "desktop.appMenu.toggleSidebar": "切換側邊欄",
+ "desktop.appMenu.toggleTerminal": "切換終端機",
+ "desktop.appMenu.toggleFileTree": "切換檔案樹",
+ "desktop.appMenu.reload": "重新載入",
+ "desktop.appMenu.toggleDeveloperTools": "切換開發人員工具",
+ "desktop.appMenu.actualSize": "實際大小",
+ "desktop.appMenu.zoomIn": "放大",
+ "desktop.appMenu.zoomOut": "縮小",
+ "desktop.appMenu.toggleFullScreen": "切換全螢幕",
+ "desktop.appMenu.back": "返回",
+ "desktop.appMenu.forward": "前進",
+ "desktop.appMenu.previousSession": "上一個工作階段",
+ "desktop.appMenu.nextSession": "下一個工作階段",
+ "desktop.appMenu.previousProject": "上一個專案",
+ "desktop.appMenu.nextProject": "下一個專案",
+ "desktop.appMenu.minimize": "最小化",
+ "desktop.appMenu.zoomWindow": "縮放",
+ "desktop.appMenu.maximize": "最大化",
+ "desktop.appMenu.bringAllToFront": "將全部移到最前面",
+ "desktop.appMenu.documentation": "OpenCode 文件",
+ "desktop.appMenu.supportForum": "支援論壇",
+ "desktop.appMenu.shareFeedback": "提供意見",
+ "desktop.appMenu.reportBug": "回報錯誤",
+
"command.sidebar.toggle": "切換側邊欄",
"command.project.open": "開啟專案",
"command.project.previous": "上一個專案",
diff --git a/packages/desktop/src/main/index.ts b/packages/desktop/src/main/index.ts
index c7c1643092d1..df3e449ea17c 100644
--- a/packages/desktop/src/main/index.ts
+++ b/packages/desktop/src/main/index.ts
@@ -270,6 +270,16 @@ const main = Effect.gen(function* () {
registerRendererProtocol()
setDockIcon()
const updater = setupAutoUpdater(stopSidecars)
+ const menu = createMenu({
+ trigger: (id) => {
+ const win = getLastFocusedWindow()
+ if (win) sendMenuCommand(win, id)
+ },
+ checkForUpdates: () => {
+ void showUpdaterDialog(updater, true)
+ },
+ relaunch,
+ })
registerIpcHandlers({
killSidecar: () => killSidecar(),
relaunch,
@@ -296,6 +306,7 @@ const main = Effect.gen(function* () {
updater,
showUpdater: () => showUpdaterDialog(updater, true),
setBackgroundColor: (color) => setBackgroundColor(color),
+ setDesktopMenuLabels: (labels) => menu.setLabels(labels),
exportDebugLogs: () => exportDebugLogs(),
recordFatalRendererError: (error) => writeLog("renderer", "fatal renderer error", { ...error }, "error"),
})
@@ -379,21 +390,8 @@ const main = Effect.gen(function* () {
yield* Fiber.await(loadingTask)
- const windows = restoreMainWindows()
- if (windows.length) {
- createMenu({
- trigger: (id) => {
- const win = getLastFocusedWindow()
- if (win) sendMenuCommand(win, id)
- },
- checkForUpdates: () => {
- void showUpdaterDialog(updater, true)
- },
- relaunch: () => {
- relaunch()
- },
- })
- }
+ restoreMainWindows()
+ menu.show()
})
Effect.runFork(main)
diff --git a/packages/desktop/src/main/ipc.ts b/packages/desktop/src/main/ipc.ts
index 4563b688acea..2ada154824a7 100644
--- a/packages/desktop/src/main/ipc.ts
+++ b/packages/desktop/src/main/ipc.ts
@@ -3,7 +3,7 @@ import { stat } from "node:fs/promises"
import { basename } from "node:path"
import { app, BrowserWindow, Notification, clipboard, dialog, ipcMain, shell } from "electron"
import type { IpcMainEvent, IpcMainInvokeEvent } from "electron"
-import type { DesktopMenuAction } from "@opencode-ai/app/desktop-menu"
+import type { DesktopMenuAction, DesktopMenuLabels } from "@opencode-ai/app/desktop-menu"
import type { FatalRendererError, ServerReadyData, TitlebarTheme } from "../preload/types"
import { runDesktopMenuAction } from "./desktop-menu-actions"
@@ -39,6 +39,7 @@ type Deps = {
updater: UpdaterController
showUpdater: () => Promise | void
setBackgroundColor: (color: string) => void
+ setDesktopMenuLabels: (labels: DesktopMenuLabels) => void
exportDebugLogs: () => Promise
recordFatalRendererError: (error: FatalRendererError) => Promise | void
}
@@ -81,6 +82,9 @@ export function registerIpcHandlers(deps: Deps) {
ipcMain.handle("updater-check", () => deps.updater.check())
ipcMain.handle("updater-install", () => deps.updater.install())
ipcMain.handle("set-background-color", (_event: IpcMainInvokeEvent, color: string) => deps.setBackgroundColor(color))
+ ipcMain.handle("set-desktop-menu-labels", (_event: IpcMainInvokeEvent, labels: DesktopMenuLabels) =>
+ deps.setDesktopMenuLabels(labels),
+ )
ipcMain.handle("export-debug-logs", () => deps.exportDebugLogs())
ipcMain.handle("set-force-focus", (event: IpcMainInvokeEvent, enabled: boolean) =>
setForceFocus(event.sender, enabled),
diff --git a/packages/desktop/src/main/menu.ts b/packages/desktop/src/main/menu.ts
index 7adc65a429b3..a4601e1c1cc2 100644
--- a/packages/desktop/src/main/menu.ts
+++ b/packages/desktop/src/main/menu.ts
@@ -1,9 +1,13 @@
-import { BrowserWindow, Menu, shell } from "electron"
+import { app, BrowserWindow, Menu, shell } from "electron"
import type { MenuItemConstructorOptions } from "electron"
import {
DESKTOP_MENU,
+ DESKTOP_MENU_LABEL_KEYS,
+ desktopMenuLabel,
desktopMenuVisible,
type DesktopMenuEntry,
+ type DesktopMenuLabelKey,
+ type DesktopMenuLabels,
type DesktopMenuRole,
} from "@opencode-ai/app/desktop-menu"
@@ -17,27 +21,60 @@ type Deps = {
}
export function createMenu(deps: Deps) {
- if (process.platform !== "darwin") return
-
- const template = DESKTOP_MENU.filter((menu) => desktopMenuVisible(menu, "macos")).map((menu) => {
- if (menu.role) return { role: nativeRole(menu.role) }
+ if (process.platform !== "darwin") {
return {
- label: menu.label,
- submenu: menu.items
- ?.filter((entry) => desktopMenuVisible(entry, "macos"))
- .map((entry) => nativeItem(entry, deps)),
+ show: () => undefined,
+ setLabels: (_labels: DesktopMenuLabels) => undefined,
}
- })
+ }
+
+ let labels: DesktopMenuLabels = {}
+ let fingerprint = JSON.stringify(labels)
+ let shown = false
- Menu.setApplicationMenu(Menu.buildFromTemplate(template))
+ const build = () => {
+ const template = DESKTOP_MENU.filter((menu) => desktopMenuVisible(menu, "macos")).map((menu) => {
+ const label = nativeLabel(menu, labels)
+ if (menu.role) return { role: nativeRole(menu.role), label }
+ return {
+ label,
+ submenu: menu.items
+ ?.filter((entry) => desktopMenuVisible(entry, "macos"))
+ .map((entry) => nativeItem(entry, labels, deps)),
+ }
+ })
+
+ Menu.setApplicationMenu(Menu.buildFromTemplate(template))
+ }
+
+ return {
+ show() {
+ if (shown) return
+ shown = true
+ build()
+ },
+ setLabels(next: DesktopMenuLabels) {
+ const normalized = Object.fromEntries(
+ DESKTOP_MENU_LABEL_KEYS.flatMap((key) => {
+ const value = next?.[key]
+ return typeof value === "string" && value.trim() ? [[key, value]] : []
+ }),
+ )
+ const nextFingerprint = JSON.stringify(normalized)
+ if (nextFingerprint === fingerprint) return
+ labels = normalized
+ fingerprint = nextFingerprint
+ if (shown) build()
+ },
+ }
}
-function nativeItem(entry: DesktopMenuEntry, deps: Deps): MenuItemConstructorOptions {
+function nativeItem(entry: DesktopMenuEntry, labels: DesktopMenuLabels, deps: Deps): MenuItemConstructorOptions {
if (entry.type === "separator") return { type: "separator" }
- if (entry.role) return { role: nativeRole(entry.role) }
+ if (entry.role) return { role: nativeRole(entry.role), label: nativeLabel(entry, labels) }
const item: MenuItemConstructorOptions = {
- label: entry.label,
+ label: desktopMenuLabel(entry, labels),
accelerator: entry.accelerator?.macos,
enabled: entry.enabled === "updater" ? UPDATER_ENABLED : undefined,
}
@@ -62,6 +99,15 @@ function nativeItem(entry: DesktopMenuEntry, deps: Deps): MenuItemConstructorOpt
return item
}
+function nativeLabel(
+ item: { label?: string; labelKey?: DesktopMenuLabelKey; role?: DesktopMenuRole },
+ labels: DesktopMenuLabels,
+) {
+ const label = desktopMenuLabel(item, labels)
+ if (!label || !item.role || !["about", "hide", "quit"].includes(item.role)) return label
+ return label.replace("OpenCode", app.name)
+}
+
function nativeRole(role: DesktopMenuRole) {
return role as NonNullable
}
diff --git a/packages/desktop/src/preload/index.ts b/packages/desktop/src/preload/index.ts
index 87eac1fa805e..dec5e600ffed 100644
--- a/packages/desktop/src/preload/index.ts
+++ b/packages/desktop/src/preload/index.ts
@@ -119,6 +119,7 @@ const api: ElectronAPI = {
},
setTitlebar: (theme) => ipcRenderer.invoke("set-titlebar", theme),
runDesktopMenuAction: (action) => ipcRenderer.invoke("run-desktop-menu-action", action),
+ setDesktopMenuLabels: (labels) => ipcRenderer.invoke("set-desktop-menu-labels", labels),
setBackgroundColor: (color: string) => ipcRenderer.invoke("set-background-color", color),
exportDebugLogs: () => ipcRenderer.invoke("export-debug-logs"),
setForceFocus: (enabled) => ipcRenderer.invoke("set-force-focus", enabled),
diff --git a/packages/desktop/src/preload/types.ts b/packages/desktop/src/preload/types.ts
index 5fbace72c7ca..bbb5a64b3a60 100644
--- a/packages/desktop/src/preload/types.ts
+++ b/packages/desktop/src/preload/types.ts
@@ -1,4 +1,4 @@
-import type { DesktopMenuAction } from "@opencode-ai/app/desktop-menu"
+import type { DesktopMenuAction, DesktopMenuLabels } from "@opencode-ai/app/desktop-menu"
import type { WslServersPlatform } from "@opencode-ai/app/wsl/types"
import type { UpdaterState } from "@opencode-ai/app/updater"
export type {
@@ -102,6 +102,7 @@ export type ElectronAPI = {
onZoomFactorChanged: (cb: (factor: number) => void) => () => void
setTitlebar: (theme: TitlebarTheme) => Promise
runDesktopMenuAction: (action: DesktopMenuAction) => Promise
+ setDesktopMenuLabels: (labels: DesktopMenuLabels) => Promise
setBackgroundColor: (color: string) => Promise
exportDebugLogs: () => Promise
setForceFocus: (enabled: boolean) => Promise
diff --git a/packages/desktop/src/renderer/i18n/ar.ts b/packages/desktop/src/renderer/i18n/ar.ts
index fdbf0a804708..de3c72f6608b 100644
--- a/packages/desktop/src/renderer/i18n/ar.ts
+++ b/packages/desktop/src/renderer/i18n/ar.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "التحقق من وجود تحديثات...",
"desktop.menu.installCli": "تثبيت CLI...",
- "desktop.menu.reloadWebview": "إعادة تحميل Webview",
- "desktop.menu.restart": "إعادة تشغيل",
"desktop.dialog.chooseFolder": "اختر مجلدًا",
"desktop.dialog.chooseFile": "اختر ملفًا",
diff --git a/packages/desktop/src/renderer/i18n/br.ts b/packages/desktop/src/renderer/i18n/br.ts
index 75fe2dc32bc7..fd7de953cd84 100644
--- a/packages/desktop/src/renderer/i18n/br.ts
+++ b/packages/desktop/src/renderer/i18n/br.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Verificar atualizações...",
"desktop.menu.installCli": "Instalar CLI...",
- "desktop.menu.reloadWebview": "Recarregar Webview",
- "desktop.menu.restart": "Reiniciar",
"desktop.dialog.chooseFolder": "Escolher uma pasta",
"desktop.dialog.chooseFile": "Escolher um arquivo",
diff --git a/packages/desktop/src/renderer/i18n/bs.ts b/packages/desktop/src/renderer/i18n/bs.ts
index 58c266f5305e..a8e0b387588d 100644
--- a/packages/desktop/src/renderer/i18n/bs.ts
+++ b/packages/desktop/src/renderer/i18n/bs.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Provjeri ažuriranja...",
"desktop.menu.installCli": "Instaliraj CLI...",
- "desktop.menu.reloadWebview": "Ponovo učitavanje webview-a",
- "desktop.menu.restart": "Restartuj",
"desktop.dialog.chooseFolder": "Odaberi folder",
"desktop.dialog.chooseFile": "Odaberi datoteku",
diff --git a/packages/desktop/src/renderer/i18n/da.ts b/packages/desktop/src/renderer/i18n/da.ts
index 2109495f7612..8462f96556a5 100644
--- a/packages/desktop/src/renderer/i18n/da.ts
+++ b/packages/desktop/src/renderer/i18n/da.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Tjek for opdateringer...",
"desktop.menu.installCli": "Installer CLI...",
- "desktop.menu.reloadWebview": "Genindlæs Webview",
- "desktop.menu.restart": "Genstart",
"desktop.dialog.chooseFolder": "Vælg en mappe",
"desktop.dialog.chooseFile": "Vælg en fil",
diff --git a/packages/desktop/src/renderer/i18n/de.ts b/packages/desktop/src/renderer/i18n/de.ts
index 38ad8096e31e..5522bf1ecf72 100644
--- a/packages/desktop/src/renderer/i18n/de.ts
+++ b/packages/desktop/src/renderer/i18n/de.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Nach Updates suchen...",
"desktop.menu.installCli": "CLI installieren...",
- "desktop.menu.reloadWebview": "Webview neu laden",
- "desktop.menu.restart": "Neustart",
"desktop.dialog.chooseFolder": "Ordner auswählen",
"desktop.dialog.chooseFile": "Datei auswählen",
diff --git a/packages/desktop/src/renderer/i18n/en.ts b/packages/desktop/src/renderer/i18n/en.ts
index 4c30380d562c..5f09de3b8b28 100644
--- a/packages/desktop/src/renderer/i18n/en.ts
+++ b/packages/desktop/src/renderer/i18n/en.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Check for Updates...",
"desktop.menu.installCli": "Install CLI...",
- "desktop.menu.reloadWebview": "Reload Webview",
- "desktop.menu.restart": "Restart",
"desktop.dialog.chooseFolder": "Choose a folder",
"desktop.dialog.chooseFile": "Choose a file",
diff --git a/packages/desktop/src/renderer/i18n/es.ts b/packages/desktop/src/renderer/i18n/es.ts
index 80504a8f248c..584446b4fbc6 100644
--- a/packages/desktop/src/renderer/i18n/es.ts
+++ b/packages/desktop/src/renderer/i18n/es.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Buscar actualizaciones...",
"desktop.menu.installCli": "Instalar CLI...",
- "desktop.menu.reloadWebview": "Recargar Webview",
- "desktop.menu.restart": "Reiniciar",
"desktop.dialog.chooseFolder": "Elegir una carpeta",
"desktop.dialog.chooseFile": "Elegir un archivo",
diff --git a/packages/desktop/src/renderer/i18n/fr.ts b/packages/desktop/src/renderer/i18n/fr.ts
index 4f0bb2b16c65..03ce49d9dbec 100644
--- a/packages/desktop/src/renderer/i18n/fr.ts
+++ b/packages/desktop/src/renderer/i18n/fr.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Vérifier les mises à jour...",
"desktop.menu.installCli": "Installer la CLI...",
- "desktop.menu.reloadWebview": "Recharger la Webview",
- "desktop.menu.restart": "Redémarrer",
"desktop.dialog.chooseFolder": "Choisir un dossier",
"desktop.dialog.chooseFile": "Choisir un fichier",
diff --git a/packages/desktop/src/renderer/i18n/ja.ts b/packages/desktop/src/renderer/i18n/ja.ts
index fc485c6f401d..745b6682a54f 100644
--- a/packages/desktop/src/renderer/i18n/ja.ts
+++ b/packages/desktop/src/renderer/i18n/ja.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "アップデートを確認...",
"desktop.menu.installCli": "CLI をインストール...",
- "desktop.menu.reloadWebview": "Webview を再読み込み",
- "desktop.menu.restart": "再起動",
"desktop.dialog.chooseFolder": "フォルダーを選択",
"desktop.dialog.chooseFile": "ファイルを選択",
diff --git a/packages/desktop/src/renderer/i18n/ko.ts b/packages/desktop/src/renderer/i18n/ko.ts
index be27cec86aca..503d1e3b57e3 100644
--- a/packages/desktop/src/renderer/i18n/ko.ts
+++ b/packages/desktop/src/renderer/i18n/ko.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "업데이트 확인...",
"desktop.menu.installCli": "CLI 설치...",
- "desktop.menu.reloadWebview": "Webview 새로고침",
- "desktop.menu.restart": "다시 시작",
"desktop.dialog.chooseFolder": "폴더 선택",
"desktop.dialog.chooseFile": "파일 선택",
diff --git a/packages/desktop/src/renderer/i18n/no.ts b/packages/desktop/src/renderer/i18n/no.ts
index e39bd7f3b447..6c48ec43a1cc 100644
--- a/packages/desktop/src/renderer/i18n/no.ts
+++ b/packages/desktop/src/renderer/i18n/no.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Se etter oppdateringer...",
"desktop.menu.installCli": "Installer CLI...",
- "desktop.menu.reloadWebview": "Last inn Webview på nytt",
- "desktop.menu.restart": "Start på nytt",
"desktop.dialog.chooseFolder": "Velg en mappe",
"desktop.dialog.chooseFile": "Velg en fil",
diff --git a/packages/desktop/src/renderer/i18n/pl.ts b/packages/desktop/src/renderer/i18n/pl.ts
index d3ad7ce64f81..c24e494a2700 100644
--- a/packages/desktop/src/renderer/i18n/pl.ts
+++ b/packages/desktop/src/renderer/i18n/pl.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Sprawdź aktualizacje...",
"desktop.menu.installCli": "Zainstaluj CLI...",
- "desktop.menu.reloadWebview": "Przeładuj Webview",
- "desktop.menu.restart": "Restartuj",
"desktop.dialog.chooseFolder": "Wybierz folder",
"desktop.dialog.chooseFile": "Wybierz plik",
diff --git a/packages/desktop/src/renderer/i18n/ru.ts b/packages/desktop/src/renderer/i18n/ru.ts
index 8e09cc45b49d..822d4ecf5286 100644
--- a/packages/desktop/src/renderer/i18n/ru.ts
+++ b/packages/desktop/src/renderer/i18n/ru.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Проверить обновления...",
"desktop.menu.installCli": "Установить CLI...",
- "desktop.menu.reloadWebview": "Перезагрузить Webview",
- "desktop.menu.restart": "Перезапустить",
"desktop.dialog.chooseFolder": "Выберите папку",
"desktop.dialog.chooseFile": "Выберите файл",
diff --git a/packages/desktop/src/renderer/i18n/uk.ts b/packages/desktop/src/renderer/i18n/uk.ts
index f9a6212b228b..bff41265b3c9 100644
--- a/packages/desktop/src/renderer/i18n/uk.ts
+++ b/packages/desktop/src/renderer/i18n/uk.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "Перевірити оновлення...",
"desktop.menu.installCli": "Встановити CLI...",
- "desktop.menu.reloadWebview": "Перезавантажити Webview",
- "desktop.menu.restart": "Перезапустити",
"desktop.dialog.chooseFolder": "Виберіть теку",
"desktop.dialog.chooseFile": "Виберіть файл",
diff --git a/packages/desktop/src/renderer/i18n/zh.ts b/packages/desktop/src/renderer/i18n/zh.ts
index aeb3a54e03e9..acdf304bae93 100644
--- a/packages/desktop/src/renderer/i18n/zh.ts
+++ b/packages/desktop/src/renderer/i18n/zh.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "检查更新...",
"desktop.menu.installCli": "安装 CLI...",
- "desktop.menu.reloadWebview": "重新加载 Webview",
- "desktop.menu.restart": "重启",
"desktop.dialog.chooseFolder": "选择文件夹",
"desktop.dialog.chooseFile": "选择文件",
diff --git a/packages/desktop/src/renderer/i18n/zht.ts b/packages/desktop/src/renderer/i18n/zht.ts
index 7fd677aca444..346c9d3295a3 100644
--- a/packages/desktop/src/renderer/i18n/zht.ts
+++ b/packages/desktop/src/renderer/i18n/zht.ts
@@ -1,8 +1,5 @@
export const dict = {
- "desktop.menu.checkForUpdates": "檢查更新...",
"desktop.menu.installCli": "安裝 CLI...",
- "desktop.menu.reloadWebview": "重新載入 Webview",
- "desktop.menu.restart": "重新啟動",
"desktop.dialog.chooseFolder": "選擇資料夾",
"desktop.dialog.chooseFile": "選擇檔案",
diff --git a/packages/desktop/src/renderer/index.tsx b/packages/desktop/src/renderer/index.tsx
index b7d2d9a74dad..007328712e6f 100644
--- a/packages/desktop/src/renderer/index.tsx
+++ b/packages/desktop/src/renderer/index.tsx
@@ -300,6 +300,8 @@ const createPlatform = (windowState: DesktopWindowState): Platform => {
runDesktopMenuAction,
+ setDesktopMenuLabels: os === "macos" ? (labels) => window.api.setDesktopMenuLabels(labels) : undefined,
+
checkAppExists: async (appName: string) => {
return window.api.checkAppExists(appName)
},