From b5f710d4a1caae1ac0ae1dcc102c4df4a0d6c6a9 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 11 Feb 2026 15:20:29 +0000 Subject: [PATCH 1/5] chore: generate --- packages/app/src/i18n/ar.ts | 47 ++++++++++++--------- packages/app/src/i18n/br.ts | 67 ++++++++++++++++++------------ packages/app/src/i18n/de.ts | 81 ++++++++++++++++++++++++------------- packages/app/src/i18n/pl.ts | 48 ++++++++++++++-------- packages/app/src/i18n/zh.ts | 18 +++++---- 5 files changed, 164 insertions(+), 97 deletions(-) diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 24473bedaa84..e3792a3c3cc3 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -110,25 +110,30 @@ export const dict = { "provider.connect.status.inProgress": "جارٍ التفويض...", "provider.connect.status.waiting": "في انتظار التفويض...", "provider.connect.status.failed": "فشل التفويض: {{error}}", - "provider.connect.apiKey.description": "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.apiKey.description": + "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", "provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}", "provider.connect.apiKey.placeholder": "مفتاح API", "provider.connect.apiKey.required": "مفتاح API مطلوب", - "provider.connect.opencodeZen.line1": "يمنحك OpenCode Zen الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.", - "provider.connect.opencodeZen.line2": "باستخدام مفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude و GPT و Gemini و GLM والمزيد.", + "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": "هذا الرابط", - "provider.connect.oauth.code.visit.suffix": " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.oauth.code.visit.suffix": + " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", "provider.connect.oauth.code.label": "رمز تفويض {{method}}", "provider.connect.oauth.code.placeholder": "رمز التفويض", "provider.connect.oauth.code.required": "رمز التفويض مطلوب", "provider.connect.oauth.code.invalid": "رمز التفويض غير صالح", "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", "provider.connect.oauth.auto.visit.link": "هذا الرابط", - "provider.connect.oauth.auto.visit.suffix": " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.oauth.auto.visit.suffix": + " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", "provider.connect.toast.connected.title": "تم توصيل {{provider}}", "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", @@ -200,7 +205,7 @@ export const dict = { "common.default": "افتراضي", "common.attachment": "مرفق", "prompt.placeholder.shell": "أدخل أمر shell...", - "prompt.placeholder.normal": "اسأل أي شيء... \"{{example}}\"", + "prompt.placeholder.normal": 'اسأل أي شيء... "{{example}}"', "prompt.placeholder.summarizeComments": "لخّص التعليقات…", "prompt.placeholder.summarizeComment": "لخّص التعليق…", "prompt.mode.shell": "Shell", @@ -278,7 +283,8 @@ export const dict = { "dialog.server.add.checking": "جارٍ التحقق...", "dialog.server.add.button": "إضافة خادم", "dialog.server.default.title": "الخادم الافتراضي", - "dialog.server.default.description": "الاتصال بهذا الخادم عند بدء تشغيل التطبيق بدلاً من بدء خادم محلي. يتطلب إعادة التشغيل.", + "dialog.server.default.description": + "الاتصال بهذا الخادم عند بدء تشغيل التطبيق بدلاً من بدء خادم محلي. يتطلب إعادة التشغيل.", "dialog.server.default.none": "لم يتم تحديد خادم", "dialog.server.default.set": "تعيين الخادم الحالي كافتراضي", "dialog.server.default.clear": "مسح", @@ -301,7 +307,7 @@ export const dict = { "dialog.project.edit.worktree.startup.description": "يتم تشغيله بعد إنشاء مساحة عمل جديدة (شجرة عمل).", "dialog.project.edit.worktree.startup.placeholder": "مثال: bun install", "context.breakdown.title": "تفصيل السياق", - "context.breakdown.note": "تفصيل تقريبي لرموز الإدخال. يشمل \"أخرى\" تعريفات الأدوات والنفقات العامة.", + "context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال. يشمل "أخرى" تعريفات الأدوات والنفقات العامة.', "context.breakdown.system": "النظام", "context.breakdown.user": "المستخدم", "context.breakdown.assistant": "المساعد", @@ -388,7 +394,8 @@ export const dict = { "error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق OpenCode", "error.page.report.discord": "على Discord", "error.page.version": "الإصدار: {{version}}", - "error.dev.rootNotFound": "لم يتم العثور على العنصر الجذري. هل نسيت إضافته إلى index.html؟ أو ربما تمت كتابة سمة id بشكل خاطئ؟", + "error.dev.rootNotFound": + "لم يتم العثور على العنصر الجذري. هل نسيت إضافته إلى index.html؟ أو ربما تمت كتابة سمة id بشكل خاطئ؟", "error.globalSync.connectFailed": "تعذر الاتصال بالخادم. هل هناك خادم يعمل في `{{url}}`؟", "directory.error.invalidUrl": "دليل غير صالح في عنوان URL.", "error.chain.unknown": "خطأ غير معروف", @@ -400,12 +407,13 @@ export const dict = { "error.chain.didYouMean": "هل كنت تعني: {{suggestions}}", "error.chain.modelNotFound": "النموذج غير موجود: {{provider}}/{{model}}", "error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (opencode.json)", - "error.chain.mcpFailed": "فشل خادم MCP \"{{name}}\". لاحظ أن OpenCode لا يدعم مصادقة MCP بعد.", + "error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن OpenCode لا يدعم مصادقة MCP بعد.', "error.chain.providerAuthFailed": "فشلت مصادقة الموفر ({{provider}}): {{message}}", - "error.chain.providerInitFailed": "فشل تهيئة الموفر \"{{provider}}\". تحقق من بيانات الاعتماد والتكوين.", + "error.chain.providerInitFailed": 'فشل تهيئة الموفر "{{provider}}". تحقق من بيانات الاعتماد والتكوين.', "error.chain.configJsonInvalid": "ملف التكوين في {{path}} ليس JSON(C) صالحًا", "error.chain.configJsonInvalidWithMessage": "ملف التكوين في {{path}} ليس JSON(C) صالحًا: {{message}}", - "error.chain.configDirectoryTypo": "الدليل \"{{dir}}\" في {{path}} غير صالح. أعد تسمية الدليل إلى \"{{suggestion}}\" أو قم بإزالته. هذا خطأ مطبعي شائع.", + "error.chain.configDirectoryTypo": + 'الدليل "{{dir}}" في {{path}} غير صالح. أعد تسمية الدليل إلى "{{suggestion}}" أو قم بإزالته. هذا خطأ مطبعي شائع.', "error.chain.configFrontmatterError": "فشل تحليل frontmatter في {{path}}:\n{{message}}", "error.chain.configInvalid": "ملف التكوين في {{path}} غير صالح", "error.chain.configInvalidWithMessage": "ملف التكوين في {{path}} غير صالح: {{message}}", @@ -524,9 +532,10 @@ export const dict = { "settings.general.row.font.description": "تخصيص الخط الأحادي المستخدم في كتل التعليمات البرمجية", "settings.general.row.wayland.title": "استخدام Wayland الأصلي", "settings.general.row.wayland.description": "تعطيل التراجع إلى X11 على Wayland. يتطلب إعادة التشغيل.", - "settings.general.row.wayland.tooltip": "على Linux مع شاشات بمعدلات تحديث مختلطة، يمكن أن يكون Wayland الأصلي أكثر استقرارًا.", + "settings.general.row.wayland.tooltip": + "على Linux مع شاشات بمعدلات تحديث مختلطة، يمكن أن يكون Wayland الأصلي أكثر استقرارًا.", "settings.general.row.releaseNotes.title": "ملاحظات الإصدار", - "settings.general.row.releaseNotes.description": "عرض نوافذ \"ما الجديد\" المنبثقة بعد التحديثات", + "settings.general.row.releaseNotes.description": 'عرض نوافذ "ما الجديد" المنبثقة بعد التحديثات', "settings.updates.row.startup.title": "التحقق من التحديثات عند بدء التشغيل", "settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل OpenCode", "settings.updates.row.check.title": "التحقق من التحديثات", @@ -647,7 +656,8 @@ export const dict = { "settings.permissions.tool.read.title": "قراءة", "settings.permissions.tool.read.description": "قراءة ملف (يطابق مسار الملف)", "settings.permissions.tool.edit.title": "تحرير", - "settings.permissions.tool.edit.description": "تعديل الملفات، بما في ذلك التحرير والكتابة والتصحيحات والتحرير المتعدد", + "settings.permissions.tool.edit.description": + "تعديل الملفات، بما في ذلك التحرير والكتابة والتصحيحات والتحرير المتعدد", "settings.permissions.tool.glob.title": "Glob", "settings.permissions.tool.glob.description": "مطابقة الملفات باستخدام أنماط glob", "settings.permissions.tool.grep.title": "Grep", @@ -678,7 +688,7 @@ export const dict = { "settings.permissions.tool.doom_loop.description": "اكتشاف استدعاءات الأدوات المتكررة بمدخلات متطابقة", "session.delete.failed.title": "فشل حذف الجلسة", "session.delete.title": "حذف الجلسة", - "session.delete.confirm": "حذف الجلسة \"{{name}}\"؟", + "session.delete.confirm": 'حذف الجلسة "{{name}}"؟', "session.delete.button": "حذف الجلسة", "workspace.new": "مساحة عمل جديدة", "workspace.type.local": "محلي", @@ -696,14 +706,13 @@ export const dict = { "workspace.status.clean": "لم يتم اكتشاف تغييرات غير مدمجة.", "workspace.status.dirty": "تم اكتشاف تغييرات غير مدمجة في مساحة العمل هذه.", "workspace.delete.title": "حذف مساحة العمل", - "workspace.delete.confirm": "حذف مساحة العمل \"{{name}}\"؟", + "workspace.delete.confirm": 'حذف مساحة العمل "{{name}}"؟', "workspace.delete.button": "حذف مساحة العمل", "workspace.reset.title": "إعادة تعيين مساحة العمل", - "workspace.reset.confirm": "إعادة تعيين مساحة العمل \"{{name}}\"؟", + "workspace.reset.confirm": 'إعادة تعيين مساحة العمل "{{name}}"؟', "workspace.reset.button": "إعادة تعيين مساحة العمل", "workspace.reset.archived.none": "لن تتم أرشفة أي جلسات نشطة.", "workspace.reset.archived.one": "ستتم أرشفة جلسة واحدة.", "workspace.reset.archived.many": "ستتم أرشفة {{count}} جلسات.", "workspace.reset.note": "سيؤدي هذا إلى إعادة تعيين مساحة العمل لتتطابق مع الفرع الافتراضي.", } - diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index 84aeb934705e..07d6ce467aeb 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -110,25 +110,30 @@ export const dict = { "provider.connect.status.inProgress": "Autorização em andamento...", "provider.connect.status.waiting": "Aguardando autorização...", "provider.connect.status.failed": "Autorização falhou: {{error}}", - "provider.connect.apiKey.description": "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no OpenCode.", + "provider.connect.apiKey.description": + "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no OpenCode.", "provider.connect.apiKey.label": "Chave de API do {{provider}}", "provider.connect.apiKey.placeholder": "Chave de API", "provider.connect.apiKey.required": "A chave de API é obrigatória", - "provider.connect.opencodeZen.line1": "OpenCode Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", - "provider.connect.opencodeZen.line2": "Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.", + "provider.connect.opencodeZen.line1": + "OpenCode Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", + "provider.connect.opencodeZen.line2": + "Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.", "provider.connect.opencodeZen.visit.prefix": "Visite ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " para obter sua chave de API.", "provider.connect.oauth.code.visit.prefix": "Visite ", "provider.connect.oauth.code.visit.link": "este link", - "provider.connect.oauth.code.visit.suffix": " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no OpenCode.", + "provider.connect.oauth.code.visit.suffix": + " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no OpenCode.", "provider.connect.oauth.code.label": "Código de autorização {{method}}", "provider.connect.oauth.code.placeholder": "Código de autorização", "provider.connect.oauth.code.required": "O código de autorização é obrigatório", "provider.connect.oauth.code.invalid": "Código de autorização inválido", "provider.connect.oauth.auto.visit.prefix": "Visite ", "provider.connect.oauth.auto.visit.link": "este link", - "provider.connect.oauth.auto.visit.suffix": " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no OpenCode.", + "provider.connect.oauth.auto.visit.suffix": + " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Código de confirmação", "provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.", @@ -200,7 +205,7 @@ export const dict = { "common.default": "Padrão", "common.attachment": "anexo", "prompt.placeholder.shell": "Digite comando do shell...", - "prompt.placeholder.normal": "Pergunte qualquer coisa... \"{{example}}\"", + "prompt.placeholder.normal": 'Pergunte qualquer coisa... "{{example}}"', "prompt.placeholder.summarizeComments": "Resumir comentários…", "prompt.placeholder.summarizeComment": "Resumir comentário…", "prompt.mode.shell": "Shell", @@ -278,7 +283,8 @@ export const dict = { "dialog.server.add.checking": "Verificando...", "dialog.server.add.button": "Adicionar", "dialog.server.default.title": "Servidor padrão", - "dialog.server.default.description": "Conectar a este servidor na inicialização do aplicativo ao invés de iniciar um servidor local. Requer reinicialização.", + "dialog.server.default.description": + "Conectar a este servidor na inicialização do aplicativo ao invés de iniciar um servidor local. Requer reinicialização.", "dialog.server.default.none": "Nenhum servidor selecionado", "dialog.server.default.set": "Definir servidor atual como padrão", "dialog.server.default.clear": "Limpar", @@ -301,7 +307,8 @@ export const dict = { "dialog.project.edit.worktree.startup.description": "Executa após criar um novo espaço de trabalho (worktree).", "dialog.project.edit.worktree.startup.placeholder": "ex: bun install", "context.breakdown.title": "Detalhamento do Contexto", - "context.breakdown.note": "Detalhamento aproximado dos tokens de entrada. \"Outros\" inclui definições de ferramentas e overhead.", + "context.breakdown.note": + 'Detalhamento aproximado dos tokens de entrada. "Outros" inclui definições de ferramentas e overhead.', "context.breakdown.system": "Sistema", "context.breakdown.user": "Usuário", "context.breakdown.assistant": "Assistente", @@ -388,7 +395,8 @@ export const dict = { "error.page.report.prefix": "Por favor, reporte este erro para a equipe do OpenCode", "error.page.report.discord": "no Discord", "error.page.version": "Versão: {{version}}", - "error.dev.rootNotFound": "Elemento raiz não encontrado. Você esqueceu de adicioná-lo ao seu index.html? Ou talvez o atributo id foi escrito incorretamente?", + "error.dev.rootNotFound": + "Elemento raiz não encontrado. Você esqueceu de adicioná-lo ao seu index.html? Ou talvez o atributo id foi escrito incorretamente?", "error.globalSync.connectFailed": "Não foi possível conectar ao servidor. Há um servidor executando em `{{url}}`?", "directory.error.invalidUrl": "Diretório inválido na URL.", "error.chain.unknown": "Erro desconhecido", @@ -400,12 +408,15 @@ export const dict = { "error.chain.didYouMean": "Você quis dizer: {{suggestions}}", "error.chain.modelNotFound": "Modelo não encontrado: {{provider}}/{{model}}", "error.chain.checkConfig": "Verifique os nomes de provedor/modelo na sua configuração (opencode.json)", - "error.chain.mcpFailed": "Servidor MCP \"{{name}}\" falhou. Nota: OpenCode ainda não suporta autenticação MCP.", + "error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: OpenCode ainda não suporta autenticação MCP.', "error.chain.providerAuthFailed": "Autenticação do provedor falhou ({{provider}}): {{message}}", - "error.chain.providerInitFailed": "Falha ao inicializar provedor \"{{provider}}\". Verifique credenciais e configuração.", + "error.chain.providerInitFailed": + 'Falha ao inicializar provedor "{{provider}}". Verifique credenciais e configuração.', "error.chain.configJsonInvalid": "Arquivo de configuração em {{path}} não é um JSON(C) válido", - "error.chain.configJsonInvalidWithMessage": "Arquivo de configuração em {{path}} não é um JSON(C) válido: {{message}}", - "error.chain.configDirectoryTypo": "Diretório \"{{dir}}\" em {{path}} não é válido. Renomeie o diretório para \"{{suggestion}}\" ou remova-o. Este é um erro de digitação comum.", + "error.chain.configJsonInvalidWithMessage": + "Arquivo de configuração em {{path}} não é um JSON(C) válido: {{message}}", + "error.chain.configDirectoryTypo": + 'Diretório "{{dir}}" em {{path}} não é válido. Renomeie o diretório para "{{suggestion}}" ou remova-o. Este é um erro de digitação comum.', "error.chain.configFrontmatterError": "Falha ao analisar frontmatter em {{path}}:\n{{message}}", "error.chain.configInvalid": "Arquivo de configuração em {{path}} é inválido", "error.chain.configInvalidWithMessage": "Arquivo de configuração em {{path}} é inválido: {{message}}", @@ -458,8 +469,10 @@ export const dict = { "status.popover.tab.plugins": "Plugins", "status.popover.action.manageServers": "Gerenciar servidores", "session.share.popover.title": "Publicar na web", - "session.share.popover.description.shared": "Esta sessão é pública na web. Está acessível para qualquer pessoa com o link.", - "session.share.popover.description.unshared": "Compartilhar sessão publicamente na web. Estará acessível para qualquer pessoa com o link.", + "session.share.popover.description.shared": + "Esta sessão é pública na web. Está acessível para qualquer pessoa com o link.", + "session.share.popover.description.unshared": + "Compartilhar sessão publicamente na web. Estará acessível para qualquer pessoa com o link.", "session.share.action.share": "Compartilhar", "session.share.action.publish": "Publicar", "session.share.action.publishing": "Publicando...", @@ -476,7 +489,8 @@ export const dict = { "terminal.title.numbered": "Terminal {{number}}", "terminal.close": "Fechar terminal", "terminal.connectionLost.title": "Conexão Perdida", - "terminal.connectionLost.description": "A conexão do terminal foi interrompida. Isso pode acontecer quando o servidor reinicia.", + "terminal.connectionLost.description": + "A conexão do terminal foi interrompida. Isso pode acontecer quando o servidor reinicia.", "common.closeTab": "Fechar aba", "common.dismiss": "Descartar", "common.requestFailed": "Requisição falhou", @@ -524,9 +538,10 @@ export const dict = { "settings.general.row.font.description": "Personalize a fonte monoespaçada usada em blocos de código", "settings.general.row.wayland.title": "Usar Wayland nativo", "settings.general.row.wayland.description": "Desabilitar fallback X11 no Wayland. Requer reinicialização.", - "settings.general.row.wayland.tooltip": "No Linux com monitores de taxas de atualização mistas, Wayland nativo pode ser mais estável.", + "settings.general.row.wayland.tooltip": + "No Linux com monitores de taxas de atualização mistas, Wayland nativo pode ser mais estável.", "settings.general.row.releaseNotes.title": "Notas da versão", - "settings.general.row.releaseNotes.description": "Mostrar pop-ups de \"Novidades\" após atualizações", + "settings.general.row.releaseNotes.description": 'Mostrar pop-ups de "Novidades" após atualizações', "settings.updates.row.startup.title": "Verificar atualizações ao iniciar", "settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o OpenCode iniciar", "settings.updates.row.check.title": "Verificar atualizações", @@ -593,9 +608,11 @@ export const dict = { "sound.option.yup05": "Sim 05", "sound.option.yup06": "Sim 06", "settings.general.notifications.agent.title": "Agente", - "settings.general.notifications.agent.description": "Mostrar notificação do sistema quando o agente estiver completo ou precisar de atenção", + "settings.general.notifications.agent.description": + "Mostrar notificação do sistema quando o agente estiver completo ou precisar de atenção", "settings.general.notifications.permissions.title": "Permissões", - "settings.general.notifications.permissions.description": "Mostrar notificação do sistema quando uma permissão for necessária", + "settings.general.notifications.permissions.description": + "Mostrar notificação do sistema quando uma permissão for necessária", "settings.general.notifications.errors.title": "Erros", "settings.general.notifications.errors.description": "Mostrar notificação do sistema quando ocorrer um erro", "settings.general.sounds.agent.title": "Agente", @@ -647,7 +664,8 @@ export const dict = { "settings.permissions.tool.read.title": "Ler", "settings.permissions.tool.read.description": "Ler um arquivo (corresponde ao caminho do arquivo)", "settings.permissions.tool.edit.title": "Editar", - "settings.permissions.tool.edit.description": "Modificar arquivos, incluindo edições, escritas, patches e multi-edições", + "settings.permissions.tool.edit.description": + "Modificar arquivos, incluindo edições, escritas, patches e multi-edições", "settings.permissions.tool.glob.title": "Glob", "settings.permissions.tool.glob.description": "Corresponder arquivos usando padrões glob", "settings.permissions.tool.grep.title": "Grep", @@ -678,7 +696,7 @@ export const dict = { "settings.permissions.tool.doom_loop.description": "Detectar chamadas de ferramentas repetidas com entrada idêntica", "session.delete.failed.title": "Falha ao excluir sessão", "session.delete.title": "Excluir sessão", - "session.delete.confirm": "Excluir sessão \"{{name}}\"?", + "session.delete.confirm": 'Excluir sessão "{{name}}"?', "session.delete.button": "Excluir sessão", "workspace.new": "Novo espaço de trabalho", "workspace.type.local": "local", @@ -696,14 +714,13 @@ export const dict = { "workspace.status.clean": "Nenhuma alteração não mesclada detectada.", "workspace.status.dirty": "Alterações não mescladas detectadas neste espaço de trabalho.", "workspace.delete.title": "Excluir espaço de trabalho", - "workspace.delete.confirm": "Excluir espaço de trabalho \"{{name}}\"?", + "workspace.delete.confirm": 'Excluir espaço de trabalho "{{name}}"?', "workspace.delete.button": "Excluir espaço de trabalho", "workspace.reset.title": "Redefinir espaço de trabalho", - "workspace.reset.confirm": "Redefinir espaço de trabalho \"{{name}}\"?", + "workspace.reset.confirm": 'Redefinir espaço de trabalho "{{name}}"?', "workspace.reset.button": "Redefinir espaço de trabalho", "workspace.reset.archived.none": "Nenhuma sessão ativa será arquivada.", "workspace.reset.archived.one": "1 sessão será arquivada.", "workspace.reset.archived.many": "{{count}} sessões serão arquivadas.", "workspace.reset.note": "Isso redefinirá o espaço de trabalho para corresponder ao branch padrão.", } - diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index d2f6bd860fec..99a950631074 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -114,25 +114,30 @@ export const dict = { "provider.connect.status.inProgress": "Autorisierung läuft...", "provider.connect.status.waiting": "Warten auf Autorisierung...", "provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}", - "provider.connect.apiKey.description": "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.apiKey.description": + "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", "provider.connect.apiKey.label": "{{provider}} API-Schlüssel", "provider.connect.apiKey.placeholder": "API-Schlüssel", "provider.connect.apiKey.required": "API-Schlüssel ist erforderlich", - "provider.connect.opencodeZen.line1": "OpenCode Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", - "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.line1": + "OpenCode Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", + "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", - "provider.connect.oauth.code.visit.suffix": ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.code.visit.suffix": + ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", "provider.connect.oauth.code.label": "{{method}} Autorisierungscode", "provider.connect.oauth.code.placeholder": "Autorisierungscode", "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", "provider.connect.oauth.code.invalid": "Ungültiger Autorisierungscode", "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", "provider.connect.oauth.auto.visit.link": "diesen Link", - "provider.connect.oauth.auto.visit.suffix": " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.auto.visit.suffix": + " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", "provider.connect.toast.connected.title": "{{provider}} verbunden", "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", @@ -149,7 +154,8 @@ export const dict = { "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", "provider.custom.field.apiKey.label": "API-Schlüssel", "provider.custom.field.apiKey.placeholder": "API-Schlüssel", - "provider.custom.field.apiKey.description": "Optional. Leer lassen, wenn Sie die Authentifizierung über Header verwalten.", + "provider.custom.field.apiKey.description": + "Optional. Leer lassen, wenn Sie die Authentifizierung über Header verwalten.", "provider.custom.models.label": "Modelle", "provider.custom.models.id.label": "ID", "provider.custom.models.id.placeholder": "model-id", @@ -204,7 +210,7 @@ export const dict = { "common.default": "Standard", "common.attachment": "Anhang", "prompt.placeholder.shell": "Shell-Befehl eingeben...", - "prompt.placeholder.normal": "Fragen Sie alles... \"{{example}}\"", + "prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"', "prompt.placeholder.summarizeComments": "Kommentare zusammenfassen…", "prompt.placeholder.summarizeComment": "Kommentar zusammenfassen…", "prompt.mode.shell": "Shell", @@ -252,7 +258,8 @@ export const dict = { "prompt.toast.pasteUnsupported.title": "Nicht unterstütztes Einfügen", "prompt.toast.pasteUnsupported.description": "Hier können nur Bilder oder PDFs eingefügt werden.", "prompt.toast.modelAgentRequired.title": "Wählen Sie einen Agenten und ein Modell", - "prompt.toast.modelAgentRequired.description": "Wählen Sie einen Agenten und ein Modell, bevor Sie eine Eingabe senden.", + "prompt.toast.modelAgentRequired.description": + "Wählen Sie einen Agenten und ein Modell, bevor Sie eine Eingabe senden.", "prompt.toast.worktreeCreateFailed.title": "Worktree konnte nicht erstellt werden", "prompt.toast.sessionCreateFailed.title": "Sitzung konnte nicht erstellt werden", "prompt.toast.shellSendFailed.title": "Shell-Befehl konnte nicht gesendet werden", @@ -282,7 +289,8 @@ export const dict = { "dialog.server.add.checking": "Prüfen...", "dialog.server.add.button": "Server hinzufügen", "dialog.server.default.title": "Standardserver", - "dialog.server.default.description": "Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Erfordert Neustart.", + "dialog.server.default.description": + "Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Erfordert Neustart.", "dialog.server.default.none": "Kein Server ausgewählt", "dialog.server.default.set": "Aktuellen Server als Standard setzen", "dialog.server.default.clear": "Löschen", @@ -302,10 +310,12 @@ 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.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.", + "context.breakdown.note": + 'Ungefähre Aufschlüsselung der Eingabe-Token. "Andere" beinhaltet Werkzeugdefinitionen und Overhead.', "context.breakdown.system": "System", "context.breakdown.user": "Benutzer", "context.breakdown.assistant": "Assistent", @@ -392,7 +402,8 @@ export const dict = { "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem OpenCode-Team", "error.page.report.discord": "auf Discord", "error.page.version": "Version: {{version}}", - "error.dev.rootNotFound": "Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das id-Attribut falsch geschrieben?", + "error.dev.rootNotFound": + "Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das id-Attribut falsch geschrieben?", "error.globalSync.connectFailed": "Verbindung zum Server fehlgeschlagen. Läuft ein Server unter `{{url}}`?", "directory.error.invalidUrl": "Ungültiges Verzeichnis in der URL.", "error.chain.unknown": "Unbekannter Fehler", @@ -404,12 +415,16 @@ export const dict = { "error.chain.didYouMean": "Meinten Sie: {{suggestions}}", "error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}", "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen", - "error.chain.mcpFailed": "MCP-Server \"{{name}}\" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.", + "error.chain.mcpFailed": + 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.', "error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}", - "error.chain.providerInitFailed": "Anbieter \"{{provider}}\" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.", + "error.chain.providerInitFailed": + 'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.', "error.chain.configJsonInvalid": "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C): {{message}}", - "error.chain.configDirectoryTypo": "Verzeichnis \"{{dir}}\" in {{path}} ist ungültig. Benennen Sie das Verzeichnis in \"{{suggestion}}\" um oder entfernen Sie es. Dies ist ein häufiger Tippfehler.", + "error.chain.configJsonInvalidWithMessage": + "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Verzeichnis "{{dir}}" in {{path}} ist ungültig. Benennen Sie das Verzeichnis in "{{suggestion}}" um oder entfernen Sie es. Dies ist ein häufiger Tippfehler.', "error.chain.configFrontmatterError": "Frontmatter in {{path}} konnte nicht geparst werden:\n{{message}}", "error.chain.configInvalid": "Konfigurationsdatei unter {{path}} ist ungültig", "error.chain.configInvalidWithMessage": "Konfigurationsdatei unter {{path}} ist ungültig: {{message}}", @@ -462,8 +477,10 @@ export const dict = { "status.popover.tab.plugins": "Plugins", "status.popover.action.manageServers": "Server verwalten", "session.share.popover.title": "Im Web veröffentlichen", - "session.share.popover.description.shared": "Diese Sitzung ist öffentlich im Web. Sie ist für jeden mit dem Link zugänglich.", - "session.share.popover.description.unshared": "Sitzung öffentlich im Web teilen. Sie wird für jeden mit dem Link zugänglich sein.", + "session.share.popover.description.shared": + "Diese Sitzung ist öffentlich im Web. Sie ist für jeden mit dem Link zugänglich.", + "session.share.popover.description.unshared": + "Sitzung öffentlich im Web teilen. Sie wird für jeden mit dem Link zugänglich sein.", "session.share.action.share": "Teilen", "session.share.action.publish": "Veröffentlichen", "session.share.action.publishing": "Veröffentliche...", @@ -480,7 +497,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.", + "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", @@ -502,7 +520,8 @@ export const dict = { "sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren", "sidebar.gettingStarted.title": "Erste Schritte", "sidebar.gettingStarted.line1": "OpenCode enthält kostenlose Modelle, damit Sie sofort loslegen können.", - "sidebar.gettingStarted.line2": "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", + "sidebar.gettingStarted.line2": + "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", "sidebar.project.recentSessions": "Letzte Sitzungen", "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen", "app.name.desktop": "OpenCode Desktop", @@ -528,9 +547,10 @@ export const dict = { "settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen", "settings.general.row.wayland.title": "Natives Wayland verwenden", "settings.general.row.wayland.description": "X11-Fallback unter Wayland deaktivieren. Erfordert Neustart.", - "settings.general.row.wayland.tooltip": "Unter Linux mit Monitoren unterschiedlicher Bildwiederholraten kann natives Wayland stabiler sein.", + "settings.general.row.wayland.tooltip": + "Unter Linux mit Monitoren unterschiedlicher Bildwiederholraten kann natives Wayland stabiler sein.", "settings.general.row.releaseNotes.title": "Versionshinweise", - "settings.general.row.releaseNotes.description": "\"Neuigkeiten\"-Pop-ups nach Updates anzeigen", + "settings.general.row.releaseNotes.description": '"Neuigkeiten"-Pop-ups nach Updates anzeigen', "settings.updates.row.startup.title": "Beim Start nach Updates suchen", "settings.updates.row.startup.description": "Beim Start von OpenCode automatisch nach Updates suchen", "settings.updates.row.check.title": "Nach Updates suchen", @@ -597,9 +617,11 @@ export const dict = { "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", + "settings.general.notifications.agent.description": + "Systembenachrichtigung anzeigen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt", "settings.general.notifications.permissions.title": "Berechtigungen", - "settings.general.notifications.permissions.description": "Systembenachrichtigung anzeigen, wenn eine Berechtigung erforderlich ist", + "settings.general.notifications.permissions.description": + "Systembenachrichtigung anzeigen, wenn eine Berechtigung erforderlich ist", "settings.general.notifications.errors.title": "Fehler", "settings.general.notifications.errors.description": "Systembenachrichtigung anzeigen, wenn ein Fehler auftritt", "settings.general.sounds.agent.title": "Agent", @@ -651,7 +673,8 @@ export const dict = { "settings.permissions.tool.read.title": "Lesen", "settings.permissions.tool.read.description": "Lesen einer Datei (stimmt mit dem Dateipfad überein)", "settings.permissions.tool.edit.title": "Bearbeiten", - "settings.permissions.tool.edit.description": "Dateien ändern, einschließlich Bearbeitungen, Schreibvorgängen, Patches und Mehrfachbearbeitungen", + "settings.permissions.tool.edit.description": + "Dateien ändern, einschließlich Bearbeitungen, Schreibvorgängen, Patches und Mehrfachbearbeitungen", "settings.permissions.tool.glob.title": "Glob", "settings.permissions.tool.glob.description": "Dateien mithilfe von Glob-Mustern abgleichen", "settings.permissions.tool.grep.title": "Grep", @@ -682,7 +705,7 @@ export const dict = { "settings.permissions.tool.doom_loop.description": "Wiederholte Tool-Aufrufe mit identischer Eingabe erkennen", "session.delete.failed.title": "Sitzung konnte nicht gelöscht werden", "session.delete.title": "Sitzung löschen", - "session.delete.confirm": "Sitzung \"{{name}}\" löschen?", + "session.delete.confirm": 'Sitzung "{{name}}" löschen?', "session.delete.button": "Sitzung löschen", "workspace.new": "Neuer Arbeitsbereich", "workspace.type.local": "lokal", @@ -700,13 +723,13 @@ export const dict = { "workspace.status.clean": "Keine nicht zusammengeführten Änderungen erkannt.", "workspace.status.dirty": "Nicht zusammengeführte Änderungen in diesem Arbeitsbereich erkannt.", "workspace.delete.title": "Arbeitsbereich löschen", - "workspace.delete.confirm": "Arbeitsbereich \"{{name}}\" löschen?", + "workspace.delete.confirm": 'Arbeitsbereich "{{name}}" löschen?', "workspace.delete.button": "Arbeitsbereich löschen", "workspace.reset.title": "Arbeitsbereich zurücksetzen", - "workspace.reset.confirm": "Arbeitsbereich \"{{name}}\" zurücksetzen?", + "workspace.reset.confirm": 'Arbeitsbereich "{{name}}" zurücksetzen?', "workspace.reset.button": "Arbeitsbereich zurücksetzen", "workspace.reset.archived.none": "Keine aktiven Sitzungen werden archiviert.", "workspace.reset.archived.one": "1 Sitzung wird archiviert.", "workspace.reset.archived.many": "{{count}} Sitzungen werden archiviert.", - "workspace.reset.note": "Dadurch wird der Arbeitsbereich auf den Standard-Branch zurückgesetzt." + "workspace.reset.note": "Dadurch wird der Arbeitsbereich auf den Standard-Branch zurückgesetzt.", } satisfies Partial> diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index c429f48a6b9a..983c9c14ac1b 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -110,25 +110,30 @@ export const dict = { "provider.connect.status.inProgress": "Autoryzacja w toku...", "provider.connect.status.waiting": "Oczekiwanie na autoryzację...", "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", - "provider.connect.apiKey.description": "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.apiKey.description": + "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", "provider.connect.apiKey.label": "Klucz API {{provider}}", "provider.connect.apiKey.placeholder": "Klucz API", "provider.connect.apiKey.required": "Klucz API jest wymagany", - "provider.connect.opencodeZen.line1": "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", - "provider.connect.opencodeZen.line2": "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", + "provider.connect.opencodeZen.line1": + "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", + "provider.connect.opencodeZen.line2": + "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", "provider.connect.oauth.code.visit.prefix": "Odwiedź ", "provider.connect.oauth.code.visit.link": "ten link", - "provider.connect.oauth.code.visit.suffix": ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.code.visit.suffix": + ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", "provider.connect.oauth.code.invalid": "Nieprawidłowy kod autoryzacyjny", "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", "provider.connect.oauth.auto.visit.link": "ten link", - "provider.connect.oauth.auto.visit.suffix": " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.auto.visit.suffix": + " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", "provider.connect.toast.connected.title": "Połączono {{provider}}", "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", @@ -145,7 +150,8 @@ export const dict = { "provider.custom.field.baseURL.placeholder": "https://api.mojdostawca.com/v1", "provider.custom.field.apiKey.label": "Klucz API", "provider.custom.field.apiKey.placeholder": "Klucz API", - "provider.custom.field.apiKey.description": "Opcjonalne. Pozostaw puste, jeśli zarządzasz autoryzacją przez nagłówki.", + "provider.custom.field.apiKey.description": + "Opcjonalne. Pozostaw puste, jeśli zarządzasz autoryzacją przez nagłówki.", "provider.custom.models.label": "Modele", "provider.custom.models.id.label": "ID", "provider.custom.models.id.placeholder": "model-id", @@ -278,7 +284,8 @@ export const dict = { "dialog.server.add.checking": "Sprawdzanie...", "dialog.server.add.button": "Dodaj serwer", "dialog.server.default.title": "Domyślny serwer", - "dialog.server.default.description": "Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.", + "dialog.server.default.description": + "Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.", "dialog.server.default.none": "Nie wybrano serwera", "dialog.server.default.set": "Ustaw bieżący serwer jako domyślny", "dialog.server.default.clear": "Wyczyść", @@ -388,7 +395,8 @@ export const dict = { "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode", "error.page.report.discord": "na Discordzie", "error.page.version": "Wersja: {{version}}", - "error.dev.rootNotFound": "Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?", + "error.dev.rootNotFound": + "Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?", "error.globalSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{url}}`?", "directory.error.invalidUrl": "Nieprawidłowy katalog w URL.", "error.chain.unknown": "Nieznany błąd", @@ -402,10 +410,12 @@ export const dict = { "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, OpenCode does not support MCP authentication yet.', "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", - "error.chain.providerInitFailed": 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', + "error.chain.providerInitFailed": + 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', "error.chain.configJsonInvalid": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C)", "error.chain.configJsonInvalidWithMessage": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C): {{message}}", - "error.chain.configDirectoryTypo": 'Katalog "{{dir}}" w {{path}} jest nieprawidłowy. Zmień nazwę katalogu na "{{suggestion}}" lub usuń go. To częsta literówka.', + "error.chain.configDirectoryTypo": + 'Katalog "{{dir}}" w {{path}} jest nieprawidłowy. Zmień nazwę katalogu na "{{suggestion}}" lub usuń go. To częsta literówka.', "error.chain.configFrontmatterError": "Nie udało się przetworzyć frontmatter w {{path}}:\n{{message}}", "error.chain.configInvalid": "Plik konfiguracyjny w {{path}} jest nieprawidłowy", "error.chain.configInvalidWithMessage": "Plik konfiguracyjny w {{path}} jest nieprawidłowy: {{message}}", @@ -458,8 +468,10 @@ export const dict = { "status.popover.tab.plugins": "Wtyczki", "status.popover.action.manageServers": "Zarządzaj serwerami", "session.share.popover.title": "Opublikuj w sieci", - "session.share.popover.description.shared": "Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.", - "session.share.popover.description.unshared": "Udostępnij sesję publicznie w sieci. Będzie dostępna dla każdego, kto posiada link.", + "session.share.popover.description.shared": + "Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.", + "session.share.popover.description.unshared": + "Udostępnij sesję publicznie w sieci. Będzie dostępna dla każdego, kto posiada link.", "session.share.action.share": "Udostępnij", "session.share.action.publish": "Opublikuj", "session.share.action.publishing": "Publikowanie...", @@ -476,7 +488,8 @@ export const dict = { "terminal.title.numbered": "Terminal {{number}}", "terminal.close": "Zamknij terminal", "terminal.connectionLost.title": "Utracono połączenie", - "terminal.connectionLost.description": "Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.", + "terminal.connectionLost.description": + "Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.", "common.closeTab": "Zamknij kartę", "common.dismiss": "Odrzuć", "common.requestFailed": "Żądanie nie powiodło się", @@ -524,7 +537,8 @@ export const dict = { "settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu", "settings.general.row.wayland.title": "Użyj natywnego Wayland", "settings.general.row.wayland.description": "Wyłącz fallback X11 na Wayland. Wymaga restartu.", - "settings.general.row.wayland.tooltip": "Na Linuxie z monitorami o różnym odświeżaniu, natywny Wayland może być bardziej stabilny.", + "settings.general.row.wayland.tooltip": + "Na Linuxie z monitorami o różnym odświeżaniu, natywny Wayland może być bardziej stabilny.", "settings.general.row.releaseNotes.title": "Informacje o wydaniu", "settings.general.row.releaseNotes.description": 'Pokazuj wyskakujące okna "Co nowego" po aktualizacjach', "settings.updates.row.startup.title": "Sprawdzaj aktualizacje przy uruchomieniu", @@ -593,9 +607,11 @@ export const dict = { "sound.option.yup05": "Yup 05", "sound.option.yup06": "Yup 06", "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": "Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi", + "settings.general.notifications.agent.description": + "Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi", "settings.general.notifications.permissions.title": "Uprawnienia", - "settings.general.notifications.permissions.description": "Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie", + "settings.general.notifications.permissions.description": + "Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie", "settings.general.notifications.errors.title": "Błędy", "settings.general.notifications.errors.description": "Pokaż powiadomienie systemowe, gdy wystąpi błąd", "settings.general.sounds.agent.title": "Agent", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index b991bd13f10a..1b40013b60de 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -147,7 +147,8 @@ export const dict = { "provider.connect.status.inProgress": "正在授权...", "provider.connect.status.waiting": "等待授权...", "provider.connect.status.failed": "授权失败:{{error}}", - "provider.connect.apiKey.description": "输入你的 {{provider}} API 密钥以连接帐户,并在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.apiKey.description": + "输入你的 {{provider}} API 密钥以连接帐户,并在 OpenCode 中使用 {{provider}} 模型。", "provider.connect.apiKey.label": "{{provider}} API 密钥", "provider.connect.apiKey.placeholder": "API 密钥", "provider.connect.apiKey.required": "API 密钥为必填项", @@ -242,7 +243,7 @@ export const dict = { "common.attachment": "附件", "prompt.placeholder.shell": "输入 shell 命令...", - "prompt.placeholder.normal": "随便问点什么... \"{{example}}\"", + "prompt.placeholder.normal": '随便问点什么... "{{example}}"', "prompt.placeholder.summarizeComments": "总结评论…", "prompt.placeholder.summarizeComment": "总结该评论…", "prompt.mode.shell": "Shell", @@ -456,12 +457,13 @@ export const dict = { "error.chain.didYouMean": "你是不是想输入:{{suggestions}}", "error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}", "error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称", - "error.chain.mcpFailed": "MCP 服务器 \"{{name}}\" 启动失败。注意: OpenCode 暂不支持 MCP 认证。", + "error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: OpenCode 暂不支持 MCP 认证。', "error.chain.providerAuthFailed": "提供商认证失败({{provider}}):{{message}}", - "error.chain.providerInitFailed": "无法初始化提供商 \"{{provider}}\"。请检查凭据和配置。", + "error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。', "error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)", "error.chain.configJsonInvalidWithMessage": "配置文件 {{path}} 不是有效的 JSON(C):{{message}}", - "error.chain.configDirectoryTypo": "{{path}} 中的目录 \"{{dir}}\" 无效。请将目录重命名为 \"{{suggestion}}\" 或移除它。这是一个常见拼写错误。", + "error.chain.configDirectoryTypo": + '{{path}} 中的目录 "{{dir}}" 无效。请将目录重命名为 "{{suggestion}}" 或移除它。这是一个常见拼写错误。', "error.chain.configFrontmatterError": "无法解析 {{path}} 中的 frontmatter:\n{{message}}", "error.chain.configInvalid": "配置文件 {{path}} 无效", "error.chain.configInvalidWithMessage": "配置文件 {{path}} 无效:{{message}}", @@ -761,7 +763,7 @@ export const dict = { "session.delete.failed.title": "删除会话失败", "session.delete.title": "删除会话", - "session.delete.confirm": "删除会话 \"{{name}}\"?", + "session.delete.confirm": '删除会话 "{{name}}"?', "session.delete.button": "删除会话", "workspace.new": "新建工作区", @@ -780,10 +782,10 @@ export const dict = { "workspace.status.clean": "未检测到未合并的更改。", "workspace.status.dirty": "检测到未合并的更改。", "workspace.delete.title": "删除工作区", - "workspace.delete.confirm": "删除工作区 \"{{name}}\"?", + "workspace.delete.confirm": '删除工作区 "{{name}}"?', "workspace.delete.button": "删除工作区", "workspace.reset.title": "重置工作区", - "workspace.reset.confirm": "重置工作区 \"{{name}}\"?", + "workspace.reset.confirm": '重置工作区 "{{name}}"?', "workspace.reset.button": "重置工作区", "workspace.reset.archived.none": "不会归档任何活跃会话。", "workspace.reset.archived.one": "将归档 1 个会话。", From 9741a507d90b42113c4708cb718654579cf03ac6 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 11 Feb 2026 17:04:17 +0100 Subject: [PATCH 2/5] fix: workspace --- packages/app/src/pages/layout.tsx | 10 ++++++++++ packages/app/src/utils/persist.ts | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 13d15bdce29f..0c8dce1504af 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1203,6 +1203,16 @@ export default function Layout(props: ParentProps) { if (!result) return + globalSync.set( + "project", + produce((draft) => { + const project = draft.find((item) => item.worktree === root) + if (!project) return + project.sandboxes = (project.sandboxes ?? []).filter((sandbox) => sandbox !== directory) + }), + ) + setStore("workspaceOrder", root, (order) => (order ?? []).filter((workspace) => workspace !== directory)) + layout.projects.close(directory) layout.projects.open(root) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 57e01d86a9d6..22ee685877e8 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -319,8 +319,14 @@ export const Persist = { } export function removePersisted(target: { storage?: string; key: string }) { - const platform = usePlatform() - const isDesktop = platform.platform === "desktop" && !!platform.storage + const platform = (() => { + try { + return usePlatform() + } catch { + return undefined + } + })() + const isDesktop = platform?.platform === "desktop" && !!platform.storage if (isDesktop) { return platform.storage?.(target.storage)?.removeItem(target.key) From 5ddb4caf6bcb87de458522d82dcd2ef7ee662f81 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 11 Feb 2026 17:28:46 +0100 Subject: [PATCH 3/5] move to param --- packages/app/src/context/layout.tsx | 6 ++++-- packages/app/src/context/terminal.tsx | 11 ++++++++--- packages/app/src/pages/layout.tsx | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index 8d9c865f8495..4019b2f29dad 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -4,6 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { useGlobalSync } from "./global-sync" import { useGlobalSDK } from "./global-sdk" import { useServer } from "./server" +import { usePlatform } from "./platform" import { Project } from "@opencode-ai/sdk/v2" import { Persist, persisted, removePersisted } from "@/utils/persist" import { same } from "@/utils/same" @@ -90,6 +91,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const globalSdk = useGlobalSDK() const globalSync = useGlobalSync() const server = useServer() + const platform = usePlatform() const isRecord = (value: unknown): value is Record => typeof value === "object" && value !== null && !Array.isArray(value) @@ -200,10 +202,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( for (const entry of SESSION_STATE_KEYS) { const target = session ? Persist.session(dir, session, entry.key) : Persist.workspace(dir, entry.key) - void removePersisted(target) + void removePersisted(target, platform) const legacyKey = `${dir}/${entry.legacy}${session ? "/" + session : ""}.${entry.version}` - void removePersisted({ key: legacyKey }) + void removePersisted({ key: legacyKey }, platform) } } } diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index d00c792e0532..24dac577f02c 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -3,6 +3,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" import { useSDK } from "./sdk" +import type { Platform } from "./platform" import { Persist, persisted, removePersisted } from "@/utils/persist" export type LocalPTY = { @@ -37,14 +38,18 @@ type TerminalCacheEntry = { const caches = new Set>() -export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) { +export function clearWorkspaceTerminals( + dir: string, + sessionIDs?: string[], + platform?: Pick, +) { const key = getWorkspaceTerminalCacheKey(dir) for (const cache of caches) { const entry = cache.get(key) entry?.value.clear() } - removePersisted(Persist.workspace(dir, "terminal")) + removePersisted(Persist.workspace(dir, "terminal"), platform) const legacy = new Set(getLegacyTerminalStorageKeys(dir)) for (const id of sessionIDs ?? []) { @@ -53,7 +58,7 @@ export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) { } } for (const key of legacy) { - removePersisted({ key }) + removePersisted({ key }, platform) } } diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 0c8dce1504af..1513752f051e 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1240,6 +1240,7 @@ export default function Layout(props: ParentProps) { clearWorkspaceTerminals( directory, sessions.map((s) => s.id), + platform, ) await globalSDK.client.instance.dispose({ directory }).catch(() => undefined) From b795c89644fc01686cdef3221c746bdd557d0a56 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 11 Feb 2026 17:42:17 +0100 Subject: [PATCH 4/5] cleanup --- packages/app/src/utils/persist.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 22ee685877e8..a4365dd6fc08 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -1,4 +1,4 @@ -import { usePlatform } from "@/context/platform" +import { Platform, usePlatform } from "@/context/platform" import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage" import { checksum } from "@opencode-ai/util/encode" import { createResource, type Accessor } from "solid-js" @@ -318,14 +318,7 @@ export const Persist = { }, } -export function removePersisted(target: { storage?: string; key: string }) { - const platform = (() => { - try { - return usePlatform() - } catch { - return undefined - } - })() +export function removePersisted(target: { storage?: string; key: string }, platform?: Pick) { const isDesktop = platform?.platform === "desktop" && !!platform.storage if (isDesktop) { From d7b158f60753e2270c4a80625f935f50b2feb4a7 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 11 Feb 2026 17:44:14 +0100 Subject: [PATCH 5/5] normal type --- packages/app/src/context/terminal.tsx | 2 +- packages/app/src/utils/persist.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index 24dac577f02c..144bef284087 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -41,7 +41,7 @@ const caches = new Set>() export function clearWorkspaceTerminals( dir: string, sessionIDs?: string[], - platform?: Pick, + platform?: Platform, ) { const key = getWorkspaceTerminalCacheKey(dir) for (const cache of caches) { diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index a4365dd6fc08..91c504742a94 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -318,7 +318,7 @@ export const Persist = { }, } -export function removePersisted(target: { storage?: string; key: string }, platform?: Pick) { +export function removePersisted(target: { storage?: string; key: string }, platform?: Platform) { const isDesktop = platform?.platform === "desktop" && !!platform.storage if (isDesktop) {