Browse Source

chore: cleanup

adamelmore 1 month ago
parent
commit
04337f6202

+ 32 - 0
packages/app/src/i18n/ar.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "سمة",
   "command.category.language": "لغة",
   "command.category.file": "ملف",
+  "command.category.context": "سياق",
   "command.category.terminal": "محطة طرفية",
   "command.category.model": "نموذج",
   "command.category.mcp": "MCP",
@@ -42,7 +43,10 @@ export const dict = {
   "command.session.new": "جلسة جديدة",
   "command.file.open": "فتح ملف",
   "command.file.open.description": "البحث في الملفات والأوامر",
+  "command.context.addSelection": "إضافة التحديد إلى السياق",
+  "command.context.addSelection.description": "إضافة الأسطر المحددة من الملف الحالي",
   "command.terminal.toggle": "تبديل المحطة الطرفية",
+  "command.fileTree.toggle": "تبديل شجرة الملفات",
   "command.review.toggle": "تبديل المراجعة",
   "command.terminal.new": "محطة طرفية جديدة",
   "command.terminal.new.description": "إنشاء علامة تبويب جديدة للمحطة الطرفية",
@@ -137,6 +141,8 @@ export const dict = {
   "provider.connect.toast.connected.title": "تم توصيل {{provider}}",
   "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.",
 
+  "provider.disconnect.toast.disconnected.title": "تم فصل {{provider}}",
+  "provider.disconnect.toast.disconnected.description": "لم تعد نماذج {{provider}} متاحة.",
   "model.tag.free": "مجاني",
   "model.tag.latest": "الأحدث",
   "model.provider.anthropic": "Anthropic",
@@ -159,6 +165,8 @@ export const dict = {
   "common.loading": "جارٍ التحميل",
   "common.loading.ellipsis": "...",
   "common.cancel": "إلغاء",
+  "common.connect": "اتصال",
+  "common.disconnect": "قطع الاتصال",
   "common.submit": "إرسال",
   "common.save": "حفظ",
   "common.saving": "جارٍ الحفظ...",
@@ -167,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "أدخل أمر shell...",
   "prompt.placeholder.normal": 'اسأل أي شيء... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "لخّص التعليقات…",
+  "prompt.placeholder.summarizeComment": "لخّص التعليق…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc للخروج",
 
@@ -270,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "لون",
   "dialog.project.edit.color.select": "اختر لون {{color}}",
 
+  "dialog.project.edit.worktree.startup": "سكريبت بدء تشغيل مساحة العمل",
+  "dialog.project.edit.worktree.startup.description": "يتم تشغيله بعد إنشاء مساحة عمل جديدة (شجرة عمل).",
+  "dialog.project.edit.worktree.startup.placeholder": "مثال: bun install",
   "context.breakdown.title": "تفصيل السياق",
   "context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال. يشمل "أخرى" تعريفات الأدوات والنفقات العامة.',
   "context.breakdown.system": "النظام",
@@ -335,6 +348,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "فشل تحميل الملف",
 
+  "toast.file.listFailed.title": "فشل سرد الملفات",
+  "toast.context.noLineSelection.title": "لا يوجد تحديد للأسطر",
+  "toast.context.noLineSelection.description": "حدد نطاق أسطر في تبويب ملف أولاً.",
   "toast.session.share.copyFailed.title": "فشل نسخ عنوان URL إلى الحافظة",
   "toast.session.share.success.title": "تمت مشاركة الجلسة",
   "toast.session.share.success.description": "تم نسخ عنوان URL للمشاركة إلى الحافظة!",
@@ -408,8 +424,13 @@ export const dict = {
   "session.tab.context": "سياق",
   "session.panel.reviewAndFiles": "المراجعة والملفات",
   "session.review.filesChanged": "تم تغيير {{count}} ملفات",
+  "session.review.change.one": "تغيير",
+  "session.review.change.other": "تغييرات",
   "session.review.loadingChanges": "جارٍ تحميل التغييرات...",
   "session.review.empty": "لا توجد تغييرات في هذه الجلسة بعد",
+  "session.review.noChanges": "لا توجد تغييرات",
+  "session.files.selectToOpen": "اختر ملفًا لفتحه",
+  "session.files.all": "كل الملفات",
   "session.messages.renderEarlier": "عرض الرسائل السابقة",
   "session.messages.loadingEarlier": "جارٍ تحميل الرسائل السابقة...",
   "session.messages.loadEarlier": "تحميل الرسائل السابقة",
@@ -483,7 +504,9 @@ export const dict = {
   "sidebar.project.recentSessions": "الجلسات الحديثة",
   "sidebar.project.viewAllSessions": "عرض جميع الجلسات",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "سطح المكتب",
+  "settings.section.server": "الخادم",
   "settings.tab.general": "عام",
   "settings.tab.shortcuts": "اختصارات",
 
@@ -505,6 +528,7 @@ export const dict = {
   "font.option.hack": "Hack",
   "font.option.inconsolata": "Inconsolata",
   "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
   "font.option.jetbrainsMono": "JetBrains Mono",
   "font.option.mesloLgs": "Meslo LGS",
   "font.option.robotoMono": "Roboto Mono",
@@ -590,6 +614,13 @@ export const dict = {
 
   "settings.providers.title": "الموفرون",
   "settings.providers.description": "ستكون إعدادات الموفر قابلة للتكوين هنا.",
+  "settings.providers.section.connected": "الموفرون المتصلون",
+  "settings.providers.connected.empty": "لا يوجد موفرون متصلون",
+  "settings.providers.section.popular": "الموفرون الشائعون",
+  "settings.providers.tag.environment": "البيئة",
+  "settings.providers.tag.config": "التكوين",
+  "settings.providers.tag.custom": "مخصص",
+  "settings.providers.tag.other": "أخرى",
   "settings.models.title": "النماذج",
   "settings.models.description": "ستكون إعدادات النموذج قابلة للتكوين هنا.",
   "settings.agents.title": "الوكلاء",
@@ -657,6 +688,7 @@ export const dict = {
   "workspace.reset.failed.title": "فشل إعادة تعيين مساحة العمل",
   "workspace.reset.success.title": "تمت إعادة تعيين مساحة العمل",
   "workspace.reset.success.description": "مساحة العمل تطابق الآن الفرع الافتراضي.",
+  "workspace.error.stillPreparing": "مساحة العمل لا تزال قيد الإعداد",
   "workspace.status.checking": "التحقق من التغييرات غير المدمجة...",
   "workspace.status.error": "تعذر التحقق من حالة git.",
   "workspace.status.clean": "لم يتم اكتشاف تغييرات غير مدمجة.",

+ 37 - 0
packages/app/src/i18n/br.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Tema",
   "command.category.language": "Idioma",
   "command.category.file": "Arquivo",
+  "command.category.context": "Contexto",
   "command.category.terminal": "Terminal",
   "command.category.model": "Modelo",
   "command.category.mcp": "MCP",
@@ -42,7 +43,10 @@ export const dict = {
   "command.session.new": "Nova sessão",
   "command.file.open": "Abrir arquivo",
   "command.file.open.description": "Buscar arquivos e comandos",
+  "command.context.addSelection": "Adicionar seleção ao contexto",
+  "command.context.addSelection.description": "Adicionar as linhas selecionadas do arquivo atual",
   "command.terminal.toggle": "Alternar terminal",
+  "command.fileTree.toggle": "Alternar árvore de arquivos",
   "command.review.toggle": "Alternar revisão",
   "command.terminal.new": "Novo terminal",
   "command.terminal.new.description": "Criar uma nova aba de terminal",
@@ -137,6 +141,8 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} conectado",
   "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} desconectado",
+  "provider.disconnect.toast.disconnected.description": "Os modelos de {{provider}} não estão mais disponíveis.",
   "model.tag.free": "Grátis",
   "model.tag.latest": "Mais recente",
   "model.provider.anthropic": "Anthropic",
@@ -159,6 +165,8 @@ export const dict = {
   "common.loading": "Carregando",
   "common.loading.ellipsis": "...",
   "common.cancel": "Cancelar",
+  "common.connect": "Conectar",
+  "common.disconnect": "Desconectar",
   "common.submit": "Enviar",
   "common.save": "Salvar",
   "common.saving": "Salvando...",
@@ -167,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Digite comando do shell...",
   "prompt.placeholder.normal": 'Pergunte qualquer coisa... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Resumir comentários…",
+  "prompt.placeholder.summarizeComment": "Resumir comentário…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc para sair",
 
@@ -223,6 +233,8 @@ export const dict = {
   "dialog.mcp.description": "{{enabled}} de {{total}} habilitados",
   "dialog.mcp.empty": "Nenhum MCP configurado",
 
+  "dialog.lsp.empty": "LSPs detectados automaticamente pelos tipos de arquivo",
+  "dialog.plugins.empty": "Plugins configurados em opencode.json",
   "mcp.status.connected": "conectado",
   "mcp.status.failed": "falhou",
   "mcp.status.needs_auth": "precisa de autenticação",
@@ -251,6 +263,12 @@ export const dict = {
   "dialog.server.default.clear": "Limpar",
   "dialog.server.action.remove": "Remover servidor",
 
+  "dialog.server.menu.edit": "Editar",
+  "dialog.server.menu.default": "Definir como padrão",
+  "dialog.server.menu.defaultRemove": "Remover padrão",
+  "dialog.server.menu.delete": "Excluir",
+  "dialog.server.current": "Servidor atual",
+  "dialog.server.status.default": "Padrão",
   "dialog.project.edit.title": "Editar projeto",
   "dialog.project.edit.name": "Nome",
   "dialog.project.edit.icon": "Ícone",
@@ -329,6 +347,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Falha ao carregar arquivo",
 
+  "toast.file.listFailed.title": "Falha ao listar arquivos",
+  "toast.context.noLineSelection.title": "Nenhuma seleção de linhas",
+  "toast.context.noLineSelection.description": "Selecione primeiro um intervalo de linhas em uma aba de arquivo.",
   "toast.session.share.copyFailed.title": "Falha ao copiar URL para a área de transferência",
   "toast.session.share.success.title": "Sessão compartilhada",
   "toast.session.share.success.description": "URL compartilhada copiada para a área de transferência!",
@@ -404,8 +425,13 @@ export const dict = {
   "session.tab.context": "Contexto",
   "session.panel.reviewAndFiles": "Revisão e arquivos",
   "session.review.filesChanged": "{{count}} Arquivos Alterados",
+  "session.review.change.one": "Alteração",
+  "session.review.change.other": "Alterações",
   "session.review.loadingChanges": "Carregando alterações...",
   "session.review.empty": "Nenhuma alteração nesta sessão ainda",
+  "session.review.noChanges": "Sem alterações",
+  "session.files.selectToOpen": "Selecione um arquivo para abrir",
+  "session.files.all": "Todos os arquivos",
   "session.messages.renderEarlier": "Renderizar mensagens anteriores",
   "session.messages.loadingEarlier": "Carregando mensagens anteriores...",
   "session.messages.loadEarlier": "Carregar mensagens anteriores",
@@ -482,7 +508,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Sessões recentes",
   "sidebar.project.viewAllSessions": "Ver todas as sessões",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Desktop",
+  "settings.section.server": "Servidor",
   "settings.tab.general": "Geral",
   "settings.tab.shortcuts": "Atalhos",
 
@@ -504,6 +532,7 @@ export const dict = {
   "font.option.hack": "Hack",
   "font.option.inconsolata": "Inconsolata",
   "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
   "font.option.jetbrainsMono": "JetBrains Mono",
   "font.option.mesloLgs": "Meslo LGS",
   "font.option.robotoMono": "Roboto Mono",
@@ -591,6 +620,13 @@ export const dict = {
 
   "settings.providers.title": "Provedores",
   "settings.providers.description": "Configurações de provedores estarão disponíveis aqui.",
+  "settings.providers.section.connected": "Provedores conectados",
+  "settings.providers.connected.empty": "Nenhum provedor conectado",
+  "settings.providers.section.popular": "Provedores populares",
+  "settings.providers.tag.environment": "Ambiente",
+  "settings.providers.tag.config": "Configuração",
+  "settings.providers.tag.custom": "Personalizado",
+  "settings.providers.tag.other": "Outro",
   "settings.models.title": "Modelos",
   "settings.models.description": "Configurações de modelos estarão disponíveis aqui.",
   "settings.agents.title": "Agentes",
@@ -658,6 +694,7 @@ export const dict = {
   "workspace.reset.failed.title": "Falha ao redefinir espaço de trabalho",
   "workspace.reset.success.title": "Espaço de trabalho redefinido",
   "workspace.reset.success.description": "Espaço de trabalho agora corresponde ao branch padrão.",
+  "workspace.error.stillPreparing": "O espaço de trabalho ainda está sendo preparado",
   "workspace.status.checking": "Verificando alterações não mescladas...",
   "workspace.status.error": "Não foi possível verificar o status do git.",
   "workspace.status.clean": "Nenhuma alteração não mesclada detectada.",

+ 111 - 0
packages/app/src/i18n/da.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Tema",
   "command.category.language": "Sprog",
   "command.category.file": "Fil",
+  "command.category.context": "Kontekst",
   "command.category.terminal": "Terminal",
   "command.category.model": "Model",
   "command.category.mcp": "MCP",
@@ -15,6 +16,7 @@ export const dict = {
   "command.category.permissions": "Tilladelser",
   "command.category.workspace": "Arbejdsområde",
 
+  "command.category.settings": "Indstillinger",
   "theme.scheme.system": "System",
   "theme.scheme.light": "Lys",
   "theme.scheme.dark": "Mørk",
@@ -23,6 +25,7 @@ export const dict = {
   "command.project.open": "Åbn projekt",
   "command.provider.connect": "Tilslut udbyder",
   "command.server.switch": "Skift server",
+  "command.settings.open": "Åbn indstillinger",
   "command.session.previous": "Forrige session",
   "command.session.next": "Næste session",
   "command.session.archive": "Arkivér session",
@@ -40,7 +43,10 @@ export const dict = {
   "command.session.new": "Ny session",
   "command.file.open": "Åbn fil",
   "command.file.open.description": "Søg i filer og kommandoer",
+  "command.context.addSelection": "Tilføj markering til kontekst",
+  "command.context.addSelection.description": "Tilføj markerede linjer fra den aktuelle fil",
   "command.terminal.toggle": "Skift terminal",
+  "command.fileTree.toggle": "Skift filtræ",
   "command.review.toggle": "Skift gennemgang",
   "command.terminal.new": "Ny terminal",
   "command.terminal.new.description": "Opret en ny terminalfane",
@@ -117,6 +123,7 @@ export const dict = {
   "provider.connect.opencodeZen.line2":
     "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.",
   "provider.connect.opencodeZen.visit.prefix": "Besøg ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": " for at hente din API-nøgle.",
   "provider.connect.oauth.code.visit.prefix": "Besøg ",
   "provider.connect.oauth.code.visit.link": "dette link",
@@ -134,13 +141,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} forbundet",
   "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet",
+  "provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke længere tilgængelige.",
   "model.tag.free": "Gratis",
   "model.tag.latest": "Nyeste",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "tekst",
+  "model.input.image": "billede",
+  "model.input.audio": "lyd",
+  "model.input.video": "video",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "Tillader: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "Tillader tænkning",
+  "model.tooltip.reasoning.none": "Ingen tænkning",
+  "model.tooltip.context": "Kontekstgrænse {{limit}}",
   "common.search.placeholder": "Søg",
   "common.goBack": "Gå tilbage",
   "common.loading": "Indlæser",
+  "common.loading.ellipsis": "...",
   "common.cancel": "Annuller",
+  "common.connect": "Forbind",
+  "common.disconnect": "Frakobl",
   "common.submit": "Indsend",
   "common.save": "Gem",
   "common.saving": "Gemmer...",
@@ -149,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Indtast shell-kommando...",
   "prompt.placeholder.normal": 'Spørg om hvad som helst... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Opsummér kommentarer…",
+  "prompt.placeholder.summarizeComment": "Opsummér kommentar…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc for at afslutte",
 
@@ -252,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "Farve",
   "dialog.project.edit.color.select": "Vælg farven {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Opstartsscript for arbejdsområde",
+  "dialog.project.edit.worktree.startup.description": "Køres efter oprettelse af et nyt arbejdsområde (worktree).",
+  "dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install",
   "context.breakdown.title": "Kontekstfordeling",
   "context.breakdown.note":
     'Omtrentlig fordeling af input-tokens. "Andre" inkluderer værktøjsdefinitioner og overhead.',
@@ -318,6 +349,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Kunne ikke indlæse fil",
 
+  "toast.file.listFailed.title": "Kunne ikke liste filer",
+  "toast.context.noLineSelection.title": "Ingen linjevalg",
+  "toast.context.noLineSelection.description": "Vælg først et linjeinterval i en filfane.",
   "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til udklipsholder",
   "toast.session.share.success.title": "Session delt",
   "toast.session.share.success.description": "Delings-URL kopieret til udklipsholder!",
@@ -392,13 +426,19 @@ export const dict = {
   "session.tab.context": "Kontekst",
   "session.panel.reviewAndFiles": "Gennemgang og filer",
   "session.review.filesChanged": "{{count}} Filer ændret",
+  "session.review.change.one": "Ændring",
+  "session.review.change.other": "Ændringer",
   "session.review.loadingChanges": "Indlæser ændringer...",
   "session.review.empty": "Ingen ændringer i denne session endnu",
+  "session.review.noChanges": "Ingen ændringer",
+  "session.files.selectToOpen": "Vælg en fil at åbne",
+  "session.files.all": "Alle filer",
   "session.messages.renderEarlier": "Vis tidligere beskeder",
   "session.messages.loadingEarlier": "Indlæser tidligere beskeder...",
   "session.messages.loadEarlier": "Indlæs tidligere beskeder",
   "session.messages.loading": "Indlæser beskeder...",
 
+  "session.messages.jumpToLatest": "Gå til seneste",
   "session.context.addToContext": "Tilføj {{selection}} til kontekst",
 
   "session.new.worktree.main": "Hovedgren",
@@ -440,6 +480,8 @@ export const dict = {
   "terminal.title.numbered": "Terminal {{number}}",
   "terminal.close": "Luk terminal",
 
+  "terminal.connectionLost.title": "Forbindelse mistet",
+  "terminal.connectionLost.description": "Terminalforbindelsen blev afbrudt. Dette kan ske, når serveren genstarter.",
   "common.closeTab": "Luk fane",
   "common.dismiss": "Afvis",
   "common.requestFailed": "Forespørgsel mislykkedes",
@@ -453,6 +495,8 @@ export const dict = {
   "common.edit": "Rediger",
   "common.loadMore": "Indlæs flere",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "Skift menu",
   "sidebar.nav.projectsAndSessions": "Projekter og sessioner",
   "sidebar.settings": "Indstillinger",
   "sidebar.help": "Hjælp",
@@ -464,7 +508,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Seneste sessioner",
   "sidebar.project.viewAllSessions": "Vis alle sessioner",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Desktop",
+  "settings.section.server": "Server",
   "settings.tab.general": "Generelt",
   "settings.tab.shortcuts": "Genveje",
 
@@ -481,6 +527,63 @@ export const dict = {
   "settings.general.row.font.title": "Skrifttype",
   "settings.general.row.font.description": "Tilpas mono-skrifttypen brugt i kodeblokke",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "Alarm 01",
+  "sound.option.alert02": "Alarm 02",
+  "sound.option.alert03": "Alarm 03",
+  "sound.option.alert04": "Alarm 04",
+  "sound.option.alert05": "Alarm 05",
+  "sound.option.alert06": "Alarm 06",
+  "sound.option.alert07": "Alarm 07",
+  "sound.option.alert08": "Alarm 08",
+  "sound.option.alert09": "Alarm 09",
+  "sound.option.alert10": "Alarm 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "Nej 01",
+  "sound.option.nope02": "Nej 02",
+  "sound.option.nope03": "Nej 03",
+  "sound.option.nope04": "Nej 04",
+  "sound.option.nope05": "Nej 05",
+  "sound.option.nope06": "Nej 06",
+  "sound.option.nope07": "Nej 07",
+  "sound.option.nope08": "Nej 08",
+  "sound.option.nope09": "Nej 09",
+  "sound.option.nope10": "Nej 10",
+  "sound.option.nope11": "Nej 11",
+  "sound.option.nope12": "Nej 12",
+  "sound.option.yup01": "Ja 01",
+  "sound.option.yup02": "Ja 02",
+  "sound.option.yup03": "Ja 03",
+  "sound.option.yup04": "Ja 04",
+  "sound.option.yup05": "Ja 05",
+  "sound.option.yup06": "Ja 06",
   "settings.general.notifications.agent.title": "Agent",
   "settings.general.notifications.agent.description":
     "Vis systemmeddelelse når agenten er færdig eller kræver opmærksomhed",
@@ -516,6 +619,13 @@ export const dict = {
 
   "settings.providers.title": "Udbydere",
   "settings.providers.description": "Udbyderindstillinger vil kunne konfigureres her.",
+  "settings.providers.section.connected": "Forbundne udbydere",
+  "settings.providers.connected.empty": "Ingen forbundne udbydere",
+  "settings.providers.section.popular": "Populære udbydere",
+  "settings.providers.tag.environment": "Miljø",
+  "settings.providers.tag.config": "Konfiguration",
+  "settings.providers.tag.custom": "Brugerdefineret",
+  "settings.providers.tag.other": "Andet",
   "settings.models.title": "Modeller",
   "settings.models.description": "Modelindstillinger vil kunne konfigureres her.",
   "settings.agents.title": "Agenter",
@@ -583,6 +693,7 @@ export const dict = {
   "workspace.reset.failed.title": "Kunne ikke nulstille arbejdsområde",
   "workspace.reset.success.title": "Arbejdsområde nulstillet",
   "workspace.reset.success.description": "Arbejdsområdet matcher nu hovedgrenen.",
+  "workspace.error.stillPreparing": "Arbejdsområdet er stadig ved at blive klargjort",
   "workspace.status.checking": "Tjekker for uflettede ændringer...",
   "workspace.status.error": "Kunne ikke bekræfte git-status.",
   "workspace.status.clean": "Ingen uflettede ændringer fundet.",

+ 111 - 0
packages/app/src/i18n/de.ts

@@ -12,6 +12,7 @@ export const dict = {
   "command.category.theme": "Thema",
   "command.category.language": "Sprache",
   "command.category.file": "Datei",
+  "command.category.context": "Kontext",
   "command.category.terminal": "Terminal",
   "command.category.model": "Modell",
   "command.category.mcp": "MCP",
@@ -19,6 +20,7 @@ export const dict = {
   "command.category.permissions": "Berechtigungen",
   "command.category.workspace": "Arbeitsbereich",
 
+  "command.category.settings": "Einstellungen",
   "theme.scheme.system": "System",
   "theme.scheme.light": "Hell",
   "theme.scheme.dark": "Dunkel",
@@ -27,6 +29,7 @@ export const dict = {
   "command.project.open": "Projekt öffnen",
   "command.provider.connect": "Anbieter verbinden",
   "command.server.switch": "Server wechseln",
+  "command.settings.open": "Einstellungen öffnen",
   "command.session.previous": "Vorherige Sitzung",
   "command.session.next": "Nächste Sitzung",
   "command.session.archive": "Sitzung archivieren",
@@ -44,7 +47,10 @@ export const dict = {
   "command.session.new": "Neue Sitzung",
   "command.file.open": "Datei öffnen",
   "command.file.open.description": "Dateien und Befehle durchsuchen",
+  "command.context.addSelection": "Auswahl zum Kontext hinzufügen",
+  "command.context.addSelection.description": "Ausgewählte Zeilen aus der aktuellen Datei hinzufügen",
   "command.terminal.toggle": "Terminal umschalten",
+  "command.fileTree.toggle": "Dateibaum umschalten",
   "command.review.toggle": "Überprüfung umschalten",
   "command.terminal.new": "Neues Terminal",
   "command.terminal.new.description": "Neuen Terminal-Tab erstellen",
@@ -121,6 +127,7 @@ export const dict = {
   "provider.connect.opencodeZen.line2":
     "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.",
   "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.",
   "provider.connect.oauth.code.visit.prefix": "Besuchen Sie ",
   "provider.connect.oauth.code.visit.link": "diesen Link",
@@ -138,13 +145,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} verbunden",
   "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} getrennt",
+  "provider.disconnect.toast.disconnected.description": "Die {{provider}}-Modelle sind nicht mehr verfügbar.",
   "model.tag.free": "Kostenlos",
   "model.tag.latest": "Neueste",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "Text",
+  "model.input.image": "Bild",
+  "model.input.audio": "Audio",
+  "model.input.video": "Video",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "Erlaubt: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "Erlaubt Reasoning",
+  "model.tooltip.reasoning.none": "Kein Reasoning",
+  "model.tooltip.context": "Kontextlimit {{limit}}",
   "common.search.placeholder": "Suchen",
   "common.goBack": "Zurück",
   "common.loading": "Laden",
+  "common.loading.ellipsis": "...",
   "common.cancel": "Abbrechen",
+  "common.connect": "Verbinden",
+  "common.disconnect": "Trennen",
   "common.submit": "Absenden",
   "common.save": "Speichern",
   "common.saving": "Speichert...",
@@ -153,6 +179,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Shell-Befehl eingeben...",
   "prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Kommentare zusammenfassen…",
+  "prompt.placeholder.summarizeComment": "Kommentar zusammenfassen…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc zum Verlassen",
 
@@ -257,6 +285,9 @@ export const dict = {
   "dialog.project.edit.color": "Farbe",
   "dialog.project.edit.color.select": "{{color}}-Farbe auswählen",
 
+  "dialog.project.edit.worktree.startup": "Startup-Skript für Arbeitsbereich",
+  "dialog.project.edit.worktree.startup.description": "Wird nach dem Erstellen eines neuen Arbeitsbereichs (Worktree) ausgeführt.",
+  "dialog.project.edit.worktree.startup.placeholder": "z. B. bun install",
   "context.breakdown.title": "Kontext-Aufschlüsselung",
   "context.breakdown.note":
     'Ungefähre Aufschlüsselung der Eingabe-Token. "Andere" beinhaltet Werkzeugdefinitionen und Overhead.',
@@ -323,6 +354,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Datei konnte nicht geladen werden",
 
+  "toast.file.listFailed.title": "Dateien konnten nicht aufgelistet werden",
+  "toast.context.noLineSelection.title": "Keine Zeilenauswahl",
+  "toast.context.noLineSelection.description": "Wählen Sie zuerst einen Zeilenbereich in einem Datei-Tab aus.",
   "toast.session.share.copyFailed.title": "URL konnte nicht in die Zwischenablage kopiert werden",
   "toast.session.share.success.title": "Sitzung geteilt",
   "toast.session.share.success.description": "Teilen-URL in die Zwischenablage kopiert!",
@@ -399,13 +433,19 @@ export const dict = {
   "session.tab.context": "Kontext",
   "session.panel.reviewAndFiles": "Überprüfung und Dateien",
   "session.review.filesChanged": "{{count}} Dateien geändert",
+  "session.review.change.one": "Änderung",
+  "session.review.change.other": "Änderungen",
   "session.review.loadingChanges": "Lade Änderungen...",
   "session.review.empty": "Noch keine Änderungen in dieser Sitzung",
+  "session.review.noChanges": "Keine Änderungen",
+  "session.files.selectToOpen": "Datei zum Öffnen auswählen",
+  "session.files.all": "Alle Dateien",
   "session.messages.renderEarlier": "Frühere Nachrichten rendern",
   "session.messages.loadingEarlier": "Lade frühere Nachrichten...",
   "session.messages.loadEarlier": "Frühere Nachrichten laden",
   "session.messages.loading": "Lade Nachrichten...",
 
+  "session.messages.jumpToLatest": "Zum neuesten springen",
   "session.context.addToContext": "{{selection}} zum Kontext hinzufügen",
 
   "session.new.worktree.main": "Haupt-Branch",
@@ -447,6 +487,8 @@ export const dict = {
   "terminal.title.numbered": "Terminal {{number}}",
   "terminal.close": "Terminal schließen",
 
+  "terminal.connectionLost.title": "Verbindung verloren",
+  "terminal.connectionLost.description": "Die Terminalverbindung wurde unterbrochen. Das kann passieren, wenn der Server neu startet.",
   "common.closeTab": "Tab schließen",
   "common.dismiss": "Verwerfen",
   "common.requestFailed": "Anfrage fehlgeschlagen",
@@ -460,6 +502,8 @@ export const dict = {
   "common.edit": "Bearbeiten",
   "common.loadMore": "Mehr laden",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "Menü umschalten",
   "sidebar.nav.projectsAndSessions": "Projekte und Sitzungen",
   "sidebar.settings": "Einstellungen",
   "sidebar.help": "Hilfe",
@@ -472,7 +516,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Letzte Sitzungen",
   "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Desktop",
+  "settings.section.server": "Server",
   "settings.tab.general": "Allgemein",
   "settings.tab.shortcuts": "Tastenkombinationen",
 
@@ -489,6 +535,63 @@ export const dict = {
   "settings.general.row.font.title": "Schriftart",
   "settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "Alarm 01",
+  "sound.option.alert02": "Alarm 02",
+  "sound.option.alert03": "Alarm 03",
+  "sound.option.alert04": "Alarm 04",
+  "sound.option.alert05": "Alarm 05",
+  "sound.option.alert06": "Alarm 06",
+  "sound.option.alert07": "Alarm 07",
+  "sound.option.alert08": "Alarm 08",
+  "sound.option.alert09": "Alarm 09",
+  "sound.option.alert10": "Alarm 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "Nein 01",
+  "sound.option.nope02": "Nein 02",
+  "sound.option.nope03": "Nein 03",
+  "sound.option.nope04": "Nein 04",
+  "sound.option.nope05": "Nein 05",
+  "sound.option.nope06": "Nein 06",
+  "sound.option.nope07": "Nein 07",
+  "sound.option.nope08": "Nein 08",
+  "sound.option.nope09": "Nein 09",
+  "sound.option.nope10": "Nein 10",
+  "sound.option.nope11": "Nein 11",
+  "sound.option.nope12": "Nein 12",
+  "sound.option.yup01": "Ja 01",
+  "sound.option.yup02": "Ja 02",
+  "sound.option.yup03": "Ja 03",
+  "sound.option.yup04": "Ja 04",
+  "sound.option.yup05": "Ja 05",
+  "sound.option.yup06": "Ja 06",
   "settings.general.notifications.agent.title": "Agent",
   "settings.general.notifications.agent.description":
     "Systembenachrichtigung anzeigen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt",
@@ -525,6 +628,13 @@ export const dict = {
 
   "settings.providers.title": "Anbieter",
   "settings.providers.description": "Anbietereinstellungen können hier konfiguriert werden.",
+  "settings.providers.section.connected": "Verbundene Anbieter",
+  "settings.providers.connected.empty": "Keine verbundenen Anbieter",
+  "settings.providers.section.popular": "Beliebte Anbieter",
+  "settings.providers.tag.environment": "Umgebung",
+  "settings.providers.tag.config": "Konfiguration",
+  "settings.providers.tag.custom": "Benutzerdefiniert",
+  "settings.providers.tag.other": "Andere",
   "settings.models.title": "Modelle",
   "settings.models.description": "Modelleinstellungen können hier konfiguriert werden.",
   "settings.agents.title": "Agenten",
@@ -592,6 +702,7 @@ export const dict = {
   "workspace.reset.failed.title": "Arbeitsbereich konnte nicht zurückgesetzt werden",
   "workspace.reset.success.title": "Arbeitsbereich zurückgesetzt",
   "workspace.reset.success.description": "Der Arbeitsbereich entspricht jetzt dem Standard-Branch.",
+  "workspace.error.stillPreparing": "Arbeitsbereich wird noch vorbereitet",
   "workspace.status.checking": "Suche nach nicht zusammengeführten Änderungen...",
   "workspace.status.error": "Git-Status konnte nicht überprüft werden.",
   "workspace.status.clean": "Keine nicht zusammengeführten Änderungen erkannt.",

+ 111 - 0
packages/app/src/i18n/es.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Tema",
   "command.category.language": "Idioma",
   "command.category.file": "Archivo",
+  "command.category.context": "Contexto",
   "command.category.terminal": "Terminal",
   "command.category.model": "Modelo",
   "command.category.mcp": "MCP",
@@ -15,6 +16,7 @@ export const dict = {
   "command.category.permissions": "Permisos",
   "command.category.workspace": "Espacio de trabajo",
 
+  "command.category.settings": "Ajustes",
   "theme.scheme.system": "Sistema",
   "theme.scheme.light": "Claro",
   "theme.scheme.dark": "Oscuro",
@@ -23,6 +25,7 @@ export const dict = {
   "command.project.open": "Abrir proyecto",
   "command.provider.connect": "Conectar proveedor",
   "command.server.switch": "Cambiar servidor",
+  "command.settings.open": "Abrir ajustes",
   "command.session.previous": "Sesión anterior",
   "command.session.next": "Siguiente sesión",
   "command.session.archive": "Archivar sesión",
@@ -40,7 +43,10 @@ export const dict = {
   "command.session.new": "Nueva sesión",
   "command.file.open": "Abrir archivo",
   "command.file.open.description": "Buscar archivos y comandos",
+  "command.context.addSelection": "Añadir selección al contexto",
+  "command.context.addSelection.description": "Añadir las líneas seleccionadas del archivo actual",
   "command.terminal.toggle": "Alternar terminal",
+  "command.fileTree.toggle": "Alternar árbol de archivos",
   "command.review.toggle": "Alternar revisión",
   "command.terminal.new": "Nueva terminal",
   "command.terminal.new.description": "Crear una nueva pestaña de terminal",
@@ -117,6 +123,7 @@ export const dict = {
   "provider.connect.opencodeZen.line2":
     "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.",
   "provider.connect.opencodeZen.visit.prefix": "Visita ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": " para obtener tu clave API.",
   "provider.connect.oauth.code.visit.prefix": "Visita ",
   "provider.connect.oauth.code.visit.link": "este enlace",
@@ -134,13 +141,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} conectado",
   "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} desconectado",
+  "provider.disconnect.toast.disconnected.description": "Los modelos de {{provider}} ya no están disponibles.",
   "model.tag.free": "Gratis",
   "model.tag.latest": "Último",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "texto",
+  "model.input.image": "imagen",
+  "model.input.audio": "audio",
+  "model.input.video": "video",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "Permite: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "Permite razonamiento",
+  "model.tooltip.reasoning.none": "Sin razonamiento",
+  "model.tooltip.context": "Límite de contexto {{limit}}",
   "common.search.placeholder": "Buscar",
   "common.goBack": "Volver",
   "common.loading": "Cargando",
+  "common.loading.ellipsis": "...",
   "common.cancel": "Cancelar",
+  "common.connect": "Conectar",
+  "common.disconnect": "Desconectar",
   "common.submit": "Enviar",
   "common.save": "Guardar",
   "common.saving": "Guardando...",
@@ -149,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Introduce comando de shell...",
   "prompt.placeholder.normal": 'Pregunta cualquier cosa... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Resumir comentarios…",
+  "prompt.placeholder.summarizeComment": "Resumir comentario…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc para salir",
 
@@ -252,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "Color",
   "dialog.project.edit.color.select": "Seleccionar color {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Script de inicio del espacio de trabajo",
+  "dialog.project.edit.worktree.startup.description": "Se ejecuta después de crear un nuevo espacio de trabajo (árbol de trabajo).",
+  "dialog.project.edit.worktree.startup.placeholder": "p. ej. bun install",
   "context.breakdown.title": "Desglose de Contexto",
   "context.breakdown.note":
     'Desglose aproximado de tokens de entrada. "Otro" incluye definiciones de herramientas y sobrecarga.',
@@ -318,6 +349,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Fallo al cargar archivo",
 
+  "toast.file.listFailed.title": "Fallo al listar archivos",
+  "toast.context.noLineSelection.title": "Sin selección de líneas",
+  "toast.context.noLineSelection.description": "Primero selecciona un rango de líneas en una pestaña de archivo.",
   "toast.session.share.copyFailed.title": "Fallo al copiar URL al portapapeles",
   "toast.session.share.success.title": "Sesión compartida",
   "toast.session.share.success.description": "¡URL compartida copiada al portapapeles!",
@@ -393,13 +427,19 @@ export const dict = {
   "session.tab.context": "Contexto",
   "session.panel.reviewAndFiles": "Revisión y archivos",
   "session.review.filesChanged": "{{count}} Archivos Cambiados",
+  "session.review.change.one": "Cambio",
+  "session.review.change.other": "Cambios",
   "session.review.loadingChanges": "Cargando cambios...",
   "session.review.empty": "No hay cambios en esta sesión aún",
+  "session.review.noChanges": "Sin cambios",
+  "session.files.selectToOpen": "Selecciona un archivo para abrir",
+  "session.files.all": "Todos los archivos",
   "session.messages.renderEarlier": "Renderizar mensajes anteriores",
   "session.messages.loadingEarlier": "Cargando mensajes anteriores...",
   "session.messages.loadEarlier": "Cargar mensajes anteriores",
   "session.messages.loading": "Cargando mensajes...",
 
+  "session.messages.jumpToLatest": "Ir al último",
   "session.context.addToContext": "Añadir {{selection}} al contexto",
 
   "session.new.worktree.main": "Rama principal",
@@ -441,6 +481,8 @@ export const dict = {
   "terminal.title.numbered": "Terminal {{number}}",
   "terminal.close": "Cerrar terminal",
 
+  "terminal.connectionLost.title": "Conexión perdida",
+  "terminal.connectionLost.description": "La conexión del terminal se interrumpió. Esto puede ocurrir cuando el servidor se reinicia.",
   "common.closeTab": "Cerrar pestaña",
   "common.dismiss": "Descartar",
   "common.requestFailed": "Solicitud fallida",
@@ -454,6 +496,8 @@ export const dict = {
   "common.edit": "Editar",
   "common.loadMore": "Cargar más",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "Alternar menú",
   "sidebar.nav.projectsAndSessions": "Proyectos y sesiones",
   "sidebar.settings": "Ajustes",
   "sidebar.help": "Ayuda",
@@ -465,7 +509,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Sesiones recientes",
   "sidebar.project.viewAllSessions": "Ver todas las sesiones",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Escritorio",
+  "settings.section.server": "Servidor",
   "settings.tab.general": "General",
   "settings.tab.shortcuts": "Atajos",
 
@@ -482,6 +528,63 @@ export const dict = {
   "settings.general.row.font.title": "Fuente",
   "settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "Alerta 01",
+  "sound.option.alert02": "Alerta 02",
+  "sound.option.alert03": "Alerta 03",
+  "sound.option.alert04": "Alerta 04",
+  "sound.option.alert05": "Alerta 05",
+  "sound.option.alert06": "Alerta 06",
+  "sound.option.alert07": "Alerta 07",
+  "sound.option.alert08": "Alerta 08",
+  "sound.option.alert09": "Alerta 09",
+  "sound.option.alert10": "Alerta 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "No 01",
+  "sound.option.nope02": "No 02",
+  "sound.option.nope03": "No 03",
+  "sound.option.nope04": "No 04",
+  "sound.option.nope05": "No 05",
+  "sound.option.nope06": "No 06",
+  "sound.option.nope07": "No 07",
+  "sound.option.nope08": "No 08",
+  "sound.option.nope09": "No 09",
+  "sound.option.nope10": "No 10",
+  "sound.option.nope11": "No 11",
+  "sound.option.nope12": "No 12",
+  "sound.option.yup01": "Sí 01",
+  "sound.option.yup02": "Sí 02",
+  "sound.option.yup03": "Sí 03",
+  "sound.option.yup04": "Sí 04",
+  "sound.option.yup05": "Sí 05",
+  "sound.option.yup06": "Sí 06",
   "settings.general.notifications.agent.title": "Agente",
   "settings.general.notifications.agent.description":
     "Mostrar notificación del sistema cuando el agente termine o necesite atención",
@@ -519,6 +622,13 @@ export const dict = {
 
   "settings.providers.title": "Proveedores",
   "settings.providers.description": "La configuración de proveedores estará disponible aquí.",
+  "settings.providers.section.connected": "Proveedores conectados",
+  "settings.providers.connected.empty": "No hay proveedores conectados",
+  "settings.providers.section.popular": "Proveedores populares",
+  "settings.providers.tag.environment": "Entorno",
+  "settings.providers.tag.config": "Configuración",
+  "settings.providers.tag.custom": "Personalizado",
+  "settings.providers.tag.other": "Otro",
   "settings.models.title": "Modelos",
   "settings.models.description": "La configuración de modelos estará disponible aquí.",
   "settings.agents.title": "Agentes",
@@ -586,6 +696,7 @@ export const dict = {
   "workspace.reset.failed.title": "Fallo al restablecer espacio de trabajo",
   "workspace.reset.success.title": "Espacio de trabajo restablecido",
   "workspace.reset.success.description": "El espacio de trabajo ahora coincide con la rama predeterminada.",
+  "workspace.error.stillPreparing": "El espacio de trabajo aún se está preparando",
   "workspace.status.checking": "Comprobando cambios no fusionados...",
   "workspace.status.error": "No se pudo verificar el estado de git.",
   "workspace.status.clean": "No se detectaron cambios no fusionados.",

+ 111 - 0
packages/app/src/i18n/fr.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Thème",
   "command.category.language": "Langue",
   "command.category.file": "Fichier",
+  "command.category.context": "Contexte",
   "command.category.terminal": "Terminal",
   "command.category.model": "Modèle",
   "command.category.mcp": "MCP",
@@ -15,6 +16,7 @@ export const dict = {
   "command.category.permissions": "Permissions",
   "command.category.workspace": "Espace de travail",
 
+  "command.category.settings": "Paramètres",
   "theme.scheme.system": "Système",
   "theme.scheme.light": "Clair",
   "theme.scheme.dark": "Sombre",
@@ -23,6 +25,7 @@ export const dict = {
   "command.project.open": "Ouvrir un projet",
   "command.provider.connect": "Connecter un fournisseur",
   "command.server.switch": "Changer de serveur",
+  "command.settings.open": "Ouvrir les paramètres",
   "command.session.previous": "Session précédente",
   "command.session.next": "Session suivante",
   "command.session.archive": "Archiver la session",
@@ -40,7 +43,10 @@ export const dict = {
   "command.session.new": "Nouvelle session",
   "command.file.open": "Ouvrir un fichier",
   "command.file.open.description": "Rechercher des fichiers et des commandes",
+  "command.context.addSelection": "Ajouter la sélection au contexte",
+  "command.context.addSelection.description": "Ajouter les lignes sélectionnées du fichier actuel",
   "command.terminal.toggle": "Basculer le terminal",
+  "command.fileTree.toggle": "Basculer l'arborescence des fichiers",
   "command.review.toggle": "Basculer la revue",
   "command.terminal.new": "Nouveau terminal",
   "command.terminal.new.description": "Créer un nouvel onglet de terminal",
@@ -117,6 +123,7 @@ export const dict = {
   "provider.connect.opencodeZen.line2":
     "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.",
   "provider.connect.opencodeZen.visit.prefix": "Visitez ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.",
   "provider.connect.oauth.code.visit.prefix": "Visitez ",
   "provider.connect.oauth.code.visit.link": "ce lien",
@@ -134,13 +141,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} connecté",
   "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} déconnecté",
+  "provider.disconnect.toast.disconnected.description": "Les modèles {{provider}} ne sont plus disponibles.",
   "model.tag.free": "Gratuit",
   "model.tag.latest": "Dernier",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "texte",
+  "model.input.image": "image",
+  "model.input.audio": "audio",
+  "model.input.video": "vidéo",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "Autorise : {{inputs}}",
+  "model.tooltip.reasoning.allowed": "Autorise le raisonnement",
+  "model.tooltip.reasoning.none": "Sans raisonnement",
+  "model.tooltip.context": "Limite de contexte {{limit}}",
   "common.search.placeholder": "Rechercher",
   "common.goBack": "Retour",
   "common.loading": "Chargement",
+  "common.loading.ellipsis": "...",
   "common.cancel": "Annuler",
+  "common.connect": "Connecter",
+  "common.disconnect": "Déconnecter",
   "common.submit": "Soumettre",
   "common.save": "Enregistrer",
   "common.saving": "Enregistrement...",
@@ -149,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Entrez une commande shell...",
   "prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Résumer les commentaires…",
+  "prompt.placeholder.summarizeComment": "Résumer le commentaire…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "esc pour quitter",
 
@@ -252,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "Couleur",
   "dialog.project.edit.color.select": "Sélectionner la couleur {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Script de démarrage de l'espace de travail",
+  "dialog.project.edit.worktree.startup.description": "S'exécute après la création d'un nouvel espace de travail (arbre de travail).",
+  "dialog.project.edit.worktree.startup.placeholder": "p. ex. bun install",
   "context.breakdown.title": "Répartition du contexte",
   "context.breakdown.note":
     "Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les frais généraux.",
@@ -320,6 +351,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Échec du chargement du fichier",
 
+  "toast.file.listFailed.title": "Échec de la liste des fichiers",
+  "toast.context.noLineSelection.title": "Aucune sélection de lignes",
+  "toast.context.noLineSelection.description": "Sélectionnez d'abord une plage de lignes dans un onglet de fichier.",
   "toast.session.share.copyFailed.title": "Échec de la copie de l'URL dans le presse-papiers",
   "toast.session.share.success.title": "Session partagée",
   "toast.session.share.success.description": "URL de partage copiée dans le presse-papiers !",
@@ -398,13 +432,19 @@ export const dict = {
   "session.tab.context": "Contexte",
   "session.panel.reviewAndFiles": "Revue et fichiers",
   "session.review.filesChanged": "{{count}} fichiers modifiés",
+  "session.review.change.one": "Modification",
+  "session.review.change.other": "Modifications",
   "session.review.loadingChanges": "Chargement des modifications...",
   "session.review.empty": "Aucune modification dans cette session pour l'instant",
+  "session.review.noChanges": "Aucune modification",
+  "session.files.selectToOpen": "Sélectionnez un fichier à ouvrir",
+  "session.files.all": "Tous les fichiers",
   "session.messages.renderEarlier": "Afficher les messages précédents",
   "session.messages.loadingEarlier": "Chargement des messages précédents...",
   "session.messages.loadEarlier": "Charger les messages précédents",
   "session.messages.loading": "Chargement des messages...",
 
+  "session.messages.jumpToLatest": "Aller au dernier",
   "session.context.addToContext": "Ajouter {{selection}} au contexte",
 
   "session.new.worktree.main": "Branche principale",
@@ -446,6 +486,8 @@ export const dict = {
   "terminal.title.numbered": "Terminal {{number}}",
   "terminal.close": "Fermer le terminal",
 
+  "terminal.connectionLost.title": "Connexion perdue",
+  "terminal.connectionLost.description": "La connexion au terminal a été interrompue. Cela peut arriver lorsque le serveur redémarre.",
   "common.closeTab": "Fermer l'onglet",
   "common.dismiss": "Ignorer",
   "common.requestFailed": "La demande a échoué",
@@ -459,6 +501,8 @@ export const dict = {
   "common.edit": "Modifier",
   "common.loadMore": "Charger plus",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "Basculer le menu",
   "sidebar.nav.projectsAndSessions": "Projets et sessions",
   "sidebar.settings": "Paramètres",
   "sidebar.help": "Aide",
@@ -472,7 +516,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Sessions récentes",
   "sidebar.project.viewAllSessions": "Voir toutes les sessions",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Bureau",
+  "settings.section.server": "Serveur",
   "settings.tab.general": "Général",
   "settings.tab.shortcuts": "Raccourcis",
 
@@ -489,6 +535,63 @@ export const dict = {
   "settings.general.row.font.title": "Police",
   "settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "Alerte 01",
+  "sound.option.alert02": "Alerte 02",
+  "sound.option.alert03": "Alerte 03",
+  "sound.option.alert04": "Alerte 04",
+  "sound.option.alert05": "Alerte 05",
+  "sound.option.alert06": "Alerte 06",
+  "sound.option.alert07": "Alerte 07",
+  "sound.option.alert08": "Alerte 08",
+  "sound.option.alert09": "Alerte 09",
+  "sound.option.alert10": "Alerte 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "Non 01",
+  "sound.option.nope02": "Non 02",
+  "sound.option.nope03": "Non 03",
+  "sound.option.nope04": "Non 04",
+  "sound.option.nope05": "Non 05",
+  "sound.option.nope06": "Non 06",
+  "sound.option.nope07": "Non 07",
+  "sound.option.nope08": "Non 08",
+  "sound.option.nope09": "Non 09",
+  "sound.option.nope10": "Non 10",
+  "sound.option.nope11": "Non 11",
+  "sound.option.nope12": "Non 12",
+  "sound.option.yup01": "Oui 01",
+  "sound.option.yup02": "Oui 02",
+  "sound.option.yup03": "Oui 03",
+  "sound.option.yup04": "Oui 04",
+  "sound.option.yup05": "Oui 05",
+  "sound.option.yup06": "Oui 06",
   "settings.general.notifications.agent.title": "Agent",
   "settings.general.notifications.agent.description":
     "Afficher une notification système lorsque l'agent a terminé ou nécessite une attention",
@@ -525,6 +628,13 @@ export const dict = {
 
   "settings.providers.title": "Fournisseurs",
   "settings.providers.description": "Les paramètres des fournisseurs seront configurables ici.",
+  "settings.providers.section.connected": "Fournisseurs connectés",
+  "settings.providers.connected.empty": "Aucun fournisseur connecté",
+  "settings.providers.section.popular": "Fournisseurs populaires",
+  "settings.providers.tag.environment": "Environnement",
+  "settings.providers.tag.config": "Configuration",
+  "settings.providers.tag.custom": "Personnalisé",
+  "settings.providers.tag.other": "Autre",
   "settings.models.title": "Modèles",
   "settings.models.description": "Les paramètres des modèles seront configurables ici.",
   "settings.agents.title": "Agents",
@@ -593,6 +703,7 @@ export const dict = {
   "workspace.reset.failed.title": "Échec de la réinitialisation de l'espace de travail",
   "workspace.reset.success.title": "Espace de travail réinitialisé",
   "workspace.reset.success.description": "L'espace de travail correspond maintenant à la branche par défaut.",
+  "workspace.error.stillPreparing": "L'espace de travail est encore en cours de préparation",
   "workspace.status.checking": "Vérification des modifications non fusionnées...",
   "workspace.status.error": "Impossible de vérifier le statut git.",
   "workspace.status.clean": "Aucune modification non fusionnée détectée.",

+ 111 - 0
packages/app/src/i18n/ja.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "テーマ",
   "command.category.language": "言語",
   "command.category.file": "ファイル",
+  "command.category.context": "コンテキスト",
   "command.category.terminal": "ターミナル",
   "command.category.model": "モデル",
   "command.category.mcp": "MCP",
@@ -15,6 +16,7 @@ export const dict = {
   "command.category.permissions": "権限",
   "command.category.workspace": "ワークスペース",
 
+  "command.category.settings": "設定",
   "theme.scheme.system": "システム",
   "theme.scheme.light": "ライト",
   "theme.scheme.dark": "ダーク",
@@ -23,6 +25,7 @@ export const dict = {
   "command.project.open": "プロジェクトを開く",
   "command.provider.connect": "プロバイダーに接続",
   "command.server.switch": "サーバーの切り替え",
+  "command.settings.open": "設定を開く",
   "command.session.previous": "前のセッション",
   "command.session.next": "次のセッション",
   "command.session.archive": "セッションをアーカイブ",
@@ -40,7 +43,10 @@ export const dict = {
   "command.session.new": "新しいセッション",
   "command.file.open": "ファイルを開く",
   "command.file.open.description": "ファイルとコマンドを検索",
+  "command.context.addSelection": "選択範囲をコンテキストに追加",
+  "command.context.addSelection.description": "現在のファイルから選択した行を追加",
   "command.terminal.toggle": "ターミナルの切り替え",
+  "command.fileTree.toggle": "ファイルツリーを切り替え",
   "command.review.toggle": "レビューの切り替え",
   "command.terminal.new": "新しいターミナル",
   "command.terminal.new.description": "新しいターミナルタブを作成",
@@ -116,6 +122,7 @@ export const dict = {
     "OpenCode Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。",
   "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。",
   "provider.connect.opencodeZen.visit.prefix": " ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。",
   "provider.connect.oauth.code.visit.prefix": " ",
   "provider.connect.oauth.code.visit.link": "このリンク",
@@ -133,13 +140,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}}が接続されました",
   "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}}が切断されました",
+  "provider.disconnect.toast.disconnected.description": "{{provider}}のモデルは利用できなくなりました。",
   "model.tag.free": "無料",
   "model.tag.latest": "最新",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "テキスト",
+  "model.input.image": "画像",
+  "model.input.audio": "音声",
+  "model.input.video": "動画",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "対応: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "推論を許可",
+  "model.tooltip.reasoning.none": "推論なし",
+  "model.tooltip.context": "コンテキスト上限 {{limit}}",
   "common.search.placeholder": "検索",
   "common.goBack": "戻る",
   "common.loading": "読み込み中",
+  "common.loading.ellipsis": "...",
   "common.cancel": "キャンセル",
+  "common.connect": "接続",
+  "common.disconnect": "切断",
   "common.submit": "送信",
   "common.save": "保存",
   "common.saving": "保存中...",
@@ -148,6 +174,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "シェルコマンドを入力...",
   "prompt.placeholder.normal": '何でも聞いてください... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "コメントを要約…",
+  "prompt.placeholder.summarizeComment": "コメントを要約…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "escで終了",
 
@@ -251,6 +279,9 @@ export const dict = {
   "dialog.project.edit.color": "色",
   "dialog.project.edit.color.select": "{{color}}の色を選択",
 
+  "dialog.project.edit.worktree.startup": "ワークスペース起動スクリプト",
+  "dialog.project.edit.worktree.startup.description": "新しいワークスペース (ワークツリー) を作成した後に実行されます。",
+  "dialog.project.edit.worktree.startup.placeholder": "例: bun install",
   "context.breakdown.title": "コンテキストの内訳",
   "context.breakdown.note": '入力トークンのおおよその内訳です。"その他"にはツールの定義やオーバーヘッドが含まれます。',
   "context.breakdown.system": "システム",
@@ -316,6 +347,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "ファイルの読み込みに失敗しました",
 
+  "toast.file.listFailed.title": "ファイル一覧の取得に失敗しました",
+  "toast.context.noLineSelection.title": "行が選択されていません",
+  "toast.context.noLineSelection.description": "まずファイルタブで行範囲を選択してください。",
   "toast.session.share.copyFailed.title": "URLのコピーに失敗しました",
   "toast.session.share.success.title": "セッションを共有しました",
   "toast.session.share.success.description": "共有URLをクリップボードにコピーしました!",
@@ -390,13 +424,19 @@ export const dict = {
   "session.tab.context": "コンテキスト",
   "session.panel.reviewAndFiles": "レビューとファイル",
   "session.review.filesChanged": "{{count}} ファイル変更",
+  "session.review.change.one": "変更",
+  "session.review.change.other": "変更",
   "session.review.loadingChanges": "変更を読み込み中...",
   "session.review.empty": "このセッションでの変更はまだありません",
+  "session.review.noChanges": "変更なし",
+  "session.files.selectToOpen": "開くファイルを選択",
+  "session.files.all": "すべてのファイル",
   "session.messages.renderEarlier": "以前のメッセージを表示",
   "session.messages.loadingEarlier": "以前のメッセージを読み込み中...",
   "session.messages.loadEarlier": "以前のメッセージを読み込む",
   "session.messages.loading": "メッセージを読み込み中...",
 
+  "session.messages.jumpToLatest": "最新へジャンプ",
   "session.context.addToContext": "{{selection}}をコンテキストに追加",
 
   "session.new.worktree.main": "メインブランチ",
@@ -438,6 +478,8 @@ export const dict = {
   "terminal.title.numbered": "ターミナル {{number}}",
   "terminal.close": "ターミナルを閉じる",
 
+  "terminal.connectionLost.title": "接続が失われました",
+  "terminal.connectionLost.description": "ターミナルの接続が中断されました。これはサーバーが再起動したときに発生することがあります。",
   "common.closeTab": "タブを閉じる",
   "common.dismiss": "閉じる",
   "common.requestFailed": "リクエスト失敗",
@@ -451,6 +493,8 @@ export const dict = {
   "common.edit": "編集",
   "common.loadMore": "さらに読み込む",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "メニューを切り替え",
   "sidebar.nav.projectsAndSessions": "プロジェクトとセッション",
   "sidebar.settings": "設定",
   "sidebar.help": "ヘルプ",
@@ -462,7 +506,9 @@ export const dict = {
   "sidebar.project.recentSessions": "最近のセッション",
   "sidebar.project.viewAllSessions": "すべてのセッションを表示",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "デスクトップ",
+  "settings.section.server": "サーバー",
   "settings.tab.general": "一般",
   "settings.tab.shortcuts": "ショートカット",
 
@@ -479,6 +525,63 @@ export const dict = {
   "settings.general.row.font.title": "フォント",
   "settings.general.row.font.description": "コードブロックで使用する等幅フォントをカスタマイズします",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "アラート 01",
+  "sound.option.alert02": "アラート 02",
+  "sound.option.alert03": "アラート 03",
+  "sound.option.alert04": "アラート 04",
+  "sound.option.alert05": "アラート 05",
+  "sound.option.alert06": "アラート 06",
+  "sound.option.alert07": "アラート 07",
+  "sound.option.alert08": "アラート 08",
+  "sound.option.alert09": "アラート 09",
+  "sound.option.alert10": "アラート 10",
+  "sound.option.bipbop01": "ビップボップ 01",
+  "sound.option.bipbop02": "ビップボップ 02",
+  "sound.option.bipbop03": "ビップボップ 03",
+  "sound.option.bipbop04": "ビップボップ 04",
+  "sound.option.bipbop05": "ビップボップ 05",
+  "sound.option.bipbop06": "ビップボップ 06",
+  "sound.option.bipbop07": "ビップボップ 07",
+  "sound.option.bipbop08": "ビップボップ 08",
+  "sound.option.bipbop09": "ビップボップ 09",
+  "sound.option.bipbop10": "ビップボップ 10",
+  "sound.option.staplebops01": "ステープルボップス 01",
+  "sound.option.staplebops02": "ステープルボップス 02",
+  "sound.option.staplebops03": "ステープルボップス 03",
+  "sound.option.staplebops04": "ステープルボップス 04",
+  "sound.option.staplebops05": "ステープルボップス 05",
+  "sound.option.staplebops06": "ステープルボップス 06",
+  "sound.option.staplebops07": "ステープルボップス 07",
+  "sound.option.nope01": "いいえ 01",
+  "sound.option.nope02": "いいえ 02",
+  "sound.option.nope03": "いいえ 03",
+  "sound.option.nope04": "いいえ 04",
+  "sound.option.nope05": "いいえ 05",
+  "sound.option.nope06": "いいえ 06",
+  "sound.option.nope07": "いいえ 07",
+  "sound.option.nope08": "いいえ 08",
+  "sound.option.nope09": "いいえ 09",
+  "sound.option.nope10": "いいえ 10",
+  "sound.option.nope11": "いいえ 11",
+  "sound.option.nope12": "いいえ 12",
+  "sound.option.yup01": "はい 01",
+  "sound.option.yup02": "はい 02",
+  "sound.option.yup03": "はい 03",
+  "sound.option.yup04": "はい 04",
+  "sound.option.yup05": "はい 05",
+  "sound.option.yup06": "はい 06",
   "settings.general.notifications.agent.title": "エージェント",
   "settings.general.notifications.agent.description":
     "エージェントが完了したか、注意が必要な場合にシステム通知を表示します",
@@ -514,6 +617,13 @@ export const dict = {
 
   "settings.providers.title": "プロバイダー",
   "settings.providers.description": "プロバイダー設定はここで構成できます。",
+  "settings.providers.section.connected": "接続済みプロバイダー",
+  "settings.providers.connected.empty": "接続済みプロバイダーはありません",
+  "settings.providers.section.popular": "人気のプロバイダー",
+  "settings.providers.tag.environment": "環境",
+  "settings.providers.tag.config": "設定",
+  "settings.providers.tag.custom": "カスタム",
+  "settings.providers.tag.other": "その他",
   "settings.models.title": "モデル",
   "settings.models.description": "モデル設定はここで構成できます。",
   "settings.agents.title": "エージェント",
@@ -580,6 +690,7 @@ export const dict = {
   "workspace.reset.failed.title": "ワークスペースのリセットに失敗しました",
   "workspace.reset.success.title": "ワークスペースをリセットしました",
   "workspace.reset.success.description": "ワークスペースはデフォルトブランチと一致しています。",
+  "workspace.error.stillPreparing": "ワークスペースはまだ準備中です",
   "workspace.status.checking": "未マージの変更を確認中...",
   "workspace.status.error": "gitステータスを確認できません。",
   "workspace.status.clean": "未マージの変更は検出されませんでした。",

+ 111 - 0
packages/app/src/i18n/ko.ts

@@ -12,6 +12,7 @@ export const dict = {
   "command.category.theme": "테마",
   "command.category.language": "언어",
   "command.category.file": "파일",
+  "command.category.context": "컨텍스트",
   "command.category.terminal": "터미널",
   "command.category.model": "모델",
   "command.category.mcp": "MCP",
@@ -19,6 +20,7 @@ export const dict = {
   "command.category.permissions": "권한",
   "command.category.workspace": "작업 공간",
 
+  "command.category.settings": "설정",
   "theme.scheme.system": "시스템",
   "theme.scheme.light": "라이트",
   "theme.scheme.dark": "다크",
@@ -27,6 +29,7 @@ export const dict = {
   "command.project.open": "프로젝트 열기",
   "command.provider.connect": "공급자 연결",
   "command.server.switch": "서버 전환",
+  "command.settings.open": "설정 열기",
   "command.session.previous": "이전 세션",
   "command.session.next": "다음 세션",
   "command.session.archive": "세션 보관",
@@ -44,7 +47,10 @@ export const dict = {
   "command.session.new": "새 세션",
   "command.file.open": "파일 열기",
   "command.file.open.description": "파일 및 명령어 검색",
+  "command.context.addSelection": "선택 영역을 컨텍스트에 추가",
+  "command.context.addSelection.description": "현재 파일에서 선택한 줄을 추가",
   "command.terminal.toggle": "터미널 토글",
+  "command.fileTree.toggle": "파일 트리 토글",
   "command.review.toggle": "검토 토글",
   "command.terminal.new": "새 터미널",
   "command.terminal.new.description": "새 터미널 탭 생성",
@@ -120,6 +126,7 @@ export const dict = {
     "OpenCode Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.",
   "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.",
   "provider.connect.opencodeZen.visit.prefix": "",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": "를 방문하여 API 키를 받으세요.",
   "provider.connect.oauth.code.visit.prefix": "",
   "provider.connect.oauth.code.visit.link": "이 링크",
@@ -137,13 +144,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} 연결됨",
   "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} 연결 해제됨",
+  "provider.disconnect.toast.disconnected.description": "{{provider}} 모델을 더 이상 사용할 수 없습니다.",
   "model.tag.free": "무료",
   "model.tag.latest": "최신",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "텍스트",
+  "model.input.image": "이미지",
+  "model.input.audio": "오디오",
+  "model.input.video": "비디오",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "지원: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "추론 허용",
+  "model.tooltip.reasoning.none": "추론 없음",
+  "model.tooltip.context": "컨텍스트 제한 {{limit}}",
   "common.search.placeholder": "검색",
   "common.goBack": "뒤로 가기",
   "common.loading": "로딩 중",
+  "common.loading.ellipsis": "...",
   "common.cancel": "취소",
+  "common.connect": "연결",
+  "common.disconnect": "연결 해제",
   "common.submit": "제출",
   "common.save": "저장",
   "common.saving": "저장 중...",
@@ -152,6 +178,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "셸 명령어 입력...",
   "prompt.placeholder.normal": '무엇이든 물어보세요... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "댓글 요약…",
+  "prompt.placeholder.summarizeComment": "댓글 요약…",
   "prompt.mode.shell": "셸",
   "prompt.mode.shell.exit": "종료하려면 esc",
 
@@ -255,6 +283,9 @@ export const dict = {
   "dialog.project.edit.color": "색상",
   "dialog.project.edit.color.select": "{{color}} 색상 선택",
 
+  "dialog.project.edit.worktree.startup": "작업 공간 시작 스크립트",
+  "dialog.project.edit.worktree.startup.description": "새 작업 공간(작업 트리)을 만든 뒤 실행됩니다.",
+  "dialog.project.edit.worktree.startup.placeholder": "예: bun install",
   "context.breakdown.title": "컨텍스트 분석",
   "context.breakdown.note": '입력 토큰의 대략적인 분석입니다. "기타"에는 도구 정의 및 오버헤드가 포함됩니다.',
   "context.breakdown.system": "시스템",
@@ -320,6 +351,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "파일 로드 실패",
 
+  "toast.file.listFailed.title": "파일 목록을 불러오지 못했습니다",
+  "toast.context.noLineSelection.title": "줄 선택 없음",
+  "toast.context.noLineSelection.description": "먼저 파일 탭에서 줄 범위를 선택하세요.",
   "toast.session.share.copyFailed.title": "URL 클립보드 복사 실패",
   "toast.session.share.success.title": "세션 공유됨",
   "toast.session.share.success.description": "공유 URL이 클립보드에 복사되었습니다!",
@@ -393,13 +427,19 @@ export const dict = {
   "session.tab.context": "컨텍스트",
   "session.panel.reviewAndFiles": "검토 및 파일",
   "session.review.filesChanged": "{{count}}개 파일 변경됨",
+  "session.review.change.one": "변경",
+  "session.review.change.other": "변경",
   "session.review.loadingChanges": "변경 사항 로드 중...",
   "session.review.empty": "이 세션에 변경 사항이 아직 없습니다",
+  "session.review.noChanges": "변경 없음",
+  "session.files.selectToOpen": "열 파일을 선택하세요",
+  "session.files.all": "모든 파일",
   "session.messages.renderEarlier": "이전 메시지 렌더링",
   "session.messages.loadingEarlier": "이전 메시지 로드 중...",
   "session.messages.loadEarlier": "이전 메시지 로드",
   "session.messages.loading": "메시지 로드 중...",
 
+  "session.messages.jumpToLatest": "최신으로 이동",
   "session.context.addToContext": "컨텍스트에 {{selection}} 추가",
 
   "session.new.worktree.main": "메인 브랜치",
@@ -440,6 +480,8 @@ export const dict = {
   "terminal.title.numbered": "터미널 {{number}}",
   "terminal.close": "터미널 닫기",
 
+  "terminal.connectionLost.title": "연결 끊김",
+  "terminal.connectionLost.description": "터미널 연결이 중단되었습니다. 서버가 재시작하면 이런 일이 발생할 수 있습니다.",
   "common.closeTab": "탭 닫기",
   "common.dismiss": "닫기",
   "common.requestFailed": "요청 실패",
@@ -453,6 +495,8 @@ export const dict = {
   "common.edit": "편집",
   "common.loadMore": "더 불러오기",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "메뉴 토글",
   "sidebar.nav.projectsAndSessions": "프로젝트 및 세션",
   "sidebar.settings": "설정",
   "sidebar.help": "도움말",
@@ -464,7 +508,9 @@ export const dict = {
   "sidebar.project.recentSessions": "최근 세션",
   "sidebar.project.viewAllSessions": "모든 세션 보기",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "데스크톱",
+  "settings.section.server": "서버",
   "settings.tab.general": "일반",
   "settings.tab.shortcuts": "단축키",
 
@@ -481,6 +527,63 @@ export const dict = {
   "settings.general.row.font.title": "글꼴",
   "settings.general.row.font.description": "코드 블록에 사용되는 고정폭 글꼴 사용자 지정",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "알림 01",
+  "sound.option.alert02": "알림 02",
+  "sound.option.alert03": "알림 03",
+  "sound.option.alert04": "알림 04",
+  "sound.option.alert05": "알림 05",
+  "sound.option.alert06": "알림 06",
+  "sound.option.alert07": "알림 07",
+  "sound.option.alert08": "알림 08",
+  "sound.option.alert09": "알림 09",
+  "sound.option.alert10": "알림 10",
+  "sound.option.bipbop01": "빕-밥 01",
+  "sound.option.bipbop02": "빕-밥 02",
+  "sound.option.bipbop03": "빕-밥 03",
+  "sound.option.bipbop04": "빕-밥 04",
+  "sound.option.bipbop05": "빕-밥 05",
+  "sound.option.bipbop06": "빕-밥 06",
+  "sound.option.bipbop07": "빕-밥 07",
+  "sound.option.bipbop08": "빕-밥 08",
+  "sound.option.bipbop09": "빕-밥 09",
+  "sound.option.bipbop10": "빕-밥 10",
+  "sound.option.staplebops01": "스테이플밥스 01",
+  "sound.option.staplebops02": "스테이플밥스 02",
+  "sound.option.staplebops03": "스테이플밥스 03",
+  "sound.option.staplebops04": "스테이플밥스 04",
+  "sound.option.staplebops05": "스테이플밥스 05",
+  "sound.option.staplebops06": "스테이플밥스 06",
+  "sound.option.staplebops07": "스테이플밥스 07",
+  "sound.option.nope01": "아니오 01",
+  "sound.option.nope02": "아니오 02",
+  "sound.option.nope03": "아니오 03",
+  "sound.option.nope04": "아니오 04",
+  "sound.option.nope05": "아니오 05",
+  "sound.option.nope06": "아니오 06",
+  "sound.option.nope07": "아니오 07",
+  "sound.option.nope08": "아니오 08",
+  "sound.option.nope09": "아니오 09",
+  "sound.option.nope10": "아니오 10",
+  "sound.option.nope11": "아니오 11",
+  "sound.option.nope12": "아니오 12",
+  "sound.option.yup01": "네 01",
+  "sound.option.yup02": "네 02",
+  "sound.option.yup03": "네 03",
+  "sound.option.yup04": "네 04",
+  "sound.option.yup05": "네 05",
+  "sound.option.yup06": "네 06",
   "settings.general.notifications.agent.title": "에이전트",
   "settings.general.notifications.agent.description": "에이전트가 완료되거나 주의가 필요할 때 시스템 알림 표시",
   "settings.general.notifications.permissions.title": "권한",
@@ -515,6 +618,13 @@ export const dict = {
 
   "settings.providers.title": "공급자",
   "settings.providers.description": "공급자 설정은 여기서 구성할 수 있습니다.",
+  "settings.providers.section.connected": "연결된 공급자",
+  "settings.providers.connected.empty": "연결된 공급자 없음",
+  "settings.providers.section.popular": "인기 공급자",
+  "settings.providers.tag.environment": "환경",
+  "settings.providers.tag.config": "구성",
+  "settings.providers.tag.custom": "사용자 지정",
+  "settings.providers.tag.other": "기타",
   "settings.models.title": "모델",
   "settings.models.description": "모델 설정은 여기서 구성할 수 있습니다.",
   "settings.agents.title": "에이전트",
@@ -581,6 +691,7 @@ export const dict = {
   "workspace.reset.failed.title": "작업 공간 재설정 실패",
   "workspace.reset.success.title": "작업 공간 재설정됨",
   "workspace.reset.success.description": "작업 공간이 이제 기본 브랜치와 일치합니다.",
+  "workspace.error.stillPreparing": "작업 공간이 아직 준비 중입니다",
   "workspace.status.checking": "병합되지 않은 변경 사항 확인 중...",
   "workspace.status.error": "Git 상태를 확인할 수 없습니다.",
   "workspace.status.clean": "병합되지 않은 변경 사항이 감지되지 않았습니다.",

+ 93 - 0
packages/app/src/i18n/no.ts

@@ -11,6 +11,7 @@ export const dict = {
   "command.category.theme": "Tema",
   "command.category.language": "Språk",
   "command.category.file": "Fil",
+  "command.category.context": "Kontekst",
   "command.category.terminal": "Terminal",
   "command.category.model": "Modell",
   "command.category.mcp": "MCP",
@@ -45,7 +46,10 @@ export const dict = {
   "command.session.new": "Ny sesjon",
   "command.file.open": "Åpne fil",
   "command.file.open.description": "Søk i filer og kommandoer",
+  "command.context.addSelection": "Legg til markering i kontekst",
+  "command.context.addSelection.description": "Legg til valgte linjer fra gjeldende fil",
   "command.terminal.toggle": "Veksle terminal",
+  "command.fileTree.toggle": "Veksle filtre",
   "command.review.toggle": "Veksle gjennomgang",
   "command.terminal.new": "Ny terminal",
   "command.terminal.new.description": "Opprett en ny terminalfane",
@@ -140,6 +144,8 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} tilkoblet",
   "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet",
+  "provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke lenger tilgjengelige.",
   "model.tag.free": "Gratis",
   "model.tag.latest": "Nyeste",
   "model.provider.anthropic": "Anthropic",
@@ -162,6 +168,8 @@ export const dict = {
   "common.loading": "Laster",
   "common.loading.ellipsis": "...",
   "common.cancel": "Avbryt",
+  "common.connect": "Koble til",
+  "common.disconnect": "Koble fra",
   "common.submit": "Send inn",
   "common.save": "Lagre",
   "common.saving": "Lagrer...",
@@ -170,6 +178,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Skriv inn shell-kommando...",
   "prompt.placeholder.normal": 'Spør om hva som helst... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Oppsummer kommentarer…",
+  "prompt.placeholder.summarizeComment": "Oppsummer kommentar…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "ESC for å avslutte",
 
@@ -273,6 +283,9 @@ export const dict = {
   "dialog.project.edit.color": "Farge",
   "dialog.project.edit.color.select": "Velg fargen {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Oppstartsskript for arbeidsområde",
+  "dialog.project.edit.worktree.startup.description": "Kjører etter at et nytt arbeidsområde (worktree) er opprettet.",
+  "dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install",
   "context.breakdown.title": "Kontekstfordeling",
   "context.breakdown.note": 'Omtrentlig fordeling av input-tokens. "Annet" inkluderer verktøydefinisjoner og overhead.',
   "context.breakdown.system": "System",
@@ -338,6 +351,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Kunne ikke laste fil",
 
+  "toast.file.listFailed.title": "Kunne ikke liste filer",
+  "toast.context.noLineSelection.title": "Ingen linjevalg",
+  "toast.context.noLineSelection.description": "Velg først et linjeområde i en filfane.",
   "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til utklippstavlen",
   "toast.session.share.success.title": "Sesjon delt",
   "toast.session.share.success.description": "Delings-URL kopiert til utklippstavlen!",
@@ -412,8 +428,13 @@ export const dict = {
   "session.tab.context": "Kontekst",
   "session.panel.reviewAndFiles": "Gjennomgang og filer",
   "session.review.filesChanged": "{{count}} filer endret",
+  "session.review.change.one": "Endring",
+  "session.review.change.other": "Endringer",
   "session.review.loadingChanges": "Laster endringer...",
   "session.review.empty": "Ingen endringer i denne sesjonen ennå",
+  "session.review.noChanges": "Ingen endringer",
+  "session.files.selectToOpen": "Velg en fil å åpne",
+  "session.files.all": "Alle filer",
   "session.messages.renderEarlier": "Vis tidligere meldinger",
   "session.messages.loadingEarlier": "Laster inn tidligere meldinger...",
   "session.messages.loadEarlier": "Last inn tidligere meldinger",
@@ -471,6 +492,7 @@ export const dict = {
   "common.learnMore": "Lær mer",
   "common.rename": "Gi nytt navn",
   "common.reset": "Tilbakestill",
+  "common.archive": "Arkiver",
   "common.delete": "Slett",
   "common.close": "Lukk",
   "common.edit": "Rediger",
@@ -489,7 +511,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Nylige sesjoner",
   "sidebar.project.viewAllSessions": "Vis alle sesjoner",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Skrivebord",
+  "settings.section.server": "Server",
   "settings.tab.general": "Generelt",
   "settings.tab.shortcuts": "Snarveier",
 
@@ -506,6 +530,63 @@ export const dict = {
   "settings.general.row.font.title": "Skrift",
   "settings.general.row.font.description": "Tilpass mono-skriften som brukes i kodeblokker",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "Varsel 01",
+  "sound.option.alert02": "Varsel 02",
+  "sound.option.alert03": "Varsel 03",
+  "sound.option.alert04": "Varsel 04",
+  "sound.option.alert05": "Varsel 05",
+  "sound.option.alert06": "Varsel 06",
+  "sound.option.alert07": "Varsel 07",
+  "sound.option.alert08": "Varsel 08",
+  "sound.option.alert09": "Varsel 09",
+  "sound.option.alert10": "Varsel 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "Nei 01",
+  "sound.option.nope02": "Nei 02",
+  "sound.option.nope03": "Nei 03",
+  "sound.option.nope04": "Nei 04",
+  "sound.option.nope05": "Nei 05",
+  "sound.option.nope06": "Nei 06",
+  "sound.option.nope07": "Nei 07",
+  "sound.option.nope08": "Nei 08",
+  "sound.option.nope09": "Nei 09",
+  "sound.option.nope10": "Nei 10",
+  "sound.option.nope11": "Nei 11",
+  "sound.option.nope12": "Nei 12",
+  "sound.option.yup01": "Ja 01",
+  "sound.option.yup02": "Ja 02",
+  "sound.option.yup03": "Ja 03",
+  "sound.option.yup04": "Ja 04",
+  "sound.option.yup05": "Ja 05",
+  "sound.option.yup06": "Ja 06",
   "settings.general.notifications.agent.title": "Agent",
   "settings.general.notifications.agent.description":
     "Vis systemvarsel når agenten er ferdig eller trenger oppmerksomhet",
@@ -541,6 +622,13 @@ export const dict = {
 
   "settings.providers.title": "Leverandører",
   "settings.providers.description": "Leverandørinnstillinger vil kunne konfigureres her.",
+  "settings.providers.section.connected": "Tilkoblede leverandører",
+  "settings.providers.connected.empty": "Ingen tilkoblede leverandører",
+  "settings.providers.section.popular": "Populære leverandører",
+  "settings.providers.tag.environment": "Miljø",
+  "settings.providers.tag.config": "Konfigurasjon",
+  "settings.providers.tag.custom": "Tilpasset",
+  "settings.providers.tag.other": "Annet",
   "settings.models.title": "Modeller",
   "settings.models.description": "Modellinnstillinger vil kunne konfigureres her.",
   "settings.agents.title": "Agenter",
@@ -593,6 +681,10 @@ export const dict = {
   "settings.permissions.tool.doom_loop.title": "Doom Loop",
   "settings.permissions.tool.doom_loop.description": "Oppdager gjentatte verktøykall med identisk input",
 
+  "session.delete.failed.title": "Kunne ikke slette sesjon",
+  "session.delete.title": "Slett sesjon",
+  "session.delete.confirm": "Slette sesjonen \"{{name}}\"?",
+  "session.delete.button": "Slett sesjon",
   "workspace.new": "Nytt arbeidsområde",
   "workspace.type.local": "lokal",
   "workspace.type.sandbox": "sandkasse",
@@ -603,6 +695,7 @@ export const dict = {
   "workspace.reset.failed.title": "Kunne ikke tilbakestille arbeidsområde",
   "workspace.reset.success.title": "Arbeidsområde tilbakestilt",
   "workspace.reset.success.description": "Arbeidsområdet samsvarer nå med standardgrenen.",
+  "workspace.error.stillPreparing": "Arbeidsområdet klargjøres fortsatt",
   "workspace.status.checking": "Sjekker for ikke-sammenslåtte endringer...",
   "workspace.status.error": "Kunne ikke bekrefte git-status.",
   "workspace.status.clean": "Ingen ikke-sammenslåtte endringer oppdaget.",

+ 32 - 0
packages/app/src/i18n/pl.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Motyw",
   "command.category.language": "Język",
   "command.category.file": "Plik",
+  "command.category.context": "Kontekst",
   "command.category.terminal": "Terminal",
   "command.category.model": "Model",
   "command.category.mcp": "MCP",
@@ -42,7 +43,10 @@ export const dict = {
   "command.session.new": "Nowa sesja",
   "command.file.open": "Otwórz plik",
   "command.file.open.description": "Szukaj plików i poleceń",
+  "command.context.addSelection": "Dodaj zaznaczenie do kontekstu",
+  "command.context.addSelection.description": "Dodaj zaznaczone linie z bieżącego pliku",
   "command.terminal.toggle": "Przełącz terminal",
+  "command.fileTree.toggle": "Przełącz drzewo plików",
   "command.review.toggle": "Przełącz przegląd",
   "command.terminal.new": "Nowy terminal",
   "command.terminal.new.description": "Utwórz nową kartę terminala",
@@ -137,6 +141,8 @@ export const dict = {
   "provider.connect.toast.connected.title": "Połączono {{provider}}",
   "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.",
 
+  "provider.disconnect.toast.disconnected.title": "Rozłączono {{provider}}",
+  "provider.disconnect.toast.disconnected.description": "Modele {{provider}} nie są już dostępne.",
   "model.tag.free": "Darmowy",
   "model.tag.latest": "Najnowszy",
   "model.provider.anthropic": "Anthropic",
@@ -159,6 +165,8 @@ export const dict = {
   "common.loading": "Ładowanie",
   "common.loading.ellipsis": "...",
   "common.cancel": "Anuluj",
+  "common.connect": "Połącz",
+  "common.disconnect": "Rozłącz",
   "common.submit": "Prześlij",
   "common.save": "Zapisz",
   "common.saving": "Zapisywanie...",
@@ -167,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Wpisz polecenie terminala...",
   "prompt.placeholder.normal": 'Zapytaj o cokolwiek... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Podsumuj komentarze…",
+  "prompt.placeholder.summarizeComment": "Podsumuj komentarz…",
   "prompt.mode.shell": "Terminal",
   "prompt.mode.shell.exit": "esc aby wyjść",
 
@@ -270,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "Kolor",
   "dialog.project.edit.color.select": "Wybierz kolor {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Skrypt uruchamiania przestrzeni roboczej",
+  "dialog.project.edit.worktree.startup.description": "Uruchamiany po utworzeniu nowej przestrzeni roboczej (drzewa roboczego).",
+  "dialog.project.edit.worktree.startup.placeholder": "np. bun install",
   "context.breakdown.title": "Podział kontekstu",
   "context.breakdown.note": 'Przybliżony podział tokenów wejściowych. "Inne" obejmuje definicje narzędzi i narzut.',
   "context.breakdown.system": "System",
@@ -335,6 +348,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Nie udało się załadować pliku",
 
+  "toast.file.listFailed.title": "Nie udało się wyświetlić listy plików",
+  "toast.context.noLineSelection.title": "Brak zaznaczenia linii",
+  "toast.context.noLineSelection.description": "Najpierw wybierz zakres linii w zakładce pliku.",
   "toast.session.share.copyFailed.title": "Nie udało się skopiować URL do schowka",
   "toast.session.share.success.title": "Sesja udostępniona",
   "toast.session.share.success.description": "Link udostępniania skopiowany do schowka!",
@@ -410,8 +426,13 @@ export const dict = {
   "session.tab.context": "Kontekst",
   "session.panel.reviewAndFiles": "Przegląd i pliki",
   "session.review.filesChanged": "Zmieniono {{count}} plików",
+  "session.review.change.one": "Zmiana",
+  "session.review.change.other": "Zmiany",
   "session.review.loadingChanges": "Ładowanie zmian...",
   "session.review.empty": "Brak zmian w tej sesji",
+  "session.review.noChanges": "Brak zmian",
+  "session.files.selectToOpen": "Wybierz plik do otwarcia",
+  "session.files.all": "Wszystkie pliki",
   "session.messages.renderEarlier": "Renderuj wcześniejsze wiadomości",
   "session.messages.loadingEarlier": "Ładowanie wcześniejszych wiadomości...",
   "session.messages.loadEarlier": "Załaduj wcześniejsze wiadomości",
@@ -488,7 +509,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Ostatnie sesje",
   "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Pulpit",
+  "settings.section.server": "Serwer",
   "settings.tab.general": "Ogólne",
   "settings.tab.shortcuts": "Skróty",
 
@@ -510,6 +533,7 @@ export const dict = {
   "font.option.hack": "Hack",
   "font.option.inconsolata": "Inconsolata",
   "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
   "font.option.jetbrainsMono": "JetBrains Mono",
   "font.option.mesloLgs": "Meslo LGS",
   "font.option.robotoMono": "Roboto Mono",
@@ -597,6 +621,13 @@ export const dict = {
 
   "settings.providers.title": "Dostawcy",
   "settings.providers.description": "Ustawienia dostawców będą tutaj konfigurowalne.",
+  "settings.providers.section.connected": "Połączeni dostawcy",
+  "settings.providers.connected.empty": "Brak połączonych dostawców",
+  "settings.providers.section.popular": "Popularni dostawcy",
+  "settings.providers.tag.environment": "Środowisko",
+  "settings.providers.tag.config": "Konfiguracja",
+  "settings.providers.tag.custom": "Niestandardowe",
+  "settings.providers.tag.other": "Inne",
   "settings.models.title": "Modele",
   "settings.models.description": "Ustawienia modeli będą tutaj konfigurowalne.",
   "settings.agents.title": "Agenci",
@@ -663,6 +694,7 @@ export const dict = {
   "workspace.reset.failed.title": "Nie udało się zresetować przestrzeni roboczej",
   "workspace.reset.success.title": "Przestrzeń robocza zresetowana",
   "workspace.reset.success.description": "Przestrzeń robocza odpowiada teraz domyślnej gałęzi.",
+  "workspace.error.stillPreparing": "Przestrzeń robocza jest wciąż przygotowywana",
   "workspace.status.checking": "Sprawdzanie niezscalonych zmian...",
   "workspace.status.error": "Nie można zweryfikować statusu git.",
   "workspace.status.clean": "Nie wykryto niezscalonych zmian.",

+ 32 - 0
packages/app/src/i18n/ru.ts

@@ -8,6 +8,7 @@ export const dict = {
   "command.category.theme": "Тема",
   "command.category.language": "Язык",
   "command.category.file": "Файл",
+  "command.category.context": "Контекст",
   "command.category.terminal": "Терминал",
   "command.category.model": "Модель",
   "command.category.mcp": "MCP",
@@ -42,7 +43,10 @@ export const dict = {
   "command.session.new": "Новая сессия",
   "command.file.open": "Открыть файл",
   "command.file.open.description": "Поиск файлов и команд",
+  "command.context.addSelection": "Добавить выделение в контекст",
+  "command.context.addSelection.description": "Добавить выбранные строки из текущего файла",
   "command.terminal.toggle": "Переключить терминал",
+  "command.fileTree.toggle": "Переключить дерево файлов",
   "command.review.toggle": "Переключить обзор",
   "command.terminal.new": "Новый терминал",
   "command.terminal.new.description": "Создать новую вкладку терминала",
@@ -137,6 +141,8 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} подключён",
   "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} отключён",
+  "provider.disconnect.toast.disconnected.description": "Модели {{provider}} больше недоступны.",
   "model.tag.free": "Бесплатно",
   "model.tag.latest": "Последняя",
   "model.provider.anthropic": "Anthropic",
@@ -159,6 +165,8 @@ export const dict = {
   "common.loading": "Загрузка",
   "common.loading.ellipsis": "...",
   "common.cancel": "Отмена",
+  "common.connect": "Подключить",
+  "common.disconnect": "Отключить",
   "common.submit": "Отправить",
   "common.save": "Сохранить",
   "common.saving": "Сохранение...",
@@ -167,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "Введите команду оболочки...",
   "prompt.placeholder.normal": 'Спросите что угодно... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "Суммировать комментарии…",
+  "prompt.placeholder.summarizeComment": "Суммировать комментарий…",
   "prompt.mode.shell": "Оболочка",
   "prompt.mode.shell.exit": "esc для выхода",
 
@@ -270,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "Цвет",
   "dialog.project.edit.color.select": "Выбрать цвет {{color}}",
 
+  "dialog.project.edit.worktree.startup": "Скрипт запуска рабочего пространства",
+  "dialog.project.edit.worktree.startup.description": "Запускается после создания нового рабочего пространства (worktree).",
+  "dialog.project.edit.worktree.startup.placeholder": "например, bun install",
   "context.breakdown.title": "Разбивка контекста",
   "context.breakdown.note":
     'Приблизительная разбивка входных токенов. "Другое" включает определения инструментов и накладные расходы.',
@@ -336,6 +349,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "Не удалось загрузить файл",
 
+  "toast.file.listFailed.title": "Не удалось получить список файлов",
+  "toast.context.noLineSelection.title": "Нет выделения строк",
+  "toast.context.noLineSelection.description": "Сначала выберите диапазон строк во вкладке файла.",
   "toast.session.share.copyFailed.title": "Не удалось скопировать URL в буфер обмена",
   "toast.session.share.success.title": "Сессия опубликована",
   "toast.session.share.success.description": "URL скопирован в буфер обмена!",
@@ -412,8 +428,13 @@ export const dict = {
   "session.tab.context": "Контекст",
   "session.panel.reviewAndFiles": "Обзор и файлы",
   "session.review.filesChanged": "{{count}} файлов изменено",
+  "session.review.change.one": "Изменение",
+  "session.review.change.other": "Изменения",
   "session.review.loadingChanges": "Загрузка изменений...",
   "session.review.empty": "Изменений в этой сессии пока нет",
+  "session.review.noChanges": "Нет изменений",
+  "session.files.selectToOpen": "Выберите файл, чтобы открыть",
+  "session.files.all": "Все файлы",
   "session.messages.renderEarlier": "Показать предыдущие сообщения",
   "session.messages.loadingEarlier": "Загрузка предыдущих сообщений...",
   "session.messages.loadEarlier": "Загрузить предыдущие сообщения",
@@ -491,7 +512,9 @@ export const dict = {
   "sidebar.project.recentSessions": "Недавние сессии",
   "sidebar.project.viewAllSessions": "Посмотреть все сессии",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "Приложение",
+  "settings.section.server": "Сервер",
   "settings.tab.general": "Основные",
   "settings.tab.shortcuts": "Горячие клавиши",
 
@@ -513,6 +536,7 @@ export const dict = {
   "font.option.hack": "Hack",
   "font.option.inconsolata": "Inconsolata",
   "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
   "font.option.jetbrainsMono": "JetBrains Mono",
   "font.option.mesloLgs": "Meslo LGS",
   "font.option.robotoMono": "Roboto Mono",
@@ -600,6 +624,13 @@ export const dict = {
 
   "settings.providers.title": "Провайдеры",
   "settings.providers.description": "Настройки провайдеров будут доступны здесь.",
+  "settings.providers.section.connected": "Подключённые провайдеры",
+  "settings.providers.connected.empty": "Нет подключённых провайдеров",
+  "settings.providers.section.popular": "Популярные провайдеры",
+  "settings.providers.tag.environment": "Среда",
+  "settings.providers.tag.config": "Конфигурация",
+  "settings.providers.tag.custom": "Пользовательский",
+  "settings.providers.tag.other": "Другое",
   "settings.models.title": "Модели",
   "settings.models.description": "Настройки моделей будут доступны здесь.",
   "settings.agents.title": "Агенты",
@@ -667,6 +698,7 @@ export const dict = {
   "workspace.reset.failed.title": "Не удалось сбросить рабочее пространство",
   "workspace.reset.success.title": "Рабочее пространство сброшено",
   "workspace.reset.success.description": "Рабочее пространство теперь соответствует ветке по умолчанию.",
+  "workspace.error.stillPreparing": "Рабочее пространство всё ещё готовится",
   "workspace.status.checking": "Проверка наличия неслитых изменений...",
   "workspace.status.error": "Не удалось проверить статус git.",
   "workspace.status.clean": "Неслитые изменения не обнаружены.",

+ 111 - 0
packages/app/src/i18n/zh.ts

@@ -12,6 +12,7 @@ export const dict = {
   "command.category.theme": "主题",
   "command.category.language": "语言",
   "command.category.file": "文件",
+  "command.category.context": "上下文",
   "command.category.terminal": "终端",
   "command.category.model": "模型",
   "command.category.mcp": "MCP",
@@ -19,6 +20,7 @@ export const dict = {
   "command.category.permissions": "权限",
   "command.category.workspace": "工作区",
 
+  "command.category.settings": "设置",
   "theme.scheme.system": "系统",
   "theme.scheme.light": "浅色",
   "theme.scheme.dark": "深色",
@@ -27,6 +29,7 @@ export const dict = {
   "command.project.open": "打开项目",
   "command.provider.connect": "连接提供商",
   "command.server.switch": "切换服务器",
+  "command.settings.open": "打开设置",
   "command.session.previous": "上一个会话",
   "command.session.next": "下一个会话",
   "command.session.archive": "归档会话",
@@ -44,7 +47,10 @@ export const dict = {
   "command.session.new": "新建会话",
   "command.file.open": "打开文件",
   "command.file.open.description": "搜索文件和命令",
+  "command.context.addSelection": "将所选内容添加到上下文",
+  "command.context.addSelection.description": "添加当前文件中选中的行",
   "command.terminal.toggle": "切换终端",
+  "command.fileTree.toggle": "切换文件树",
   "command.review.toggle": "切换审查",
   "command.terminal.new": "新建终端",
   "command.terminal.new.description": "创建新的终端标签页",
@@ -119,6 +125,7 @@ export const dict = {
   "provider.connect.opencodeZen.line1": "OpenCode Zen 为你提供一组精选的可靠优化模型,用于代码智能体。",
   "provider.connect.opencodeZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。",
   "provider.connect.opencodeZen.visit.prefix": "访问 ",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
   "provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。",
   "provider.connect.oauth.code.visit.prefix": "访问 ",
   "provider.connect.oauth.code.visit.link": "此链接",
@@ -134,13 +141,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} 已连接",
   "provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} 已断开连接",
+  "provider.disconnect.toast.disconnected.description": "{{provider}} 模型已不再可用。",
   "model.tag.free": "免费",
   "model.tag.latest": "最新",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "文本",
+  "model.input.image": "图像",
+  "model.input.audio": "音频",
+  "model.input.video": "视频",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "支持: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "支持推理",
+  "model.tooltip.reasoning.none": "不支持推理",
+  "model.tooltip.context": "上下文上限 {{limit}}",
   "common.search.placeholder": "搜索",
   "common.goBack": "返回",
   "common.loading": "加载中",
+  "common.loading.ellipsis": "...",
   "common.cancel": "取消",
+  "common.connect": "连接",
+  "common.disconnect": "断开连接",
   "common.submit": "提交",
   "common.save": "保存",
   "common.saving": "保存中...",
@@ -149,6 +175,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "输入 shell 命令...",
   "prompt.placeholder.normal": '随便问点什么... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "总结评论…",
+  "prompt.placeholder.summarizeComment": "总结该评论…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "按 esc 退出",
 
@@ -251,6 +279,9 @@ export const dict = {
   "dialog.project.edit.color": "颜色",
   "dialog.project.edit.color.select": "选择{{color}}颜色",
 
+  "dialog.project.edit.worktree.startup": "工作区启动脚本",
+  "dialog.project.edit.worktree.startup.description": "在创建新的工作区 (worktree) 后运行。",
+  "dialog.project.edit.worktree.startup.placeholder": "例如 bun install",
   "context.breakdown.title": "上下文拆分",
   "context.breakdown.note": "输入 token 的大致拆分。“其他”包含工具定义和开销。",
   "context.breakdown.system": "系统",
@@ -316,6 +347,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "加载文件失败",
 
+  "toast.file.listFailed.title": "列出文件失败",
+  "toast.context.noLineSelection.title": "未选择行",
+  "toast.context.noLineSelection.description": "请先在文件标签中选择行范围。",
   "toast.session.share.copyFailed.title": "无法复制链接到剪贴板",
   "toast.session.share.success.title": "会话已分享",
   "toast.session.share.success.description": "分享链接已复制到剪贴板",
@@ -388,13 +422,19 @@ export const dict = {
   "session.tab.context": "上下文",
   "session.panel.reviewAndFiles": "审查和文件",
   "session.review.filesChanged": "{{count}} 个文件变更",
+  "session.review.change.one": "更改",
+  "session.review.change.other": "更改",
   "session.review.loadingChanges": "正在加载更改...",
   "session.review.empty": "此会话暂无更改",
+  "session.review.noChanges": "无更改",
+  "session.files.selectToOpen": "选择要打开的文件",
+  "session.files.all": "所有文件",
   "session.messages.renderEarlier": "显示更早的消息",
   "session.messages.loadingEarlier": "正在加载更早的消息...",
   "session.messages.loadEarlier": "加载更早的消息",
   "session.messages.loading": "正在加载消息...",
 
+  "session.messages.jumpToLatest": "跳转到最新",
   "session.context.addToContext": "将 {{selection}} 添加到上下文",
 
   "session.new.worktree.main": "主分支",
@@ -434,6 +474,8 @@ export const dict = {
   "terminal.title.numbered": "终端 {{number}}",
   "terminal.close": "关闭终端",
 
+  "terminal.connectionLost.title": "连接已丢失",
+  "terminal.connectionLost.description": "终端连接已中断。这可能发生在服务器重启时。",
   "common.closeTab": "关闭标签页",
   "common.dismiss": "忽略",
   "common.requestFailed": "请求失败",
@@ -447,6 +489,8 @@ export const dict = {
   "common.edit": "编辑",
   "common.loadMore": "加载更多",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "切换菜单",
   "sidebar.nav.projectsAndSessions": "项目和会话",
   "sidebar.settings": "设置",
   "sidebar.help": "帮助",
@@ -458,7 +502,9 @@ export const dict = {
   "sidebar.project.recentSessions": "最近会话",
   "sidebar.project.viewAllSessions": "查看全部会话",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "桌面",
+  "settings.section.server": "服务器",
   "settings.tab.general": "通用",
   "settings.tab.shortcuts": "快捷键",
 
@@ -475,6 +521,63 @@ export const dict = {
   "settings.general.row.font.title": "字体",
   "settings.general.row.font.description": "自定义代码块使用的等宽字体",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "警报 01",
+  "sound.option.alert02": "警报 02",
+  "sound.option.alert03": "警报 03",
+  "sound.option.alert04": "警报 04",
+  "sound.option.alert05": "警报 05",
+  "sound.option.alert06": "警报 06",
+  "sound.option.alert07": "警报 07",
+  "sound.option.alert08": "警报 08",
+  "sound.option.alert09": "警报 09",
+  "sound.option.alert10": "警报 10",
+  "sound.option.bipbop01": "哔啵 01",
+  "sound.option.bipbop02": "哔啵 02",
+  "sound.option.bipbop03": "哔啵 03",
+  "sound.option.bipbop04": "哔啵 04",
+  "sound.option.bipbop05": "哔啵 05",
+  "sound.option.bipbop06": "哔啵 06",
+  "sound.option.bipbop07": "哔啵 07",
+  "sound.option.bipbop08": "哔啵 08",
+  "sound.option.bipbop09": "哔啵 09",
+  "sound.option.bipbop10": "哔啵 10",
+  "sound.option.staplebops01": "斯泰普博普斯 01",
+  "sound.option.staplebops02": "斯泰普博普斯 02",
+  "sound.option.staplebops03": "斯泰普博普斯 03",
+  "sound.option.staplebops04": "斯泰普博普斯 04",
+  "sound.option.staplebops05": "斯泰普博普斯 05",
+  "sound.option.staplebops06": "斯泰普博普斯 06",
+  "sound.option.staplebops07": "斯泰普博普斯 07",
+  "sound.option.nope01": "否 01",
+  "sound.option.nope02": "否 02",
+  "sound.option.nope03": "否 03",
+  "sound.option.nope04": "否 04",
+  "sound.option.nope05": "否 05",
+  "sound.option.nope06": "否 06",
+  "sound.option.nope07": "否 07",
+  "sound.option.nope08": "否 08",
+  "sound.option.nope09": "否 09",
+  "sound.option.nope10": "否 10",
+  "sound.option.nope11": "否 11",
+  "sound.option.nope12": "否 12",
+  "sound.option.yup01": "是 01",
+  "sound.option.yup02": "是 02",
+  "sound.option.yup03": "是 03",
+  "sound.option.yup04": "是 04",
+  "sound.option.yup05": "是 05",
+  "sound.option.yup06": "是 06",
   "settings.general.notifications.agent.title": "智能体",
   "settings.general.notifications.agent.description": "当智能体完成或需要注意时显示系统通知",
   "settings.general.notifications.permissions.title": "权限",
@@ -509,6 +612,13 @@ export const dict = {
 
   "settings.providers.title": "提供商",
   "settings.providers.description": "提供商设置将在此处可配置。",
+  "settings.providers.section.connected": "已连接的提供商",
+  "settings.providers.connected.empty": "没有已连接的提供商",
+  "settings.providers.section.popular": "热门提供商",
+  "settings.providers.tag.environment": "环境",
+  "settings.providers.tag.config": "配置",
+  "settings.providers.tag.custom": "自定义",
+  "settings.providers.tag.other": "其他",
   "settings.models.title": "模型",
   "settings.models.description": "模型设置将在此处可配置。",
   "settings.agents.title": "智能体",
@@ -575,6 +685,7 @@ export const dict = {
   "workspace.reset.failed.title": "重置工作区失败",
   "workspace.reset.success.title": "工作区已重置",
   "workspace.reset.success.description": "工作区已与默认分支保持一致。",
+  "workspace.error.stillPreparing": "工作区仍在准备中",
   "workspace.status.checking": "正在检查未合并的更改...",
   "workspace.status.error": "无法验证 git 状态。",
   "workspace.status.clean": "未检测到未合并的更改。",

+ 110 - 0
packages/app/src/i18n/zht.ts

@@ -12,6 +12,7 @@ export const dict = {
   "command.category.theme": "主題",
   "command.category.language": "語言",
   "command.category.file": "檔案",
+  "command.category.context": "上下文",
   "command.category.terminal": "終端機",
   "command.category.model": "模型",
   "command.category.mcp": "MCP",
@@ -19,6 +20,7 @@ export const dict = {
   "command.category.permissions": "權限",
   "command.category.workspace": "工作區",
 
+  "command.category.settings": "設定",
   "theme.scheme.system": "系統",
   "theme.scheme.light": "淺色",
   "theme.scheme.dark": "深色",
@@ -27,6 +29,7 @@ export const dict = {
   "command.project.open": "開啟專案",
   "command.provider.connect": "連接提供者",
   "command.server.switch": "切換伺服器",
+  "command.settings.open": "開啟設定",
   "command.session.previous": "上一個工作階段",
   "command.session.next": "下一個工作階段",
   "command.session.archive": "封存工作階段",
@@ -44,7 +47,10 @@ export const dict = {
   "command.session.new": "新增工作階段",
   "command.file.open": "開啟檔案",
   "command.file.open.description": "搜尋檔案和命令",
+  "command.context.addSelection": "將選取內容加入上下文",
+  "command.context.addSelection.description": "加入目前檔案中選取的行",
   "command.terminal.toggle": "切換終端機",
+  "command.fileTree.toggle": "切換檔案樹",
   "command.review.toggle": "切換審查",
   "command.terminal.new": "新增終端機",
   "command.terminal.new.description": "建立新的終端機標籤頁",
@@ -136,13 +142,32 @@ export const dict = {
   "provider.connect.toast.connected.title": "{{provider}} 已連線",
   "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。",
 
+  "provider.disconnect.toast.disconnected.title": "{{provider}} 已中斷連線",
+  "provider.disconnect.toast.disconnected.description": "{{provider}} 模型已不再可用。",
   "model.tag.free": "免費",
   "model.tag.latest": "最新",
 
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "文字",
+  "model.input.image": "圖片",
+  "model.input.audio": "音訊",
+  "model.input.video": "影片",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "支援: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "支援推理",
+  "model.tooltip.reasoning.none": "不支援推理",
+  "model.tooltip.context": "上下文上限 {{limit}}",
   "common.search.placeholder": "搜尋",
   "common.goBack": "返回",
   "common.loading": "載入中",
+  "common.loading.ellipsis": "...",
   "common.cancel": "取消",
+  "common.connect": "連線",
+  "common.disconnect": "中斷連線",
   "common.submit": "提交",
   "common.save": "儲存",
   "common.saving": "儲存中...",
@@ -151,6 +176,8 @@ export const dict = {
 
   "prompt.placeholder.shell": "輸入 shell 命令...",
   "prompt.placeholder.normal": '隨便問點什麼... "{{example}}"',
+  "prompt.placeholder.summarizeComments": "摘要評論…",
+  "prompt.placeholder.summarizeComment": "摘要這則評論…",
   "prompt.mode.shell": "Shell",
   "prompt.mode.shell.exit": "按 esc 退出",
 
@@ -253,6 +280,9 @@ export const dict = {
   "dialog.project.edit.color": "顏色",
   "dialog.project.edit.color.select": "選擇{{color}}顏色",
 
+  "dialog.project.edit.worktree.startup": "工作區啟動腳本",
+  "dialog.project.edit.worktree.startup.description": "在建立新的工作區 (worktree) 後執行。",
+  "dialog.project.edit.worktree.startup.placeholder": "例如 bun install",
   "context.breakdown.title": "上下文拆分",
   "context.breakdown.note": "輸入 token 的大致拆分。「其他」包含工具定義和額外開銷。",
   "context.breakdown.system": "系統",
@@ -318,6 +348,9 @@ export const dict = {
 
   "toast.file.loadFailed.title": "載入檔案失敗",
 
+  "toast.file.listFailed.title": "列出檔案失敗",
+  "toast.context.noLineSelection.title": "未選取行",
+  "toast.context.noLineSelection.description": "請先在檔案分頁中選取行範圍。",
   "toast.session.share.copyFailed.title": "無法複製連結到剪貼簿",
   "toast.session.share.success.title": "工作階段已分享",
   "toast.session.share.success.description": "分享連結已複製到剪貼簿",
@@ -390,13 +423,19 @@ export const dict = {
   "session.tab.context": "上下文",
   "session.panel.reviewAndFiles": "審查與檔案",
   "session.review.filesChanged": "{{count}} 個檔案變更",
+  "session.review.change.one": "變更",
+  "session.review.change.other": "變更",
   "session.review.loadingChanges": "正在載入變更...",
   "session.review.empty": "此工作階段暫無變更",
+  "session.review.noChanges": "沒有變更",
+  "session.files.selectToOpen": "選取要開啟的檔案",
+  "session.files.all": "所有檔案",
   "session.messages.renderEarlier": "顯示更早的訊息",
   "session.messages.loadingEarlier": "正在載入更早的訊息...",
   "session.messages.loadEarlier": "載入更早的訊息",
   "session.messages.loading": "正在載入訊息...",
 
+  "session.messages.jumpToLatest": "跳到最新",
   "session.context.addToContext": "將 {{selection}} 新增到上下文",
 
   "session.new.worktree.main": "主分支",
@@ -436,6 +475,8 @@ export const dict = {
   "terminal.title.numbered": "終端機 {{number}}",
   "terminal.close": "關閉終端機",
 
+  "terminal.connectionLost.title": "連線中斷",
+  "terminal.connectionLost.description": "終端機連線已中斷。這可能會在伺服器重新啟動時發生。",
   "common.closeTab": "關閉標籤頁",
   "common.dismiss": "忽略",
   "common.requestFailed": "要求失敗",
@@ -449,6 +490,8 @@ export const dict = {
   "common.edit": "編輯",
   "common.loadMore": "載入更多",
 
+  "common.key.esc": "ESC",
+  "sidebar.menu.toggle": "切換選單",
   "sidebar.nav.projectsAndSessions": "專案與工作階段",
   "sidebar.settings": "設定",
   "sidebar.help": "說明",
@@ -460,7 +503,9 @@ export const dict = {
   "sidebar.project.recentSessions": "最近工作階段",
   "sidebar.project.viewAllSessions": "查看全部工作階段",
 
+  "app.name.desktop": "OpenCode Desktop",
   "settings.section.desktop": "桌面",
+  "settings.section.server": "伺服器",
   "settings.tab.general": "一般",
   "settings.tab.shortcuts": "快速鍵",
 
@@ -477,6 +522,63 @@ export const dict = {
   "settings.general.row.font.title": "字型",
   "settings.general.row.font.description": "自訂程式碼區塊使用的等寬字型",
 
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "sound.option.alert01": "警報 01",
+  "sound.option.alert02": "警報 02",
+  "sound.option.alert03": "警報 03",
+  "sound.option.alert04": "警報 04",
+  "sound.option.alert05": "警報 05",
+  "sound.option.alert06": "警報 06",
+  "sound.option.alert07": "警報 07",
+  "sound.option.alert08": "警報 08",
+  "sound.option.alert09": "警報 09",
+  "sound.option.alert10": "警報 10",
+  "sound.option.bipbop01": "嗶啵 01",
+  "sound.option.bipbop02": "嗶啵 02",
+  "sound.option.bipbop03": "嗶啵 03",
+  "sound.option.bipbop04": "嗶啵 04",
+  "sound.option.bipbop05": "嗶啵 05",
+  "sound.option.bipbop06": "嗶啵 06",
+  "sound.option.bipbop07": "嗶啵 07",
+  "sound.option.bipbop08": "嗶啵 08",
+  "sound.option.bipbop09": "嗶啵 09",
+  "sound.option.bipbop10": "嗶啵 10",
+  "sound.option.staplebops01": "斯泰普博普斯 01",
+  "sound.option.staplebops02": "斯泰普博普斯 02",
+  "sound.option.staplebops03": "斯泰普博普斯 03",
+  "sound.option.staplebops04": "斯泰普博普斯 04",
+  "sound.option.staplebops05": "斯泰普博普斯 05",
+  "sound.option.staplebops06": "斯泰普博普斯 06",
+  "sound.option.staplebops07": "斯泰普博普斯 07",
+  "sound.option.nope01": "否 01",
+  "sound.option.nope02": "否 02",
+  "sound.option.nope03": "否 03",
+  "sound.option.nope04": "否 04",
+  "sound.option.nope05": "否 05",
+  "sound.option.nope06": "否 06",
+  "sound.option.nope07": "否 07",
+  "sound.option.nope08": "否 08",
+  "sound.option.nope09": "否 09",
+  "sound.option.nope10": "否 10",
+  "sound.option.nope11": "否 11",
+  "sound.option.nope12": "否 12",
+  "sound.option.yup01": "是 01",
+  "sound.option.yup02": "是 02",
+  "sound.option.yup03": "是 03",
+  "sound.option.yup04": "是 04",
+  "sound.option.yup05": "是 05",
+  "sound.option.yup06": "是 06",
   "settings.general.notifications.agent.title": "代理程式",
   "settings.general.notifications.agent.description": "當代理程式完成或需要注意時顯示系統通知",
   "settings.general.notifications.permissions.title": "權限",
@@ -511,6 +613,13 @@ export const dict = {
 
   "settings.providers.title": "提供者",
   "settings.providers.description": "提供者設定將在此處可設定。",
+  "settings.providers.section.connected": "已連線的提供商",
+  "settings.providers.connected.empty": "沒有已連線的提供商",
+  "settings.providers.section.popular": "熱門提供商",
+  "settings.providers.tag.environment": "環境",
+  "settings.providers.tag.config": "配置",
+  "settings.providers.tag.custom": "自訂",
+  "settings.providers.tag.other": "其他",
   "settings.models.title": "模型",
   "settings.models.description": "模型設定將在此處可設定。",
   "settings.agents.title": "代理程式",
@@ -577,6 +686,7 @@ export const dict = {
   "workspace.reset.failed.title": "重設工作區失敗",
   "workspace.reset.success.title": "工作區已重設",
   "workspace.reset.success.description": "工作區已與預設分支保持一致。",
+  "workspace.error.stillPreparing": "工作區仍在準備中",
   "workspace.status.checking": "正在檢查未合併的變更...",
   "workspace.status.error": "無法驗證 git 狀態。",
   "workspace.status.clean": "未偵測到未合併的變更。",

+ 8 - 0
packages/ui/src/i18n/ar.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "توسيع الكل",
   "ui.sessionReview.collapseAll": "طي الكل",
 
+  "ui.sessionReview.change.added": "مضاف",
+  "ui.sessionReview.change.removed": "محذوف",
+  "ui.lineComment.label.prefix": "تعليق على ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "جارٍ التعليق على ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "أضف تعليقًا",
+  "ui.lineComment.submit": "تعليق",
   "ui.sessionTurn.steps.show": "إظهار الخطوات",
   "ui.sessionTurn.steps.hide": "إخفاء الخطوات",
   "ui.sessionTurn.summary.response": "استجابة",

+ 8 - 0
packages/ui/src/i18n/br.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Expandir tudo",
   "ui.sessionReview.collapseAll": "Recolher tudo",
 
+  "ui.sessionReview.change.added": "Adicionado",
+  "ui.sessionReview.change.removed": "Removido",
+  "ui.lineComment.label.prefix": "Comentar em ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Comentando em ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Adicionar comentário",
+  "ui.lineComment.submit": "Comentar",
   "ui.sessionTurn.steps.show": "Mostrar passos",
   "ui.sessionTurn.steps.hide": "Ocultar passos",
   "ui.sessionTurn.summary.response": "Resposta",

+ 8 - 0
packages/ui/src/i18n/da.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Udvid alle",
   "ui.sessionReview.collapseAll": "Skjul alle",
 
+  "ui.sessionReview.change.added": "Tilføjet",
+  "ui.sessionReview.change.removed": "Fjernet",
+  "ui.lineComment.label.prefix": "Kommenter på ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Kommenterer på ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Tilføj kommentar",
+  "ui.lineComment.submit": "Kommenter",
   "ui.sessionTurn.steps.show": "Vis trin",
   "ui.sessionTurn.steps.hide": "Skjul trin",
   "ui.sessionTurn.summary.response": "Svar",

+ 8 - 0
packages/ui/src/i18n/de.ts

@@ -9,6 +9,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Alle erweitern",
   "ui.sessionReview.collapseAll": "Alle reduzieren",
 
+  "ui.sessionReview.change.added": "Hinzugefügt",
+  "ui.sessionReview.change.removed": "Entfernt",
+  "ui.lineComment.label.prefix": "Kommentar zu ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Kommentiere ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Kommentar hinzufügen",
+  "ui.lineComment.submit": "Kommentieren",
   "ui.sessionTurn.steps.show": "Schritte anzeigen",
   "ui.sessionTurn.steps.hide": "Schritte ausblenden",
   "ui.sessionTurn.summary.response": "Antwort",

+ 8 - 0
packages/ui/src/i18n/es.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Expandir todo",
   "ui.sessionReview.collapseAll": "Colapsar todo",
 
+  "ui.sessionReview.change.added": "Añadido",
+  "ui.sessionReview.change.removed": "Eliminado",
+  "ui.lineComment.label.prefix": "Comentar en ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Comentando en ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Añadir comentario",
+  "ui.lineComment.submit": "Comentar",
   "ui.sessionTurn.steps.show": "Mostrar pasos",
   "ui.sessionTurn.steps.hide": "Ocultar pasos",
   "ui.sessionTurn.summary.response": "Respuesta",

+ 8 - 0
packages/ui/src/i18n/fr.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Tout développer",
   "ui.sessionReview.collapseAll": "Tout réduire",
 
+  "ui.sessionReview.change.added": "Ajouté",
+  "ui.sessionReview.change.removed": "Supprimé",
+  "ui.lineComment.label.prefix": "Commenter sur ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Commentaire sur ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Ajouter un commentaire",
+  "ui.lineComment.submit": "Commenter",
   "ui.sessionTurn.steps.show": "Afficher les étapes",
   "ui.sessionTurn.steps.hide": "Masquer les étapes",
   "ui.sessionTurn.summary.response": "Réponse",

+ 8 - 0
packages/ui/src/i18n/ja.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "すべて展開",
   "ui.sessionReview.collapseAll": "すべて折りたたむ",
 
+  "ui.sessionReview.change.added": "追加",
+  "ui.sessionReview.change.removed": "削除",
+  "ui.lineComment.label.prefix": "",
+  "ui.lineComment.label.suffix": "へのコメント",
+  "ui.lineComment.editorLabel.prefix": "",
+  "ui.lineComment.editorLabel.suffix": "へのコメントを作成中",
+  "ui.lineComment.placeholder": "コメントを追加",
+  "ui.lineComment.submit": "コメント",
   "ui.sessionTurn.steps.show": "ステップを表示",
   "ui.sessionTurn.steps.hide": "ステップを隠す",
   "ui.sessionTurn.summary.response": "応答",

+ 8 - 0
packages/ui/src/i18n/ko.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "모두 펼치기",
   "ui.sessionReview.collapseAll": "모두 접기",
 
+  "ui.sessionReview.change.added": "추가됨",
+  "ui.sessionReview.change.removed": "삭제됨",
+  "ui.lineComment.label.prefix": "",
+  "ui.lineComment.label.suffix": "에 댓글 달기",
+  "ui.lineComment.editorLabel.prefix": "",
+  "ui.lineComment.editorLabel.suffix": "에 댓글 작성 중",
+  "ui.lineComment.placeholder": "댓글 추가",
+  "ui.lineComment.submit": "댓글",
   "ui.sessionTurn.steps.show": "단계 표시",
   "ui.sessionTurn.steps.hide": "단계 숨기기",
   "ui.sessionTurn.summary.response": "응답",

+ 8 - 0
packages/ui/src/i18n/no.ts

@@ -8,6 +8,14 @@ export const dict: Record<Keys, string> = {
   "ui.sessionReview.expandAll": "Utvid alle",
   "ui.sessionReview.collapseAll": "Fold sammen alle",
 
+  "ui.sessionReview.change.added": "Lagt til",
+  "ui.sessionReview.change.removed": "Fjernet",
+  "ui.lineComment.label.prefix": "Kommenter på ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Kommenterer på ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Legg til kommentar",
+  "ui.lineComment.submit": "Kommenter",
   "ui.sessionTurn.steps.show": "Vis trinn",
   "ui.sessionTurn.steps.hide": "Skjul trinn",
   "ui.sessionTurn.summary.response": "Svar",

+ 8 - 0
packages/ui/src/i18n/pl.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Rozwiń wszystko",
   "ui.sessionReview.collapseAll": "Zwiń wszystko",
 
+  "ui.sessionReview.change.added": "Dodano",
+  "ui.sessionReview.change.removed": "Usunięto",
+  "ui.lineComment.label.prefix": "Komentarz do ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Komentowanie: ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Dodaj komentarz",
+  "ui.lineComment.submit": "Skomentuj",
   "ui.sessionTurn.steps.show": "Pokaż kroki",
   "ui.sessionTurn.steps.hide": "Ukryj kroki",
   "ui.sessionTurn.summary.response": "Odpowiedź",

+ 8 - 0
packages/ui/src/i18n/ru.ts

@@ -5,6 +5,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "Развернуть всё",
   "ui.sessionReview.collapseAll": "Свернуть всё",
 
+  "ui.sessionReview.change.added": "Добавлено",
+  "ui.sessionReview.change.removed": "Удалено",
+  "ui.lineComment.label.prefix": "Комментарий к ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Комментирование: ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Добавить комментарий",
+  "ui.lineComment.submit": "Комментировать",
   "ui.sessionTurn.steps.show": "Показать шаги",
   "ui.sessionTurn.steps.hide": "Скрыть шаги",
   "ui.sessionTurn.summary.response": "Ответ",

+ 8 - 0
packages/ui/src/i18n/zh.ts

@@ -9,6 +9,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "全部展开",
   "ui.sessionReview.collapseAll": "全部收起",
 
+  "ui.sessionReview.change.added": "已添加",
+  "ui.sessionReview.change.removed": "已移除",
+  "ui.lineComment.label.prefix": "评论 ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "正在评论 ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "添加评论",
+  "ui.lineComment.submit": "评论",
   "ui.sessionTurn.steps.show": "显示步骤",
   "ui.sessionTurn.steps.hide": "隐藏步骤",
   "ui.sessionTurn.summary.response": "回复",

+ 8 - 0
packages/ui/src/i18n/zht.ts

@@ -9,6 +9,14 @@ export const dict = {
   "ui.sessionReview.expandAll": "全部展開",
   "ui.sessionReview.collapseAll": "全部收合",
 
+  "ui.sessionReview.change.added": "已新增",
+  "ui.sessionReview.change.removed": "已移除",
+  "ui.lineComment.label.prefix": "評論 ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "正在評論 ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "新增評論",
+  "ui.lineComment.submit": "評論",
   "ui.sessionTurn.steps.show": "顯示步驟",
   "ui.sessionTurn.steps.hide": "隱藏步驟",
   "ui.sessionTurn.summary.response": "回覆",