feat(app): sync product translations (#35856)

This commit is contained in:
Luke Parker 2026-07-08 14:57:28 +10:00 committed by GitHub
parent 6cfe4bc34f
commit 77429f5982
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
42 changed files with 3790 additions and 83 deletions

View file

@ -19,6 +19,7 @@
"prepare": "husky",
"random": "echo 'Random script'",
"sso": "aws sso login --sso-session=opencode --no-browser",
"translate:app": "bun run script/translate-app.ts",
"test": "echo 'do not run tests from root' && exit 1"
},
"workspaces": {

View file

@ -21,6 +21,9 @@ export const dict = {
"theme.scheme.dark": "داكن",
"command.sidebar.toggle": "تبديل الشريط الجانبي",
"command.project.open": "فتح مشروع",
"command.project.previous": "المشروع السابق",
"command.project.next": "المشروع التالي",
"command.project.index": "التبديل إلى المشروع {{index}}",
"command.provider.connect": "اتصال بموفر",
"command.server.switch": "تبديل الخادم",
"command.settings.open": "فتح الإعدادات",
@ -39,6 +42,7 @@ export const dict = {
"command.session.new": "جلسة جديدة",
"command.file.open": "فتح ملف",
"command.tab.close": "إغلاق علامة التبويب",
"command.tab.reopenClosed": "إعادة فتح علامة التبويب المغلقة",
"command.context.addSelection": "إضافة التحديد إلى السياق",
"command.context.addSelection.description": "إضافة الأسطر المحددة من الملف الحالي",
"command.input.focus": "التركيز على حقل الإدخال",
@ -193,6 +197,11 @@ export const dict = {
"model.input.video": "فيديو",
"model.input.pdf": "pdf",
"model.tooltip.allows": "يسمح: {{inputs}}",
"model.tooltip.context.label": "السياق",
"model.tooltip.inputs": "المدخلات",
"model.tooltip.model": "النموذج",
"model.tooltip.provider": "الموفر",
"model.tooltip.reasoning": "الاستنتاج",
"model.tooltip.reasoning.allowed": "يسمح بالاستنتاج",
"model.tooltip.reasoning.none": "بدون استنتاج",
"model.tooltip.context": "حد السياق {{limit}}",
@ -202,6 +211,7 @@ export const dict = {
"common.loading": "جارٍ التحميل",
"common.loading.ellipsis": "...",
"common.cancel": "إلغاء",
"common.clear": "مسح",
"common.connect": "اتصال",
"common.disconnect": "قطع الاتصال",
"common.continue": "إرسال",
@ -218,6 +228,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc للخروج",
"session.child.promptDisabled": "لا يمكن إرسال موجّهات إلى جلسات الوكلاء الفرعيين.",
"session.child.backToParent": "العودة إلى الجلسة الرئيسية.",
"prompt.example.1": "إصلاح TODO في قاعدة التعليمات البرمجية",
"prompt.example.2": "ما هو المكدس التقني لهذا المشروع؟",
"prompt.example.3": "إصلاح الاختبارات المعطلة",
@ -314,6 +326,74 @@ export const dict = {
"dialog.server.menu.delete": "حذف",
"dialog.server.current": "الخادم الحالي",
"dialog.server.status.default": "افتراضي",
"wsl.server.add": "إضافة خادم WSL",
"wsl.server.addShort": "إضافة WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "خادم WSL",
"wsl.server.retryStart": "إعادة محاولة التشغيل",
"wsl.server.updating": "جارٍ التحديث...",
"wsl.onboarding.step.distro": "اختر توزيعة",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "جارٍ التحقق من WSL...",
"wsl.onboarding.restartRequired": "يحتاج Windows إلى إعادة التشغيل لإكمال تثبيت WSL.",
"wsl.onboarding.ready": "WSL جاهز.",
"wsl.onboarding.required": "يلزم WSL للمتابعة.",
"wsl.onboarding.checkingDistros": "جارٍ التحقق من التوزيعات...",
"wsl.onboarding.installingDistro": "جارٍ تثبيت {{distro}}...",
"wsl.onboarding.checkingDistro": "جارٍ التحقق من {{distro}}...",
"wsl.onboarding.listingDistros": "جارٍ سرد التوزيعات...",
"wsl.onboarding.distroReady": "{{distro}} جاهزة.",
"wsl.onboarding.distroNotInstalled": "لم يتم تثبيت {{distro}} بعد.",
"wsl.onboarding.openDistroOnce": "افتح {{distro}} مرة واحدة لإكمال الإعداد.",
"wsl.onboarding.finishingDistro": "جارٍ إكمال إعداد {{distro}}.",
"wsl.onboarding.pickDistro": "اختر توزيعة أو ثبّت واحدة أدناه.",
"wsl.onboarding.checkingOpencode": "جارٍ التحقق من OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "جارٍ التحقق من OpenCode في {{distro}}...",
"wsl.onboarding.updatingOpencode": "جارٍ تحديث OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "جارٍ تحديث OpenCode في {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "حدّث OpenCode في {{distro}}.",
"wsl.onboarding.updateOpencode": "تحديث OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode جاهز في {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode جاهز.",
"wsl.onboarding.installOpencodeIn": "ثبّت OpenCode في {{distro}}.",
"wsl.onboarding.installOpencode": "تثبيت OpenCode",
"wsl.onboarding.chooseDistroFirst": "اختر توزيعة أولاً.",
"wsl.onboarding.loadFailed": "فشل تحميل حالة WSL.",
"wsl.onboarding.loading": "جارٍ التحميل...",
"wsl.onboarding.installedDistros": "التوزيعات المثبتة",
"wsl.onboarding.checkAgain": "تحقق مجددًا",
"wsl.onboarding.distroStatus.ready": "جاهزة",
"wsl.onboarding.distroStatus.checking": "جارٍ التحقق...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode غير مثبت",
"wsl.onboarding.distroStatus.missingTools": "bash و curl مفقودان",
"wsl.onboarding.distroStatus.unsupported": "غير مدعومة · استخدم WSL 2",
"wsl.onboarding.needAnotherDistro": "هل تحتاج إلى توزيعة أخرى؟",
"wsl.onboarding.needAnotherDistroHint": "ثبّت توزيعة Linux من كتالوج WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL غير مثبت",
"wsl.onboarding.wslNotInstalled.description":
"يلزم WSL (نظام Windows الفرعي لـ Linux) قبل أن يتمكن OpenCode من إضافة خادم WSL",
"wsl.onboarding.wslUnavailable.title": "WSL غير متاح",
"wsl.onboarding.wslUnavailable.description": "تعذر على OpenCode التحقق من WSL على هذا الجهاز.",
"wsl.onboarding.installWsl": "تثبيت WSL",
"wsl.onboarding.windowsRestartRequired": "أعد تشغيل Windows لإكمال تثبيت WSL، ثم أعد فتح OpenCode.",
"wsl.onboarding.next": "التالي",
"wsl.onboarding.refresh": "تحديث",
"wsl.onboarding.allDistrosAdded": "تمت إضافة جميع التوزيعات المثبتة بالفعل.",
"wsl.onboarding.noDistros": "لم يتم اكتشاف أي توزيعات بعد.",
"wsl.onboarding.install": "تثبيت",
"wsl.onboarding.installing": "جارٍ التثبيت...",
"wsl.onboarding.installDistro": "تثبيت توزيعة",
"wsl.onboarding.searchDistros": "البحث عن توزيعات",
"wsl.onboarding.wsl2Required": "يلزم WSL 2.",
"wsl.onboarding.toolsRequired": "تحتاج هذه التوزيعة إلى bash و curl.",
"wsl.onboarding.openTerminal": "فتح المحطة الطرفية",
"wsl.onboarding.path": "المسار: {{path}}",
"wsl.onboarding.notFound": "غير موجود",
"wsl.onboarding.version": "الإصدار: {{version}}",
"wsl.onboarding.unknown": "غير معروف",
"wsl.onboarding.desktopVersion": "سطح المكتب {{version}}",
"wsl.onboarding.versionMismatch": "لا يتطابق الإصدار المثبت مع إصدار تطبيق سطح المكتب.",
"wsl.onboarding.adding": "جارٍ الإضافة...",
"dialog.project.edit.title": "تحرير المشروع",
"dialog.project.edit.name": "الاسم",
"dialog.project.edit.icon": "أيقونة",
@ -370,6 +450,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "لغة",
@ -406,10 +487,12 @@ export const dict = {
"toast.update.action.notYet": "ليس الآن",
"error.page.title": "حدث خطأ ما",
"error.page.description": "حدث خطأ أثناء تحميل التطبيق.",
"error.page.description.localServerStartup": "حدث خطأ أثناء بدء تشغيل الخادم المحلي.",
"error.page.details.label": "تفاصيل الخطأ",
"error.page.action.restart": "إعادة تشغيل",
"error.page.action.report": "الإبلاغ عن الخطأ",
"error.page.action.reported": "تم الإبلاغ عن الخطأ",
"error.page.action.exportLogs": "تصدير السجلات",
"error.page.action.checking": "جارٍ التحقق...",
"error.page.action.checkUpdates": "التحقق من وجود تحديثات",
"error.page.action.updateTo": "تحديث إلى {{version}}",
@ -450,16 +533,38 @@ export const dict = {
"home.recentProjects": "المشاريع الحديثة",
"home.empty.title": "لا توجد مشاريع حديثة",
"home.empty.description": "ابدأ بفتح مشروع محلي",
"home.title": "الرئيسية",
"home.projects": "المشاريع",
"home.project.add": "إضافة مشروع",
"home.recentlyClosed": "المغلقة مؤخرًا",
"home.server.collapse": "طي مشاريع الخادم",
"home.server.expand": "توسيع مشاريع الخادم",
"home.sessions.search.placeholder": "البحث في الجلسات",
"home.sessions.search.placeholder.scoped": "البحث في جلسات {{scope}}",
"home.sessions.search.sessions": "الجلسات",
"home.sessions.search.noResults": "لم يتم العثور على جلسات لـ {{query}}",
"home.sessions.empty": "لا يوجد شيء هنا بعد",
"home.sessions.empty.description": "أنشئ جلسة للبدء",
"home.sessions.group.today": "اليوم",
"home.sessions.group.yesterday": "أمس",
"home.sessions.group.older": "الأقدم",
"session.tab.session": "جلسة",
"session.tab.review": "مراجعة",
"session.tab.context": "سياق",
"session.tab.unknown": "جلسة غير معروفة",
"session.panel.reviewAndFiles": "المراجعة والملفات",
"session.error.notFound": "لا يمكن العثور على هذه الجلسة",
"session.error.notFound.description": "يشير هذا التبويب إلى جلسة لم تعد موجودة على هذا الخادم.",
"session.error.notFound.closeTab": "إغلاق علامة التبويب",
"session.error.serverConnection": "تعذر الاتصال بهذا الخادم",
"session.review.filesChanged": "تم تغيير {{count}} ملفات",
"session.review.change.one": "تغيير",
"session.review.change.other": "تغييرات",
"session.review.loadingChanges": "جارٍ تحميل التغييرات...",
"session.review.empty": "لا توجد تغييرات في هذه الجلسة بعد",
"session.review.noChanges": "لا توجد تغييرات",
"session.review.noUncommittedChanges": "لا توجد تغييرات غير مُودَعة بعد",
"session.review.noBranchChanges": "لا توجد تغييرات في الفرع بعد",
"session.review.noVcs": "لم يتم اكتشاف نظام التحكم في الإصدار Git، لن يتم عرض التغييرات",
"session.review.noSnapshot": "تم تعطيل تتبع اللقطات في التكوين، لذا فإن تغييرات الجلسة غير متوفرة",
"session.files.selectToOpen": "اختر ملفًا لفتحه",
@ -475,6 +580,10 @@ export const dict = {
"session.todo.title": "المهام",
"session.todo.collapse": "طي",
"session.todo.expand": "توسيع",
"session.question.minimize": "تصغير السؤال",
"session.question.restore": "استعادة السؤال",
"session.question.pending.one": "{{count}} سؤال معلق",
"session.question.pending.other": "الأسئلة المعلقة: {{count}}",
"session.followupDock.summary.one": "{{count}} رسالة في الانتظار",
"session.followupDock.summary.other": "{{count}} رسائل في الانتظار",
"session.followupDock.sendNow": "إرسال الآن",
@ -487,9 +596,16 @@ export const dict = {
"session.revertDock.expand": "توسيع الرسائل التي تم التراجع عنها",
"session.revertDock.restore": "استعادة الرسالة",
"session.new.title": "ابنِ أي شيء",
"session.new.project.new": "مشروع جديد",
"session.new.project.search": "البحث عن المشاريع",
"session.new.project.add": "إضافة مشروع",
"session.new.worktree.main": "الفرع الرئيسي",
"session.new.worktree.mainWithBranch": "الفرع الرئيسي ({{branch}})",
"session.new.worktree.create": "إنشاء شجرة عمل جديدة",
"session.new.workspace.runIn": "تشغيل الجلسة في",
"session.new.workspace.triggerLocal": "محلي",
"session.new.workspace.local": "المستودع المحلي",
"session.new.workspace.existing": "مساحة عمل…",
"session.new.lastModified": "آخر تعديل",
"session.header.search.placeholder": "بحث {{project}}",
"session.header.searchFiles": "بحث عن الملفات",
@ -550,6 +666,8 @@ export const dict = {
"sidebar.project.recentSessions": "الجلسات الحديثة",
"sidebar.project.viewAllSessions": "عرض جميع الجلسات",
"sidebar.project.clearNotifications": "مسح الإشعارات",
"sidebar.empty.title": "لا توجد مشاريع مفتوحة",
"sidebar.empty.description": "افتح مشروعًا للبدء",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "سطح المكتب",
"settings.section.server": "الخادم",
@ -559,6 +677,7 @@ export const dict = {
"settings.desktop.wsl.title": "تكامل WSL",
"settings.desktop.wsl.description": "تشغيل خادم OpenCode داخل WSL على Windows.",
"settings.general.section.appearance": "المظهر",
"settings.general.section.advanced": "متقدم",
"settings.general.section.notifications": "إشعارات النظام",
"settings.general.section.updates": "التحديثات",
"settings.general.section.sounds": "المؤثرات الصوتية",
@ -566,6 +685,11 @@ export const dict = {
"settings.general.section.display": "شاشة العرض",
"settings.general.row.language.title": "اللغة",
"settings.general.row.language.description": "تغيير لغة العرض لـ OpenCode",
"settings.general.row.shell.title": "Shell المحطة الطرفية",
"settings.general.row.shell.description":
"اختر shell المستخدم في المحطة الطرفية. تُستخدم واجهات shell المتوافقة أيضًا في استدعاءات أدوات الوكيل.",
"settings.general.row.shell.autoDefault": "تلقائي (افتراضي)",
"settings.general.row.shell.terminalOnly": "المحطة الطرفية فقط",
"settings.general.row.appearance.title": "المظهر",
"settings.general.row.appearance.description": "تخصيص كيفية ظهور OpenCode على جهازك",
"settings.general.row.colorScheme.title": "مخطط الألوان",
@ -574,14 +698,29 @@ export const dict = {
"settings.general.row.theme.description": "تخصيص سمة OpenCode.",
"settings.general.row.font.title": "خط الكود",
"settings.general.row.font.description": "خصّص الخط المستخدم في كتل التعليمات البرمجية",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "خط الطرفية",
"settings.general.row.terminalFont.description": "خصّص الخط المستخدم في الطرفية",
"settings.general.row.uiFont.title": "خط الواجهة",
"settings.general.row.uiFont.description": "خصّص الخط المستخدم في الواجهة بأكملها",
"settings.general.row.followup.title": "سلوك المتابعة",
"settings.general.row.followup.description": "اختر ما إذا كانت طلبات المتابعة توجه فورًا أو تنتظر في قائمة انتظار",
"settings.general.row.followup.option.queue": "قائمة انتظار",
"settings.general.row.followup.option.steer": "توجيه",
"settings.general.row.showFileTree.title": "شجرة الملفات",
"settings.general.row.showFileTree.description": "إظهار لوحة شجرة الملفات في الجلسات",
"settings.general.row.showNavigation.title": "عناصر التحكم في التنقل",
"settings.general.row.showNavigation.description": "إظهار زري الرجوع والتقدم في شريط عنوان سطح المكتب",
"settings.general.row.showSearch.title": "لوحة الأوامر",
"settings.general.row.showSearch.description": "إظهار زر البحث ولوحة الأوامر في شريط العنوان",
"settings.general.row.showTerminal.title": "المحطة الطرفية",
"settings.general.row.showTerminal.description": "إظهار زر المحطة الطرفية في شريط عنوان سطح المكتب",
"settings.general.row.showStatus.title": "حالة الخادم",
"settings.general.row.showStatus.description": "إظهار زر حالة الخادم في شريط العنوان",
"settings.general.row.mobileTitlebarBottom.title": "التنقل السفلي",
"settings.general.row.mobileTitlebarBottom.description":
"وضع شريط العنوان وعلامات تبويب الجلسات أسفل الشاشة على الأجهزة المحمولة",
"settings.general.row.showCustomAgents.title": "الوكلاء المخصصون",
"settings.general.row.showCustomAgents.description": "إظهار محدد الوكلاء في محرر الرسائل",
"settings.general.row.reasoningSummaries.title": "إظهار ملخصات الاستنتاج",
"settings.general.row.reasoningSummaries.description": "عرض ملخصات استنتاج النموذج في الشريط الزمني",
"settings.general.row.shellToolPartsExpanded.title": "توسيع أجزاء أداة shell",
@ -590,6 +729,11 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "توسيع أجزاء أداة edit",
"settings.general.row.editToolPartsExpanded.description":
"إظهار أجزاء أدوات edit و write و patch موسعة بشكل افتراضي في الشريط الزمني",
"settings.general.row.newLayoutDesigns.title": "التخطيط والتصاميم الجديدة",
"settings.general.row.newLayoutDesigns.description":
"تمكين التخطيط والصفحة الرئيسية ومحرر الرسائل وواجهة الجلسة المعاد تصميمها",
"settings.general.row.pinchZoom.title": "التكبير بإيماءة القرص",
"settings.general.row.pinchZoom.description": "السماح بإيماءة القرص على لوحة اللمس وإيماءة Ctrl-scroll للتكبير",
"settings.general.row.wayland.title": "استخدام Wayland الأصلي",
"settings.general.row.wayland.description": "تعطيل التراجع إلى X11 على Wayland. يتطلب إعادة التشغيل.",
"settings.general.row.wayland.tooltip":
@ -602,6 +746,8 @@ export const dict = {
"settings.updates.row.check.description": "التحقق يدويًا من التحديثات وتثبيتها إذا كانت متاحة",
"settings.updates.action.checkNow": "تحقق الآن",
"settings.updates.action.checking": "جارٍ التحقق...",
"settings.updates.action.downloading": "جارٍ التنزيل...",
"settings.updates.action.installing": "جارٍ التثبيت...",
"settings.updates.toast.latest.title": "أنت على آخر إصدار",
"settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من OpenCode.",
"sound.option.none": "بلا",

View file

@ -21,6 +21,9 @@ export const dict = {
"theme.scheme.dark": "Escuro",
"command.sidebar.toggle": "Alternar barra lateral",
"command.project.open": "Abrir projeto",
"command.project.previous": "Projeto anterior",
"command.project.next": "Próximo projeto",
"command.project.index": "Alternar para o projeto {{index}}",
"command.provider.connect": "Conectar provedor",
"command.server.switch": "Trocar servidor",
"command.settings.open": "Abrir configurações",
@ -39,6 +42,7 @@ export const dict = {
"command.session.new": "Nova sessão",
"command.file.open": "Abrir arquivo",
"command.tab.close": "Fechar aba",
"command.tab.reopenClosed": "Reabrir aba fechada",
"command.context.addSelection": "Adicionar seleção ao contexto",
"command.context.addSelection.description": "Adicionar as linhas selecionadas do arquivo atual",
"command.input.focus": "Focar entrada",
@ -193,6 +197,11 @@ export const dict = {
"model.input.video": "vídeo",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Permite: {{inputs}}",
"model.tooltip.context.label": "Contexto",
"model.tooltip.inputs": "Entradas",
"model.tooltip.model": "Modelo",
"model.tooltip.provider": "Provedor",
"model.tooltip.reasoning": "Raciocínio",
"model.tooltip.reasoning.allowed": "Permite raciocínio",
"model.tooltip.reasoning.none": "Sem raciocínio",
"model.tooltip.context": "Limite de contexto {{limit}}",
@ -202,6 +211,7 @@ export const dict = {
"common.loading": "Carregando",
"common.loading.ellipsis": "...",
"common.cancel": "Cancelar",
"common.clear": "Limpar",
"common.connect": "Conectar",
"common.disconnect": "Desconectar",
"common.continue": "Enviar",
@ -218,6 +228,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc para sair",
"session.child.promptDisabled": "Não é possível enviar prompts em sessões de subagentes.",
"session.child.backToParent": "Voltar à sessão principal.",
"prompt.example.1": "Corrigir um TODO no código",
"prompt.example.2": "Qual é a stack tecnológica deste projeto?",
"prompt.example.3": "Corrigir testes quebrados",
@ -314,6 +326,75 @@ export const dict = {
"dialog.server.menu.delete": "Excluir",
"dialog.server.current": "Servidor atual",
"dialog.server.status.default": "Padrão",
"wsl.server.add": "Adicionar servidor WSL",
"wsl.server.addShort": "Adicionar WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Servidor WSL",
"wsl.server.retryStart": "Tentar iniciar novamente",
"wsl.server.updating": "Atualizando...",
"wsl.onboarding.step.distro": "Escolher distribuição",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Verificando o WSL...",
"wsl.onboarding.restartRequired": "O Windows precisa ser reiniciado para concluir a instalação do WSL.",
"wsl.onboarding.ready": "O WSL está pronto.",
"wsl.onboarding.required": "O WSL é necessário para continuar.",
"wsl.onboarding.checkingDistros": "Verificando distribuições...",
"wsl.onboarding.installingDistro": "Instalando {{distro}}...",
"wsl.onboarding.checkingDistro": "Verificando {{distro}}...",
"wsl.onboarding.listingDistros": "Listando distribuições...",
"wsl.onboarding.distroReady": "{{distro}} está pronta.",
"wsl.onboarding.distroNotInstalled": "{{distro}} ainda não está instalada.",
"wsl.onboarding.openDistroOnce": "Abra {{distro}} uma vez para concluir a configuração.",
"wsl.onboarding.finishingDistro": "Concluindo a configuração de {{distro}}.",
"wsl.onboarding.pickDistro": "Escolha uma distribuição ou instale uma abaixo.",
"wsl.onboarding.checkingOpencode": "Verificando o OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Verificando o OpenCode em {{distro}}...",
"wsl.onboarding.updatingOpencode": "Atualizando o OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Atualizando o OpenCode em {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Atualize o OpenCode em {{distro}}.",
"wsl.onboarding.updateOpencode": "Atualizar o OpenCode",
"wsl.onboarding.opencodeReadyIn": "O OpenCode está pronto em {{distro}}.",
"wsl.onboarding.opencodeReady": "O OpenCode está pronto.",
"wsl.onboarding.installOpencodeIn": "Instale o OpenCode em {{distro}}.",
"wsl.onboarding.installOpencode": "Instalar o OpenCode",
"wsl.onboarding.chooseDistroFirst": "Escolha primeiro uma distribuição.",
"wsl.onboarding.loadFailed": "Falha ao carregar o estado do WSL.",
"wsl.onboarding.loading": "Carregando...",
"wsl.onboarding.installedDistros": "Distribuições instaladas",
"wsl.onboarding.checkAgain": "Verificar novamente",
"wsl.onboarding.distroStatus.ready": "Pronta",
"wsl.onboarding.distroStatus.checking": "Verificando...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode não instalado",
"wsl.onboarding.distroStatus.missingTools": "bash e curl ausentes",
"wsl.onboarding.distroStatus.unsupported": "Sem suporte · Use o WSL 2",
"wsl.onboarding.needAnotherDistro": "Precisa de outra distribuição?",
"wsl.onboarding.needAnotherDistroHint": "Instale uma distribuição Linux pelo catálogo do WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL não instalado",
"wsl.onboarding.wslNotInstalled.description":
"O WSL (Windows Subsystem for Linux) é necessário para que o OpenCode possa adicionar um servidor WSL",
"wsl.onboarding.wslUnavailable.title": "WSL indisponível",
"wsl.onboarding.wslUnavailable.description": "O OpenCode não conseguiu verificar o WSL neste computador.",
"wsl.onboarding.installWsl": "Instalar o WSL",
"wsl.onboarding.windowsRestartRequired":
"Reinicie o Windows para concluir a instalação do WSL e abra o OpenCode novamente.",
"wsl.onboarding.next": "Próximo",
"wsl.onboarding.refresh": "Atualizar",
"wsl.onboarding.allDistrosAdded": "Todas as distribuições instaladas já foram adicionadas.",
"wsl.onboarding.noDistros": "Nenhuma distribuição detectada ainda.",
"wsl.onboarding.install": "Instalar",
"wsl.onboarding.installing": "Instalando...",
"wsl.onboarding.installDistro": "Instalar distribuição",
"wsl.onboarding.searchDistros": "Buscar distribuições",
"wsl.onboarding.wsl2Required": "O WSL 2 é necessário.",
"wsl.onboarding.toolsRequired": "Esta distribuição precisa do bash e do curl.",
"wsl.onboarding.openTerminal": "Abrir terminal",
"wsl.onboarding.path": "Caminho: {{path}}",
"wsl.onboarding.notFound": "não encontrado",
"wsl.onboarding.version": "Versão: {{version}}",
"wsl.onboarding.unknown": "desconhecido",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "A versão instalada não corresponde à versão do aplicativo para desktop.",
"wsl.onboarding.adding": "Adicionando...",
"dialog.project.edit.title": "Editar projeto",
"dialog.project.edit.name": "Nome",
"dialog.project.edit.icon": "Ícone",
@ -371,6 +452,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Idioma",
@ -407,10 +489,12 @@ export const dict = {
"toast.update.action.notYet": "Agora não",
"error.page.title": "Algo deu errado",
"error.page.description": "Ocorreu um erro ao carregar a aplicação.",
"error.page.description.localServerStartup": "Ocorreu um erro ao iniciar o servidor local.",
"error.page.details.label": "Detalhes do Erro",
"error.page.action.restart": "Reiniciar",
"error.page.action.report": "Reportar erro",
"error.page.action.reported": "Erro reportado",
"error.page.action.exportLogs": "Exportar logs",
"error.page.action.checking": "Verificando...",
"error.page.action.checkUpdates": "Verificar atualizações",
"error.page.action.updateTo": "Atualizar para {{version}}",
@ -453,10 +537,30 @@ export const dict = {
"home.recentProjects": "Projetos recentes",
"home.empty.title": "Nenhum projeto recente",
"home.empty.description": "Comece abrindo um projeto local",
"home.title": "Início",
"home.projects": "Projetos",
"home.project.add": "Adicionar projeto",
"home.recentlyClosed": "Projetos fechados recentemente",
"home.server.collapse": "Recolher projetos do servidor",
"home.server.expand": "Expandir projetos do servidor",
"home.sessions.search.placeholder": "Buscar sessões",
"home.sessions.search.placeholder.scoped": "Buscar sessões em {{scope}}",
"home.sessions.search.sessions": "Sessões",
"home.sessions.search.noResults": "Nenhuma sessão encontrada para {{query}}",
"home.sessions.empty": "Nada por aqui ainda",
"home.sessions.empty.description": "Crie uma sessão para começar",
"home.sessions.group.today": "Hoje",
"home.sessions.group.yesterday": "Ontem",
"home.sessions.group.older": "Mais antigas",
"session.tab.session": "Sessão",
"session.tab.review": "Revisão",
"session.tab.context": "Contexto",
"session.tab.unknown": "Sessão desconhecida",
"session.panel.reviewAndFiles": "Revisão e arquivos",
"session.error.notFound": "Esta sessão não foi encontrada",
"session.error.notFound.description": "Esta aba aponta para uma sessão que não existe mais neste servidor.",
"session.error.notFound.closeTab": "Fechar aba",
"session.error.serverConnection": "Não é possível conectar a este servidor",
"session.review.filesChanged": "{{count}} Arquivos Alterados",
"session.review.change.one": "Alteração",
"session.review.change.other": "Alterações",
@ -466,6 +570,8 @@ export const dict = {
"session.review.noSnapshot":
"O rastreamento de snapshot está desabilitado na configuração, então as alterações da sessão estão indisponíveis",
"session.review.noChanges": "Sem alterações",
"session.review.noUncommittedChanges": "Ainda não há alterações sem commit",
"session.review.noBranchChanges": "Ainda não há alterações na branch",
"session.files.selectToOpen": "Selecione um arquivo para abrir",
"session.files.all": "Todos os arquivos",
"session.files.empty": "Nenhum arquivo",
@ -479,6 +585,10 @@ export const dict = {
"session.todo.title": "Tarefas",
"session.todo.collapse": "Recolher",
"session.todo.expand": "Expandir",
"session.question.minimize": "Minimizar pergunta",
"session.question.restore": "Restaurar pergunta",
"session.question.pending.one": "{{count}} pergunta pendente",
"session.question.pending.other": "{{count}} perguntas pendentes",
"session.followupDock.summary.one": "{{count}} mensagem na fila",
"session.followupDock.summary.other": "{{count}} mensagens na fila",
"session.followupDock.sendNow": "Enviar agora",
@ -491,9 +601,16 @@ export const dict = {
"session.revertDock.expand": "Expandir mensagens revertidas",
"session.revertDock.restore": "Restaurar mensagem",
"session.new.title": "Crie qualquer coisa",
"session.new.project.new": "Novo projeto",
"session.new.project.search": "Buscar projetos",
"session.new.project.add": "Adicionar projeto",
"session.new.worktree.main": "Branch principal",
"session.new.worktree.mainWithBranch": "Branch principal ({{branch}})",
"session.new.worktree.create": "Criar novo worktree",
"session.new.workspace.runIn": "Executar sessão em",
"session.new.workspace.triggerLocal": "Local",
"session.new.workspace.local": "Repositório local",
"session.new.workspace.existing": "Espaço de trabalho…",
"session.new.lastModified": "Última modificação",
"session.header.search.placeholder": "Buscar {{project}}",
"session.header.searchFiles": "Buscar arquivos",
@ -557,15 +674,18 @@ export const dict = {
"sidebar.project.recentSessions": "Sessões recentes",
"sidebar.project.viewAllSessions": "Ver todas as sessões",
"sidebar.project.clearNotifications": "Limpar notificações",
"sidebar.empty.title": "Nenhum projeto aberto",
"sidebar.empty.description": "Abra um projeto para começar",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Servidor",
"settings.tab.general": "Geral",
"settings.tab.shortcuts": "Atalhos",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL integration",
"settings.desktop.wsl.title": "Integração com WSL",
"settings.desktop.wsl.description": "Executar o servidor OpenCode dentro do WSL no Windows.",
"settings.general.section.appearance": "Aparência",
"settings.general.section.advanced": "Avançado",
"settings.general.section.notifications": "Notificações do sistema",
"settings.general.section.updates": "Atualizações",
"settings.general.section.sounds": "Efeitos sonoros",
@ -573,6 +693,11 @@ export const dict = {
"settings.general.section.display": "Tela",
"settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Alterar o idioma de exibição do OpenCode",
"settings.general.row.shell.title": "Shell do terminal",
"settings.general.row.shell.description":
"Escolha o shell usado no terminal. Os shells compatíveis também são usados nas chamadas de ferramentas do agente.",
"settings.general.row.shell.autoDefault": "Automático (Padrão)",
"settings.general.row.shell.terminalOnly": "somente no terminal",
"settings.general.row.appearance.title": "Aparência",
"settings.general.row.appearance.description": "Personalize como o OpenCode aparece no seu dispositivo",
"settings.general.row.colorScheme.title": "Esquema de cores",
@ -581,8 +706,8 @@ export const dict = {
"settings.general.row.theme.description": "Personalize como o OpenCode é tematizado.",
"settings.general.row.font.title": "Fonte de código",
"settings.general.row.font.description": "Personalize a fonte usada em blocos de código",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Fonte do terminal",
"settings.general.row.terminalFont.description": "Personalize a fonte usada no terminal",
"settings.general.row.uiFont.title": "Fonte da interface",
"settings.general.row.uiFont.description": "Personalize a fonte usada em toda a interface",
"settings.general.row.followup.title": "Comportamento de acompanhamento",
@ -590,6 +715,22 @@ export const dict = {
"Escolha se os prompts de acompanhamento orientam imediatamente ou esperam na fila",
"settings.general.row.followup.option.queue": "Fila",
"settings.general.row.followup.option.steer": "Orientar",
"settings.general.row.showFileTree.title": "Árvore de arquivos",
"settings.general.row.showFileTree.description": "Mostrar o painel da árvore de arquivos nas sessões",
"settings.general.row.showNavigation.title": "Controles de navegação",
"settings.general.row.showNavigation.description":
"Mostrar os botões de voltar e avançar na barra de título do desktop",
"settings.general.row.showSearch.title": "Paleta de comandos",
"settings.general.row.showSearch.description": "Mostrar o botão de busca e paleta de comandos na barra de título",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Mostrar o botão do terminal na barra de título do desktop",
"settings.general.row.showStatus.title": "Status do servidor",
"settings.general.row.showStatus.description": "Mostrar o botão de status do servidor na barra de título",
"settings.general.row.mobileTitlebarBottom.title": "Navegação inferior",
"settings.general.row.mobileTitlebarBottom.description":
"Posicionar a barra de título e as abas da sessão na parte inferior da tela em dispositivos móveis",
"settings.general.row.showCustomAgents.title": "Agentes personalizados",
"settings.general.row.showCustomAgents.description": "Mostrar o seletor de agentes na área de composição",
"settings.general.row.reasoningSummaries.title": "Mostrar resumos de raciocínio",
"settings.general.row.reasoningSummaries.description": "Exibir resumos de raciocínio do modelo na linha do tempo",
"settings.general.row.shellToolPartsExpanded.title": "Expandir partes da ferramenta shell",
@ -598,6 +739,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Expandir partes da ferramenta de edição",
"settings.general.row.editToolPartsExpanded.description":
"Mostrar partes das ferramentas de edição, escrita e patch expandidas por padrão na linha do tempo",
"settings.general.row.newLayoutDesigns.title": "Novo layout e design",
"settings.general.row.newLayoutDesigns.description":
"Ativar o layout, a página inicial, a área de composição e a interface de sessão reformulados",
"settings.general.row.pinchZoom.title": "Zoom com gesto de pinça",
"settings.general.row.pinchZoom.description":
"Permitir gestos de pinça no trackpad e de Ctrl+rolagem para aplicar zoom",
"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":
@ -610,6 +757,8 @@ export const dict = {
"settings.updates.row.check.description": "Verificar atualizações manualmente e instalar se houver",
"settings.updates.action.checkNow": "Verificar agora",
"settings.updates.action.checking": "Verificando...",
"settings.updates.action.downloading": "Baixando...",
"settings.updates.action.installing": "Instalando...",
"settings.updates.toast.latest.title": "Você está atualizado",
"settings.updates.toast.latest.description": "Você está usando a versão mais recente do OpenCode.",
"sound.option.none": "Nenhum",

View file

@ -23,6 +23,9 @@ export const dict = {
"command.sidebar.toggle": "Prikaži/sakrij bočnu traku",
"command.project.open": "Otvori projekat",
"command.project.previous": "Prethodni projekat",
"command.project.next": "Sljedeći projekat",
"command.project.index": "Prebaci na projekat {{index}}",
"command.provider.connect": "Poveži provajdera",
"command.server.switch": "Promijeni server",
"command.settings.open": "Otvori postavke",
@ -45,6 +48,7 @@ export const dict = {
"command.session.new": "Nova sesija",
"command.file.open": "Otvori datoteku",
"command.tab.close": "Zatvori karticu",
"command.tab.reopenClosed": "Ponovo otvori zatvorenu karticu",
"command.context.addSelection": "Dodaj odabir u kontekst",
"command.context.addSelection.description": "Dodaj odabrane linije iz trenutne datoteke",
"command.input.focus": "Fokusiraj polje za unos",
@ -209,6 +213,11 @@ export const dict = {
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Podržava: {{inputs}}",
"model.tooltip.context.label": "Kontekst",
"model.tooltip.inputs": "Ulazi",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Provajder",
"model.tooltip.reasoning": "Rasuđivanje",
"model.tooltip.reasoning.allowed": "Podržava rasuđivanje",
"model.tooltip.reasoning.none": "Bez rasuđivanja",
"model.tooltip.context": "Limit konteksta {{limit}}",
@ -219,6 +228,7 @@ export const dict = {
"common.loading": "Učitavanje",
"common.loading.ellipsis": "...",
"common.cancel": "Otkaži",
"common.clear": "Očisti",
"common.connect": "Poveži",
"common.disconnect": "Prekini vezu",
"common.continue": "Pošalji",
@ -236,6 +246,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc za izlaz",
"session.child.promptDisabled": "Sesijama podagenta nije moguće slati upite.",
"session.child.backToParent": "Nazad na glavnu sesiju.",
"prompt.example.1": "Popravi TODO u bazi koda",
"prompt.example.2": "Koji je tehnološki stack ovog projekta?",
@ -342,6 +354,75 @@ export const dict = {
"dialog.server.menu.delete": "Izbriši",
"dialog.server.current": "Trenutni server",
"dialog.server.status.default": "Podrazumijevano",
"wsl.server.add": "Dodaj WSL server",
"wsl.server.addShort": "Dodaj WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL server",
"wsl.server.retryStart": "Ponovi pokretanje",
"wsl.server.updating": "Ažuriranje...",
"wsl.onboarding.step.distro": "Odaberi distribuciju",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Provjera WSL-a...",
"wsl.onboarding.restartRequired": "Potrebno je ponovo pokrenuti Windows da bi se završila instalacija WSL-a.",
"wsl.onboarding.ready": "WSL je spreman.",
"wsl.onboarding.required": "WSL je potreban za nastavak.",
"wsl.onboarding.checkingDistros": "Provjera distribucija...",
"wsl.onboarding.installingDistro": "Instaliranje {{distro}}...",
"wsl.onboarding.checkingDistro": "Provjera {{distro}}...",
"wsl.onboarding.listingDistros": "Učitavanje liste distribucija...",
"wsl.onboarding.distroReady": "Distribucija {{distro}} je spremna.",
"wsl.onboarding.distroNotInstalled": "Distribucija {{distro}} još nije instalirana.",
"wsl.onboarding.openDistroOnce": "Otvori {{distro}} jednom da završiš postavljanje.",
"wsl.onboarding.finishingDistro": "Završavanje postavljanja za {{distro}}.",
"wsl.onboarding.pickDistro": "Odaberi distribuciju ili instaliraj jednu ispod.",
"wsl.onboarding.checkingOpencode": "Provjera OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Provjera OpenCode u distribuciji {{distro}}...",
"wsl.onboarding.updatingOpencode": "Ažuriranje OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Ažuriranje OpenCode u distribuciji {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Ažuriraj OpenCode u distribuciji {{distro}}.",
"wsl.onboarding.updateOpencode": "Ažuriraj OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode je spreman u distribuciji {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode je spreman.",
"wsl.onboarding.installOpencodeIn": "Instaliraj OpenCode u distribuciji {{distro}}.",
"wsl.onboarding.installOpencode": "Instaliraj OpenCode",
"wsl.onboarding.chooseDistroFirst": "Prvo odaberi distribuciju.",
"wsl.onboarding.loadFailed": "Nije uspjelo učitavanje WSL stanja.",
"wsl.onboarding.loading": "Učitavanje...",
"wsl.onboarding.installedDistros": "Instalirane distribucije",
"wsl.onboarding.checkAgain": "Provjeri ponovo",
"wsl.onboarding.distroStatus.ready": "Spremno",
"wsl.onboarding.distroStatus.checking": "Provjera...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode nije instaliran",
"wsl.onboarding.distroStatus.missingTools": "Nedostaju bash i curl",
"wsl.onboarding.distroStatus.unsupported": "Nije podržano · Koristi WSL 2",
"wsl.onboarding.needAnotherDistro": "Treba ti druga distribucija?",
"wsl.onboarding.needAnotherDistroHint": "Instaliraj Linux distribuciju iz WSL kataloga",
"wsl.onboarding.wslNotInstalled.title": "WSL nije instaliran",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) je potreban da bi OpenCode mogao dodati WSL server",
"wsl.onboarding.wslUnavailable.title": "WSL nije dostupan",
"wsl.onboarding.wslUnavailable.description": "OpenCode nije mogao provjeriti WSL na ovom uređaju.",
"wsl.onboarding.installWsl": "Instaliraj WSL",
"wsl.onboarding.windowsRestartRequired":
"Ponovo pokreni Windows da završiš instalaciju WSL-a, zatim ponovo otvori OpenCode.",
"wsl.onboarding.next": "Dalje",
"wsl.onboarding.refresh": "Osvježi",
"wsl.onboarding.allDistrosAdded": "Sve instalirane distribucije su već dodane.",
"wsl.onboarding.noDistros": "Još nema otkrivenih distribucija.",
"wsl.onboarding.install": "Instaliraj",
"wsl.onboarding.installing": "Instaliranje...",
"wsl.onboarding.installDistro": "Instaliraj distribuciju",
"wsl.onboarding.searchDistros": "Pretraži distribucije",
"wsl.onboarding.wsl2Required": "Potreban je WSL 2.",
"wsl.onboarding.toolsRequired": "Ovoj distribuciji su potrebni bash i curl.",
"wsl.onboarding.openTerminal": "Otvori terminal",
"wsl.onboarding.path": "Putanja: {{path}}",
"wsl.onboarding.notFound": "nije pronađeno",
"wsl.onboarding.version": "Verzija: {{version}}",
"wsl.onboarding.unknown": "nepoznato",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Instalirana verzija ne odgovara verziji desktop aplikacije.",
"wsl.onboarding.adding": "Dodavanje...",
"dialog.project.edit.title": "Uredi projekat",
"dialog.project.edit.name": "Naziv",
@ -405,6 +486,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -453,10 +535,12 @@ export const dict = {
"error.page.title": "Nešto je pošlo po zlu",
"error.page.description": "Došlo je do greške prilikom učitavanja aplikacije.",
"error.page.description.localServerStartup": "Došlo je do greške pri pokretanju lokalnog servera.",
"error.page.details.label": "Detalji greške",
"error.page.action.restart": "Restartuj",
"error.page.action.report": "Prijavi grešku",
"error.page.action.reported": "Greška prijavljena",
"error.page.action.exportLogs": "Izvezi logove",
"error.page.action.checking": "Provjera...",
"error.page.action.checkUpdates": "Provjeri ažuriranja",
"error.page.action.updateTo": "Ažuriraj na {{version}}",
@ -504,11 +588,31 @@ export const dict = {
"home.recentProjects": "Nedavni projekti",
"home.empty.title": "Nema nedavnih projekata",
"home.empty.description": "Kreni tako što ćeš otvoriti lokalni projekat",
"home.title": "Početna",
"home.projects": "Projekti",
"home.project.add": "Dodaj projekat",
"home.recentlyClosed": "Nedavno zatvoreni projekti",
"home.server.collapse": "Sažmi projekte servera",
"home.server.expand": "Proširi projekte servera",
"home.sessions.search.placeholder": "Pretraži sesije",
"home.sessions.search.placeholder.scoped": "Pretraži sesije u {{scope}}",
"home.sessions.search.sessions": "Sesije",
"home.sessions.search.noResults": "Nema pronađenih sesija za {{query}}",
"home.sessions.empty": "Ovdje još nema ničega",
"home.sessions.empty.description": "Kreiraj sesiju za početak",
"home.sessions.group.today": "Danas",
"home.sessions.group.yesterday": "Jučer",
"home.sessions.group.older": "Starije",
"session.tab.session": "Sesija",
"session.tab.review": "Pregled",
"session.tab.context": "Kontekst",
"session.tab.unknown": "Nepoznata sesija",
"session.panel.reviewAndFiles": "Pregled i datoteke",
"session.error.notFound": "Ova sesija nije pronađena",
"session.error.notFound.description": "Ova kartica upućuje na sesiju koja više ne postoji na ovom serveru.",
"session.error.notFound.closeTab": "Zatvori karticu",
"session.error.serverConnection": "Nije moguće povezati se s ovim serverom",
"session.review.filesChanged": "Izmijenjeno {{count}} datoteka",
"session.review.change.one": "Izmjena",
"session.review.change.other": "Izmjene",
@ -518,6 +622,8 @@ export const dict = {
"session.review.noSnapshot":
"Praćenje snimaka (snapshot) je onemogućeno u konfiguraciji, pa promjene sesije nisu dostupne",
"session.review.noChanges": "Nema izmjena",
"session.review.noUncommittedChanges": "Još nema nepotvrđenih promjena",
"session.review.noBranchChanges": "Još nema promjena na grani",
"session.files.selectToOpen": "Odaberi datoteku za otvaranje",
"session.files.all": "Sve datoteke",
@ -534,6 +640,10 @@ export const dict = {
"session.todo.title": "Zadaci",
"session.todo.collapse": "Sažmi",
"session.todo.expand": "Proširi",
"session.question.minimize": "Minimiziraj pitanje",
"session.question.restore": "Vrati pitanje",
"session.question.pending.one": "{{count}} pitanje na čekanju",
"session.question.pending.other": "{{count}} pitanja na čekanju",
"session.followupDock.summary.one": "{{count}} poruka na čekanju",
"session.followupDock.summary.other": "{{count}} poruka na čekanju",
"session.followupDock.sendNow": "Pošalji sada",
@ -547,9 +657,16 @@ export const dict = {
"session.revertDock.restore": "Vrati poruku",
"session.new.title": "Napravi bilo šta",
"session.new.project.new": "Novi projekat",
"session.new.project.search": "Pretraži projekte",
"session.new.project.add": "Dodaj projekat",
"session.new.worktree.main": "Glavna grana",
"session.new.worktree.mainWithBranch": "Glavna grana ({{branch}})",
"session.new.worktree.create": "Kreiraj novi worktree",
"session.new.workspace.runIn": "Pokreni sesiju u",
"session.new.workspace.triggerLocal": "Lokalno",
"session.new.workspace.local": "Lokalni repozitorij",
"session.new.workspace.existing": "Radni prostor…",
"session.new.lastModified": "Posljednja izmjena",
"session.header.search.placeholder": "Pretraži {{project}}",
@ -618,6 +735,8 @@ export const dict = {
"sidebar.project.recentSessions": "Nedavne sesije",
"sidebar.project.viewAllSessions": "Prikaži sve sesije",
"sidebar.project.clearNotifications": "Očisti obavijesti",
"sidebar.empty.title": "Nema otvorenih projekata",
"sidebar.empty.description": "Otvori projekat za početak",
"app.name.desktop": "OpenCode Desktop",
@ -630,6 +749,7 @@ export const dict = {
"settings.desktop.wsl.description": "Pokreni OpenCode server unutar WSL-a na Windowsu.",
"settings.general.section.appearance": "Izgled",
"settings.general.section.advanced": "Napredno",
"settings.general.section.notifications": "Sistemske obavijesti",
"settings.general.section.updates": "Ažuriranja",
"settings.general.section.sounds": "Zvučni efekti",
@ -638,6 +758,11 @@ export const dict = {
"settings.general.row.language.title": "Jezik",
"settings.general.row.language.description": "Promijeni jezik prikaza u OpenCode-u",
"settings.general.row.shell.title": "Shell terminala",
"settings.general.row.shell.description":
"Odaberi shell koji se koristi za terminal. Kompatibilni shellovi koriste se i za pozive alata agenta.",
"settings.general.row.shell.autoDefault": "Automatski (podrazumijevano)",
"settings.general.row.shell.terminalOnly": "samo terminal",
"settings.general.row.appearance.title": "Izgled",
"settings.general.row.appearance.description": "Prilagodi kako OpenCode izgleda na tvom uređaju",
"settings.general.row.colorScheme.title": "Šema boja",
@ -646,14 +771,30 @@ export const dict = {
"settings.general.row.theme.description": "Prilagodi temu OpenCode-a.",
"settings.general.row.font.title": "Font za kod",
"settings.general.row.font.description": "Prilagodi font koji se koristi u blokovima koda",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Font terminala",
"settings.general.row.terminalFont.description": "Prilagodite font koji se koristi u terminalu",
"settings.general.row.uiFont.title": "UI font",
"settings.general.row.uiFont.description": "Prilagodi font koji se koristi u cijelom interfejsu",
"settings.general.row.followup.title": "Ponašanje nadovezivanja",
"settings.general.row.followup.description": "Odaberi da li upiti nadovezivanja usmjeravaju odmah ili čekaju u redu",
"settings.general.row.followup.option.queue": "Red čekanja",
"settings.general.row.followup.option.steer": "Usmjeri",
"settings.general.row.showFileTree.title": "Stablo datoteka",
"settings.general.row.showFileTree.description": "Prikaži stablo datoteka u sesijama",
"settings.general.row.showNavigation.title": "Kontrole navigacije",
"settings.general.row.showNavigation.description":
"Prikaži dugmad za nazad i naprijed u naslovnoj traci desktop aplikacije",
"settings.general.row.showSearch.title": "Paleta komandi",
"settings.general.row.showSearch.description": "Prikaži dugme za pretragu i paletu komandi u naslovnoj traci",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Prikaži dugme terminala u naslovnoj traci desktop aplikacije",
"settings.general.row.showStatus.title": "Status servera",
"settings.general.row.showStatus.description": "Prikaži dugme statusa servera u naslovnoj traci",
"settings.general.row.mobileTitlebarBottom.title": "Donja navigacija",
"settings.general.row.mobileTitlebarBottom.description":
"Postavi naslovnu traku i kartice sesije na dno ekrana na mobilnim uređajima",
"settings.general.row.showCustomAgents.title": "Prilagođeni agenti",
"settings.general.row.showCustomAgents.description": "Prikaži izbor agenta u uređivaču poruke",
"settings.general.row.reasoningSummaries.title": "Prikaži sažetke rasuđivanja",
"settings.general.row.reasoningSummaries.description": "Prikaži sažetke rasuđivanja modela na vremenskoj traci",
@ -663,6 +804,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Proširi dijelove alata za uređivanje",
"settings.general.row.editToolPartsExpanded.description":
"Prikaži dijelove alata za uređivanje, pisanje i patch podrazumijevano proširene na vremenskoj traci",
"settings.general.row.newLayoutDesigns.title": "Novi raspored i dizajn",
"settings.general.row.newLayoutDesigns.description":
"Omogući redizajnirani raspored, početnu stranicu, uređivač poruke i interfejs sesije",
"settings.general.row.pinchZoom.title": "Zumiranje štipanjem",
"settings.general.row.pinchZoom.description":
"Dozvoli zumiranje gestom štipanja na dodirnoj ploči i pomoću Ctrl-pomjeranja",
"settings.general.row.wayland.title": "Koristi nativni Wayland",
"settings.general.row.wayland.description": "Onemogući X11 fallback na Waylandu. Zahtijeva restart.",
"settings.general.row.wayland.tooltip":
@ -677,6 +824,8 @@ export const dict = {
"settings.updates.row.check.description": "Ručno provjeri ažuriranja i instaliraj ako su dostupna",
"settings.updates.action.checkNow": "Provjeri sada",
"settings.updates.action.checking": "Provjera...",
"settings.updates.action.downloading": "Preuzimanje...",
"settings.updates.action.installing": "Instaliranje...",
"settings.updates.toast.latest.title": "Sve je ažurno",
"settings.updates.toast.latest.description": "Koristiš najnoviju verziju OpenCode-a.",
"sound.option.none": "Nijedan",

View file

@ -23,6 +23,9 @@ export const dict = {
"command.sidebar.toggle": "Skift sidebjælke",
"command.project.open": "Åbn projekt",
"command.project.previous": "Forrige projekt",
"command.project.next": "Næste projekt",
"command.project.index": "Skift til projekt {{index}}",
"command.provider.connect": "Tilslut udbyder",
"command.server.switch": "Skift server",
"command.settings.open": "Åbn indstillinger",
@ -45,6 +48,7 @@ export const dict = {
"command.session.new": "Ny session",
"command.file.open": "Åbn fil",
"command.tab.close": "Luk fane",
"command.tab.reopenClosed": "Åbn lukket fane igen",
"command.context.addSelection": "Tilføj markering til kontekst",
"command.context.addSelection.description": "Tilføj markerede linjer fra den aktuelle fil",
"command.input.focus": "Fokuser inputfelt",
@ -208,6 +212,11 @@ export const dict = {
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Tillader: {{inputs}}",
"model.tooltip.context.label": "Kontekst",
"model.tooltip.inputs": "Input",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Udbyder",
"model.tooltip.reasoning": "Tænkning",
"model.tooltip.reasoning.allowed": "Tillader tænkning",
"model.tooltip.reasoning.none": "Ingen tænkning",
"model.tooltip.context": "Kontekstgrænse {{limit}}",
@ -217,6 +226,7 @@ export const dict = {
"common.loading": "Indlæser",
"common.loading.ellipsis": "...",
"common.cancel": "Annuller",
"common.clear": "Ryd",
"common.connect": "Forbind",
"common.disconnect": "Frakobl",
"common.continue": "Indsend",
@ -234,6 +244,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc for at afslutte",
"session.child.promptDisabled": "Der kan ikke sendes prompts til underagentsessioner.",
"session.child.backToParent": "Tilbage til hovedsessionen.",
"prompt.example.1": "Ret en TODO i koden",
"prompt.example.2": "Hvad er teknologistakken for dette projekt?",
@ -340,6 +352,75 @@ export const dict = {
"dialog.server.menu.delete": "Slet",
"dialog.server.current": "Nuværende server",
"dialog.server.status.default": "Standard",
"wsl.server.add": "Tilføj WSL-server",
"wsl.server.addShort": "Tilføj WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-server",
"wsl.server.retryStart": "Prøv at starte igen",
"wsl.server.updating": "Opdaterer...",
"wsl.onboarding.step.distro": "Vælg distribution",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Tjekker WSL...",
"wsl.onboarding.restartRequired": "Windows skal genstartes for at fuldføre installationen af WSL.",
"wsl.onboarding.ready": "WSL er klar.",
"wsl.onboarding.required": "WSL er påkrævet for at fortsætte.",
"wsl.onboarding.checkingDistros": "Tjekker distributioner...",
"wsl.onboarding.installingDistro": "Installerer {{distro}}...",
"wsl.onboarding.checkingDistro": "Tjekker {{distro}}...",
"wsl.onboarding.listingDistros": "Henter liste over distributioner...",
"wsl.onboarding.distroReady": "{{distro}} er klar.",
"wsl.onboarding.distroNotInstalled": "{{distro}} er ikke installeret endnu.",
"wsl.onboarding.openDistroOnce": "Åbn {{distro}} én gang for at fuldføre opsætningen.",
"wsl.onboarding.finishingDistro": "Fuldfører opsætningen af {{distro}}.",
"wsl.onboarding.pickDistro": "Vælg en distribution, eller installer en nedenfor.",
"wsl.onboarding.checkingOpencode": "Tjekker OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Tjekker OpenCode i {{distro}}...",
"wsl.onboarding.updatingOpencode": "Opdaterer OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Opdaterer OpenCode i {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Opdater OpenCode i {{distro}}.",
"wsl.onboarding.updateOpencode": "Opdater OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode er klar i {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode er klar.",
"wsl.onboarding.installOpencodeIn": "Installer OpenCode i {{distro}}.",
"wsl.onboarding.installOpencode": "Installer OpenCode",
"wsl.onboarding.chooseDistroFirst": "Vælg først en distribution.",
"wsl.onboarding.loadFailed": "Kunne ikke indlæse WSL-status.",
"wsl.onboarding.loading": "Indlæser...",
"wsl.onboarding.installedDistros": "Installerede distributioner",
"wsl.onboarding.checkAgain": "Tjek igen",
"wsl.onboarding.distroStatus.ready": "Klar",
"wsl.onboarding.distroStatus.checking": "Tjekker...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode er ikke installeret",
"wsl.onboarding.distroStatus.missingTools": "Mangler bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Ikke understøttet · Brug WSL 2",
"wsl.onboarding.needAnotherDistro": "Har du brug for en anden distribution?",
"wsl.onboarding.needAnotherDistroHint": "Installer en Linux-distribution fra WSL-kataloget",
"wsl.onboarding.wslNotInstalled.title": "WSL er ikke installeret",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) er påkrævet, før OpenCode kan tilføje en WSL-server",
"wsl.onboarding.wslUnavailable.title": "WSL er ikke tilgængelig",
"wsl.onboarding.wslUnavailable.description": "OpenCode kunne ikke bekræfte WSL på denne maskine.",
"wsl.onboarding.installWsl": "Installer WSL",
"wsl.onboarding.windowsRestartRequired":
"Genstart Windows for at fuldføre installationen af WSL, og åbn derefter OpenCode igen.",
"wsl.onboarding.next": "Næste",
"wsl.onboarding.refresh": "Opdater",
"wsl.onboarding.allDistrosAdded": "Alle installerede distributioner er allerede tilføjet.",
"wsl.onboarding.noDistros": "Ingen distributioner fundet endnu.",
"wsl.onboarding.install": "Installer",
"wsl.onboarding.installing": "Installerer...",
"wsl.onboarding.installDistro": "Installer distribution",
"wsl.onboarding.searchDistros": "Søg efter distributioner",
"wsl.onboarding.wsl2Required": "WSL 2 er påkrævet.",
"wsl.onboarding.toolsRequired": "Denne distribution kræver bash og curl.",
"wsl.onboarding.openTerminal": "Åbn terminal",
"wsl.onboarding.path": "Sti: {{path}}",
"wsl.onboarding.notFound": "ikke fundet",
"wsl.onboarding.version": "Version: {{version}}",
"wsl.onboarding.unknown": "ukendt",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Den installerede version matcher ikke desktopappens version.",
"wsl.onboarding.adding": "Tilføjer...",
"dialog.project.edit.title": "Rediger projekt",
"dialog.project.edit.name": "Navn",
@ -403,6 +484,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -450,10 +532,12 @@ export const dict = {
"error.page.title": "Noget gik galt",
"error.page.description": "Der opstod en fejl under indlæsning af applikationen.",
"error.page.description.localServerStartup": "Der opstod en fejl under start af den lokale server.",
"error.page.details.label": "Fejldetaljer",
"error.page.action.restart": "Genstart",
"error.page.action.report": "Rapportér fejl",
"error.page.action.reported": "Fejl rapporteret",
"error.page.action.exportLogs": "Eksportér logfiler",
"error.page.action.checking": "Tjekker...",
"error.page.action.checkUpdates": "Tjek for opdateringer",
"error.page.action.updateTo": "Opdater til {{version}}",
@ -501,11 +585,31 @@ export const dict = {
"home.recentProjects": "Seneste projekter",
"home.empty.title": "Ingen seneste projekter",
"home.empty.description": "Kom i gang ved at åbne et lokalt projekt",
"home.title": "Hjem",
"home.projects": "Projekter",
"home.project.add": "Tilføj projekt",
"home.recentlyClosed": "Lukket for nylig",
"home.server.collapse": "Skjul serverprojekter",
"home.server.expand": "Udvid serverprojekter",
"home.sessions.search.placeholder": "Søg i sessioner",
"home.sessions.search.placeholder.scoped": "Søg i sessioner i {{scope}}",
"home.sessions.search.sessions": "Sessioner",
"home.sessions.search.noResults": "Ingen sessioner fundet for {{query}}",
"home.sessions.empty": "Intet her endnu",
"home.sessions.empty.description": "Opret en session for at komme i gang",
"home.sessions.group.today": "I dag",
"home.sessions.group.yesterday": "I går",
"home.sessions.group.older": "Ældre",
"session.tab.session": "Session",
"session.tab.review": "Gennemgang",
"session.tab.context": "Kontekst",
"session.tab.unknown": "Ukendt session",
"session.panel.reviewAndFiles": "Gennemgang og filer",
"session.error.notFound": "Denne session kan ikke findes",
"session.error.notFound.description": "Denne fane henviser til en session, der ikke længere findes på denne server.",
"session.error.notFound.closeTab": "Luk fane",
"session.error.serverConnection": "Kan ikke oprette forbindelse til denne server",
"session.review.filesChanged": "{{count}} Filer ændret",
"session.review.change.one": "Ændring",
"session.review.change.other": "Ændringer",
@ -515,6 +619,8 @@ export const dict = {
"session.review.noSnapshot":
"Snapshot-sporing er deaktiveret i konfigurationen, så sessionsændringer er ikke tilgængelige",
"session.review.noChanges": "Ingen ændringer",
"session.review.noUncommittedChanges": "Ingen ændringer uden commit endnu",
"session.review.noBranchChanges": "Ingen grenændringer endnu",
"session.files.selectToOpen": "Vælg en fil at åbne",
"session.files.all": "Alle filer",
"session.files.empty": "Ingen filer",
@ -529,6 +635,10 @@ export const dict = {
"session.todo.title": "Opgaver",
"session.todo.collapse": "Skjul",
"session.todo.expand": "Udvid",
"session.question.minimize": "Minimer spørgsmål",
"session.question.restore": "Gendan spørgsmål",
"session.question.pending.one": "{{count}} afventende spørgsmål",
"session.question.pending.other": "{{count}} afventende spørgsmål",
"session.followupDock.summary.one": "{{count}} besked i kø",
"session.followupDock.summary.other": "{{count}} beskeder i kø",
"session.followupDock.sendNow": "Send nu",
@ -542,9 +652,16 @@ export const dict = {
"session.revertDock.restore": "Gendan besked",
"session.new.title": "Byg hvad som helst",
"session.new.project.new": "Nyt projekt",
"session.new.project.search": "Søg efter projekter",
"session.new.project.add": "Tilføj projekt",
"session.new.worktree.main": "Hovedgren",
"session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})",
"session.new.worktree.create": "Opret nyt worktree",
"session.new.workspace.runIn": "Kør session i",
"session.new.workspace.triggerLocal": "Lokal",
"session.new.workspace.local": "Lokalt repository",
"session.new.workspace.existing": "Arbejdsområde…",
"session.new.lastModified": "Sidst ændret",
"session.header.search.placeholder": "Søg {{project}}",
@ -614,6 +731,8 @@ export const dict = {
"sidebar.project.recentSessions": "Seneste sessioner",
"sidebar.project.viewAllSessions": "Vis alle sessioner",
"sidebar.project.clearNotifications": "Ryd notifikationer",
"sidebar.empty.title": "Ingen åbne projekter",
"sidebar.empty.description": "Åbn et projekt for at komme i gang",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
@ -625,6 +744,7 @@ export const dict = {
"settings.desktop.wsl.description": "Kør OpenCode-serveren inde i WSL på Windows.",
"settings.general.section.appearance": "Udseende",
"settings.general.section.advanced": "Avanceret",
"settings.general.section.notifications": "Systemmeddelelser",
"settings.general.section.updates": "Opdateringer",
"settings.general.section.sounds": "Lydeffekter",
@ -633,6 +753,11 @@ export const dict = {
"settings.general.row.language.title": "Sprog",
"settings.general.row.language.description": "Ændr visningssproget for OpenCode",
"settings.general.row.shell.title": "Terminalshell",
"settings.general.row.shell.description":
"Vælg den shell, der bruges i din terminal. Kompatible shells bruges også til agentens værktøjskald.",
"settings.general.row.shell.autoDefault": "Automatisk (standard)",
"settings.general.row.shell.terminalOnly": "kun terminal",
"settings.general.row.appearance.title": "Udseende",
"settings.general.row.appearance.description": "Tilpas hvordan OpenCode ser ud på din enhed",
"settings.general.row.colorScheme.title": "Farveskema",
@ -641,14 +766,29 @@ export const dict = {
"settings.general.row.theme.description": "Tilpas hvordan OpenCode er temabestemt.",
"settings.general.row.font.title": "Kode-skrifttype",
"settings.general.row.font.description": "Tilpas skrifttypen, der bruges i kodeblokke",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Terminalskrifttype",
"settings.general.row.terminalFont.description": "Tilpas den skrifttype, der bruges i terminalen",
"settings.general.row.uiFont.title": "UI-skrifttype",
"settings.general.row.uiFont.description": "Tilpas skrifttypen, der bruges i hele brugerfladen",
"settings.general.row.followup.title": "Opfølgningsadfærd",
"settings.general.row.followup.description": "Vælg om opfølgende forespørgsler skal styre straks eller vente i kø",
"settings.general.row.followup.option.queue": "Kø",
"settings.general.row.followup.option.steer": "Styr",
"settings.general.row.showFileTree.title": "Filtræ",
"settings.general.row.showFileTree.description": "Vis filtræspanelet i sessioner",
"settings.general.row.showNavigation.title": "Navigationsknapper",
"settings.general.row.showNavigation.description": "Vis tilbage- og frem-knapperne i desktopappens titellinje",
"settings.general.row.showSearch.title": "Kommandopalette",
"settings.general.row.showSearch.description": "Vis knappen til søgning og kommandopaletten i titellinjen",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Vis terminalknappen i desktopappens titellinje",
"settings.general.row.showStatus.title": "Serverstatus",
"settings.general.row.showStatus.description": "Vis serverstatusknappen i titellinjen",
"settings.general.row.mobileTitlebarBottom.title": "Navigation nederst",
"settings.general.row.mobileTitlebarBottom.description":
"Placer titellinjen og sessionsfanerne nederst på skærmen på mobilenheder",
"settings.general.row.showCustomAgents.title": "Brugerdefinerede agenter",
"settings.general.row.showCustomAgents.description": "Vis agentvælgeren i promptfeltet",
"settings.general.row.reasoningSummaries.title": "Vis tænkeoversigter",
"settings.general.row.reasoningSummaries.description": "Vis model tænkeoversigter i tidslinjen",
@ -657,6 +797,11 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Udvid edit-værktøjsdele",
"settings.general.row.editToolPartsExpanded.description":
"Vis edit-, write- og patch-værktøjsdele udvidet som standard i tidslinjen",
"settings.general.row.newLayoutDesigns.title": "Nyt layout og design",
"settings.general.row.newLayoutDesigns.description":
"Aktivér det nydesignede layout, startsiden, promptfeltet og sessionsbrugerfladen",
"settings.general.row.pinchZoom.title": "Knib for at zoome",
"settings.general.row.pinchZoom.description": "Tillad knibebevægelser på pegefeltet og Ctrl-rulning for at zoome",
"settings.general.row.wayland.title": "Brug native Wayland",
"settings.general.row.wayland.description": "Deaktiver X11-fallback på Wayland. Kræver genstart.",
"settings.general.row.wayland.tooltip":
@ -671,6 +816,8 @@ export const dict = {
"settings.updates.row.check.description": "Tjek manuelt for opdateringer og installer, hvis tilgængelig",
"settings.updates.action.checkNow": "Tjek nu",
"settings.updates.action.checking": "Tjekker...",
"settings.updates.action.downloading": "Downloader...",
"settings.updates.action.installing": "Installerer...",
"settings.updates.toast.latest.title": "Du er opdateret",
"settings.updates.toast.latest.description": "Du kører den nyeste version af OpenCode.",

View file

@ -25,6 +25,9 @@ export const dict = {
"theme.scheme.dark": "Dunkel",
"command.sidebar.toggle": "Seitenleiste umschalten",
"command.project.open": "Projekt öffnen",
"command.project.previous": "Vorheriges Projekt",
"command.project.next": "Nächstes Projekt",
"command.project.index": "Zu Projekt {{index}} wechseln",
"command.provider.connect": "Anbieter verbinden",
"command.server.switch": "Server wechseln",
"command.settings.open": "Einstellungen öffnen",
@ -43,6 +46,7 @@ export const dict = {
"command.session.new": "Neue Sitzung",
"command.file.open": "Datei öffnen",
"command.tab.close": "Tab schließen",
"command.tab.reopenClosed": "Geschlossenen Tab wieder öffnen",
"command.context.addSelection": "Auswahl zum Kontext hinzufügen",
"command.context.addSelection.description": "Ausgewählte Zeilen aus der aktuellen Datei hinzufügen",
"command.input.focus": "Eingabefeld fokussieren",
@ -198,6 +202,11 @@ export const dict = {
"model.input.video": "Video",
"model.input.pdf": "PDF",
"model.tooltip.allows": "Erlaubt: {{inputs}}",
"model.tooltip.context.label": "Kontext",
"model.tooltip.inputs": "Eingaben",
"model.tooltip.model": "Modell",
"model.tooltip.provider": "Anbieter",
"model.tooltip.reasoning": "Reasoning",
"model.tooltip.reasoning.allowed": "Erlaubt Reasoning",
"model.tooltip.reasoning.none": "Kein Reasoning",
"model.tooltip.context": "Kontextlimit {{limit}}",
@ -207,6 +216,7 @@ export const dict = {
"common.loading": "Laden",
"common.loading.ellipsis": "...",
"common.cancel": "Abbrechen",
"common.clear": "Leeren",
"common.connect": "Verbinden",
"common.disconnect": "Trennen",
"common.continue": "Absenden",
@ -223,6 +233,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc zum Verlassen",
"session.child.promptDisabled": "Unteragenten-Sitzungen können keine Prompts erhalten.",
"session.child.backToParent": "Zurück zur Hauptsitzung.",
"prompt.example.1": "Ein TODO in der Codebasis beheben",
"prompt.example.2": "Was ist der Tech-Stack dieses Projekts?",
"prompt.example.3": "Fehlerhafte Tests beheben",
@ -320,6 +332,75 @@ export const dict = {
"dialog.server.menu.delete": "Löschen",
"dialog.server.current": "Aktueller Server",
"dialog.server.status.default": "Standard",
"wsl.server.add": "WSL-Server hinzufügen",
"wsl.server.addShort": "WSL hinzufügen",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-Server",
"wsl.server.retryStart": "Start erneut versuchen",
"wsl.server.updating": "Wird aktualisiert...",
"wsl.onboarding.step.distro": "Distribution auswählen",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL wird geprüft...",
"wsl.onboarding.restartRequired": "Windows muss neu gestartet werden, um die WSL-Installation abzuschließen.",
"wsl.onboarding.ready": "WSL ist bereit.",
"wsl.onboarding.required": "WSL ist erforderlich, um fortzufahren.",
"wsl.onboarding.checkingDistros": "Distributionen werden geprüft...",
"wsl.onboarding.installingDistro": "{{distro}} wird installiert...",
"wsl.onboarding.checkingDistro": "{{distro}} wird geprüft...",
"wsl.onboarding.listingDistros": "Distributionen werden aufgelistet...",
"wsl.onboarding.distroReady": "{{distro}} ist bereit.",
"wsl.onboarding.distroNotInstalled": "{{distro}} ist noch nicht installiert.",
"wsl.onboarding.openDistroOnce": "Öffnen Sie {{distro}} einmal, um die Einrichtung abzuschließen.",
"wsl.onboarding.finishingDistro": "Einrichtung von {{distro}} wird abgeschlossen.",
"wsl.onboarding.pickDistro": "Wählen Sie eine Distribution aus oder installieren Sie unten eine.",
"wsl.onboarding.checkingOpencode": "OpenCode wird geprüft...",
"wsl.onboarding.checkingOpencodeIn": "OpenCode in {{distro}} wird geprüft...",
"wsl.onboarding.updatingOpencode": "OpenCode wird aktualisiert...",
"wsl.onboarding.updatingOpencodeIn": "OpenCode in {{distro}} wird aktualisiert...",
"wsl.onboarding.updateOpencodeIn": "Aktualisieren Sie OpenCode in {{distro}}.",
"wsl.onboarding.updateOpencode": "OpenCode aktualisieren",
"wsl.onboarding.opencodeReadyIn": "OpenCode ist in {{distro}} bereit.",
"wsl.onboarding.opencodeReady": "OpenCode ist bereit.",
"wsl.onboarding.installOpencodeIn": "Installieren Sie OpenCode in {{distro}}.",
"wsl.onboarding.installOpencode": "OpenCode installieren",
"wsl.onboarding.chooseDistroFirst": "Wählen Sie zuerst eine Distribution aus.",
"wsl.onboarding.loadFailed": "WSL-Status konnte nicht geladen werden.",
"wsl.onboarding.loading": "Wird geladen...",
"wsl.onboarding.installedDistros": "Installierte Distributionen",
"wsl.onboarding.checkAgain": "Erneut prüfen",
"wsl.onboarding.distroStatus.ready": "Bereit",
"wsl.onboarding.distroStatus.checking": "Wird geprüft...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode nicht installiert",
"wsl.onboarding.distroStatus.missingTools": "Fehlend: bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Nicht unterstützt · WSL 2 verwenden",
"wsl.onboarding.needAnotherDistro": "Andere Distribution benötigt?",
"wsl.onboarding.needAnotherDistroHint": "Installieren Sie eine Linux-Distribution aus dem WSL-Katalog",
"wsl.onboarding.wslNotInstalled.title": "WSL nicht installiert",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) ist erforderlich, bevor OpenCode einen WSL-Server hinzufügen kann",
"wsl.onboarding.wslUnavailable.title": "WSL nicht verfügbar",
"wsl.onboarding.wslUnavailable.description": "OpenCode konnte WSL auf diesem Computer nicht überprüfen.",
"wsl.onboarding.installWsl": "WSL installieren",
"wsl.onboarding.windowsRestartRequired":
"Starten Sie Windows neu, um die WSL-Installation abzuschließen, und öffnen Sie dann OpenCode erneut.",
"wsl.onboarding.next": "Weiter",
"wsl.onboarding.refresh": "Aktualisieren",
"wsl.onboarding.allDistrosAdded": "Alle installierten Distributionen wurden bereits hinzugefügt.",
"wsl.onboarding.noDistros": "Noch keine Distributionen erkannt.",
"wsl.onboarding.install": "Installieren",
"wsl.onboarding.installing": "Wird installiert...",
"wsl.onboarding.installDistro": "Distribution installieren",
"wsl.onboarding.searchDistros": "Distributionen durchsuchen",
"wsl.onboarding.wsl2Required": "WSL 2 ist erforderlich.",
"wsl.onboarding.toolsRequired": "Diese Distribution benötigt bash und curl.",
"wsl.onboarding.openTerminal": "Terminal öffnen",
"wsl.onboarding.path": "Pfad: {{path}}",
"wsl.onboarding.notFound": "nicht gefunden",
"wsl.onboarding.version": "Version: {{version}}",
"wsl.onboarding.unknown": "unbekannt",
"wsl.onboarding.desktopVersion": "Desktop {{version}}",
"wsl.onboarding.versionMismatch": "Die installierte Version entspricht nicht der Version der Desktop-App.",
"wsl.onboarding.adding": "Wird hinzugefügt...",
"dialog.project.edit.title": "Projekt bearbeiten",
"dialog.project.edit.name": "Name",
"dialog.project.edit.icon": "Icon",
@ -378,6 +459,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Sprache",
@ -414,10 +496,12 @@ export const dict = {
"toast.update.action.notYet": "Noch nicht",
"error.page.title": "Etwas ist schiefgelaufen",
"error.page.description": "Beim Laden der Anwendung ist ein Fehler aufgetreten.",
"error.page.description.localServerStartup": "Beim Starten des lokalen Servers ist ein Fehler aufgetreten.",
"error.page.details.label": "Fehlerdetails",
"error.page.action.restart": "Neustart",
"error.page.action.report": "Fehler melden",
"error.page.action.reported": "Fehler gemeldet",
"error.page.action.exportLogs": "Protokolle exportieren",
"error.page.action.checking": "Prüfen...",
"error.page.action.checkUpdates": "Nach Updates suchen",
"error.page.action.updateTo": "Auf {{version}} aktualisieren",
@ -461,10 +545,31 @@ export const dict = {
"home.recentProjects": "Letzte Projekte",
"home.empty.title": "Keine letzten Projekte",
"home.empty.description": "Starten Sie, indem Sie ein lokales Projekt öffnen",
"home.title": "Startseite",
"home.projects": "Projekte",
"home.project.add": "Projekt hinzufügen",
"home.recentlyClosed": "Kürzlich geschlossen",
"home.server.collapse": "Serverprojekte einklappen",
"home.server.expand": "Serverprojekte ausklappen",
"home.sessions.search.placeholder": "Sitzungen durchsuchen",
"home.sessions.search.placeholder.scoped": "Sitzungen in {{scope}} durchsuchen",
"home.sessions.search.sessions": "Sitzungen",
"home.sessions.search.noResults": "Keine Sitzungen für {{query}} gefunden",
"home.sessions.empty": "Hier ist noch nichts",
"home.sessions.empty.description": "Erstellen Sie eine Sitzung, um loszulegen",
"home.sessions.group.today": "Heute",
"home.sessions.group.yesterday": "Gestern",
"home.sessions.group.older": "Älter",
"session.tab.session": "Sitzung",
"session.tab.review": "Überprüfung",
"session.tab.context": "Kontext",
"session.tab.unknown": "Unbekannte Sitzung",
"session.panel.reviewAndFiles": "Überprüfung und Dateien",
"session.error.notFound": "Diese Sitzung wurde nicht gefunden",
"session.error.notFound.description":
"Dieser Tab verweist auf eine Sitzung, die auf diesem Server nicht mehr existiert.",
"session.error.notFound.closeTab": "Tab schließen",
"session.error.serverConnection": "Verbindung zu diesem Server nicht möglich",
"session.review.filesChanged": "{{count}} Dateien geändert",
"session.review.change.one": "Änderung",
"session.review.change.other": "Änderungen",
@ -474,6 +579,8 @@ export const dict = {
"session.review.noSnapshot":
"Snapshot-Tracking ist in der Konfiguration deaktiviert, daher sind Sitzungsänderungen nicht verfügbar",
"session.review.noChanges": "Keine Änderungen",
"session.review.noUncommittedChanges": "Noch keine nicht committeten Änderungen",
"session.review.noBranchChanges": "Noch keine Branch-Änderungen",
"session.files.selectToOpen": "Datei zum Öffnen auswählen",
"session.files.all": "Alle Dateien",
"session.files.empty": "Keine Dateien",
@ -487,6 +594,10 @@ export const dict = {
"session.todo.title": "Aufgaben",
"session.todo.collapse": "Einklappen",
"session.todo.expand": "Ausklappen",
"session.question.minimize": "Frage minimieren",
"session.question.restore": "Frage wiederherstellen",
"session.question.pending.one": "{{count}} ausstehende Frage",
"session.question.pending.other": "{{count}} ausstehende Fragen",
"session.followupDock.summary.one": "{{count}} Nachricht in der Warteschlange",
"session.followupDock.summary.other": "{{count}} Nachrichten in der Warteschlange",
"session.followupDock.sendNow": "Jetzt senden",
@ -499,9 +610,16 @@ export const dict = {
"session.revertDock.expand": "Zurückgesetzte Nachrichten ausklappen",
"session.revertDock.restore": "Nachricht wiederherstellen",
"session.new.title": "Baue, was du willst",
"session.new.project.new": "Neues Projekt",
"session.new.project.search": "Projekte durchsuchen",
"session.new.project.add": "Projekt hinzufügen",
"session.new.worktree.main": "Haupt-Branch",
"session.new.worktree.mainWithBranch": "Haupt-Branch ({{branch}})",
"session.new.worktree.create": "Neuen Worktree erstellen",
"session.new.workspace.runIn": "Sitzung ausführen in",
"session.new.workspace.triggerLocal": "Lokal",
"session.new.workspace.local": "Lokales Repository",
"session.new.workspace.existing": "Arbeitsbereich…",
"session.new.lastModified": "Zuletzt geändert",
"session.header.search.placeholder": "{{project}} durchsuchen",
"session.header.searchFiles": "Dateien suchen",
@ -566,6 +684,8 @@ export const dict = {
"sidebar.project.recentSessions": "Letzte Sitzungen",
"sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen",
"sidebar.project.clearNotifications": "Benachrichtigungen löschen",
"sidebar.empty.title": "Keine Projekte geöffnet",
"sidebar.empty.description": "Öffnen Sie ein Projekt, um loszulegen",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Server",
@ -575,6 +695,7 @@ export const dict = {
"settings.desktop.wsl.title": "WSL-Integration",
"settings.desktop.wsl.description": "OpenCode-Server innerhalb von WSL unter Windows ausführen.",
"settings.general.section.appearance": "Erscheinungsbild",
"settings.general.section.advanced": "Erweitert",
"settings.general.section.notifications": "Systembenachrichtigungen",
"settings.general.section.updates": "Updates",
"settings.general.section.sounds": "Soundeffekte",
@ -582,6 +703,11 @@ export const dict = {
"settings.general.section.display": "Anzeige",
"settings.general.row.language.title": "Sprache",
"settings.general.row.language.description": "Die Anzeigesprache für OpenCode ändern",
"settings.general.row.shell.title": "Terminal-Shell",
"settings.general.row.shell.description":
"Wählen Sie die Shell für Ihr Terminal aus. Kompatible Shells werden auch für Tool-Aufrufe von Agenten verwendet.",
"settings.general.row.shell.autoDefault": "Automatisch (Standard)",
"settings.general.row.shell.terminalOnly": "nur Terminal",
"settings.general.row.appearance.title": "Erscheinungsbild",
"settings.general.row.appearance.description": "Anpassen, wie OpenCode auf Ihrem Gerät aussieht",
"settings.general.row.colorScheme.title": "Farbschema",
@ -591,8 +717,8 @@ export const dict = {
"settings.general.row.theme.description": "Das Thema von OpenCode anpassen.",
"settings.general.row.font.title": "Code-Schriftart",
"settings.general.row.font.description": "Die in Codeblöcken verwendete Schriftart anpassen",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Terminalschriftart",
"settings.general.row.terminalFont.description": "Passe die im Terminal verwendete Schriftart an",
"settings.general.row.uiFont.title": "UI-Schriftart",
"settings.general.row.uiFont.description": "Die im gesamten Interface verwendete Schriftart anpassen",
"settings.general.row.followup.title": "Verhalten bei Folgefragen",
@ -600,6 +726,23 @@ export const dict = {
"Wählen Sie, ob Folgefragen sofort steuern oder in einer Warteschlange warten",
"settings.general.row.followup.option.queue": "Warteschlange",
"settings.general.row.followup.option.steer": "Steuern",
"settings.general.row.showFileTree.title": "Dateibaum",
"settings.general.row.showFileTree.description": "Dateibaum in Sitzungen anzeigen",
"settings.general.row.showNavigation.title": "Navigationssteuerung",
"settings.general.row.showNavigation.description":
"Schaltflächen zum Vor- und Zurücknavigieren in der Desktop-Titelleiste anzeigen",
"settings.general.row.showSearch.title": "Befehlspalette",
"settings.general.row.showSearch.description":
"Schaltfläche für Suche und Befehlspalette in der Titelleiste anzeigen",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Terminal-Schaltfläche in der Desktop-Titelleiste anzeigen",
"settings.general.row.showStatus.title": "Serverstatus",
"settings.general.row.showStatus.description": "Serverstatus-Schaltfläche in der Titelleiste anzeigen",
"settings.general.row.mobileTitlebarBottom.title": "Navigation unten",
"settings.general.row.mobileTitlebarBottom.description":
"Titelleiste und Sitzungs-Tabs auf Mobilgeräten am unteren Bildschirmrand platzieren",
"settings.general.row.showCustomAgents.title": "Benutzerdefinierte Agenten",
"settings.general.row.showCustomAgents.description": "Agentenauswahl im Eingabebereich anzeigen",
"settings.general.row.reasoningSummaries.title": "Reasoning-Zusammenfassungen anzeigen",
"settings.general.row.reasoningSummaries.description":
"Zusammenfassungen des Modell-Reasonings in der Timeline anzeigen",
@ -609,6 +752,11 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Edit-Tool-Abschnitte ausklappen",
"settings.general.row.editToolPartsExpanded.description":
"Edit-, Write- und Patch-Tool-Abschnitte standardmäßig in der Timeline ausgeklappt anzeigen",
"settings.general.row.newLayoutDesigns.title": "Neues Layout und Design",
"settings.general.row.newLayoutDesigns.description":
"Neu gestaltetes Layout, Startseite, Eingabebereich und Sitzungsoberfläche aktivieren",
"settings.general.row.pinchZoom.title": "Zoom per Fingergeste",
"settings.general.row.pinchZoom.description": "Zoomen per Zwei-Finger- und Ctrl-Scroll-Geste erlauben",
"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":
@ -621,6 +769,8 @@ export const dict = {
"settings.updates.row.check.description": "Manuell nach Updates suchen und installieren, wenn verfügbar",
"settings.updates.action.checkNow": "Jetzt prüfen",
"settings.updates.action.checking": "Wird geprüft...",
"settings.updates.action.downloading": "Wird heruntergeladen...",
"settings.updates.action.installing": "Wird installiert...",
"settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand",
"settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.",
"sound.option.none": "Keine",

View file

@ -23,6 +23,9 @@ export const dict = {
"command.sidebar.toggle": "Alternar barra lateral",
"command.project.open": "Abrir proyecto",
"command.project.previous": "Proyecto anterior",
"command.project.next": "Siguiente proyecto",
"command.project.index": "Cambiar al proyecto {{index}}",
"command.provider.connect": "Conectar proveedor",
"command.server.switch": "Cambiar servidor",
"command.settings.open": "Abrir ajustes",
@ -45,6 +48,7 @@ export const dict = {
"command.session.new": "Nueva sesión",
"command.file.open": "Abrir archivo",
"command.tab.close": "Cerrar pestaña",
"command.tab.reopenClosed": "Reabrir pestaña cerrada",
"command.context.addSelection": "Añadir selección al contexto",
"command.context.addSelection.description": "Añadir las líneas seleccionadas del archivo actual",
"command.input.focus": "Enfocar entrada",
@ -208,6 +212,11 @@ export const dict = {
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Permite: {{inputs}}",
"model.tooltip.context.label": "Contexto",
"model.tooltip.inputs": "Entradas",
"model.tooltip.model": "Modelo",
"model.tooltip.provider": "Proveedor",
"model.tooltip.reasoning": "Razonamiento",
"model.tooltip.reasoning.allowed": "Permite razonamiento",
"model.tooltip.reasoning.none": "Sin razonamiento",
"model.tooltip.context": "Límite de contexto {{limit}}",
@ -218,6 +227,7 @@ export const dict = {
"common.loading": "Cargando",
"common.loading.ellipsis": "...",
"common.cancel": "Cancelar",
"common.clear": "Limpiar",
"common.connect": "Conectar",
"common.disconnect": "Desconectar",
"common.continue": "Enviar",
@ -235,6 +245,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc para salir",
"session.child.promptDisabled": "No se pueden enviar prompts a las sesiones de subagentes.",
"session.child.backToParent": "Volver a la sesión principal.",
"prompt.example.1": "Arreglar un TODO en el código",
"prompt.example.2": "¿Cuál es el stack tecnológico de este proyecto?",
@ -341,6 +353,75 @@ export const dict = {
"dialog.server.menu.delete": "Eliminar",
"dialog.server.current": "Servidor actual",
"dialog.server.status.default": "Predeterminado",
"wsl.server.add": "Añadir servidor WSL",
"wsl.server.addShort": "Añadir WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Servidor WSL",
"wsl.server.retryStart": "Reintentar el inicio",
"wsl.server.updating": "Actualizando...",
"wsl.onboarding.step.distro": "Elegir distribución",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Comprobando WSL...",
"wsl.onboarding.restartRequired": "Es necesario reiniciar Windows para terminar de instalar WSL.",
"wsl.onboarding.ready": "WSL está listo.",
"wsl.onboarding.required": "Se necesita WSL para continuar.",
"wsl.onboarding.checkingDistros": "Comprobando distribuciones...",
"wsl.onboarding.installingDistro": "Instalando {{distro}}...",
"wsl.onboarding.checkingDistro": "Comprobando {{distro}}...",
"wsl.onboarding.listingDistros": "Listando distribuciones...",
"wsl.onboarding.distroReady": "La distribución {{distro}} está lista.",
"wsl.onboarding.distroNotInstalled": "La distribución {{distro}} aún no está instalada.",
"wsl.onboarding.openDistroOnce": "Abre {{distro}} una vez para completar la configuración.",
"wsl.onboarding.finishingDistro": "Completando la configuración de {{distro}}.",
"wsl.onboarding.pickDistro": "Elige una distribución o instala una abajo.",
"wsl.onboarding.checkingOpencode": "Comprobando OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Comprobando OpenCode en {{distro}}...",
"wsl.onboarding.updatingOpencode": "Actualizando OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Actualizando OpenCode en {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Actualiza OpenCode en {{distro}}.",
"wsl.onboarding.updateOpencode": "Actualizar OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode está listo en {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode está listo.",
"wsl.onboarding.installOpencodeIn": "Instala OpenCode en {{distro}}.",
"wsl.onboarding.installOpencode": "Instalar OpenCode",
"wsl.onboarding.chooseDistroFirst": "Elige primero una distribución.",
"wsl.onboarding.loadFailed": "No se pudo cargar el estado de WSL.",
"wsl.onboarding.loading": "Cargando...",
"wsl.onboarding.installedDistros": "Distribuciones instaladas",
"wsl.onboarding.checkAgain": "Comprobar de nuevo",
"wsl.onboarding.distroStatus.ready": "Lista",
"wsl.onboarding.distroStatus.checking": "Comprobando...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode no está instalado",
"wsl.onboarding.distroStatus.missingTools": "Faltan bash y curl",
"wsl.onboarding.distroStatus.unsupported": "No compatible · Usa WSL 2",
"wsl.onboarding.needAnotherDistro": "¿Necesitas otra distribución?",
"wsl.onboarding.needAnotherDistroHint": "Instala una distribución de Linux desde el catálogo de WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL no está instalado",
"wsl.onboarding.wslNotInstalled.description":
"Se necesita WSL (Subsistema de Windows para Linux) para que OpenCode pueda añadir un servidor WSL",
"wsl.onboarding.wslUnavailable.title": "WSL no disponible",
"wsl.onboarding.wslUnavailable.description": "OpenCode no pudo comprobar WSL en este equipo.",
"wsl.onboarding.installWsl": "Instalar WSL",
"wsl.onboarding.windowsRestartRequired":
"Reinicia Windows para terminar de instalar WSL y, después, vuelve a abrir OpenCode.",
"wsl.onboarding.next": "Siguiente",
"wsl.onboarding.refresh": "Actualizar",
"wsl.onboarding.allDistrosAdded": "Ya se han añadido todas las distribuciones instaladas.",
"wsl.onboarding.noDistros": "Aún no se han detectado distribuciones.",
"wsl.onboarding.install": "Instalar",
"wsl.onboarding.installing": "Instalando...",
"wsl.onboarding.installDistro": "Instalar distribución",
"wsl.onboarding.searchDistros": "Buscar distribuciones",
"wsl.onboarding.wsl2Required": "Se necesita WSL 2.",
"wsl.onboarding.toolsRequired": "Esta distribución necesita bash y curl.",
"wsl.onboarding.openTerminal": "Abrir terminal",
"wsl.onboarding.path": "Ruta: {{path}}",
"wsl.onboarding.notFound": "no encontrado",
"wsl.onboarding.version": "Versión: {{version}}",
"wsl.onboarding.unknown": "desconocida",
"wsl.onboarding.desktopVersion": "escritorio {{version}}",
"wsl.onboarding.versionMismatch": "La versión instalada no coincide con la versión de la aplicación de escritorio.",
"wsl.onboarding.adding": "Añadiendo...",
"dialog.project.edit.title": "Editar proyecto",
"dialog.project.edit.name": "Nombre",
@ -405,6 +486,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -453,10 +535,12 @@ export const dict = {
"error.page.title": "Algo salió mal",
"error.page.description": "Ocurrió un error al cargar la aplicación.",
"error.page.description.localServerStartup": "Ocurrió un error al iniciar el servidor local.",
"error.page.details.label": "Detalles del error",
"error.page.action.restart": "Reiniciar",
"error.page.action.report": "Informar error",
"error.page.action.reported": "Error informado",
"error.page.action.exportLogs": "Exportar registros",
"error.page.action.checking": "Comprobando...",
"error.page.action.checkUpdates": "Buscar actualizaciones",
"error.page.action.updateTo": "Actualizar a {{version}}",
@ -505,11 +589,31 @@ export const dict = {
"home.recentProjects": "Proyectos recientes",
"home.empty.title": "Sin proyectos recientes",
"home.empty.description": "Empieza abriendo un proyecto local",
"home.title": "Inicio",
"home.projects": "Proyectos",
"home.project.add": "Añadir proyecto",
"home.recentlyClosed": "Proyectos cerrados recientemente",
"home.server.collapse": "Contraer proyectos del servidor",
"home.server.expand": "Expandir proyectos del servidor",
"home.sessions.search.placeholder": "Buscar sesiones",
"home.sessions.search.placeholder.scoped": "Buscar sesiones en {{scope}}",
"home.sessions.search.sessions": "Sesiones",
"home.sessions.search.noResults": "No se encontraron sesiones para {{query}}",
"home.sessions.empty": "Aún no hay nada",
"home.sessions.empty.description": "Crea una sesión para empezar",
"home.sessions.group.today": "Hoy",
"home.sessions.group.yesterday": "Ayer",
"home.sessions.group.older": "Anteriores",
"session.tab.session": "Sesión",
"session.tab.review": "Revisión",
"session.tab.context": "Contexto",
"session.tab.unknown": "Sesión desconocida",
"session.panel.reviewAndFiles": "Revisión y archivos",
"session.error.notFound": "No se encuentra esta sesión",
"session.error.notFound.description": "Esta pestaña apunta a una sesión que ya no existe en este servidor.",
"session.error.notFound.closeTab": "Cerrar pestaña",
"session.error.serverConnection": "No se puede conectar a este servidor",
"session.review.filesChanged": "{{count}} Archivos Cambiados",
"session.review.change.one": "Cambio",
"session.review.change.other": "Cambios",
@ -519,6 +623,8 @@ export const dict = {
"session.review.noSnapshot":
"El seguimiento de instantáneas está deshabilitado en la configuración, por lo que los cambios de sesión no están disponibles",
"session.review.noChanges": "Sin cambios",
"session.review.noUncommittedChanges": "Aún no hay cambios sin confirmar",
"session.review.noBranchChanges": "Aún no hay cambios en la rama",
"session.files.selectToOpen": "Selecciona un archivo para abrir",
"session.files.all": "Todos los archivos",
@ -535,6 +641,10 @@ export const dict = {
"session.todo.title": "Tareas",
"session.todo.collapse": "Contraer",
"session.todo.expand": "Expandir",
"session.question.minimize": "Minimizar pregunta",
"session.question.restore": "Restaurar pregunta",
"session.question.pending.one": "{{count}} pregunta pendiente",
"session.question.pending.other": "{{count}} preguntas pendientes",
"session.followupDock.summary.one": "{{count}} mensaje en cola",
"session.followupDock.summary.other": "{{count}} mensajes en cola",
"session.followupDock.sendNow": "Enviar ahora",
@ -548,9 +658,16 @@ export const dict = {
"session.revertDock.restore": "Restaurar mensaje",
"session.new.title": "Construye lo que quieras",
"session.new.project.new": "Nuevo proyecto",
"session.new.project.search": "Buscar proyectos",
"session.new.project.add": "Añadir proyecto",
"session.new.worktree.main": "Rama principal",
"session.new.worktree.mainWithBranch": "Rama principal ({{branch}})",
"session.new.worktree.create": "Crear nuevo árbol de trabajo",
"session.new.workspace.runIn": "Ejecutar sesión en",
"session.new.workspace.triggerLocal": "Local",
"session.new.workspace.local": "Repositorio local",
"session.new.workspace.existing": "Espacio de trabajo…",
"session.new.lastModified": "Última modificación",
"session.header.search.placeholder": "Buscar {{project}}",
@ -621,6 +738,8 @@ export const dict = {
"sidebar.project.recentSessions": "Sesiones recientes",
"sidebar.project.viewAllSessions": "Ver todas las sesiones",
"sidebar.project.clearNotifications": "Borrar notificaciones",
"sidebar.empty.title": "No hay proyectos abiertos",
"sidebar.empty.description": "Abre un proyecto para empezar",
"app.name.desktop": "OpenCode Desktop",
@ -633,6 +752,7 @@ export const dict = {
"settings.desktop.wsl.description": "Ejecutar el servidor OpenCode dentro de WSL en Windows.",
"settings.general.section.appearance": "Apariencia",
"settings.general.section.advanced": "Avanzado",
"settings.general.section.notifications": "Notificaciones del sistema",
"settings.general.section.updates": "Actualizaciones",
"settings.general.section.sounds": "Efectos de sonido",
@ -641,6 +761,11 @@ export const dict = {
"settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Cambiar el idioma de visualización para OpenCode",
"settings.general.row.shell.title": "Shell del terminal",
"settings.general.row.shell.description":
"Elige el shell que se usará en el terminal. Los shells compatibles también se usarán para las llamadas a herramientas del agente.",
"settings.general.row.shell.autoDefault": "Automático (Predeterminado)",
"settings.general.row.shell.terminalOnly": "solo en el terminal",
"settings.general.row.appearance.title": "Apariencia",
"settings.general.row.appearance.description": "Personaliza cómo se ve OpenCode en tu dispositivo",
"settings.general.row.colorScheme.title": "Esquema de color",
@ -649,8 +774,8 @@ export const dict = {
"settings.general.row.theme.description": "Personaliza el tema de OpenCode.",
"settings.general.row.font.title": "Fuente de código",
"settings.general.row.font.description": "Personaliza la fuente usada en bloques de código",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Fuente del terminal",
"settings.general.row.terminalFont.description": "Personaliza la fuente utilizada en el terminal",
"settings.general.row.uiFont.title": "Fuente de la interfaz",
"settings.general.row.uiFont.description": "Personaliza la fuente usada en toda la interfaz",
"settings.general.row.followup.title": "Comportamiento de seguimiento",
@ -658,6 +783,23 @@ export const dict = {
"Elige si los prompts de seguimiento se dirigen inmediatamente o esperan en una cola",
"settings.general.row.followup.option.queue": "Cola",
"settings.general.row.followup.option.steer": "Dirigir",
"settings.general.row.showFileTree.title": "Árbol de archivos",
"settings.general.row.showFileTree.description": "Mostrar el panel del árbol de archivos en las sesiones",
"settings.general.row.showNavigation.title": "Controles de navegación",
"settings.general.row.showNavigation.description":
"Mostrar los botones para retroceder y avanzar en la barra de título de la aplicación de escritorio",
"settings.general.row.showSearch.title": "Paleta de comandos",
"settings.general.row.showSearch.description":
"Mostrar el botón de búsqueda y paleta de comandos en la barra de título",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Mostrar el botón del terminal en la barra de título",
"settings.general.row.showStatus.title": "Estado del servidor",
"settings.general.row.showStatus.description": "Mostrar el botón de estado del servidor en la barra de título",
"settings.general.row.mobileTitlebarBottom.title": "Navegación inferior",
"settings.general.row.mobileTitlebarBottom.description":
"Colocar la barra de título y las pestañas de sesión en la parte inferior de la pantalla en dispositivos móviles",
"settings.general.row.showCustomAgents.title": "Agentes personalizados",
"settings.general.row.showCustomAgents.description": "Mostrar el selector de agentes en el editor",
"settings.general.row.reasoningSummaries.title": "Mostrar resúmenes de razonamiento",
"settings.general.row.reasoningSummaries.description":
"Mostrar resúmenes del razonamiento del modelo en la línea de tiempo",
@ -667,6 +809,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Expandir partes de la herramienta de edición",
"settings.general.row.editToolPartsExpanded.description":
"Mostrar las partes de las herramientas de edición, escritura y parcheado expandidas por defecto en la línea de tiempo",
"settings.general.row.newLayoutDesigns.title": "Nuevo diseño y estilos",
"settings.general.row.newLayoutDesigns.description":
"Activar el nuevo diseño de la interfaz, la página de inicio, el editor y las sesiones",
"settings.general.row.pinchZoom.title": "Pellizcar para ampliar",
"settings.general.row.pinchZoom.description":
"Permitir ampliar con el gesto de pellizco del panel táctil y con Ctrl-scroll",
"settings.general.row.wayland.title": "Usar Wayland nativo",
"settings.general.row.wayland.description": "Deshabilitar fallback a X11 en Wayland. Requiere reinicio.",
"settings.general.row.wayland.tooltip":
@ -682,6 +830,8 @@ export const dict = {
"settings.updates.row.check.description": "Buscar actualizaciones manualmente e instalarlas si hay alguna",
"settings.updates.action.checkNow": "Buscar ahora",
"settings.updates.action.checking": "Buscando...",
"settings.updates.action.downloading": "Descargando...",
"settings.updates.action.installing": "Instalando...",
"settings.updates.toast.latest.title": "Estás al día",
"settings.updates.toast.latest.description": "Estás usando la última versión de OpenCode.",
"sound.option.none": "Ninguno",

View file

@ -21,6 +21,9 @@ export const dict = {
"theme.scheme.dark": "Sombre",
"command.sidebar.toggle": "Basculer la barre latérale",
"command.project.open": "Ouvrir un projet",
"command.project.previous": "Projet précédent",
"command.project.next": "Projet suivant",
"command.project.index": "Passer au projet {{index}}",
"command.provider.connect": "Connecter un fournisseur",
"command.server.switch": "Changer de serveur",
"command.settings.open": "Ouvrir les paramètres",
@ -39,6 +42,7 @@ export const dict = {
"command.session.new": "Nouvelle session",
"command.file.open": "Ouvrir un fichier",
"command.tab.close": "Fermer l'onglet",
"command.tab.reopenClosed": "Rouvrir l'onglet fermé",
"command.context.addSelection": "Ajouter la sélection au contexte",
"command.context.addSelection.description": "Ajouter les lignes sélectionnées du fichier actuel",
"command.input.focus": "Focus sur l'entrée",
@ -193,6 +197,11 @@ export const dict = {
"model.input.video": "vidéo",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Autorise : {{inputs}}",
"model.tooltip.context.label": "Contexte",
"model.tooltip.inputs": "Entrées",
"model.tooltip.model": "Modèle",
"model.tooltip.provider": "Fournisseur",
"model.tooltip.reasoning": "Raisonnement",
"model.tooltip.reasoning.allowed": "Autorise le raisonnement",
"model.tooltip.reasoning.none": "Sans raisonnement",
"model.tooltip.context": "Limite de contexte {{limit}}",
@ -202,6 +211,7 @@ export const dict = {
"common.loading": "Chargement",
"common.loading.ellipsis": "...",
"common.cancel": "Annuler",
"common.clear": "Effacer",
"common.connect": "Connecter",
"common.disconnect": "Déconnecter",
"common.continue": "Soumettre",
@ -218,6 +228,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc pour quitter",
"session.child.promptDisabled": "Les sessions de sous-agents ne peuvent pas recevoir de messages.",
"session.child.backToParent": "Revenir à la session principale.",
"prompt.example.1": "Corriger un TODO dans la base de code",
"prompt.example.2": "Quelle est la pile technique de ce projet ?",
"prompt.example.3": "Réparer les tests échoués",
@ -315,6 +327,75 @@ export const dict = {
"dialog.server.menu.delete": "Supprimer",
"dialog.server.current": "Serveur actuel",
"dialog.server.status.default": "Défaut",
"wsl.server.add": "Ajouter un serveur WSL",
"wsl.server.addShort": "Ajouter WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Serveur WSL",
"wsl.server.retryStart": "Réessayer de démarrer",
"wsl.server.updating": "Mise à jour...",
"wsl.onboarding.step.distro": "Choisir une distribution",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Vérification de WSL...",
"wsl.onboarding.restartRequired": "Windows doit redémarrer pour terminer l'installation de WSL.",
"wsl.onboarding.ready": "WSL est prêt.",
"wsl.onboarding.required": "WSL est requis pour continuer.",
"wsl.onboarding.checkingDistros": "Vérification des distributions...",
"wsl.onboarding.installingDistro": "Installation de {{distro}}...",
"wsl.onboarding.checkingDistro": "Vérification de {{distro}}...",
"wsl.onboarding.listingDistros": "Récupération de la liste des distributions...",
"wsl.onboarding.distroReady": "{{distro}} est prête.",
"wsl.onboarding.distroNotInstalled": "{{distro}} n'est pas encore installée.",
"wsl.onboarding.openDistroOnce": "Ouvrez {{distro}} une fois pour terminer la configuration.",
"wsl.onboarding.finishingDistro": "Finalisation de la configuration de {{distro}}.",
"wsl.onboarding.pickDistro": "Choisissez une distribution ou installez-en une ci-dessous.",
"wsl.onboarding.checkingOpencode": "Vérification d'OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Vérification d'OpenCode dans {{distro}}...",
"wsl.onboarding.updatingOpencode": "Mise à jour d'OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Mise à jour d'OpenCode dans {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Mettez à jour OpenCode dans {{distro}}.",
"wsl.onboarding.updateOpencode": "Mettre à jour OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode est prêt dans {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode est prêt.",
"wsl.onboarding.installOpencodeIn": "Installez OpenCode dans {{distro}}.",
"wsl.onboarding.installOpencode": "Installer OpenCode",
"wsl.onboarding.chooseDistroFirst": "Choisissez d'abord une distribution.",
"wsl.onboarding.loadFailed": "Impossible de charger l'état de WSL.",
"wsl.onboarding.loading": "Chargement...",
"wsl.onboarding.installedDistros": "Distributions installées",
"wsl.onboarding.checkAgain": "Vérifier à nouveau",
"wsl.onboarding.distroStatus.ready": "Prête",
"wsl.onboarding.distroStatus.checking": "Vérification...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode non installé",
"wsl.onboarding.distroStatus.missingTools": "bash et curl manquants",
"wsl.onboarding.distroStatus.unsupported": "Non prise en charge · Utilisez WSL 2",
"wsl.onboarding.needAnotherDistro": "Besoin d'une autre distribution ?",
"wsl.onboarding.needAnotherDistroHint": "Installez une distribution Linux depuis le catalogue WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL n'est pas installé",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) est requis avant qu'OpenCode puisse ajouter un serveur WSL",
"wsl.onboarding.wslUnavailable.title": "WSL indisponible",
"wsl.onboarding.wslUnavailable.description": "OpenCode n'a pas pu vérifier WSL sur cet appareil.",
"wsl.onboarding.installWsl": "Installer WSL",
"wsl.onboarding.windowsRestartRequired":
"Redémarrez Windows pour terminer l'installation de WSL, puis rouvrez OpenCode.",
"wsl.onboarding.next": "Suivant",
"wsl.onboarding.refresh": "Actualiser",
"wsl.onboarding.allDistrosAdded": "Toutes les distributions installées ont déjà été ajoutées.",
"wsl.onboarding.noDistros": "Aucune distribution détectée pour l'instant.",
"wsl.onboarding.install": "Installer",
"wsl.onboarding.installing": "Installation...",
"wsl.onboarding.installDistro": "Installer une distribution",
"wsl.onboarding.searchDistros": "Rechercher des distributions",
"wsl.onboarding.wsl2Required": "WSL 2 est requis.",
"wsl.onboarding.toolsRequired": "Cette distribution nécessite bash et curl.",
"wsl.onboarding.openTerminal": "Ouvrir le terminal",
"wsl.onboarding.path": "Chemin : {{path}}",
"wsl.onboarding.notFound": "introuvable",
"wsl.onboarding.version": "Version : {{version}}",
"wsl.onboarding.unknown": "inconnue",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "La version installée ne correspond pas à celle de l'application desktop.",
"wsl.onboarding.adding": "Ajout...",
"dialog.project.edit.title": "Modifier le projet",
"dialog.project.edit.name": "Nom",
"dialog.project.edit.icon": "Icône",
@ -373,6 +454,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Langue",
@ -410,10 +492,12 @@ export const dict = {
"toast.update.action.notYet": "Pas encore",
"error.page.title": "Quelque chose s'est mal passé",
"error.page.description": "Une erreur s'est produite lors du chargement de l'application.",
"error.page.description.localServerStartup": "Une erreur s'est produite lors du démarrage du serveur local.",
"error.page.details.label": "Détails de l'erreur",
"error.page.action.restart": "Redémarrer",
"error.page.action.report": "Signaler l'erreur",
"error.page.action.reported": "Erreur signalée",
"error.page.action.exportLogs": "Exporter les journaux",
"error.page.action.checking": "Vérification...",
"error.page.action.checkUpdates": "Vérifier les mises à jour",
"error.page.action.updateTo": "Mettre à jour vers {{version}}",
@ -458,16 +542,38 @@ export const dict = {
"home.recentProjects": "Projets récents",
"home.empty.title": "Aucun projet récent",
"home.empty.description": "Commencez par ouvrir un projet local",
"home.title": "Accueil",
"home.projects": "Projets",
"home.project.add": "Ajouter un projet",
"home.recentlyClosed": "Récemment fermés",
"home.server.collapse": "Réduire les projets du serveur",
"home.server.expand": "Développer les projets du serveur",
"home.sessions.search.placeholder": "Rechercher des sessions",
"home.sessions.search.placeholder.scoped": "Rechercher les sessions dans {{scope}}",
"home.sessions.search.sessions": "Sessions",
"home.sessions.search.noResults": "Aucune session trouvée pour {{query}}",
"home.sessions.empty": "Rien ici pour l'instant",
"home.sessions.empty.description": "Créez une session pour commencer",
"home.sessions.group.today": "Aujourd'hui",
"home.sessions.group.yesterday": "Hier",
"home.sessions.group.older": "Plus anciennes",
"session.tab.session": "Session",
"session.tab.review": "Revue",
"session.tab.context": "Contexte",
"session.tab.unknown": "Session inconnue",
"session.panel.reviewAndFiles": "Revue et fichiers",
"session.error.notFound": "Cette session est introuvable",
"session.error.notFound.description": "Cet onglet pointe vers une session qui n'existe plus sur ce serveur.",
"session.error.notFound.closeTab": "Fermer l'onglet",
"session.error.serverConnection": "Impossible de se connecter à ce serveur",
"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.review.noUncommittedChanges": "Aucune modification non validée pour l'instant",
"session.review.noBranchChanges": "Aucune modification de branche pour l'instant",
"session.review.noVcs": "Aucun système de contrôle de version Git détecté, modifications non affichées",
"session.review.noSnapshot":
"Le suivi des instantanés est désactivé dans la configuration, les modifications de session sont donc indisponibles",
@ -484,6 +590,10 @@ export const dict = {
"session.todo.title": "Tâches",
"session.todo.collapse": "Réduire",
"session.todo.expand": "Développer",
"session.question.minimize": "Réduire la question",
"session.question.restore": "Restaurer la question",
"session.question.pending.one": "{{count}} question en attente",
"session.question.pending.other": "{{count}} questions en attente",
"session.followupDock.summary.one": "{{count}} message en file d'attente",
"session.followupDock.summary.other": "{{count}} messages en file d'attente",
"session.followupDock.sendNow": "Envoyer maintenant",
@ -496,9 +606,16 @@ export const dict = {
"session.revertDock.expand": "Développer les messages annulés",
"session.revertDock.restore": "Restaurer le message",
"session.new.title": "Créez ce que vous voulez",
"session.new.project.new": "Nouveau projet",
"session.new.project.search": "Rechercher des projets",
"session.new.project.add": "Ajouter un projet",
"session.new.worktree.main": "Branche principale",
"session.new.worktree.mainWithBranch": "Branche principale ({{branch}})",
"session.new.worktree.create": "Créer un nouvel arbre de travail",
"session.new.workspace.runIn": "Exécuter la session dans",
"session.new.workspace.triggerLocal": "Local",
"session.new.workspace.local": "Dépôt local",
"session.new.workspace.existing": "Espace de travail…",
"session.new.lastModified": "Dernière modification",
"session.header.search.placeholder": "Rechercher {{project}}",
"session.header.searchFiles": "Rechercher des fichiers",
@ -564,6 +681,8 @@ export const dict = {
"sidebar.project.recentSessions": "Sessions récentes",
"sidebar.project.viewAllSessions": "Voir toutes les sessions",
"sidebar.project.clearNotifications": "Effacer les notifications",
"sidebar.empty.title": "Aucun projet ouvert",
"sidebar.empty.description": "Ouvrez un projet pour commencer",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Bureau",
"settings.section.server": "Serveur",
@ -573,6 +692,7 @@ export const dict = {
"settings.desktop.wsl.title": "Intégration WSL",
"settings.desktop.wsl.description": "Exécuter le serveur OpenCode dans WSL sur Windows.",
"settings.general.section.appearance": "Apparence",
"settings.general.section.advanced": "Avancé",
"settings.general.section.notifications": "Notifications système",
"settings.general.section.updates": "Mises à jour",
"settings.general.section.sounds": "Effets sonores",
@ -580,6 +700,11 @@ export const dict = {
"settings.general.section.display": "Affichage",
"settings.general.row.language.title": "Langue",
"settings.general.row.language.description": "Changer la langue d'affichage pour OpenCode",
"settings.general.row.shell.title": "Shell du terminal",
"settings.general.row.shell.description":
"Choisissez le shell utilisé par votre terminal. Les shells compatibles sont également utilisés pour les appels d'outils de l'agent.",
"settings.general.row.shell.autoDefault": "Auto (par défaut)",
"settings.general.row.shell.terminalOnly": "terminal uniquement",
"settings.general.row.appearance.title": "Apparence",
"settings.general.row.appearance.description": "Personnaliser l'apparence d'OpenCode sur votre appareil",
"settings.general.row.colorScheme.title": "Schéma de couleurs",
@ -588,8 +713,8 @@ export const dict = {
"settings.general.row.theme.description": "Personnaliser le thème d'OpenCode.",
"settings.general.row.font.title": "Police de code",
"settings.general.row.font.description": "Personnaliser la police utilisée dans les blocs de code",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Police du terminal",
"settings.general.row.terminalFont.description": "Personnalisez la police utilisée dans le terminal",
"settings.general.row.uiFont.title": "Police de l'interface",
"settings.general.row.uiFont.description": "Personnaliser la police utilisée dans toute l'interface",
"settings.general.row.followup.title": "Comportement de suivi",
@ -597,6 +722,24 @@ export const dict = {
"Choisissez si les messages de suivi dirigent immédiatement ou attendent dans une file d'attente",
"settings.general.row.followup.option.queue": "File d'attente",
"settings.general.row.followup.option.steer": "Diriger",
"settings.general.row.showFileTree.title": "Arborescence des fichiers",
"settings.general.row.showFileTree.description": "Afficher le panneau d'arborescence des fichiers dans les sessions",
"settings.general.row.showNavigation.title": "Commandes de navigation",
"settings.general.row.showNavigation.description":
"Afficher les boutons précédent et suivant dans la barre de titre de l'application desktop",
"settings.general.row.showSearch.title": "Palette de commandes",
"settings.general.row.showSearch.description":
"Afficher le bouton de recherche et de palette de commandes dans la barre de titre",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description":
"Afficher le bouton du terminal dans la barre de titre de l'application desktop",
"settings.general.row.showStatus.title": "État du serveur",
"settings.general.row.showStatus.description": "Afficher le bouton d'état du serveur dans la barre de titre",
"settings.general.row.mobileTitlebarBottom.title": "Navigation en bas",
"settings.general.row.mobileTitlebarBottom.description":
"Placer la barre de titre et les onglets de session en bas de l'écran sur mobile",
"settings.general.row.showCustomAgents.title": "Agents personnalisés",
"settings.general.row.showCustomAgents.description": "Afficher le sélecteur d'agent dans la zone de saisie",
"settings.general.row.reasoningSummaries.title": "Afficher les résumés de raisonnement",
"settings.general.row.reasoningSummaries.description":
"Afficher les résumés de raisonnement du modèle dans la chronologie",
@ -606,6 +749,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Développer les parties de l'outil edit",
"settings.general.row.editToolPartsExpanded.description":
"Afficher les parties des outils edit, write et patch développées par défaut dans la chronologie",
"settings.general.row.newLayoutDesigns.title": "Nouvelle mise en page et nouveaux designs",
"settings.general.row.newLayoutDesigns.description":
"Activer la nouvelle mise en page et les nouvelles interfaces d'accueil, de saisie et de session",
"settings.general.row.pinchZoom.title": "Pincer pour zoomer",
"settings.general.row.pinchZoom.description":
"Autoriser les gestes de pincement du pavé tactile et Ctrl-défilement pour zoomer",
"settings.general.row.wayland.title": "Utiliser Wayland natif",
"settings.general.row.wayland.description": "Désactiver le repli X11 sur Wayland. Nécessite un redémarrage.",
"settings.general.row.wayland.tooltip":
@ -618,6 +767,8 @@ export const dict = {
"settings.updates.row.check.description": "Vérifier manuellement les mises à jour et installer si disponible",
"settings.updates.action.checkNow": "Vérifier maintenant",
"settings.updates.action.checking": "Vérification...",
"settings.updates.action.downloading": "Téléchargement...",
"settings.updates.action.installing": "Installation...",
"settings.updates.toast.latest.title": "Vous êtes à jour",
"settings.updates.toast.latest.description": "Vous utilisez la dernière version d'OpenCode.",
"sound.option.none": "Aucun",

View file

@ -21,6 +21,9 @@ export const dict = {
"theme.scheme.dark": "ダーク",
"command.sidebar.toggle": "サイドバーの切り替え",
"command.project.open": "プロジェクトを開く",
"command.project.previous": "前のプロジェクト",
"command.project.next": "次のプロジェクト",
"command.project.index": "プロジェクト{{index}}に切り替え",
"command.provider.connect": "プロバイダーに接続",
"command.server.switch": "サーバーの切り替え",
"command.settings.open": "設定を開く",
@ -39,6 +42,7 @@ export const dict = {
"command.session.new": "新しいセッション",
"command.file.open": "ファイルを開く",
"command.tab.close": "タブを閉じる",
"command.tab.reopenClosed": "閉じたタブを再度開く",
"command.context.addSelection": "選択範囲をコンテキストに追加",
"command.context.addSelection.description": "現在のファイルから選択した行を追加",
"command.input.focus": "入力欄にフォーカス",
@ -149,7 +153,7 @@ export const dict = {
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "小文字、数字、ハイフン、アンダースコア",
"provider.custom.field.name.label": "表示名",
"provider.custom.field.name.placeholder": "My AI Provider",
"provider.custom.field.name.placeholder": "マイAIプロバイダー",
"provider.custom.field.baseURL.label": "ベースURL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "APIキー",
@ -192,6 +196,11 @@ export const dict = {
"model.input.video": "動画",
"model.input.pdf": "pdf",
"model.tooltip.allows": "対応: {{inputs}}",
"model.tooltip.context.label": "コンテキスト",
"model.tooltip.inputs": "入力",
"model.tooltip.model": "モデル",
"model.tooltip.provider": "プロバイダー",
"model.tooltip.reasoning": "推論",
"model.tooltip.reasoning.allowed": "推論を許可",
"model.tooltip.reasoning.none": "推論なし",
"model.tooltip.context": "コンテキスト上限 {{limit}}",
@ -201,6 +210,7 @@ export const dict = {
"common.loading": "読み込み中",
"common.loading.ellipsis": "...",
"common.cancel": "キャンセル",
"common.clear": "クリア",
"common.connect": "接続",
"common.disconnect": "切断",
"common.continue": "送信",
@ -217,6 +227,8 @@ export const dict = {
"prompt.mode.shell": "シェル",
"prompt.mode.normal": "プロンプト",
"prompt.mode.shell.exit": "escで終了",
"session.child.promptDisabled": "サブエージェントのセッションにはプロンプトを送信できません。",
"session.child.backToParent": "メインセッションに戻る。",
"prompt.example.1": "コードベースのTODOを修正",
"prompt.example.2": "このプロジェクトの技術スタックは何ですか?",
"prompt.example.3": "壊れたテストを修正",
@ -313,6 +325,75 @@ export const dict = {
"dialog.server.menu.delete": "削除",
"dialog.server.current": "現在のサーバー",
"dialog.server.status.default": "デフォルト",
"wsl.server.add": "WSLサーバーを追加",
"wsl.server.addShort": "WSLを追加",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSLサーバー",
"wsl.server.retryStart": "起動を再試行",
"wsl.server.updating": "更新中...",
"wsl.onboarding.step.distro": "ディストリビューションを選択",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSLを確認中...",
"wsl.onboarding.restartRequired": "WSLのインストールを完了するにはWindowsの再起動が必要です。",
"wsl.onboarding.ready": "WSLの準備ができました。",
"wsl.onboarding.required": "続行するにはWSLが必要です。",
"wsl.onboarding.checkingDistros": "ディストリビューションを確認中...",
"wsl.onboarding.installingDistro": "{{distro}}をインストール中...",
"wsl.onboarding.checkingDistro": "{{distro}}を確認中...",
"wsl.onboarding.listingDistros": "ディストリビューションの一覧を取得中...",
"wsl.onboarding.distroReady": "{{distro}}の準備ができました。",
"wsl.onboarding.distroNotInstalled": "{{distro}}はまだインストールされていません。",
"wsl.onboarding.openDistroOnce": "セットアップを完了するには、{{distro}}を一度開いてください。",
"wsl.onboarding.finishingDistro": "{{distro}}のセットアップを完了しています。",
"wsl.onboarding.pickDistro": "ディストリビューションを選択するか、以下からインストールしてください。",
"wsl.onboarding.checkingOpencode": "OpenCodeを確認中...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}}内のOpenCodeを確認中...",
"wsl.onboarding.updatingOpencode": "OpenCodeを更新中...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}}内のOpenCodeを更新中...",
"wsl.onboarding.updateOpencodeIn": "{{distro}}内のOpenCodeを更新してください。",
"wsl.onboarding.updateOpencode": "OpenCodeを更新",
"wsl.onboarding.opencodeReadyIn": "{{distro}}内のOpenCodeの準備ができました。",
"wsl.onboarding.opencodeReady": "OpenCodeの準備ができました。",
"wsl.onboarding.installOpencodeIn": "{{distro}}にOpenCodeをインストールしてください。",
"wsl.onboarding.installOpencode": "OpenCodeをインストール",
"wsl.onboarding.chooseDistroFirst": "先にディストリビューションを選択してください。",
"wsl.onboarding.loadFailed": "WSLの状態を読み込めませんでした。",
"wsl.onboarding.loading": "読み込み中...",
"wsl.onboarding.installedDistros": "インストール済みのディストリビューション",
"wsl.onboarding.checkAgain": "再確認",
"wsl.onboarding.distroStatus.ready": "準備完了",
"wsl.onboarding.distroStatus.checking": "確認中...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCodeがインストールされていません",
"wsl.onboarding.distroStatus.missingTools": "bash、curlがありません",
"wsl.onboarding.distroStatus.unsupported": "非対応 · WSL 2を使用してください",
"wsl.onboarding.needAnotherDistro": "別のディストリビューションが必要ですか?",
"wsl.onboarding.needAnotherDistroHint": "WSLカタログからLinuxディストリビューションをインストール",
"wsl.onboarding.wslNotInstalled.title": "WSLがインストールされていません",
"wsl.onboarding.wslNotInstalled.description":
"OpenCodeでWSLサーバーを追加するには、WSL (Windows Subsystem for Linux) が必要です",
"wsl.onboarding.wslUnavailable.title": "WSLを利用できません",
"wsl.onboarding.wslUnavailable.description": "このマシンのWSLを確認できませんでした。",
"wsl.onboarding.installWsl": "WSLをインストール",
"wsl.onboarding.windowsRestartRequired":
"WSLのインストールを完了するにはWindowsを再起動し、OpenCodeをもう一度開いてください。",
"wsl.onboarding.next": "次へ",
"wsl.onboarding.refresh": "更新",
"wsl.onboarding.allDistrosAdded": "インストール済みのディストリビューションはすべて追加済みです。",
"wsl.onboarding.noDistros": "ディストリビューションはまだ検出されていません。",
"wsl.onboarding.install": "インストール",
"wsl.onboarding.installing": "インストール中...",
"wsl.onboarding.installDistro": "ディストリビューションをインストール",
"wsl.onboarding.searchDistros": "ディストリビューションを検索",
"wsl.onboarding.wsl2Required": "WSL 2が必要です。",
"wsl.onboarding.toolsRequired": "このディストリビューションにはbashとcurlが必要です。",
"wsl.onboarding.openTerminal": "ターミナルを開く",
"wsl.onboarding.path": "パス: {{path}}",
"wsl.onboarding.notFound": "見つかりません",
"wsl.onboarding.version": "バージョン: {{version}}",
"wsl.onboarding.unknown": "不明",
"wsl.onboarding.desktopVersion": "デスクトップ {{version}}",
"wsl.onboarding.versionMismatch": "インストールされているバージョンがデスクトップアプリのバージョンと一致しません。",
"wsl.onboarding.adding": "追加中...",
"dialog.project.edit.title": "プロジェクトを編集",
"dialog.project.edit.name": "名前",
"dialog.project.edit.icon": "アイコン",
@ -370,6 +451,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "言語",
@ -406,10 +488,12 @@ export const dict = {
"toast.update.action.notYet": "今はしない",
"error.page.title": "問題が発生しました",
"error.page.description": "アプリケーションの読み込み中にエラーが発生しました。",
"error.page.description.localServerStartup": "ローカルサーバーの起動中にエラーが発生しました。",
"error.page.details.label": "エラー詳細",
"error.page.action.restart": "再起動",
"error.page.action.report": "エラーを報告",
"error.page.action.reported": "エラーを報告しました",
"error.page.action.exportLogs": "ログをエクスポート",
"error.page.action.checking": "確認中...",
"error.page.action.checkUpdates": "アップデートを確認",
"error.page.action.updateTo": "{{version}}にアップデート",
@ -451,10 +535,30 @@ export const dict = {
"home.recentProjects": "最近のプロジェクト",
"home.empty.title": "最近のプロジェクトはありません",
"home.empty.description": "ローカルプロジェクトを開いて始めましょう",
"home.title": "ホーム",
"home.projects": "プロジェクト",
"home.project.add": "プロジェクトを追加",
"home.recentlyClosed": "最近閉じたプロジェクト",
"home.server.collapse": "サーバーのプロジェクトを折りたたむ",
"home.server.expand": "サーバーのプロジェクトを展開",
"home.sessions.search.placeholder": "セッションを検索",
"home.sessions.search.placeholder.scoped": "{{scope}}のセッションを検索",
"home.sessions.search.sessions": "セッション",
"home.sessions.search.noResults": "{{query}}に一致するセッションが見つかりません",
"home.sessions.empty": "まだ何もありません",
"home.sessions.empty.description": "セッションを作成して始めましょう",
"home.sessions.group.today": "今日",
"home.sessions.group.yesterday": "昨日",
"home.sessions.group.older": "それ以前",
"session.tab.session": "セッション",
"session.tab.review": "レビュー",
"session.tab.context": "コンテキスト",
"session.tab.unknown": "不明なセッション",
"session.panel.reviewAndFiles": "レビューとファイル",
"session.error.notFound": "このセッションが見つかりません",
"session.error.notFound.description": "このタブが参照するセッションは、このサーバーには存在しません。",
"session.error.notFound.closeTab": "タブを閉じる",
"session.error.serverConnection": "このサーバーに接続できません",
"session.review.filesChanged": "{{count}} ファイル変更",
"session.review.change.one": "変更",
"session.review.change.other": "変更",
@ -463,6 +567,8 @@ export const dict = {
"session.review.noVcs": "Gitバージョン管理システムが検出されないため、変更は表示されません",
"session.review.noSnapshot": "設定でスナップショット追跡が無効になっているため、セッションの変更は利用できません",
"session.review.noChanges": "変更なし",
"session.review.noUncommittedChanges": "コミットされていない変更はまだありません",
"session.review.noBranchChanges": "ブランチの変更はまだありません",
"session.files.selectToOpen": "開くファイルを選択",
"session.files.all": "すべてのファイル",
"session.files.empty": "ファイルなし",
@ -476,6 +582,10 @@ export const dict = {
"session.todo.title": "ToDo",
"session.todo.collapse": "折りたたむ",
"session.todo.expand": "展開",
"session.question.minimize": "質問を最小化",
"session.question.restore": "質問を復元",
"session.question.pending.one": "{{count}}件の保留中の質問",
"session.question.pending.other": "{{count}}件の保留中の質問",
"session.followupDock.summary.one": "{{count}} 件のメッセージが待機中",
"session.followupDock.summary.other": "{{count}} 件のメッセージが待機中",
"session.followupDock.sendNow": "今すぐ送信",
@ -488,9 +598,16 @@ export const dict = {
"session.revertDock.expand": "ロールバックされたメッセージを展開",
"session.revertDock.restore": "メッセージを復元",
"session.new.title": "何でも作る",
"session.new.project.new": "新しいプロジェクト",
"session.new.project.search": "プロジェクトを検索",
"session.new.project.add": "プロジェクトを追加",
"session.new.worktree.main": "メインブランチ",
"session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})",
"session.new.worktree.create": "新しいワークツリーを作成",
"session.new.workspace.runIn": "セッションの実行先",
"session.new.workspace.triggerLocal": "ローカル",
"session.new.workspace.local": "ローカルリポジトリ",
"session.new.workspace.existing": "ワークスペース…",
"session.new.lastModified": "最終更新",
"session.header.search.placeholder": "{{project}}を検索",
"session.header.searchFiles": "ファイルを検索",
@ -554,6 +671,8 @@ export const dict = {
"sidebar.project.recentSessions": "最近のセッション",
"sidebar.project.viewAllSessions": "すべてのセッションを表示",
"sidebar.project.clearNotifications": "通知をクリア",
"sidebar.empty.title": "開いているプロジェクトはありません",
"sidebar.empty.description": "プロジェクトを開いて始めましょう",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "デスクトップ",
"settings.section.server": "サーバー",
@ -563,6 +682,7 @@ export const dict = {
"settings.desktop.wsl.title": "WSL連携",
"settings.desktop.wsl.description": "WindowsのWSL環境でOpenCodeサーバーを実行します。",
"settings.general.section.appearance": "外観",
"settings.general.section.advanced": "詳細設定",
"settings.general.section.notifications": "システム通知",
"settings.general.section.updates": "アップデート",
"settings.general.section.sounds": "効果音",
@ -570,6 +690,11 @@ export const dict = {
"settings.general.section.display": "ディスプレイ",
"settings.general.row.language.title": "言語",
"settings.general.row.language.description": "OpenCodeの表示言語を変更します",
"settings.general.row.shell.title": "ターミナルシェル",
"settings.general.row.shell.description":
"ターミナルで使用するシェルを選択します。互換性のあるシェルはエージェントのツール呼び出しにも使用されます。",
"settings.general.row.shell.autoDefault": "自動 (デフォルト)",
"settings.general.row.shell.terminalOnly": "ターミナルのみ",
"settings.general.row.appearance.title": "外観",
"settings.general.row.appearance.description": "デバイスでのOpenCodeの表示をカスタマイズします",
"settings.general.row.colorScheme.title": "配色",
@ -578,8 +703,8 @@ export const dict = {
"settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。",
"settings.general.row.font.title": "コードフォント",
"settings.general.row.font.description": "コードブロックで使用するフォントをカスタマイズします",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "ターミナルのフォント",
"settings.general.row.terminalFont.description": "ターミナルで使用するフォントをカスタマイズ",
"settings.general.row.uiFont.title": "UIフォント",
"settings.general.row.uiFont.description": "インターフェース全体で使用するフォントをカスタマイズします",
"settings.general.row.followup.title": "フォローアップの動作",
@ -587,6 +712,21 @@ export const dict = {
"フォローアッププロンプトを即座に実行するか、キューで待機させるかを選択します",
"settings.general.row.followup.option.queue": "キューに追加",
"settings.general.row.followup.option.steer": "即座に実行 (Steer)",
"settings.general.row.showFileTree.title": "ファイルツリー",
"settings.general.row.showFileTree.description": "セッションにファイルツリーパネルを表示します",
"settings.general.row.showNavigation.title": "ナビゲーションコントロール",
"settings.general.row.showNavigation.description": "デスクトップのタイトルバーに戻るボタンと進むボタンを表示します",
"settings.general.row.showSearch.title": "コマンドパレット",
"settings.general.row.showSearch.description": "タイトルバーに検索とコマンドパレットのボタンを表示します",
"settings.general.row.showTerminal.title": "ターミナル",
"settings.general.row.showTerminal.description": "デスクトップのタイトルバーにターミナルボタンを表示します",
"settings.general.row.showStatus.title": "サーバーステータス",
"settings.general.row.showStatus.description": "タイトルバーにサーバーステータスボタンを表示します",
"settings.general.row.mobileTitlebarBottom.title": "下部ナビゲーション",
"settings.general.row.mobileTitlebarBottom.description":
"モバイルではタイトルバーとセッションタブを画面下部に配置します",
"settings.general.row.showCustomAgents.title": "カスタムエージェント",
"settings.general.row.showCustomAgents.description": "コンポーザーにエージェント選択を表示します",
"settings.general.row.reasoningSummaries.title": "推論の要約を表示",
"settings.general.row.reasoningSummaries.description": "タイムラインにモデルの推論の要約を表示します",
"settings.general.row.shellToolPartsExpanded.title": "shell ツールパーツを展開",
@ -595,6 +735,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "edit ツールパーツを展開",
"settings.general.row.editToolPartsExpanded.description":
"タイムラインで edit、write、patch ツールパーツをデフォルトで展開して表示します",
"settings.general.row.newLayoutDesigns.title": "新しいレイアウトとデザイン",
"settings.general.row.newLayoutDesigns.description":
"刷新されたレイアウト、ホーム、コンポーザー、セッションUIを有効にします",
"settings.general.row.pinchZoom.title": "ピンチでズーム",
"settings.general.row.pinchZoom.description":
"トラックパッドのピンチ操作とCtrl+スクロール操作によるズームを許可します",
"settings.general.row.wayland.title": "ネイティブWaylandを使用",
"settings.general.row.wayland.description": "WaylandでのX11フォールバックを無効にします。再起動が必要です。",
"settings.general.row.wayland.tooltip":
@ -607,6 +753,8 @@ export const dict = {
"settings.updates.row.check.description": "手動でアップデートを確認し、利用可能ならインストールします",
"settings.updates.action.checkNow": "今すぐ確認",
"settings.updates.action.checking": "確認中...",
"settings.updates.action.downloading": "ダウンロード中...",
"settings.updates.action.installing": "インストール中...",
"settings.updates.toast.latest.title": "最新です",
"settings.updates.toast.latest.description": "OpenCode は最新バージョンです。",
"sound.option.none": "なし",

View file

@ -575,8 +575,8 @@ export const dict = {
"settings.general.row.theme.description": "OpenCode 테마 사용자 지정",
"settings.general.row.font.title": "코드 글꼴",
"settings.general.row.font.description": "코드 블록에 사용되는 글꼴을 사용자 지정",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "터미널 글꼴",
"settings.general.row.terminalFont.description": "터미널에서 사용할 글꼴을 설정합니다",
"settings.general.row.uiFont.title": "UI 글꼴",
"settings.general.row.uiFont.description": "인터페이스 전반에 사용되는 글꼴을 사용자 지정",
"settings.general.row.followup.title": "후속 조치 동작",
@ -848,4 +848,155 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "영구 프로젝트 아이콘 생성 실패",
"error.childStore.storeCreateFailed": "저장소 생성 실패",
"terminal.connectionLost.abnormalClose": "WebSocket이 비정상적으로 닫힘: {{code}}",
"command.project.previous": "이전 프로젝트",
"command.project.next": "다음 프로젝트",
"command.project.index": "{{index}}번 프로젝트로 전환",
"command.tab.reopenClosed": "닫은 탭 다시 열기",
"model.tooltip.context.label": "컨텍스트",
"model.tooltip.inputs": "입력",
"model.tooltip.model": "모델",
"model.tooltip.provider": "공급자",
"model.tooltip.reasoning": "추론",
"common.clear": "지우기",
"session.child.promptDisabled": "하위 에이전트 세션에는 프롬프트를 입력할 수 없습니다.",
"session.child.backToParent": "메인 세션으로 돌아가기.",
"wsl.server.add": "WSL 서버 추가",
"wsl.server.addShort": "WSL 추가",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL 서버",
"wsl.server.retryStart": "시작 재시도",
"wsl.server.updating": "업데이트 중...",
"wsl.onboarding.step.distro": "배포판 선택",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL 확인 중...",
"wsl.onboarding.restartRequired": "WSL 설치를 완료하려면 Windows를 다시 시작해야 합니다.",
"wsl.onboarding.ready": "WSL이 준비되었습니다.",
"wsl.onboarding.required": "계속하려면 WSL이 필요합니다.",
"wsl.onboarding.checkingDistros": "배포판 확인 중...",
"wsl.onboarding.installingDistro": "{{distro}} 배포판 설치 중...",
"wsl.onboarding.checkingDistro": "{{distro}} 배포판 확인 중...",
"wsl.onboarding.listingDistros": "배포판 목록 확인 중...",
"wsl.onboarding.distroReady": "{{distro}} 배포판이 준비되었습니다.",
"wsl.onboarding.distroNotInstalled": "{{distro}} 배포판이 아직 설치되지 않았습니다.",
"wsl.onboarding.openDistroOnce": "설정을 완료하려면 {{distro}} 배포판을 한 번 여세요.",
"wsl.onboarding.finishingDistro": "{{distro}} 배포판 설정을 마무리하는 중입니다.",
"wsl.onboarding.pickDistro": "배포판을 선택하거나 아래에서 설치하세요.",
"wsl.onboarding.checkingOpencode": "OpenCode 확인 중...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}}에서 OpenCode 확인 중...",
"wsl.onboarding.updatingOpencode": "OpenCode 업데이트 중...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}}에서 OpenCode 업데이트 중...",
"wsl.onboarding.updateOpencodeIn": "{{distro}}에서 OpenCode를 업데이트하세요.",
"wsl.onboarding.updateOpencode": "OpenCode 업데이트",
"wsl.onboarding.opencodeReadyIn": "{{distro}}에서 OpenCode를 사용할 준비가 되었습니다.",
"wsl.onboarding.opencodeReady": "OpenCode가 준비되었습니다.",
"wsl.onboarding.installOpencodeIn": "{{distro}}에 OpenCode를 설치하세요.",
"wsl.onboarding.installOpencode": "OpenCode 설치",
"wsl.onboarding.chooseDistroFirst": "먼저 배포판을 선택하세요.",
"wsl.onboarding.loadFailed": "WSL 상태를 불러오지 못했습니다.",
"wsl.onboarding.loading": "로딩 중...",
"wsl.onboarding.installedDistros": "설치된 배포판",
"wsl.onboarding.checkAgain": "다시 확인",
"wsl.onboarding.distroStatus.ready": "준비됨",
"wsl.onboarding.distroStatus.checking": "확인 중...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode가 설치되지 않음",
"wsl.onboarding.distroStatus.missingTools": "bash, curl 없음",
"wsl.onboarding.distroStatus.unsupported": "지원되지 않음 · WSL 2 사용",
"wsl.onboarding.needAnotherDistro": "다른 배포판이 필요하신가요?",
"wsl.onboarding.needAnotherDistroHint": "WSL 카탈로그에서 Linux 배포판을 설치하세요",
"wsl.onboarding.wslNotInstalled.title": "WSL이 설치되지 않음",
"wsl.onboarding.wslNotInstalled.description":
"OpenCode에서 WSL 서버를 추가하려면 WSL (Windows Subsystem for Linux)이 필요합니다",
"wsl.onboarding.wslUnavailable.title": "WSL을 사용할 수 없음",
"wsl.onboarding.wslUnavailable.description": "OpenCode에서 이 컴퓨터의 WSL을 확인할 수 없습니다.",
"wsl.onboarding.installWsl": "WSL 설치",
"wsl.onboarding.windowsRestartRequired": "WSL 설치를 완료하려면 Windows를 다시 시작한 다음 OpenCode를 다시 여세요.",
"wsl.onboarding.next": "다음",
"wsl.onboarding.refresh": "새로 고침",
"wsl.onboarding.allDistrosAdded": "설치된 모든 배포판이 이미 추가되었습니다.",
"wsl.onboarding.noDistros": "아직 감지된 배포판이 없습니다.",
"wsl.onboarding.install": "설치",
"wsl.onboarding.installing": "설치 중...",
"wsl.onboarding.installDistro": "배포판 설치",
"wsl.onboarding.searchDistros": "배포판 검색",
"wsl.onboarding.wsl2Required": "WSL 2가 필요합니다.",
"wsl.onboarding.toolsRequired": "이 배포판에는 bash와 curl이 필요합니다.",
"wsl.onboarding.openTerminal": "터미널 열기",
"wsl.onboarding.path": "경로: {{path}}",
"wsl.onboarding.notFound": "찾을 수 없음",
"wsl.onboarding.version": "버전: {{version}}",
"wsl.onboarding.unknown": "알 수 없음",
"wsl.onboarding.desktopVersion": "데스크톱 {{version}}",
"wsl.onboarding.versionMismatch": "설치된 버전이 데스크톱 앱 버전과 일치하지 않습니다.",
"wsl.onboarding.adding": "추가 중...",
"language.uk": "Українська",
"error.page.description.localServerStartup": "로컬 서버를 시작하는 동안 오류가 발생했습니다.",
"error.page.action.exportLogs": "로그 내보내기",
"home.title": "홈",
"home.projects": "프로젝트",
"home.project.add": "프로젝트 추가",
"home.recentlyClosed": "최근에 닫은 항목",
"home.server.collapse": "서버 프로젝트 접기",
"home.server.expand": "서버 프로젝트 펼치기",
"home.sessions.search.placeholder": "세션 검색",
"home.sessions.search.placeholder.scoped": "{{scope}}에서 세션 검색",
"home.sessions.search.sessions": "세션",
"home.sessions.search.noResults": "{{query}}에 해당하는 세션을 찾을 수 없습니다",
"home.sessions.empty": "아직 아무것도 없습니다",
"home.sessions.empty.description": "세션을 생성하여 시작하세요",
"home.sessions.group.today": "오늘",
"home.sessions.group.yesterday": "어제",
"home.sessions.group.older": "이전",
"session.tab.unknown": "알 수 없는 세션",
"session.error.notFound": "이 세션을 찾을 수 없습니다",
"session.error.notFound.description": "이 탭은 이 서버에 더 이상 존재하지 않는 세션을 가리킵니다.",
"session.error.notFound.closeTab": "탭 닫기",
"session.error.serverConnection": "이 서버에 연결할 수 없습니다",
"session.review.noUncommittedChanges": "아직 커밋되지 않은 변경 사항이 없습니다",
"session.review.noBranchChanges": "아직 브랜치 변경 사항이 없습니다",
"session.question.minimize": "질문 최소화",
"session.question.restore": "질문 복원",
"session.question.pending.one": "{{count}}개의 대기 중인 질문",
"session.question.pending.other": "{{count}}개의 대기 중인 질문",
"session.new.project.new": "새 프로젝트",
"session.new.project.search": "프로젝트 검색",
"session.new.project.add": "프로젝트 추가",
"session.new.workspace.runIn": "세션 실행 위치",
"session.new.workspace.triggerLocal": "로컬",
"session.new.workspace.local": "로컬 저장소",
"session.new.workspace.existing": "작업 공간…",
"sidebar.empty.title": "열린 프로젝트 없음",
"sidebar.empty.description": "프로젝트를 열어 시작하세요",
"settings.general.section.advanced": "고급",
"settings.general.row.shell.title": "터미널 셸",
"settings.general.row.shell.description":
"터미널에서 사용할 셸을 선택하세요. 호환되는 셸은 에이전트 도구 호출에도 사용됩니다.",
"settings.general.row.shell.autoDefault": "자동 (기본값)",
"settings.general.row.shell.terminalOnly": "터미널 전용",
"settings.general.row.showFileTree.title": "파일 트리",
"settings.general.row.showFileTree.description": "세션에 파일 트리 패널 표시",
"settings.general.row.showNavigation.title": "탐색 컨트롤",
"settings.general.row.showNavigation.description": "데스크톱 제목 표시줄에 뒤로 및 앞으로 버튼 표시",
"settings.general.row.showSearch.title": "명령 팔레트",
"settings.general.row.showSearch.description": "제목 표시줄에 검색 및 명령 팔레트 버튼 표시",
"settings.general.row.showTerminal.title": "터미널",
"settings.general.row.showTerminal.description": "데스크톱 제목 표시줄에 터미널 버튼 표시",
"settings.general.row.showStatus.title": "서버 상태",
"settings.general.row.showStatus.description": "제목 표시줄에 서버 상태 버튼 표시",
"settings.general.row.mobileTitlebarBottom.title": "하단 탐색",
"settings.general.row.mobileTitlebarBottom.description": "모바일에서 제목 표시줄과 세션 탭을 화면 하단에 배치",
"settings.general.row.showCustomAgents.title": "사용자 지정 에이전트",
"settings.general.row.showCustomAgents.description": "입력창에 에이전트 선택기 표시",
"settings.general.row.newLayoutDesigns.title": "새 레이아웃 및 디자인",
"settings.general.row.newLayoutDesigns.description": "새롭게 디자인된 레이아웃, 홈, 입력창 및 세션 UI 활성화",
"settings.general.row.pinchZoom.title": "핀치 줌",
"settings.general.row.pinchZoom.description": "트랙패드 핀치 및 Ctrl-스크롤 제스처로 확대/축소 허용",
"settings.updates.action.downloading": "다운로드 중...",
"settings.updates.action.installing": "설치 중...",
}

View file

@ -77,7 +77,7 @@ export const dict = {
"command.permissions.autoaccept.enable": "Aksepter tillatelser automatisk",
"command.permissions.autoaccept.disable": "Stopp automatisk akseptering av tillatelser",
"command.workspace.toggle": "Veksle arbeidsområder",
"command.workspace.toggle.description": "Enable or disable multiple workspaces in the sidebar",
"command.workspace.toggle.description": "Aktiver eller deaktiver flere arbeidsområder i sidefeltet",
"command.session.undo": "Angre",
"command.session.undo.description": "Angre siste melding",
"command.session.redo": "Gjør om",
@ -469,7 +469,7 @@ export const dict = {
"Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributten er feilstavet?",
"error.serverSync.connectFailed": "Kunne ikke koble til server. Kjører det en server på `{{url}}`?",
"directory.error.invalidUrl": "Invalid directory in URL.",
"directory.error.invalidUrl": "Ugyldig mappe i URL-en.",
"error.chain.unknown": "Ukjent feil",
"error.chain.causedBy": "Forårsaket av:",
@ -649,8 +649,8 @@ export const dict = {
"settings.general.row.theme.description": "Tilpass hvordan OpenCode er tematisert.",
"settings.general.row.font.title": "Kodefont",
"settings.general.row.font.description": "Tilpass skrifttypen som brukes i kodeblokker",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Terminalskrift",
"settings.general.row.terminalFont.description": "Tilpass skrifttypen som brukes i terminalen",
"settings.general.row.uiFont.title": "UI-skrift",
"settings.general.row.uiFont.description": "Tilpass skrifttypen som brukes i hele grensesnittet",
"settings.general.row.followup.title": "Oppfølgingsadferd",
@ -936,4 +936,163 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "Kunne ikke opprette vedvarende prosjektikon",
"error.childStore.storeCreateFailed": "Kunne ikke opprette lager",
"terminal.connectionLost.abnormalClose": "WebSocket lukket unormalt: {{code}}",
"command.project.previous": "Forrige prosjekt",
"command.project.next": "Neste prosjekt",
"command.project.index": "Bytt til prosjekt {{index}}",
"command.tab.reopenClosed": "Åpne lukket fane på nytt",
"model.tooltip.context.label": "Kontekst",
"model.tooltip.inputs": "Inndata",
"model.tooltip.model": "Modell",
"model.tooltip.provider": "Leverandør",
"model.tooltip.reasoning": "Resonnering",
"common.clear": "Tøm",
"session.child.promptDisabled": "Underagentsesjoner kan ikke motta forespørsler.",
"session.child.backToParent": "Tilbake til hovedsesjonen.",
"wsl.server.add": "Legg til WSL-server",
"wsl.server.addShort": "Legg til WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-server",
"wsl.server.retryStart": "Prøv å starte på nytt",
"wsl.server.updating": "Oppdaterer...",
"wsl.onboarding.step.distro": "Velg distribusjon",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Sjekker WSL...",
"wsl.onboarding.restartRequired": "Windows må startes på nytt for å fullføre installasjonen av WSL.",
"wsl.onboarding.ready": "WSL er klart.",
"wsl.onboarding.required": "WSL kreves for å fortsette.",
"wsl.onboarding.checkingDistros": "Sjekker distribusjoner...",
"wsl.onboarding.installingDistro": "Installerer {{distro}}...",
"wsl.onboarding.checkingDistro": "Sjekker {{distro}}...",
"wsl.onboarding.listingDistros": "Lister distribusjoner...",
"wsl.onboarding.distroReady": "{{distro}} er klar.",
"wsl.onboarding.distroNotInstalled": "{{distro}} er ikke installert ennå.",
"wsl.onboarding.openDistroOnce": "Åpne {{distro}} én gang for å fullføre oppsettet.",
"wsl.onboarding.finishingDistro": "Fullfører oppsettet for {{distro}}.",
"wsl.onboarding.pickDistro": "Velg en distribusjon eller installer en nedenfor.",
"wsl.onboarding.checkingOpencode": "Sjekker OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Sjekker OpenCode i {{distro}}...",
"wsl.onboarding.updatingOpencode": "Oppdaterer OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Oppdaterer OpenCode i {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Oppdater OpenCode i {{distro}}.",
"wsl.onboarding.updateOpencode": "Oppdater OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode er klar i {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode er klar.",
"wsl.onboarding.installOpencodeIn": "Installer OpenCode i {{distro}}.",
"wsl.onboarding.installOpencode": "Installer OpenCode",
"wsl.onboarding.chooseDistroFirst": "Velg en distribusjon først.",
"wsl.onboarding.loadFailed": "Kunne ikke laste inn WSL-status.",
"wsl.onboarding.loading": "Laster...",
"wsl.onboarding.installedDistros": "Installerte distribusjoner",
"wsl.onboarding.checkAgain": "Sjekk på nytt",
"wsl.onboarding.distroStatus.ready": "Klar",
"wsl.onboarding.distroStatus.checking": "Sjekker...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode er ikke installert",
"wsl.onboarding.distroStatus.missingTools": "Mangler bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Ikke støttet · Bruk WSL 2",
"wsl.onboarding.needAnotherDistro": "Trenger du en annen distribusjon?",
"wsl.onboarding.needAnotherDistroHint": "Installer en Linux-distribusjon fra WSL-katalogen",
"wsl.onboarding.wslNotInstalled.title": "WSL er ikke installert",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) kreves før OpenCode kan legge til en WSL-server",
"wsl.onboarding.wslUnavailable.title": "WSL er utilgjengelig",
"wsl.onboarding.wslUnavailable.description": "OpenCode kunne ikke bekrefte WSL på denne maskinen.",
"wsl.onboarding.installWsl": "Installer WSL",
"wsl.onboarding.windowsRestartRequired":
"Start Windows på nytt for å fullføre installasjonen av WSL, og åpne deretter OpenCode på nytt.",
"wsl.onboarding.next": "Neste",
"wsl.onboarding.refresh": "Oppdater",
"wsl.onboarding.allDistrosAdded": "Alle installerte distribusjoner er allerede lagt til.",
"wsl.onboarding.noDistros": "Ingen distribusjoner oppdaget ennå.",
"wsl.onboarding.install": "Installer",
"wsl.onboarding.installing": "Installerer...",
"wsl.onboarding.installDistro": "Installer distribusjon",
"wsl.onboarding.searchDistros": "Søk etter distribusjoner",
"wsl.onboarding.wsl2Required": "WSL 2 er påkrevd.",
"wsl.onboarding.toolsRequired": "Denne distribusjonen trenger bash og curl.",
"wsl.onboarding.openTerminal": "Åpne terminal",
"wsl.onboarding.path": "Bane: {{path}}",
"wsl.onboarding.notFound": "ikke funnet",
"wsl.onboarding.version": "Versjon: {{version}}",
"wsl.onboarding.unknown": "ukjent",
"wsl.onboarding.desktopVersion": "skrivebordsapp {{version}}",
"wsl.onboarding.versionMismatch": "Den installerte versjonen samsvarer ikke med versjonen av skrivebordsappen.",
"wsl.onboarding.adding": "Legger til...",
"language.uk": "Українська",
"error.page.description.localServerStartup": "Det oppstod en feil under oppstart av den lokale serveren.",
"error.page.action.exportLogs": "Eksporter logger",
"home.title": "Hjem",
"home.projects": "Prosjekter",
"home.project.add": "Legg til prosjekt",
"home.recentlyClosed": "Nylig lukket",
"home.server.collapse": "Fold sammen serverprosjekter",
"home.server.expand": "Utvid serverprosjekter",
"home.sessions.search.placeholder": "Søk etter sesjoner",
"home.sessions.search.placeholder.scoped": "Søk etter sesjoner i {{scope}}",
"home.sessions.search.sessions": "Sesjoner",
"home.sessions.search.noResults": "Ingen sesjoner funnet for {{query}}",
"home.sessions.empty": "Ingenting her ennå",
"home.sessions.empty.description": "Opprett en sesjon for å komme i gang",
"home.sessions.group.today": "I dag",
"home.sessions.group.yesterday": "I går",
"home.sessions.group.older": "Eldre",
"session.tab.unknown": "Ukjent sesjon",
"session.error.notFound": "Denne sesjonen finnes ikke",
"session.error.notFound.description": "Denne fanen peker til en sesjon som ikke lenger finnes på denne serveren.",
"session.error.notFound.closeTab": "Lukk fane",
"session.error.serverConnection": "Kan ikke koble til denne serveren",
"session.review.noUncommittedChanges": "Ingen ucommittede endringer ennå",
"session.review.noBranchChanges": "Ingen grenendringer ennå",
"session.question.minimize": "Minimer spørsmål",
"session.question.restore": "Gjenopprett spørsmål",
"session.question.pending.one": "{{count}} ventende spørsmål",
"session.question.pending.other": "{{count}} ventende spørsmål",
"session.new.project.new": "Nytt prosjekt",
"session.new.project.search": "Søk etter prosjekter",
"session.new.project.add": "Legg til prosjekt",
"session.new.workspace.runIn": "Kjør sesjonen i",
"session.new.workspace.triggerLocal": "Lokalt",
"session.new.workspace.local": "Lokalt depot",
"session.new.workspace.existing": "Arbeidsområde…",
"sidebar.empty.title": "Ingen åpne prosjekter",
"sidebar.empty.description": "Åpne et prosjekt for å komme i gang",
"settings.general.section.advanced": "Avansert",
"settings.general.row.shell.title": "Terminalskall",
"settings.general.row.shell.description":
"Velg skallet som skal brukes i terminalen. Kompatible skall brukes også til agentens verktøykall.",
"settings.general.row.shell.autoDefault": "Automatisk (standard)",
"settings.general.row.shell.terminalOnly": "kun terminal",
"settings.general.row.showFileTree.title": "Filtre",
"settings.general.row.showFileTree.description": "Vis filtrepanelet i sesjoner",
"settings.general.row.showNavigation.title": "Navigasjonskontroller",
"settings.general.row.showNavigation.description":
"Vis tilbake- og fremoverknappene på tittellinjen i skrivebordsappen",
"settings.general.row.showSearch.title": "Kommandopalett",
"settings.general.row.showSearch.description": "Vis knappen for søk og kommandopalett på tittellinjen",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Vis terminalknappen på tittellinjen i skrivebordsappen",
"settings.general.row.showStatus.title": "Serverstatus",
"settings.general.row.showStatus.description": "Vis serverstatusknappen på tittellinjen",
"settings.general.row.mobileTitlebarBottom.title": "Navigasjon nederst",
"settings.general.row.mobileTitlebarBottom.description":
"Plasser tittellinjen og sesjonsfanene nederst på mobilskjermen",
"settings.general.row.showCustomAgents.title": "Egendefinerte agenter",
"settings.general.row.showCustomAgents.description": "Vis agentvelgeren i skrivefeltet",
"settings.general.row.newLayoutDesigns.title": "Ny layout og utforming",
"settings.general.row.newLayoutDesigns.description":
"Aktiver ny layout og utforming for startsiden, skrivefeltet og sesjonsgrensesnittet",
"settings.general.row.pinchZoom.title": "Knip for å zoome",
"settings.general.row.pinchZoom.description": "Tillat knipebevegelser på styreflaten og Ctrl-rulling for å zoome",
"settings.updates.action.downloading": "Laster ned...",
"settings.updates.action.installing": "Installerer...",
} satisfies Partial<Record<Keys, string>>

View file

@ -1,33 +1,118 @@
import { describe, expect, test } from "bun:test"
import { dict as en } from "./en"
import { dict as ar } from "./ar"
import { dict as br } from "./br"
import { dict as bs } from "./bs"
import { dict as da } from "./da"
import { dict as de } from "./de"
import { dict as es } from "./es"
import { dict as fr } from "./fr"
import { dict as ja } from "./ja"
import { dict as ko } from "./ko"
import { dict as no } from "./no"
import { dict as pl } from "./pl"
import { dict as ru } from "./ru"
import { dict as uk } from "./uk"
import { dict as th } from "./th"
import { dict as zh } from "./zh"
import { dict as zht } from "./zht"
import { dict as tr } from "./tr"
const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, uk, th, tr, zh, zht]
const keys = ["command.session.previous.unseen", "command.session.next.unseen"] as const
const appLocales = [
"ar",
"br",
"bs",
"da",
"de",
"es",
"fr",
"ja",
"ko",
"no",
"pl",
"ru",
"uk",
"th",
"tr",
"zh",
"zht",
] as const
const desktopLocales = appLocales.filter((locale) => locale !== "th" && locale !== "tr")
const domains = [
{
name: "app",
source: "./en.ts",
target: (locale: string) => `./${locale}.ts`,
locales: appLocales,
},
{
name: "ui",
source: "../../../ui/src/i18n/en.ts",
target: (locale: string) => `../../../ui/src/i18n/${locale}.ts`,
locales: appLocales,
},
{
name: "desktop",
source: "../../../desktop/src/renderer/i18n/en.ts",
target: (locale: string) => `../../../desktop/src/renderer/i18n/${locale}.ts`,
locales: desktopLocales,
},
] as const
describe("i18n parity", () => {
test("non-English locales translate targeted unseen session keys", () => {
for (const locale of locales) {
for (const key of keys) {
expect(locale[key]).toBeDefined()
expect(locale[key]).not.toBe(en[key])
test("non-English locales have every English key", async () => {
for (const domain of domains) {
const source = await dictionary(domain.source)
for (const locale of domain.locales) {
const target = await dictionary(domain.target(locale))
const missing = Object.keys(source).filter((key) => !Object.hasOwn(target, key))
const extra = Object.keys(target).filter((key) => !Object.hasOwn(source, key))
expect({ domain: domain.name, locale, missing, extra }).toEqual({
domain: domain.name,
locale,
missing: [],
extra: [],
})
}
}
})
test("non-English locales preserve English placeholders", async () => {
for (const domain of domains) {
const source = await dictionary(domain.source)
for (const locale of domain.locales) {
const target = await dictionary(domain.target(locale))
const mismatched = Object.keys(source).filter(
(key) => Object.hasOwn(target, key) && placeholders(source[key]).join() !== placeholders(target[key]).join(),
)
expect({ domain: domain.name, locale, mismatched }).toEqual({ domain: domain.name, locale, mismatched: [] })
}
}
})
test("non-English locales translate targeted unseen session keys", async () => {
const source = await dictionary("./en.ts")
for (const locale of appLocales) {
const target = await dictionary(`./${locale}.ts`)
for (const key of ["command.session.previous.unseen", "command.session.next.unseen"]) {
expect(target[key]).toBeDefined()
expect(target[key]).not.toBe(source[key])
}
}
})
test("changed-file summary keys preserve rendered English copy and localize complete phrases", async () => {
const source = await dictionary("../../../ui/src/i18n/en.ts")
expect(source["ui.sessionTurn.diffs.changed.one"].replace("{{count}}", "1")).toBe("1 Changed file")
expect(source["ui.sessionTurn.diffs.changed.other"].replace("{{count}}", "2")).toBe("2 Changed files")
expect(source["ui.sessionTurn.diffs.changed"]).toBeUndefined()
for (const locale of appLocales) {
const target = await dictionary(`../../../ui/src/i18n/${locale}.ts`)
for (const key of ["ui.sessionTurn.diffs.changed.one", "ui.sessionTurn.diffs.changed.other"]) {
expect(target[key].trim()).not.toBe("")
expect(placeholders(target[key])).toEqual(["count"])
}
}
})
})
async function dictionary(file: string) {
const module: unknown = await import(file)
if (typeof module !== "object" || module === null || !("dict" in module) || !isDictionary(module.dict)) {
throw new Error(`Invalid translation dictionary: ${file}`)
}
return module.dict
}
function isDictionary(value: unknown): value is Record<string, string> {
if (typeof value !== "object" || value === null || Array.isArray(value)) return false
return Object.values(value).every((item) => typeof item === "string")
}
function placeholders(value: string) {
return Array.from(value.matchAll(/{{\s*([^}]+?)\s*}}/g), (match) => match[1]).sort()
}

View file

@ -21,6 +21,9 @@ export const dict = {
"theme.scheme.dark": "Ciemny",
"command.sidebar.toggle": "Przełącz pasek boczny",
"command.project.open": "Otwórz projekt",
"command.project.previous": "Poprzedni projekt",
"command.project.next": "Następny projekt",
"command.project.index": "Przełącz na projekt {{index}}",
"command.provider.connect": "Połącz dostawcę",
"command.server.switch": "Przełącz serwer",
"command.settings.open": "Otwórz ustawienia",
@ -39,6 +42,7 @@ export const dict = {
"command.session.new": "Nowa sesja",
"command.file.open": "Otwórz plik",
"command.tab.close": "Zamknij kartę",
"command.tab.reopenClosed": "Otwórz ponownie zamkniętą kartę",
"command.context.addSelection": "Dodaj zaznaczenie do kontekstu",
"command.context.addSelection.description": "Dodaj zaznaczone linie z bieżącego pliku",
"command.input.focus": "Fokus na pole wejściowe",
@ -194,6 +198,11 @@ export const dict = {
"model.input.video": "wideo",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Obsługuje: {{inputs}}",
"model.tooltip.context.label": "Kontekst",
"model.tooltip.inputs": "Dane wejściowe",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Dostawca",
"model.tooltip.reasoning": "Wnioskowanie",
"model.tooltip.reasoning.allowed": "Obsługuje wnioskowanie",
"model.tooltip.reasoning.none": "Brak wnioskowania",
"model.tooltip.context": "Limit kontekstu {{limit}}",
@ -203,6 +212,7 @@ export const dict = {
"common.loading": "Ładowanie",
"common.loading.ellipsis": "...",
"common.cancel": "Anuluj",
"common.clear": "Wyczyść",
"common.connect": "Połącz",
"common.disconnect": "Rozłącz",
"common.continue": "Prześlij",
@ -219,6 +229,8 @@ export const dict = {
"prompt.mode.shell": "Terminal",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc aby wyjść",
"session.child.promptDisabled": "Nie można wysyłać promptów w sesjach podagentów.",
"session.child.backToParent": "Wróć do głównej sesji.",
"prompt.example.1": "Napraw TODO w bazie kodu",
"prompt.example.2": "Jaki jest stos technologiczny tego projektu?",
"prompt.example.3": "Napraw zepsute testy",
@ -315,6 +327,75 @@ export const dict = {
"dialog.server.menu.delete": "Usuń",
"dialog.server.current": "Obecny serwer",
"dialog.server.status.default": "Domyślny",
"wsl.server.add": "Dodaj serwer WSL",
"wsl.server.addShort": "Dodaj WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Serwer WSL",
"wsl.server.retryStart": "Ponów uruchamianie",
"wsl.server.updating": "Aktualizowanie...",
"wsl.onboarding.step.distro": "Wybierz dystrybucję",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Sprawdzanie WSL...",
"wsl.onboarding.restartRequired": "Aby dokończyć instalację WSL, uruchom ponownie system Windows.",
"wsl.onboarding.ready": "WSL jest gotowy.",
"wsl.onboarding.required": "Aby kontynuować, wymagany jest WSL.",
"wsl.onboarding.checkingDistros": "Sprawdzanie dystrybucji...",
"wsl.onboarding.installingDistro": "Instalowanie {{distro}}...",
"wsl.onboarding.checkingDistro": "Sprawdzanie {{distro}}...",
"wsl.onboarding.listingDistros": "Pobieranie listy dystrybucji...",
"wsl.onboarding.distroReady": "Dystrybucja {{distro}} jest gotowa.",
"wsl.onboarding.distroNotInstalled": "Dystrybucja {{distro}} nie jest jeszcze zainstalowana.",
"wsl.onboarding.openDistroOnce": "Uruchom raz {{distro}}, aby dokończyć konfigurację.",
"wsl.onboarding.finishingDistro": "Kończenie konfiguracji {{distro}}.",
"wsl.onboarding.pickDistro": "Wybierz dystrybucję lub zainstaluj jedną z poniższych.",
"wsl.onboarding.checkingOpencode": "Sprawdzanie OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Sprawdzanie OpenCode w dystrybucji {{distro}}...",
"wsl.onboarding.updatingOpencode": "Aktualizowanie OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Aktualizowanie OpenCode w dystrybucji {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Zaktualizuj OpenCode w dystrybucji {{distro}}.",
"wsl.onboarding.updateOpencode": "Zaktualizuj OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode jest gotowy w dystrybucji {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode jest gotowy.",
"wsl.onboarding.installOpencodeIn": "Zainstaluj OpenCode w dystrybucji {{distro}}.",
"wsl.onboarding.installOpencode": "Zainstaluj OpenCode",
"wsl.onboarding.chooseDistroFirst": "Najpierw wybierz dystrybucję.",
"wsl.onboarding.loadFailed": "Nie udało się załadować stanu WSL.",
"wsl.onboarding.loading": "Ładowanie...",
"wsl.onboarding.installedDistros": "Zainstalowane dystrybucje",
"wsl.onboarding.checkAgain": "Sprawdź ponownie",
"wsl.onboarding.distroStatus.ready": "Gotowa",
"wsl.onboarding.distroStatus.checking": "Sprawdzanie...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode nie jest zainstalowany",
"wsl.onboarding.distroStatus.missingTools": "Brak bash i curl",
"wsl.onboarding.distroStatus.unsupported": "Nieobsługiwana · Użyj WSL 2",
"wsl.onboarding.needAnotherDistro": "Potrzebujesz innej dystrybucji?",
"wsl.onboarding.needAnotherDistroHint": "Zainstaluj dystrybucję systemu Linux z katalogu WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL nie jest zainstalowany",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Podsystem Windows dla systemu Linux) jest wymagany, zanim OpenCode będzie mógł dodać serwer WSL",
"wsl.onboarding.wslUnavailable.title": "WSL jest niedostępny",
"wsl.onboarding.wslUnavailable.description": "OpenCode nie mógł zweryfikować WSL na tym komputerze.",
"wsl.onboarding.installWsl": "Zainstaluj WSL",
"wsl.onboarding.windowsRestartRequired":
"Uruchom ponownie system Windows, aby dokończyć instalację WSL, a następnie ponownie otwórz OpenCode.",
"wsl.onboarding.next": "Dalej",
"wsl.onboarding.refresh": "Odśwież",
"wsl.onboarding.allDistrosAdded": "Wszystkie zainstalowane dystrybucje zostały już dodane.",
"wsl.onboarding.noDistros": "Nie wykryto jeszcze żadnych dystrybucji.",
"wsl.onboarding.install": "Zainstaluj",
"wsl.onboarding.installing": "Instalowanie...",
"wsl.onboarding.installDistro": "Zainstaluj dystrybucję",
"wsl.onboarding.searchDistros": "Szukaj dystrybucji",
"wsl.onboarding.wsl2Required": "Wymagany jest WSL 2.",
"wsl.onboarding.toolsRequired": "Ta dystrybucja wymaga bash i curl.",
"wsl.onboarding.openTerminal": "Otwórz terminal",
"wsl.onboarding.path": "Ścieżka: {{path}}",
"wsl.onboarding.notFound": "nie znaleziono",
"wsl.onboarding.version": "Wersja: {{version}}",
"wsl.onboarding.unknown": "nieznana",
"wsl.onboarding.desktopVersion": "aplikacja komputerowa {{version}}",
"wsl.onboarding.versionMismatch": "Zainstalowana wersja nie jest zgodna z wersją aplikacji komputerowej.",
"wsl.onboarding.adding": "Dodawanie...",
"dialog.project.edit.title": "Edytuj projekt",
"dialog.project.edit.name": "Nazwa",
"dialog.project.edit.icon": "Ikona",
@ -324,7 +405,8 @@ 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": "Runs after creating a new workspace (worktree).",
"dialog.project.edit.worktree.startup.description":
"Uruchamiany po utworzeniu nowej przestrzeni roboczej (worktree).",
"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.',
@ -371,6 +453,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Język",
@ -407,10 +490,12 @@ export const dict = {
"toast.update.action.notYet": "Jeszcze nie",
"error.page.title": "Coś poszło nie tak",
"error.page.description": "Wystąpił błąd podczas ładowania aplikacji.",
"error.page.description.localServerStartup": "Wystąpił błąd podczas uruchamiania serwera lokalnego.",
"error.page.details.label": "Szczegóły błędu",
"error.page.action.restart": "Restartuj",
"error.page.action.report": "Zgłoś błąd",
"error.page.action.reported": "Błąd zgłoszony",
"error.page.action.exportLogs": "Eksportuj dzienniki",
"error.page.action.checking": "Sprawdzanie...",
"error.page.action.checkUpdates": "Sprawdź aktualizacje",
"error.page.action.updateTo": "Zaktualizuj do {{version}}",
@ -430,7 +515,8 @@ export const dict = {
"error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}",
"error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}",
"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.mcpFailed":
"Serwer MCP „{{name}}” nie uruchomił się. Uwaga: OpenCode nie obsługuje jeszcze uwierzytelniania MCP.",
"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ę.',
@ -452,10 +538,30 @@ export const dict = {
"home.recentProjects": "Ostatnie projekty",
"home.empty.title": "Brak ostatnich projektów",
"home.empty.description": "Zacznij od otwarcia lokalnego projektu",
"home.title": "Strona główna",
"home.projects": "Projekty",
"home.project.add": "Dodaj projekt",
"home.recentlyClosed": "Ostatnio zamknięte",
"home.server.collapse": "Zwiń projekty serwera",
"home.server.expand": "Rozwiń projekty serwera",
"home.sessions.search.placeholder": "Szukaj sesji",
"home.sessions.search.placeholder.scoped": "Szukaj sesji w {{scope}}",
"home.sessions.search.sessions": "Sesje",
"home.sessions.search.noResults": "Nie znaleziono sesji dla {{query}}",
"home.sessions.empty": "Jeszcze nic tu nie ma",
"home.sessions.empty.description": "Utwórz sesję, aby rozpocząć",
"home.sessions.group.today": "Dzisiaj",
"home.sessions.group.yesterday": "Wczoraj",
"home.sessions.group.older": "Starsze",
"session.tab.session": "Sesja",
"session.tab.review": "Przegląd",
"session.tab.context": "Kontekst",
"session.tab.unknown": "Nieznana sesja",
"session.panel.reviewAndFiles": "Przegląd i pliki",
"session.error.notFound": "Nie można znaleźć tej sesji",
"session.error.notFound.description": "Ta karta wskazuje sesję, która nie istnieje już na tym serwerze.",
"session.error.notFound.closeTab": "Zamknij kartę",
"session.error.serverConnection": "Nie można połączyć się z tym serwerem",
"session.review.filesChanged": "Zmieniono {{count}} plików",
"session.review.change.one": "Zmiana",
"session.review.change.other": "Zmiany",
@ -464,6 +570,8 @@ export const dict = {
"session.review.noVcs": "Nie wykryto systemu kontroli wersji Git, zmiany nie są wyświetlane",
"session.review.noSnapshot": "Śledzenie migawek jest wyłączone w konfiguracji, więc zmiany w sesji są niedostępne",
"session.review.noChanges": "Brak zmian",
"session.review.noUncommittedChanges": "Brak jeszcze niezatwierdzonych zmian",
"session.review.noBranchChanges": "Brak jeszcze zmian w gałęzi",
"session.files.selectToOpen": "Wybierz plik do otwarcia",
"session.files.all": "Wszystkie pliki",
"session.files.empty": "Brak plików",
@ -477,6 +585,10 @@ export const dict = {
"session.todo.title": "Zadania",
"session.todo.collapse": "Zwiń",
"session.todo.expand": "Rozwiń",
"session.question.minimize": "Zminimalizuj pytanie",
"session.question.restore": "Przywróć pytanie",
"session.question.pending.one": "{{count}} oczekujące pytanie",
"session.question.pending.other": "Pytania oczekujące: {{count}}",
"session.followupDock.summary.one": "{{count}} wiadomość w kolejce",
"session.followupDock.summary.other": "{{count}} wiadomości w kolejce",
"session.followupDock.sendNow": "Wyślij teraz",
@ -489,9 +601,16 @@ export const dict = {
"session.revertDock.expand": "Rozwiń cofnięte wiadomości",
"session.revertDock.restore": "Przywróć wiadomość",
"session.new.title": "Zbuduj cokolwiek",
"session.new.project.new": "Nowy projekt",
"session.new.project.search": "Szukaj projektów",
"session.new.project.add": "Dodaj projekt",
"session.new.worktree.main": "Główna gałąź",
"session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})",
"session.new.worktree.create": "Utwórz nowe drzewo robocze",
"session.new.workspace.runIn": "Uruchom sesję w",
"session.new.workspace.triggerLocal": "Lokalnie",
"session.new.workspace.local": "Lokalne repozytorium",
"session.new.workspace.existing": "Przestrzeń robocza…",
"session.new.lastModified": "Ostatnio zmodyfikowano",
"session.header.search.placeholder": "Szukaj {{project}}",
"session.header.searchFiles": "Szukaj plików",
@ -555,15 +674,18 @@ export const dict = {
"sidebar.project.recentSessions": "Ostatnie sesje",
"sidebar.project.viewAllSessions": "Zobacz wszystkie sesje",
"sidebar.project.clearNotifications": "Wyczyść powiadomienia",
"sidebar.empty.title": "Brak otwartych projektów",
"sidebar.empty.description": "Otwórz projekt, aby rozpocząć",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Pulpit",
"settings.section.server": "Serwer",
"settings.tab.general": "Ogólne",
"settings.tab.shortcuts": "Skróty",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL integration",
"settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.",
"settings.desktop.wsl.title": "Integracja z WSL",
"settings.desktop.wsl.description": "Uruchamiaj serwer OpenCode wewnątrz WSL w systemie Windows.",
"settings.general.section.appearance": "Wygląd",
"settings.general.section.advanced": "Zaawansowane",
"settings.general.section.notifications": "Powiadomienia systemowe",
"settings.general.section.updates": "Aktualizacje",
"settings.general.section.sounds": "Efekty dźwiękowe",
@ -571,6 +693,11 @@ export const dict = {
"settings.general.section.display": "Ekran",
"settings.general.row.language.title": "Język",
"settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode",
"settings.general.row.shell.title": "Powłoka terminala",
"settings.general.row.shell.description":
"Wybierz powłokę używaną w terminalu. Zgodne powłoki są również używane przez wywołania narzędzi agenta.",
"settings.general.row.shell.autoDefault": "Automatycznie (domyślna)",
"settings.general.row.shell.terminalOnly": "tylko terminal",
"settings.general.row.appearance.title": "Wygląd",
"settings.general.row.appearance.description": "Dostosuj wygląd OpenCode na swoim urządzeniu",
"settings.general.row.colorScheme.title": "Schemat kolorów",
@ -580,14 +707,30 @@ export const dict = {
"settings.general.row.theme.description": "Dostosuj motyw OpenCode.",
"settings.general.row.font.title": "Czcionka kodu",
"settings.general.row.font.description": "Dostosuj czcionkę używaną w blokach kodu",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Czcionka terminala",
"settings.general.row.terminalFont.description": "Dostosuj czcionkę używaną w terminalu",
"settings.general.row.uiFont.title": "Czcionka interfejsu",
"settings.general.row.uiFont.description": "Dostosuj czcionkę używaną w całym interfejsie",
"settings.general.row.followup.title": "Zachowanie kontynuacji",
"settings.general.row.followup.description": "Wybierz, czy kontynuacja ma być natychmiastowa, czy czekać w kolejce",
"settings.general.row.followup.option.queue": "Kolejka",
"settings.general.row.followup.option.steer": "Sterowanie",
"settings.general.row.showFileTree.title": "Drzewo plików",
"settings.general.row.showFileTree.description": "Pokaż panel drzewa plików w sesjach",
"settings.general.row.showNavigation.title": "Elementy nawigacji",
"settings.general.row.showNavigation.description":
"Pokaż przyciski Wstecz i Dalej na pasku tytułu aplikacji komputerowej",
"settings.general.row.showSearch.title": "Paleta poleceń",
"settings.general.row.showSearch.description": "Pokaż przycisk wyszukiwania i palety poleceń na pasku tytułu",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Pokaż przycisk terminala na pasku tytułu aplikacji komputerowej",
"settings.general.row.showStatus.title": "Status serwera",
"settings.general.row.showStatus.description": "Pokaż przycisk statusu serwera na pasku tytułu",
"settings.general.row.mobileTitlebarBottom.title": "Dolna nawigacja",
"settings.general.row.mobileTitlebarBottom.description":
"Umieść pasek tytułu i karty sesji u dołu ekranu na urządzeniach mobilnych",
"settings.general.row.showCustomAgents.title": "Agenci niestandardowi",
"settings.general.row.showCustomAgents.description": "Pokaż wybór agenta w edytorze wiadomości",
"settings.general.row.reasoningSummaries.title": "Pokaż podsumowania wnioskowania",
"settings.general.row.reasoningSummaries.description": "Wyświetlaj podsumowania wnioskowania modelu na osi czasu",
"settings.general.row.shellToolPartsExpanded.title": "Rozwijaj elementy narzędzia shell",
@ -596,6 +739,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Rozwijaj elementy narzędzia edit",
"settings.general.row.editToolPartsExpanded.description":
"Domyślnie pokazuj rozwinięte elementy narzędzi edit, write i patch na osi czasu",
"settings.general.row.newLayoutDesigns.title": "Nowy układ i wygląd",
"settings.general.row.newLayoutDesigns.description":
"Włącz przeprojektowany układ, stronę główną, edytor wiadomości i interfejs sesji",
"settings.general.row.pinchZoom.title": "Powiększanie gestem szczypania",
"settings.general.row.pinchZoom.description":
"Zezwalaj na powiększanie gestem szczypania na gładziku i przewijaniem z klawiszem Ctrl",
"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":
@ -608,6 +757,8 @@ export const dict = {
"settings.updates.row.check.description": "Ręcznie sprawdź aktualizacje i zainstaluj, jeśli są dostępne",
"settings.updates.action.checkNow": "Sprawdź teraz",
"settings.updates.action.checking": "Sprawdzanie...",
"settings.updates.action.downloading": "Pobieranie...",
"settings.updates.action.installing": "Instalowanie...",
"settings.updates.toast.latest.title": "Masz najnowszą wersję",
"settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji OpenCode.",
"sound.option.none": "Brak",

View file

@ -23,6 +23,9 @@ export const dict = {
"command.sidebar.toggle": "Переключить боковую панель",
"command.project.open": "Открыть проект",
"command.project.previous": "Предыдущий проект",
"command.project.next": "Следующий проект",
"command.project.index": "Переключиться на проект {{index}}",
"command.provider.connect": "Подключить провайдера",
"command.server.switch": "Переключить сервер",
"command.settings.open": "Открыть настройки",
@ -45,6 +48,7 @@ export const dict = {
"command.session.new": "Новая сессия",
"command.file.open": "Открыть файл",
"command.tab.close": "Закрыть вкладку",
"command.tab.reopenClosed": "Повторно открыть закрытую вкладку",
"command.context.addSelection": "Добавить выделение в контекст",
"command.context.addSelection.description": "Добавить выбранные строки из текущего файла",
"command.input.focus": "Фокус на поле ввода",
@ -208,6 +212,11 @@ export const dict = {
"model.input.video": "видео",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Разрешено: {{inputs}}",
"model.tooltip.context.label": "Контекст",
"model.tooltip.inputs": "Входные данные",
"model.tooltip.model": "Модель",
"model.tooltip.provider": "Провайдер",
"model.tooltip.reasoning": "Рассуждение",
"model.tooltip.reasoning.allowed": "Разрешает рассуждение",
"model.tooltip.reasoning.none": "Без рассуждения",
"model.tooltip.context": "Лимит контекста {{limit}}",
@ -218,6 +227,7 @@ export const dict = {
"common.loading": "Загрузка",
"common.loading.ellipsis": "...",
"common.cancel": "Отмена",
"common.clear": "Очистить",
"common.connect": "Подключить",
"common.disconnect": "Отключить",
"common.continue": "Отправить",
@ -235,6 +245,8 @@ export const dict = {
"prompt.mode.shell": "Оболочка",
"prompt.mode.normal": "Промпт",
"prompt.mode.shell.exit": "esc для выхода",
"session.child.promptDisabled": "В сессиях субагентов нельзя отправлять запросы.",
"session.child.backToParent": "Вернуться к основной сессии.",
"prompt.example.1": "Исправить TODO в коде",
"prompt.example.2": "Какой технологический стек этого проекта?",
@ -341,6 +353,75 @@ export const dict = {
"dialog.server.menu.delete": "Удалить",
"dialog.server.current": "Текущий сервер",
"dialog.server.status.default": "По умолч.",
"wsl.server.add": "Добавить сервер WSL",
"wsl.server.addShort": "Добавить WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Сервер WSL",
"wsl.server.retryStart": "Повторить запуск",
"wsl.server.updating": "Обновление...",
"wsl.onboarding.step.distro": "Выбрать дистрибутив",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Проверка WSL...",
"wsl.onboarding.restartRequired": "Чтобы завершить установку WSL, перезапустите Windows.",
"wsl.onboarding.ready": "WSL готова к работе.",
"wsl.onboarding.required": "Для продолжения требуется WSL.",
"wsl.onboarding.checkingDistros": "Проверка дистрибутивов...",
"wsl.onboarding.installingDistro": "Установка {{distro}}...",
"wsl.onboarding.checkingDistro": "Проверка {{distro}}...",
"wsl.onboarding.listingDistros": "Получение списка дистрибутивов...",
"wsl.onboarding.distroReady": "Дистрибутив {{distro}} готов к работе.",
"wsl.onboarding.distroNotInstalled": "Дистрибутив {{distro}} пока не установлен.",
"wsl.onboarding.openDistroOnce": "Откройте {{distro}} один раз, чтобы завершить настройку.",
"wsl.onboarding.finishingDistro": "Завершение настройки {{distro}}.",
"wsl.onboarding.pickDistro": "Выберите дистрибутив или установите его ниже.",
"wsl.onboarding.checkingOpencode": "Проверка OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Проверка OpenCode в {{distro}}...",
"wsl.onboarding.updatingOpencode": "Обновление OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Обновление OpenCode в {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Обновите OpenCode в {{distro}}.",
"wsl.onboarding.updateOpencode": "Обновить OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode в {{distro}} готов к работе.",
"wsl.onboarding.opencodeReady": "OpenCode готов к работе.",
"wsl.onboarding.installOpencodeIn": "Установите OpenCode в {{distro}}.",
"wsl.onboarding.installOpencode": "Установить OpenCode",
"wsl.onboarding.chooseDistroFirst": "Сначала выберите дистрибутив.",
"wsl.onboarding.loadFailed": "Не удалось загрузить состояние WSL.",
"wsl.onboarding.loading": "Загрузка...",
"wsl.onboarding.installedDistros": "Установленные дистрибутивы",
"wsl.onboarding.checkAgain": "Проверить снова",
"wsl.onboarding.distroStatus.ready": "Готов",
"wsl.onboarding.distroStatus.checking": "Проверка...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode не установлен",
"wsl.onboarding.distroStatus.missingTools": "Отсутствуют bash и curl",
"wsl.onboarding.distroStatus.unsupported": "Не поддерживается · Используйте WSL 2",
"wsl.onboarding.needAnotherDistro": "Нужен другой дистрибутив?",
"wsl.onboarding.needAnotherDistroHint": "Установите дистрибутив Linux из каталога WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL не установлена",
"wsl.onboarding.wslNotInstalled.description":
"Для добавления сервера WSL в OpenCode требуется WSL (Windows Subsystem for Linux)",
"wsl.onboarding.wslUnavailable.title": "WSL недоступна",
"wsl.onboarding.wslUnavailable.description": "OpenCode не смог проверить WSL на этом компьютере.",
"wsl.onboarding.installWsl": "Установить WSL",
"wsl.onboarding.windowsRestartRequired":
"Перезапустите Windows, чтобы завершить установку WSL, затем снова откройте OpenCode.",
"wsl.onboarding.next": "Далее",
"wsl.onboarding.refresh": "Обновить",
"wsl.onboarding.allDistrosAdded": "Все установленные дистрибутивы уже добавлены.",
"wsl.onboarding.noDistros": "Дистрибутивы пока не обнаружены.",
"wsl.onboarding.install": "Установить",
"wsl.onboarding.installing": "Установка...",
"wsl.onboarding.installDistro": "Установить дистрибутив",
"wsl.onboarding.searchDistros": "Поиск дистрибутивов",
"wsl.onboarding.wsl2Required": "Требуется WSL 2.",
"wsl.onboarding.toolsRequired": "Для этого дистрибутива нужны bash и curl.",
"wsl.onboarding.openTerminal": "Открыть терминал",
"wsl.onboarding.path": "Путь: {{path}}",
"wsl.onboarding.notFound": "не найден",
"wsl.onboarding.version": "Версия: {{version}}",
"wsl.onboarding.unknown": "неизвестно",
"wsl.onboarding.desktopVersion": "приложение {{version}}",
"wsl.onboarding.versionMismatch": "Установленная версия не соответствует версии приложения.",
"wsl.onboarding.adding": "Добавление...",
"dialog.project.edit.title": "Редактировать проект",
"dialog.project.edit.name": "Название",
@ -405,6 +486,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -452,10 +534,12 @@ export const dict = {
"error.page.title": "Что-то пошло не так",
"error.page.description": "Произошла ошибка при загрузке приложения.",
"error.page.description.localServerStartup": "Произошла ошибка при запуске локального сервера.",
"error.page.details.label": "Детали ошибки",
"error.page.action.restart": "Перезапустить",
"error.page.action.report": "Сообщить об ошибке",
"error.page.action.reported": "Об ошибке сообщено",
"error.page.action.exportLogs": "Экспортировать журналы",
"error.page.action.checking": "Проверка...",
"error.page.action.checkUpdates": "Проверить обновления",
"error.page.action.updateTo": "Обновить до {{version}}",
@ -505,11 +589,31 @@ export const dict = {
"home.recentProjects": "Недавние проекты",
"home.empty.title": "Нет недавних проектов",
"home.empty.description": "Начните с открытия локального проекта",
"home.title": "Главная",
"home.projects": "Проекты",
"home.project.add": "Добавить проект",
"home.recentlyClosed": "Недавно закрытые",
"home.server.collapse": "Свернуть проекты сервера",
"home.server.expand": "Развернуть проекты сервера",
"home.sessions.search.placeholder": "Поиск сессий",
"home.sessions.search.placeholder.scoped": "Поиск сессий в {{scope}}",
"home.sessions.search.sessions": "Сессии",
"home.sessions.search.noResults": "Сессии по запросу {{query}} не найдены",
"home.sessions.empty": "Здесь пока ничего нет",
"home.sessions.empty.description": "Создайте сессию, чтобы начать",
"home.sessions.group.today": "Сегодня",
"home.sessions.group.yesterday": "Вчера",
"home.sessions.group.older": "Ранее",
"session.tab.session": "Сессия",
"session.tab.review": "Обзор",
"session.tab.context": "Контекст",
"session.tab.unknown": "Неизвестная сессия",
"session.panel.reviewAndFiles": "Обзор и файлы",
"session.error.notFound": "Эта сессия не найдена",
"session.error.notFound.description": "Эта вкладка указывает на сессию, которой больше нет на этом сервере.",
"session.error.notFound.closeTab": "Закрыть вкладку",
"session.error.serverConnection": "Не удаётся подключиться к этому серверу",
"session.review.filesChanged": "{{count}} файлов изменено",
"session.review.change.one": "Изменение",
"session.review.change.other": "Изменения",
@ -518,6 +622,8 @@ export const dict = {
"session.review.noVcs": "Система контроля версий Git не обнаружена, изменения не отображаются",
"session.review.noSnapshot": "Отслеживание снимков отключено в настройках, поэтому изменения сессии недоступны",
"session.review.noChanges": "Нет изменений",
"session.review.noUncommittedChanges": "Пока нет незафиксированных изменений",
"session.review.noBranchChanges": "Пока нет изменений в ветке",
"session.files.selectToOpen": "Выберите файл, чтобы открыть",
"session.files.all": "Все файлы",
"session.files.empty": "Нет файлов",
@ -532,6 +638,10 @@ export const dict = {
"session.todo.title": "Задачи",
"session.todo.collapse": "Свернуть",
"session.todo.expand": "Развернуть",
"session.question.minimize": "Свернуть вопрос",
"session.question.restore": "Восстановить вопрос",
"session.question.pending.one": "{{count}} вопрос без ответа",
"session.question.pending.other": "Вопросы без ответа: {{count}}",
"session.followupDock.summary.one": "{{count}} сообщение в очереди",
"session.followupDock.summary.other": "{{count}} сообщений в очереди",
"session.followupDock.sendNow": "Отправить сейчас",
@ -545,9 +655,16 @@ export const dict = {
"session.revertDock.restore": "Восстановить сообщение",
"session.new.title": "Создавайте что угодно",
"session.new.project.new": "Новый проект",
"session.new.project.search": "Поиск проектов",
"session.new.project.add": "Добавить проект",
"session.new.worktree.main": "Основная ветка",
"session.new.worktree.mainWithBranch": "Основная ветка ({{branch}})",
"session.new.worktree.create": "Создать новый worktree",
"session.new.workspace.runIn": "Запустить сессию в",
"session.new.workspace.triggerLocal": "Локально",
"session.new.workspace.local": "Локальный репозиторий",
"session.new.workspace.existing": "Рабочее пространство…",
"session.new.lastModified": "Последнее изменение",
"session.header.search.placeholder": "Поиск {{project}}",
@ -619,6 +736,8 @@ export const dict = {
"sidebar.project.recentSessions": "Недавние сессии",
"sidebar.project.viewAllSessions": "Посмотреть все сессии",
"sidebar.project.clearNotifications": "Очистить уведомления",
"sidebar.empty.title": "Нет открытых проектов",
"sidebar.empty.description": "Откройте проект, чтобы начать",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Приложение",
@ -630,6 +749,7 @@ export const dict = {
"settings.desktop.wsl.description": "Запускать сервер OpenCode внутри WSL на Windows.",
"settings.general.section.appearance": "Внешний вид",
"settings.general.section.advanced": "Дополнительно",
"settings.general.section.notifications": "Системные уведомления",
"settings.general.section.updates": "Обновления",
"settings.general.section.sounds": "Звуковые эффекты",
@ -638,6 +758,11 @@ export const dict = {
"settings.general.row.language.title": "Язык",
"settings.general.row.language.description": "Изменить язык отображения OpenCode",
"settings.general.row.shell.title": "Оболочка терминала",
"settings.general.row.shell.description":
"Выберите оболочку для терминала. Совместимые оболочки также используются агентом при вызове инструментов.",
"settings.general.row.shell.autoDefault": "Авто (по умолчанию)",
"settings.general.row.shell.terminalOnly": "только терминал",
"settings.general.row.appearance.title": "Внешний вид",
"settings.general.row.appearance.description": "Настройте как OpenCode выглядит на вашем устройстве",
"settings.general.row.colorScheme.title": "Цветовая схема",
@ -646,8 +771,8 @@ export const dict = {
"settings.general.row.theme.description": "Настройте оформление OpenCode.",
"settings.general.row.font.title": "Шрифт кода",
"settings.general.row.font.description": "Настройте шрифт, используемый в блоках кода",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Шрифт терминала",
"settings.general.row.terminalFont.description": "Настройте шрифт, используемый в терминале",
"settings.general.row.uiFont.title": "Шрифт интерфейса",
"settings.general.row.uiFont.description": "Настройте шрифт, используемый во всем интерфейсе",
"settings.general.row.followup.title": "Поведение уточняющих вопросов",
@ -655,6 +780,22 @@ export const dict = {
"Выберите, отправлять ли уточняющие вопросы сразу или помещать их в очередь",
"settings.general.row.followup.option.queue": "Очередь",
"settings.general.row.followup.option.steer": "Направлять",
"settings.general.row.showFileTree.title": "Дерево файлов",
"settings.general.row.showFileTree.description": "Показывать панель дерева файлов в сессиях",
"settings.general.row.showNavigation.title": "Элементы навигации",
"settings.general.row.showNavigation.description":
"Показывать кнопки «Назад» и «Вперёд» в строке заголовка приложения",
"settings.general.row.showSearch.title": "Палитра команд",
"settings.general.row.showSearch.description": "Показывать кнопку поиска и палитры команд в строке заголовка",
"settings.general.row.showTerminal.title": "Терминал",
"settings.general.row.showTerminal.description": "Показывать кнопку терминала в строке заголовка приложения",
"settings.general.row.showStatus.title": "Состояние сервера",
"settings.general.row.showStatus.description": "Показывать кнопку состояния сервера в строке заголовка",
"settings.general.row.mobileTitlebarBottom.title": "Нижняя навигация",
"settings.general.row.mobileTitlebarBottom.description":
"На мобильных устройствах размещать строку заголовка и вкладки сессии внизу экрана",
"settings.general.row.showCustomAgents.title": "Пользовательские агенты",
"settings.general.row.showCustomAgents.description": "Показывать выбор агента в редакторе запросов",
"settings.general.row.reasoningSummaries.title": "Показывать сводки рассуждений",
"settings.general.row.reasoningSummaries.description": "Отображать сводки рассуждений модели в ленте",
@ -664,6 +805,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Разворачивать элементы инструмента edit",
"settings.general.row.editToolPartsExpanded.description":
"Показывать элементы инструментов edit, write и patch в ленте развернутыми по умолчанию",
"settings.general.row.newLayoutDesigns.title": "Новая компоновка и оформление",
"settings.general.row.newLayoutDesigns.description":
"Включить обновлённую компоновку, главную страницу, редактор запросов и интерфейс сессии",
"settings.general.row.pinchZoom.title": "Масштабирование щипком",
"settings.general.row.pinchZoom.description":
"Разрешить масштабирование жестом щипка на трекпаде и прокруткой с Ctrl",
"settings.general.row.wayland.title": "Использовать нативный Wayland",
"settings.general.row.wayland.description": "Отключить X11 fallback на Wayland. Требуется перезапуск.",
"settings.general.row.wayland.tooltip":
@ -678,6 +825,8 @@ export const dict = {
"settings.updates.row.check.description": "Проверить обновления вручную и установить, если доступны",
"settings.updates.action.checkNow": "Проверить сейчас",
"settings.updates.action.checking": "Проверка...",
"settings.updates.action.downloading": "Загрузка...",
"settings.updates.action.installing": "Установка...",
"settings.updates.toast.latest.title": "У вас последняя версия",
"settings.updates.toast.latest.description": "Вы используете последнюю версию OpenCode.",
"sound.option.none": "Нет",

View file

@ -23,6 +23,9 @@ export const dict = {
"command.sidebar.toggle": "สลับแถบข้าง",
"command.project.open": "เปิดโปรเจกต์",
"command.project.previous": "โปรเจกต์ก่อนหน้า",
"command.project.next": "โปรเจกต์ถัดไป",
"command.project.index": "สลับไปยังโปรเจกต์ {{index}}",
"command.provider.connect": "เชื่อมต่อผู้ให้บริการ",
"command.server.switch": "สลับเซิร์ฟเวอร์",
"command.settings.open": "เปิดการตั้งค่า",
@ -32,7 +35,7 @@ export const dict = {
"command.session.next.unseen": "เซสชันที่ยังไม่ได้อ่านถัดไป",
"command.session.archive": "จัดเก็บเซสชัน",
"command.palette": "คำสั่งค้นหา",
"command.palette": "ชุดคำสั่ง",
"command.theme.cycle": "เปลี่ยนธีม",
"command.theme.set": "ใช้ธีม: {{theme}}",
@ -45,6 +48,7 @@ export const dict = {
"command.session.new": "เซสชันใหม่",
"command.file.open": "เปิดไฟล์",
"command.tab.close": "ปิดแท็บ",
"command.tab.reopenClosed": "เปิดแท็บที่ปิดไปอีกครั้ง",
"command.context.addSelection": "เพิ่มส่วนที่เลือกไปยังบริบท",
"command.context.addSelection.description": "เพิ่มบรรทัดที่เลือกจากไฟล์ปัจจุบัน",
"command.input.focus": "โฟกัสช่องป้อนข้อมูล",
@ -163,7 +167,7 @@ export const dict = {
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "ตัวอักษรพิมพ์เล็ก ตัวเลข ยัติภังค์ หรือขีดล่าง",
"provider.custom.field.name.label": "ชื่อที่แสดง",
"provider.custom.field.name.placeholder": "My AI Provider",
"provider.custom.field.name.placeholder": "ผู้ให้บริการ AI ของฉัน",
"provider.custom.field.baseURL.label": "URL พื้นฐาน",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "คีย์ API",
@ -208,6 +212,11 @@ export const dict = {
"model.input.video": "วิดีโอ",
"model.input.pdf": "PDF",
"model.tooltip.allows": "อนุญาต: {{inputs}}",
"model.tooltip.context.label": "บริบท",
"model.tooltip.inputs": "ข้อมูลนำเข้า",
"model.tooltip.model": "โมเดล",
"model.tooltip.provider": "ผู้ให้บริการ",
"model.tooltip.reasoning": "การใช้เหตุผล",
"model.tooltip.reasoning.allowed": "อนุญาตการใช้เหตุผล",
"model.tooltip.reasoning.none": "ไม่มีการใช้เหตุผล",
"model.tooltip.context": "ขีดจำกัดบริบท {{limit}}",
@ -218,6 +227,7 @@ export const dict = {
"common.loading": "กำลังโหลด",
"common.loading.ellipsis": "...",
"common.cancel": "ยกเลิก",
"common.clear": "ล้าง",
"common.connect": "เชื่อมต่อ",
"common.disconnect": "ยกเลิกการเชื่อมต่อ",
"common.continue": "ส่ง",
@ -235,6 +245,8 @@ export const dict = {
"prompt.mode.shell": "เชลล์",
"prompt.mode.normal": "พรอมต์",
"prompt.mode.shell.exit": "กด esc เพื่อออก",
"session.child.promptDisabled": "ไม่สามารถส่งพรอมต์ในเซสชันเอเจนต์ย่อยได้.",
"session.child.backToParent": "กลับไปยังเซสชันหลัก.",
"prompt.example.1": "แก้ไข TODO ในโค้ดเบส",
"prompt.example.2": "เทคโนโลยีของโปรเจกต์นี้คืออะไร?",
@ -341,6 +353,75 @@ export const dict = {
"dialog.server.menu.delete": "ลบ",
"dialog.server.current": "เซิร์ฟเวอร์ปัจจุบัน",
"dialog.server.status.default": "ค่าเริ่มต้น",
"wsl.server.add": "เพิ่มเซิร์ฟเวอร์ WSL",
"wsl.server.addShort": "เพิ่ม WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "เซิร์ฟเวอร์ WSL",
"wsl.server.retryStart": "ลองเริ่มอีกครั้ง",
"wsl.server.updating": "กำลังอัปเดต...",
"wsl.onboarding.step.distro": "เลือกดิสโทร",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "กำลังตรวจสอบ WSL...",
"wsl.onboarding.restartRequired": "ต้องรีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์.",
"wsl.onboarding.ready": "WSL พร้อมใช้งานแล้ว.",
"wsl.onboarding.required": "ต้องมี WSL เพื่อดำเนินการต่อ.",
"wsl.onboarding.checkingDistros": "กำลังตรวจสอบดิสโทร...",
"wsl.onboarding.installingDistro": "กำลังติดตั้ง {{distro}}...",
"wsl.onboarding.checkingDistro": "กำลังตรวจสอบ {{distro}}...",
"wsl.onboarding.listingDistros": "กำลังแสดงรายการดิสโทร...",
"wsl.onboarding.distroReady": "{{distro}} พร้อมใช้งานแล้ว.",
"wsl.onboarding.distroNotInstalled": "ยังไม่ได้ติดตั้ง {{distro}}.",
"wsl.onboarding.openDistroOnce": "เปิด {{distro}} หนึ่งครั้งเพื่อให้การตั้งค่าเสร็จสมบูรณ์.",
"wsl.onboarding.finishingDistro": "กำลังตั้งค่า {{distro}} ให้เสร็จสมบูรณ์.",
"wsl.onboarding.pickDistro": "เลือกดิสโทรหรือติดตั้งจากรายการด้านล่าง.",
"wsl.onboarding.checkingOpencode": "กำลังตรวจสอบ OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "กำลังตรวจสอบ OpenCode ใน {{distro}}...",
"wsl.onboarding.updatingOpencode": "กำลังอัปเดต OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "กำลังอัปเดต OpenCode ใน {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "อัปเดต OpenCode ใน {{distro}}.",
"wsl.onboarding.updateOpencode": "อัปเดต OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode พร้อมใช้งานใน {{distro}} แล้ว.",
"wsl.onboarding.opencodeReady": "OpenCode พร้อมใช้งานแล้ว.",
"wsl.onboarding.installOpencodeIn": "ติดตั้ง OpenCode ใน {{distro}}.",
"wsl.onboarding.installOpencode": "ติดตั้ง OpenCode",
"wsl.onboarding.chooseDistroFirst": "เลือกดิสโทรก่อน.",
"wsl.onboarding.loadFailed": "ไม่สามารถโหลดสถานะ WSL ได้.",
"wsl.onboarding.loading": "กำลังโหลด...",
"wsl.onboarding.installedDistros": "ดิสโทรที่ติดตั้งแล้ว",
"wsl.onboarding.checkAgain": "ตรวจสอบอีกครั้ง",
"wsl.onboarding.distroStatus.ready": "พร้อมใช้งาน",
"wsl.onboarding.distroStatus.checking": "กำลังตรวจสอบ...",
"wsl.onboarding.distroStatus.opencodeMissing": "ยังไม่ได้ติดตั้ง OpenCode",
"wsl.onboarding.distroStatus.missingTools": "ไม่มี bash, curl",
"wsl.onboarding.distroStatus.unsupported": "ไม่รองรับ · ใช้ WSL 2",
"wsl.onboarding.needAnotherDistro": "ต้องการดิสโทรอื่น?",
"wsl.onboarding.needAnotherDistroHint": "ติดตั้งดิสทริบิวชัน Linux จากแค็ตตาล็อก WSL",
"wsl.onboarding.wslNotInstalled.title": "ยังไม่ได้ติดตั้ง WSL",
"wsl.onboarding.wslNotInstalled.description":
"ต้องมี WSL (Windows Subsystem for Linux) ก่อนที่ OpenCode จะเพิ่มเซิร์ฟเวอร์ WSL ได้",
"wsl.onboarding.wslUnavailable.title": "WSL ไม่พร้อมใช้งาน",
"wsl.onboarding.wslUnavailable.description": "OpenCode ไม่สามารถตรวจสอบ WSL บนเครื่องนี้ได้.",
"wsl.onboarding.installWsl": "ติดตั้ง WSL",
"wsl.onboarding.windowsRestartRequired":
"รีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์ แล้วเปิด OpenCode อีกครั้ง.",
"wsl.onboarding.next": "ถัดไป",
"wsl.onboarding.refresh": "รีเฟรช",
"wsl.onboarding.allDistrosAdded": "เพิ่มดิสโทรที่ติดตั้งไว้ทั้งหมดแล้ว.",
"wsl.onboarding.noDistros": "ยังไม่พบดิสโทร.",
"wsl.onboarding.install": "ติดตั้ง",
"wsl.onboarding.installing": "กำลังติดตั้ง...",
"wsl.onboarding.installDistro": "ติดตั้งดิสโทร",
"wsl.onboarding.searchDistros": "ค้นหาดิสโทร",
"wsl.onboarding.wsl2Required": "ต้องใช้ WSL 2.",
"wsl.onboarding.toolsRequired": "ดิสโทรนี้ต้องมี bash และ curl.",
"wsl.onboarding.openTerminal": "เปิดเทอร์มินัล",
"wsl.onboarding.path": "เส้นทาง: {{path}}",
"wsl.onboarding.notFound": "ไม่พบ",
"wsl.onboarding.version": "เวอร์ชัน: {{version}}",
"wsl.onboarding.unknown": "ไม่ทราบ",
"wsl.onboarding.desktopVersion": "เดสก์ท็อป {{version}}",
"wsl.onboarding.versionMismatch": "เวอร์ชันที่ติดตั้งไม่ตรงกับเวอร์ชันของแอปเดสก์ท็อป.",
"wsl.onboarding.adding": "กำลังเพิ่ม...",
"dialog.project.edit.title": "แก้ไขโปรเจกต์",
"dialog.project.edit.name": "ชื่อ",
@ -403,6 +484,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -451,10 +533,12 @@ export const dict = {
"error.page.title": "เกิดข้อผิดพลาด",
"error.page.description": "เกิดข้อผิดพลาดระหว่างการโหลดแอปพลิเคชัน",
"error.page.description.localServerStartup": "เกิดข้อผิดพลาดขณะเริ่มเซิร์ฟเวอร์ในเครื่อง.",
"error.page.details.label": "รายละเอียดข้อผิดพลาด",
"error.page.action.restart": "รีสตาร์ท",
"error.page.action.report": "รายงานข้อผิดพลาด",
"error.page.action.reported": "รายงานข้อผิดพลาดแล้ว",
"error.page.action.exportLogs": "ส่งออกบันทึก",
"error.page.action.checking": "กำลังตรวจสอบ...",
"error.page.action.checkUpdates": "ตรวจสอบการอัปเดต",
"error.page.action.updateTo": "อัปเดตเป็น {{version}}",
@ -500,11 +584,31 @@ export const dict = {
"home.recentProjects": "โปรเจกต์ล่าสุด",
"home.empty.title": "ไม่มีโปรเจกต์ล่าสุด",
"home.empty.description": "เริ่มต้นโดยเปิดโปรเจกต์ในเครื่อง",
"home.title": "หน้าหลัก",
"home.projects": "โปรเจกต์",
"home.project.add": "เพิ่มโปรเจกต์",
"home.recentlyClosed": "ที่ปิดไปล่าสุด",
"home.server.collapse": "ย่อโปรเจกต์ของเซิร์ฟเวอร์",
"home.server.expand": "ขยายโปรเจกต์ของเซิร์ฟเวอร์",
"home.sessions.search.placeholder": "ค้นหาเซสชัน",
"home.sessions.search.placeholder.scoped": "ค้นหาเซสชันใน {{scope}}",
"home.sessions.search.sessions": "เซสชัน",
"home.sessions.search.noResults": "ไม่พบเซสชันสำหรับ {{query}}",
"home.sessions.empty": "ยังไม่มีอะไรที่นี่",
"home.sessions.empty.description": "สร้างเซสชันเพื่อเริ่มต้น",
"home.sessions.group.today": "วันนี้",
"home.sessions.group.yesterday": "เมื่อวาน",
"home.sessions.group.older": "ก่อนหน้านี้",
"session.tab.session": "เซสชัน",
"session.tab.review": "ตรวจสอบ",
"session.tab.context": "บริบท",
"session.tab.unknown": "เซสชันที่ไม่รู้จัก",
"session.panel.reviewAndFiles": "ตรวจสอบและไฟล์",
"session.error.notFound": "ไม่พบเซสชันนี้",
"session.error.notFound.description": "แท็บนี้อ้างถึงเซสชันที่ไม่มีอยู่บนเซิร์ฟเวอร์นี้แล้ว.",
"session.error.notFound.closeTab": "ปิดแท็บ",
"session.error.serverConnection": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์นี้",
"session.review.filesChanged": "{{count}} ไฟล์ที่เปลี่ยนแปลง",
"session.review.change.one": "การเปลี่ยนแปลง",
"session.review.change.other": "การเปลี่ยนแปลง",
@ -513,6 +617,8 @@ export const dict = {
"session.review.noVcs": "ไม่ตรวจพบระบบควบคุมเวอร์ชัน Git การเปลี่ยนแปลงจะไม่แสดง",
"session.review.noSnapshot": "การติดตามสแนปชอตถูกปิดใช้งานในการกำหนดค่า ดังนั้นการเปลี่ยนแปลงเซสชันจึงไม่พร้อมใช้งาน",
"session.review.noChanges": "ไม่มีการเปลี่ยนแปลง",
"session.review.noUncommittedChanges": "ยังไม่มีการเปลี่ยนแปลงที่รอคอมมิต",
"session.review.noBranchChanges": "ยังไม่มีการเปลี่ยนแปลงในสาขา",
"session.files.selectToOpen": "เลือกไฟล์เพื่อเปิด",
"session.files.empty": "ไม่มีไฟล์",
@ -529,6 +635,10 @@ export const dict = {
"session.todo.title": "สิ่งที่ต้องทำ",
"session.todo.collapse": "ย่อ",
"session.todo.expand": "ขยาย",
"session.question.minimize": "ย่อคำถาม",
"session.question.restore": "คืนค่าคำถาม",
"session.question.pending.one": "คำถามที่รอดำเนินการ {{count}} ข้อ",
"session.question.pending.other": "คำถามที่รอดำเนินการ {{count}} ข้อ",
"session.followupDock.summary.one": "{{count}} ข้อความในคิว",
"session.followupDock.summary.other": "{{count}} ข้อความในคิว",
"session.followupDock.sendNow": "ส่งทันที",
@ -542,9 +652,16 @@ export const dict = {
"session.revertDock.restore": "กู้คืนข้อความ",
"session.new.title": "สร้างอะไรก็ได้",
"session.new.project.new": "โปรเจกต์ใหม่",
"session.new.project.search": "ค้นหาโปรเจกต์",
"session.new.project.add": "เพิ่มโปรเจกต์",
"session.new.worktree.main": "สาขาหลัก",
"session.new.worktree.mainWithBranch": "สาขาหลัก ({{branch}})",
"session.new.worktree.create": "สร้าง worktree ใหม่",
"session.new.workspace.runIn": "เรียกใช้เซสชันใน",
"session.new.workspace.triggerLocal": "ในเครื่อง",
"session.new.workspace.local": "รีโพซิทอรีในเครื่อง",
"session.new.workspace.existing": "พื้นที่ทำงาน…",
"session.new.lastModified": "แก้ไขล่าสุด",
"session.header.search.placeholder": "ค้นหา {{project}}",
@ -612,6 +729,8 @@ export const dict = {
"sidebar.project.recentSessions": "เซสชันล่าสุด",
"sidebar.project.viewAllSessions": "ดูเซสชันทั้งหมด",
"sidebar.project.clearNotifications": "ล้างการแจ้งเตือน",
"sidebar.empty.title": "ไม่มีโปรเจกต์ที่เปิดอยู่",
"sidebar.empty.description": "เปิดโปรเจกต์เพื่อเริ่มต้น",
"app.name.desktop": "OpenCode Desktop",
@ -624,6 +743,7 @@ export const dict = {
"settings.desktop.wsl.description": "เรียกใช้เซิร์ฟเวอร์ OpenCode ภายใน WSL บน Windows",
"settings.general.section.appearance": "รูปลักษณ์",
"settings.general.section.advanced": "ขั้นสูง",
"settings.general.section.notifications": "การแจ้งเตือนระบบ",
"settings.general.section.updates": "การอัปเดต",
"settings.general.section.sounds": "เสียงเอฟเฟกต์",
@ -632,6 +752,11 @@ export const dict = {
"settings.general.row.language.title": "ภาษา",
"settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ OpenCode",
"settings.general.row.shell.title": "เชลล์เทอร์มินัล",
"settings.general.row.shell.description":
"เลือกเชลล์ที่จะใช้กับเทอร์มินัล เชลล์ที่เข้ากันได้จะใช้สำหรับการเรียกเครื่องมือของเอเจนต์ด้วย",
"settings.general.row.shell.autoDefault": "อัตโนมัติ (ค่าเริ่มต้น)",
"settings.general.row.shell.terminalOnly": "เทอร์มินัลเท่านั้น",
"settings.general.row.appearance.title": "รูปลักษณ์",
"settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ OpenCode มีลักษณะบนอุปกรณ์ของคุณ",
"settings.general.row.colorScheme.title": "โทนสี",
@ -640,14 +765,29 @@ export const dict = {
"settings.general.row.theme.description": "ปรับแต่งวิธีการที่ OpenCode มีธีม",
"settings.general.row.font.title": "ฟอนต์โค้ด",
"settings.general.row.font.description": "ปรับแต่งฟอนต์ที่ใช้ในบล็อกโค้ด",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "ฟอนต์เทอร์มินัล",
"settings.general.row.terminalFont.description": "ปรับแต่งฟอนต์ที่ใช้ในเทอร์มินัล",
"settings.general.row.uiFont.title": "ฟอนต์ UI",
"settings.general.row.uiFont.description": "ปรับแต่งฟอนต์ที่ใช้ทั่วทั้งอินเทอร์เฟซ",
"settings.general.row.followup.title": "พฤติกรรมการติดตามผล",
"settings.general.row.followup.description": "เลือกว่าจะให้พร้อมท์ติดตามผลทำงานทันทีหรือรอในคิว",
"settings.general.row.followup.option.queue": "คิว",
"settings.general.row.followup.option.steer": "นำทาง",
"settings.general.row.showFileTree.title": "ต้นไม้ไฟล์",
"settings.general.row.showFileTree.description": "แสดงแผงต้นไม้ไฟล์ในเซสชัน",
"settings.general.row.showNavigation.title": "ตัวควบคุมการนำทาง",
"settings.general.row.showNavigation.description": "แสดงปุ่มย้อนกลับและไปข้างหน้าในแถบชื่อเรื่องเดสก์ท็อป",
"settings.general.row.showSearch.title": "ชุดคำสั่ง",
"settings.general.row.showSearch.description": "แสดงปุ่มค้นหาและชุดคำสั่งในแถบชื่อเรื่อง",
"settings.general.row.showTerminal.title": "เทอร์มินัล",
"settings.general.row.showTerminal.description": "แสดงปุ่มเทอร์มินัลในแถบชื่อเรื่องเดสก์ท็อป",
"settings.general.row.showStatus.title": "สถานะเซิร์ฟเวอร์",
"settings.general.row.showStatus.description": "แสดงปุ่มสถานะเซิร์ฟเวอร์ในแถบชื่อเรื่อง",
"settings.general.row.mobileTitlebarBottom.title": "การนำทางด้านล่าง",
"settings.general.row.mobileTitlebarBottom.description":
"วางแถบชื่อเรื่องและแท็บเซสชันไว้ด้านล่างของหน้าจอบนอุปกรณ์เคลื่อนที่",
"settings.general.row.showCustomAgents.title": "เอเจนต์ที่กำหนดเอง",
"settings.general.row.showCustomAgents.description": "แสดงตัวเลือกเอเจนต์ในช่องเขียนข้อความ",
"settings.general.row.reasoningSummaries.title": "แสดงสรุปการใช้เหตุผล",
"settings.general.row.reasoningSummaries.description": "แสดงสรุปการใช้เหตุผลของโมเดลในไทม์ไลน์",
"settings.general.row.shellToolPartsExpanded.title": "ขยายส่วนเครื่องมือ shell",
@ -655,6 +795,11 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "ขยายส่วนเครื่องมือ edit",
"settings.general.row.editToolPartsExpanded.description":
"แสดงส่วนเครื่องมือ edit, write และ patch แบบขยายตามค่าเริ่มต้นในไทม์ไลน์",
"settings.general.row.newLayoutDesigns.title": "เลย์เอาต์และดีไซน์ใหม่",
"settings.general.row.newLayoutDesigns.description":
"เปิดใช้เลย์เอาต์ หน้าแรก ช่องเขียนข้อความ และ UI เซสชันที่ออกแบบใหม่",
"settings.general.row.pinchZoom.title": "บีบนิ้วเพื่อซูม",
"settings.general.row.pinchZoom.description": "อนุญาตให้ใช้ท่าบีบนิ้วบนแทร็คแพดและ Ctrl-scroll เพื่อซูม",
"settings.general.row.wayland.title": "ใช้ Wayland แบบเนทีฟ",
"settings.general.row.wayland.description": "ปิดใช้งาน X11 fallback บน Wayland ต้องรีสตาร์ท",
"settings.general.row.wayland.tooltip": "บน Linux ที่มีจอภาพรีเฟรชเรตแบบผสม Wayland แบบเนทีฟอาจเสถียรกว่า",
@ -668,6 +813,8 @@ export const dict = {
"settings.updates.row.check.description": "ตรวจสอบการอัปเดตด้วยตนเองและติดตั้งหากมี",
"settings.updates.action.checkNow": "ตรวจสอบทันที",
"settings.updates.action.checking": "กำลังตรวจสอบ...",
"settings.updates.action.downloading": "กำลังดาวน์โหลด...",
"settings.updates.action.installing": "กำลังติดตั้ง...",
"settings.updates.toast.latest.title": "คุณเป็นเวอร์ชันล่าสุดแล้ว",
"settings.updates.toast.latest.description": "คุณกำลังใช้งาน OpenCode เวอร์ชันล่าสุด",
@ -857,10 +1004,10 @@ export const dict = {
"dialog.server.add.usernamePlaceholder": "ชื่อผู้ใช้",
"dialog.server.add.passwordPlaceholder": "รหัสผ่าน",
"server.row.noUsername": "ไม่มีชื่อผู้ใช้",
"session.review.noVcs.createGit.title": "สร้าง Git repository",
"session.review.noVcs.createGit.title": "สร้าง Git รีโพซิทอรี",
"session.review.noVcs.createGit.description": "ติดตาม ตรวจสอบ และเลิกทำสิ่งเปลี่ยนแปลงในโปรเจกต์นี้",
"session.review.noVcs.createGit.actionLoading": "กำลังสร้าง Git repository...",
"session.review.noVcs.createGit.action": "สร้าง Git repository",
"session.review.noVcs.createGit.actionLoading": "กำลังสร้าง Git รีโพซิทอรี...",
"session.review.noVcs.createGit.action": "สร้าง Git รีโพซิทอรี",
"session.todo.progress": "เสร็จสิ้น {{done}} จาก {{total}} รายการ",
"session.question.progress": "{{current}} จาก {{total}} คำถาม",
"session.header.open.finder": "Finder",

View file

@ -27,6 +27,9 @@ export const dict = {
"command.sidebar.toggle": "Kenar çubuğunu aç/kapat",
"command.project.open": "Proje aç",
"command.project.previous": "Önceki proje",
"command.project.next": "Sonraki proje",
"command.project.index": "{{index}} numaralı projeye geç",
"command.provider.connect": "Sağlayıcı bağla",
"command.server.switch": "Sunucu değiştir",
"command.settings.open": "Ayarları aç",
@ -49,6 +52,7 @@ export const dict = {
"command.session.new": "Yeni oturum",
"command.file.open": "Dosya aç",
"command.tab.close": "Sekmeyi kapat",
"command.tab.reopenClosed": "Kapatılan sekmeyi yeniden aç",
"command.context.addSelection": "Seçimi bağlama ekle",
"command.context.addSelection.description": "Mevcut dosyadan seçili satırları ekle",
"command.input.focus": "Girişi odakla",
@ -132,7 +136,7 @@ export const dict = {
"provider.connect.status.waiting": "Yetkilendirme bekleniyor...",
"provider.connect.status.failed": "Yetkilendirme başarısız: {{error}}",
"provider.connect.apiKey.description":
"{{provider}} hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için {{provider}} API anahtarınızı girin.",
"{{provider}} hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için API anahtarınızı girin.",
"provider.connect.apiKey.label": "{{provider}} API anahtarı",
"provider.connect.apiKey.placeholder": "API anahtarı",
"provider.connect.apiKey.required": "API anahtarı gerekli",
@ -143,10 +147,10 @@ export const dict = {
"provider.connect.opencodeZen.visit.prefix": "",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.",
"provider.connect.oauth.code.visit.prefix":
"Hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için ",
"provider.connect.oauth.code.visit.prefix": "Yetkilendirme kodunuzu almak için ",
"provider.connect.oauth.code.visit.link": "bu bağlantıya",
"provider.connect.oauth.code.visit.suffix": " tıklayarak yetkilendirme kodunuzu alın.",
"provider.connect.oauth.code.visit.suffix":
" gidin; ardından hesabınızı bağlayarak OpenCode'da {{provider}} modellerini kullanın.",
"provider.connect.oauth.code.label": "{{method}} yetkilendirme kodu",
"provider.connect.oauth.code.placeholder": "Yetkilendirme kodu",
"provider.connect.oauth.code.required": "Yetkilendirme kodu gerekli",
@ -213,6 +217,11 @@ export const dict = {
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Kabul eder: {{inputs}}",
"model.tooltip.context.label": "Bağlam",
"model.tooltip.inputs": "Girdiler",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Sağlayıcı",
"model.tooltip.reasoning": "Akıl yürütme",
"model.tooltip.reasoning.allowed": "Akıl yürütme destekler",
"model.tooltip.reasoning.none": "Akıl yürütme yok",
"model.tooltip.context": "Bağlam limiti {{limit}}",
@ -223,6 +232,7 @@ export const dict = {
"common.loading": "Yükleniyor",
"common.loading.ellipsis": "...",
"common.cancel": "İptal",
"common.clear": "Temizle",
"common.connect": "Bağlan",
"common.disconnect": "Bağlantı Kes",
"common.continue": "Gönder",
@ -240,6 +250,8 @@ export const dict = {
"prompt.mode.shell": "Kabuk",
"prompt.mode.normal": "Komut",
"prompt.mode.shell.exit": ıkmak için esc",
"session.child.promptDisabled": "Alt ajan oturumlarına istem gönderilemez.",
"session.child.backToParent": "Ana oturuma dön.",
"prompt.example.1": "Kod tabanındaki bir TODO'yu düzelt",
"prompt.example.2": "Bu projenin teknoloji yığını nedir?",
@ -346,6 +358,75 @@ export const dict = {
"dialog.server.menu.delete": "Sil",
"dialog.server.current": "Mevcut Sunucu",
"dialog.server.status.default": "Varsayılan",
"wsl.server.add": "WSL sunucusu ekle",
"wsl.server.addShort": "WSL ekle",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL sunucusu",
"wsl.server.retryStart": "Başlatmayı yeniden dene",
"wsl.server.updating": "Güncelleniyor...",
"wsl.onboarding.step.distro": "Dağıtım seç",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL kontrol ediliyor...",
"wsl.onboarding.restartRequired": "WSL kurulumunu tamamlamak için Windows'un yeniden başlatılması gerekiyor.",
"wsl.onboarding.ready": "WSL hazır.",
"wsl.onboarding.required": "Devam etmek için WSL gerekli.",
"wsl.onboarding.checkingDistros": "Dağıtımlar kontrol ediliyor...",
"wsl.onboarding.installingDistro": "{{distro}} kuruluyor...",
"wsl.onboarding.checkingDistro": "{{distro}} kontrol ediliyor...",
"wsl.onboarding.listingDistros": "Dağıtımlar listeleniyor...",
"wsl.onboarding.distroReady": "{{distro}} hazır.",
"wsl.onboarding.distroNotInstalled": "{{distro}} henüz kurulu değil.",
"wsl.onboarding.openDistroOnce": "Kurulumu tamamlamak için {{distro}} dağıtımını bir kez açın.",
"wsl.onboarding.finishingDistro": "{{distro}} kurulumu tamamlanıyor.",
"wsl.onboarding.pickDistro": "Bir dağıtım seçin veya aşağıdan bir dağıtım kurun.",
"wsl.onboarding.checkingOpencode": "OpenCode kontrol ediliyor...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}} içinde OpenCode kontrol ediliyor...",
"wsl.onboarding.updatingOpencode": "OpenCode güncelleniyor...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}} içinde OpenCode güncelleniyor...",
"wsl.onboarding.updateOpencodeIn": "{{distro}} içindeki OpenCode'u güncelleyin.",
"wsl.onboarding.updateOpencode": "OpenCode'u güncelle",
"wsl.onboarding.opencodeReadyIn": "{{distro}} içinde OpenCode hazır.",
"wsl.onboarding.opencodeReady": "OpenCode hazır.",
"wsl.onboarding.installOpencodeIn": "OpenCode'u {{distro}} içine kurun.",
"wsl.onboarding.installOpencode": "OpenCode'u kur",
"wsl.onboarding.chooseDistroFirst": "Önce bir dağıtım seçin.",
"wsl.onboarding.loadFailed": "WSL durumu yüklenemedi.",
"wsl.onboarding.loading": "Yükleniyor...",
"wsl.onboarding.installedDistros": "Kurulu dağıtımlar",
"wsl.onboarding.checkAgain": "Tekrar kontrol et",
"wsl.onboarding.distroStatus.ready": "Hazır",
"wsl.onboarding.distroStatus.checking": "Kontrol ediliyor...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode kurulu değil",
"wsl.onboarding.distroStatus.missingTools": "bash ve curl eksik",
"wsl.onboarding.distroStatus.unsupported": "Desteklenmiyor · WSL 2 kullanın",
"wsl.onboarding.needAnotherDistro": "Başka bir dağıtım mı gerekiyor?",
"wsl.onboarding.needAnotherDistroHint": "WSL kataloğundan bir Linux dağıtımı kurun",
"wsl.onboarding.wslNotInstalled.title": "WSL kurulu değil",
"wsl.onboarding.wslNotInstalled.description":
"OpenCode'un WSL sunucusu ekleyebilmesi için önce WSL (Linux için Windows Alt Sistemi) kurulmalıdır",
"wsl.onboarding.wslUnavailable.title": "WSL kullanılamıyor",
"wsl.onboarding.wslUnavailable.description": "OpenCode bu makinede WSL'yi doğrulayamadı.",
"wsl.onboarding.installWsl": "WSL'yi kur",
"wsl.onboarding.windowsRestartRequired":
"WSL kurulumunu tamamlamak için Windows'u yeniden başlatın, ardından OpenCode'u tekrar açın.",
"wsl.onboarding.next": "İleri",
"wsl.onboarding.refresh": "Yenile",
"wsl.onboarding.allDistrosAdded": "Kurulu tüm dağıtımlar zaten eklenmiş.",
"wsl.onboarding.noDistros": "Henüz dağıtım algılanmadı.",
"wsl.onboarding.install": "Kur",
"wsl.onboarding.installing": "Kuruluyor...",
"wsl.onboarding.installDistro": "Dağıtım kur",
"wsl.onboarding.searchDistros": "Dağıtım ara",
"wsl.onboarding.wsl2Required": "WSL 2 gerekli.",
"wsl.onboarding.toolsRequired": "Bu dağıtım için bash ve curl gerekli.",
"wsl.onboarding.openTerminal": "Terminali aç",
"wsl.onboarding.path": "Yol: {{path}}",
"wsl.onboarding.notFound": "bulunamadı",
"wsl.onboarding.version": "Sürüm: {{version}}",
"wsl.onboarding.unknown": "bilinmiyor",
"wsl.onboarding.desktopVersion": "masaüstü {{version}}",
"wsl.onboarding.versionMismatch": "Kurulu sürüm masaüstü uygulamasının sürümüyle eşleşmiyor.",
"wsl.onboarding.adding": "Ekleniyor...",
"dialog.project.edit.title": "Projeyi düzenle",
"dialog.project.edit.name": "Ad",
@ -408,6 +489,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -456,10 +538,12 @@ export const dict = {
"error.page.title": "Bir şeyler yanlış gitti",
"error.page.description": "Uygulama yüklenirken bir hata oluştu.",
"error.page.description.localServerStartup": "Yerel sunucu başlatılırken bir hata oluştu.",
"error.page.details.label": "Hata Detayları",
"error.page.action.restart": "Yeniden Başlat",
"error.page.action.report": "Hatayı Bildir",
"error.page.action.reported": "Hata Bildirildi",
"error.page.action.exportLogs": "Günlükleri Dışa Aktar",
"error.page.action.checking": "Kontrol ediliyor...",
"error.page.action.checkUpdates": "Güncellemeleri kontrol et",
"error.page.action.updateTo": "{{version}} sürümüne güncelle",
@ -509,11 +593,31 @@ export const dict = {
"home.recentProjects": "Son projeler",
"home.empty.title": "Son proje yok",
"home.empty.description": "Yerel bir proje açarak başlayın",
"home.title": "Ana Sayfa",
"home.projects": "Projeler",
"home.project.add": "Proje ekle",
"home.recentlyClosed": "Yakın zamanda kapatılanlar",
"home.server.collapse": "Sunucu projelerini daralt",
"home.server.expand": "Sunucu projelerini genişlet",
"home.sessions.search.placeholder": "Oturum ara",
"home.sessions.search.placeholder.scoped": "{{scope}} kapsamında oturum ara",
"home.sessions.search.sessions": "Oturumlar",
"home.sessions.search.noResults": "{{query}} için oturum bulunamadı",
"home.sessions.empty": "Henüz burada bir şey yok",
"home.sessions.empty.description": "Başlamak için bir oturum oluşturun",
"home.sessions.group.today": "Bugün",
"home.sessions.group.yesterday": "Dün",
"home.sessions.group.older": "Daha eski",
"session.tab.session": "Oturum",
"session.tab.review": "İnceleme",
"session.tab.context": "Bağlam",
"session.tab.unknown": "Bilinmeyen Oturum",
"session.panel.reviewAndFiles": "İnceleme ve dosyalar",
"session.error.notFound": "Bu oturum bulunamıyor",
"session.error.notFound.description": "Bu sekme, artık bu sunucuda bulunmayan bir oturuma yönlendiriyor.",
"session.error.notFound.closeTab": "Sekmeyi Kapat",
"session.error.serverConnection": "Bu sunucuya bağlanılamıyor",
"session.review.filesChanged": "{{count}} Dosya Değişti",
"session.review.change.one": "Değişiklik",
"session.review.change.other": "Değişiklik",
@ -523,6 +627,8 @@ export const dict = {
"session.review.noSnapshot":
"Yapılandırmada anlık görüntü takibi devre dışı bırakıldı, bu nedenle oturum değişiklikleri kullanılamıyor",
"session.review.noChanges": "Değişiklik yok",
"session.review.noUncommittedChanges": "Henüz commit edilmemiş değişiklik yok",
"session.review.noBranchChanges": "Henüz dal değişikliği yok",
"session.files.selectToOpen": "Açmak için bir dosya seçin",
"session.files.all": "Tüm dosyalar",
@ -539,6 +645,10 @@ export const dict = {
"session.todo.title": "Görevler",
"session.todo.collapse": "Daralt",
"session.todo.expand": "Genişlet",
"session.question.minimize": "Soruyu küçült",
"session.question.restore": "Soruyu geri yükle",
"session.question.pending.one": "{{count}} bekleyen soru",
"session.question.pending.other": "{{count}} bekleyen soru",
"session.followupDock.summary.one": "{{count}} sıradaki mesaj",
"session.followupDock.summary.other": "{{count}} sıradaki mesaj",
"session.followupDock.sendNow": "Şimdi gönder",
@ -552,9 +662,16 @@ export const dict = {
"session.revertDock.restore": "Mesajı geri yükle",
"session.new.title": "İstediğini yap",
"session.new.project.new": "Yeni proje",
"session.new.project.search": "Proje ara",
"session.new.project.add": "Proje ekle",
"session.new.worktree.main": "Ana dal",
"session.new.worktree.mainWithBranch": "Ana dal ({{branch}})",
"session.new.worktree.create": "Yeni çalışma ağacı oluştur",
"session.new.workspace.runIn": "Oturumu şurada çalıştır",
"session.new.workspace.triggerLocal": "Yerel",
"session.new.workspace.local": "Yerel depo",
"session.new.workspace.existing": "Çalışma alanı…",
"session.new.lastModified": "Son değişiklik",
"session.header.search.placeholder": "{{project}} ara",
@ -624,6 +741,8 @@ export const dict = {
"sidebar.project.recentSessions": "Son oturumlar",
"sidebar.project.viewAllSessions": "Tüm oturumları görüntüle",
"sidebar.project.clearNotifications": "Bildirimleri temizle",
"sidebar.empty.title": "Açık proje yok",
"sidebar.empty.description": "Başlamak için bir proje açın",
"app.name.desktop": "OpenCode Masaüstü",
@ -636,6 +755,7 @@ export const dict = {
"settings.desktop.wsl.description": "OpenCode sunucusunu Windows'ta WSL içinde çalıştırın.",
"settings.general.section.appearance": "Görünüm",
"settings.general.section.advanced": "Gelişmiş",
"settings.general.section.notifications": "Sistem bildirimleri",
"settings.general.section.updates": "Güncellemeler",
"settings.general.section.sounds": "Ses efektleri",
@ -644,6 +764,11 @@ export const dict = {
"settings.general.row.language.title": "Dil",
"settings.general.row.language.description": "OpenCode'un görünüm dilini değiştirin",
"settings.general.row.shell.title": "Terminal Kabuğu",
"settings.general.row.shell.description":
"Terminalinizde kullanılacak kabuğu seçin. Uyumlu kabuklar, ajan araç çağrılarında da kullanılır.",
"settings.general.row.shell.autoDefault": "Otomatik (Varsayılan)",
"settings.general.row.shell.terminalOnly": "yalnızca terminal",
"settings.general.row.appearance.title": "Görünüm",
"settings.general.row.appearance.description": "OpenCode'un cihazınızdaki görünümünü özelleştirin",
"settings.general.row.colorScheme.title": "Renk şeması",
@ -653,8 +778,8 @@ export const dict = {
"settings.general.row.theme.description": "OpenCode'un temasını özelleştirin.",
"settings.general.row.font.title": "Kod Yazı Tipi",
"settings.general.row.font.description": "Kod bloklarında kullanılan yazı tipini özelleştirin",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "Terminal yazı tipi",
"settings.general.row.terminalFont.description": "Terminalde kullanılan yazı tipini özelleştirin",
"settings.general.row.uiFont.title": "Arayüz Yazı Tipi",
"settings.general.row.uiFont.description": "Arayüz genelinde kullanılan yazı tipini özelleştirin",
"settings.general.row.followup.title": "Takip davranışı",
@ -662,6 +787,21 @@ export const dict = {
"Takip komutlarının hemen yönlendirilmesini mi yoksa sırada beklemesini mi istediğinizi seçin",
"settings.general.row.followup.option.queue": "Sıra",
"settings.general.row.followup.option.steer": "Yönlendir",
"settings.general.row.showFileTree.title": "Dosya ağacı",
"settings.general.row.showFileTree.description": "Oturumlarda dosya ağacı panelini göster",
"settings.general.row.showNavigation.title": "Gezinme denetimleri",
"settings.general.row.showNavigation.description": "Masaüstü başlık çubuğunda geri ve ileri düğmelerini göster",
"settings.general.row.showSearch.title": "Komut paleti",
"settings.general.row.showSearch.description": "Başlık çubuğunda arama ve komut paleti düğmesini göster",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Masaüstü başlık çubuğunda terminal düğmesini göster",
"settings.general.row.showStatus.title": "Sunucu durumu",
"settings.general.row.showStatus.description": "Başlık çubuğunda sunucu durumu düğmesini göster",
"settings.general.row.mobileTitlebarBottom.title": "Alt gezinme",
"settings.general.row.mobileTitlebarBottom.description":
"Mobil cihazlarda başlık çubuğunu ve oturum sekmelerini ekranın altına yerleştir",
"settings.general.row.showCustomAgents.title": "Özel ajanlar",
"settings.general.row.showCustomAgents.description": "Yazma alanında ajan seçiciyi göster",
"settings.general.row.reasoningSummaries.title": "Akıl yürütme özetlerini göster",
"settings.general.row.reasoningSummaries.description": "Zaman çizelgesinde model akıl yürütme özetlerini görüntüle",
"settings.general.row.shellToolPartsExpanded.title": "Kabuk araç bileşenlerini genişlet",
@ -670,6 +810,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Düzenleme araç bileşenlerini genişlet",
"settings.general.row.editToolPartsExpanded.description":
"Zaman çizelgesinde düzenleme, yazma ve yama araç bileşenlerini varsayılan olarak genişletilmiş göster",
"settings.general.row.newLayoutDesigns.title": "Yeni düzen ve tasarımlar",
"settings.general.row.newLayoutDesigns.description":
"Yeniden tasarlanan düzeni, ana sayfayı, yazma alanını ve oturum arayüzünü etkinleştir",
"settings.general.row.pinchZoom.title": "Sıkıştırarak yakınlaştır",
"settings.general.row.pinchZoom.description":
"İzleme dörtgeninde sıkıştırma ve Ctrl-kaydırma hareketleriyle yakınlaştırmaya izin ver",
"settings.general.row.wayland.title": "Yerel Wayland kullan",
"settings.general.row.wayland.description":
@ -686,6 +832,8 @@ export const dict = {
"settings.updates.row.check.description": "Elle güncelleme kontrolü yap ve varsa yükle",
"settings.updates.action.checkNow": "Şimdi kontrol et",
"settings.updates.action.checking": "Kontrol ediliyor...",
"settings.updates.action.downloading": "İndiriliyor...",
"settings.updates.action.installing": "Kuruluyor...",
"settings.updates.toast.latest.title": "Güncelsiniz",
"settings.updates.toast.latest.description": "OpenCode'un en son sürümünü kullanıyorsunuz.",

View file

@ -48,6 +48,7 @@ export const dict = {
"command.session.new": "Нова сесія",
"command.file.open": "Відкрити файл",
"command.tab.close": "Закрити вкладку",
"command.tab.reopenClosed": "Повторно відкрити закриту вкладку",
"command.context.addSelection": "Додати виділення до контексту",
"command.context.addSelection.description": "Додати вибрані рядки з поточного файлу",
"command.input.focus": "Фокус на полі введення",
@ -212,6 +213,11 @@ export const dict = {
"model.input.video": "відео",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Дозволяє: {{inputs}}",
"model.tooltip.context.label": "Контекст",
"model.tooltip.inputs": "Вхідні дані",
"model.tooltip.model": "Модель",
"model.tooltip.provider": "Провайдер",
"model.tooltip.reasoning": "Мислення",
"model.tooltip.reasoning.allowed": "Підтримує мислення",
"model.tooltip.reasoning.none": "Без мислення",
"model.tooltip.context": "Ліміт контексту {{limit}}",
@ -222,6 +228,7 @@ export const dict = {
"common.loading": "Завантаження",
"common.loading.ellipsis": "...",
"common.cancel": "Скасувати",
"common.clear": "Очистити",
"common.open": "Відкрити",
"common.connect": "Підключити",
"common.disconnect": "Відключити",
@ -354,6 +361,75 @@ export const dict = {
"dialog.server.menu.delete": "Видалити",
"dialog.server.current": "Поточний сервер",
"dialog.server.status.default": "За замовчуванням",
"wsl.server.add": "Додати сервер WSL",
"wsl.server.addShort": "Додати WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Сервер WSL",
"wsl.server.retryStart": "Повторити запуск",
"wsl.server.updating": "Оновлення...",
"wsl.onboarding.step.distro": "Вибрати дистрибутив",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Перевірка WSL...",
"wsl.onboarding.restartRequired": "Щоб завершити встановлення WSL, потрібно перезапустити Windows.",
"wsl.onboarding.ready": "WSL готова до роботи.",
"wsl.onboarding.required": "Для продовження потрібна WSL.",
"wsl.onboarding.checkingDistros": "Перевірка дистрибутивів...",
"wsl.onboarding.installingDistro": "Встановлення {{distro}}...",
"wsl.onboarding.checkingDistro": "Перевірка {{distro}}...",
"wsl.onboarding.listingDistros": "Отримання списку дистрибутивів...",
"wsl.onboarding.distroReady": "{{distro}} готовий до роботи.",
"wsl.onboarding.distroNotInstalled": "{{distro}} ще не встановлено.",
"wsl.onboarding.openDistroOnce": "Відкрийте {{distro}} один раз, щоб завершити налаштування.",
"wsl.onboarding.finishingDistro": "Завершення налаштування {{distro}}.",
"wsl.onboarding.pickDistro": "Виберіть дистрибутив або встановіть один із наведених нижче.",
"wsl.onboarding.checkingOpencode": "Перевірка OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Перевірка OpenCode у {{distro}}...",
"wsl.onboarding.updatingOpencode": "Оновлення OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Оновлення OpenCode у {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Оновіть OpenCode у {{distro}}.",
"wsl.onboarding.updateOpencode": "Оновити OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode готовий до роботи у {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode готовий до роботи.",
"wsl.onboarding.installOpencodeIn": "Встановіть OpenCode у {{distro}}.",
"wsl.onboarding.installOpencode": "Встановити OpenCode",
"wsl.onboarding.chooseDistroFirst": "Спочатку виберіть дистрибутив.",
"wsl.onboarding.loadFailed": "Не вдалося завантажити стан WSL.",
"wsl.onboarding.loading": "Завантаження...",
"wsl.onboarding.installedDistros": "Встановлені дистрибутиви",
"wsl.onboarding.checkAgain": "Перевірити ще раз",
"wsl.onboarding.distroStatus.ready": "Готовий",
"wsl.onboarding.distroStatus.checking": "Перевірка...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode не встановлено",
"wsl.onboarding.distroStatus.missingTools": "Немає bash і curl",
"wsl.onboarding.distroStatus.unsupported": "Не підтримується · Використовуйте WSL 2",
"wsl.onboarding.needAnotherDistro": "Потрібен інший дистрибутив?",
"wsl.onboarding.needAnotherDistroHint": "Встановіть дистрибутив Linux із каталогу WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL не встановлено",
"wsl.onboarding.wslNotInstalled.description":
"Для додавання сервера WSL в OpenCode потрібна WSL (Підсистема Windows для Linux)",
"wsl.onboarding.wslUnavailable.title": "WSL недоступна",
"wsl.onboarding.wslUnavailable.description": "OpenCode не вдалося перевірити WSL на цьому комп'ютері.",
"wsl.onboarding.installWsl": "Встановити WSL",
"wsl.onboarding.windowsRestartRequired":
"Перезапустіть Windows, щоб завершити встановлення WSL, а потім знову відкрийте OpenCode.",
"wsl.onboarding.next": "Далі",
"wsl.onboarding.refresh": "Оновити",
"wsl.onboarding.allDistrosAdded": "Усі встановлені дистрибутиви вже додано.",
"wsl.onboarding.noDistros": "Дистрибутивів поки не виявлено.",
"wsl.onboarding.install": "Встановити",
"wsl.onboarding.installing": "Встановлення...",
"wsl.onboarding.installDistro": "Встановити дистрибутив",
"wsl.onboarding.searchDistros": "Пошук дистрибутивів",
"wsl.onboarding.wsl2Required": "Для роботи потрібна WSL 2.",
"wsl.onboarding.toolsRequired": "Для цього дистрибутива потрібні bash і curl.",
"wsl.onboarding.openTerminal": "Відкрити термінал",
"wsl.onboarding.path": "Шлях: {{path}}",
"wsl.onboarding.notFound": "не знайдено",
"wsl.onboarding.version": "Версія: {{version}}",
"wsl.onboarding.unknown": "невідомо",
"wsl.onboarding.desktopVersion": "десктопний застосунок {{version}}",
"wsl.onboarding.versionMismatch": "Встановлена версія не відповідає версії десктопного застосунку.",
"wsl.onboarding.adding": "Додавання...",
"server.row.noUsername": "без імені користувача",
"dialog.project.edit.title": "Редагувати проєкт",
@ -473,10 +549,12 @@ export const dict = {
"error.page.title": "Щось пішло не так",
"error.page.description": "Під час завантаження програми сталася помилка.",
"error.page.description.localServerStartup": "Під час запуску локального сервера сталася помилка.",
"error.page.details.label": "Деталі помилки",
"error.page.action.restart": "Перезапустити",
"error.page.action.report": "Повідомити про помилку",
"error.page.action.reported": "Помилку повідомлено",
"error.page.action.exportLogs": "Експортувати журнали",
"error.page.action.checking": "Перевірка...",
"error.page.action.checkUpdates": "Перевірити оновлення",
"error.page.action.updateTo": "Оновити до {{version}}",
@ -533,11 +611,31 @@ export const dict = {
"home.recentProjects": "Нещодавні проєкти",
"home.empty.title": "Немає нещодавніх проєктів",
"home.empty.description": "Почніть, відкривши локальний проєкт",
"home.title": "Головна",
"home.projects": "Проєкти",
"home.project.add": "Додати проєкт",
"home.recentlyClosed": "Нещодавно закриті",
"home.server.collapse": "Згорнути проєкти сервера",
"home.server.expand": "Розгорнути проєкти сервера",
"home.sessions.search.placeholder": "Пошук сесій",
"home.sessions.search.placeholder.scoped": "Пошук сесій у {{scope}}",
"home.sessions.search.sessions": "Сесії",
"home.sessions.search.noResults": "Сесій за запитом {{query}} не знайдено",
"home.sessions.empty": "Тут поки нічого немає",
"home.sessions.empty.description": "Створіть сесію, щоб почати",
"home.sessions.group.today": "Сьогодні",
"home.sessions.group.yesterday": "Учора",
"home.sessions.group.older": "Раніше",
"session.tab.session": "Сесія",
"session.tab.review": "Огляд",
"session.tab.context": "Контекст",
"session.tab.unknown": "Невідома сесія",
"session.panel.reviewAndFiles": "Огляд і файли",
"session.error.notFound": "Цю сесію не знайдено",
"session.error.notFound.description": "Ця вкладка посилається на сесію, якої більше немає на цьому сервері.",
"session.error.notFound.closeTab": "Закрити вкладку",
"session.error.serverConnection": "Не вдається підключитися до цього сервера",
"session.review.filesChanged": "Змінено файлів: {{count}}",
"session.review.change.one": "Зміна",
"session.review.change.other": "Зміни",
@ -570,6 +668,10 @@ export const dict = {
"session.todo.expand": "Розгорнути",
"session.todo.progress": "Виконано {{done}} з {{total}} завдань",
"session.question.progress": "{{current}} з {{total}} запитань",
"session.question.minimize": "Згорнути запитання",
"session.question.restore": "Відновити запитання",
"session.question.pending.one": "{{count}} запитання очікує відповіді",
"session.question.pending.other": "Запитання, що очікують відповіді: {{count}}",
"session.followupDock.summary.one": "{{count}} повідомлення в черзі",
"session.followupDock.summary.other": "{{count}} повідомлень у черзі",
"session.followupDock.sendNow": "Надіслати зараз",
@ -583,9 +685,16 @@ export const dict = {
"session.revertDock.restore": "Відновити повідомлення",
"session.new.title": "Створити що завгодно",
"session.new.project.new": "Новий проєкт",
"session.new.project.search": "Пошук проєктів",
"session.new.project.add": "Додати проєкт",
"session.new.worktree.main": "Основна гілка",
"session.new.worktree.mainWithBranch": "Основна гілка ({{branch}})",
"session.new.worktree.create": "Створити нове робоче дерево",
"session.new.workspace.runIn": "Запустити сесію в",
"session.new.workspace.triggerLocal": "Локально",
"session.new.workspace.local": "Локальний репозиторій",
"session.new.workspace.existing": "Робоча область…",
"session.new.lastModified": "Востаннє змінено",
"session.header.search.placeholder": "Пошук {{project}}",
@ -773,6 +882,11 @@ export const dict = {
"settings.general.row.showTerminal.description": "Показувати кнопку термінала в заголовку робочого столу",
"settings.general.row.showStatus.title": "Статус сервера",
"settings.general.row.showStatus.description": "Показувати кнопку статусу сервера в заголовку",
"settings.general.row.mobileTitlebarBottom.title": "Нижня навігація",
"settings.general.row.mobileTitlebarBottom.description":
"Розмістити заголовок і вкладки сесії внизу екрана на мобільних пристроях",
"settings.general.row.showCustomAgents.title": "Користувацькі агенти",
"settings.general.row.showCustomAgents.description": "Показувати вибір агента в редакторі запиту",
"settings.general.row.reasoningSummaries.title": "Показувати підсумки мислення",
"settings.general.row.reasoningSummaries.description": "Відображати підсумки мислення моделі на часовій шкалі",
"settings.general.row.shellToolPartsExpanded.title": "Розгортати частини інструменту оболонки",
@ -781,6 +895,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Розгортати частини інструменту редагування",
"settings.general.row.editToolPartsExpanded.description":
"Показувати частини інструментів редагування, запису та патчів розгорнутими за замовчуванням на часовій шкалі",
"settings.general.row.newLayoutDesigns.title": "Новий макет і дизайн",
"settings.general.row.newLayoutDesigns.description":
"Увімкнути оновлений макет та інтерфейси головної сторінки, редактора запитів і сесії",
"settings.general.row.pinchZoom.title": "Масштабування щипком",
"settings.general.row.pinchZoom.description":
"Дозволити масштабування жестом щипка на трекпаді та прокручуванням із Ctrl",
"settings.general.row.wayland.title": "Використовувати нативний Wayland",
"settings.general.row.wayland.description": "Вимкнути резервний X11 на Wayland. Потребує перезапуску.",
@ -796,6 +916,8 @@ export const dict = {
"settings.updates.row.check.description": "Вручну перевірити наявність оновлень і встановити, якщо доступні",
"settings.updates.action.checkNow": "Перевірити зараз",
"settings.updates.action.checking": "Перевірка...",
"settings.updates.action.downloading": "Завантаження...",
"settings.updates.action.installing": "Встановлення...",
"settings.updates.toast.latest.title": "У вас актуальна версія",
"settings.updates.toast.latest.description": "Ви використовуєте останню версію OpenCode.",
"sound.option.none": "Немає",

View file

@ -28,6 +28,9 @@ export const dict = {
"command.sidebar.toggle": "切换侧边栏",
"command.project.open": "打开项目",
"command.project.previous": "上一个项目",
"command.project.next": "下一个项目",
"command.project.index": "切换到项目 {{index}}",
"command.provider.connect": "连接提供商",
@ -56,6 +59,7 @@ export const dict = {
"command.file.open": "打开文件",
"command.tab.close": "关闭标签页",
"command.tab.reopenClosed": "重新打开已关闭的标签页",
"command.context.addSelection": "将所选内容添加到上下文",
"command.context.addSelection.description": "添加当前文件中选中的行",
@ -230,6 +234,11 @@ export const dict = {
"model.input.video": "视频",
"model.input.pdf": "pdf",
"model.tooltip.allows": "支持:{{inputs}}",
"model.tooltip.context.label": "上下文",
"model.tooltip.inputs": "输入",
"model.tooltip.model": "模型",
"model.tooltip.provider": "提供商",
"model.tooltip.reasoning": "推理",
"model.tooltip.reasoning.allowed": "支持推理",
"model.tooltip.reasoning.none": "不支持推理",
"model.tooltip.context": "上下文上限 {{limit}}",
@ -240,6 +249,7 @@ export const dict = {
"common.loading": "加载中",
"common.loading.ellipsis": "...",
"common.cancel": "取消",
"common.clear": "清除",
"common.connect": "连接",
"common.disconnect": "断开连接",
"common.continue": "提交",
@ -257,6 +267,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "按 esc 退出",
"session.child.promptDisabled": "无法向子智能体会话发送提示词。",
"session.child.backToParent": "返回主会话。",
"prompt.example.1": "修复代码库中的一个 TODO",
"prompt.example.2": "这个项目的技术栈是什么?",
"prompt.example.3": "修复失败的测试",
@ -359,6 +371,73 @@ export const dict = {
"dialog.server.menu.delete": "删除",
"dialog.server.current": "当前服务器",
"dialog.server.status.default": "默认",
"wsl.server.add": "添加 WSL 服务器",
"wsl.server.addShort": "添加 WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL 服务器",
"wsl.server.retryStart": "重试启动",
"wsl.server.updating": "正在更新...",
"wsl.onboarding.step.distro": "选择发行版",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "正在检查 WSL...",
"wsl.onboarding.restartRequired": "Windows 需要重启才能完成 WSL 安装。",
"wsl.onboarding.ready": "WSL 已就绪。",
"wsl.onboarding.required": "需要 WSL 才能继续。",
"wsl.onboarding.checkingDistros": "正在检查发行版...",
"wsl.onboarding.installingDistro": "正在安装 {{distro}}...",
"wsl.onboarding.checkingDistro": "正在检查 {{distro}}...",
"wsl.onboarding.listingDistros": "正在列出发行版...",
"wsl.onboarding.distroReady": "{{distro}} 已就绪。",
"wsl.onboarding.distroNotInstalled": "{{distro}} 尚未安装。",
"wsl.onboarding.openDistroOnce": "打开一次 {{distro}} 以完成设置。",
"wsl.onboarding.finishingDistro": "正在完成 {{distro}} 的设置。",
"wsl.onboarding.pickDistro": "选择一个发行版,或在下方安装。",
"wsl.onboarding.checkingOpencode": "正在检查 OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "正在检查 {{distro}} 中的 OpenCode...",
"wsl.onboarding.updatingOpencode": "正在更新 OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "正在更新 {{distro}} 中的 OpenCode...",
"wsl.onboarding.updateOpencodeIn": "更新 {{distro}} 中的 OpenCode。",
"wsl.onboarding.updateOpencode": "更新 OpenCode",
"wsl.onboarding.opencodeReadyIn": "{{distro}} 中的 OpenCode 已就绪。",
"wsl.onboarding.opencodeReady": "OpenCode 已就绪。",
"wsl.onboarding.installOpencodeIn": "在 {{distro}} 中安装 OpenCode。",
"wsl.onboarding.installOpencode": "安装 OpenCode",
"wsl.onboarding.chooseDistroFirst": "请先选择发行版。",
"wsl.onboarding.loadFailed": "加载 WSL 状态失败。",
"wsl.onboarding.loading": "加载中...",
"wsl.onboarding.installedDistros": "已安装的发行版",
"wsl.onboarding.checkAgain": "重新检查",
"wsl.onboarding.distroStatus.ready": "已就绪",
"wsl.onboarding.distroStatus.checking": "检查中...",
"wsl.onboarding.distroStatus.opencodeMissing": "未安装 OpenCode",
"wsl.onboarding.distroStatus.missingTools": "缺少 bash、curl",
"wsl.onboarding.distroStatus.unsupported": "不支持 · 请使用 WSL 2",
"wsl.onboarding.needAnotherDistro": "需要其他发行版?",
"wsl.onboarding.needAnotherDistroHint": "从 WSL 目录安装 Linux 发行版",
"wsl.onboarding.wslNotInstalled.title": "未安装 WSL",
"wsl.onboarding.wslNotInstalled.description": "OpenCode 需要 WSLWindows Subsystem for Linux才能添加 WSL 服务器",
"wsl.onboarding.wslUnavailable.title": "WSL 不可用",
"wsl.onboarding.wslUnavailable.description": "OpenCode 无法验证此设备上的 WSL。",
"wsl.onboarding.installWsl": "安装 WSL",
"wsl.onboarding.windowsRestartRequired": "重启 Windows 以完成 WSL 安装,然后重新打开 OpenCode。",
"wsl.onboarding.next": "下一步",
"wsl.onboarding.refresh": "刷新",
"wsl.onboarding.allDistrosAdded": "所有已安装的发行版均已添加。",
"wsl.onboarding.noDistros": "尚未检测到发行版。",
"wsl.onboarding.install": "安装",
"wsl.onboarding.installing": "正在安装...",
"wsl.onboarding.installDistro": "安装发行版",
"wsl.onboarding.searchDistros": "搜索发行版",
"wsl.onboarding.wsl2Required": "需要 WSL 2。",
"wsl.onboarding.toolsRequired": "此发行版需要 bash 和 curl。",
"wsl.onboarding.openTerminal": "打开终端",
"wsl.onboarding.path": "路径:{{path}}",
"wsl.onboarding.notFound": "未找到",
"wsl.onboarding.version": "版本:{{version}}",
"wsl.onboarding.unknown": "未知",
"wsl.onboarding.desktopVersion": "桌面版 {{version}}",
"wsl.onboarding.versionMismatch": "已安装版本与桌面应用版本不一致。",
"wsl.onboarding.adding": "正在添加...",
"dialog.project.edit.title": "编辑项目",
"dialog.project.edit.name": "名称",
@ -418,6 +497,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -456,10 +536,12 @@ export const dict = {
"error.page.title": "出了点问题",
"error.page.description": "加载应用程序时发生错误。",
"error.page.description.localServerStartup": "启动本地服务器时发生错误。",
"error.page.details.label": "错误详情",
"error.page.action.restart": "重启",
"error.page.action.report": "上报错误",
"error.page.action.reported": "错误已上报",
"error.page.action.exportLogs": "导出日志",
"error.page.action.checking": "检查中...",
"error.page.action.checkUpdates": "检查更新",
"error.page.action.updateTo": "更新到 {{version}}",
@ -506,6 +588,9 @@ export const dict = {
"home.title": "主页",
"home.projects": "项目",
"home.project.add": "添加项目",
"home.recentlyClosed": "最近关闭",
"home.server.collapse": "折叠服务器项目",
"home.server.expand": "展开服务器项目",
"home.sessions.search.placeholder": "搜索会话",
"home.sessions.search.placeholder.scoped": "在 {{scope}} 中搜索会话",
"home.sessions.search.sessions": "会话",
@ -519,7 +604,12 @@ export const dict = {
"session.tab.session": "会话",
"session.tab.review": "审查",
"session.tab.context": "上下文",
"session.tab.unknown": "未知会话",
"session.panel.reviewAndFiles": "审查和文件",
"session.error.notFound": "找不到此会话",
"session.error.notFound.description": "此标签页指向的会话已不存在于此服务器上。",
"session.error.notFound.closeTab": "关闭标签页",
"session.error.serverConnection": "无法连接到此服务器",
"session.review.filesChanged": "{{count}} 个文件变更",
"session.review.change.one": "更改",
"session.review.change.other": "更改",
@ -528,6 +618,8 @@ export const dict = {
"session.review.noVcs": "未检测到 Git 版本控制系统,无法显示更改",
"session.review.noSnapshot": "配置中已禁用快照跟踪,因此会话更改不可用",
"session.review.noChanges": "无更改",
"session.review.noUncommittedChanges": "尚无未提交的更改",
"session.review.noBranchChanges": "尚无分支更改",
"session.files.selectToOpen": "选择要打开的文件",
"session.files.all": "所有文件",
"session.files.empty": "无文件",
@ -541,6 +633,10 @@ export const dict = {
"session.todo.title": "待办事项",
"session.todo.collapse": "折叠",
"session.todo.expand": "展开",
"session.question.minimize": "最小化问题",
"session.question.restore": "恢复问题",
"session.question.pending.one": "{{count}} 个待处理问题",
"session.question.pending.other": "{{count}} 个待处理问题",
"session.followupDock.summary.one": "{{count}} 条排队消息",
"session.followupDock.summary.other": "{{count}} 条排队消息",
"session.followupDock.sendNow": "立即发送",
@ -553,9 +649,16 @@ export const dict = {
"session.revertDock.expand": "展开已回滚消息",
"session.revertDock.restore": "恢复消息",
"session.new.title": "构建任何东西",
"session.new.project.new": "新建项目",
"session.new.project.search": "搜索项目",
"session.new.project.add": "添加项目",
"session.new.worktree.main": "主分支",
"session.new.worktree.mainWithBranch": "主分支({{branch}}",
"session.new.worktree.create": "创建新的 worktree",
"session.new.workspace.runIn": "运行会话的位置",
"session.new.workspace.triggerLocal": "本地",
"session.new.workspace.local": "本地仓库",
"session.new.workspace.existing": "工作区…",
"session.new.lastModified": "最后修改",
"session.header.search.placeholder": "搜索 {{project}}",
"session.header.searchFiles": "搜索文件",
@ -623,6 +726,8 @@ export const dict = {
"sidebar.project.recentSessions": "最近会话",
"sidebar.project.viewAllSessions": "查看全部会话",
"sidebar.project.clearNotifications": "清除通知",
"sidebar.empty.title": "没有打开的项目",
"sidebar.empty.description": "打开一个项目以开始使用",
"app.name.desktop": "OpenCode Desktop",
@ -637,6 +742,7 @@ export const dict = {
"settings.desktop.wsl.description": "在 Windows 的 WSL 环境中运行 OpenCode 服务器。",
"settings.general.section.appearance": "外观",
"settings.general.section.advanced": "高级",
"settings.general.section.notifications": "系统通知",
"settings.general.section.updates": "更新",
"settings.general.section.sounds": "音效",
@ -644,6 +750,10 @@ export const dict = {
"settings.general.section.display": "显示",
"settings.general.row.language.title": "语言",
"settings.general.row.language.description": "更改 OpenCode 的显示语言",
"settings.general.row.shell.title": "终端 Shell",
"settings.general.row.shell.description": "选择终端使用的 shell。兼容的 shell 也会用于智能体工具调用。",
"settings.general.row.shell.autoDefault": "自动(默认)",
"settings.general.row.shell.terminalOnly": "仅终端",
"settings.general.row.appearance.title": "外观",
"settings.general.row.appearance.description": "自定义 OpenCode 在你的设备上的外观",
"settings.general.row.colorScheme.title": "配色方案",
@ -652,20 +762,38 @@ export const dict = {
"settings.general.row.theme.description": "自定义 OpenCode 的主题。",
"settings.general.row.font.title": "代码字体",
"settings.general.row.font.description": "自定义代码块使用的字体",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "终端字体",
"settings.general.row.terminalFont.description": "自定义终端使用的字体",
"settings.general.row.uiFont.title": "界面字体",
"settings.general.row.uiFont.description": "自定义整个界面使用的字体",
"settings.general.row.followup.title": "跟进消息行为",
"settings.general.row.followup.description": "选择跟进提示是立即引导还是在队列中等待",
"settings.general.row.followup.option.queue": "排队",
"settings.general.row.followup.option.steer": "引导",
"settings.general.row.showFileTree.title": "文件树",
"settings.general.row.showFileTree.description": "在会话中显示文件树面板",
"settings.general.row.showNavigation.title": "导航控件",
"settings.general.row.showNavigation.description": "在桌面版标题栏中显示前进和后退按钮",
"settings.general.row.showSearch.title": "命令面板",
"settings.general.row.showSearch.description": "在标题栏中显示搜索和命令面板按钮",
"settings.general.row.showTerminal.title": "终端",
"settings.general.row.showTerminal.description": "在桌面版标题栏中显示终端按钮",
"settings.general.row.showStatus.title": "服务器状态",
"settings.general.row.showStatus.description": "在标题栏中显示服务器状态按钮",
"settings.general.row.mobileTitlebarBottom.title": "底部导航",
"settings.general.row.mobileTitlebarBottom.description": "在移动设备上将标题栏和会话标签页置于屏幕底部",
"settings.general.row.showCustomAgents.title": "自定义智能体",
"settings.general.row.showCustomAgents.description": "在输入框中显示智能体选择器",
"settings.general.row.reasoningSummaries.title": "显示推理摘要",
"settings.general.row.reasoningSummaries.description": "在时间线中显示模型推理摘要",
"settings.general.row.shellToolPartsExpanded.title": "展开 shell 工具部分",
"settings.general.row.shellToolPartsExpanded.description": "默认在时间线中展开 shell 工具部分",
"settings.general.row.editToolPartsExpanded.title": "展开编辑工具部分",
"settings.general.row.editToolPartsExpanded.description": "默认在时间线中展开 edit、write 和 patch 工具部分",
"settings.general.row.newLayoutDesigns.title": "新版布局和设计",
"settings.general.row.newLayoutDesigns.description": "启用重新设计的布局、主页、输入框和会话界面",
"settings.general.row.pinchZoom.title": "双指缩放",
"settings.general.row.pinchZoom.description": "允许使用触控板双指捏合和 Ctrl-scroll 手势缩放",
"settings.general.row.wayland.title": "使用原生 Wayland",
"settings.general.row.wayland.description": "在 Wayland 上禁用 X11 回退。需要重启。",
"settings.general.row.wayland.tooltip": "在混合刷新率显示器的 Linux 系统上,原生 Wayland 可能更稳定。",
@ -678,6 +806,8 @@ export const dict = {
"settings.updates.row.check.description": "手动检查更新并在有更新时安装",
"settings.updates.action.checkNow": "立即检查",
"settings.updates.action.checking": "正在检查...",
"settings.updates.action.downloading": "正在下载...",
"settings.updates.action.installing": "正在安装...",
"settings.updates.toast.latest.title": "已是最新版本",
"settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。",

View file

@ -27,6 +27,9 @@ export const dict = {
"command.sidebar.toggle": "切換側邊欄",
"command.project.open": "開啟專案",
"command.project.previous": "上一個專案",
"command.project.next": "下一個專案",
"command.project.index": "切換至專案 {{index}}",
"command.provider.connect": "連接提供者",
"command.server.switch": "切換伺服器",
"command.settings.open": "開啟設定",
@ -49,6 +52,7 @@ export const dict = {
"command.session.new": "新增工作階段",
"command.file.open": "開啟檔案",
"command.tab.close": "關閉分頁",
"command.tab.reopenClosed": "重新開啟已關閉的分頁",
"command.context.addSelection": "將選取內容加入上下文",
"command.context.addSelection.description": "加入目前檔案中選取的行",
"command.input.focus": "聚焦輸入框",
@ -209,6 +213,11 @@ export const dict = {
"model.input.video": "影片",
"model.input.pdf": "pdf",
"model.tooltip.allows": "支援: {{inputs}}",
"model.tooltip.context.label": "上下文",
"model.tooltip.inputs": "輸入",
"model.tooltip.model": "模型",
"model.tooltip.provider": "供應商",
"model.tooltip.reasoning": "推理",
"model.tooltip.reasoning.allowed": "支援推理",
"model.tooltip.reasoning.none": "不支援推理",
"model.tooltip.context": "上下文上限 {{limit}}",
@ -218,6 +227,7 @@ export const dict = {
"common.loading": "載入中",
"common.loading.ellipsis": "...",
"common.cancel": "取消",
"common.clear": "清除",
"common.connect": "連線",
"common.disconnect": "中斷連線",
"common.continue": "提交",
@ -235,6 +245,8 @@ export const dict = {
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "按 esc 退出",
"session.child.promptDisabled": "無法在子代理程式工作階段中輸入提示詞。",
"session.child.backToParent": "返回主要工作階段。",
"prompt.example.1": "修復程式碼庫中的一個 TODO",
"prompt.example.2": "這個專案的技術堆疊是什麼?",
@ -340,6 +352,73 @@ export const dict = {
"dialog.server.menu.delete": "刪除",
"dialog.server.current": "目前伺服器",
"dialog.server.status.default": "預設",
"wsl.server.add": "新增 WSL 伺服器",
"wsl.server.addShort": "新增 WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL 伺服器",
"wsl.server.retryStart": "重試啟動",
"wsl.server.updating": "更新中...",
"wsl.onboarding.step.distro": "選擇發行版",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "正在檢查 WSL...",
"wsl.onboarding.restartRequired": "Windows 需要重新啟動,才能完成 WSL 安裝。",
"wsl.onboarding.ready": "WSL 已就緒。",
"wsl.onboarding.required": "需要 WSL 才能繼續。",
"wsl.onboarding.checkingDistros": "正在檢查發行版...",
"wsl.onboarding.installingDistro": "正在安裝 {{distro}}...",
"wsl.onboarding.checkingDistro": "正在檢查 {{distro}}...",
"wsl.onboarding.listingDistros": "正在列出發行版...",
"wsl.onboarding.distroReady": "{{distro}} 已就緒。",
"wsl.onboarding.distroNotInstalled": "尚未安裝 {{distro}}。",
"wsl.onboarding.openDistroOnce": "開啟 {{distro}} 一次以完成設定。",
"wsl.onboarding.finishingDistro": "正在完成 {{distro}} 的設定。",
"wsl.onboarding.pickDistro": "選擇發行版,或在下方安裝。",
"wsl.onboarding.checkingOpencode": "正在檢查 OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "正在檢查 {{distro}} 中的 OpenCode...",
"wsl.onboarding.updatingOpencode": "正在更新 OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "正在更新 {{distro}} 中的 OpenCode...",
"wsl.onboarding.updateOpencodeIn": "更新 {{distro}} 中的 OpenCode。",
"wsl.onboarding.updateOpencode": "更新 OpenCode",
"wsl.onboarding.opencodeReadyIn": "{{distro}} 中的 OpenCode 已就緒。",
"wsl.onboarding.opencodeReady": "OpenCode 已就緒。",
"wsl.onboarding.installOpencodeIn": "在 {{distro}} 中安裝 OpenCode。",
"wsl.onboarding.installOpencode": "安裝 OpenCode",
"wsl.onboarding.chooseDistroFirst": "請先選擇發行版。",
"wsl.onboarding.loadFailed": "無法載入 WSL 狀態。",
"wsl.onboarding.loading": "載入中...",
"wsl.onboarding.installedDistros": "已安裝的發行版",
"wsl.onboarding.checkAgain": "再次檢查",
"wsl.onboarding.distroStatus.ready": "就緒",
"wsl.onboarding.distroStatus.checking": "檢查中...",
"wsl.onboarding.distroStatus.opencodeMissing": "未安裝 OpenCode",
"wsl.onboarding.distroStatus.missingTools": "缺少 bash、curl",
"wsl.onboarding.distroStatus.unsupported": "不支援 · 請使用 WSL 2",
"wsl.onboarding.needAnotherDistro": "需要其他發行版?",
"wsl.onboarding.needAnotherDistroHint": "從 WSL 目錄安裝 Linux 發行版",
"wsl.onboarding.wslNotInstalled.title": "未安裝 WSL",
"wsl.onboarding.wslNotInstalled.description": "新增 WSL 伺服器前,必須先安裝 WSLWindows Subsystem for Linux",
"wsl.onboarding.wslUnavailable.title": "WSL 無法使用",
"wsl.onboarding.wslUnavailable.description": "OpenCode 無法確認此電腦上的 WSL。",
"wsl.onboarding.installWsl": "安裝 WSL",
"wsl.onboarding.windowsRestartRequired": "重新啟動 Windows 以完成 WSL 安裝,然後重新開啟 OpenCode。",
"wsl.onboarding.next": "下一步",
"wsl.onboarding.refresh": "重新整理",
"wsl.onboarding.allDistrosAdded": "所有已安裝的發行版都已新增。",
"wsl.onboarding.noDistros": "尚未偵測到發行版。",
"wsl.onboarding.install": "安裝",
"wsl.onboarding.installing": "安裝中...",
"wsl.onboarding.installDistro": "安裝發行版",
"wsl.onboarding.searchDistros": "搜尋發行版",
"wsl.onboarding.wsl2Required": "需要 WSL 2。",
"wsl.onboarding.toolsRequired": "此發行版需要 bash 和 curl。",
"wsl.onboarding.openTerminal": "開啟終端機",
"wsl.onboarding.path": "路徑: {{path}}",
"wsl.onboarding.notFound": "找不到",
"wsl.onboarding.version": "版本: {{version}}",
"wsl.onboarding.unknown": "未知",
"wsl.onboarding.desktopVersion": "桌面版 {{version}}",
"wsl.onboarding.versionMismatch": "已安裝版本與桌面應用程式版本不符。",
"wsl.onboarding.adding": "新增中...",
"dialog.project.edit.title": "編輯專案",
"dialog.project.edit.name": "名稱",
@ -402,6 +481,7 @@ export const dict = {
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
@ -449,10 +529,12 @@ export const dict = {
"error.page.title": "出了點問題",
"error.page.description": "載入應用程式時發生錯誤。",
"error.page.description.localServerStartup": "啟動本機伺服器時發生錯誤。",
"error.page.details.label": "錯誤詳情",
"error.page.action.restart": "重新啟動",
"error.page.action.report": "回報錯誤",
"error.page.action.reported": "已回報錯誤",
"error.page.action.exportLogs": "匯出日誌",
"error.page.action.checking": "檢查中...",
"error.page.action.checkUpdates": "檢查更新",
"error.page.action.updateTo": "更新到 {{version}}",
@ -498,17 +580,39 @@ export const dict = {
"home.recentProjects": "最近專案",
"home.empty.title": "沒有最近專案",
"home.empty.description": "透過開啟本地專案開始使用",
"home.title": "首頁",
"home.projects": "專案",
"home.project.add": "新增專案",
"home.recentlyClosed": "最近關閉",
"home.server.collapse": "收合伺服器專案",
"home.server.expand": "展開伺服器專案",
"home.sessions.search.placeholder": "搜尋工作階段",
"home.sessions.search.placeholder.scoped": "在 {{scope}} 中搜尋工作階段",
"home.sessions.search.sessions": "工作階段",
"home.sessions.search.noResults": "找不到符合 {{query}} 的工作階段",
"home.sessions.empty": "這裡還沒有內容",
"home.sessions.empty.description": "建立工作階段以開始使用",
"home.sessions.group.today": "今天",
"home.sessions.group.yesterday": "昨天",
"home.sessions.group.older": "更早",
"session.tab.session": "工作階段",
"session.tab.review": "審查",
"session.tab.context": "上下文",
"session.tab.unknown": "未知的工作階段",
"session.panel.reviewAndFiles": "審查與檔案",
"session.error.notFound": "找不到此工作階段",
"session.error.notFound.description": "此分頁指向的工作階段已不存在於此伺服器。",
"session.error.notFound.closeTab": "關閉分頁",
"session.error.serverConnection": "無法連線至此伺服器",
"session.review.filesChanged": "{{count}} 個檔案變更",
"session.review.change.one": "變更",
"session.review.change.other": "變更",
"session.review.loadingChanges": "正在載入變更...",
"session.review.empty": "此工作階段暫無變更",
"session.review.noChanges": "沒有變更",
"session.review.noUncommittedChanges": "尚無未提交的變更",
"session.review.noBranchChanges": "尚無分支變更",
"session.review.noVcs": "未偵測到 Git 版本控制系統,無法顯示變更",
"session.review.noSnapshot": "設定中已停用快照追蹤,因此無法使用工作階段變更",
"session.files.selectToOpen": "選取要開啟的檔案",
@ -525,6 +629,10 @@ export const dict = {
"session.todo.title": "待辦事項",
"session.todo.collapse": "折疊",
"session.todo.expand": "展開",
"session.question.minimize": "最小化問題",
"session.question.restore": "還原問題",
"session.question.pending.one": "{{count}} 個待處理問題",
"session.question.pending.other": "{{count}} 個待處理問題",
"session.followupDock.summary.one": "{{count}} 則佇列訊息",
"session.followupDock.summary.other": "{{count}} 則佇列訊息",
"session.followupDock.sendNow": "立即傳送",
@ -538,9 +646,16 @@ export const dict = {
"session.revertDock.restore": "還原訊息",
"session.new.title": "建構任何東西",
"session.new.project.new": "新專案",
"session.new.project.search": "搜尋專案",
"session.new.project.add": "新增專案",
"session.new.worktree.main": "主分支",
"session.new.worktree.mainWithBranch": "主分支 ({{branch}})",
"session.new.worktree.create": "建立新的 worktree",
"session.new.workspace.runIn": "工作階段執行位置",
"session.new.workspace.triggerLocal": "本機",
"session.new.workspace.local": "本機儲存庫",
"session.new.workspace.existing": "工作區…",
"session.new.lastModified": "最後修改",
"session.header.search.placeholder": "搜尋 {{project}}",
@ -608,6 +723,8 @@ export const dict = {
"sidebar.project.recentSessions": "最近工作階段",
"sidebar.project.viewAllSessions": "查看全部工作階段",
"sidebar.project.clearNotifications": "清除通知",
"sidebar.empty.title": "未開啟任何專案",
"sidebar.empty.description": "開啟專案以開始使用",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "桌面",
@ -619,6 +736,7 @@ export const dict = {
"settings.desktop.wsl.description": "在 Windows 上的 WSL 中執行 OpenCode 伺服器。",
"settings.general.section.appearance": "外觀",
"settings.general.section.advanced": "進階",
"settings.general.section.notifications": "系統通知",
"settings.general.section.updates": "更新",
"settings.general.section.sounds": "音效",
@ -627,6 +745,10 @@ export const dict = {
"settings.general.row.language.title": "語言",
"settings.general.row.language.description": "變更 OpenCode 的顯示語言",
"settings.general.row.shell.title": "終端機 Shell",
"settings.general.row.shell.description": "選擇終端機使用的 Shell。相容的 Shell 也會用於代理程式工具呼叫。",
"settings.general.row.shell.autoDefault": "自動(預設)",
"settings.general.row.shell.terminalOnly": "僅限終端機",
"settings.general.row.appearance.title": "外觀",
"settings.general.row.appearance.description": "自訂 OpenCode 在你的裝置上的外觀",
"settings.general.row.colorScheme.title": "配色方案",
@ -635,14 +757,28 @@ export const dict = {
"settings.general.row.theme.description": "自訂 OpenCode 的主題。",
"settings.general.row.font.title": "程式碼字型",
"settings.general.row.font.description": "自訂程式碼區塊使用的字型",
"settings.general.row.terminalFont.title": "Terminal Font",
"settings.general.row.terminalFont.description": "Customise the font used in the terminal",
"settings.general.row.terminalFont.title": "終端機字型",
"settings.general.row.terminalFont.description": "自訂終端機使用的字型",
"settings.general.row.uiFont.title": "介面字型",
"settings.general.row.uiFont.description": "自訂整個介面使用的字型",
"settings.general.row.followup.title": "後續追問行為",
"settings.general.row.followup.description": "選擇後續追問提示是立即引導還是進入佇列等待",
"settings.general.row.followup.option.queue": "佇列",
"settings.general.row.followup.option.steer": "引導",
"settings.general.row.showFileTree.title": "檔案樹",
"settings.general.row.showFileTree.description": "在工作階段中顯示檔案樹面板",
"settings.general.row.showNavigation.title": "導覽控制項",
"settings.general.row.showNavigation.description": "在桌面標題列中顯示上一頁和下一頁按鈕",
"settings.general.row.showSearch.title": "命令面板",
"settings.general.row.showSearch.description": "在標題列中顯示搜尋和命令面板按鈕",
"settings.general.row.showTerminal.title": "終端機",
"settings.general.row.showTerminal.description": "在桌面標題列中顯示終端機按鈕",
"settings.general.row.showStatus.title": "伺服器狀態",
"settings.general.row.showStatus.description": "在標題列中顯示伺服器狀態按鈕",
"settings.general.row.mobileTitlebarBottom.title": "底部導覽",
"settings.general.row.mobileTitlebarBottom.description": "在行動裝置上將標題列和工作階段分頁置於畫面底部",
"settings.general.row.showCustomAgents.title": "自訂代理程式",
"settings.general.row.showCustomAgents.description": "在輸入區顯示代理程式選擇器",
"settings.general.row.reasoningSummaries.title": "顯示推理摘要",
"settings.general.row.reasoningSummaries.description": "在時間軸中顯示模型推理摘要",
@ -650,6 +786,10 @@ export const dict = {
"settings.general.row.shellToolPartsExpanded.description": "在時間軸中預設展開 shell 工具區塊",
"settings.general.row.editToolPartsExpanded.title": "展開 edit 工具區塊",
"settings.general.row.editToolPartsExpanded.description": "在時間軸中預設展開 edit、write 和 patch 工具區塊",
"settings.general.row.newLayoutDesigns.title": "新版面與設計",
"settings.general.row.newLayoutDesigns.description": "啟用重新設計的版面、首頁、輸入區和工作階段介面",
"settings.general.row.pinchZoom.title": "雙指縮放",
"settings.general.row.pinchZoom.description": "允許使用觸控板雙指開合和 Ctrl-捲動手勢縮放",
"settings.general.row.wayland.title": "使用原生 Wayland",
"settings.general.row.wayland.description": "在 Wayland 上停用 X11 後備模式。需要重新啟動。",
"settings.general.row.wayland.tooltip": "在混合更新率螢幕的 Linux 系統上,原生 Wayland 可能更穩定。",
@ -663,6 +803,8 @@ export const dict = {
"settings.updates.row.check.description": "手動檢查更新並在有更新時安裝",
"settings.updates.action.checkNow": "立即檢查",
"settings.updates.action.checking": "檢查中...",
"settings.updates.action.downloading": "下載中...",
"settings.updates.action.installing": "安裝中...",
"settings.updates.toast.latest.title": "已是最新版本",
"settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。",

View file

@ -160,8 +160,10 @@ function TimelineDiffSummaryRow(props: { diffs: SummaryDiff[] }) {
>
<div data-slot="session-turn-diffs-header">
<span data-slot="session-turn-diffs-label">
{props.diffs.length} {language.t("ui.sessionTurn.diffs.changed")}{" "}
{language.t(props.diffs.length === 1 ? "ui.common.file.one" : "ui.common.file.other")}
{language.t(
props.diffs.length === 1 ? "ui.sessionTurn.diffs.changed.one" : "ui.sessionTurn.diffs.changed.other",
{ count: String(props.diffs.length) },
)}
</span>
<DiffChanges changes={props.diffs} />
<Show when={overflow() > 0}>

View file

@ -440,8 +440,10 @@ export function SessionTurn(
>
<div data-slot="session-turn-diffs-header">
<span data-slot="session-turn-diffs-label">
{edited()} {i18n.t("ui.sessionTurn.diffs.changed")}{" "}
{i18n.t(edited() === 1 ? "ui.common.file.one" : "ui.common.file.other")}
{i18n.t(
edited() === 1 ? "ui.sessionTurn.diffs.changed.one" : "ui.sessionTurn.diffs.changed.other",
{ count: String(edited()) },
)}
</span>
<DiffChanges changes={diffs()} />
<Show when={overflow() > 0}>

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "تغييرات الجلسة",
"ui.sessionReview.title.git": "تغييرات Git",
"ui.sessionReview.title.branch": "تغييرات الفرع",
"ui.sessionReview.title.lastTurn": "تغييرات آخر دور",
"ui.sessionReview.diffStyle.unified": "موحد",
"ui.sessionReview.diffStyle.split": "منقسم",
@ -16,6 +18,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff كبير جدا لعرضه",
"ui.sessionReview.largeDiff.meta": "الحد: {{limit}} سطرًا متغيرًا. الحالي: {{current}} سطرًا متغيرًا.",
"ui.sessionReview.largeDiff.renderAnyway": "اعرض على أي حال",
"ui.sessionReviewV2.expandMode": "توسيع الفروقات أو طيها",
"ui.sessionReviewV2.filterFiles": "تصفية الملفات",
"ui.sessionReviewV2.toggleSidebar": "تبديل شجرة الملفات",
"ui.sessionReviewV2.showAllLines": "إظهار جميع الأسطر",
"ui.sessionReviewV2.hideNonDiffLines": "إخفاء الأسطر خارج الفروقات",
"ui.sessionReviewV2.unifiedDiff": "فروقات موحدة",
"ui.sessionReviewV2.splitDiff": "فروقات منقسمة",
"ui.sessionReviewV2.previousFile": "الملف السابق",
"ui.sessionReviewV2.nextFile": "الملف التالي",
"ui.sessionReviewV2.diffView": "عرض الفروقات",
"ui.sessionReviewV2.empty.noGit.title": "لا توجد تغييرات متتبعة",
"ui.sessionReviewV2.empty.noGit.description": "تتبع التغييرات في هذا المشروع وراجعها وتراجع عنها",
"ui.sessionReviewV2.empty.noGit.action": "إنشاء مستودع Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "جارٍ إنشاء مستودع Git...",
"ui.sessionReviewV2.empty.changes.title": "لا توجد تغييرات في الملفات بعد",
"ui.sessionReviewV2.empty.changes.description": "ستظهر تغييرات المشروع هنا",
"ui.fileMedia.kind.image": "صورة",
"ui.fileMedia.kind.audio": "صوت",
"ui.fileMedia.state.removed": "تمت إزالة {{kind}}",
@ -32,11 +50,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "أضف تعليقًا",
"ui.lineComment.submit": "تعليق",
"ui.lineComment.cancel": "إلغاء",
"ui.sessionTurn.steps.show": "إظهار الخطوات",
"ui.sessionTurn.steps.hide": "إخفاء الخطوات",
"ui.sessionTurn.summary.response": "استجابة",
"ui.sessionTurn.diff.showMore": "إظهار المزيد من التغييرات ({{count}})",
"ui.sessionTurn.diffs.changed.one": "ملف معدل: {{count}}",
"ui.sessionTurn.diffs.changed.other": "الملفات المعدلة: {{count}}",
"ui.sessionTurn.diffs.showAll": "إظهار الكل",
"ui.sessionTurn.diffs.showLess": "إظهار أقل",
"ui.sessionTurn.diffs.more": "ملفات إضافية: {{count}}",
"ui.sessionTurn.retry.retrying": "إعادة المحاولة",
"ui.sessionTurn.retry.inSeconds": "خلال {{seconds}} ثواني",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Alterações da sessão",
"ui.sessionReview.title.git": "Alterações do Git",
"ui.sessionReview.title.branch": "Alterações da branch",
"ui.sessionReview.title.lastTurn": "Alterações do último turno",
"ui.sessionReview.diffStyle.unified": "Unificado",
"ui.sessionReview.diffStyle.split": "Dividido",
@ -16,6 +18,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff grande demais para renderizar",
"ui.sessionReview.largeDiff.meta": "Limite: {{limit}} linhas alteradas. Atual: {{current}} linhas alteradas.",
"ui.sessionReview.largeDiff.renderAnyway": "Renderizar mesmo assim",
"ui.sessionReviewV2.expandMode": "Expandir ou recolher diff",
"ui.sessionReviewV2.filterFiles": "Filtrar arquivos",
"ui.sessionReviewV2.toggleSidebar": "Alternar árvore de arquivos",
"ui.sessionReviewV2.showAllLines": "Mostrar todas as linhas",
"ui.sessionReviewV2.hideNonDiffLines": "Ocultar linhas fora do diff",
"ui.sessionReviewV2.unifiedDiff": "Diff unificado",
"ui.sessionReviewV2.splitDiff": "Diff dividido",
"ui.sessionReviewV2.previousFile": "Arquivo anterior",
"ui.sessionReviewV2.nextFile": "Próximo arquivo",
"ui.sessionReviewV2.diffView": "Visualização do diff",
"ui.sessionReviewV2.empty.noGit.title": "Nenhuma alteração rastreada",
"ui.sessionReviewV2.empty.noGit.description": "Rastreie, revise e desfaça alterações neste projeto",
"ui.sessionReviewV2.empty.noGit.action": "Criar repositório Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Criando repositório Git...",
"ui.sessionReviewV2.empty.changes.title": "Nenhuma alteração em arquivos ainda",
"ui.sessionReviewV2.empty.changes.description": "As alterações do projeto aparecerão aqui",
"ui.fileMedia.kind.image": "imagem",
"ui.fileMedia.kind.audio": "áudio",
"ui.fileMedia.state.removed": "Removido: {{kind}}",
@ -32,11 +50,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Adicionar comentário",
"ui.lineComment.submit": "Comentar",
"ui.lineComment.cancel": "Cancelar",
"ui.sessionTurn.steps.show": "Mostrar passos",
"ui.sessionTurn.steps.hide": "Ocultar passos",
"ui.sessionTurn.summary.response": "Resposta",
"ui.sessionTurn.diff.showMore": "Mostrar mais alterações ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Arquivo alterado: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Arquivos alterados: {{count}}",
"ui.sessionTurn.diffs.showAll": "Mostrar tudo",
"ui.sessionTurn.diffs.showLess": "Mostrar menos",
"ui.sessionTurn.diffs.more": "+{{count}} a mais",
"ui.sessionTurn.retry.retrying": "tentando novamente",
"ui.sessionTurn.retry.inSeconds": "em {{seconds}}s",

View file

@ -4,6 +4,8 @@ type Keys = keyof typeof en
export const dict = {
"ui.sessionReview.title": "Promjene sesije",
"ui.sessionReview.title.git": "Git promjene",
"ui.sessionReview.title.branch": "Promjene na grani",
"ui.sessionReview.title.lastTurn": "Promjene u posljednjem potezu",
"ui.sessionReview.diffStyle.unified": "Ujedinjeno",
"ui.sessionReview.diffStyle.split": "Podijeljeno",
@ -20,6 +22,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff je prevelik za prikaz",
"ui.sessionReview.largeDiff.meta": "Limit: {{limit}} izmijenjenih linija. Trenutno: {{current}} izmijenjenih linija.",
"ui.sessionReview.largeDiff.renderAnyway": "Prikaži svejedno",
"ui.sessionReviewV2.expandMode": "Proširi ili sažmi diff",
"ui.sessionReviewV2.filterFiles": "Filtriraj datoteke",
"ui.sessionReviewV2.toggleSidebar": "Prikaži/sakrij stablo datoteka",
"ui.sessionReviewV2.showAllLines": "Prikaži sve linije",
"ui.sessionReviewV2.hideNonDiffLines": "Sakrij linije bez izmjena",
"ui.sessionReviewV2.unifiedDiff": "Ujedinjeni diff",
"ui.sessionReviewV2.splitDiff": "Podijeljeni diff",
"ui.sessionReviewV2.previousFile": "Prethodna datoteka",
"ui.sessionReviewV2.nextFile": "Sljedeća datoteka",
"ui.sessionReviewV2.diffView": "Prikaz diff-a",
"ui.sessionReviewV2.empty.noGit.title": "Nema praćenih promjena",
"ui.sessionReviewV2.empty.noGit.description": "Prati, pregledaj i poništi promjene u ovom projektu",
"ui.sessionReviewV2.empty.noGit.action": "Kreiraj Git repozitorij",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Kreiranje Git repozitorija...",
"ui.sessionReviewV2.empty.changes.title": "Još nema izmjena u datotekama",
"ui.sessionReviewV2.empty.changes.description": "Promjene projekta će se prikazati ovdje",
"ui.fileMedia.kind.image": "slika",
"ui.fileMedia.kind.audio": "audio",
"ui.fileMedia.state.removed": "Uklonjeno: {{kind}}",
@ -36,11 +54,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Dodaj komentar",
"ui.lineComment.submit": "Komentariši",
"ui.lineComment.cancel": "Otkaži",
"ui.sessionTurn.steps.show": "Prikaži korake",
"ui.sessionTurn.steps.hide": "Sakrij korake",
"ui.sessionTurn.summary.response": "Odgovor",
"ui.sessionTurn.diff.showMore": "Prikaži još izmjena ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Izmijenjena datoteka: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Izmijenjene datoteke: {{count}}",
"ui.sessionTurn.diffs.showAll": "Prikaži sve",
"ui.sessionTurn.diffs.showLess": "Prikaži manje",
"ui.sessionTurn.diffs.more": "+ još {{count}}",
"ui.sessionTurn.retry.retrying": "ponovni pokušaj",
"ui.sessionTurn.retry.inSeconds": "za {{seconds}}s",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Sessionsændringer",
"ui.sessionReview.title.git": "Git-ændringer",
"ui.sessionReview.title.branch": "Grenændringer",
"ui.sessionReview.title.lastTurn": "Ændringer fra sidste tur",
"ui.sessionReview.diffStyle.unified": "Samlet",
"ui.sessionReview.diffStyle.split": "Opdelt",
@ -17,6 +19,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff er for stor til at blive vist",
"ui.sessionReview.largeDiff.meta": "Grænse: {{limit}} ændrede linjer. Nuværende: {{current}} ændrede linjer.",
"ui.sessionReview.largeDiff.renderAnyway": "Vis alligevel",
"ui.sessionReviewV2.expandMode": "Udvid eller skjul diff",
"ui.sessionReviewV2.filterFiles": "Filtrer filer",
"ui.sessionReviewV2.toggleSidebar": "Skift filtræ",
"ui.sessionReviewV2.showAllLines": "Vis alle linjer",
"ui.sessionReviewV2.hideNonDiffLines": "Skjul linjer uden ændringer",
"ui.sessionReviewV2.unifiedDiff": "Samlet diff",
"ui.sessionReviewV2.splitDiff": "Opdelt diff",
"ui.sessionReviewV2.previousFile": "Forrige fil",
"ui.sessionReviewV2.nextFile": "Næste fil",
"ui.sessionReviewV2.diffView": "Diffvisning",
"ui.sessionReviewV2.empty.noGit.title": "Ingen sporede ændringer",
"ui.sessionReviewV2.empty.noGit.description": "Spor, gennemgå og fortryd ændringer i dette projekt",
"ui.sessionReviewV2.empty.noGit.action": "Opret et Git-repository",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Opretter Git-repository...",
"ui.sessionReviewV2.empty.changes.title": "Ingen filændringer endnu",
"ui.sessionReviewV2.empty.changes.description": "Projektændringer vises her",
"ui.fileMedia.kind.image": "billede",
"ui.fileMedia.kind.audio": "lyd",
"ui.fileMedia.state.removed": "Fjernet: {{kind}}",
@ -32,10 +50,16 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Tilføj kommentar",
"ui.lineComment.submit": "Kommenter",
"ui.lineComment.cancel": "Annuller",
"ui.sessionTurn.steps.show": "Vis trin",
"ui.sessionTurn.steps.hide": "Skjul trin",
"ui.sessionTurn.summary.response": "Svar",
"ui.sessionTurn.diff.showMore": "Vis flere ændringer ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Ændret fil: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Ændrede filer: {{count}}",
"ui.sessionTurn.diffs.showAll": "Vis alle",
"ui.sessionTurn.diffs.showLess": "Vis færre",
"ui.sessionTurn.diffs.more": "+{{count}} mere",
"ui.sessionTurn.retry.retrying": "prøver igen",
"ui.sessionTurn.retry.inSeconds": "om {{seconds}}s",

View file

@ -4,6 +4,8 @@ type Keys = keyof typeof en
export const dict = {
"ui.sessionReview.title": "Sitzungsänderungen",
"ui.sessionReview.title.git": "Git-Änderungen",
"ui.sessionReview.title.branch": "Branch-Änderungen",
"ui.sessionReview.title.lastTurn": "Änderungen der letzten Runde",
"ui.sessionReview.diffStyle.unified": "Vereinheitlicht",
"ui.sessionReview.diffStyle.split": "Geteilt",
@ -21,6 +23,23 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff zu groß zum Rendern",
"ui.sessionReview.largeDiff.meta": "Limit: {{limit}} geänderte Zeilen. Aktuell: {{current}} geänderte Zeilen.",
"ui.sessionReview.largeDiff.renderAnyway": "Trotzdem rendern",
"ui.sessionReviewV2.expandMode": "Diff ein- oder ausklappen",
"ui.sessionReviewV2.filterFiles": "Dateien filtern",
"ui.sessionReviewV2.toggleSidebar": "Dateibaum umschalten",
"ui.sessionReviewV2.showAllLines": "Alle Zeilen anzeigen",
"ui.sessionReviewV2.hideNonDiffLines": "Zeilen außerhalb des Diffs ausblenden",
"ui.sessionReviewV2.unifiedDiff": "Vereinheitlichter Diff",
"ui.sessionReviewV2.splitDiff": "Geteilter Diff",
"ui.sessionReviewV2.previousFile": "Vorherige Datei",
"ui.sessionReviewV2.nextFile": "Nächste Datei",
"ui.sessionReviewV2.diffView": "Diff-Ansicht",
"ui.sessionReviewV2.empty.noGit.title": "Keine verfolgten Änderungen",
"ui.sessionReviewV2.empty.noGit.description":
"Änderungen in diesem Projekt verfolgen, überprüfen und rückgängig machen",
"ui.sessionReviewV2.empty.noGit.action": "Git-Repository erstellen",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Git-Repository wird erstellt...",
"ui.sessionReviewV2.empty.changes.title": "Noch keine Dateiänderungen",
"ui.sessionReviewV2.empty.changes.description": "Projektänderungen werden hier angezeigt",
"ui.fileMedia.kind.image": "bild",
"ui.fileMedia.kind.audio": "audio",
"ui.fileMedia.state.removed": "{{kind}} entfernt",
@ -38,10 +57,16 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Kommentar hinzufügen",
"ui.lineComment.submit": "Kommentieren",
"ui.lineComment.cancel": "Abbrechen",
"ui.sessionTurn.steps.show": "Schritte anzeigen",
"ui.sessionTurn.steps.hide": "Schritte ausblenden",
"ui.sessionTurn.summary.response": "Antwort",
"ui.sessionTurn.diff.showMore": "Weitere Änderungen anzeigen ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Geänderte Datei: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Geänderte Dateien: {{count}}",
"ui.sessionTurn.diffs.showAll": "Alle anzeigen",
"ui.sessionTurn.diffs.showLess": "Weniger anzeigen",
"ui.sessionTurn.diffs.more": "+{{count}} weitere",
"ui.sessionTurn.retry.retrying": "erneuter Versuch",
"ui.sessionTurn.retry.inSeconds": "in {{seconds}}s",

View file

@ -58,7 +58,8 @@ export const dict: Record<string, string> = {
"ui.sessionTurn.steps.hide": "Hide steps",
"ui.sessionTurn.summary.response": "Response",
"ui.sessionTurn.diff.showMore": "Show more changes ({{count}})",
"ui.sessionTurn.diffs.changed": "Changed",
"ui.sessionTurn.diffs.changed.one": "{{count}} Changed file",
"ui.sessionTurn.diffs.changed.other": "{{count}} Changed files",
"ui.sessionTurn.diffs.showAll": "Show all",
"ui.sessionTurn.diffs.showLess": "Show less",
"ui.sessionTurn.diffs.more": "+{{count}} more files",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Cambios de la sesión",
"ui.sessionReview.title.git": "Cambios de Git",
"ui.sessionReview.title.branch": "Cambios de la rama",
"ui.sessionReview.title.lastTurn": "Cambios del último turno",
"ui.sessionReview.diffStyle.unified": "Unificado",
"ui.sessionReview.diffStyle.split": "Dividido",
@ -16,6 +18,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff demasiado grande para renderizar",
"ui.sessionReview.largeDiff.meta": "Límite: {{limit}} líneas modificadas. Actual: {{current}} líneas modificadas.",
"ui.sessionReview.largeDiff.renderAnyway": "Renderizar de todos modos",
"ui.sessionReviewV2.expandMode": "Expandir o colapsar diff",
"ui.sessionReviewV2.filterFiles": "Filtrar archivos",
"ui.sessionReviewV2.toggleSidebar": "Alternar árbol de archivos",
"ui.sessionReviewV2.showAllLines": "Mostrar todas las líneas",
"ui.sessionReviewV2.hideNonDiffLines": "Ocultar líneas sin cambios",
"ui.sessionReviewV2.unifiedDiff": "Diff unificado",
"ui.sessionReviewV2.splitDiff": "Diff dividido",
"ui.sessionReviewV2.previousFile": "Archivo anterior",
"ui.sessionReviewV2.nextFile": "Siguiente archivo",
"ui.sessionReviewV2.diffView": "Vista de diff",
"ui.sessionReviewV2.empty.noGit.title": "No hay cambios rastreados",
"ui.sessionReviewV2.empty.noGit.description": "Rastrea, revisa y deshaz cambios en este proyecto",
"ui.sessionReviewV2.empty.noGit.action": "Crear repositorio Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Creando repositorio Git...",
"ui.sessionReviewV2.empty.changes.title": "Aún no hay cambios en los archivos",
"ui.sessionReviewV2.empty.changes.description": "Los cambios del proyecto aparecerán aquí",
"ui.fileMedia.kind.image": "imagen",
"ui.fileMedia.kind.audio": "audio",
"ui.fileMedia.state.removed": "Archivo de {{kind}} eliminado",
@ -32,11 +50,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Añadir comentario",
"ui.lineComment.submit": "Comentar",
"ui.lineComment.cancel": "Cancelar",
"ui.sessionTurn.steps.show": "Mostrar pasos",
"ui.sessionTurn.steps.hide": "Ocultar pasos",
"ui.sessionTurn.summary.response": "Respuesta",
"ui.sessionTurn.diff.showMore": "Mostrar más cambios ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Archivo modificado: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Archivos modificados: {{count}}",
"ui.sessionTurn.diffs.showAll": "Mostrar todos",
"ui.sessionTurn.diffs.showLess": "Mostrar menos",
"ui.sessionTurn.diffs.more": "+{{count}} más",
"ui.sessionTurn.retry.retrying": "reintentando",
"ui.sessionTurn.retry.inSeconds": "en {{seconds}}s",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Modifications de la session",
"ui.sessionReview.title.git": "Modifications Git",
"ui.sessionReview.title.branch": "Modifications de la branche",
"ui.sessionReview.title.lastTurn": "Modifications du dernier tour",
"ui.sessionReview.diffStyle.unified": "Unifié",
"ui.sessionReview.diffStyle.split": "Divisé",
@ -16,6 +18,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff trop volumineux pour être affiché",
"ui.sessionReview.largeDiff.meta": "Limite : {{limit}} lignes modifiées. Actuel : {{current}} lignes modifiées.",
"ui.sessionReview.largeDiff.renderAnyway": "Afficher quand même",
"ui.sessionReviewV2.expandMode": "Développer ou réduire le diff",
"ui.sessionReviewV2.filterFiles": "Filtrer les fichiers",
"ui.sessionReviewV2.toggleSidebar": "Afficher ou masquer l'arborescence des fichiers",
"ui.sessionReviewV2.showAllLines": "Afficher toutes les lignes",
"ui.sessionReviewV2.hideNonDiffLines": "Masquer les lignes hors diff",
"ui.sessionReviewV2.unifiedDiff": "Diff unifié",
"ui.sessionReviewV2.splitDiff": "Diff côte à côte",
"ui.sessionReviewV2.previousFile": "Fichier précédent",
"ui.sessionReviewV2.nextFile": "Fichier suivant",
"ui.sessionReviewV2.diffView": "Vue du diff",
"ui.sessionReviewV2.empty.noGit.title": "Aucune modification suivie",
"ui.sessionReviewV2.empty.noGit.description": "Suivre, examiner et annuler les modifications dans ce projet",
"ui.sessionReviewV2.empty.noGit.action": "Créer un dépôt Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Création du dépôt Git...",
"ui.sessionReviewV2.empty.changes.title": "Aucune modification de fichier pour l'instant",
"ui.sessionReviewV2.empty.changes.description": "Les modifications du projet apparaîtront ici",
"ui.fileMedia.kind.image": "image",
"ui.fileMedia.kind.audio": "audio",
"ui.fileMedia.state.removed": "Fichier {{kind}} supprimé",
@ -32,11 +50,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Ajouter un commentaire",
"ui.lineComment.submit": "Commenter",
"ui.lineComment.cancel": "Annuler",
"ui.sessionTurn.steps.show": "Afficher les étapes",
"ui.sessionTurn.steps.hide": "Masquer les étapes",
"ui.sessionTurn.summary.response": "Réponse",
"ui.sessionTurn.diff.showMore": "Afficher plus de modifications ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Fichier modifié : {{count}}",
"ui.sessionTurn.diffs.changed.other": "Fichiers modifiés : {{count}}",
"ui.sessionTurn.diffs.showAll": "Tout afficher",
"ui.sessionTurn.diffs.showLess": "Afficher moins",
"ui.sessionTurn.diffs.more": "+{{count}} de plus",
"ui.sessionTurn.retry.retrying": "nouvelle tentative",
"ui.sessionTurn.retry.inSeconds": "dans {{seconds}}s",

View file

@ -1,8 +1,10 @@
export const dict = {
"ui.sessionReview.title": "セッションの変更",
"ui.sessionReview.title.git": "Gitの変更",
"ui.sessionReview.title.branch": "ブランチの変更",
"ui.sessionReview.title.lastTurn": "前回ターンの変更",
"ui.sessionReview.diffStyle.unified": "Unified",
"ui.sessionReview.diffStyle.split": "Split",
"ui.sessionReview.diffStyle.unified": "統合差分",
"ui.sessionReview.diffStyle.split": "分割差分",
"ui.sessionReview.openFile": "ファイルを開く",
"ui.sessionReview.selection.line": "{{line}} 行目",
"ui.sessionReview.selection.lines": "{{start}}-{{end}} 行目",
@ -17,6 +19,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "差分が大きすぎて表示できません",
"ui.sessionReview.largeDiff.meta": "上限: {{limit}} 変更行。現在: {{current}} 変更行。",
"ui.sessionReview.largeDiff.renderAnyway": "それでも表示する",
"ui.sessionReviewV2.expandMode": "差分を展開または折りたたむ",
"ui.sessionReviewV2.filterFiles": "ファイルを絞り込む",
"ui.sessionReviewV2.toggleSidebar": "ファイルツリーを切り替える",
"ui.sessionReviewV2.showAllLines": "すべての行を表示",
"ui.sessionReviewV2.hideNonDiffLines": "差分以外の行を非表示",
"ui.sessionReviewV2.unifiedDiff": "統合差分",
"ui.sessionReviewV2.splitDiff": "分割差分",
"ui.sessionReviewV2.previousFile": "前のファイル",
"ui.sessionReviewV2.nextFile": "次のファイル",
"ui.sessionReviewV2.diffView": "差分ビュー",
"ui.sessionReviewV2.empty.noGit.title": "追跡中の変更はありません",
"ui.sessionReviewV2.empty.noGit.description": "このプロジェクトの変更を追跡、レビュー、取り消しできます",
"ui.sessionReviewV2.empty.noGit.action": "Gitリポジトリを作成",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Gitリポジトリを作成中...",
"ui.sessionReviewV2.empty.changes.title": "ファイルの変更はまだありません",
"ui.sessionReviewV2.empty.changes.description": "プロジェクトの変更がここに表示されます",
"ui.fileMedia.kind.image": "画像",
"ui.fileMedia.kind.audio": "音声",
"ui.fileMedia.state.removed": "{{kind}}は削除されました",
@ -32,10 +50,16 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "へのコメントを作成中",
"ui.lineComment.placeholder": "コメントを追加",
"ui.lineComment.submit": "コメント",
"ui.lineComment.cancel": "キャンセル",
"ui.sessionTurn.steps.show": "ステップを表示",
"ui.sessionTurn.steps.hide": "ステップを隠す",
"ui.sessionTurn.summary.response": "応答",
"ui.sessionTurn.diff.showMore": "さらに変更を表示 ({{count}})",
"ui.sessionTurn.diffs.changed.one": "変更済みファイル: {{count}}件",
"ui.sessionTurn.diffs.changed.other": "変更済みファイル: {{count}}件",
"ui.sessionTurn.diffs.showAll": "すべて表示",
"ui.sessionTurn.diffs.showLess": "一部のみ表示",
"ui.sessionTurn.diffs.more": "+他{{count}}件",
"ui.sessionTurn.retry.retrying": "再試行中",
"ui.sessionTurn.retry.inSeconds": "{{seconds}}秒後",

View file

@ -165,4 +165,29 @@ export const dict = {
"ui.toolErrorCard.copyError": "오류 복사",
"ui.message.duration.seconds": "{{count}}초",
"ui.message.duration.minutesSeconds": "{{minutes}}분 {{seconds}}초",
"ui.sessionReview.title.git": "Git 변경 사항",
"ui.sessionReview.title.branch": "브랜치 변경 사항",
"ui.sessionReviewV2.expandMode": "diff 펼치기 또는 접기",
"ui.sessionReviewV2.filterFiles": "파일 필터링",
"ui.sessionReviewV2.toggleSidebar": "파일 트리 토글",
"ui.sessionReviewV2.showAllLines": "모든 줄 표시",
"ui.sessionReviewV2.hideNonDiffLines": "변경되지 않은 줄 숨기기",
"ui.sessionReviewV2.unifiedDiff": "통합 diff",
"ui.sessionReviewV2.splitDiff": "분할 diff",
"ui.sessionReviewV2.previousFile": "이전 파일",
"ui.sessionReviewV2.nextFile": "다음 파일",
"ui.sessionReviewV2.diffView": "diff 보기",
"ui.sessionReviewV2.empty.noGit.title": "추적 중인 변경 사항 없음",
"ui.sessionReviewV2.empty.noGit.description": "이 프로젝트의 변경 사항을 추적, 검토 및 실행 취소",
"ui.sessionReviewV2.empty.noGit.action": "Git 저장소 생성",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Git 저장소 생성 중...",
"ui.sessionReviewV2.empty.changes.title": "아직 파일 변경 사항 없음",
"ui.sessionReviewV2.empty.changes.description": "프로젝트 변경 사항이 여기에 표시됩니다",
"ui.lineComment.cancel": "취소",
"ui.sessionTurn.diffs.changed.one": "변경된 파일: {{count}}개",
"ui.sessionTurn.diffs.changed.other": "변경된 파일: {{count}}개",
"ui.sessionTurn.diffs.showAll": "모두 표시",
"ui.sessionTurn.diffs.showLess": "간략히 표시",
"ui.sessionTurn.diffs.more": "+{{count}}개 더 보기",
}

View file

@ -168,4 +168,29 @@ export const dict: Record<Keys, string> = {
"ui.toolErrorCard.copyError": "Kopier feil",
"ui.message.duration.seconds": "{{count}}s",
"ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s",
"ui.sessionReview.title.git": "Git-endringer",
"ui.sessionReview.title.branch": "Grenendringer",
"ui.sessionReviewV2.expandMode": "Utvid eller fold sammen diff",
"ui.sessionReviewV2.filterFiles": "Filtrer filer",
"ui.sessionReviewV2.toggleSidebar": "Vis eller skjul filtreet",
"ui.sessionReviewV2.showAllLines": "Vis alle linjer",
"ui.sessionReviewV2.hideNonDiffLines": "Skjul uendrede linjer",
"ui.sessionReviewV2.unifiedDiff": "Samlet diff",
"ui.sessionReviewV2.splitDiff": "Delt diff",
"ui.sessionReviewV2.previousFile": "Forrige fil",
"ui.sessionReviewV2.nextFile": "Neste fil",
"ui.sessionReviewV2.diffView": "Diffvisning",
"ui.sessionReviewV2.empty.noGit.title": "Ingen sporede endringer",
"ui.sessionReviewV2.empty.noGit.description": "Spor, gjennomgå og angre endringer i dette prosjektet",
"ui.sessionReviewV2.empty.noGit.action": "Opprett et Git-depot",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Oppretter Git-depot...",
"ui.sessionReviewV2.empty.changes.title": "Ingen filendringer ennå",
"ui.sessionReviewV2.empty.changes.description": "Prosjektendringer vises her",
"ui.lineComment.cancel": "Avbryt",
"ui.sessionTurn.diffs.changed.one": "Endret fil: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Endrede filer: {{count}}",
"ui.sessionTurn.diffs.showAll": "Vis alle",
"ui.sessionTurn.diffs.showLess": "Vis færre",
"ui.sessionTurn.diffs.more": "+{{count}} til",
}

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Zmiany w sesji",
"ui.sessionReview.title.git": "Zmiany Git",
"ui.sessionReview.title.branch": "Zmiany w gałęzi",
"ui.sessionReview.title.lastTurn": "Zmiany z ostatniej tury",
"ui.sessionReview.diffStyle.unified": "Ujednolicony",
"ui.sessionReview.diffStyle.split": "Podzielony",
@ -17,6 +19,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff jest zbyt duży, aby go wyrenderować",
"ui.sessionReview.largeDiff.meta": "Limit: {{limit}} zmienionych linii. Obecnie: {{current}} zmienionych linii.",
"ui.sessionReview.largeDiff.renderAnyway": "Renderuj mimo to",
"ui.sessionReviewV2.expandMode": "Rozwiń lub zwiń diff",
"ui.sessionReviewV2.filterFiles": "Filtruj pliki",
"ui.sessionReviewV2.toggleSidebar": "Przełącz drzewo plików",
"ui.sessionReviewV2.showAllLines": "Pokaż wszystkie linie",
"ui.sessionReviewV2.hideNonDiffLines": "Ukryj linie spoza zmian",
"ui.sessionReviewV2.unifiedDiff": "Ujednolicony diff",
"ui.sessionReviewV2.splitDiff": "Podzielony diff",
"ui.sessionReviewV2.previousFile": "Poprzedni plik",
"ui.sessionReviewV2.nextFile": "Następny plik",
"ui.sessionReviewV2.diffView": "Widok zmian",
"ui.sessionReviewV2.empty.noGit.title": "Brak śledzonych zmian",
"ui.sessionReviewV2.empty.noGit.description": "Śledź, przeglądaj i cofaj zmiany w tym projekcie",
"ui.sessionReviewV2.empty.noGit.action": "Utwórz repozytorium Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Tworzenie repozytorium Git...",
"ui.sessionReviewV2.empty.changes.title": "Brak jeszcze zmian w plikach",
"ui.sessionReviewV2.empty.changes.description": "Zmiany w projekcie pojawią się tutaj",
"ui.fileMedia.kind.image": "obraz",
"ui.fileMedia.kind.audio": "dźwięk",
"ui.fileMedia.state.removed": "{{kind}} usunięty",
@ -32,10 +50,16 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Dodaj komentarz",
"ui.lineComment.submit": "Skomentuj",
"ui.lineComment.cancel": "Anuluj",
"ui.sessionTurn.steps.show": "Pokaż kroki",
"ui.sessionTurn.steps.hide": "Ukryj kroki",
"ui.sessionTurn.summary.response": "Odpowiedź",
"ui.sessionTurn.diff.showMore": "Pokaż więcej zmian ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Zmieniony plik: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Zmienione pliki: {{count}}",
"ui.sessionTurn.diffs.showAll": "Pokaż wszystkie",
"ui.sessionTurn.diffs.showLess": "Pokaż mniej",
"ui.sessionTurn.diffs.more": "+{{count}} więcej",
"ui.sessionTurn.retry.retrying": "ponawianie",
"ui.sessionTurn.retry.inSeconds": "za {{seconds}}s",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "Изменения сессии",
"ui.sessionReview.title.git": "Изменения Git",
"ui.sessionReview.title.branch": "Изменения ветки",
"ui.sessionReview.title.lastTurn": "Изменения последнего хода",
"ui.sessionReview.diffStyle.unified": "Объединённый",
"ui.sessionReview.diffStyle.split": "Разделённый",
@ -17,6 +19,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Diff слишком большой для отображения",
"ui.sessionReview.largeDiff.meta": "Лимит: {{limit}} изменённых строк. Текущий: {{current}} изменённых строк.",
"ui.sessionReview.largeDiff.renderAnyway": "Отобразить всё равно",
"ui.sessionReviewV2.expandMode": "Развернуть или свернуть diff",
"ui.sessionReviewV2.filterFiles": "Фильтровать файлы",
"ui.sessionReviewV2.toggleSidebar": "Переключить дерево файлов",
"ui.sessionReviewV2.showAllLines": "Показать все строки",
"ui.sessionReviewV2.hideNonDiffLines": "Скрыть строки без изменений",
"ui.sessionReviewV2.unifiedDiff": "Объединённый diff",
"ui.sessionReviewV2.splitDiff": "Разделённый diff",
"ui.sessionReviewV2.previousFile": "Предыдущий файл",
"ui.sessionReviewV2.nextFile": "Следующий файл",
"ui.sessionReviewV2.diffView": "Просмотр diff",
"ui.sessionReviewV2.empty.noGit.title": "Нет отслеживаемых изменений",
"ui.sessionReviewV2.empty.noGit.description": "Отслеживайте, просматривайте и отменяйте изменения в этом проекте",
"ui.sessionReviewV2.empty.noGit.action": "Создать репозиторий Git",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Создание репозитория Git...",
"ui.sessionReviewV2.empty.changes.title": "Изменений в файлах пока нет",
"ui.sessionReviewV2.empty.changes.description": "Изменения проекта появятся здесь",
"ui.fileMedia.kind.image": "изображение",
"ui.fileMedia.kind.audio": "аудио",
"ui.fileMedia.state.removed": "{{kind}} удалено",
@ -32,10 +50,16 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Добавить комментарий",
"ui.lineComment.submit": "Комментировать",
"ui.lineComment.cancel": "Отмена",
"ui.sessionTurn.steps.show": "Показать шаги",
"ui.sessionTurn.steps.hide": "Скрыть шаги",
"ui.sessionTurn.summary.response": "Ответ",
"ui.sessionTurn.diff.showMore": "Показать ещё изменений ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Изменённый файл: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Изменённые файлы: {{count}}",
"ui.sessionTurn.diffs.showAll": "Показать все",
"ui.sessionTurn.diffs.showLess": "Показать меньше",
"ui.sessionTurn.diffs.more": "+ ещё {{count}}",
"ui.sessionTurn.retry.retrying": "повтор",
"ui.sessionTurn.retry.inSeconds": "через {{seconds}}с",

View file

@ -1,5 +1,7 @@
export const dict = {
"ui.sessionReview.title": "การเปลี่ยนแปลงเซสชัน",
"ui.sessionReview.title.git": "การเปลี่ยนแปลงใน Git",
"ui.sessionReview.title.branch": "การเปลี่ยนแปลงในสาขา",
"ui.sessionReview.title.lastTurn": "การเปลี่ยนแปลงของเทิร์นล่าสุด",
"ui.sessionReview.diffStyle.unified": "แบบรวม",
"ui.sessionReview.diffStyle.split": "แบบแยก",
@ -17,6 +19,22 @@ export const dict = {
"ui.sessionReview.largeDiff.meta":
"ขีดจำกัด: {{limit}} บรรทัดที่เปลี่ยนแปลง. ปัจจุบัน: {{current}} บรรทัดที่เปลี่ยนแปลง.",
"ui.sessionReview.largeDiff.renderAnyway": "แสดงผลต่อไป",
"ui.sessionReviewV2.expandMode": "ขยายหรือย่อ diff",
"ui.sessionReviewV2.filterFiles": "กรองไฟล์",
"ui.sessionReviewV2.toggleSidebar": "สลับต้นไม้ไฟล์",
"ui.sessionReviewV2.showAllLines": "แสดงทุกบรรทัด",
"ui.sessionReviewV2.hideNonDiffLines": "ซ่อนบรรทัดที่ไม่มี diff",
"ui.sessionReviewV2.unifiedDiff": "diff แบบรวม",
"ui.sessionReviewV2.splitDiff": "diff แบบแยก",
"ui.sessionReviewV2.previousFile": "ไฟล์ก่อนหน้า",
"ui.sessionReviewV2.nextFile": "ไฟล์ถัดไป",
"ui.sessionReviewV2.diffView": "มุมมอง diff",
"ui.sessionReviewV2.empty.noGit.title": "ไม่มีการเปลี่ยนแปลงที่ติดตามอยู่",
"ui.sessionReviewV2.empty.noGit.description": "ติดตาม ตรวจสอบ และเลิกทำการเปลี่ยนแปลงในโปรเจกต์นี้",
"ui.sessionReviewV2.empty.noGit.action": "สร้าง Git รีโพซิทอรี",
"ui.sessionReviewV2.empty.noGit.actionLoading": "กำลังสร้าง Git รีโพซิทอรี...",
"ui.sessionReviewV2.empty.changes.title": "ยังไม่มีการเปลี่ยนแปลงไฟล์",
"ui.sessionReviewV2.empty.changes.description": "การเปลี่ยนแปลงในโปรเจกต์จะแสดงที่นี่",
"ui.fileMedia.kind.image": "รูปภาพ",
"ui.fileMedia.kind.audio": "เสียง",
"ui.fileMedia.state.removed": "ลบ{{kind}}แล้ว",
@ -33,11 +51,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "เพิ่มความคิดเห็น",
"ui.lineComment.submit": "แสดงความคิดเห็น",
"ui.lineComment.cancel": "ยกเลิก",
"ui.sessionTurn.steps.show": "แสดงขั้นตอน",
"ui.sessionTurn.steps.hide": "ซ่อนขั้นตอน",
"ui.sessionTurn.summary.response": "การตอบสนอง",
"ui.sessionTurn.diff.showMore": "แสดงการเปลี่ยนแปลงเพิ่มเติม ({{count}})",
"ui.sessionTurn.diffs.changed.one": "จำนวนไฟล์ที่เปลี่ยนแปลง: {{count}}",
"ui.sessionTurn.diffs.changed.other": "จำนวนไฟล์ที่เปลี่ยนแปลง: {{count}}",
"ui.sessionTurn.diffs.showAll": "แสดงทั้งหมด",
"ui.sessionTurn.diffs.showLess": "แสดงน้อยลง",
"ui.sessionTurn.diffs.more": "+{{count}} ไฟล์เพิ่มเติม",
"ui.sessionTurn.retry.retrying": "กำลังลองใหม่",
"ui.sessionTurn.retry.inSeconds": "ใน {{seconds}}วิ",

View file

@ -4,6 +4,8 @@ type Keys = keyof typeof en
export const dict = {
"ui.sessionReview.title": "Oturum değişiklikleri",
"ui.sessionReview.title.git": "Git değişiklikleri",
"ui.sessionReview.title.branch": "Dal değişiklikleri",
"ui.sessionReview.title.lastTurn": "Son tur değişiklikleri",
"ui.sessionReview.diffStyle.unified": "Birleşik",
"ui.sessionReview.diffStyle.split": "Bölünmüş",
@ -21,6 +23,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "Fark gösterimi için çok büyük",
"ui.sessionReview.largeDiff.meta": "Limit: {{limit}} değişen satır. Mevcut: {{current}} değişen satır.",
"ui.sessionReview.largeDiff.renderAnyway": "Yine de göster",
"ui.sessionReviewV2.expandMode": "Farkı genişlet veya daralt",
"ui.sessionReviewV2.filterFiles": "Dosyaları filtrele",
"ui.sessionReviewV2.toggleSidebar": "Dosya ağacını aç/kapat",
"ui.sessionReviewV2.showAllLines": "Tüm satırları göster",
"ui.sessionReviewV2.hideNonDiffLines": "Fark içermeyen satırları gizle",
"ui.sessionReviewV2.unifiedDiff": "Birleşik fark",
"ui.sessionReviewV2.splitDiff": "Bölünmüş fark",
"ui.sessionReviewV2.previousFile": "Önceki dosya",
"ui.sessionReviewV2.nextFile": "Sonraki dosya",
"ui.sessionReviewV2.diffView": "Fark görünümü",
"ui.sessionReviewV2.empty.noGit.title": "İzlenen değişiklik yok",
"ui.sessionReviewV2.empty.noGit.description": "Bu projedeki değişiklikleri takip et, incele ve geri al",
"ui.sessionReviewV2.empty.noGit.action": "Git deposu oluştur",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Git deposu oluşturuluyor...",
"ui.sessionReviewV2.empty.changes.title": "Henüz dosya değişikliği yok",
"ui.sessionReviewV2.empty.changes.description": "Proje değişiklikleri burada görünecek",
"ui.fileMedia.kind.image": "görsel",
"ui.fileMedia.kind.audio": "ses",
@ -38,11 +56,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Yorum ekle",
"ui.lineComment.submit": "Yorum yap",
"ui.lineComment.cancel": "İptal",
"ui.sessionTurn.steps.show": "Adımları göster",
"ui.sessionTurn.steps.hide": "Adımları gizle",
"ui.sessionTurn.summary.response": "Yanıt",
"ui.sessionTurn.diff.showMore": "Daha fazla değişiklik göster ({{count}})",
"ui.sessionTurn.diffs.changed.one": "Değiştirilen dosya: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Değiştirilen dosyalar: {{count}}",
"ui.sessionTurn.diffs.showAll": "Tümünü göster",
"ui.sessionTurn.diffs.showLess": "Daha az göster",
"ui.sessionTurn.diffs.more": "+{{count}} dosya daha",
"ui.sessionTurn.retry.retrying": "yeniden deneniyor",
"ui.sessionTurn.retry.inSeconds": "{{seconds}}sn içinde",

View file

@ -15,6 +15,23 @@ export const dict: Record<string, string> = {
"ui.sessionReview.largeDiff.title": "Завеликий diff для відображення",
"ui.sessionReview.largeDiff.meta": "Ліміт: {{limit}} змінених рядків. Поточно: {{current}} змінених рядків.",
"ui.sessionReview.largeDiff.renderAnyway": "Все одно відобразити",
"ui.sessionReviewV2.expandMode": "Розгорнути або згорнути diff",
"ui.sessionReviewV2.filterFiles": "Фільтрувати файли",
"ui.sessionReviewV2.toggleSidebar": "Перемкнути дерево файлів",
"ui.sessionReviewV2.showAllLines": "Показати всі рядки",
"ui.sessionReviewV2.hideNonDiffLines": "Приховати рядки поза diff",
"ui.sessionReviewV2.unifiedDiff": "Об'єднаний diff",
"ui.sessionReviewV2.splitDiff": "Розділений diff",
"ui.sessionReviewV2.previousFile": "Попередній файл",
"ui.sessionReviewV2.nextFile": "Наступний файл",
"ui.sessionReviewV2.diffView": "Перегляд diff",
"ui.sessionReviewV2.empty.noGit.title": "Немає відстежуваних змін",
"ui.sessionReviewV2.empty.noGit.description": "Відстежуйте, переглядайте та скасовуйте зміни в цьому проєкті",
"ui.sessionReviewV2.empty.noGit.action": "Створити Git-репозиторій",
"ui.sessionReviewV2.empty.noGit.actionLoading": "Створення Git-репозиторію...",
"ui.sessionReviewV2.empty.changes.title": "Змін у файлах ще немає",
"ui.sessionReviewV2.empty.changes.description": "Зміни проєкту з'являться тут",
"ui.sessionReview.openFile": "Відкрити файл",
"ui.sessionReview.selection.line": "рядок {{line}}",
"ui.sessionReview.selection.lines": "рядки {{start}}-{{end}}",
@ -35,15 +52,17 @@ export const dict: Record<string, string> = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "Додати коментар",
"ui.lineComment.submit": "Коментувати",
"ui.lineComment.cancel": "Скасувати",
"ui.sessionTurn.steps.show": "Показати кроки",
"ui.sessionTurn.steps.hide": "Приховати кроки",
"ui.sessionTurn.summary.response": "Відповідь",
"ui.sessionTurn.diff.showMore": "Показати більше змін ({{count}})",
"ui.sessionTurn.diffs.changed": "Змінено",
"ui.sessionTurn.diffs.changed.one": "Змінений файл: {{count}}",
"ui.sessionTurn.diffs.changed.other": "Змінені файли: {{count}}",
"ui.sessionTurn.diffs.showAll": "Показати всі",
"ui.sessionTurn.diffs.showLess": "Показати менше",
"ui.sessionTurn.diffs.more": "+{{count}} інших файлів",
"ui.sessionTurn.diffs.more": "+ ще {{count}}",
"ui.sessionTurn.retry.retrying": "повтор",
"ui.sessionTurn.retry.inSeconds": "за {{seconds}}с",
@ -53,6 +72,15 @@ export const dict: Record<string, string> = {
"ui.sessionTurn.error.freeUsageExceeded": "Перевищено ліміт безкоштовного використання",
"ui.sessionTurn.error.addCredits": "Додати кредити",
"dialog.usageExceeded.freeTier.title": "Безкоштовний ліміт вичерпано",
"dialog.usageExceeded.freeTier.description":
"Підпишіться на OpenCode Go для надійного доступу до найкращих моделей із відкритим кодом від $5 на місяць.",
"dialog.usageExceeded.freeTier.actionLabel": "Підписатися",
"dialog.usageExceeded.accountRateLimit.title": "Ліміт Go вичерпано",
"dialog.usageExceeded.accountRateLimit.description":
"Ліміт використання вичерпано. Щоб і надалі користуватися цією моделлю, увімкніть оплату з доступного балансу",
"dialog.usageExceeded.accountRateLimit.actionLabel": "Відкрити налаштування",
"ui.sessionTurn.status.delegating": "Делегування роботи",
"ui.sessionTurn.status.planning": "Планування наступних кроків",
"ui.sessionTurn.status.gatheringContext": "Дослідження",

View file

@ -4,6 +4,8 @@ type Keys = keyof typeof en
export const dict = {
"ui.sessionReview.title": "会话变更",
"ui.sessionReview.title.git": "Git 变更",
"ui.sessionReview.title.branch": "分支变更",
"ui.sessionReview.title.lastTurn": "上一轮变更",
"ui.sessionReview.diffStyle.unified": "统一",
"ui.sessionReview.diffStyle.split": "拆分",
@ -20,6 +22,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "差异过大,无法渲染",
"ui.sessionReview.largeDiff.meta": "限制:{{limit}} 行变更。当前:{{current}} 行变更。",
"ui.sessionReview.largeDiff.renderAnyway": "仍然渲染",
"ui.sessionReviewV2.expandMode": "展开或折叠差异",
"ui.sessionReviewV2.filterFiles": "筛选文件",
"ui.sessionReviewV2.toggleSidebar": "切换文件树",
"ui.sessionReviewV2.showAllLines": "显示所有行",
"ui.sessionReviewV2.hideNonDiffLines": "隐藏非差异行",
"ui.sessionReviewV2.unifiedDiff": "统一差异",
"ui.sessionReviewV2.splitDiff": "拆分差异",
"ui.sessionReviewV2.previousFile": "上一个文件",
"ui.sessionReviewV2.nextFile": "下一个文件",
"ui.sessionReviewV2.diffView": "差异视图",
"ui.sessionReviewV2.empty.noGit.title": "无已跟踪的变更",
"ui.sessionReviewV2.empty.noGit.description": "在此项目中跟踪、审查和撤销更改",
"ui.sessionReviewV2.empty.noGit.action": "创建 Git 仓库",
"ui.sessionReviewV2.empty.noGit.actionLoading": "正在创建 Git 仓库...",
"ui.sessionReviewV2.empty.changes.title": "尚无文件变更",
"ui.sessionReviewV2.empty.changes.description": "项目变更将显示在此处",
"ui.fileMedia.kind.image": "图片",
"ui.fileMedia.kind.audio": "音频",
"ui.fileMedia.state.removed": "{{kind}}已移除",
@ -36,11 +54,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "添加评论",
"ui.lineComment.submit": "评论",
"ui.lineComment.cancel": "取消",
"ui.sessionTurn.steps.show": "显示步骤",
"ui.sessionTurn.steps.hide": "隐藏步骤",
"ui.sessionTurn.summary.response": "回复",
"ui.sessionTurn.diff.showMore": "显示更多更改({{count}}",
"ui.sessionTurn.diffs.changed.one": "已更改文件:{{count}} 个",
"ui.sessionTurn.diffs.changed.other": "已更改文件:{{count}} 个",
"ui.sessionTurn.diffs.showAll": "全部显示",
"ui.sessionTurn.diffs.showLess": "收起",
"ui.sessionTurn.diffs.more": "+{{count}} 个文件",
"ui.sessionTurn.retry.retrying": "重试中",
"ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒后",

View file

@ -4,6 +4,8 @@ type Keys = keyof typeof en
export const dict = {
"ui.sessionReview.title": "工作階段變更",
"ui.sessionReview.title.git": "Git 變更",
"ui.sessionReview.title.branch": "分支變更",
"ui.sessionReview.title.lastTurn": "上一輪變更",
"ui.sessionReview.diffStyle.unified": "整合",
"ui.sessionReview.diffStyle.split": "拆分",
@ -20,6 +22,22 @@ export const dict = {
"ui.sessionReview.largeDiff.title": "差異過大,無法渲染",
"ui.sessionReview.largeDiff.meta": "限制:{{limit}} 行變更。目前:{{current}} 行變更。",
"ui.sessionReview.largeDiff.renderAnyway": "仍然渲染",
"ui.sessionReviewV2.expandMode": "展開或收合差異",
"ui.sessionReviewV2.filterFiles": "篩選檔案",
"ui.sessionReviewV2.toggleSidebar": "切換檔案樹",
"ui.sessionReviewV2.showAllLines": "顯示所有行",
"ui.sessionReviewV2.hideNonDiffLines": "隱藏無差異的行",
"ui.sessionReviewV2.unifiedDiff": "整合差異",
"ui.sessionReviewV2.splitDiff": "拆分差異",
"ui.sessionReviewV2.previousFile": "上一個檔案",
"ui.sessionReviewV2.nextFile": "下一個檔案",
"ui.sessionReviewV2.diffView": "差異檢視",
"ui.sessionReviewV2.empty.noGit.title": "沒有追蹤的變更",
"ui.sessionReviewV2.empty.noGit.description": "追蹤、檢閱及復原此專案中的變更",
"ui.sessionReviewV2.empty.noGit.action": "建立 Git 儲存庫",
"ui.sessionReviewV2.empty.noGit.actionLoading": "正在建立 Git 儲存庫...",
"ui.sessionReviewV2.empty.changes.title": "尚無檔案變更",
"ui.sessionReviewV2.empty.changes.description": "專案變更會顯示在這裡",
"ui.fileMedia.kind.image": "圖片",
"ui.fileMedia.kind.audio": "音訊",
"ui.fileMedia.state.removed": "{{kind}}已移除",
@ -36,11 +54,17 @@ export const dict = {
"ui.lineComment.editorLabel.suffix": "",
"ui.lineComment.placeholder": "新增評論",
"ui.lineComment.submit": "評論",
"ui.lineComment.cancel": "取消",
"ui.sessionTurn.steps.show": "顯示步驟",
"ui.sessionTurn.steps.hide": "隱藏步驟",
"ui.sessionTurn.summary.response": "回覆",
"ui.sessionTurn.diff.showMore": "顯示更多變更 ({{count}})",
"ui.sessionTurn.diffs.changed.one": "已變更檔案:{{count}} 個",
"ui.sessionTurn.diffs.changed.other": "已變更檔案:{{count}} 個",
"ui.sessionTurn.diffs.showAll": "全部顯示",
"ui.sessionTurn.diffs.showLess": "顯示較少",
"ui.sessionTurn.diffs.more": "+{{count}} 個檔案",
"ui.sessionTurn.retry.retrying": "重試中",
"ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒後",

21
script/translate-app.md Normal file
View file

@ -0,0 +1,21 @@
Translate the product app locale `$1` from the English source dictionaries. English is the read-only source of truth. Its copy is intentional and must never be modified, rewritten, or "improved."
The translation request below contains the locale glossary, exact source and target files, plus missing, extra, and placeholder-mismatched keys.
```json
$ARGUMENTS
```
Requirements:
- Edit only the target files listed in the request. Never edit English, another locale, tests, registries, docs, or other packages.
- Treat every English key and value as intentional. Translate from it without changing the English source files in any way.
- Add every missing key with a natural, concise translation suitable for application UI.
- Remove keys listed as extra and repair values listed under `placeholders` so their `{{tokens}}` exactly match English.
- Preserve existing translations unless they have a listed placeholder mismatch.
- Preserve meaning, intent, tone, capitalization, punctuation, whitespace, and formatting.
- Preserve technical terms and artifacts exactly: OpenCode, API names, identifiers, code, commands, flags, paths, URLs, versions, error messages, config keys, and placeholder tokens.
- Apply the locale glossary included in the request.
- `ui.sessionTurn.diffs.changed.one` and `ui.sessionTurn.diffs.changed.other` are complete count phrases. Preserve `{{count}}` and translate the whole phrase naturally rather than composing translated fragments.
- Use only read, glob, grep, and edit tools. Do not run commands or delegate work.
- Finish only when every requested key is synchronized and no other file has changed.

View file

@ -0,0 +1,168 @@
import { describe, expect, test } from "bun:test"
import {
findDrift,
glossaryFile,
modelVariants,
parseTranslationArgs,
runPool,
sessionIDFromEvents,
sessionModels,
targetFiles,
textFromEvents,
translationConfig,
unexpectedChanges,
} from "./translate-app"
describe("translate app", () => {
test("parses one locale with the public model defaults", () => {
expect(parseTranslationArgs(["fr"])).toEqual({
target: "fr",
concurrency: 1,
model: "opencode/gpt-5.5",
variant: "xhigh",
dryRun: false,
check: false,
help: false,
})
})
test("parses all locales with bounded concurrency overrides", () => {
expect(
parseTranslationArgs([
"all",
"--concurrency",
"7",
"--model",
"opencode/gpt-5.4",
"--variant",
"high",
"--dry-run",
]),
).toEqual({
target: "all",
concurrency: 7,
model: "opencode/gpt-5.4",
variant: "high",
dryRun: true,
check: false,
help: false,
})
})
test("rejects unsupported targets and invalid concurrency", () => {
expect(() => parseTranslationArgs(["en"])).toThrow("Unknown locale")
expect(() => parseTranslationArgs(["fr", "de"])).toThrow("one locale")
expect(() => parseTranslationArgs(["all", "--concurrency", "0"])).toThrow("positive integer")
})
test("parses fresh-process parity checks without requesting translation", () => {
expect(parseTranslationArgs(["fr", "--check"]).check).toBe(true)
})
test("limits each locale to its app surfaces", () => {
expect(targetFiles("fr")).toEqual([
"packages/app/src/i18n/fr.ts",
"packages/ui/src/i18n/fr.ts",
"packages/desktop/src/renderer/i18n/fr.ts",
])
expect(targetFiles("tr")).toEqual(["packages/app/src/i18n/tr.ts", "packages/ui/src/i18n/tr.ts"])
})
test("maps product locale codes to their glossaries", () => {
expect(glossaryFile("fr")).toBe(".opencode/glossary/fr.md")
expect(glossaryFile("zh")).toBe(".opencode/glossary/zh-cn.md")
expect(glossaryFile("zht")).toBe(".opencode/glossary/zh-tw.md")
})
test("finds key and placeholder drift", () => {
expect(
findDrift(
{ keep: "Hello {{name}}", missing: "Missing", changed: "{{one}} {{two}}" },
{ keep: "Bonjour {{name}}", extra: "Extra", changed: "{{one}}" },
),
).toEqual({ missing: ["missing"], extra: ["extra"], placeholders: ["changed"] })
})
test("runs work with the requested maximum concurrency", async () => {
const active = new Set<number>()
const peaks: number[] = []
const result = await runPool([1, 2, 3, 4, 5], 2, async (item) => {
active.add(item)
peaks.push(active.size)
await Bun.sleep(5)
active.delete(item)
return item * 2
})
expect(result).toEqual([2, 4, 6, 8, 10])
expect(Math.max(...peaks)).toBe(2)
})
test("reads the actual model and variant from the completed session", () => {
expect(sessionIDFromEvents('shared: https://example.test\n{"type":"step_start","sessionID":"ses_test"}\n')).toBe(
"ses_test",
)
expect(
sessionModels({
messages: [
{ info: { role: "user" } },
{
info: {
role: "assistant",
providerID: "opencode",
modelID: "gpt-5.5",
variant: "xhigh",
},
},
],
}),
).toEqual([{ model: "opencode/gpt-5.5", variant: "xhigh" }])
expect(
textFromEvents(
'shared: https://example.test\n{"type":"text","sessionID":"ses_test","part":{"text":"finished"}}\n',
),
).toBe("finished")
})
test("resolves variants from verbose model output", () => {
const output = `opencode/other
{"variants":{}}
opencode/gpt-5.5
{"variants":{"high":{"reasoningEffort":"high"},"xhigh":{"reasoningEffort":"xhigh"}}}
opencode/next
{"variants":{}}
`
expect(modelVariants(output, "opencode/gpt-5.5")).toEqual({
high: { reasoningEffort: "high" },
xhigh: { reasoningEffort: "xhigh" },
})
})
test("disables side effects and scopes edits for the translation agent", () => {
const config = translationConfig("translate-app-fr", "opencode/gpt-5.5", ["packages/app/src/i18n/fr.ts"])
expect(config.share).toBe("disabled")
expect(config.formatter).toBe(false)
expect(config.lsp).toBe(false)
expect(config.agent["translate-app-fr"].permission.edit).toEqual({
"*": "deny",
"packages/app/src/i18n/fr.ts": "allow",
})
})
test("detects edits outside the locale targets", () => {
expect(
unexpectedChanges(
{ "script/translate-app.ts": "before" },
{
"script/translate-app.ts": "before",
"packages/app/src/i18n/fr.ts": "translated",
"packages/app/src/app.tsx": "unexpected",
},
["packages/app/src/i18n/fr.ts"],
),
).toEqual(["packages/app/src/app.tsx"])
expect(unexpectedChanges({ "already-dirty.ts": "before" }, { "already-dirty.ts": "after" }, [])).toEqual([
"already-dirty.ts",
])
})
})

523
script/translate-app.ts Normal file
View file

@ -0,0 +1,523 @@
#!/usr/bin/env bun
import path from "path"
import { parseArgs } from "util"
import { pathToFileURL } from "url"
const locales = [
"ar",
"br",
"bs",
"da",
"de",
"es",
"fr",
"ja",
"ko",
"no",
"pl",
"ru",
"uk",
"th",
"tr",
"zh",
"zht",
] as const
type Locale = (typeof locales)[number]
const languages = {
ar: "Arabic",
br: "Brazilian Portuguese",
bs: "Bosnian",
da: "Danish",
de: "German",
es: "Spanish",
fr: "French",
ja: "Japanese",
ko: "Korean",
no: "Norwegian Bokmal",
pl: "Polish",
ru: "Russian",
uk: "Ukrainian",
th: "Thai",
tr: "Turkish",
zh: "Simplified Chinese",
zht: "Traditional Chinese",
} as const satisfies Record<Locale, string>
type Dictionary = Record<string, string>
type Drift = ReturnType<typeof findDrift>
type Domain = { name: string; source: string; target: string; drift: Drift }
const desktopLocales = new Set<Locale>(locales.filter((locale) => locale !== "th" && locale !== "tr"))
const root = path.resolve(import.meta.dir, "..")
export function parseTranslationArgs(args: string[]) {
const parsed = parseArgs({
args,
options: {
concurrency: { type: "string", short: "c", default: "4" },
model: { type: "string", default: "opencode/gpt-5.5" },
variant: { type: "string", default: "xhigh" },
"dry-run": { type: "boolean", default: false },
check: { type: "boolean", default: false },
help: { type: "boolean", short: "h", default: false },
},
allowPositionals: true,
})
const target = parsed.positionals[0] ?? "all"
const concurrency = Number(parsed.values.concurrency)
if (!parsed.values.help && parsed.positionals.length !== 1) throw new Error("Pass one locale or 'all'.")
if (target !== "all" && !isLocale(target)) throw new Error(`Unknown locale '${target}'.`)
if (!Number.isInteger(concurrency) || concurrency < 1) throw new Error("Concurrency must be a positive integer.")
return {
target,
concurrency: target === "all" ? concurrency : 1,
model: parsed.values.model,
variant: parsed.values.variant,
dryRun: parsed.values["dry-run"],
check: parsed.values.check,
help: parsed.values.help,
}
}
export function targetFiles(locale: Locale) {
return [
`packages/app/src/i18n/${locale}.ts`,
`packages/ui/src/i18n/${locale}.ts`,
...(desktopLocales.has(locale) ? [`packages/desktop/src/renderer/i18n/${locale}.ts`] : []),
]
}
export function glossaryFile(locale: Locale) {
if (locale === "zh") return ".opencode/glossary/zh-cn.md"
if (locale === "zht") return ".opencode/glossary/zh-tw.md"
return `.opencode/glossary/${locale}.md`
}
export function findDrift(source: Dictionary, target: Dictionary) {
return {
missing: Object.keys(source).filter((key) => !Object.hasOwn(target, key)),
extra: Object.keys(target).filter((key) => !Object.hasOwn(source, key)),
placeholders: Object.keys(source).filter(
(key) => Object.hasOwn(target, key) && tokens(source[key]).join() !== tokens(target[key]).join(),
),
}
}
export function sessionIDFromEvents(output: string) {
const match = output.match(/"sessionID"\s*:\s*"([^"]+)"/)
if (!match?.[1]) throw new Error("OpenCode did not report a session ID.")
return match[1]
}
export function sessionModels(value: unknown) {
if (!isRecord(value) || !Array.isArray(value.messages))
throw new Error("OpenCode returned an invalid session export.")
return value.messages.flatMap((message) => {
if (!isRecord(message) || !isRecord(message.info) || message.info.role !== "assistant") return []
if (typeof message.info.providerID !== "string" || typeof message.info.modelID !== "string") {
throw new Error("OpenCode session export omitted the assistant model.")
}
return [
{
model: `${message.info.providerID}/${message.info.modelID}`,
variant: typeof message.info.variant === "string" ? message.info.variant : undefined,
},
]
})
}
export function modelVariants(output: string, model: string) {
const normalized = output.replaceAll("\r\n", "\n")
const marker = `${model}\n`
const start = normalized.indexOf(marker)
if (start < 0) throw new Error(`Model not found: ${model}`)
const provider = model.split("/")[0]
const rest = normalized.slice(start + marker.length)
const next = rest.search(new RegExp(`^${escapeRegExp(provider)}/`, "m"))
const metadata: unknown = JSON.parse((next < 0 ? rest : rest.slice(0, next)).trim())
if (!isRecord(metadata) || !isRecord(metadata.variants)) throw new Error(`Model variants not found: ${model}`)
return metadata.variants
}
export function translationConfig(agent: string, model: string, targets: string[]) {
return {
$schema: "https://opencode.ai/config.json",
model,
default_agent: agent,
share: "disabled" as const,
formatter: false,
lsp: false,
snapshot: false,
agent: {
[agent]: {
mode: "primary" as const,
model,
permission: {
"*": "deny" as const,
read: "allow" as const,
glob: "allow" as const,
grep: "allow" as const,
edit: Object.fromEntries([["*", "deny"], ...targets.map((target) => [target, "allow"])]),
},
},
},
}
}
export function unexpectedChanges(before: Record<string, string>, after: Record<string, string>, allowed: string[]) {
const targets = new Set(allowed)
return [...new Set([...Object.keys(before), ...Object.keys(after)])]
.filter((file) => !targets.has(file) && before[file] !== after[file])
.sort()
}
export async function runPool<T, R>(items: readonly T[], concurrency: number, task: (item: T) => Promise<R>) {
const results = new Map<number, R>()
const entries = items.entries()
const worker = async (): Promise<void> => {
const next = entries.next()
if (next.done) return
results.set(next.value[0], await task(next.value[1]))
await worker()
}
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, worker))
return Array.from(results.entries())
.sort((a, b) => a[0] - b[0])
.map((entry) => entry[1])
}
async function main() {
const options = parseTranslationArgs(Bun.argv.slice(2))
if (options.help) {
console.log(`
Usage: bun run translate:app -- <locale|all> [options]
Synchronizes product app translations with the English app, UI, and desktop dictionaries.
Options:
-c, --concurrency <count> Maximum parallel OpenCode runs for 'all' (default: 4)
--model <provider/id> OpenCode model (default: opencode/gpt-5.5)
--variant <name> Model variant (default: xhigh)
--dry-run Report drift without running OpenCode
--check Exit nonzero when translation drift exists
-h, --help Show this help message
Examples:
bun run translate:app -- fr
bun run translate:app -- all --concurrency 4
`)
return
}
const selected = options.target === "all" ? locales : [options.target]
const plans = await Promise.all(selected.map((locale) => inspect(locale)))
plans.forEach(report)
const pending = plans.filter((plan) => plan.domains.some((domain) => changed(domain.drift)))
if (options.check) {
if (pending.length) process.exitCode = 1
return
}
if (options.dryRun || pending.length === 0) return
const targets = pending.flatMap((plan) => plan.domains.map((domain) => domain.target))
const baseline = await worktreeSnapshot()
const variant = await resolveModelVariant(options.model, options.variant)
console.log(`Resolved ${options.model} (${options.variant}): ${JSON.stringify(variant)}`)
const template = await commandTemplate()
const results = await runPool(pending, options.concurrency, (plan) =>
translate(plan, template, options.model, options.variant).catch((error) => ({
locale: plan.locale,
code: 1,
stdout: "",
stderr: error instanceof Error ? error.message : String(error),
})),
)
results.forEach((result) => {
if (result.stdout) process.stdout.write(`\n[${result.locale}]\n${result.stdout}`)
if (result.stderr) process.stderr.write(`\n[${result.locale}]\n${result.stderr}`)
})
const failed = results.filter((result) => result.code !== 0)
const checks = await runPool(pending, options.concurrency, (plan) => check(plan.locale))
const incomplete = checks.filter((result) => result.code !== 0)
const escaped = unexpectedChanges(baseline, await worktreeSnapshot(), targets)
incomplete.forEach((result) => {
if (result.stdout) process.stderr.write(`\n[${result.locale} verification]\n${result.stdout}`)
if (result.stderr) process.stderr.write(`\n[${result.locale} verification]\n${result.stderr}`)
})
if (failed.length === 0 && incomplete.length === 0 && escaped.length === 0) {
console.log(`\nTranslated ${pending.map((plan) => plan.locale).join(", ")}.`)
return
}
if (failed.length) console.error(`\nOpenCode failed for: ${failed.map((result) => result.locale).join(", ")}`)
if (incomplete.length)
console.error(`Translation remains incomplete for: ${incomplete.map((plan) => plan.locale).join(", ")}`)
if (escaped.length) console.error(`Translation changed files outside its locale targets: ${escaped.join(", ")}`)
process.exitCode = 1
}
async function worktreeSnapshot() {
const groups = await Promise.all([
gitPaths(["diff", "--name-only", "-z", "HEAD"]),
gitPaths(["ls-files", "--others", "--exclude-standard", "-z"]),
])
const files = [...new Set(groups.flat())]
return Object.fromEntries(
await Promise.all(
files.map(async (file) => {
const target = Bun.file(path.join(root, file))
if (!(await target.exists())) return [file, "<missing>"] as const
const hash = new Bun.CryptoHasher("sha256")
hash.update(await target.arrayBuffer())
return [file, hash.digest("hex")] as const
}),
),
)
}
async function gitPaths(args: string[]) {
const proc = Bun.spawn(["git", ...args], {
cwd: root,
stdin: "ignore",
stdout: "pipe",
stderr: "pipe",
})
const result = await Promise.all([new Response(proc.stdout).text(), new Response(proc.stderr).text(), proc.exited])
if (result[2] !== 0) throw new Error(result[1] || `git ${args.join(" ")} failed`)
return result[0].split("\0").filter(Boolean)
}
async function check(locale: Locale) {
const proc = Bun.spawn([process.execPath, import.meta.path, locale, "--check"], {
cwd: root,
stdin: "ignore",
stdout: "pipe",
stderr: "pipe",
})
const result = await Promise.all([new Response(proc.stdout).text(), new Response(proc.stderr).text(), proc.exited])
return { locale, stdout: result[0], stderr: result[1], code: result[2] }
}
async function inspect(locale: Locale) {
const domains = await Promise.all(
targetFiles(locale).map(async (target) => {
const source = target.replace(`/${locale}.ts`, "/en.ts")
const dictionaries = await Promise.all([dictionary(source), dictionary(target)])
return {
name: target.includes("packages/app/") ? "app" : target.includes("packages/ui/") ? "ui" : "desktop",
source,
target,
drift: findDrift(dictionaries[0], dictionaries[1]),
}
}),
)
return { locale, language: languages[locale], domains }
}
async function dictionary(file: string) {
const module: unknown = await import(pathToFileURL(path.join(root, file)).href)
if (typeof module !== "object" || module === null || !("dict" in module) || !isDictionary(module.dict)) {
throw new Error(`Invalid translation dictionary: ${file}`)
}
return module.dict
}
async function commandTemplate() {
return (await Bun.file(path.join(root, "script/translate-app.md")).text()).trim()
}
async function translate(
plan: { locale: Locale; language: string; domains: Domain[] },
template: string,
model: string,
variant: string,
) {
const glossary = glossaryFile(plan.locale)
const glossaryContent = (await Bun.file(path.join(root, glossary)).exists())
? await Bun.file(path.join(root, glossary)).text()
: undefined
const prompt = template.replaceAll("$1", plan.locale).replaceAll(
"$ARGUMENTS",
JSON.stringify(
{
locale: plan.locale,
language: plan.language,
glossary: glossaryContent ? { file: glossary, content: glossaryContent } : undefined,
domains: plan.domains.map((domain) => ({
source: domain.source,
target: domain.target,
...domain.drift,
})),
},
null,
2,
),
)
const agent = `translate-app-${plan.locale}-${process.pid}`
const env = isolatedEnvironment()
env.OPENCODE_DISABLE_PROJECT_CONFIG = "1"
env.OPENCODE_CONFIG_CONTENT = JSON.stringify(
translationConfig(
agent,
model,
plan.domains.map((domain) => domain.target),
),
)
const proc = Bun.spawn(
[
"opencode",
"--pure",
"run",
"--dir",
root,
"--agent",
agent,
"--model",
model,
"--variant",
variant,
"--title",
`Translate app ${plan.locale}`,
"--format",
"json",
],
{
cwd: root,
env,
stdin: "pipe",
stdout: "pipe",
stderr: "pipe",
},
)
const stdout = new Response(proc.stdout).text()
const stderr = new Response(proc.stderr).text()
await proc.stdin.write(prompt)
await proc.stdin.end()
const result = await Promise.all([stdout, stderr, proc.exited])
if (result[2] !== 0) return { locale: plan.locale, stdout: result[0], stderr: result[1], code: result[2] }
const sessionID = sessionIDFromEvents(result[0])
const exported = Bun.spawn(["opencode", "--pure", "export", sessionID, "--sanitize"], {
cwd: root,
env,
stdout: "pipe",
stderr: "pipe",
})
const exportResult = await Promise.all([
new Response(exported.stdout).text(),
new Response(exported.stderr).text(),
exported.exited,
])
if (exportResult[2] !== 0) {
return { locale: plan.locale, stdout: textFromEvents(result[0]), stderr: exportResult[1], code: exportResult[2] }
}
const session: unknown = JSON.parse(exportResult[0])
const observed = sessionModels(session)
const mismatch = observed.length === 0 || observed.some((item) => item.model !== model || item.variant !== variant)
const actual = Array.from(new Set(observed.map((item) => `${item.model} (${item.variant ?? "default"})`))).join(", ")
return {
locale: plan.locale,
stdout: `${textFromEvents(result[0])}\nVerified session model: ${actual}\n`,
stderr: mismatch
? `Requested ${model} (${variant}), but session used ${actual || "no assistant model"}.\n`
: result[1],
code: mismatch ? 1 : 0,
}
}
function report(plan: { locale: Locale; domains: Domain[] }) {
const details = plan.domains
.map(
(domain) =>
`${domain.name}: ${domain.drift.missing.length} missing, ${domain.drift.extra.length} extra, ${domain.drift.placeholders.length} placeholder mismatches`,
)
.join("; ")
console.log(`[${plan.locale}] ${details}`)
}
function changed(drift: Drift) {
return drift.missing.length > 0 || drift.extra.length > 0 || drift.placeholders.length > 0
}
function isLocale(value: string): value is Locale {
return Object.hasOwn(languages, value)
}
function isDictionary(value: unknown): value is Dictionary {
if (typeof value !== "object" || value === null || Array.isArray(value)) return false
return Object.values(value).every((item) => typeof item === "string")
}
function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === "object" && value !== null && !Array.isArray(value)
}
async function resolveModelVariant(model: string, variant: string) {
const provider = model.split("/")[0]
if (!provider || !model.includes("/")) throw new Error(`Model must use provider/model syntax: ${model}`)
const env = isolatedEnvironment()
env.OPENCODE_DISABLE_PROJECT_CONFIG = "1"
const proc = Bun.spawn(["opencode", "--pure", "models", provider, "--verbose"], {
cwd: root,
env,
stdin: "ignore",
stdout: "pipe",
stderr: "pipe",
})
const result = await Promise.all([new Response(proc.stdout).text(), new Response(proc.stderr).text(), proc.exited])
if (result[2] !== 0) throw new Error(result[1] || `Unable to resolve model: ${model}`)
const variants = modelVariants(result[0], model)
if (!Object.hasOwn(variants, variant)) throw new Error(`Variant '${variant}' is not configured for ${model}.`)
return variants[variant]
}
function isolatedEnvironment() {
const env = { ...process.env }
delete env.OPENCODE_CONFIG
delete env.OPENCODE_CONFIG_DIR
delete env.OPENCODE_CONFIG_CONTENT
delete env.OPENCODE_PERMISSION
delete env.OPENCODE_AUTO_SHARE
return env
}
function escapeRegExp(value: string) {
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
}
export function textFromEvents(output: string) {
return output
.split(/\r?\n/)
.map((line) => line.trim())
.filter((line) => line.startsWith("{") && line.endsWith("}"))
.flatMap((line) => {
const event: unknown = JSON.parse(line)
if (!isRecord(event) || event.type !== "text" || !isRecord(event.part) || typeof event.part.text !== "string") {
return []
}
return [event.part.text.trim()]
})
.filter(Boolean)
.join("\n")
}
function tokens(value: string) {
return Array.from(value.matchAll(/{{\s*([^}]+?)\s*}}/g), (match) => match[1] ?? "").sort()
}
if (import.meta.main) {
main().catch((error) => {
console.error(error instanceof Error ? error.message : error)
process.exitCode = 1
})
}